Compare commits

...

82 commits

Author SHA1 Message Date
semantic-release-bot
12720055b4 chore(release): 1.15.5
## [1.15.5](https://code.castopod.org/adaures/castopod/compare/v1.15.4...v1.15.5) (2026-02-24)

### Bug Fixes

* **docker:** add arch-specific supercronic and s6-overlay services ([243ce3a](243ce3a45c)), closes [#580](https://code.castopod.org/adaures/castopod/issues/580)
2026-02-24 16:03:12 +00:00
Yassine Doghri
243ce3a45c
fix(docker): add arch-specific supercronic and s6-overlay services
fix #580
2026-02-24 15:53:52 +00:00
semantic-release-bot
30801b9b0b chore(release): 1.15.4
## [1.15.4](https://code.castopod.org/adaures/castopod/compare/v1.15.3...v1.15.4) (2026-02-19)

### Bug Fixes

* **emails:** display verification link in clear text for email clients only displaying text ([37c89df](37c89df342)), closes [#328](https://code.castopod.org/adaures/castopod/issues/328)
2026-02-19 13:10:56 +00:00
Yassine Doghri
37c89df342
fix(emails): display verification link in clear text for email clients only displaying text
closes #328
2026-02-19 14:00:46 +01:00
Yassine Doghri
8f8a6f2dc8
build(docker): set major version channel tags to prevent major breaking changes (1, 2-next, ...) 2026-02-19 14:00:38 +01:00
semantic-release-bot
a4878f5b46 chore(release): 1.15.3
## [1.15.3](https://code.castopod.org/adaures/castopod/compare/v1.15.2...v1.15.3) (2026-02-19)

### Bug Fixes

* **bundle:** include resources folder for icons during rsync ([70ca0c7](70ca0c7928)), closes [#588](https://code.castopod.org/adaures/castopod/issues/588)
2026-02-19 09:52:58 +00:00
Yassine Doghri
70ca0c7928
fix(bundle): include resources folder for icons during rsync
fixes #588
2026-02-19 10:43:19 +01:00
semantic-release-bot
33a13774ca chore(release): 1.15.2
## [1.15.2](https://code.castopod.org/adaures/castopod/compare/v1.15.1...v1.15.2) (2026-02-18)

### Bug Fixes

* **player:** load icons locally instead of relying on vimejs picking them from third party scripts ([0961987](0961987276)), closes [#551](https://code.castopod.org/adaures/castopod/issues/551)
2026-02-18 22:14:34 +00:00
Yassine Doghri
0961987276
fix(player): load icons locally instead of relying on vimejs picking them from third party scripts
- use codeigniter-vite to manage static resources
- update dependencies to latest

closes #551
2026-02-18 22:40:18 +01:00
Yassine Doghri
6cb9e6362a
build(docker): remove --progress flag for rsync when bundling castopod
this reduces logs verbosity for easier debugging
2026-02-17 22:20:11 +01:00
semantic-release-bot
835bbf9960 chore(release): 1.15.1
## [1.15.1](https://code.castopod.org/adaures/castopod/compare/v1.15.0...v1.15.1) (2026-02-17)

### Bug Fixes

* **docker:** create optimized builder with docker-container driver for arm64 builds ([89ae2b8](89ae2b89fd)), closes [#580](https://code.castopod.org/adaures/castopod/issues/580)
2026-02-17 21:06:44 +00:00
Yassine Doghri
96d98a0d41
docs(docker): add tip to encourage users to pin the castopod image version during production 2026-02-17 20:56:12 +00:00
Yassine Doghri
30db307d70
build(docker): push amd64 image before overwriting manifest with both amd64 and arm64 platforms 2026-02-17 20:07:58 +00:00
Yassine Doghri
89ae2b89fd
fix(docker): create optimized builder with docker-container driver for arm64 builds
closes #580
2026-02-16 23:37:57 +01:00
Yassine Doghri
49e363140a chore(release): 1.15.0
## [1.15.0](https://code.castopod.org/adaures/castopod/compare/v1.14.1...v1.15.0) (2026-02-16)

### Features

* **docker:** replace all-in-one image with FrankenPHP and Caddy based image + discard other images ([14089f0](14089f0542))
2026-02-16 00:19:00 +00:00
Yassine Doghri
14089f0542
feat(docker): replace all-in-one image with FrankenPHP and Caddy based image + discard other images
- use serversideup/php as a base image
- remove nginx unit base
- remove app / webserver images
- add bundle stage to remove pipeline dependency
- update docker setup docs
- edit gitlabci rules and release logic
2026-02-16 01:09:02 +01:00
semantic-release-bot
07247bf0d2 chore(release): 1.14.1 [skip ci]
## <small>1.14.1 (2026-01-31)</small>

* fix(i18n): set english as first item in supported locales in case locale negotiation does not work ([44fb904](44fb904))
2026-01-31 14:50:57 +00:00
Yassine Doghri
44fb904ba6
fix(i18n): set english as first item in supported locales in case locale negotiation does not work 2026-01-31 15:41:35 +01:00
semantic-release-bot
ea9ba5adc8 chore(release): 1.14.0 [skip ci]
## 1.14.0 (2026-01-23)

* feat: add Lithuanian and Czech languages ([9582f2a](9582f2a))
2026-01-23 16:46:10 +00:00
Yassine Doghri
9582f2a93f feat: add Lithuanian and Czech languages 2026-01-23 16:36:56 +00:00
semantic-release-bot
527f0c7a72 chore(release): 1.13.8 [skip ci]
## <small>1.13.8 (2025-12-20)</small>

* chore: update CI4 to v4.6.4 + php and js packages to latest ([133e308](133e308))
* fix(fediverse): match episode posts replies fields with comments in union query ([d438190](d438190)), closes [#577](https://code.castopod.org/adaures/castopod/issues/577)
2025-12-20 19:04:39 +00:00
Yassine Doghri
133e308603 chore: update CI4 to v4.6.4 + php and js packages to latest 2025-12-20 18:48:44 +00:00
Yassine Doghri
d438190b49 fix(fediverse): match episode posts replies fields with comments in union query
fixes #577
2025-12-20 15:59:02 +00:00
semantic-release-bot
8495bf8148 chore(release): 1.13.7 [skip ci]
## <small>1.13.7 (2025-11-03)</small>

* fix(rss): set person's avatar url to "federation" for width and height of 400px ([a50b0f3](a50b0f3))
2025-11-03 20:18:58 +00:00
Yassine Doghri
a50b0f330e fix(rss): set person's avatar url to "federation" for width and height of 400px 2025-11-03 20:07:31 +00:00
semantic-release-bot
b797a08f2e chore(release): 1.13.6 [skip ci]
## <small>1.13.6 (2025-11-03)</small>

* fix(fediverse): access to URI in 'object' instead of going down with '->id' in delete case ([41211a1](41211a1))
* build: update docker images' versions + docs to latest ([07e3a9c](07e3a9c))
2025-11-03 11:25:03 +00:00
Andreas Grupp
41211a140c fix(fediverse): access to URI in 'object' instead of going down with '->id' in delete case 2025-11-03 12:14:12 +01:00
Yassine Doghri
07e3a9c848 build: update docker images' versions + docs to latest
+ update dependencies to latest
2025-08-31 10:02:09 +00:00
semantic-release-bot
248739bde7 chore(release): 1.13.5 [skip ci]
## <small>1.13.5 (2025-08-25)</small>

* chore: add discourse social network ([08a3779](08a3779))
* chore: fix rector issues with filters' methods return types ([3d7969d](3d7969d))
* chore: update .releaserc to include more detailed release notes ([5b4403e](5b4403e))
* chore: update CI to v4.6.3 + all php and js dependencies ([842c4e4](842c4e4))
* fix(episodes): set dropdown menu for seasons / years to a maximum height with auto scroll ([f88abd2](f88abd2))
* fix(fediverse): add is_private field to posts to flag private posts and hide them from public views ([d5ef2ab](d5ef2ab))
2025-08-25 17:18:26 +00:00
Yassine Doghri
3d7969d1da chore: fix rector issues with filters' methods return types 2025-08-25 17:08:21 +00:00
Yassine Doghri
5b4403e87e chore: update .releaserc to include more detailed release notes 2025-08-25 16:50:21 +00:00
Yassine Doghri
f88abd26c8 fix(episodes): set dropdown menu for seasons / years to a maximum height with auto scroll 2025-08-25 16:46:45 +00:00
Yassine Doghri
842c4e4b79 chore: update CI to v4.6.3 + all php and js dependencies 2025-08-25 16:44:27 +00:00
Yassine Doghri
d5ef2ab86f fix(fediverse): add is_private field to posts to flag private posts and hide them from public views 2025-08-22 10:01:43 +00:00
kloo kloo
08a3779ee3 chore: add discourse social network 2025-08-22 10:01:43 +00:00
semantic-release-bot
7914066563 chore(release): 1.13.4 [skip ci]
## [1.13.4](https://code.castopod.org/adaures/castopod/compare/v1.13.3...v1.13.4) (2025-02-24)

### Bug Fixes

* **platforms:** add podcast id when deleting platforms on save ([019fbaf](019fbaf74d))
* return method instead of throwing a 404 when submitting a post ([44ad651](44ad651176)), closes [#550](https://code.castopod.org/adaures/castopod/issues/550)
2025-02-24 12:55:48 +00:00
Yassine Doghri
7aab03af58 ci(docs): update pnpm install script to v10 2025-02-24 12:45:07 +00:00
Yassine Doghri
019fbaf74d fix(platforms): add podcast id when deleting platforms on save
this prevents deleting other podcasts' platforms
2025-02-24 11:50:00 +00:00
Yassine Doghri
44ad651176 fix: return method instead of throwing a 404 when submitting a post
fixes #550
2025-02-24 11:49:03 +00:00
semantic-release-bot
7287e603e2 chore(release): 1.13.3 [skip ci]
## [1.13.3](https://code.castopod.org/adaures/castopod/compare/v1.13.2...v1.13.3) (2025-01-08)

### Bug Fixes

* remove exit function from podcast:import command to allow for episodes:compute-downloads to run ([3359abf](3359abf3fc))
2025-01-08 12:22:52 +00:00
Yassine Doghri
3359abf3fc fix: remove exit function from podcast:import command to allow for episodes:compute-downloads to run
- update CI4 to v4.5.7
- update php and js dependencies to latest
- reconfigure lint-staged
2025-01-08 12:11:18 +00:00
semantic-release-bot
4b0c0d7531 chore(release): 1.13.2 [skip ci]
## [1.13.2](https://code.castopod.org/adaures/castopod/compare/v1.13.1...v1.13.2) (2024-12-28)

### Bug Fixes

* add downloads_count to episodes table, computed every hour ([5182d5d](5182d5d67a))
2024-12-28 15:32:55 +00:00
Yassine Doghri
5182d5d67a fix: add downloads_count to episodes table, computed every hour
This removes computing latency when retrieving episodes list with download count in admin.
The more
analytics records, the more it took to calculate the sum of hits to get the downloads count for each
episode.
2024-12-28 15:23:02 +00:00
semantic-release-bot
d1c4091421 chore(release): 1.13.1 [skip ci]
## [1.13.1](https://code.castopod.org/adaures/castopod/compare/v1.13.0...v1.13.1) (2024-12-05)

### Bug Fixes

* **api:** cast integers when creating episode ([7ca501d](7ca501dd6f))
2024-12-05 09:45:20 +00:00
Nate Ritter
7ca501dd6f fix(api): cast integers when creating episode 2024-12-05 09:35:52 +00:00
Yassine Doghri
835ab8b248 docs(user-guide): update links for consistency + remove missing monetization links 2024-11-07 12:11:50 +00:00
Yassine Doghri
34374e823c chore: replace codeigniter-icons with php-icons v1.2.0
+ update dependencies to latest
2024-11-06 12:25:41 +00:00
Paul Cutler
be1d8c4876 docs: add user guide section 2024-11-06 11:40:28 +00:00
semantic-release-bot
3b90c5b5bd chore(release): 1.13.0 [skip ci]
# [1.13.0](https://code.castopod.org/adaures/castopod/compare/v1.12.11...v1.13.0) (2024-10-25)

### Features

* **api:** add Episode create and publish endpoints ([75cf78e](75cf78e972))
* **rss:** add option for 301 redirect to new feed url ([3a7d26f](3a7d26fdf9))
2024-10-25 14:03:26 +00:00
Nate Ritter
75cf78e972 feat(api): add Episode create and publish endpoints 2024-10-24 12:48:16 +00:00
Yassine Doghri
3a7d26fdf9 feat(rss): add option for 301 redirect to new feed url 2024-10-24 12:23:59 +00:00
semantic-release-bot
696250f041 chore(release): 1.12.11 [skip ci]
## [1.12.11](https://code.castopod.org/adaures/castopod/compare/v1.12.10...v1.12.11) (2024-10-16)

### Bug Fixes

* allow passing json to app.proxyIPs config to set it ([7d1460b](7d1460b8e0))
2024-10-16 11:52:06 +00:00
Yassine Doghri
7d1460b8e0 fix: allow passing json to app.proxyIPs config to set it 2024-10-16 11:42:06 +00:00
semantic-release-bot
a2af32abbd chore(release): 1.12.10 [skip ci]
## [1.12.10](https://code.castopod.org/adaures/castopod/compare/v1.12.9...v1.12.10) (2024-10-03)

### Bug Fixes

* set user as www-data when running cron jobs in docker's supervisord config ([be3b6db](be3b6db207))
2024-10-03 14:03:35 +00:00
Yassine Doghri
be3b6db207 fix: set user as www-data when running cron jobs in docker's supervisord config
This prevents any ownership issue when cron tasks create cache files
2024-10-03 13:16:26 +00:00
Yassine Doghri
bba13d80f7 build: update CI4 to v4.5.5 + php and js packages to latest 2024-09-24 10:35:55 +00:00
semantic-release-bot
61e8a4a717 chore(release): 1.12.9 [skip ci]
## [1.12.9](https://code.castopod.org/adaures/castopod/compare/v1.12.8...v1.12.9) (2024-08-16)

### Bug Fixes

* **fediverse:** add "processing" and "failed" statuses to better manage broadcast load ([cf9e072](cf9e0724fc)), closes [#511](https://code.castopod.org/adaures/castopod/issues/511)
2024-08-16 15:40:24 +00:00
Yassine Doghri
cf9e0724fc fix(fediverse): add "processing" and "failed" statuses to better manage broadcast load
fixes #511
2024-08-16 15:29:27 +00:00
semantic-release-bot
88d7c0b575 chore(release): 1.12.8 [skip ci]
## [1.12.8](https://code.castopod.org/adaures/castopod/compare/v1.12.7...v1.12.8) (2024-08-16)

### Bug Fixes

* **podcast-model:** always query podcast from database when clearing cache ([995ca5b](995ca5b197))
2024-08-16 13:05:26 +00:00
Yassine Doghri
995ca5b197 fix(podcast-model): always query podcast from database when clearing cache
this prevents from having any unexpected caching side effects
2024-08-16 12:54:44 +00:00
semantic-release-bot
7c98b55aa9 chore(release): 1.12.7 [skip ci]
## [1.12.7](https://code.castopod.org/adaures/castopod/compare/v1.12.6...v1.12.7) (2024-08-14)

### Bug Fixes

* **episode:** do not change slug when editing episode title ([89bf73b](89bf73b869)), closes [#513](https://code.castopod.org/adaures/castopod/issues/513)
* **preview:** delete episode preview cache after editing episode ([6a2cdd0](6a2cdd066e)), closes [#514](https://code.castopod.org/adaures/castopod/issues/514)
2024-08-14 10:45:13 +00:00
Yassine Doghri
89bf73b869 fix(episode): do not change slug when editing episode title
fixes #513
2024-08-14 10:34:27 +00:00
Yassine Doghri
6a2cdd066e fix(preview): delete episode preview cache after editing episode
fixes #514
2024-08-14 10:34:13 +00:00
semantic-release-bot
a3fbcc83d9 chore(release): 1.12.6 [skip ci]
## [1.12.6](https://code.castopod.org/adaures/castopod/compare/v1.12.5...v1.12.6) (2024-08-09)

### Bug Fixes

* **docker-image:** clear cache to account for new assets and data structure changes ([e41245d](e41245d2e7)), closes [#510](https://code.castopod.org/adaures/castopod/issues/510)
2024-08-09 13:32:09 +00:00
Yassine Doghri
e41245d2e7 fix(docker-image): clear cache to account for new assets and data structure changes
fixes #510
2024-08-09 13:21:18 +00:00
semantic-release-bot
66ce3e4703 chore(release): 1.12.5 [skip ci]
## [1.12.5](https://code.castopod.org/adaures/castopod/compare/v1.12.4...v1.12.5) (2024-07-30)

### Bug Fixes

* **rss:** add subscription id to cache name to prevent premium feeds from overlapping ([5310d86](5310d8648a))
2024-07-30 16:46:04 +00:00
Yassine Doghri
3d1fcc323d build: update CI4 to 4.5.4 + php and js dependencies to latest 2024-07-30 16:35:30 +00:00
Yassine Doghri
5310d8648a fix(rss): add subscription id to cache name to prevent premium feeds from overlapping 2024-07-30 16:20:57 +00:00
semantic-release-bot
ef1449b664 chore(release): 1.12.4 [skip ci]
## [1.12.4](https://code.castopod.org/adaures/castopod/compare/v1.12.3...v1.12.4) (2024-07-30)

### Bug Fixes

* **icons:** set correct names for lock and lock-unlock icons in premium banner ([94deaab](94deaab3cd))
* **premium-podcasts:** update query to validate subscription ([0e6d294](0e6d2945f2))
2024-07-30 11:10:51 +00:00
Yassine Doghri
0e6d2945f2 fix(premium-podcasts): update query to validate subscription 2024-07-30 10:59:47 +00:00
Yassine Doghri
94deaab3cd fix(icons): set correct names for lock and lock-unlock icons in premium banner 2024-07-30 09:40:50 +00:00
semantic-release-bot
83886c69ad chore(release): 1.12.3 [skip ci]
## [1.12.3](https://code.castopod.org/adaures/castopod/compare/v1.12.2...v1.12.3) (2024-07-04)

### Bug Fixes

* **audio-player:** set player icons to default instead of missing Castopod's ([c89d298](c89d29867e))
2024-07-04 14:52:05 +00:00
Yassine Doghri
c89d29867e fix(audio-player): set player icons to default instead of missing Castopod's 2024-07-04 14:37:54 +00:00
semantic-release-bot
0037160885 chore(release): 1.12.2 [skip ci]
## [1.12.2](https://code.castopod.org/adaures/castopod/compare/v1.12.1...v1.12.2) (2024-07-03)

### Bug Fixes

* broken icon call in frontend default pages template ([d8d2eb9](d8d2eb92b7))
2024-07-03 09:37:43 +00:00
Aonrud
d8d2eb92b7 fix: broken icon call in frontend default pages template 2024-07-03 09:19:11 +00:00
semantic-release-bot
dbaf80d88c chore(release): 1.12.1 [skip ci]
## [1.12.1](https://code.castopod.org/adaures/castopod/compare/v1.12.0...v1.12.1) (2024-07-01)

### Bug Fixes

* set correct icons parameters in map and funding links views ([b129813](b129813ea5)), closes [#500](https://code.castopod.org/adaures/castopod/issues/500)
2024-07-01 16:24:27 +00:00
Yassine Doghri
e9e5acb862 build: update CI to 4.5.3 + php and js dependencies to latest 2024-07-01 16:14:12 +00:00
Yassine Doghri
b129813ea5 fix: set correct icons parameters in map and funding links views
fixes #500
2024-07-01 15:38:16 +00:00
Yassine Doghri
a23ca6c4c7 docs: fix typo for "Introduction" label 2024-06-28 15:10:54 +00:00
semantic-release-bot
f07f561c88 chore(release): 1.12.0 [skip ci]
# [1.12.0](https://code.castopod.org/adaures/castopod/compare/v1.11.0...v1.12.0) (6/28/2024)

### Bug Fixes

* add missing php-icons config file to bundle ([56612f0](56612f0c76))
* **docs:** add base to og image using env variable ([fe67659](fe676590f2))
* **import:** rewrite download_file helper to output curl response directly to file ([eb7ad2f](eb7ad2f7e1))
* include app/Resources/icons folder to bundle ([3fd5efc](3fd5efc795))
* **platforms:** add platforms service + reduce memory consumption when rendering platform cards ([fe73e9f](fe73e9fae9))
* set owner email visibility when editing podcast ([fc4f982](fc4f982556)), closes [#473](https://code.castopod.org/adaures/castopod/issues/473)

### Features

* set owner email to hidden by default in podcast create form ([7a6d9df](7a6d9df6db))
* support podcast:txt tag with verify use case ([57e459e](57e459e187)), closes [#468](https://code.castopod.org/adaures/castopod/issues/468)
2024-06-28 14:52:36 +00:00
Yassine Doghri
4818fd1dd3 docs: add "latest" option to DocsVersionSelect based on main branch 2024-06-28 14:42:44 +00:00
crowdin
8833bc53cb chore(i18n): new Crowdin updates 2024-06-28 14:11:25 +00:00
841 changed files with 27197 additions and 59121 deletions

View file

@ -12,7 +12,7 @@ LABEL maintainer="Yassine Doghri <yassine@doghri.fr>"
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Install server requirements
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get update \
&& apt-get install --yes --no-install-recommends nodejs \
# gnupg to sign commits with gpg

68
.dockerignore Normal file
View file

@ -0,0 +1,68 @@
.env
.git/
node_modules/
vendor/
build/
docs/
scripts/
tests/
#-------------------------
# Temporary Files
#-------------------------
writable/cache/*
!writable/cache/index.html
writable/logs/*
!writable/logs/index.html
writable/session/*
!writable/session/index.html
writable/temp/*
!writable/temp/index.html
writable/uploads/*
!writable/uploads/index.html
writable/debugbar/*
!writable/debugbar/index.html
# public folder
public/*
!public/media
!public/.htaccess
!public/favicon.ico
!public/icon*
!public/castopod-banner*
!public/castopod-avatar*
!public/index.php
!public/robots.txt
!public/.well-known
!public/.well-known/GDPR.yml
public/assets/*
!public/assets/index.html
# public media folder
!public/media/podcasts
!public/media/persons
!public/media/site
public/media/podcasts/*
!public/media/podcasts/index.html
public/media/persons/*
!public/media/persons/index.html
public/media/site/*
!public/media/site/index.html
# Generated files
modules/Admin/Language/*/PersonsTaxonomy.php
# Castopod bundle & packages
castopod/
castopod-*.zip
castopod-*.tar.gz

View file

@ -1,18 +0,0 @@
{
"env": {
"browser": true,
"es2020": true
},
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
],
"parserOptions": {
"ecmaVersion": 11,
"sourceType": "module"
},
"rules": {}
}

30
.gitignore vendored
View file

@ -67,7 +67,7 @@ writable/uploads/*
!writable/uploads/index.html
writable/debugbar/*
!writable/debugbar/.gitkeep
!writable/debugbar/index.html
php_errors.log
@ -107,15 +107,15 @@ _modules/*
.idea/
*.iml
# Netbeans
nbproject/
build/
nbbuild/
dist/
nbdist/
nbactions.xml
nb-configuration.xml
.nb-gradle/
# NetBeans
/nbproject/
/build/
/nbbuild/
/dist/
/nbdist/
/nbactions.xml
/nb-configuration.xml
/.nb-gradle/
# Sublime Text
*.tmlanguage.cache
@ -128,6 +128,7 @@ nb-configuration.xml
# Visual Studio Code
.vscode/
.history/
tmp/
/results/
@ -174,15 +175,6 @@ public/media/site/*
# Generated files
modules/Admin/Language/*/PersonsTaxonomy.php
#-------------------------
# Docker volumes
#-------------------------
mariadb
phpmyadmin
sessions
data
# Castopod bundle & packages
castopod/
castopod-*.zip

View file

@ -1,4 +1,4 @@
image: code.castopod.org:5050/adaures/castopod:ci
image: code.castopod.org:5050/adaures/castopod:ci-php8.1
stages:
- prepare
@ -23,6 +23,10 @@ php-dependencies:
expire_in: 30 mins
paths:
- vendor/
rules:
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/
when: never
- when: on_success
js-dependencies:
stage: prepare
@ -39,6 +43,10 @@ js-dependencies:
expire_in: 30 mins
paths:
- node_modules/
rules:
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/
when: never
- when: on_success
lint-commit-msg:
stage: quality
@ -48,11 +56,10 @@ lint-commit-msg:
- ./scripts/lint-commit-msg.sh
dependencies:
- js-dependencies
only:
- develop
- main
- beta
- alpha
rules:
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/
when: never
- if: $CI_COMMIT_BRANCH =~ /^(develop|main|alpha|beta|next)$/
lint-php:
stage: quality
@ -65,16 +72,24 @@ lint-php:
- vendor/bin/rector process --dry-run --ansi
dependencies:
- php-dependencies
rules:
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/
when: never
- when: on_success
lint-js:
stage: quality
script:
- pnpm run prettier
- pnpm run format
- pnpm run typecheck
- pnpm run lint
- pnpm run lint:css
dependencies:
- js-dependencies
rules:
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/
when: never
- when: on_success
tests:
stage: quality
@ -86,13 +101,17 @@ tests:
MYSQL_USER: "castopod"
MYSQL_PASSWORD: "castopod"
script:
- echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mariadb "$MYSQL_DATABASE"
- echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mariadb "$MYSQL_DATABASE" --skip-ssl
# run phpunit without code coverage
# TODO: add code coverage
- vendor/bin/phpunit --no-coverage
dependencies:
- php-dependencies
rules:
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/
when: never
- when: on_success
bundle:
stage: bundle
@ -113,13 +132,12 @@ bundle:
name: "castopod-${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}"
paths:
- castopod
only:
variables:
- $CI_PROJECT_NAMESPACE == "adaures"
except:
- main
- beta
- alpha
rules:
- if: $CI_PROJECT_NAMESPACE != "adaures"
when: never
- if: $CI_COMMIT_BRANCH =~ /^(main|beta|alpha|next)$/ || $CI_COMMIT_TAG
when: never
- when: on_success
release:
stage: release
@ -143,38 +161,38 @@ release:
artifacts:
paths:
- castopod
- CP_VERSION.env
only:
- main
- beta
- alpha
rules:
- if: $CI_PROJECT_NAMESPACE != "adaures"
when: never
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/
when: never
- if: $CI_COMMIT_BRANCH =~ /^(main|alpha|beta|next)$/
website:
stage: deploy
trigger: adaures/castopod.org
only:
- main
- beta
- alpha
rules:
- if: $CI_PROJECT_NAMESPACE != "adaures"
when: never
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/ && $CI_COMMIT_TAG
documentation:
stage: deploy
trigger:
include: docs/.gitlab-ci.yml
strategy: depend
rules:
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/
when: never
- when: on_success
docker:
stage: build
trigger:
include: docker/production/.gitlab-ci.yml
strategy: depend
variables:
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
only:
refs:
- develop
- main
- beta
- alpha
variables:
- $CI_PROJECT_NAMESPACE == "adaures"
rules:
- if: $CI_PROJECT_NAMESPACE != "adaures"
when: never
- if: $CI_COMMIT_BRANCH == "develop"
- if: $CI_COMMIT_MESSAGE =~ /^chore\(release\):/ && $CI_COMMIT_TAG

View file

@ -11,8 +11,67 @@
}
],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
[
"@semantic-release/commit-analyzer",
{
"preset": "conventionalcommits",
"releaseRules": [
{
"type": "docs",
"scope": "README",
"release": "patch"
},
{
"type": "refactor",
"scope": "core-*",
"release": "minor"
},
{
"type": "refactor",
"release": "patch"
}
],
"parserOpts": {
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
}
}
],
[
"@semantic-release/release-notes-generator",
{
"preset": "conventionalcommits",
"parserOpts": {
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
},
"presetConfig": {
"types": [
{
"type": "feat",
"section": "Features"
},
{
"type": "fix",
"section": "Bug Fixes"
},
{
"type": "chore",
"section": "Internal",
"hidden": false
},
{
"type": "refactor",
"section": "Internal",
"hidden": false
},
{
"type": "perf",
"section": "Internal",
"hidden": false
}
]
}
}
],
"@semantic-release/changelog",
[
"@semantic-release/exec",
@ -30,7 +89,8 @@
"package.json",
"package-lock.json",
"CHANGELOG.md"
]
],
"message": "chore(release): ${nextRelease.version}\n\n${nextRelease.notes}"
}
],
[

View file

@ -1,7 +1,7 @@
# rsync filter rules to copy required files for Castopod's bundle
+ app/Resources/icons/***
- app/Resources/**
+ resources/icons/***
+ resources/
+ app/***
+ modules/***
+ public/***

View file

@ -1,3 +1,261 @@
## [1.15.5](https://code.castopod.org/adaures/castopod/compare/v1.15.4...v1.15.5) (2026-02-24)
### Bug Fixes
- **docker:** add arch-specific supercronic and s6-overlay services
([243ce3a](https://code.castopod.org/adaures/castopod/commit/243ce3a45c740352841bf67fe1ff63151f276eb9)),
closes [#580](https://code.castopod.org/adaures/castopod/issues/580)
## [1.15.4](https://code.castopod.org/adaures/castopod/compare/v1.15.3...v1.15.4) (2026-02-19)
### Bug Fixes
- **emails:** display verification link in clear text for email clients only
displaying text
([37c89df](https://code.castopod.org/adaures/castopod/commit/37c89df3424e4f67fb05c09094560df7edbd76d4)),
closes [#328](https://code.castopod.org/adaures/castopod/issues/328)
## [1.15.3](https://code.castopod.org/adaures/castopod/compare/v1.15.2...v1.15.3) (2026-02-19)
### Bug Fixes
- **bundle:** include resources folder for icons during rsync
([70ca0c7](https://code.castopod.org/adaures/castopod/commit/70ca0c7928cabb99a07de01cb4e12f5d81689bbe)),
closes [#588](https://code.castopod.org/adaures/castopod/issues/588)
## [1.15.2](https://code.castopod.org/adaures/castopod/compare/v1.15.1...v1.15.2) (2026-02-18)
### Bug Fixes
- **player:** load icons locally instead of relying on vimejs picking them from
third party scripts
([0961987](https://code.castopod.org/adaures/castopod/commit/096198727627b3dba9c5bd28f20e90cff680316b)),
closes [#551](https://code.castopod.org/adaures/castopod/issues/551)
## [1.15.1](https://code.castopod.org/adaures/castopod/compare/v1.15.0...v1.15.1) (2026-02-17)
### Bug Fixes
- **docker:** create optimized builder with docker-container driver for arm64
builds
([89ae2b8](https://code.castopod.org/adaures/castopod/commit/89ae2b89fd20fa31851a31fe44f514294fbcd688)),
closes [#580](https://code.castopod.org/adaures/castopod/issues/580)
## [1.15.0](https://code.castopod.org/adaures/castopod/compare/v1.14.1...v1.15.0) (2026-02-16)
### Features
- **docker:** replace all-in-one image with FrankenPHP and Caddy based image +
discard other images
([14089f0](https://code.castopod.org/adaures/castopod/commit/14089f0542ccdf187bd64bea8ad2787b9e8c7d59))
## <small>1.14.1 (2026-01-31)</small>
- fix(i18n): set english as first item in supported locales in case locale
negotiation does not work
([44fb904](https://code.castopod.org/adaures/castopod/commit/44fb904))
## 1.14.0 (2026-01-23)
- feat: add Lithuanian and Czech languages
([9582f2a](https://code.castopod.org/adaures/castopod/commit/9582f2a))
## <small>1.13.8 (2025-12-20)</small>
- chore: update CI4 to v4.6.4 + php and js packages to latest
([133e308](https://code.castopod.org/adaures/castopod/commit/133e308))
- fix(fediverse): match episode posts replies fields with comments in union
query ([d438190](https://code.castopod.org/adaures/castopod/commit/d438190)),
closes [#577](https://code.castopod.org/adaures/castopod/issues/577)
## <small>1.13.7 (2025-11-03)</small>
- fix(rss): set person's avatar url to "federation" for width and height of
400px ([a50b0f3](https://code.castopod.org/adaures/castopod/commit/a50b0f3))
## <small>1.13.6 (2025-11-03)</small>
- fix(fediverse): access to URI in 'object' instead of going down with '->id' in
delete case
([41211a1](https://code.castopod.org/adaures/castopod/commit/41211a1))
- build: update docker images' versions + docs to latest
([07e3a9c](https://code.castopod.org/adaures/castopod/commit/07e3a9c))
## <small>1.13.5 (2025-08-25)</small>
- chore: add discourse social network
([08a3779](https://code.castopod.org/adaures/castopod/commit/08a3779))
- chore: fix rector issues with filters' methods return types
([3d7969d](https://code.castopod.org/adaures/castopod/commit/3d7969d))
- chore: update .releaserc to include more detailed release notes
([5b4403e](https://code.castopod.org/adaures/castopod/commit/5b4403e))
- chore: update CI to v4.6.3 + all php and js dependencies
([842c4e4](https://code.castopod.org/adaures/castopod/commit/842c4e4))
- fix(episodes): set dropdown menu for seasons / years to a maximum height with
auto scroll
([f88abd2](https://code.castopod.org/adaures/castopod/commit/f88abd2))
- fix(fediverse): add is_private field to posts to flag private posts and hide
them from public views
([d5ef2ab](https://code.castopod.org/adaures/castopod/commit/d5ef2ab))
## [1.13.4](https://code.castopod.org/adaures/castopod/compare/v1.13.3...v1.13.4) (2025-02-24)
### Bug Fixes
- **platforms:** add podcast id when deleting platforms on save
([019fbaf](https://code.castopod.org/adaures/castopod/commit/019fbaf74ddd7427c3b7dfaef0d2e4409aab0e7c))
- return method instead of throwing a 404 when submitting a post
([44ad651](https://code.castopod.org/adaures/castopod/commit/44ad65117635b6292b4653bca7e22acecb025146)),
closes [#550](https://code.castopod.org/adaures/castopod/issues/550)
## [1.13.3](https://code.castopod.org/adaures/castopod/compare/v1.13.2...v1.13.3) (2025-01-08)
### Bug Fixes
- remove exit function from podcast:import command to allow for
episodes:compute-downloads to run
([3359abf](https://code.castopod.org/adaures/castopod/commit/3359abf3fc7d6ddf9db2cacc3e25f7c6d99e33a6))
## [1.13.2](https://code.castopod.org/adaures/castopod/compare/v1.13.1...v1.13.2) (2024-12-28)
### Bug Fixes
- add downloads_count to episodes table, computed every hour
([5182d5d](https://code.castopod.org/adaures/castopod/commit/5182d5d67aa3c6f7906d4603efcec4b48f048991))
## [1.13.1](https://code.castopod.org/adaures/castopod/compare/v1.13.0...v1.13.1) (2024-12-05)
### Bug Fixes
- **api:** cast integers when creating episode
([7ca501d](https://code.castopod.org/adaures/castopod/commit/7ca501dd6f426a1d50ffb1ea759f1e2cc91c1d13))
# [1.13.0](https://code.castopod.org/adaures/castopod/compare/v1.12.11...v1.13.0) (2024-10-25)
### Features
- **api:** add Episode create and publish endpoints
([75cf78e](https://code.castopod.org/adaures/castopod/commit/75cf78e972c52528dc38be050dcb1eb1f8e626fa))
- **rss:** add option for 301 redirect to new feed url
([3a7d26f](https://code.castopod.org/adaures/castopod/commit/3a7d26fdf9bfeffb9247f8efe06d9040ae2fe5ff))
## [1.12.11](https://code.castopod.org/adaures/castopod/compare/v1.12.10...v1.12.11) (2024-10-16)
### Bug Fixes
- allow passing json to app.proxyIPs config to set it
([7d1460b](https://code.castopod.org/adaures/castopod/commit/7d1460b8e08beb447389c604995efd931c84fd72))
## [1.12.10](https://code.castopod.org/adaures/castopod/compare/v1.12.9...v1.12.10) (2024-10-03)
### Bug Fixes
- set user as www-data when running cron jobs in docker's supervisord config
([be3b6db](https://code.castopod.org/adaures/castopod/commit/be3b6db207204e14c9ad5d4d84384b15e0dbfa84))
## [1.12.9](https://code.castopod.org/adaures/castopod/compare/v1.12.8...v1.12.9) (2024-08-16)
### Bug Fixes
- **fediverse:** add "processing" and "failed" statuses to better manage
broadcast load
([cf9e072](https://code.castopod.org/adaures/castopod/commit/cf9e0724fcdb8d0194676880cc3b088b221f5a38)),
closes [#511](https://code.castopod.org/adaures/castopod/issues/511)
## [1.12.8](https://code.castopod.org/adaures/castopod/compare/v1.12.7...v1.12.8) (2024-08-16)
### Bug Fixes
- **podcast-model:** always query podcast from database when clearing cache
([995ca5b](https://code.castopod.org/adaures/castopod/commit/995ca5b197f8f917102a108dd07d1f81e99cc8e6))
## [1.12.7](https://code.castopod.org/adaures/castopod/compare/v1.12.6...v1.12.7) (2024-08-14)
### Bug Fixes
- **episode:** do not change slug when editing episode title
([89bf73b](https://code.castopod.org/adaures/castopod/commit/89bf73b869c28c2fcffa3dcbc3660fac3b6bf988)),
closes [#513](https://code.castopod.org/adaures/castopod/issues/513)
- **preview:** delete episode preview cache after editing episode
([6a2cdd0](https://code.castopod.org/adaures/castopod/commit/6a2cdd066ee13efc6489901bbdcbcc5fea35cd71)),
closes [#514](https://code.castopod.org/adaures/castopod/issues/514)
## [1.12.6](https://code.castopod.org/adaures/castopod/compare/v1.12.5...v1.12.6) (2024-08-09)
### Bug Fixes
- **docker-image:** clear cache to account for new assets and data structure
changes
([e41245d](https://code.castopod.org/adaures/castopod/commit/e41245d2e758bce2a404749398bef89998638561)),
closes [#510](https://code.castopod.org/adaures/castopod/issues/510)
## [1.12.5](https://code.castopod.org/adaures/castopod/compare/v1.12.4...v1.12.5) (2024-07-30)
### Bug Fixes
- **rss:** add subscription id to cache name to prevent premium feeds from
overlapping
([5310d86](https://code.castopod.org/adaures/castopod/commit/5310d8648af6d43b9090f8d9f8066f7b3a8f0aa7))
## [1.12.4](https://code.castopod.org/adaures/castopod/compare/v1.12.3...v1.12.4) (2024-07-30)
### Bug Fixes
- **icons:** set correct names for lock and lock-unlock icons in premium banner
([94deaab](https://code.castopod.org/adaures/castopod/commit/94deaab3cd0912ff1a585bee174a096a84c68384))
- **premium-podcasts:** update query to validate subscription
([0e6d294](https://code.castopod.org/adaures/castopod/commit/0e6d2945f215453abbe7d9f90afd012d2507846b))
## [1.12.3](https://code.castopod.org/adaures/castopod/compare/v1.12.2...v1.12.3) (2024-07-04)
### Bug Fixes
- **audio-player:** set player icons to default instead of missing Castopod's
([c89d298](https://code.castopod.org/adaures/castopod/commit/c89d29867e122fe7d4d5563f0ab1e9993e2ece16))
## [1.12.2](https://code.castopod.org/adaures/castopod/compare/v1.12.1...v1.12.2) (2024-07-03)
### Bug Fixes
- broken icon call in frontend default pages template
([d8d2eb9](https://code.castopod.org/adaures/castopod/commit/d8d2eb92b741ecfc956b416db481f8c2dee84864))
## [1.12.1](https://code.castopod.org/adaures/castopod/compare/v1.12.0...v1.12.1) (2024-07-01)
### Bug Fixes
- set correct icons parameters in map and funding links views
([b129813](https://code.castopod.org/adaures/castopod/commit/b129813ea5d38436563639b51ec9ed2882644228)),
closes [#500](https://code.castopod.org/adaures/castopod/issues/500)
# [1.12.0](https://code.castopod.org/adaures/castopod/compare/v1.11.0...v1.12.0) (6/28/2024)
### Bug Fixes
- add missing php-icons config file to bundle
([56612f0](https://code.castopod.org/adaures/castopod/commit/56612f0c762aa2d98e3c8c77fba88ffdf6f46a44))
- **docs:** add base to og image using env variable
([fe67659](https://code.castopod.org/adaures/castopod/commit/fe676590f23a33bdbe8905d234760923c029e350))
- **import:** rewrite download_file helper to output curl response directly to
file
([eb7ad2f](https://code.castopod.org/adaures/castopod/commit/eb7ad2f7e1c0137f222f47e47062887de42c4824))
- include app/Resources/icons folder to bundle
([3fd5efc](https://code.castopod.org/adaures/castopod/commit/3fd5efc7956977acc19e53182f25b12813964a7d))
- **platforms:** add platforms service + reduce memory consumption when
rendering platform cards
([fe73e9f](https://code.castopod.org/adaures/castopod/commit/fe73e9fae9ea5d5ce946680aec194308bb2e620c))
- set owner email visibility when editing podcast
([fc4f982](https://code.castopod.org/adaures/castopod/commit/fc4f9825568cd4384c5b3cfe972accd146548807)),
closes [#473](https://code.castopod.org/adaures/castopod/issues/473)
### Features
- set owner email to hidden by default in podcast create form
([7a6d9df](https://code.castopod.org/adaures/castopod/commit/7a6d9df6db8a6184b8250ced0475f3e741dde7f4))
- support podcast:txt tag with verify use case
([57e459e](https://code.castopod.org/adaures/castopod/commit/57e459e187ed048430f4137172e22396cd02bf81)),
closes [#468](https://code.castopod.org/adaures/castopod/issues/468)
# [1.11.0](https://code.castopod.org/adaures/castopod/compare/v1.10.5...v1.11.0) (4/17/2024)
### Bug Fixes

View file

@ -146,12 +146,10 @@ To see your changes, go to:
- `http://localhost:8080/` for the Castopod website
- `http://localhost:8080/cp-admin` for the Castopod admin:
- email: **admin@castopod.local**
- password: **castopod**
- `http://localhost:8888/` for the phpmyadmin interface:
- username: **castopod**
- password: **castopod**
@ -294,7 +292,6 @@ You do not wish to use the VSCode devcontainer? No problem!
```
3. (optionnal) Populate the database with test data:
- Populate with fake podcast analytics:
```bash

View file

@ -71,8 +71,8 @@ experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
> [!NOTE]
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates) have
> been created for this project. You may use them to help you follow those
> guidelines.
## Feature requests

View file

@ -143,7 +143,7 @@ Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [Bluesky](https://bsky.app/profile/castopod.org)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)

View file

@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
namespace App\Commands;
use App\Models\EpisodeModel;
use CodeIgniter\CLI\BaseCommand;
class EpisodesComputeDownloads extends BaseCommand
{
/**
* The Command's Group
*
* @var string
*/
protected $group = 'Episodes';
/**
* The Command's Name
*
* @var string
*/
protected $name = 'episodes:compute-downloads';
/**
* The Command's Description
*
* @var string
*/
protected $description = "Calculates all episodes downloads and stores results in episodes' downloads_count field.";
/**
* Actually execute a command.
*/
public function run(array $params): void
{
$episodesModel = new EpisodeModel();
$query = $episodesModel->builder()
->select('episodes.id as id, IFNULL(SUM(ape.hits),0) as downloads_count')
->join('analytics_podcasts_by_episode ape', 'episodes.id=ape.episode_id', 'left')
->groupBy('episodes.id');
$episodeModel2 = new EpisodeModel();
$episodeModel2->builder()
->setQueryAsData($query)
->onConstraint('id')
->updateBatch();
}
}

View file

@ -37,7 +37,7 @@ if (! function_exists('view')) {
$renderer = single_service('renderer', $path);
$saveData = config('View')
->saveData;
->saveData;
if (array_key_exists('saveData', $options)) {
$saveData = (bool) $options['saveData'];

View file

@ -123,17 +123,19 @@ class App extends BaseConfig
* @var list<string>
*/
public array $supportedLocales = [
'en',
'en', // keep english language first in case locale negotiation does not work
'fr',
'pl',
'de',
'pt-br',
'nn-no',
'es',
'zh-hans',
'ca',
'br',
'ca',
'cs',
'de',
'es',
'lt',
'nn-no',
'pl',
'pt-br',
'sr-latn',
'zh-hans',
];
/**
@ -192,9 +194,9 @@ class App extends BaseConfig
* '192.168.5.0/24' => 'X-Real-IP',
* ]
*
* @var array<string, string>
* @var array<string, string>|string
*/
public array $proxyIPs = [];
public $proxyIPs = [];
/**
* --------------------------------------------------------------------------
@ -249,4 +251,36 @@ class App extends BaseConfig
public ?int $bandwidthLimit = null;
public ?string $legalNoticeURL = null;
/**
* AuthToken Config Constructor
*/
public function __construct()
{
parent::__construct();
if (is_string($this->proxyIPs)) {
$array = json_decode($this->proxyIPs, true);
if (is_array($array)) {
$this->proxyIPs = $array;
}
}
}
/**
* Override parent initEnvValue() to allow for direct setting to array properties values from ENV
*
* In order to set array properties via ENV vars we need to set the property to a string value first.
*
* @param mixed $property
*/
protected function initEnvValue(&$property, string $name, string $prefix, string $shortPrefix): void
{
// if attempting to set property from ENV, first set to empty string
if ($name === 'proxyIPs' && $this->getEnvValue($name, $prefix, $shortPrefix) !== null) {
$property = '';
}
parent::initEnvValue($property, $name, $prefix, $shortPrefix);
}
}

View file

@ -16,8 +16,6 @@ use CodeIgniter\Config\AutoloadConfig;
*
* NOTE: If you use an identical key in $psr4 or $classmap, then
* the values in this file will overwrite the framework's values.
*
* @immutable
*/
class Autoload extends AutoloadConfig
{
@ -108,5 +106,5 @@ class Autoload extends AutoloadConfig
*
* @var list<string>
*/
public $helpers = ['auth', 'setting', 'icons'];
public $helpers = ['auth', 'setting'];
}

View file

@ -36,18 +36,6 @@ class Cache extends BaseConfig
*/
public string $backupHandler = 'dummy';
/**
* --------------------------------------------------------------------------
* Cache Directory Path
* --------------------------------------------------------------------------
*
* The path to where cache files should be stored, if using a file-based
* system.
*
* @deprecated Use the driver-specific variant under $file
*/
public string $storePath = WRITEPATH . 'cache/';
/**
* --------------------------------------------------------------------------
* Key Prefix
@ -91,7 +79,7 @@ class Cache extends BaseConfig
* Your file storage preferences can be specified below, if you are using
* the File driver.
*
* @var array<string, string|int|null>
* @var array{storePath?: string, mode?: int}
*/
public array $file = [
'storePath' => WRITEPATH . 'cache/',
@ -107,7 +95,7 @@ class Cache extends BaseConfig
*
* @see https://codeigniter.com/user_guide/libraries/caching.html#memcached
*
* @var array<string, string|int|bool>
* @var array{host?: string, port?: int, weight?: int, raw?: bool}
*/
public array $memcached = [
'host' => '127.0.0.1',
@ -123,7 +111,7 @@ class Cache extends BaseConfig
* Your Redis server can be specified below, if you are using
* the Redis or Predis drivers.
*
* @var array<string, string|int|null>
* @var array{host?: string, password?: string|null, port?: int, timeout?: int, database?: int}
*/
public array $redis = [
'host' => '127.0.0.1',

View file

@ -11,7 +11,7 @@ declare(strict_types=1);
|
| NOTE: this constant is updated upon release with Continuous Integration.
*/
defined('CP_VERSION') || define('CP_VERSION', '1.11.0');
defined('CP_VERSION') || define('CP_VERSION', '1.15.5');
/*
| --------------------------------------------------------------------
@ -91,18 +91,3 @@ defined('EXIT_USER_INPUT') || define('EXIT_USER_INPUT', 7); // invalid user inpu
defined('EXIT_DATABASE') || define('EXIT_DATABASE', 8); // database error
defined('EXIT__AUTO_MIN') || define('EXIT__AUTO_MIN', 9); // lowest automatically-assigned error code
defined('EXIT__AUTO_MAX') || define('EXIT__AUTO_MAX', 125); // highest automatically-assigned error code
/**
* @deprecated Use \CodeIgniter\Events\Events::PRIORITY_LOW instead.
*/
define('EVENT_PRIORITY_LOW', 200);
/**
* @deprecated Use \CodeIgniter\Events\Events::PRIORITY_NORMAL instead.
*/
define('EVENT_PRIORITY_NORMAL', 100);
/**
* @deprecated Use \CodeIgniter\Events\Events::PRIORITY_HIGH instead.
*/
define('EVENT_PRIORITY_HIGH', 10);

View file

@ -85,7 +85,7 @@ class Cookie extends BaseConfig
* (empty string) means default SameSite attribute set by browsers (`Lax`)
* will be set on cookies. If set to `None`, `$secure` must also be set.
*
* @phpstan-var 'None'|'Lax'|'Strict'|''
* @var ''|'Lax'|'None'|'Strict'
*/
public string $samesite = 'Lax';

View file

@ -45,6 +45,7 @@ class Database extends Config
'failover' => [],
'port' => 3306,
'numberNative' => false,
'foundRows' => false,
'dateFormat' => [
'date' => 'Y-m-d',
'datetime' => 'Y-m-d H:i:s',
@ -78,6 +79,7 @@ class Database extends Config
'port' => 3306,
'foreignKeys' => true,
'busyTimeout' => 1000,
'synchronous' => null,
'dateFormat' => [
'date' => 'Y-m-d',
'datetime' => 'Y-m-d H:i:s',

View file

@ -4,9 +4,6 @@ declare(strict_types=1);
namespace Config;
/**
* @immutable
*/
class DocTypes
{
/**

View file

@ -50,11 +50,12 @@ Events::on('pre_system', static function (): void {
*/
if (CI_DEBUG && ! is_cli()) {
Events::on('DBQuery', Database::class . '::collect');
Services::toolbar()->respond();
service('toolbar')
->respond();
// Hot Reload route - for framework use on the hot reloader.
if (ENVIRONMENT === 'development') {
Services::routes()->get('__hot-reload', static function (): void {
service('routes')->get('__hot-reload', static function (): void {
(new HotReloader())->run();
});
}

View file

@ -62,12 +62,10 @@ class Exceptions extends BaseConfig
/**
* --------------------------------------------------------------------------
* LOG DEPRECATIONS INSTEAD OF THROWING?
* WHETHER TO THROW AN EXCEPTION ON DEPRECATED ERRORS
* --------------------------------------------------------------------------
* By default, CodeIgniter converts deprecations into exceptions. Also,
* starting in PHP 8.1 will cause a lot of deprecated usage warnings.
* Use this option to temporarily cease the warnings and instead log those.
* This option also works for user deprecations.
* If set to `true`, DEPRECATED errors are only logged and no exceptions are
* thrown. This option also works for user deprecations.
*/
public bool $logDeprecations = true;

View file

@ -12,9 +12,9 @@ use CodeIgniter\Config\BaseConfig;
class Feature extends BaseConfig
{
/**
* Use improved new auto routing instead of the default legacy version.
* Use improved new auto routing instead of the legacy version.
*/
public bool $autoRoutesImproved = false;
public bool $autoRoutesImproved = true;
/**
* Use filter execution order in 4.4 or before.
@ -28,4 +28,12 @@ class Feature extends BaseConfig
* If false, `limit(0)` returns no records. (the behavior of 3.1.9 or later in version 3.x.)
*/
public bool $limitZeroAsAll = true;
/**
* Use strict location negotiation.
*
* By default, the locale is selected based on a loose comparison of the language code (ISO 639-1)
* Enabling strict comparison will also consider the region code (ISO 3166-1 alpha-2).
*/
public bool $strictLocaleNegotiation = false;
}

View file

@ -67,13 +67,20 @@ class Filters extends BaseConfig
/**
* List of filter aliases that are always applied before and after every request.
*
* @var array<string, array<string, array<string, string|array<string>>>>>|array<string, list<string>>
* @var array{
* before: array<string, array{except: list<string>|string}>|list<string>,
* after: array<string, array{except: list<string>|string}>|list<string>
* }
*/
public array $globals = [
'before' => [
// 'honeypot',
'csrf' => [
'except' => ['@[a-zA-Z0-9\_]{1,32}/inbox'],
'except' => [
'@[a-zA-Z0-9\_]{1,32}/inbox',
'api/rest/v1/episodes',
'api/rest/v1/episodes/[0-9]+/publish',
],
],
// 'invalidchars',
],

View file

@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Config;
use CodeIgniter\Config\BaseConfig;
use CodeIgniter\Format\FormatterInterface;
use CodeIgniter\Format\JSONFormatter;
use CodeIgniter\Format\XMLFormatter;
@ -64,16 +63,4 @@ class Format extends BaseConfig
'application/xml' => 0,
'text/xml' => 0,
];
//--------------------------------------------------------------------
/**
* A Factory method to return the appropriate formatter for the given mime type.
*
* @deprecated This is an alias of `\CodeIgniter\Format\Format::getFormatter`. Use that instead.
*/
public function getFormatter(string $mime): FormatterInterface
{
return Services::format()->getFormatter($mime);
}
}

View file

@ -25,7 +25,7 @@ class Generators extends BaseConfig
*
* YOU HAVE BEEN WARNED!
*
* @var array<string, string>
* @var array<string, array<string, string>|string>
*/
public array $views = [
'make:cell' => [

View file

@ -130,7 +130,7 @@ class Images extends BaseConfig
],
];
public string $avatarDefaultPath = 'castopod-avatar.jpg';
public string $avatarDefaultPath = 'assets/images/castopod-avatar.jpg';
public string $avatarDefaultMimeType = 'image/jpg';
@ -139,31 +139,31 @@ class Images extends BaseConfig
*/
public array $podcastBannerDefaultPaths = [
'default' => [
'path' => 'castopod-banner-pine.jpg',
'path' => 'assets/images/castopod-banner-pine.jpg',
'mimetype' => 'image/jpeg',
],
'pine' => [
'path' => 'castopod-banner-pine.jpg',
'path' => 'assets/images/castopod-banner-pine.jpg',
'mimetype' => 'image/jpeg',
],
'crimson' => [
'path' => 'castopod-banner-crimson.jpg',
'path' => 'assets/images/castopod-banner-crimson.jpg',
'mimetype' => 'image/jpeg',
],
'amber' => [
'path' => 'castopod-banner-amber.jpg',
'path' => 'assets/images/castopod-banner-amber.jpg',
'mimetype' => 'image/jpeg',
],
'lake' => [
'path' => 'castopod-banner-lake.jpg',
'path' => 'assets/images/castopod-banner-lake.jpg',
'mimetype' => 'image/jpeg',
],
'jacaranda' => [
'path' => 'castopod-banner-jacaranda.jpg',
'path' => 'assets/images/castopod-banner-jacaranda.jpg',
'mimetype' => 'image/jpeg',
],
'onyx' => [
'path' => 'castopod-banner-onyx.jpg',
'path' => 'assets/images/castopod-banner-onyx.jpg',
'mimetype' => 'image/jpeg',
],
];

View file

@ -5,13 +5,11 @@ declare(strict_types=1);
namespace Config;
use Kint\Parser\ConstructablePluginInterface;
use Kint\Renderer\AbstractRenderer;
use Kint\Renderer\Rich\TabPluginInterface;
use Kint\Renderer\Rich\ValuePluginInterface;
/**
* --------------------------------------------------------------------------
* Kint
* --------------------------------------------------------------------------
*
* We use Kint's `RichRenderer` and `CLIRenderer`. This area contains options
@ -48,8 +46,6 @@ class Kint
public bool $richFolder = false;
public int $richSort = AbstractRenderer::SORT_FULL;
/**
* @var array<string, class-string<ValuePluginInterface>>|null
*/

View file

@ -6,6 +6,7 @@ namespace Config;
use CodeIgniter\Config\BaseConfig;
use CodeIgniter\Log\Handlers\FileHandler;
use CodeIgniter\Log\Handlers\HandlerInterface;
class Logger extends BaseConfig
{
@ -75,7 +76,7 @@ class Logger extends BaseConfig
* Handlers are executed in the order defined in this array, starting with
* the handler on top and continuing down.
*
* @var array<class-string, array<string, int|list<string>|string>>
* @var array<class-string<HandlerInterface>, array<string, int|list<string>|string>>
*/
public array $handlers = [
/*

View file

@ -5,8 +5,6 @@ declare(strict_types=1);
namespace Config;
/**
* Mimes
*
* This file contains an array of mime types. It is used by the Upload class to help identify allowed file types.
*
* When more than one variation for an extension exist (like jpg, jpeg, etc) the most common one should be first in the
@ -14,8 +12,6 @@ namespace Config;
*
* When working with mime types, please make sure you have the ´fileinfo´ extension enabled to reliably detect the
* media types.
*
* @immutable
*/
class Mimes
{
@ -283,7 +279,13 @@ class Mimes
'srt' => ['application/x-subrip', 'text/srt', 'text/plain', 'application/octet-stream'],
'vtt' => ['text/vtt', 'text/plain'],
'ico' => ['image/x-icon', 'image/x-ico', 'image/vnd.microsoft.icon'],
'stl' => ['application/sla', 'application/vnd.ms-pki.stl', 'application/x-navistyle'],
'stl' => [
'application/sla',
'application/vnd.ms-pki.stl',
'application/x-navistyle',
'model/stl',
'application/octet-stream',
],
];
/**

View file

@ -11,8 +11,6 @@ use CodeIgniter\Modules\Modules as BaseModules;
*
* NOTE: This class is required prior to Autoloader instantiation,
* and does not extend BaseConfig.
*
* @immutable
*/
class Modules extends BaseModules
{

View file

@ -9,8 +9,6 @@ namespace Config;
*
* NOTE: This class does not extend BaseConfig for performance reasons.
* So you cannot replace the property values with Environment Variables.
*
* @immutable
*/
class Optimize
{

View file

@ -5,14 +5,15 @@ declare(strict_types=1);
namespace Config;
/**
* Paths
*
* Holds the paths that are used by the system to locate the main directories, app, system, etc.
*
* Modifying these allows you to restructure your application, share a system folder between multiple applications, and
* more.
*
* All paths are relative to the project's root folder.
*
* NOTE: This class is required prior to Autoloader instantiation,
* and does not extend BaseConfig.
*/
class Paths
@ -72,7 +73,7 @@ class Paths
* This variable must contain the name of the directory that
* contains the view files used by your application. By
* default this is in `app/Views`. This value
* is used when no value is provided to `Services::renderer()`.
* is used when no value is provided to `service('renderer')`.
*/
public string $viewDirectory = __DIR__ . '/../Views';
}

View file

@ -4,14 +4,7 @@ declare(strict_types=1);
use CodeIgniter\Router\RouteCollection;
/**
* @var RouteCollection $routes
*
* --------------------------------------------------------------------
* Placeholder definitions
* --------------------------------------------------------------------
*/
/** @var RouteCollection $routes */
$routes->addPlaceholder('podcastHandle', '[a-zA-Z0-9\_]{1,32}');
$routes->addPlaceholder('slug', '[a-zA-Z0-9\-]{1,128}');
$routes->addPlaceholder('base64', '[A-Za-z0-9\.\_]+\-{0,2}');

View file

@ -136,7 +136,7 @@ class Routing extends BaseRouting
*
* If you enable this, $translateURIDashes is ignored.
*
* Default: false
* Default: true
*/
public bool $translateUriToCamelCase = false;
public bool $translateUriToCamelCase = true;
}

View file

@ -83,23 +83,4 @@ class Security extends BaseConfig
* @see https://codeigniter4.github.io/userguide/libraries/security.html#redirection-on-failure
*/
public bool $redirect = (ENVIRONMENT === 'production');
/**
* --------------------------------------------------------------------------
* CSRF SameSite
* --------------------------------------------------------------------------
*
* Setting for CSRF SameSite cookie token.
*
* Allowed values are: None - Lax - Strict - ''.
*
* Defaults to `Lax` as recommended in this link:
*
* @see https://portswigger.net/web-security/csrf/samesite-cookies
*
* @var string
*
* @deprecated `Config\Cookie` $samesite property is used.
*/
public $samesite = 'Lax';
}

View file

@ -8,9 +8,11 @@ use App\Libraries\Breadcrumb;
use App\Libraries\Negotiate;
use App\Libraries\Router;
use CodeIgniter\Config\BaseService;
use CodeIgniter\HTTP\Negotiate as CodeIgniterHTTPNegotiate;
use CodeIgniter\HTTP\Request;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\Router\RouteCollectionInterface;
use CodeIgniter\Router\Router as CodeIgniterRouter;
/**
* Services Configuration file.
@ -32,7 +34,7 @@ class Services extends BaseService
?RouteCollectionInterface $routes = null,
?Request $request = null,
bool $getShared = true
): Router {
): CodeIgniterRouter {
if ($getShared) {
return static::getSharedInstance('router', $routes, $request);
}
@ -47,8 +49,10 @@ class Services extends BaseService
* The Negotiate class provides the content negotiation features for working the request to determine correct
* language, encoding, charset, and more.
*/
public static function negotiator(?RequestInterface $request = null, bool $getShared = true): Negotiate
{
public static function negotiator(
?RequestInterface $request = null,
bool $getShared = true
): CodeIgniterHTTPNegotiate {
if ($getShared) {
return static::getSharedInstance('negotiator', $request);
}

View file

@ -4,10 +4,10 @@ declare(strict_types=1);
namespace Config;
use CodeIgniter\Config\BaseConfig;
use CodeIgniter\Tasks\Config\Tasks as BaseTasks;
use CodeIgniter\Tasks\Scheduler;
class Tasks extends BaseConfig
class Tasks extends BaseTasks
{
/**
* --------------------------------------------------------------------------
@ -17,7 +17,7 @@ class Tasks extends BaseConfig
* If true, will log the time it takes for each task to run.
* Requires the settings table to have been created previously.
*/
public bool $logPerformance = false;
public bool $logPerformance = true;
/**
* --------------------------------------------------------------------------
@ -51,5 +51,9 @@ class Tasks extends BaseConfig
$schedule->command('podcast:import')
->everyMinute()
->named('podcast-import');
$schedule->command('episodes:compute-downloads')
->everyHour()
->named('episodes:compute-downloads');
}
}

27
app/Config/Vite.php Normal file
View file

@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace Config;
use CodeIgniterVite\Config\Vite as CodeIgniterViteConfig;
class Vite extends CodeIgniterViteConfig
{
public string $environment = 'production';
public string $serverOrigin = 'http://localhost:5173';
public string $resourcesDir = 'resources';
public string $assetsDir = 'assets';
public string $manifest = '.vite/manifest.json';
public string $manifestCacheName = 'vite-manifest';
/**
* @var array<array{routes:list<string>,exclude?:list<string>,assets:list<string>}>
*/
public array $routesAssets = [];
}

View file

@ -49,19 +49,21 @@ abstract class BaseController extends Controller
*/
// protected $session;
/**
* Constructor.
*/
public function initController(
RequestInterface $request,
ResponseInterface $response,
LoggerInterface $logger
): void {
// Load here all helpers you want to be available in your controllers that extend BaseController.
// Caution: Do not put the this below the parent::initController() call below.
$this->helpers = [...$this->helpers, 'svg', 'components', 'misc', 'seo', 'premium_podcasts'];
// Do Not Edit This Line
// Caution: Do not edit this line.
parent::initController($request, $response, $logger);
// Preload any models, libraries, etc, here.
// $this->session = service('session');
Theme::setTheme('app');
}
}

View file

@ -21,7 +21,6 @@ use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\HTTP\URI;
use Config\Services;
use Modules\Analytics\Config\Analytics;
use Modules\PremiumPodcasts\Entities\Subscription;
use Modules\PremiumPodcasts\Models\SubscriptionModel;
@ -50,9 +49,6 @@ class EpisodeAudioController extends Controller
protected Analytics $analyticsConfig;
/**
* Constructor.
*/
public function initController(
RequestInterface $request,
ResponseInterface $response,
@ -133,7 +129,7 @@ class EpisodeAudioController extends Controller
}
}
$session = Services::session();
$session = service('session');
$serviceName = '';
if ($this->request->getGet('_from')) {

View file

@ -21,7 +21,6 @@ use CodeIgniter\Exceptions\PageNotFoundException;
use CodeIgniter\HTTP\Response;
use CodeIgniter\HTTP\ResponseInterface;
use Config\Embed;
use Config\Services;
use Modules\Analytics\AnalyticsTrait;
use Modules\Fediverse\Objects\OrderedCollectionObject;
use Modules\Fediverse\Objects\OrderedCollectionPage;
@ -293,7 +292,7 @@ class EpisodeController extends BaseController
$this->registerPodcastWebpageHit($this->episode->podcast_id);
}
$session = Services::session();
$session = service('session');
if (service('superglobals')->server('HTTP_REFERER') !== null) {
$session->set('embed_domain', parse_url(service('superglobals')->server('HTTP_REFERER'), PHP_URL_HOST));

View file

@ -33,14 +33,25 @@ class FeedController extends Controller
public function index(string $podcastHandle): ResponseInterface
{
helper(['rss', 'premium_podcasts', 'misc']);
$podcast = (new PodcastModel())->where('handle', $podcastHandle)
->first();
if (! $podcast instanceof Podcast) {
throw PageNotFoundException::forPageNotFound();
}
// 301 redirect to new feed?
$redirectToNewFeed = service('settings')
->get('Podcast.redirect_to_new_feed', 'podcast:' . $podcast->id);
if ($redirectToNewFeed && $podcast->new_feed_url !== null && filter_var(
$podcast->new_feed_url,
FILTER_VALIDATE_URL
) && $podcast->new_feed_url !== current_url()) {
return redirect()->to($podcast->new_feed_url, 301);
}
helper(['rss', 'premium_podcasts', 'misc']);
$service = null;
try {
$service = UserAgentsRSS::find(service('superglobals')->server('HTTP_USER_AGENT'));
@ -66,7 +77,7 @@ class FeedController extends Controller
"podcast#{$podcast->id}",
'feed',
$service ? $serviceSlug : null,
$subscription instanceof Subscription ? 'unlocked' : null,
$subscription instanceof Subscription ? "subscription#{$subscription->id}" : null,
]),
);

View file

@ -45,7 +45,7 @@ class MapController extends BaseController
if (! ($found = cache($cacheName))) {
$episodes = (new EpisodeModel())
->where('`published_at` <= UTC_TIMESTAMP()', null, false)
->where('location_geo is not', null)
->where('location_geo is not')
->findAll();
$found = [];
foreach ($episodes as $episode) {

View file

@ -52,16 +52,28 @@ class PostController extends FediversePostController
$this->podcast = $podcast;
$this->actor = $this->podcast->actor;
if (
count($params) > 1 &&
($post = (new PostModel())->getPostById($params[1])) instanceof CastopodPost
) {
$this->post = $post;
if (count($params) <= 1) {
unset($params[0]);
unset($params[1]);
return $this->{$method}(...$params);
}
if (
! ($post = (new PostModel())->getPostById($params[1])) instanceof CastopodPost
) {
throw PageNotFoundException::forPageNotFound();
}
$this->post = $post;
// show 404 if post is private
if ($this->post->is_private && ! can_user_interact()) {
throw PageNotFoundException::forPageNotFound();
}
unset($params[0]);
unset($params[1]);
return $this->{$method}(...$params);
}
@ -72,10 +84,6 @@ class PostController extends FediversePostController
$this->registerPodcastWebpageHit($this->podcast->id);
}
if (! $this->post instanceof CastopodPost) {
throw PageNotFoundException::forPageNotFound();
}
$cacheName = implode(
'_',
array_filter([
@ -180,6 +188,7 @@ class PostController extends FediversePostController
'actor_id' => interact_as_actor_id(),
'in_reply_to_id' => $this->post->id,
'message' => $validData['message'],
'is_private' => $this->post->is_private,
'published_at' => Time::now(),
'created_by' => user_id(),
]);

View file

@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class AddEpisodeDownloadsCount extends Migration
{
public function up(): void
{
$fields = [
'downloads_count' => [
'type' => 'INT',
'unsigned' => true,
'default' => 0,
'after' => 'is_published_on_hubs',
],
];
$this->forge->addColumn('episodes', $fields);
}
public function down(): void
{
$this->forge->dropColumn('episodes', 'downloads_count');
}
}

View file

@ -12,7 +12,6 @@ namespace App\Entities;
use App\Models\PodcastModel;
use Modules\Fediverse\Entities\Actor as FediverseActor;
use RuntimeException;
/**
* @property Podcast|null $podcast
@ -31,10 +30,6 @@ class Actor extends FediverseActor
public function getPodcast(): ?Podcast
{
if ($this->id === null) {
throw new RuntimeException('Podcast id must be set before getting associated podcast.');
}
if (! $this->podcast instanceof Podcast) {
$this->podcast = (new PodcastModel())->getPodcastByActorId($this->id);
}

View file

@ -15,7 +15,7 @@ use CodeIgniter\Entity\Entity;
/**
* @property int $id
* @property int $parent_id
* @property int|null $parent_id
* @property Category|null $parent
* @property string $code
* @property string $apple_category

View file

@ -36,7 +36,7 @@ use Modules\Media\Models\MediaModel;
* @property string $type
* @property int|null $media_id
* @property Video|Audio|null $media
* @property array|null $metadata
* @property array<mixed>|null $metadata
* @property string $status
* @property string $logs
* @property User $user
@ -136,7 +136,7 @@ class BaseClip extends Entity
$media = new Audio([
'file_key' => $fileKey,
'language_code' => $this->getPodcast()
->language_code,
->language_code,
'uploaded_by' => $this->attributes['updated_by'],
'updated_by' => $this->attributes['updated_by'],
]);

View file

@ -15,7 +15,7 @@ use Modules\Media\Entities\Video;
use Modules\Media\Models\MediaModel;
/**
* @property array $theme
* @property array{name:string,preview:string} $theme
* @property string $format
*/
class VideoClip extends BaseClip
@ -73,7 +73,7 @@ class VideoClip extends BaseClip
$video = new Video([
'file_key' => $fileKey,
'language_code' => $this->getPodcast()
->language_code,
->language_code,
'uploaded_by' => $this->attributes['created_by'],
'updated_by' => $this->attributes['created_by'],
]);

View file

@ -55,10 +55,6 @@ class Credit extends Entity
public function getPerson(): ?Person
{
if ($this->person_id === null) {
throw new RuntimeException('Credit must have person_id before getting person.');
}
if (! $this->person instanceof Person) {
$this->person = (new PersonModel())->getPersonById($this->person_id);
}
@ -68,10 +64,6 @@ class Credit extends Entity
public function getPodcast(): ?Podcast
{
if ($this->podcast_id === null) {
throw new RuntimeException('Credit must have podcast_id before getting podcast.');
}
if (! $this->podcast instanceof Podcast) {
$this->podcast = (new PodcastModel())->getPodcastById($this->podcast_id);
}
@ -94,10 +86,6 @@ class Credit extends Entity
public function getGroupLabel(): string
{
if ($this->person_group === null) {
return '';
}
/** @var string */
return lang("PersonsTaxonomy.persons.{$this->person_group}.label");
}

View file

@ -35,7 +35,6 @@ use Modules\Media\Entities\Chapters;
use Modules\Media\Entities\Image;
use Modules\Media\Entities\Transcript;
use Modules\Media\Models\MediaModel;
use RuntimeException;
use SimpleXMLElement;
/**
@ -66,19 +65,19 @@ use SimpleXMLElement;
* @property string|null $chapters_remote_url
* @property string|null $parental_advisory
* @property int $number
* @property int $season_number
* @property int|null $season_number
* @property string $type
* @property bool $is_blocked
* @property Location|null $location
* @property string|null $location_name
* @property string|null $location_geo
* @property string|null $location_osm
* @property array|null $custom_rss
* @property array<string|int,mixed>|null $custom_rss
* @property string $custom_rss_string
* @property bool $is_published_on_hubs
* @property int $downloads_count
* @property int $posts_count
* @property int $comments_count
* @property int $downloads
* @property EpisodeComment[]|null $comments
* @property bool $is_premium
* @property int $created_by
@ -116,8 +115,6 @@ class Episode extends Entity
protected ?Chapters $chapters = null;
protected int $downloads = 0;
/**
* @var Person[]|null
*/
@ -178,6 +175,7 @@ class Episode extends Entity
'location_osm' => '?string',
'custom_rss' => '?json-array',
'is_published_on_hubs' => 'boolean',
'downloads_count' => 'integer',
'posts_count' => 'integer',
'comments_count' => 'integer',
'is_premium' => 'boolean',
@ -201,7 +199,7 @@ class Episode extends Entity
$cover = new Image([
'file_key' => 'podcasts/' . $this->getPodcast()->handle . '/' . $this->attributes['slug'] . '.' . $file->getExtension(),
'sizes' => config('Images')
->podcastCoverSizes,
->podcastCoverSizes,
'uploaded_by' => $this->attributes['updated_by'],
'updated_by' => $this->attributes['updated_by'],
]);
@ -284,7 +282,7 @@ class Episode extends Entity
$transcript = new Transcript([
'file_key' => 'podcasts/' . $this->getPodcast()->handle . '/' . $this->attributes['slug'] . '-transcript.' . $file->getExtension(),
'language_code' => $this->getPodcast()
->language_code,
->language_code,
'uploaded_by' => $this->attributes['updated_by'],
'updated_by' => $this->attributes['updated_by'],
]);
@ -321,7 +319,7 @@ class Episode extends Entity
$chapters = new Chapters([
'file_key' => 'podcasts/' . $this->getPodcast()->handle . '/' . $this->attributes['slug'] . '-chapters' . '.' . $file->getExtension(),
'language_code' => $this->getPodcast()
->language_code,
->language_code,
'uploaded_by' => $this->attributes['updated_by'],
'updated_by' => $this->attributes['updated_by'],
]);
@ -347,10 +345,10 @@ class Episode extends Entity
$audioURL = url_to(
'episode-audio',
$this->getPodcast()
->handle,
->handle,
$this->slug,
$this->getAudio()
->file_extension
->file_extension
);
// Wrap episode url with OP3 if episode is public and OP3 is enabled on this podcast
@ -407,10 +405,6 @@ class Episode extends Entity
*/
public function getPersons(): array
{
if ($this->id === null) {
throw new RuntimeException('Episode must be created before getting persons.');
}
if ($this->persons === null) {
$this->persons = (new PersonModel())->getEpisodePersons($this->podcast_id, $this->id);
}
@ -425,10 +419,6 @@ class Episode extends Entity
*/
public function getSoundbites(): array
{
if ($this->id === null) {
throw new RuntimeException('Episode must be created before getting soundbites.');
}
if ($this->soundbites === null) {
$this->soundbites = (new ClipModel())->getEpisodeSoundbites($this->getPodcast()->id, $this->id);
}
@ -441,10 +431,6 @@ class Episode extends Entity
*/
public function getPosts(): array
{
if ($this->id === null) {
throw new RuntimeException('Episode must be created before getting posts.');
}
if ($this->posts === null) {
$this->posts = (new PostModel())->getEpisodePosts($this->id);
}
@ -457,10 +443,6 @@ class Episode extends Entity
*/
public function getComments(): array
{
if ($this->id === null) {
throw new RuntimeException('Episode must be created before getting comments.');
}
if ($this->comments === null) {
$this->comments = (new EpisodeCommentModel())->getEpisodeComments($this->id);
}
@ -535,7 +517,7 @@ class Episode extends Entity
if ($this->getPodcast()->episode_description_footer_html) {
$descriptionHtml .= "<footer>{$this->getPodcast()
->episode_description_footer_html}</footer>";
->episode_description_footer_html}</footer>";
}
return $descriptionHtml;
@ -713,10 +695,6 @@ class Episode extends Entity
*/
public function getClipCount(): int|string
{
if ($this->id === null) {
throw new RuntimeException('Episode must be created before getting number of video clips.');
}
return (new ClipModel())->getClipCount($this->podcast_id, $this->id);
}
}

View file

@ -24,7 +24,7 @@ use RuntimeException;
* @property Episode|null $episode
* @property int $actor_id
* @property Actor|null $actor
* @property string $in_reply_to_id
* @property string|null $in_reply_to_id
* @property EpisodeComment|null $reply_to_comment
* @property string $message
* @property string $message_html
@ -75,10 +75,6 @@ class EpisodeComment extends UuidEntity
public function getEpisode(): ?Episode
{
if ($this->episode_id === null) {
throw new RuntimeException('Comment must have an episode_id before getting episode.');
}
if (! $this->episode instanceof Episode) {
$this->episode = (new EpisodeModel())->getEpisodeById($this->episode_id);
}
@ -91,10 +87,6 @@ class EpisodeComment extends UuidEntity
*/
public function getActor(): ?Actor
{
if ($this->actor_id === null) {
throw new RuntimeException('Comment must have an actor_id before getting actor.');
}
if (! $this->actor instanceof Actor) {
$this->actor = model(ActorModel::class, false)
->getActorById($this->actor_id);
@ -108,9 +100,6 @@ class EpisodeComment extends UuidEntity
*/
public function getReplies(): array
{
if ($this->id === null) {
throw new RuntimeException('Comment must be created before getting replies.');
}
if ($this->replies === null) {
$this->replies = (new EpisodeCommentModel())->getCommentReplies($this->id);

View file

@ -11,7 +11,6 @@ declare(strict_types=1);
namespace App\Entities;
use CodeIgniter\Entity\Entity;
use Config\Services;
/**
* @property string $url
@ -85,7 +84,7 @@ class Location extends Entity
*/
public function fetchOsmLocation(): static
{
$client = Services::curlrequest();
$client = service('curlrequest');
$response = $client->request(
'GET',

View file

@ -23,7 +23,7 @@ use RuntimeException;
* @property string $full_name
* @property string $unique_name
* @property string|null $information_url
* @property int $avatar_id
* @property int|null $avatar_id
* @property ?Image $avatar
* @property int $created_by
* @property int $updated_by
@ -72,7 +72,7 @@ class Person extends Entity
$avatar = new Image([
'file_key' => 'persons/' . $this->attributes['unique_name'] . '.' . $file->getExtension(),
'sizes' => config('Images')
->personAvatarSizes,
->personAvatarSizes,
'uploaded_by' => $this->attributes['updated_by'],
'updated_by' => $this->attributes['updated_by'],
]);

View file

@ -56,7 +56,7 @@ use RuntimeException;
* @property string $language_code
* @property int $category_id
* @property Category|null $category
* @property int[] $other_categories_ids
* @property int[]|null $other_categories_ids
* @property Category[] $other_categories
* @property string|null $parental_advisory
* @property string|null $publisher
@ -78,7 +78,7 @@ use RuntimeException;
* @property string|null $location_geo
* @property string|null $location_osm
* @property string|null $payment_pointer
* @property array|null $custom_rss
* @property array<string|int,mixed>|null $custom_rss
* @property bool $is_op3_enabled
* @property string $op3_url
* @property string $custom_rss_string
@ -125,7 +125,7 @@ class Podcast extends Entity
protected ?array $other_categories = null;
/**
* @var string[]|null
* @var int[]|null
*/
protected ?array $other_categories_ids = null;
@ -255,7 +255,7 @@ class Podcast extends Entity
$cover = new Image([
'file_key' => 'podcasts/' . $this->attributes['handle'] . '/cover.' . $file->getExtension(),
'sizes' => config('Images')
->podcastCoverSizes,
->podcastCoverSizes,
'uploaded_by' => $this->attributes['updated_by'],
'updated_by' => $this->attributes['updated_by'],
]);
@ -298,7 +298,7 @@ class Podcast extends Entity
$banner = new Image([
'file_key' => 'podcasts/' . $this->attributes['handle'] . '/banner.' . $file->getExtension(),
'sizes' => config('Images')
->podcastBannerSizes,
->podcastBannerSizes,
'uploaded_by' => $this->attributes['updated_by'],
'updated_by' => $this->attributes['updated_by'],
]);
@ -340,10 +340,6 @@ class Podcast extends Entity
*/
public function getEpisodes(): array
{
if ($this->id === null) {
throw new RuntimeException('Podcast must be created before getting episodes.');
}
if ($this->episodes === null) {
$this->episodes = (new EpisodeModel())->getPodcastEpisodes($this->id, $this->type);
}
@ -356,10 +352,6 @@ class Podcast extends Entity
*/
public function getEpisodesCount(): int|string
{
if ($this->id === null) {
throw new RuntimeException('Podcast must be created before getting number of episodes.');
}
return (new EpisodeModel())->getPodcastEpisodesCount($this->id);
}
@ -370,10 +362,6 @@ class Podcast extends Entity
*/
public function getPersons(): array
{
if ($this->id === null) {
throw new RuntimeException('Podcast must be created before getting persons.');
}
if ($this->persons === null) {
$this->persons = (new PersonModel())->getPodcastPersons($this->id);
}
@ -386,10 +374,6 @@ class Podcast extends Entity
*/
public function getCategory(): ?Category
{
if ($this->id === null) {
throw new RuntimeException('Podcast must be created before getting category.');
}
if (! $this->category instanceof Category) {
$this->category = (new CategoryModel())->getCategoryById($this->category_id);
}
@ -404,10 +388,6 @@ class Podcast extends Entity
*/
public function getSubscriptions(): array
{
if ($this->id === null) {
throw new RuntimeException('Podcasts must be created before getting subscriptions.');
}
if ($this->subscriptions === null) {
$this->subscriptions = (new SubscriptionModel())->getPodcastSubscriptions($this->id);
}
@ -422,10 +402,6 @@ class Podcast extends Entity
*/
public function getContributors(): array
{
if ($this->id === null) {
throw new RuntimeException('Podcasts must be created before getting contributors.');
}
if ($this->contributors === null) {
$this->contributors = (new UserModel())->getPodcastContributors($this->id);
}
@ -523,10 +499,6 @@ class Podcast extends Entity
*/
public function getPodcastingPlatforms(): array
{
if ($this->id === null) {
throw new RuntimeException('Podcast must be created before getting podcasting platform links.');
}
if ($this->podcasting_platforms === null) {
$this->podcasting_platforms = (new PlatformModel())->getPlatforms($this->id, 'podcasting');
}
@ -541,10 +513,6 @@ class Podcast extends Entity
*/
public function getSocialPlatforms(): array
{
if ($this->id === null) {
throw new RuntimeException('Podcast must be created before getting social platform links.');
}
if ($this->social_platforms === null) {
$this->social_platforms = (new PlatformModel())->getPlatforms($this->id, 'social');
}
@ -559,9 +527,6 @@ class Podcast extends Entity
*/
public function getFundingPlatforms(): array
{
if ($this->id === null) {
throw new RuntimeException('Podcast must be created before getting funding platform links.');
}
if ($this->funding_platforms === null) {
$this->funding_platforms = (new PlatformModel())->getPlatforms($this->id, 'funding');
@ -575,10 +540,6 @@ class Podcast extends Entity
*/
public function getOtherCategories(): array
{
if ($this->id === null) {
throw new RuntimeException('Podcast must be created before getting other categories.');
}
if ($this->other_categories === null) {
$this->other_categories = (new CategoryModel())->getPodcastCategories($this->id);
}

View file

@ -34,6 +34,7 @@ class Post extends FediversePost
'episode_id' => '?integer',
'message' => 'string',
'message_html' => 'string',
'is_private' => 'boolean',
'favourites_count' => 'integer',
'reblogs_count' => 'integer',
'replies_count' => 'integer',

View file

@ -12,22 +12,24 @@ class AllowCorsFilter implements FilterInterface
{
/**
* @param string[]|null $arguments
* @return RequestInterface|ResponseInterface|string|null
*/
public function before(RequestInterface $request, $arguments = null): void
public function before(RequestInterface $request, $arguments = null)
{
// Do something here
return null;
}
/**
* @param string[]|null $arguments
* @return ResponseInterface|void
*/
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null): void
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
if (! $response->hasHeader('Cache-Control')) {
$response->setHeader('Cache-Control', 'public, max-age=86400');
}
$response->setHeader('Access-Control-Allow-Origin', '*') // for allowing any domain, insecure
return $response->setHeader('Access-Control-Allow-Origin', '*') // for allowing any domain, insecure
->setHeader('Access-Control-Allow-Headers', '*') // for allowing any headers, insecure
->setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS') // allows GET and OPTIONS methods only
->setHeader('Access-Control-Max-Age', '86400');

View file

@ -8,8 +8,6 @@ declare(strict_types=1);
* @link https://castopod.org/
*/
use Config\Services;
if (! function_exists('render_breadcrumb')) {
/**
* Renders the breadcrumb navigation through the Breadcrumb service
@ -19,7 +17,7 @@ if (! function_exists('render_breadcrumb')) {
*/
function render_breadcrumb(string $class = null): string
{
$breadcrumb = Services::breadcrumb();
$breadcrumb = service('breadcrumb');
return $breadcrumb->render($class);
}
}
@ -30,7 +28,7 @@ if (! function_exists('replace_breadcrumb_params')) {
*/
function replace_breadcrumb_params(array $newParams): void
{
$breadcrumb = Services::breadcrumb();
$breadcrumb = service('breadcrumb');
$breadcrumb->replaceParams(esc($newParams));
}
}

View file

@ -158,20 +158,20 @@ if (! function_exists('publication_button')) {
$label = lang('Episode.publish');
$route = route_to('episode-publish', $podcastId, $episodeId);
$variant = 'primary';
$iconLeft = 'upload-cloud-fill'; // @icon('upload-cloud-fill')
$iconLeft = 'upload-cloud-fill'; // @icon("upload-cloud-fill")
break;
case 'with_podcast':
case 'scheduled':
$label = lang('Episode.publish_edit');
$route = route_to('episode-publish_edit', $podcastId, $episodeId);
$variant = 'warning';
$iconLeft = 'upload-cloud-fill'; // @icon('upload-cloud-fill')
$iconLeft = 'upload-cloud-fill'; // @icon("upload-cloud-fill")
break;
case 'published':
$label = lang('Episode.unpublish');
$route = route_to('episode-unpublish', $podcastId, $episodeId);
$variant = 'danger';
$iconLeft = 'cloud-off-fill'; // @icon('cloud-off-fill')
$iconLeft = 'cloud-off-fill'; // @icon("cloud-off-fill")
break;
default:
$label = '';
@ -381,15 +381,15 @@ if (! function_exists('audio_player')) {
id="castopod-vm-player"
theme="light"
language="{$language}"
icons="castopod-icons"
class="{$class} relative z-0"
icons="castopod-vm-player-icons"
style="--vm-player-box-shadow:0; --vm-player-theme: hsl(var(--color-accent-base)); --vm-control-focus-color: hsl(var(--color-accent-contrast)); --vm-control-spacing: 4px; --vm-menu-item-focus-bg: hsl(var(--color-background-highlight));"
>
<vm-audio preload="none">
<source src="{$source}" type="{$mediaType}" />
</vm-audio>
<vm-ui>
<vm-icon-library name="castopod-icons"></vm-icon-library>
<vm-icon-library name="castopod-vm-player-icons"></vm-icon-library>
<vm-controls full-width>
<vm-playback-control></vm-playback-control>
<vm-volume-control></vm-volume-control>

View file

@ -210,7 +210,7 @@ if (! function_exists('get_podcast_banner')) {
)->podcastBannerDefaultPaths['default'];
$sizes = config('Images')
->podcastBannerSizes;
->podcastBannerSizes;
$sizeConfig = $sizes[$size];
helper('filesystem');
@ -231,7 +231,7 @@ if (! function_exists('get_podcast_banner_mimetype')) {
{
if (! $podcast->banner instanceof Image) {
$sizes = config('Images')
->podcastBannerSizes;
->podcastBannerSizes;
$sizeConfig = $sizes[$size];
helper('filesystem');
@ -252,10 +252,10 @@ if (! function_exists('get_avatar_url')) {
{
if (! $person->avatar instanceof Image) {
$defaultAvatarPath = config('Images')
->avatarDefaultPath;
->avatarDefaultPath;
$sizes = config('Images')
->personAvatarSizes;
->personAvatarSizes;
$sizeConfig = $sizes[$size];

View file

@ -138,9 +138,7 @@ if (! function_exists('get_rss_feed')) {
$podcastingPlatformElement->addAttribute('id', $podcastingPlatform->account_id);
}
if ($podcastingPlatform->link_url !== null) {
$podcastingPlatformElement->addAttribute('url', $podcastingPlatform->link_url);
}
$podcastingPlatformElement->addAttribute('url', $podcastingPlatform->link_url);
}
$castopodSocialElement = $channel->addChild('social', null, $podcastNamespace);
@ -170,9 +168,7 @@ if (! function_exists('get_rss_feed')) {
$socialElement->addAttribute('accountId', esc($socialPlatform->account_id));
}
if ($socialPlatform->link_url !== null) {
$socialElement->addAttribute('accountUrl', esc($socialPlatform->link_url));
}
$socialElement->addAttribute('accountUrl', esc($socialPlatform->link_url));
if ($socialPlatform->slug === 'mastodon') {
$socialSignUpelement = $socialElement->addChild('socialSignUp', null, $podcastNamespace);
@ -221,16 +217,14 @@ if (! function_exists('get_rss_feed')) {
$podcastNamespace,
);
$fundingPlatformElement->addAttribute('platform', $fundingPlatform->slug);
if ($fundingPlatform->link_url !== null) {
$fundingPlatformElement->addAttribute('url', $fundingPlatform->link_url);
}
$fundingPlatformElement->addAttribute('url', $fundingPlatform->link_url);
}
foreach ($podcast->persons as $person) {
foreach ($person->roles as $role) {
$personElement = $channel->addChild('person', $person->full_name, $podcastNamespace);
$personElement->addAttribute('img', get_avatar_url($person, 'medium'));
$personElement->addAttribute('img', get_avatar_url($person, 'federation'));
if ($person->information_url !== null) {
$personElement->addAttribute('href', $person->information_url);
@ -435,7 +429,7 @@ if (! function_exists('get_rss_feed')) {
esc(lang("PersonsTaxonomy.persons.{$role->group}.label", [], 'en')),
);
$personElement->addAttribute('img', get_avatar_url($person, 'medium'));
$personElement->addAttribute('img', get_avatar_url($person, 'federation'));
if ($person->information_url !== null) {
$personElement->addAttribute('href', $person->information_url);
@ -503,7 +497,7 @@ if (! function_exists('rss_to_array')) {
}
$textcontent = trim((string) $rssNode);
if (strlen($textcontent) > 0) {
if ($textcontent !== '') {
$arrayNode['content'] = $textcontent;
}
@ -537,8 +531,7 @@ if (! function_exists('array_to_rss')) {
);
if (array_key_exists('attributes', $childArrayNode)) {
foreach (
$childArrayNode['attributes']
as $attributeKey => $attributeValue
$childArrayNode['attributes'] as $attributeKey => $attributeValue
) {
$childXmlNode->addAttribute($attributeKey, $attributeValue);
}

View file

@ -30,22 +30,25 @@ if (! function_exists('get_podcast_metatags')) {
$category .= $podcast->category->apple_category;
$schema = new Schema(
new Thing('PodcastSeries', [
'name' => $podcast->title,
'headline' => $podcast->title,
'url' => current_url(),
'sameAs' => $podcast->link,
'identifier' => $podcast->guid,
'image' => $podcast->cover->feed_url,
'description' => $podcast->description,
'webFeed' => $podcast->feed_url,
'accessMode' => 'auditory',
'author' => $podcast->owner_name,
'creator' => $podcast->owner_name,
'publisher' => $podcast->publisher,
'inLanguage' => $podcast->language_code,
'genre' => $category,
])
new Thing(
props: [
'name' => $podcast->title,
'headline' => $podcast->title,
'url' => current_url(),
'sameAs' => $podcast->link,
'identifier' => $podcast->guid,
'image' => $podcast->cover->feed_url,
'description' => $podcast->description,
'webFeed' => $podcast->feed_url,
'accessMode' => 'auditory',
'author' => $podcast->owner_name,
'creator' => $podcast->owner_name,
'publisher' => $podcast->publisher,
'inLanguage' => $podcast->language_code,
'genre' => $category,
],
type: 'PodcastSeries'
)
);
$metatags = new MetaTags();
@ -79,22 +82,31 @@ if (! function_exists('get_episode_metatags')) {
function get_episode_metatags(Episode $episode): string
{
$schema = new Schema(
new Thing('PodcastEpisode', [
'url' => url_to('episode', esc($episode->podcast->handle), $episode->slug),
'name' => $episode->title,
'image' => $episode->cover->feed_url,
'description' => $episode->description,
'datePublished' => $episode->published_at->format(DATE_ISO8601),
'timeRequired' => iso8601_duration($episode->audio->duration),
'duration' => iso8601_duration($episode->audio->duration),
'associatedMedia' => new Thing('MediaObject', [
'contentUrl' => $episode->audio_url,
]),
'partOfSeries' => new Thing('PodcastSeries', [
'name' => $episode->podcast->title,
'url' => $episode->podcast->link,
]),
])
new Thing(
props: [
'url' => url_to('episode', esc($episode->podcast->handle), $episode->slug),
'name' => $episode->title,
'image' => $episode->cover->feed_url,
'description' => $episode->description,
'datePublished' => $episode->published_at->format(DATE_ISO8601),
'timeRequired' => iso8601_duration($episode->audio->duration),
'duration' => iso8601_duration($episode->audio->duration),
'associatedMedia' => new Thing(
props: [
'contentUrl' => $episode->audio_url,
],
type: 'MediaObject'
),
'partOfSeries' => new Thing(
props: [
'name' => $episode->podcast->title,
'url' => $episode->podcast->link,
],
type: 'PodcastSeries'
),
],
type: 'PodcastEpisode'
)
);
$metatags = new MetaTags();
@ -140,32 +152,50 @@ if (! function_exists('get_episode_metatags')) {
if (! function_exists('get_post_metatags')) {
function get_post_metatags(Post $post): string
{
$socialMediaPosting = new Thing('SocialMediaPosting', [
'@id' => url_to('post', esc($post->actor->username), $post->id),
'datePublished' => $post->published_at->format(DATE_ISO8601),
'author' => new Thing('Person', [
'name' => $post->actor->display_name,
'url' => $post->actor->uri,
]),
'text' => $post->message,
]);
$socialMediaPosting = new Thing(
props: [
'@id' => url_to('post', esc($post->actor->username), $post->id),
'datePublished' => $post->published_at->format(DATE_ISO8601),
'author' => new Thing(
props: [
'name' => $post->actor->display_name,
'url' => $post->actor->uri,
],
type: 'Person'
),
'text' => $post->message,
],
type: 'SocialMediaPosting'
);
if ($post->episode_id !== null) {
$socialMediaPosting->__set('sharedContent', new Thing('Audio', [
'headline' => $post->episode->title,
'url' => $post->episode->link,
'author' => new Thing('Person', [
'name' => $post->episode->podcast->owner_name,
]),
]));
$socialMediaPosting->__set('sharedContent', new Thing(
props: [
'headline' => $post->episode->title,
'url' => $post->episode->link,
'author' => new Thing(
props: [
'name' => $post->episode->podcast->owner_name,
],
type: 'Person'
),
],
type: 'Audio'
));
} elseif ($post->preview_card instanceof PreviewCard) {
$socialMediaPosting->__set('sharedContent', new Thing('WebPage', [
'headline' => $post->preview_card->title,
'url' => $post->preview_card->url,
'author' => new Thing('Person', [
'name' => $post->preview_card->author_name,
]),
]));
$socialMediaPosting->__set('sharedContent', new Thing(
props: [
'headline' => $post->preview_card->title,
'url' => $post->preview_card->url,
'author' => new Thing(
props: [
'name' => $post->preview_card->author_name,
],
type: 'Person'
),
],
type: 'WebPage'
));
}
$schema = new Schema($socialMediaPosting);
@ -192,21 +222,27 @@ if (! function_exists('get_post_metatags')) {
if (! function_exists('get_episode_comment_metatags')) {
function get_episode_comment_metatags(EpisodeComment $episodeComment): string
{
$schema = new Schema(new Thing('SocialMediaPosting', [
'@id' => url_to(
'episode-comment',
esc($episodeComment->actor->username),
$episodeComment->episode->slug,
$episodeComment->id
),
'datePublished' => $episodeComment->created_at->format(DATE_ISO8601),
'author' => new Thing('Person', [
'name' => $episodeComment->actor->display_name,
'url' => $episodeComment->actor->uri,
]),
'text' => $episodeComment->message,
'upvoteCount' => $episodeComment->likes_count,
]));
$schema = new Schema(new Thing(
props: [
'@id' => url_to(
'episode-comment',
esc($episodeComment->actor->username),
$episodeComment->episode->slug,
$episodeComment->id
),
'datePublished' => $episodeComment->created_at->format(DATE_ISO8601),
'author' => new Thing(
props: [
'name' => $episodeComment->actor->display_name,
'url' => $episodeComment->actor->uri,
],
type: 'Person'
),
'text' => $episodeComment->message,
'upvoteCount' => $episodeComment->likes_count,
],
type: 'SocialMediaPosting'
));
$metatags = new MetaTags();
$metatags

View file

@ -1,12 +1,14 @@
+ en/***
+ fr/***
+ pl/***
+ de/***
+ pt-br/***
+ nn-no/***
+ es/***
+ zh-hans/***
+ ca/***
+ br/***
+ ca/***
+ cs/***
+ de/***
+ en/***
+ es/***
+ fr/***
+ lt/***
+ nn-no/***
+ pl/***
+ pt-br/***
+ sr-latn/***
+ zh-hans/***
- **

View file

@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'title' => "Komentář {actorDisplayName} k {episodeTitle}",
'back_to_comments' => 'Zpět na komentáře',
'form' => [
'episode_message_placeholder' => 'Napište komentář…',
'reply_to_placeholder' => 'Odpovědět @{actorUsername}',
'submit' => 'Odeslat',
'submit_reply' => 'Odpovědět',
],
'likes' => '{numberOfLikes, plural,
one {# se líbí}
other {# se líbí}
}',
'replies' => '{numberOfReplies, plural,
one {# odpověď}
other {# odpovědi}
}',
'like' => 'Líbí se mi',
'reply' => 'Odpovědět',
'view_replies' => 'Zobrazit odpovědi ({numberOfReplies})',
'block_actor' => 'Blokovat uživatele @{actorUsername}',
'block_domain' => 'Blokovat doménu @{actorDomain}',
'delete' => 'Odstranit komentář',
];

View file

@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'yes' => 'Ano',
'no' => 'Ne',
'cancel' => 'Zrušit',
'optional' => 'Volitelné',
'close' => 'Zavřít',
'home' => 'Domů',
'explicit' => 'Explicitní',
'powered_by' => 'Běží na {castopod}',
'go_back' => 'Jít zpět',
'play_episode_button' => [
'play' => 'Přehrát',
'playing' => 'Přehrávání',
],
'read_more' => 'Číst více',
'read_less' => 'Číst méně',
'see_more' => 'Zobraz více',
'see_less' => 'Zobrazit méně',
'legal_notice' => 'Právní ustanovení',
];

View file

@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'season' => 'Série: {{seasonNumber}}',
'season_abbr' => 'S{seasonNumber}',
'number' => 'Epizoda {episodeNumber}',
'number_abbr' => 'Ep. {episodeNumber}',
'season_episode' => 'Série {seasonNumber} epizoda {episodeNumber}',
'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}',
'persons' => '{personsCount, plural,
one {# osoba}
other {# osoby}
}',
'persons_list' => 'Osoby',
'back_to_episodes' => 'Zpět na epizody {podcast}',
'comments' => 'Komentáře',
'activity' => 'Aktivita',
'chapters' => 'Kapitoly',
'transcript' => 'Přepis',
'description' => 'Popis epizody',
'number_of_comments' => '{numberOfComments, plural,
one {# komentář}
other {# komentáře}
}',
'all_podcast_episodes' => 'Všechny epizody podcastu',
'back_to_podcast' => 'Přejít zpět na podcast',
'preview' => [
'title' => 'Náhled',
'not_published' => 'Nezveřejněno',
'text' => '{publication_status, select,
published {Tato epizoda ještě není publikována.}
scheduled {Tato epizoda je naplánována na {publication_date}}
with_podcast {Tato epizoda bude zveřejněna současně s podcastem.}
other {Tato epizoda ještě není publikována.}
}',
'publish' => 'Publikovat',
'publish_edit' => 'Editovat publikaci',
],
'no_chapters' => 'Pro tuto epizodu nejsou k dispozici žádné kapitoly.',
'download_transcript' => 'Stáhnout přepis ({extension})',
'no_transcript' => 'Pro tuto epizodu není k dispozici žádný přepis.',
];

View file

@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
/**
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'your_handle' => 'Vaše handle',
'your_handle_hint' => 'Zadejte @username@doména, ze které chcete působit.',
'follow' => [
'label' => 'Sledovat',
'title' => 'Sledovat {actorDisplayName}',
'subtitle' => 'Budete sledovat:',
'accountNotFound' => 'Účet nebyl nalezen.',
'remoteFollowNotAllowed' => 'Zdá se, že server účtu neumožňuje vzdálené sledování…',
'submit' => 'Pokračovat a sledovat',
],
'favourite' => [
'title' => "Oblíbený příspěvek {actorDisplayName}",
'subtitle' => 'Oblíbíte si:',
'submit' => 'Pokračovat a oblíbit',
],
'reblog' => [
'title' => "Sdílet {actorDisplayName}příspěvek",
'subtitle' => 'Budete sdílet:',
'submit' => 'Pokračovat ke sdílení',
],
'reply' => [
'title' => "Odpovědět na příspěvek {actorDisplayName}",
'subtitle' => 'Chystáte se odpovědět:',
'submit' => 'Pokračovat k odpovědi',
],
];

20
app/Language/cs/Home.php Normal file
View file

@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'all_podcasts' => 'Všechny podcasty',
'sort_by' => 'Seřadit podle',
'sort_options' => [
'activity' => 'Poslední aktivita',
'created_desc' => 'Od nejnovějších',
'created_asc' => 'Od nejstarších',
],
'no_podcast' => 'Nebyly nalezeny žádné podcasty',
];

17
app/Language/cs/Page.php Normal file
View file

@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'back_to_home' => 'Zpátky domů',
'map' => [
'title' => 'Mapa',
'description' => 'Objevte epizody podcastu na {siteName} , které jsou umístěny na mapě! Cestujte přes mapu a poslouchejte epizody, které hovoří o konkrétních místech.',
],
];

View file

@ -0,0 +1,55 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'feed' => 'RSS Podcast kanál',
'season' => 'Série: {seasonNumber}',
'list_of_episodes_year' => '{year} epizody ({episodeCount})',
'list_of_episodes_season' =>
'Epizody ({episodeCount}) série {seasonNumber}',
'no_episode' => 'Nebyla nalezena žádná epizoda',
'follow' => 'Sledovat',
'followTitle' => 'Sledujte {actorDisplayName} na fediverse!',
'followers' => '{numberOfFollowers, plural,
one {# sledující}
other {# sledující}
}',
'posts' => '{numberOfPosts, plural,
one {# příspěvek}
other {# příspěvky}
}',
'links' => 'Odkazy',
'activity' => 'Aktivita',
'episodes' => 'Epizody',
'episodes_title' => 'Epizody {podcastTitle}',
'about' => 'Informace',
'stats' => [
'title' => 'Statistiky',
'number_of_seasons' => '{0, plural,
one {# série}
other {# série}
}',
'number_of_episodes' => '{0, plural,
one {# epizoda}
other {# epizody}
}',
'first_published_at' => 'První epizoda zveřejněna na {0, date, medium}',
],
'sponsor' => 'Sponzorovat',
'funding_links' => 'Odkazy na financování pro {podcastTitle}',
'find_on' => 'Najít {podcastTitle} na',
'listen_on' => 'Poslouchat na',
'persons' => '{personsCount, plural,
one {# osoba}
other {# osoby}
}',
'persons_list' => 'Osoby',
'castopod_website' => 'Castopod (webová stránka)',
];

40
app/Language/cs/Post.php Normal file
View file

@ -0,0 +1,40 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'title' => "Příspěvek {actorDisplayName}",
'back_to_actor_posts' => 'Zpět na příspěvky {actor}',
'actor_shared' => '{actor} sdílen(a)',
'reply_to' => 'Odpovědět @{actorUsername}',
'form' => [
'message_placeholder' => 'Napsat zprávu…',
'episode_message_placeholder' => 'Napsat zprávu pro epizodu…',
'episode_url_placeholder' => 'URL epizody',
'reply_to_placeholder' => 'Odpovědět @{actorUsername}',
'submit' => 'Odeslat',
'submit_reply' => 'Odpovědět',
],
'favourites' => '{numberOfFavourites, plural,
one {# oblíbil}
other {# oblíbili}
}',
'reblogs' => '{numberOfReblogs, plural,
one {# sdílení}
other {# sdílení}
}',
'replies' => '{numberOfReplies, plural,
one {# odpověď}
other {# odpovědi}
}',
'expand' => 'Rozbalit příspěvek',
'block_actor' => 'Blokovat uživatele @{actorUsername}',
'block_domain' => 'Blokovat doménu @{actorDomain}',
'delete' => 'Smazat příspěvek',
];

View file

@ -24,7 +24,7 @@ return [
'comments' => 'Kommentare',
'activity' => 'Aktivitäten',
'chapters' => 'Kapitel',
'transcript' => 'Transcript',
'transcript' => 'Protokoll',
'description' => 'Beschreibung der Episode',
'number_of_comments' => '{numberOfComments, plural,
one {# Kommentar}
@ -45,6 +45,6 @@ return [
'publish_edit' => 'Veröffentlichung bearbeiten',
],
'no_chapters' => 'Für diese Episode sind keine Kapitel verfügbar.',
'download_transcript' => 'Download transcript ({extension})',
'no_transcript' => 'No transcript available for this episode.',
'download_transcript' => 'Protokoll herunterladen ({extension})',
'no_transcript' => 'Für diese Episode ist kein Protokoll verfügbar.',
];

View file

@ -37,4 +37,7 @@ return [
'block_actor' => 'Block user @{actorUsername}',
'block_domain' => 'Block domain @{actorDomain}',
'delete' => 'Delete post',
'is_public' => 'Post is public',
'is_private' => 'Post is private',
'cannot_reblog' => 'This private post cannot be shared.',
];

View file

@ -23,7 +23,7 @@ return [
'comments' => 'コメント',
'activity' => 'アクティビティ',
'chapters' => '章',
'transcript' => 'Transcript',
'transcript' => '文字起こし',
'description' => 'エピソードの詳細',
'number_of_comments' => '{numberOfComments, plural,
one {# comment}
@ -43,7 +43,7 @@ return [
'publish' => '公開する',
'publish_edit' => '出版物を編集',
],
'no_chapters' => 'No chapters are available for this episode.',
'download_transcript' => 'Download transcript ({extension})',
'no_transcript' => 'No transcript available for this episode.',
'no_chapters' => 'このエピソードにはチャプターがありません。',
'download_transcript' => '文字起こしをダウンロード ({extension})',
'no_transcript' => 'このエピソードには文字起こしがありません。',
];

View file

@ -10,28 +10,28 @@ declare(strict_types=1);
return [
'your_handle' => 'あなたのユーザー ID',
'your_handle_hint' => 'Enter the @username@domain you want to act from.',
'your_handle_hint' => 'フォームに「@username@domain」の形式で入力してください',
'follow' => [
'label' => 'フォロー',
'title' => '{actorDisplayName} をフォロー',
'subtitle' => 'You are going to follow:',
'subtitle' => 'フォロー中:',
'accountNotFound' => 'アカウントが見つかりませんでした',
'remoteFollowNotAllowed' => 'このアカウントサーバーはリモートフォローを許可しておりません',
'submit' => 'フォローする',
],
'favourite' => [
'title' => "お気に入りの {actorDisplayName}の投稿",
'subtitle' => 'You are going to favourite:',
'subtitle' => 'お気に入りに登録中:',
'submit' => 'お気に入り登録する',
],
'reblog' => [
'title' => "Share {actorDisplayName}'s post",
'subtitle' => 'You are going to share:',
'title' => "{actorDisplayName} の投稿を共有する",
'subtitle' => '共有中:',
'submit' => '共有する',
],
'reply' => [
'title' => "Reply to {actorDisplayName}'s post",
'subtitle' => 'You are going to reply to:',
'title' => "{actorDisplayName} の投稿に返信する",
'subtitle' => '返信中:',
'submit' => '返信する',
],
];

View file

@ -38,16 +38,16 @@ return [
one {# episode}
other {# episodes}
}',
'first_published_at' => 'First episode published on {0, date, medium}',
'first_published_at' => '初回は{0, date, medium} に投稿されました。',
],
'sponsor' => 'Sponsor',
'funding_links' => 'Funding links for {podcastTitle}',
'find_on' => 'Find {podcastTitle} on',
'listen_on' => 'Listen on',
'sponsor' => 'スポンサー',
'funding_links' => '{podcastTitle} のリンクを探す',
'find_on' => '{podcastTitle} を検索',
'listen_on' => '視聴中',
'persons' => '{personsCount, plural,
one {# person}
other {# persons}
}',
'persons_list' => 'Persons',
'castopod_website' => 'Castopod (website)',
'persons_list' => '人数',
'castopod_website' => 'Castopod (公式ページ)',
];

View file

@ -9,15 +9,15 @@ declare(strict_types=1);
*/
return [
'title' => "{actorDisplayName}'s post",
'back_to_actor_posts' => 'Back to {actor} posts',
'actor_shared' => '{actor} shared',
'reply_to' => 'Reply to @{actorUsername}',
'title' => "{actorDisplayName} の投稿",
'back_to_actor_posts' => '{actor} の投稿一覧に戻る',
'actor_shared' => '{actor} が共有しました',
'reply_to' => '@{actorUsername} に返信する',
'form' => [
'message_placeholder' => 'Write a message…',
'episode_message_placeholder' => 'Write a message for the episode…',
'episode_url_placeholder' => 'Episode URL',
'reply_to_placeholder' => 'Reply to @{actorUsername}',
'message_placeholder' => 'ここにコメントを入力..',
'episode_message_placeholder' => 'エピソードへのコメントを入力...',
'episode_url_placeholder' => 'エピソードのURL',
'reply_to_placeholder' => '@{actorUsername} に返信する',
'submit' => '送信',
'submit_reply' => '返信する',
],
@ -33,8 +33,8 @@ return [
one {# reply}
other {# replies}
}',
'expand' => 'Expand post',
'block_actor' => 'Block user @{actorUsername}',
'block_domain' => 'Block domain @{actorDomain}',
'expand' => '投稿を開く',
'block_actor' => '@{actorUsername} をブロック',
'block_domain' => '@{actorDomain} の投稿をブロックする',
'delete' => '投稿を削除',
];

View file

@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'title' => "{actorDisplayName} pakomentavo „{episodeTitle}“",
'back_to_comments' => 'Grįžti į komentarus',
'form' => [
'episode_message_placeholder' => 'Parašyti komentarą…',
'reply_to_placeholder' => 'Atsakyti @{actorUsername}',
'submit' => 'Siųsti',
'submit_reply' => 'Atsakyti',
],
'likes' => '{numberOfLikes, plural,
one {# patiktukas}
few {# patiktukai}
other {# patiktukų}
}',
'replies' => '{numberOfReplies, plural,
one {# atsakymas}
few {# atsakymai}
other {# atsakymų}
}',
'like' => 'Patinka',
'reply' => 'Atsakyti',
'view_replies' => 'Rodyti atsakymus ({numberOfReplies})',
'block_actor' => 'Blokuoti naudotoją @{actorUsername}',
'block_domain' => 'Blokuoti domeną @{actorDomain}',
'delete' => 'Šalinti komentarą',
];

View file

@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'yes' => 'Taip',
'no' => 'Ne',
'cancel' => 'Atsisakyti',
'optional' => 'Neprivaloma',
'close' => 'Užverti',
'home' => 'Pradžia',
'explicit' => 'Atviras',
'powered_by' => 'Veikia {castopod} pagrindu',
'go_back' => 'Grįžti',
'play_episode_button' => [
'play' => 'Leisti',
'playing' => 'Leidžiama',
],
'read_more' => 'Išsamiau',
'read_less' => 'Glausčiau',
'see_more' => 'Išsamiau',
'see_less' => 'Glausčiau',
'legal_notice' => 'Teisinė informacija',
];

View file

@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'season' => '{seasonNumber} sezonas',
'season_abbr' => 'S{seasonNumber}',
'number' => '{episodeNumber} epizodas',
'number_abbr' => '{episodeNumber} ep.',
'season_episode' => '{seasonNumber} sezono {episodeNumber} epizodas',
'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}',
'persons' => '{personsCount, plural,
one {# asmuo}
few {# asmenys}
other {# asmenų}
}',
'persons_list' => 'Asmenys',
'back_to_episodes' => 'Grįžti į „{podcast}“ epizodų sąrašą',
'comments' => 'Komentarai',
'activity' => 'Veikla',
'chapters' => 'Skyreliai',
'transcript' => 'Nuorašas',
'description' => 'Epizodo aprašymas',
'number_of_comments' => '{numberOfComments, plural,
one {# komentaras}
few {# komentarai}
other {# komentarų}
}',
'all_podcast_episodes' => 'Visi tinklalaidės epizodai',
'back_to_podcast' => 'Grįžti į tinklalaidę',
'preview' => [
'title' => 'Peržiūrėti',
'not_published' => 'Nepaskelbtas',
'text' => '{publication_status, select,
published {Šis epizodas dar nepaskelbtas.}
scheduled {Šį epizodą planuojama paskelbti {publication_date}.}
with_podcast {Šį epizodą planuojama paskelbti kartu su tinklalaide.}
other {Šis epizodas dar nepaskelbtas.}
}',
'publish' => 'Paskelbti',
'publish_edit' => 'Taisyti paskelbimą',
],
'no_chapters' => 'Šis epizodas neišskaidytas skyreliais.',
'download_transcript' => 'Parsisiųsti nuorašą ({extension})',
'no_transcript' => 'Šio epizodo nuorašas nepateiktas.',
];

View file

@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
/**
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'your_handle' => 'Jūsų paskyros vardas',
'your_handle_hint' => 'Įrašykite naudotinos paskyros vardą @naudotojas@domenas formatu.',
'follow' => [
'label' => 'Sekti',
'title' => 'Sekti {actorDisplayName}',
'subtitle' => 'Ketinate sekti:',
'accountNotFound' => 'Paskyra nerasta.',
'remoteFollowNotAllowed' => 'Panašu, jog paskyros serveris neleidžia nuotolinių sekimo užklausų…',
'submit' => 'Inicijuoti sekimą',
],
'favourite' => [
'title' => "Pamėgti {actorDisplayName} įrašą",
'subtitle' => 'Ketinate pamėgti:',
'submit' => 'Inicijuoti pamėgimą',
],
'reblog' => [
'title' => "Pasidalinti {actorDisplayName} įrašu",
'subtitle' => 'Ketinate pasidalinti:',
'submit' => 'Inicijuoti pasidalijimą',
],
'reply' => [
'title' => "Atsakyti į {actorDisplayName} įrašą",
'subtitle' => 'Ketinate atsakyti į:',
'submit' => 'Inicijuoti atsakymą',
],
];

20
app/Language/lt/Home.php Normal file
View file

@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'all_podcasts' => 'Visos tinklalaidės',
'sort_by' => 'Rikiuoti pagal',
'sort_options' => [
'activity' => 'Paskiausia veikla',
'created_desc' => 'Prad',
'created_asc' => 'Pirma seniausi',
],
'no_podcast' => 'Tinklalaidė nerasta',
];

17
app/Language/lt/Page.php Normal file
View file

@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'back_to_home' => 'Grįžti į pradžią',
'map' => [
'title' => 'Žemėlapis',
'description' => 'Atraskite „{siteName}“ paskelbtus tinklalaidžių epizodus žemėlapyje! Keliaukite po žemėlapį ir klausykitės epizodų, kuriuose kalbama apie konkrečias vietoves.',
],
];

View file

@ -0,0 +1,60 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'feed' => 'Tinklalaidės RSS sklaidos kanalas',
'season' => '{seasonNumber} sezonas',
'list_of_episodes_year' => '{year} metų epizodai ({episodeCount})',
'list_of_episodes_season' =>
'{seasonNumber} sezono epizodai ({episodeCount})',
'no_episode' => 'Epizodų nerasta!',
'follow' => 'Sekti',
'followTitle' => 'Sekti {actorDisplayName} Fedivisatoje!',
'followers' => '{numberOfFollowers, plural,
one {# sekėjas}
few {# sekėjai}
other {# sekėjų}
}',
'posts' => '{numberOfPosts, plural,
one {# įrašas}
few {# įrašai}
other {# įrašų}
}',
'links' => 'Nuorodos',
'activity' => 'Veikla',
'episodes' => 'Epizodai',
'episodes_title' => '„{podcastTitle}“ epizodai',
'about' => 'Apie',
'stats' => [
'title' => 'Statistika',
'number_of_seasons' => '{0, plural,
one {# sezonas}
few {# sezonai}
other {# sezonų}
}',
'number_of_episodes' => '{0, plural,
one {# epizodas}
few {# epizodai}
other {# epizodų}
}',
'first_published_at' => 'Pirmasis epizodas paskelbtas {0, date, medium}',
],
'sponsor' => 'Paremti',
'funding_links' => '„{podcastTitle}“ rėmimo nuorodos',
'find_on' => 'Raskite „{podcastTitle}“',
'listen_on' => 'Klausykitės',
'persons' => '{personsCount, plural,
one {# asmuo}
few {# asmenys}
other {# asmenų}
}',
'persons_list' => 'Asmenys',
'castopod_website' => 'Castopod (svetainė)',
];

43
app/Language/lt/Post.php Normal file
View file

@ -0,0 +1,43 @@
<?php
declare(strict_types=1);
/**
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
return [
'title' => "{actorDisplayName} įrašas",
'back_to_actor_posts' => 'Grįžti į {actor} įrašus',
'actor_shared' => '{actor} pasidalijo',
'reply_to' => 'Atsakyti @{actorUsername}',
'form' => [
'message_placeholder' => 'Parašykite žinutę…',
'episode_message_placeholder' => 'Parašykite žinutę šiam epizodui…',
'episode_url_placeholder' => 'Epizodo URL adresas',
'reply_to_placeholder' => 'Atsakyti @{actorUsername}',
'submit' => 'Siųsti',
'submit_reply' => 'Atsakyti',
],
'favourites' => '{numberOfFavourites, plural,
one {# pamėgimas}
few {# pamėgimai}
other {# pamėgimų}
}',
'reblogs' => '{numberOfReblogs, plural,
one {# pasidalijimas}
few {# pasidalijimai}
other {# pasidalijimų}
}',
'replies' => '{numberOfReplies, plural,
one {# atsakymas}
few {# atsakymai}
other {# atsakymų}
}',
'expand' => 'Išskleisti įrašą',
'block_actor' => 'Blokuoti naudotoją @{actorUsername}',
'block_domain' => 'Blokuoti domeną @{actorDomain}',
'delete' => 'Šalinti įrašą',
];

View file

@ -24,7 +24,7 @@ return [
'comments' => 'Reacties',
'activity' => 'Activiteiten',
'chapters' => 'Hoofdstukken',
'transcript' => 'Transcript',
'transcript' => 'Transcriptie',
'description' => 'Omschrijving aflevering',
'number_of_comments' => '{numberOfComments, plural,
one {# reactie}
@ -45,6 +45,6 @@ return [
'publish_edit' => 'Publicatie bewerken',
],
'no_chapters' => 'Voor deze aflevering zijn geen hoofdstukken beschikbaar.',
'download_transcript' => 'Download transcript ({extension})',
'no_transcript' => 'No transcript available for this episode.',
'download_transcript' => 'Transcriptie downloaden ({extension})',
'no_transcript' => 'Geen transcript beschikbaar voor deze aflevering.',
];

View file

@ -24,7 +24,7 @@ return [
'comments' => 'Kommentarar',
'activity' => 'Aktivitet',
'chapters' => 'Kapittel',
'transcript' => 'Transcript',
'transcript' => 'Avskrift',
'description' => 'Skildring av episoden',
'number_of_comments' => '{numberOfComments, plural,
one {# kommentar}
@ -45,6 +45,6 @@ return [
'publish_edit' => 'Rediger publiseringa',
],
'no_chapters' => 'Det finst ingen kapittel for denne episoden.',
'download_transcript' => 'Download transcript ({extension})',
'no_transcript' => 'No transcript available for this episode.',
'download_transcript' => 'Last ned underteksten ({extension})',
'no_transcript' => 'Det finst inga teksting for denne episoden.',
];

View file

@ -31,5 +31,5 @@ return [
'view_replies' => 'Zobacz odpowiedzi ({numberOfReplies})',
'block_actor' => 'Zablokuj użytkownika @{actorUsername}',
'block_domain' => 'Zablokuj domenę @{actorDomain}',
'delete' => 'usuń komentarz',
'delete' => 'Usuń komentarz',
];

View file

@ -14,15 +14,15 @@ return [
'cancel' => 'Anuluj',
'optional' => 'Opcjonalnie',
'close' => 'Zamknij',
'home' => 'Początek',
'explicit' => 'Zawiera treści dla dorosłych',
'home' => 'Strona główna',
'explicit' => 'Wulgarne',
'powered_by' => 'Wspierane przez {castopod}',
'go_back' => 'Wróć',
'play_episode_button' => [
'play' => 'Odtwórz',
'playing' => 'Odtwarzanie',
],
'read_more' => 'czytaj więcej',
'read_more' => 'Czytaj więcej',
'read_less' => 'Czytaj mniej',
'see_more' => 'Zobacz więcej',
'see_less' => 'Zobacz mniej',

View file

@ -14,7 +14,7 @@ return [
'number' => 'Odcinek {episodeNumber}',
'number_abbr' => 'Odc. {episodeNumber}',
'season_episode' => 'Sezon {seasonNumber} odcinek {episodeNumber}',
'season_episode_abbr' => 'S{seasonNumber}:O{episodeNumber}',
'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}',
'persons' => '{personsCount, plural,
one {# osoba}
few {# osoby}
@ -24,8 +24,8 @@ return [
'back_to_episodes' => 'Wróć do odcinków {podcast}',
'comments' => 'Komentarze',
'activity' => 'Aktywność',
'chapters' => 'Chapters',
'transcript' => 'Transcript',
'chapters' => 'Rozdziały',
'transcript' => 'Transkrypcja',
'description' => 'Opis odcinka',
'number_of_comments' => '{numberOfComments, plural,
one {# komentarz}
@ -33,7 +33,7 @@ return [
other {# komentarzy}
}',
'all_podcast_episodes' => 'Wszystkie odcinki podcastu',
'back_to_podcast' => 'Wróć do podkastu',
'back_to_podcast' => 'Wróć do podcastu',
'preview' => [
'title' => 'Podgląd',
'not_published' => 'Nieopublikowany',
@ -46,7 +46,7 @@ return [
'publish' => 'Opublikuj',
'publish_edit' => 'Edytuj publikację',
],
'no_chapters' => 'No chapters are available for this episode.',
'download_transcript' => 'Download transcript ({extension})',
'no_transcript' => 'No transcript available for this episode.',
'no_chapters' => 'Brak dostępnych rozdziałów dla tego odcinka.',
'download_transcript' => 'Pobierz transkrypcję ({extension})',
'no_transcript' => 'Brak transkrypcji dla tego odcinka.',
];

View file

@ -10,28 +10,28 @@ declare(strict_types=1);
return [
'your_handle' => 'Twój uchwyt',
'your_handle_hint' => 'Wpisz @nazwęużytkownika@domenę, z których chcesz działać.',
'your_handle_hint' => 'Wpisz @nazważytkownika@domena, z której chcesz działać.',
'follow' => [
'label' => 'Obserwuj',
'title' => 'Obserwuj {actorDisplayName}',
'subtitle' => 'Zamierzasz obserwować:',
'accountNotFound' => 'Nie można znaleźć konta.',
'remoteFollowNotAllowed' => 'Wygląda na to, że serwer kont nie pozwala na śledzenie zdalnie…',
'remoteFollowNotAllowed' => 'Wygląda na to, że serwer kont nie pozwala na zdalne śledzenie…',
'submit' => 'Przejdź do obserwowania',
],
'favourite' => [
'title' => "Dodaj do ulubionych wpis {actorDisplayName}",
'subtitle' => 'Zamierzasz dodać do ulubionych:',
'submit' => 'Przejdź do dodania do ulubionych',
'submit' => 'Dodaj do ulubionych',
],
'reblog' => [
'title' => "Udostępnij wpis {actorDisplayName}",
'subtitle' => 'Zamierzasz udostępnić:',
'submit' => 'Przejdź do udostępnienia',
'submit' => 'Udostępnij',
],
'reply' => [
'title' => "Odpowiedź do wpisu {actorDisplayName}",
'title' => "Odpowiedz do wpisu {actorDisplayName}",
'subtitle' => 'Zamierzasz odpisać na:',
'submit' => 'Przejdź do odpowiedzi',
'submit' => 'Odpowiedz',
],
];

View file

@ -9,9 +9,9 @@ declare(strict_types=1);
*/
return [
'back_to_home' => 'Wróć do początku',
'back_to_home' => 'Wróć do strony głównej',
'map' => [
'title' => 'Mapa',
'description' => 'Odkryj odcinki podcastów w witrynie {siteName} umieszczone na mapie! Podróżuj po mapie i słuchaj odcinków, które opowiadają o konkretnych lokalizacjach.',
'description' => 'Odkryj odcinki podcastów w witrynie {siteName}, które są umieszczone na mapie! Podróżuj po mapie i słuchaj odcinków, które opowiadają o konkretnych lokalizacjach.',
],
];

View file

@ -16,7 +16,7 @@ return [
'Sezon {seasonNumber} odcinki ({episodeCount})',
'no_episode' => 'Nie znaleziono odcinków!',
'follow' => 'Obserwuj',
'followTitle' => 'Obserwuj {actorDisplayName} na fediverse!',
'followTitle' => 'Obserwuj {actorDisplayName} na fediwersum!',
'followers' => '{numberOfFollowers, plural,
one {# polubienie}
few {# polubienia}
@ -27,7 +27,7 @@ return [
few {# osoby}
other {# osób}
}',
'links' => 'Links',
'links' => 'Linki',
'activity' => 'Wpisy',
'episodes' => 'Odcinki',
'episodes_title' => 'Odcinki {podcastTitle}',
@ -56,5 +56,5 @@ return [
other {# osób}
}',
'persons_list' => 'Osoby',
'castopod_website' => 'Castopod (website)',
'castopod_website' => 'Castopod (strona)',
];

View file

@ -18,7 +18,6 @@ use CodeIgniter\Exceptions\PageNotFoundException;
use CodeIgniter\Router\Exceptions\RedirectException;
use CodeIgniter\Router\Exceptions\RouterException;
use CodeIgniter\Router\Router as CodeIgniterRouter;
use Config\Services;
class Router extends CodeIgniterRouter
{
@ -43,7 +42,7 @@ class Router extends CodeIgniterRouter
// Loop through the route array looking for wildcards
foreach ($routes as $routeKey => $handler) {
$routeKey = $routeKey === '/' ? $routeKey : ltrim($routeKey, '/ ');
$routeKey = $routeKey === '/' ? $routeKey : ltrim((string) $routeKey, '/ ');
$matchedKey = $routeKey;
@ -115,8 +114,8 @@ class Router extends CodeIgniterRouter
array_key_exists('alternate-content', $this->matchedRouteOptions) &&
is_array($this->matchedRouteOptions['alternate-content'])
) {
$request = Services::request();
$negotiate = Services::negotiator();
$request = service('request');
$negotiate = service('negotiator');
// Accept header is mandatory
if ($request->header('Accept') === null) {

View file

@ -57,10 +57,6 @@ class SimpleRSSElement extends SimpleXMLElement
return $newChild;
}
if (is_array($value)) {
return $newChild;
}
$node->appendChild($no->createTextNode($value));
return $newChild;

View file

@ -22,6 +22,7 @@ class Services extends BaseService
public static function components(bool $getShared = true): ComponentRenderer
{
if ($getShared) {
/** @phpstan-ignore return.type */
return self::getSharedInstance('components');
}

View file

@ -1,30 +0,0 @@
<?php
declare(strict_types=1);
namespace Vite\Config;
use CodeIgniter\Config\BaseService;
use Vite\Vite;
/**
* Services Configuration file.
*
* Services are simply other classes/libraries that the system uses to do its job. This is used by CodeIgniter to allow
* the core of the framework to be swapped out easily without affecting the usage within the rest of your application.
*
* This file holds any application-specific services, or service overrides that you might need. An example has been
* included with the general method format you should use for your service methods. For more examples, see the core
* Services file at system/Config/Services.php.
*/
class Services extends BaseService
{
public static function vite(bool $getShared = true): Vite
{
if ($getShared) {
return self::getSharedInstance('vite');
}
return new Vite();
}
}

View file

@ -1,20 +0,0 @@
<?php
declare(strict_types=1);
namespace Vite\Config;
use CodeIgniter\Config\BaseConfig;
class Vite extends BaseConfig
{
public string $environment = 'production';
public string $baseUrl = 'http://localhost:5173/';
public string $assetsRoot = 'assets';
public string $manifestFile = '.vite/manifest.json';
public string $manifestCSSFile = 'manifest-css.json';
}

View file

@ -1,111 +0,0 @@
<?php
declare(strict_types=1);
namespace Vite;
use ErrorException;
class Vite
{
/**
* @var array<string, mixed>|null
*/
protected ?array $manifestData = null;
/**
* @var array<string, mixed>|null
*/
protected ?array $manifestCSSData = null;
public function asset(string $path, string $type): string
{
if (config('Vite')->environment !== 'production') {
return $this->loadDev($path, $type);
}
return $this->loadProd($path, $type);
}
private function loadDev(string $path, string $type): string
{
return $this->getHtmlTag(config('Vite') ->baseUrl . config('Vite')->assetsRoot . "/{$path}", $type);
}
private function loadProd(string $path, string $type): string
{
if ($this->manifestData === null) {
$cacheName = 'vite-manifest';
if (! ($cachedManifest = cache($cacheName))) {
$manifestPath = config('Vite')
->assetsRoot . '/' . config('Vite')
->manifestFile;
try {
if (($manifestContents = file_get_contents($manifestPath)) !== false) {
$cachedManifest = json_decode($manifestContents, true);
cache()
->save($cacheName, $cachedManifest, DECADE);
}
} catch (ErrorException) {
// ERROR when retrieving the manifest file
die("Could not load manifest: <strong>{$manifestPath}</strong> file not found!");
}
}
$this->manifestData = $cachedManifest;
}
$html = '';
if (array_key_exists($path, $this->manifestData)) {
$manifestElement = $this->manifestData[$path];
// import css dependencies if any
if (array_key_exists('css', $manifestElement)) {
foreach ($manifestElement['css'] as $cssFile) {
$html .= $this->getHtmlTag('/' . config('Vite')->assetsRoot . '/' . $cssFile, 'css');
}
}
// import dependencies first for faster js loading
if (array_key_exists('imports', $manifestElement)) {
foreach ($manifestElement['imports'] as $importPath) {
if (array_key_exists($importPath, $this->manifestData)) {
// import css dependencies if any
if (array_key_exists('css', $this->manifestData[$importPath])) {
foreach ($this->manifestData[$importPath]['css'] as $cssFile) {
$html .= $this->getHtmlTag(
'/' . config('Vite')->assetsRoot . '/' . $cssFile,
'css'
);
}
}
$html .= $this->getHtmlTag(
'/' . config('Vite')->assetsRoot . '/' . $this->manifestData[$importPath]['file'],
'js'
);
}
}
}
$html .= $this->getHtmlTag('/' . config('Vite')->assetsRoot . '/' . $manifestElement['file'], $type);
}
return $html;
}
private function getHtmlTag(string $assetUrl, string $type): string
{
return match ($type) {
'css' => <<<HTML
<link rel="stylesheet" href="{$assetUrl}"/>
HTML
,
'js' => <<<HTML
<script type="module" src="{$assetUrl}"></script>
HTML
,
default => '',
};
}
}

View file

@ -122,7 +122,6 @@ class ClipModel extends Model
$found[$key] = new VideoClip($videoClip->toArray());
}
// @phpstan-ignore-next-line
return $found;
}
@ -162,15 +161,11 @@ class ClipModel extends Model
return (int) $result[0]['id'];
}
public function deleteVideoClip(int $podcastId, int $episodeId, int $clipId): BaseResult | bool
public function deleteVideoClip(int $clipId): BaseResult | bool
{
$this->clearVideoClipCache($clipId);
return $this->delete([
'podcast_id' => $podcastId,
'episode_id' => $episodeId,
'id' => $clipId,
]);
return $this->delete($clipId);
}
public function getClipCount(int $podcastId, int $episodeId): int
@ -240,11 +235,7 @@ class ClipModel extends Model
{
$this->clearSoundbiteCache($podcastId, $episodeId, $clipId);
return $this->delete([
'podcast_id' => $podcastId,
'episode_id' => $episodeId,
'id' => $clipId,
]);
return $this->delete($clipId);
}
public function clearSoundbiteCache(int $podcastId, int $episodeId, int $clipId): void

View file

@ -201,7 +201,7 @@ class EpisodeCommentModel extends UuidModel
{
// TODO: merge with replies from posts linked to episode linked
$episodeCommentsBuilder = $this->builder();
$episodeComments = $episodeCommentsBuilder->select('*, 0 as is_from_post')
$episodeComments = $episodeCommentsBuilder->select('*, 0 as is_private, 0 as is_from_post')
->where([
'episode_id' => $episodeId,
'in_reply_to_id' => null,
@ -211,7 +211,7 @@ class EpisodeCommentModel extends UuidModel
$postModel = new PostModel();
$episodePostsRepliesBuilder = $postModel->builder();
$episodePostsReplies = $episodePostsRepliesBuilder->select(
'id, uri, episode_id, actor_id, in_reply_to_id, message, message_html, favourites_count as likes_count, replies_count, published_at as created_at, created_by, 1 as is_from_post'
'id, uri, episode_id, actor_id, in_reply_to_id, message, message_html, favourites_count as likes_count, replies_count, published_at as created_at, created_by, is_private, 1 as is_from_post'
)
->whereIn('in_reply_to_id', static function (BaseBuilder $builder) use (&$episodeId): BaseBuilder {
return $builder->select('id')
@ -221,16 +221,20 @@ class EpisodeCommentModel extends UuidModel
'in_reply_to_id' => null,
]);
})
->where('`created_at` <= UTC_TIMESTAMP()', null, false)
->getCompiledSelect();
->where('`created_at` <= UTC_TIMESTAMP()', null, false);
// do not get private replies if public
if (! can_user_interact()) {
$episodePostsRepliesBuilder->where('is_private', false);
}
$episodePostsReplies = $episodePostsRepliesBuilder->getCompiledSelect();
/** @var BaseResult $allEpisodeComments */
$allEpisodeComments = $this->db->query(
$episodeComments . ' UNION ' . $episodePostsReplies . ' ORDER BY created_at ASC'
);
// FIXME:?
// @phpstan-ignore-next-line
return $this->convertUuidFieldsToStrings(
$allEpisodeComments->getCustomResultObject($this->tempReturnType),
$this->tempReturnType

View file

@ -89,6 +89,7 @@ class EpisodeModel extends UuidModel
'location_osm',
'custom_rss',
'is_published_on_hubs',
'downloads_count',
'posts_count',
'comments_count',
'is_premium',
@ -197,7 +198,7 @@ class EpisodeModel extends UuidModel
public function getEpisodeByPreviewId(string $previewId): ?Episode
{
$cacheName = "podcast_episode#preview-{$previewId}";
$cacheName = "podcast_episode-preview#{$previewId}";
if (! ($found = cache($cacheName))) {
$builder = $this->where([
'preview_id' => $this->uuid->fromString($previewId)
@ -370,15 +371,15 @@ class EpisodeModel extends UuidModel
{
$episodeCommentsCount = (new EpisodeCommentModel())->builder()
->select('episode_id, COUNT(*) as `comments_count`')
->where('in_reply_to_id', null)
->where('in_reply_to_id')
->groupBy('episode_id')
->getCompiledSelect();
$episodePostsRepliesCount = (new PostModel())->builder()
->select('fediverse_posts.episode_id as episode_id, COUNT(*) as `comments_count`')
->join('fediverse_posts as fp', 'fediverse_posts.id = fp.in_reply_to_id')
->where('fediverse_posts.in_reply_to_id', null)
->where('fediverse_posts.episode_id IS NOT', null)
->where('fediverse_posts.in_reply_to_id')
->where('fediverse_posts.episode_id IS NOT')
->groupBy('fediverse_posts.episode_id')
->getCompiledSelect();
@ -401,7 +402,7 @@ class EpisodeModel extends UuidModel
$episodePostsCount = $this->builder()
->select('episodes.id, COUNT(*) as `posts_count`')
->join('fediverse_posts', 'episodes.id = fediverse_posts.episode_id')
->where('in_reply_to_id', null)
->where('in_reply_to_id')
->groupBy('episodes.id')
->get()
->getResultArray();
@ -441,7 +442,7 @@ class EpisodeModel extends UuidModel
cache()
->deleteMatching("podcast-{$episode->podcast->handle}*");
cache()
->delete("podcast_episode#{$episode->id}");
->deleteMatching('podcast_episode*');
cache()
->deleteMatching("page_podcast#{$episode->podcast_id}*");
cache()

View file

@ -145,7 +145,7 @@ class PersonModel extends Model
$this->select('`id`, `full_name`')
->orderBy('`full_name`', 'ASC')
->findAll(),
static function (array $result, $person): array {
static function (array $result, Person $person): array {
$result[$person->id] = $person->full_name;
return $result;
},

View file

@ -186,7 +186,7 @@ class PodcastModel extends Model
'`' . $prefix . 'fediverse_posts`.`published_at` <= UTC_TIMESTAMP()',
null,
false
)->orWhere('fediverse_posts.published_at', null)
)->orWhere('fediverse_posts.published_at')
->groupEnd()
->groupBy('podcasts.actor_id')
->orderBy('max_published_at', 'DESC');
@ -335,7 +335,7 @@ class PodcastModel extends Model
*/
public function clearCache(array $data): array
{
$podcast = (new self())->getPodcastById((int) (is_array($data['id']) ? $data['id'][0] : $data['id']));
$podcast = (new self())->find((int) (is_array($data['id']) ? $data['id'][0] : $data['id']));
// delete cache for users' podcasts
cache()
@ -427,7 +427,7 @@ class PodcastModel extends Model
*/
protected function setActorAvatar(array $data): array
{
$podcast = (new self())->getPodcastById((int) (is_array($data['id']) ? $data['id'][0] : $data['id']));
$podcast = (new self())->find((int) (is_array($data['id']) ? $data['id'][0] : $data['id']));
if ($podcast instanceof Podcast) {
$podcastActor = (new ActorModel())->find($podcast->actor_id);
@ -452,7 +452,7 @@ class PodcastModel extends Model
*/
protected function updatePodcastActor(array $data): array
{
$podcast = (new self())->getPodcastById((int) (is_array($data['id']) ? $data['id'][0] : $data['id']));
$podcast = (new self())->find((int) (is_array($data['id']) ? $data['id'][0] : $data['id']));
if ($podcast instanceof Podcast) {
$actorModel = new ActorModel();

View file

@ -32,6 +32,7 @@ class PostModel extends FediversePostModel
'episode_id',
'message',
'message_html',
'is_private',
'favourites_count',
'reblogs_count',
'replies_count',
@ -49,7 +50,7 @@ class PostModel extends FediversePostModel
return $this->where([
'episode_id' => $episodeId,
])
->where('in_reply_to_id', null)
->where('in_reply_to_id')
->where('`published_at` <= UTC_TIMESTAMP()', null, false)
->orderBy('published_at', 'DESC')
->findAll();

View file

@ -1,19 +0,0 @@
<?php
declare(strict_types=1);
/**
* @icon('funding:buymeacoffee')
* @icon('funding:donorbox')
* @icon('funding:gofundme')
* @icon('funding:helloasso')
* @icon('funding:indiegogo')
* @icon('funding:kickstarter')
* @icon('funding:kisskissbankbank')
* @icon('funding:kofi')
* @icon('funding:liberapay')
* @icon('funding:patreon')
* @icon('funding:paypal')
* @icon('funding:tipeee')
* @icon('funding:ulule')
*/

View file

@ -1,48 +0,0 @@
<?php
declare(strict_types=1);
/**
* @icon('podcasting:amazon')
* @icon('podcasting:antennapod')
* @icon('podcasting:anytime')
* @icon('podcasting:apple')
* @icon('podcasting:blubrry')
* @icon('podcasting:breez')
* @icon('podcasting:castamatic')
* @icon('podcasting:castbox')
* @icon('podcasting:castopod')
* @icon('podcasting:castro')
* @icon('podcasting:deezer')
* @icon('podcasting:episodes-fm')
* @icon('podcasting:fountain')
* @icon('podcasting:fyyd')
* @icon('podcasting:gpodder')
* @icon('podcasting:ivoox')
* @icon('podcasting:listennotes')
* @icon('podcasting:overcast')
* @icon('podcasting:playerfm')
* @icon('podcasting:plink')
* @icon('podcasting:pocketcasts')
* @icon('podcasting:podbean')
* @icon('podcasting:podcastaddict')
* @icon('podcasting:podcastguru')
* @icon('podcasting:podcastindex')
* @icon('podcasting:podchaser')
* @icon('podcasting:podcloud')
* @icon('podcasting:podfriend')
* @icon('podcasting:podinstall')
* @icon('podcasting:podlink')
* @icon('podcasting:podlp')
* @icon('podcasting:podnews')
* @icon('podcasting:podtail')
* @icon('podcasting:podverse')
* @icon('podcasting:radiopublic')
* @icon('podcasting:sphinxchat')
* @icon('podcasting:spotify')
* @icon('podcasting:spreaker')
* @icon('podcasting:truefans')
* @icon('podcasting:tsacdop')
* @icon('podcasting:tunein')
* @icon('podcasting:youtube-music')
*/

View file

@ -1,28 +0,0 @@
<?php
declare(strict_types=1);
/**
* @icon('social:bluesky')
* @icon('social:discord')
* @icon('social:facebook')
* @icon('social:funkwhale')
* @icon('social:instagram')
* @icon('social:linkedin')
* @icon('social:mastodon')
* @icon('social:matrix')
* @icon('social:misskey')
* @icon('social:mobilizon')
* @icon('social:peertube')
* @icon('social:pixelfed')
* @icon('social:pleroma')
* @icon('social:plume')
* @icon('social:slack')
* @icon('social:telegram')
* @icon('social:threads')
* @icon('social:tiktok')
* @icon('social:twitch')
* @icon('social:writefreely')
* @icon('social:x')
* @icon('social:youtube')
*/

View file

@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 59 40">
<path d="M52.801 38.23h-8.853s-.93-1.975-1.306-2.671c-.378-.697-1.278-.668-1.278-.668H17.33s-.871-.116-1.307.668c-.464.784-1.335 2.67-1.335 2.67H5.98c-2.003 0-3.658-1.625-3.658-3.628V5.893c0-2.003 1.626-3.658 3.629-3.658h46.821c2.003 0 3.658 1.626 3.658 3.629v28.708c.029 2.003-1.626 3.657-3.629 3.657Z" fill="#009486"/>
<path d="M17.01 10.014h24.703c4.267-.028 7.721 3.426 7.692 7.722 0 4.238-3.454 7.692-7.692 7.692H17.01c-4.238 0-7.692-3.454-7.692-7.692 0-4.238 3.454-7.722 7.692-7.722Z" fill="#E7F9E4"/>
<path d="M39.768 14.804a3.773 3.773 0 0 0-3.774 3.777c0 .861.298 1.656.795 2.319 0 0 1.29-.96 3.111-.96 1.357 0 2.946.827 2.946.827.43-.63.695-1.358.695-2.186a3.773 3.773 0 0 0-3.773-3.777Zm-20.9 0a3.773 3.773 0 0 0-3.774 3.777c0 .828.265 1.557.695 2.186 0 0 1.59-.828 2.946-.828 1.821 0 3.112.96 3.112.96a3.707 3.707 0 0 0 .794-2.318 3.773 3.773 0 0 0-3.773-3.777Z" fill="#009486"/>
</svg>

Before

Width:  |  Height:  |  Size: 966 B

View file

@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 59 40">
<path d="M53.024 38.23H43.55s-.35-.726-.728-1.423c-.38-.697-1.283-.668-1.283-.668H17.403s-.875-.116-1.312.668a16.505 16.505 0 0 0-.758 1.422H6.005c-2.011 0-3.673-1.625-3.673-3.628V5.893c0-2.003 1.632-3.658 3.644-3.658h47.02c2.01 0 3.672 1.626 3.672 3.629v28.708c.03 2.003-1.632 3.657-3.644 3.657Z" fill="#009486"/>
<path d="M41.889 10.014H17.082c-4.256 0-7.725 3.484-7.725 7.722s3.47 7.692 7.725 7.692h24.807c4.256 0 7.725-3.454 7.725-7.692a7.655 7.655 0 0 0-7.725-7.722Zm-21.98 9.928s-1.136-.842-2.74-.842c-1.195 0-2.594.726-2.594.726a3.333 3.333 0 0 1-.612-1.916 3.315 3.315 0 0 1 3.323-3.31 3.315 3.315 0 0 1 3.323 3.31c0 .784-.262 1.48-.7 2.032Zm9.591 1.916c-3.644 0-3.498-2.787-3.498-2.787-.058-.522.612-.697.845-.377.117.174.117.174.204.493.496 1.713 2.449 1.626 2.449 1.626s1.953.116 2.449-1.626c.087-.29.087-.32.204-.493.233-.29.903-.145.845.377 0 0 .146 2.787-3.498 2.787Zm14.896-2.003s-1.4-.726-2.595-.726c-1.603 0-2.74.842-2.74.842a3.238 3.238 0 0 1-.7-2.032 3.315 3.315 0 0 1 3.324-3.31 3.315 3.315 0 0 1 3.323 3.31 3.014 3.014 0 0 1-.612 1.916Z" fill="#E7F9E4"/>
<path d="M41.714 14.63a3.315 3.315 0 0 0-3.323 3.309c0 .755.262 1.451.7 2.032 0 0 1.136-.842 2.74-.842 1.195 0 2.594.726 2.594.726.379-.552.612-1.19.612-1.916a3.315 3.315 0 0 0-3.323-3.31ZM17.286 14.63a3.315 3.315 0 0 0-3.323 3.309c0 .726.233 1.364.612 1.916 0 0 1.4-.726 2.594-.726 1.604 0 2.74.842 2.74.842.438-.552.7-1.248.7-2.032a3.315 3.315 0 0 0-3.323-3.31Z" fill="#009486"/>
<path d="M13.73 6.763c-1.837-.493-3.41.61-4.285 2.12-.204.348-.059.638.145.754.292.087.496.03.817-.435.641-1.132 1.72-1.77 2.944-1.539 0 0 .845.262.962-.29.087-.348-.233-.522-.583-.61ZM46.611 7.925c-.03.551.845.551.845.551 1.225.116 1.983.668 2.274 1.945.175.551.35.639.67.639.234-.03.467-.29.35-.697-.408-1.684-1.486-2.845-3.41-2.874-.35-.029-.7.058-.729.436Z" fill="#E7F9E4"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -1,40 +0,0 @@
<svg width="232" height="260" viewBox="0 0 232 260" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M79.5436 200.875L141.5 200.376C143.831 200.376 145.664 198.377 145.664 196.045C145.664 193.714 143.665 191.882 141.333 191.882L79.3771 192.381C77.0454 192.381 75.2134 194.38 75.2134 196.712C75.3799 198.877 77.212 200.875 79.5436 200.875Z" fill="#006D60"/>
<path d="M135.171 191.882L86.0393 192.215C86.0393 192.215 98.5305 194.38 111.355 194.213C124.512 194.213 135.171 191.882 135.171 191.882Z" fill="#00564A"/>
<path d="M166.443 169.873L54.356 170.738L54.1786 147.754L166.266 146.889L166.443 169.873Z" fill="#00564A"/>
<path d="M50.5645 170.064C50.731 180.889 59.5581 189.716 70.3838 189.716L150.66 189.05C161.486 189.05 170.146 179.89 170.146 169.064V165.9C170.146 163.235 167.981 161.07 165.317 161.07L55.3944 161.903C52.7296 161.903 50.5645 164.068 50.5645 166.733V170.064Z" fill="#009486"/>
<path d="M164.987 156.203L55.3978 157.049L55.3952 156.716L164.984 155.87L164.987 156.203Z" fill="#2B6B5F"/>
<path d="M165.008 157.622L55.419 158.468L55.4164 158.135L165.005 157.289L165.008 157.622Z" fill="#2B6B5F"/>
<path d="M165.03 158.873L55.4407 159.719L55.4382 159.386L165.027 158.54L165.03 158.873Z" fill="#2B6B5F"/>
<path d="M111.688 189.383L150.494 189.05C161.319 188.884 170.146 179.89 169.98 169.064C169.98 169.064 168.314 177.891 156.323 182.388C147.496 185.719 135.004 185.053 111.521 185.22C88.0377 185.386 73.2149 186.219 64.2213 183.054C52.2297 178.724 50.3977 170.064 50.3977 170.064C50.5643 180.889 59.3913 189.716 70.217 189.716L111.688 189.383Z" fill="#006D60"/>
<path d="M72.0488 114.103L72.2154 111.938L77.0453 103.611C77.0453 103.611 77.5449 102.445 80.3763 102.611C81.7087 102.611 144.498 106.109 145.83 106.109C148.828 106.276 149.161 107.441 149.161 107.441L151.826 113.77L151.659 115.935L72.0488 114.103Z" fill="#00564A"/>
<path d="M79.0291 104.9L79.0472 104.567L146.731 108.252L146.713 108.584L79.0291 104.9Z" fill="#2B6B5F"/>
<path d="M77.7524 106.133L77.7705 105.8L147.949 109.621L147.931 109.953L77.7524 106.133Z" fill="#2B6B5F"/>
<path d="M45.2346 103.944L72.5486 105.443L74.8803 101.446C76.0462 99.447 78.711 99.7801 78.711 99.7801L148.162 103.611C148.162 103.611 150.66 103.444 151.826 105.776C152.992 108.108 153.824 109.94 153.824 109.94L180.639 111.439C186.468 111.772 191.464 107.275 191.798 101.446L196.294 18.5043C196.628 12.6751 192.131 7.67862 186.301 7.34552L51.2304 0.0173753C45.4012 -0.315722 40.4047 4.1811 40.0716 10.0103L35.5748 92.9516C34.9086 98.6143 39.4054 103.611 45.2346 103.944Z" fill="#009486"/>
<path d="M149.994 72.6327L77.7117 68.6355C77.7117 68.6355 95.8655 72.7992 114.685 73.7985C134.172 74.9644 149.994 72.6327 149.994 72.6327Z" fill="#006D60"/>
<path d="M58.7252 45.3186C58.059 57.6432 67.5523 68.1358 79.7103 68.802L150.993 72.6326C163.318 73.2988 173.81 63.9721 174.477 51.6475C175.143 39.3229 165.649 28.8303 153.491 28.1641L82.2085 24.3335C69.8839 23.5007 59.3914 32.994 58.7252 45.3186Z" fill="#E7F9E4"/>
<path d="M171.334 27.0569C169.538 22.3913 165.594 18.6476 160.122 19.1365C159.124 19.3068 158.18 19.6345 158.138 20.5304C158.158 22.1103 160.681 21.7632 160.681 21.7632C164.211 21.7723 167.082 23.949 168.338 27.5679C169.041 29.0867 169.622 29.2375 170.464 29.1218C171.305 29.0061 171.716 28.1582 171.334 27.0569Z" fill="#E7F9E4"/>
<path d="M71.2163 105.443L45.2347 104.11C39.4055 103.777 34.9087 98.6143 35.4083 92.785L38.5727 36.325L41.4041 92.785C41.4041 92.785 40.4048 98.9473 49.7315 100.946L71.2163 105.443Z" fill="#006D60"/>
<path d="M125.486 54.405C125.486 54.405 120.823 53.9054 115.66 54.405C110.497 54.9046 107.832 56.0705 107.832 56.0705C106.833 56.0705 106 55.4043 106 54.5715C106 53.5723 106.5 53.0726 107.499 52.7395C107.499 52.7395 112.495 51.4071 115.493 51.074C118.491 50.9075 125.32 51.074 125.32 51.074C126.319 51.074 127.152 51.7402 127.152 52.573C126.985 53.4057 126.319 54.2384 125.486 54.405Z" fill="#006D60"/>
<ellipse cx="148" cy="48" rx="7" ry="9" fill="#006D60"/>
<ellipse cx="86" cy="44" rx="7" ry="9" fill="#006D60"/>
<path d="M74.5763 17.4708C74.5763 17.4708 77.0259 17.961 77.1895 16.2952C77.2222 15.2827 76.1117 14.8906 75.2625 14.8905C69.8079 14.1386 66.182 16.9798 64.3849 21.7157C63.9928 22.8262 64.5154 23.6102 65.1686 23.7409C66.1485 23.937 66.5404 23.6757 67.3572 22.1407C68.7621 18.5153 71.0487 17.2744 74.5763 17.4708Z" fill="#E7F9E4"/>
<path d="M178.807 139.086C180.472 138.919 181.805 136.421 181.638 133.423L181.305 123.097C181.138 119.266 178.807 117.601 169.48 118.1C166.815 118.267 159.487 118.767 159.487 118.767C157.822 118.933 156.489 121.431 156.656 124.429L157.655 140.418C158.321 140.418 178.807 139.086 178.807 139.086Z" fill="#006D60"/>
<path d="M213.194 166.667L214.283 166.218C219.791 163.82 222.03 156.274 219.633 150.766L212.03 132.627C209.337 126.094 199.032 113.145 189.668 117.005L187.491 117.902C181.983 120.3 183.714 124.809 186.111 130.317L198.894 160.714C201.228 166.376 207.75 168.911 213.194 166.667Z" fill="#009486"/>
<path d="M213.194 166.667C213.194 166.667 207.161 169.026 201.764 159.022C199.533 154.846 188.429 128.215 187.455 124.923C186.159 120.234 187.491 117.902 187.491 117.902C181.983 120.3 183.714 124.809 186.111 130.317L198.894 160.714C201.228 166.376 207.75 168.911 213.194 166.667Z" fill="#006D60"/>
<path d="M215.827 144.552L203.234 149.838L203.363 150.145L215.956 144.859L215.827 144.552Z" fill="#71AFA3"/>
<path d="M216.894 147.07L204.301 152.356L204.43 152.663L217.023 147.377L216.894 147.07Z" fill="#71AFA3"/>
<path d="M217.89 149.432L205.298 154.718L205.427 155.025L218.019 149.739L217.89 149.432Z" fill="#71AFA3"/>
<path d="M42.403 136.421C40.7375 136.254 39.5716 133.589 40.0713 130.592L41.0706 120.432C41.5702 116.601 43.9019 115.103 53.2286 116.268C55.8934 116.601 63.055 117.601 63.055 117.601C64.7205 117.767 65.8864 120.432 65.3867 123.43L63.2216 139.252C62.8885 139.252 42.403 136.421 42.403 136.421Z" fill="#006D60"/>
<path d="M12.5417 160.989L11.4921 160.606C5.74762 158.749 3.05655 151.346 4.9138 145.601L11.1425 126.784C13.4015 120.155 22.5527 106.368 32.1268 109.463L34.3915 110.21C40.1359 112.067 38.6615 116.762 36.8042 122.507L26.4782 153.862C24.4744 159.791 18.2862 162.846 12.5417 160.989Z" fill="#009486"/>
<path d="M12.5417 160.989C12.5417 160.989 18.6361 162.974 23.2915 152.383C25.1348 147.981 34.2416 120.621 34.8557 117.198C35.8148 112.394 34.3915 110.21 34.3915 110.21C40.136 112.067 38.6615 116.762 36.8043 122.507L26.4782 153.863C24.4744 159.791 18.2862 162.846 12.5417 160.989Z" fill="#006D60"/>
<path d="M8.11157 139.649L21.0859 143.913L21.1899 143.596L8.21557 139.332L8.11157 139.649Z" fill="#71AFA3"/>
<path d="M7.22778 142.062L20.2021 146.326L20.3061 146.009L7.33178 141.745L7.22778 142.062Z" fill="#71AFA3"/>
<path d="M6.50293 144.527L19.4772 148.791L19.5812 148.475L6.60693 144.211L6.50293 144.527Z" fill="#71AFA3"/>
<path d="M58.7251 152.076C47.5663 151.91 45.4012 147.746 45.4012 136.92C45.4012 136.92 45.0681 118.767 45.0681 116.601C45.0681 112.937 52.5628 110.106 59.891 110.273L162.818 112.438C170.146 112.604 177.474 115.602 177.308 119.433C177.308 121.598 176.142 139.585 176.142 139.585C175.642 150.411 173.311 154.408 162.152 154.241L58.7251 152.076Z" fill="#009486"/>
<path d="M110.355 260C159.198 260 198.793 255.004 198.793 248.841C198.793 242.678 159.198 237.682 110.355 237.682C61.5125 237.682 21.9177 242.678 21.9177 248.841C21.9177 255.004 61.5125 260 110.355 260Z" fill="#000000" opacity=".05"/>
<path d="M93.7003 129.426V128.26H94.8662C94.8662 128.427 94.8662 128.427 94.6996 128.926V129.259H96.3651L96.8648 129.759C96.8648 129.926 96.8648 129.926 96.6982 130.259C96.6982 131.591 96.5317 132.59 96.3651 132.923C96.1986 133.423 95.8655 133.59 95.1993 133.59H94.3665C94.3665 133.09 94.3665 132.923 94.2 132.59C94.5331 132.757 94.8662 132.757 95.0327 132.757C95.3658 132.757 95.3658 132.59 95.5324 132.091C95.5324 131.758 95.6989 130.925 95.6989 130.425H94.5331C94.5331 130.758 94.5331 130.758 94.3665 131.091C94.0334 132.257 93.5338 133.09 92.2014 133.923C91.8683 133.423 91.7017 133.256 91.3687 132.923C92.2014 132.59 92.701 132.091 93.0341 131.424C93.2007 131.091 93.2007 130.925 93.3672 130.425H91.7017V129.426H93.7003ZM102.028 133.923C101.528 133.256 101.028 132.757 100.362 132.091C99.6961 132.757 99.0299 133.256 98.0306 133.756C97.8641 133.256 97.6975 133.09 97.3644 132.757C98.1971 132.424 98.8633 132.091 99.363 131.591C99.8626 131.091 100.362 130.592 100.695 129.925H98.1971V128.926H101.695L102.194 129.426C102.028 129.592 102.028 129.592 102.028 129.759C101.695 130.425 101.528 130.925 101.028 131.424C101.695 131.924 102.028 132.257 102.861 133.09L102.028 133.923ZM104.026 133.923V132.923L104.193 129.426V128.593H105.359V130.259C106.358 130.592 107.191 130.925 108.024 131.591L107.357 132.59C106.858 132.091 106.025 131.758 105.525 131.424C105.359 131.258 105.359 131.258 105.192 131.258V133.756L104.026 133.923ZM108.69 130.925C109.023 130.925 109.356 130.925 109.856 131.091H113.853V132.257H108.69V130.925ZM116.351 131.424V131.591C116.184 132.59 115.851 133.256 115.352 133.923L114.352 133.423C114.852 132.757 115.185 131.924 115.352 131.091L116.351 131.424ZM120.015 130.925H117.85V134.422H116.684V130.758H114.685V129.759H116.851V128.926H118.016V129.759H119.349C119.182 129.592 119.182 129.426 119.182 129.259C119.182 128.926 119.515 128.593 119.848 128.593C120.182 128.593 120.515 128.926 120.515 129.259C120.515 129.426 120.348 129.759 120.182 129.925L120.015 130.925ZM119.182 131.091C119.349 131.924 119.682 132.923 120.182 133.423L119.182 133.923C118.683 133.09 118.516 132.59 118.35 131.591C118.35 131.424 118.35 131.424 118.183 131.258L119.182 131.091ZM119.349 129.426C119.349 129.592 119.515 129.759 119.682 129.759C119.848 129.759 120.015 129.592 120.015 129.426C120.015 129.259 119.848 129.093 119.682 129.093C119.515 129.093 119.349 129.259 119.349 129.426ZM121.681 130.425L122.18 131.924L121.181 132.257C121.014 131.591 120.848 131.258 120.681 130.758L121.681 130.425ZM125.178 130.592C125.178 130.758 125.178 130.758 125.011 130.925C124.845 131.758 124.512 132.424 124.179 132.923C123.846 133.423 123.346 133.756 122.846 134.089C122.68 134.256 122.513 134.256 122.18 134.422C122.014 134.089 121.847 133.923 121.514 133.59C122.68 133.09 123.346 132.59 123.846 131.591C124.012 131.091 124.179 130.758 124.179 130.259L125.178 130.592ZM123.013 130.259C123.346 130.925 123.346 131.091 123.513 131.758L122.513 132.091L122.014 130.592L123.013 130.259ZM126.51 134.589V133.59L126.677 130.092V129.259H127.843V130.925C128.842 131.258 129.675 131.758 130.508 132.257L129.841 133.256C129.342 132.923 128.676 132.424 128.009 132.091C127.843 132.091 127.843 132.091 127.843 131.924V134.422L126.51 134.589ZM129.342 129.592C129.508 129.926 129.675 130.092 129.841 130.425L129.342 130.758C129.175 130.425 129.009 130.092 128.842 129.925L129.342 129.592ZM130.175 129.259C130.341 129.426 130.508 129.759 130.841 130.092L130.341 130.425C130.175 130.092 130.008 129.759 129.841 129.592L130.175 129.259Z" fill="#00564A"/>
<path d="M104.193 139.419C104.026 139.419 104.026 139.419 103.86 139.585H103.526C103.193 139.585 102.86 139.419 102.694 139.252C102.527 139.086 102.361 138.753 102.361 138.253C102.361 137.753 102.527 137.42 102.694 137.254C102.86 137.087 103.193 136.921 103.526 136.921H103.86C104.026 136.921 104.026 136.921 104.193 137.087V137.587C104.026 137.42 104.026 137.42 103.86 137.42H103.526C103.36 137.42 103.193 137.42 103.027 137.587C103.193 137.587 103.193 137.92 103.193 138.086C103.193 138.42 103.193 138.586 103.36 138.753C103.526 138.919 103.526 138.919 103.86 138.919H104.193C104.359 138.919 104.359 138.753 104.526 138.753L104.193 139.419ZM105.692 136.921H106.191V138.586H106.524V139.086H106.191V139.585H105.692V139.086H104.692V138.586L105.692 136.921ZM105.692 137.42L105.025 138.42H105.692V137.42ZM107.024 136.921H108.523V137.42H107.524V137.92H107.857C108.19 137.92 108.356 138.086 108.523 138.253C108.689 138.42 108.689 138.586 108.689 138.919C108.689 139.252 108.523 139.419 108.356 139.585C108.19 139.752 107.857 139.752 107.69 139.752H107.357C107.191 139.752 107.191 139.752 107.024 139.585V139.086C107.191 139.086 107.191 139.252 107.357 139.252H107.69C107.857 139.252 108.023 139.252 108.19 139.086C108.356 139.086 108.356 138.919 108.356 138.753C108.356 138.586 108.356 138.42 108.19 138.42C108.023 138.253 108.023 138.253 107.857 138.253H107.524C107.357 138.253 107.357 138.253 107.191 138.42L107.024 136.921ZM109.189 136.921H110.855V137.254L109.855 139.585H109.356L110.188 137.42H109.023L109.189 136.921ZM111.188 138.42C111.188 137.92 111.354 137.587 111.354 137.42C111.521 137.254 111.687 137.087 112.02 137.087C112.354 137.087 112.52 137.254 112.687 137.42C112.853 137.587 112.853 137.92 112.853 138.42C112.853 138.919 112.687 139.252 112.687 139.419C112.52 139.585 112.354 139.752 112.02 139.752C111.687 139.752 111.521 139.585 111.354 139.419C111.188 139.252 111.188 138.753 111.188 138.42ZM112.187 137.42C112.02 137.42 112.02 137.42 111.854 137.587C111.854 137.753 111.687 137.92 111.687 138.253V138.586L112.354 137.587C112.354 137.587 112.354 137.42 112.187 137.42ZM111.854 139.086C111.854 139.252 112.02 139.252 112.187 139.252C112.354 139.252 112.354 139.252 112.52 139.086C112.52 138.919 112.687 138.753 112.687 138.42V138.086L111.854 139.086ZM113.519 137.087H114.186C114.519 137.087 114.852 137.087 115.018 137.254C115.185 137.42 115.185 137.587 115.185 137.92C115.185 138.253 115.018 138.42 114.852 138.586C114.685 138.753 114.352 138.753 114.019 138.753H113.852V139.752H113.353L113.519 137.087ZM114.019 137.587V138.42H114.519C114.519 138.42 114.685 138.253 114.685 138.086C114.685 137.92 114.685 137.92 114.519 137.753C114.519 137.753 114.352 137.587 114.186 137.587H114.019ZM115.684 138.42C115.684 137.92 115.851 137.587 115.851 137.42C116.018 137.254 116.184 137.087 116.517 137.087C116.85 137.087 117.017 137.254 117.183 137.42C117.35 137.587 117.35 137.92 117.35 138.42C117.35 138.919 117.183 139.252 117.183 139.419C117.017 139.585 116.85 139.752 116.517 139.752C116.184 139.752 116.018 139.585 115.851 139.419C115.684 139.252 115.684 138.919 115.684 138.42ZM116.517 137.587C116.351 137.587 116.351 137.587 116.184 137.753C116.184 137.92 116.018 138.086 116.018 138.42V138.753L116.684 137.753C116.684 137.587 116.684 137.587 116.517 137.587ZM116.184 139.252C116.184 139.419 116.351 139.419 116.517 139.419C116.684 139.419 116.684 139.419 116.85 139.252C116.85 139.086 117.017 138.919 117.017 138.586V138.253L116.184 139.252C116.184 139.086 116.184 139.086 116.184 139.252ZM117.85 137.254H118.349C118.849 137.254 119.015 137.42 119.349 137.587C119.515 137.753 119.682 138.086 119.682 138.586C119.682 139.086 119.515 139.419 119.349 139.585C119.182 139.752 118.849 139.918 118.349 139.918H117.85V137.254ZM118.349 137.587V139.252H118.516C118.682 139.252 118.849 139.252 119.015 139.086C119.182 138.919 119.182 138.753 119.182 138.42C119.182 138.086 119.182 137.92 119.015 137.753C118.849 137.753 118.682 137.753 118.349 137.587Z" fill="#00564A"/>
<path d="M93.7003 129.093V127.927H94.8662C94.8662 128.093 94.8662 128.093 94.6996 128.593V128.926H96.3651L96.8648 129.426C96.8648 129.592 96.8648 129.592 96.6982 129.925C96.6982 131.258 96.5317 132.257 96.3651 132.59C96.1986 133.09 95.8655 133.256 95.1993 133.256H94.3665C94.3665 132.757 94.3665 132.59 94.2 132.257C94.5331 132.424 94.8662 132.424 95.0327 132.424C95.3658 132.424 95.3658 132.257 95.5324 131.757C95.5324 131.424 95.6989 130.592 95.6989 130.092H94.5331C94.5331 130.425 94.5331 130.425 94.3665 130.758C94.0334 131.924 93.5338 132.757 92.2014 133.59C91.8683 133.09 91.7017 132.923 91.3687 132.59C92.2014 132.257 92.701 131.758 93.0341 131.091C93.2007 130.758 93.2007 130.592 93.3672 130.092H91.7017V129.093H93.7003ZM102.028 133.59C101.528 132.923 101.028 132.424 100.362 131.757C99.6961 132.424 99.0299 132.923 98.0306 133.423C97.8641 132.923 97.6975 132.757 97.3644 132.424C98.1971 132.091 98.8633 131.758 99.363 131.258C99.8626 130.758 100.362 130.259 100.695 129.592H98.1971V128.593H101.695L102.194 129.093C102.028 129.259 102.028 129.259 102.028 129.426C101.695 130.092 101.528 130.592 101.028 131.091C101.695 131.591 102.028 131.924 102.861 132.757L102.028 133.59ZM104.026 133.59V132.59L104.193 129.093V128.26H105.359V129.925C106.358 130.259 107.191 130.592 108.024 131.258L107.357 132.257C106.858 131.757 106.025 131.424 105.525 131.091C105.359 130.925 105.359 130.925 105.192 130.925V133.423L104.026 133.59ZM108.69 130.425C109.023 130.425 109.356 130.425 109.856 130.592H113.853V131.757H108.69V130.425ZM116.351 130.925V131.091C116.184 132.091 115.851 132.757 115.352 133.423L114.352 132.923C114.852 132.257 115.185 131.424 115.352 130.592L116.351 130.925ZM120.015 130.592H117.85V134.089H116.684V130.425H114.685V129.426H116.851V128.593H118.016V129.426H119.349C119.182 129.259 119.182 129.093 119.182 128.926C119.182 128.593 119.515 128.26 119.848 128.26C120.182 128.26 120.515 128.593 120.515 128.926C120.515 129.093 120.348 129.426 120.182 129.592L120.015 130.592ZM119.182 130.758C119.349 131.591 119.682 132.59 120.182 133.09L119.182 133.59C118.683 132.757 118.516 132.257 118.35 131.258C118.35 131.091 118.35 131.091 118.183 130.925L119.182 130.758ZM119.349 129.093C119.349 129.259 119.515 129.426 119.682 129.426C119.848 129.426 120.015 129.259 120.015 129.093C120.015 128.926 119.848 128.76 119.682 128.76C119.515 128.76 119.349 128.926 119.349 129.093ZM121.681 130.092L122.18 131.591L121.181 131.924C121.014 131.258 120.848 130.925 120.681 130.425L121.681 130.092ZM125.178 130.259C125.178 130.425 125.178 130.425 125.011 130.592C124.845 131.424 124.512 132.091 124.179 132.59C123.846 133.09 123.346 133.423 122.846 133.756C122.68 133.923 122.513 133.923 122.18 134.089C122.014 133.756 121.847 133.59 121.514 133.256C122.68 132.757 123.346 132.257 123.846 131.258C124.012 130.758 124.179 130.425 124.179 129.925L125.178 130.259ZM123.013 129.925C123.346 130.592 123.346 130.758 123.513 131.424L122.513 131.757L122.014 130.259L123.013 129.925ZM126.51 134.256V133.256L126.677 129.759V128.926H127.843V130.592C128.842 130.925 129.675 131.424 130.508 131.924L129.841 132.923C129.342 132.59 128.676 132.091 128.009 131.757C127.843 131.757 127.843 131.757 127.843 131.591V134.089L126.51 134.256ZM129.342 129.259C129.508 129.592 129.675 129.759 129.841 130.092L129.342 130.425C129.175 130.092 129.009 129.759 128.842 129.592L129.342 129.259ZM130.175 128.926C130.341 129.093 130.508 129.426 130.841 129.759L130.341 130.092C130.175 129.759 130.008 129.426 129.841 129.259L130.175 128.926Z" fill="#E7F9E4"/>
<path d="M104.193 139.086C104.026 139.086 104.026 139.086 103.86 139.252H103.526C103.193 139.252 102.86 139.086 102.694 138.919C102.527 138.753 102.361 138.42 102.361 137.92C102.361 137.42 102.527 137.087 102.694 136.921C102.86 136.754 103.193 136.587 103.526 136.587H103.86C104.026 136.587 104.026 136.587 104.193 136.754V137.254C104.026 137.087 104.026 137.087 103.86 137.087H103.526C103.36 137.087 103.193 137.087 103.027 137.254C103.193 137.254 103.193 137.42 103.193 137.753C103.193 138.086 103.193 138.253 103.36 138.419C103.526 138.586 103.526 138.586 103.86 138.586H104.193C104.359 138.586 104.359 138.419 104.526 138.419L104.193 139.086ZM105.692 136.587H106.191V138.253H106.524V138.753H106.191V139.252H105.692V138.753H104.692V138.253L105.692 136.587ZM105.692 137.087L105.025 138.086H105.692V137.087ZM107.024 136.587H108.523V137.087H107.524V137.587H107.857C108.19 137.587 108.356 137.753 108.523 137.92C108.689 138.086 108.689 138.253 108.689 138.586C108.689 138.919 108.523 139.086 108.356 139.252C108.19 139.419 107.857 139.419 107.69 139.419H107.357C107.191 139.419 107.191 139.419 107.024 139.252V138.753C107.191 138.753 107.191 138.919 107.357 138.919H107.69C107.857 138.919 108.023 138.919 108.19 138.753C108.356 138.753 108.356 138.586 108.356 138.419C108.356 138.253 108.356 138.086 108.19 138.086C108.023 137.92 108.023 137.92 107.857 137.92H107.524C107.357 137.92 107.357 137.92 107.191 138.086L107.024 136.587ZM109.189 136.587H110.855V136.921L109.855 139.252H109.356L110.188 137.087H109.023L109.189 136.587ZM111.188 137.92C111.188 137.42 111.354 137.087 111.354 136.921C111.521 136.754 111.687 136.587 112.02 136.587C112.354 136.587 112.52 136.754 112.687 136.921C112.853 137.087 112.853 137.42 112.853 137.92C112.853 138.42 112.687 138.753 112.687 138.919C112.52 139.086 112.354 139.252 112.02 139.252C111.687 139.252 111.521 139.086 111.354 138.919C111.188 138.753 111.188 138.42 111.188 137.92ZM112.187 137.087C112.02 137.087 112.02 137.087 111.854 137.254C111.854 137.42 111.687 137.587 111.687 137.92V138.253L112.354 137.254C112.354 137.087 112.354 137.087 112.187 137.087ZM111.854 138.753C111.854 138.919 112.02 138.919 112.187 138.919C112.354 138.919 112.354 138.919 112.52 138.753C112.52 138.586 112.687 138.42 112.687 138.086V137.753L111.854 138.753ZM113.519 136.754H114.186C114.519 136.754 114.852 136.754 115.018 136.921C115.185 137.087 115.185 137.254 115.185 137.587C115.185 137.92 115.018 138.086 114.852 138.253C114.685 138.419 114.352 138.419 114.019 138.419H113.852V139.419H113.353L113.519 136.754ZM114.019 137.254V138.086H114.519C114.519 138.086 114.685 137.92 114.685 137.753C114.685 137.587 114.685 137.587 114.519 137.42C114.519 137.42 114.352 137.254 114.186 137.254H114.019ZM115.684 138.086C115.684 137.587 115.851 137.254 115.851 137.087C116.018 136.921 116.184 136.754 116.517 136.754C116.85 136.754 117.017 136.921 117.183 137.087C117.35 137.254 117.35 137.587 117.35 138.086C117.35 138.586 117.183 138.919 117.183 139.086C117.017 139.252 116.85 139.419 116.517 139.419C116.184 139.419 116.018 139.252 115.851 139.086C115.684 138.919 115.684 138.586 115.684 138.086ZM116.517 137.254C116.351 137.254 116.351 137.254 116.184 137.42C116.184 137.587 116.018 137.753 116.018 138.086V138.419L116.684 137.42C116.684 137.254 116.684 137.254 116.517 137.254ZM116.184 138.753C116.184 138.919 116.351 138.919 116.517 138.919C116.684 138.919 116.684 138.919 116.85 138.753C116.85 138.586 117.017 138.42 117.017 138.086V137.753L116.184 138.753ZM117.85 136.754H118.349C118.849 136.754 119.015 136.921 119.349 137.087C119.515 137.254 119.682 137.587 119.682 138.086C119.682 138.586 119.515 138.919 119.349 139.086C119.182 139.252 118.849 139.419 118.349 139.419H117.85V136.754ZM118.349 137.254V138.919H118.516C118.682 138.919 118.849 138.919 119.015 138.753C119.182 138.586 119.182 138.42 119.182 138.086C119.182 137.753 119.182 137.587 119.015 137.42C118.849 137.42 118.682 137.254 118.349 137.254Z" fill="#E7F9E4"/>
</svg>

Before

Width:  |  Height:  |  Size: 22 KiB

View file

@ -1,40 +0,0 @@
import "@github/markdown-toolbar-element";
import "@github/relative-time-element";
import "./modules/audio-clipper";
import ClientTimezone from "./modules/ClientTimezone";
import Clipboard from "./modules/Clipboard";
import DateTimePicker from "./modules/DateTimePicker";
import Dropdown from "./modules/Dropdown";
import HotKeys from "./modules/HotKeys";
import "./modules/markdown-preview";
import "./modules/markdown-write-preview";
import MultiSelect from "./modules/MultiSelect";
import "./modules/permalink-edit";
import "./modules/play-soundbite";
import PublishMessageWarning from "./modules/PublishMessageWarning";
import Select from "./modules/Select";
import SidebarToggler from "./modules/SidebarToggler";
import Slugify from "./modules/Slugify";
import ThemePicker from "./modules/ThemePicker";
import Time from "./modules/Time";
import Tooltip from "./modules/Tooltip";
import ValidateFileSize from "./modules/ValidateFileSize";
import "./modules/video-clip-previewer";
import VideoClipBuilder from "./modules/VideoClipBuilder";
import "./modules/xml-editor";
Dropdown();
Tooltip();
Select();
MultiSelect();
Slugify();
SidebarToggler();
ClientTimezone();
DateTimePicker();
Time();
Clipboard();
ThemePicker();
PublishMessageWarning();
HotKeys();
ValidateFileSize();
VideoClipBuilder();

View file

@ -1,5 +0,0 @@
import Dropdown from "./modules/Dropdown";
import Tooltip from "./modules/Tooltip";
Dropdown();
Tooltip();

View file

@ -1,3 +0,0 @@
import DrawCharts from "./modules/Charts";
DrawCharts();

View file

@ -1,3 +0,0 @@
import Tooltip from "./modules/Tooltip";
Tooltip();

View file

@ -1,3 +0,0 @@
import DrawEpisodesMaps from "./modules/EpisodesMap";
DrawEpisodesMaps();

View file

@ -1,10 +0,0 @@
import "@github/relative-time-element";
import SidebarToggler from "./modules/SidebarToggler";
import Time from "./modules/Time";
import Toggler from "./modules/Toggler";
import Tooltip from "./modules/Tooltip";
Time();
Toggler();
Tooltip();
SidebarToggler();

View file

@ -1,15 +0,0 @@
@import url("./tailwind.css");
@import url("./custom.css");
@import url("./fonts.css");
@import url("./colors.css");
@import url("./breadcrumb.css");
@import url("./dropdown.css");
@import url("./choices.css");
@import url("./radioBtn.css");
@import url("./colorRadioBtn.css");
@import url("./switch.css");
@import url("./radioToggler.css");
@import url("./formInputTabs.css");
@import url("./stickyHeader.css");
@import url("./readMore.css");
@import url("./seeMore.css");

View file

@ -22,19 +22,19 @@ class Alert extends Component
$variants = [
'success' => [
'class' => 'text-pine-900 bg-pine-100 border-pine-300',
'glyph' => 'check-fill', // @icon('check-fill')
'glyph' => 'check-fill', // @icon("check-fill")
],
'danger' => [
'class' => 'text-red-900 bg-red-100 border-red-300',
'glyph' => 'close-fill', // @icon('close-fill')
'glyph' => 'close-fill', // @icon("close-fill")
],
'warning' => [
'class' => 'text-yellow-900 bg-yellow-100 border-yellow-300',
'glyph' => 'alert-fill', // @icon('alert-fill')
'glyph' => 'alert-fill', // @icon("alert-fill")
],
'default' => [
'class' => 'text-blue-900 bg-blue-100 border-blue-300',
'glyph' => 'error-warning-fill', // @icon('error-warning-fill')
'glyph' => 'error-warning-fill', // @icon("error-warning-fill")
],
];

View file

@ -23,12 +23,12 @@ class DashboardCard extends Component
public function render(): string
{
$glyph = icon($this->glyph, [
$glyph = (string) icon($this->glyph, [
'class' => 'flex-shrink-0 bg-base rounded-full w-8 h-8 p-2 text-accent-base',
]);
if ($this->href !== null && $this->href !== '') {
$chevronRight = icon('arrow-right-s-fill');
$chevronRight = (string) icon('arrow-right-s-fill');
$viewLang = lang('Common.view');
return <<<HTML
<a href="{$this->href}" class="flex items-center justify-between w-full gap-4 p-4 lg:max-w-sm lg:flex-col xl:flex-row bg-elevated focus:ring-accent rounded-xl border-3 border-subtle group">

View file

@ -24,7 +24,7 @@ class MarkdownEditor extends FormComponent
$this->attributes['rows'] = 6;
$textarea = form_textarea($this->attributes, old($this->name, $this->value));
$markdownIcon = icon(
$markdownIcon = (string) icon(
'markdown-fill',
[
'class' => 'mr-1 text-lg opacity-40',
@ -41,41 +41,41 @@ class MarkdownEditor extends FormComponent
[
'name' => 'header',
'tag' => 'md-header',
'icon' => icon('heading'),
'icon' => (string) icon('heading'),
],
[
'name' => 'bold',
'tag' => 'md-bold',
'icon' => icon('bold'),
'icon' => (string) icon('bold'),
],
[
'name' => 'italic',
'tag' => 'md-italic',
'icon' => icon('italic'),
'icon' => (string) icon('italic'),
],
],
[
[
'name' => 'unordered-list',
'tag' => 'md-unordered-list',
'icon' => icon('list-unordered'),
'icon' => (string) icon('list-unordered'),
],
[
'name' => 'ordered-list',
'tag' => 'md-ordered-list ',
'icon' => icon('list-ordered-2'),
'icon' => (string) icon('list-ordered-2'),
],
],
[
[
'name' => 'link',
'tag' => 'md-link',
'icon' => icon('link'),
'icon' => (string) icon('link'),
],
[
'name' => 'image',
'tag' => 'md-image',
'icon' => icon('image-add-fill'),
'icon' => (string) icon('image-add-fill'),
],
],
];

View file

@ -26,7 +26,7 @@ class IconButton extends Button
parent::__construct($allAttributes);
$this->slot = icon($this->glyph, [
$this->slot = (string) icon($this->glyph, [
'class' => $glyphSize[$this->size],
]);
}

View file

@ -54,7 +54,7 @@ if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) {
$args = implode(', ', array_map(static fn ($value) => match (true) {
is_object($value) => 'Object(' . $value::class . ')',
is_array($value) => count($value) ? '[...]' : '[]',
is_array($value) => $value !== [] ? '[...]' : '[]',
$value === null => 'null', // return the lowercased version
default => var_export($value, true),
}, array_values($error['args'] ?? [])));

View file

@ -3,7 +3,7 @@
--main-text-color: #555;
--dark-text-color: #222;
--light-text-color: #c7c7c7;
--brand-primary-color: #e06e3f;
--brand-primary-color: #dc4814;
--light-bg-color: #ededee;
--dark-bg-color: #404040;
}
@ -11,8 +11,9 @@
body {
height: 100%;
background: var(--main-bg-color);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial,
sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif,
"Apple Color Emoji", "Segoe UI Emoji";
color: var(--main-text-color);
font-weight: 300;
margin: 0;
@ -77,10 +78,13 @@ p.lead {
}
.environment {
background: var(--dark-bg-color);
color: var(--light-text-color);
background: var(--brand-primary-color);
color: var(--main-bg-color);
text-align: center;
padding: 0.2rem;
padding: calc(4px + 0.2083vw);
width: 100%;
top: 0;
position: fixed;
}
.source {

View file

@ -5,6 +5,7 @@
var tabLinks = [];
var contentDivs = [];
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function init() {
// Grab the tab links and content divs from the page
var tabListItems = document.getElementById("tabs").childNodes;
@ -85,6 +86,7 @@ function getHash(url) {
//--------------------------------------------------------------------
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function toggle(elem) {
elem = document.getElementById(elem);

View file

@ -0,0 +1,29 @@
<?= helper(['components', 'svg']) ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title><?= lang('Errors.pageNotFound') ?></title>
<link rel='stylesheet' type='text/css' href='<?= route_to('themes-colors-css') ?>' />
<?= service('vite')->asset('styles/index.css') ?>
</head>
<body class="flex flex-col items-center justify-center min-h-screen px-2 text-center bg-base theme-<?= service('settings')
->get('App.theme') ?>">
<?= svg('castopod-mascot_confused', 'h-64') ?>
<h1 class="mt-4 text-3xl font-bold font-display md:text-4xl lg:text-5xl">400</h1>
<p class="mb-6 text-lg text-skin-muted md:text-xl lg:text-2xl">
<?php if (ENVIRONMENT !== 'production') : ?>
<?= nl2br(esc($message)) ?>
<?php else : ?>
<?= lang('Errors.sorryBadRequest') ?>
<?php endif; ?>
</p>
<a href="<?= previous_url() ?>" class="inline-flex items-center justify-center px-3 py-1 text-sm font-semibold rounded-full shadow-xs text-accent-contrast focus:ring-accent md:px-4 md:py-2 md:text-base bg-accent-base hover:bg-accent-hover"><?= lang('Common.go_back') ?></a>
</body>
</html>

View file

@ -8,7 +8,7 @@
<title>403 Forbidden</title>
<link rel='stylesheet' type='text/css' href='<?= route_to('themes-colors-css') ?>' />
<?= service('vite')->asset('styles/index.css', 'css') ?>
<?= service('vite')->asset('styles/index.css') ?>
</head>
<body class="flex flex-col items-center justify-center min-h-screen px-2 text-center bg-base theme-<?= service('settings')

View file

@ -8,7 +8,7 @@
<title><?= lang('Errors.pageNotFound') ?></title>
<link rel='stylesheet' type='text/css' href='<?= route_to('themes-colors-css') ?>' />
<?= service('vite')->asset('styles/index.css', 'css') ?>
<?= service('vite')->asset('styles/index.css') ?>
</head>
<body class="flex flex-col items-center justify-center min-h-screen px-2 text-center bg-base theme-<?= service('settings')

View file

@ -4,7 +4,6 @@ declare(strict_types=1);
use CodeIgniter\CodeIgniter;
use CodeIgniter\HTTP\Header;
use Config\Services;
$errorId = uniqid('error', true);
?>
@ -28,7 +27,7 @@ $errorId = uniqid('error', true);
<!-- Header -->
<div class="header">
<div class="environment">
Displayed at <?= esc(date('H:i:sa')) ?> &mdash;
Displayed at <?= esc(date('H:i:s')) ?> &mdash;
PHP: <?= esc(PHP_VERSION) ?> &mdash;
CodeIgniter: <?= esc(CodeIgniter::CI_VERSION) ?> --
Environment: <?= ENVIRONMENT ?>
@ -228,7 +227,7 @@ while ($prevException = $last->getPrevious()) {
<!-- Request -->
<div class="content" id="request">
<?php $request = Services::request(); ?>
<?php $request = service('request'); ?>
<table>
<tbody>
@ -346,7 +345,7 @@ while ($prevException = $last->getPrevious()) {
<!-- Response -->
<?php
$response = Services::response();
$response = service('response');
$response->setStatusCode(http_response_code());
?>
<div class="content" id="response">

View file

@ -9,9 +9,9 @@
<title><?= lang('Errors.whoops') ?></title>
<link rel='stylesheet' type='text/css' href='<?= route_to('themes-colors-css') ?>' />
<?= service('vite')->asset('styles/index.css', 'css') ?>
<?= service('vite')->asset('styles/index.css') ?>
<?php if (auth()->loggedIn()): ?>
<?= service('vite')->asset('js/error.ts', 'js') ?>
<?= service('vite')->asset('js/error.ts') ?>
<?php endif; ?>
</head>

View file

@ -23,7 +23,7 @@
"conditions": []
},
{
"action": "composer analyse",
"action": "composer phpstan",
"options": [],
"conditions": []
},

View file

@ -1,3 +1 @@
/* eslint-disable */
module.exports = { extends: ["@commitlint/config-conventional"] };

View file

@ -1,6 +1,6 @@
{
"name": "adaures/castopod",
"version": "1.11.0",
"version": "1.15.5",
"type": "project",
"description": "Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience.",
"homepage": "https://castopod.org",
@ -9,41 +9,43 @@
"php": "^8.1",
"adaures/ipcat-php": "^v1.0.0",
"adaures/podcast-persons-taxonomy": "^v1.0.1",
"aws/aws-sdk-php": "^3.305.4",
"aws/aws-sdk-php": "^3.369.36",
"chrisjean/php-ico": "^1.0.4",
"cocur/slugify": "^v4.5.1",
"codeigniter4/framework": "v4.5.1",
"cocur/slugify": "^v4.7.1",
"codeigniter4/framework": "4.6.5",
"codeigniter4/settings": "v2.2.0",
"codeigniter4/shield": "v1.0.3",
"codeigniter4/shield": "^1.2.0",
"codeigniter4/tasks": "dev-develop",
"geoip2/geoip2": "v3.0.0",
"james-heinrich/getid3": "^2.0.0-beta5",
"league/commonmark": "^2.4.2",
"geoip2/geoip2": "3.3.0",
"james-heinrich/getid3": "^2.0.0-beta6",
"league/commonmark": "^2.8.0",
"league/html-to-markdown": "5.1.1",
"melbahja/seo": "^v2.1.1",
"michalsn/codeigniter4-uuid": "v1.1.0",
"mpratt/embera": "^2.0.38",
"melbahja/seo": "3.0.2",
"michalsn/codeigniter4-uuid": "1.3.1",
"mpratt/embera": "^2.0.42",
"opawg/user-agents-v2-php": "dev-main",
"phpseclib/phpseclib": "~2.0.47",
"vlucas/phpdotenv": "v5.6.0",
"phpseclib/phpseclib": "~2.0.51",
"vlucas/phpdotenv": "^5.6.3",
"whichbrowser/parser": "^v2.1.8",
"yassinedoghri/codeigniter-icons": "dev-develop",
"yassinedoghri/codeigniter-vite": "^2.1",
"yassinedoghri/php-icons": "^1.3.0",
"yassinedoghri/podcast-feed": "dev-main"
},
"require-dev": {
"captainhook/captainhook": "^5.23.0",
"codeigniter/phpstan-codeigniter": "v1.4.3",
"mikey179/vfsstream": "^v1.6.11",
"phpstan/extension-installer": "^1.3.1",
"phpstan/phpstan": "^1.10.67",
"phpunit/phpunit": "^10.5.20",
"rector/rector": "^1.0.4",
"symplify/coding-standard": "^12.1.4",
"symplify/easy-coding-standard": "^12.1.14"
"captainhook/captainhook": "^5.28.3",
"codeigniter/phpstan-codeigniter": "^1.5.4",
"mikey179/vfsstream": "v1.6.12",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan": "^2.1.39",
"phpunit/phpunit": "^10.5.63",
"rector/rector": "^2.3.6",
"symplify/coding-standard": "^13.0.0",
"symplify/easy-coding-standard": "^13.0.4"
},
"autoload": {
"psr-4": {
"App\\": "app/"
"App\\": "app/",
"Config\\": "app/Config/"
},
"exclude-from-classmap": [
"**/Database/Migrations/**"
@ -57,7 +59,7 @@
"scripts": {
"dev": "php spark serve",
"test": "vendor/bin/phpunit --no-coverage",
"analyse": "vendor/bin/phpstan analyse --ansi",
"phpstan": "vendor/bin/phpstan analyse --ansi",
"rector": "vendor/bin/rector process --dry-run --ansi --memory-limit=2G",
"rector:fix": "vendor/bin/rector process --ansi --memory-limit=2G",
"style": "vendor/bin/ecs check --ansi",

4021
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b0b783684ed8d36e636fac3632c78c27",
"content-hash": "ae175922494cbac88f4477946a143ae8",
"packages": [
{
"name": "adaures/ipcat-php",
@ -24,7 +24,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["GPL-3.0-only"],
"license": [
"GPL-3.0-only"
],
"authors": [
{
"name": "Benjamin Bellamy",
@ -56,7 +58,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Benjamin Bellamy",
@ -75,16 +79,16 @@
},
{
"name": "adhocore/cli",
"version": "v1.7.1",
"version": "v1.9.4",
"source": {
"type": "git",
"url": "https://github.com/adhocore/php-cli.git",
"reference": "3fde60a838912e71c82ed0f48048685dc32dbc77"
"reference": "474dc3d7ab139796be98b104d891476e3916b6f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/adhocore/php-cli/zipball/3fde60a838912e71c82ed0f48048685dc32dbc77",
"reference": "3fde60a838912e71c82ed0f48048685dc32dbc77",
"url": "https://api.github.com/repos/adhocore/php-cli/zipball/474dc3d7ab139796be98b104d891476e3916b6f4",
"reference": "474dc3d7ab139796be98b104d891476e3916b6f4",
"shasum": ""
},
"require": {
@ -95,12 +99,17 @@
},
"type": "library",
"autoload": {
"files": [
"src/functions.php"
],
"psr-4": {
"Ahc\\Cli\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Jitendra Adhikari",
@ -127,7 +136,7 @@
],
"support": {
"issues": "https://github.com/adhocore/php-cli/issues",
"source": "https://github.com/adhocore/php-cli/tree/v1.7.1"
"source": "https://github.com/adhocore/php-cli/tree/v1.9.4"
},
"funding": [
{
@ -139,20 +148,20 @@
"type": "github"
}
],
"time": "2024-03-28T08:30:12+00:00"
"time": "2025-05-11T13:23:54+00:00"
},
{
"name": "aws/aws-crt-php",
"version": "v1.2.5",
"version": "v1.2.7",
"source": {
"type": "git",
"url": "https://github.com/awslabs/aws-crt-php.git",
"reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b"
"reference": "d71d9906c7bb63a28295447ba12e74723bd3730e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/0ea1f04ec5aa9f049f97e012d1ed63b76834a31b",
"reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b",
"url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e",
"reference": "d71d9906c7bb63a28295447ba12e74723bd3730e",
"shasum": ""
},
"require": {
@ -167,10 +176,14 @@
},
"type": "library",
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["Apache-2.0"],
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "AWS SDK Common Runtime Team",
@ -179,25 +192,30 @@
],
"description": "AWS Common Runtime for PHP",
"homepage": "https://github.com/awslabs/aws-crt-php",
"keywords": ["amazon", "aws", "crt", "sdk"],
"keywords": [
"amazon",
"aws",
"crt",
"sdk"
],
"support": {
"issues": "https://github.com/awslabs/aws-crt-php/issues",
"source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.5"
"source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7"
},
"time": "2024-04-19T21:30:56+00:00"
"time": "2024-10-18T22:15:13+00:00"
},
{
"name": "aws/aws-sdk-php",
"version": "3.305.4",
"version": "3.369.36",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "fc26a2ebf720e0b75a353d7e8fe206796671e00b"
"reference": "2a69e7df5e03be9e08f9f73fb6a8cc9dd63b59c0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/fc26a2ebf720e0b75a353d7e8fe206796671e00b",
"reference": "fc26a2ebf720e0b75a353d7e8fe206796671e00b",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2a69e7df5e03be9e08f9f73fb6a8cc9dd63b59c0",
"reference": "2a69e7df5e03be9e08f9f73fb6a8cc9dd63b59c0",
"shasum": ""
},
"require": {
@ -205,37 +223,36 @@
"ext-json": "*",
"ext-pcre": "*",
"ext-simplexml": "*",
"guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
"guzzlehttp/promises": "^1.4.0 || ^2.0",
"guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
"mtdowling/jmespath.php": "^2.6",
"php": ">=7.2.5",
"psr/http-message": "^1.0 || ^2.0"
"guzzlehttp/guzzle": "^7.4.5",
"guzzlehttp/promises": "^2.0",
"guzzlehttp/psr7": "^2.4.5",
"mtdowling/jmespath.php": "^2.8.0",
"php": ">=8.1",
"psr/http-message": "^1.0 || ^2.0",
"symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0"
},
"require-dev": {
"andrewsville/php-token-reflection": "^1.4",
"aws/aws-php-sns-message-validator": "~1.0",
"behat/behat": "~3.0",
"composer/composer": "^1.10.22",
"composer/composer": "^2.7.8",
"dms/phpunit-arraysubset-asserts": "^0.4.0",
"doctrine/cache": "~1.4",
"ext-dom": "*",
"ext-openssl": "*",
"ext-pcntl": "*",
"ext-sockets": "*",
"nette/neon": "^2.3",
"paragonie/random_compat": ">= 2",
"phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
"psr/cache": "^1.0",
"psr/simple-cache": "^1.0",
"sebastian/comparator": "^1.2.3 || ^4.0",
"yoast/phpunit-polyfills": "^1.0"
"phpunit/phpunit": "^9.6",
"psr/cache": "^2.0 || ^3.0",
"psr/simple-cache": "^2.0 || ^3.0",
"sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
"yoast/phpunit-polyfills": "^2.0"
},
"suggest": {
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
"doctrine/cache": "To use the DoctrineCacheAdapter",
"ext-curl": "To send requests using cURL",
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
"ext-pcntl": "To use client-side monitoring",
"ext-sockets": "To use client-side monitoring"
},
"type": "library",
@ -245,13 +262,20 @@
}
},
"autoload": {
"files": ["src/functions.php"],
"files": [
"src/functions.php"
],
"psr-4": {
"Aws\\": "src/"
}
},
"exclude-from-classmap": [
"src/data/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["Apache-2.0"],
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Amazon Web Services",
@ -271,33 +295,33 @@
"sdk"
],
"support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.305.4"
"source": "https://github.com/aws/aws-sdk-php/tree/3.369.36"
},
"time": "2024-04-26T18:06:31+00:00"
"time": "2026-02-17T19:45:01+00:00"
},
{
"name": "brick/math",
"version": "0.12.1",
"version": "0.14.8",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
"reference": "f510c0a40911935b77b86859eb5223d58d660df1"
"reference": "63422359a44b7f06cae63c3b429b59e8efcc0629"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1",
"reference": "f510c0a40911935b77b86859eb5223d58d660df1",
"url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629",
"reference": "63422359a44b7f06cae63c3b429b59e8efcc0629",
"shasum": ""
},
"require": {
"php": "^8.1"
"php": "^8.2"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^10.1",
"vimeo/psalm": "5.16.0"
"phpstan/phpstan": "2.1.22",
"phpunit/phpunit": "^11.5"
},
"type": "library",
"autoload": {
@ -306,7 +330,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "Arbitrary-precision arithmetic library",
"keywords": [
"Arbitrary-precision",
@ -325,7 +351,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
"source": "https://github.com/brick/math/tree/0.12.1"
"source": "https://github.com/brick/math/tree/0.14.8"
},
"funding": [
{
@ -333,7 +359,7 @@
"type": "github"
}
],
"time": "2023-11-29T23:19:16+00:00"
"time": "2026-02-10T14:33:43+00:00"
},
{
"name": "chrisjean/php-ico",
@ -355,10 +381,14 @@
},
"type": "library",
"autoload": {
"classmap": ["class-php-ico.php"]
"classmap": [
"class-php-ico.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["GPL-2.0+"],
"license": [
"GPL-2.0+"
],
"authors": [
{
"name": "Chris Jean",
@ -368,7 +398,10 @@
],
"description": "An easy-to-use library to generate valid ICO files.",
"homepage": "https://github.com/chrisbliss18/php-ico",
"keywords": ["favicon", "ico"],
"keywords": [
"favicon",
"ico"
],
"support": {
"issues": "https://github.com/chrisbliss18/php-ico/issues",
"source": "https://github.com/chrisbliss18/php-ico"
@ -377,21 +410,21 @@
},
{
"name": "cocur/slugify",
"version": "v4.5.1",
"version": "v4.7.1",
"source": {
"type": "git",
"url": "https://github.com/cocur/slugify.git",
"reference": "7c6e088228b9f082050876ae8b0cd287b117b840"
"reference": "a860dab2b9f5f37775fc6414d4f049434848165f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/cocur/slugify/zipball/7c6e088228b9f082050876ae8b0cd287b117b840",
"reference": "7c6e088228b9f082050876ae8b0cd287b117b840",
"url": "https://api.github.com/repos/cocur/slugify/zipball/a860dab2b9f5f37775fc6414d4f049434848165f",
"reference": "a860dab2b9f5f37775fc6414d4f049434848165f",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
"php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"conflict": {
"symfony/config": "<3.4 || >=4,<4.3",
@ -424,7 +457,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Florian Eckerstorfer",
@ -437,43 +472,46 @@
}
],
"description": "Converts a string into a slug.",
"keywords": ["slug", "slugify"],
"keywords": [
"slug",
"slugify"
],
"support": {
"issues": "https://github.com/cocur/slugify/issues",
"source": "https://github.com/cocur/slugify/tree/v4.5.1"
"source": "https://github.com/cocur/slugify/tree/v4.7.1"
},
"time": "2023-09-17T07:26:20+00:00"
"time": "2025-11-27T18:57:36+00:00"
},
{
"name": "codeigniter4/framework",
"version": "v4.5.1",
"version": "v4.6.5",
"source": {
"type": "git",
"url": "https://github.com/codeigniter4/framework.git",
"reference": "9b2cd730db29d14ac6e760fb15c4bcac15184ec4"
"reference": "116e0919590a412c09d2b9e4f6b8addda18224d8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/codeigniter4/framework/zipball/9b2cd730db29d14ac6e760fb15c4bcac15184ec4",
"reference": "9b2cd730db29d14ac6e760fb15c4bcac15184ec4",
"url": "https://api.github.com/repos/codeigniter4/framework/zipball/116e0919590a412c09d2b9e4f6b8addda18224d8",
"reference": "116e0919590a412c09d2b9e4f6b8addda18224d8",
"shasum": ""
},
"require": {
"ext-intl": "*",
"ext-mbstring": "*",
"laminas/laminas-escaper": "^2.13",
"laminas/laminas-escaper": "^2.17",
"php": "^8.1",
"psr/log": "^3.0"
},
"require-dev": {
"codeigniter/coding-standard": "^1.7",
"fakerphp/faker": "^1.9",
"fakerphp/faker": "^1.24",
"friendsofphp/php-cs-fixer": "^3.47.1",
"kint-php/kint": "^5.0.4",
"mikey179/vfsstream": "^1.6",
"kint-php/kint": "^6.1",
"mikey179/vfsstream": "^1.6.12",
"nexusphp/cs-config": "^3.6",
"phpunit/phpunit": "^10.5.16",
"predis/predis": "^1.1 || ^2.0"
"phpunit/phpunit": "^10.5.16 || ^11.2",
"predis/predis": "^3.0"
},
"suggest": {
"ext-curl": "If you use CURLRequest class",
@ -501,10 +539,14 @@
"psr-4": {
"CodeIgniter\\": "system/"
},
"exclude-from-classmap": ["**/Database/Migrations/**"]
"exclude-from-classmap": [
"**/Database/Migrations/**"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "The CodeIgniter framework v4",
"homepage": "https://codeigniter.com",
"support": {
@ -512,7 +554,73 @@
"slack": "https://codeigniterchat.slack.com",
"source": "https://github.com/codeigniter4/CodeIgniter4"
},
"time": "2024-04-14T04:18:29+00:00"
"time": "2026-02-01T17:59:34+00:00"
},
{
"name": "codeigniter4/queue",
"version": "dev-develop",
"source": {
"type": "git",
"url": "https://github.com/codeigniter4/queue.git",
"reference": "b44386ad29f0a2124e59582ef5ba170788b926ed"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/codeigniter4/queue/zipball/b44386ad29f0a2124e59582ef5ba170788b926ed",
"reference": "b44386ad29f0a2124e59582ef5ba170788b926ed",
"shasum": ""
},
"require": {
"php": "^8.2"
},
"require-dev": {
"codeigniter4/devkit": "^1.3",
"codeigniter4/framework": "^4.3",
"php-amqplib/php-amqplib": "^3.7",
"phpstan/phpstan-strict-rules": "^2.0",
"predis/predis": "^2.0"
},
"suggest": {
"ext-redis": "If you want to use RedisHandler",
"php-amqplib/php-amqplib": "If you want to use RabbitMQHandler",
"predis/predis": "If you want to use PredisHandler"
},
"default-branch": true,
"type": "library",
"autoload": {
"psr-4": {
"CodeIgniter\\Queue\\": "src"
},
"exclude-from-classmap": [
"**/Database/Migrations/**"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "michalsn",
"homepage": "https://github.com/michalsn",
"role": "Developer"
}
],
"description": "Queues for CodeIgniter 4 framework",
"homepage": "https://github.com/codeigniter4/queue",
"keywords": [
"codeigniter",
"codeigniter4",
"database",
"predis",
"queue",
"redis"
],
"support": {
"issues": "https://github.com/codeigniter4/queue/issues",
"source": "https://github.com/codeigniter4/queue/tree/develop"
},
"time": "2026-02-15T08:22:24+00:00"
},
{
"name": "codeigniter4/settings",
@ -541,10 +649,14 @@
"psr-4": {
"CodeIgniter\\Settings\\": "src"
},
"exclude-from-classmap": ["**/Database/Migrations/**"]
"exclude-from-classmap": [
"**/Database/Migrations/**"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Lonnie Ezell",
@ -554,7 +666,11 @@
],
"description": "Settings library for CodeIgniter 4",
"homepage": "https://github.com/codeigniter4/settings",
"keywords": ["Settings", "codeigniter", "codeigniter4"],
"keywords": [
"Settings",
"codeigniter",
"codeigniter4"
],
"support": {
"issues": "https://github.com/codeigniter4/settings/issues",
"source": "https://github.com/codeigniter4/settings/tree/v2.2.0"
@ -563,35 +679,33 @@
},
{
"name": "codeigniter4/shield",
"version": "v1.0.3",
"version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/codeigniter4/shield.git",
"reference": "3fbac7a3da41ebaac7d51708244f68df596409f0"
"reference": "2d1b2177a914dcd490f54a6706792eacabd9e3e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/codeigniter4/shield/zipball/3fbac7a3da41ebaac7d51708244f68df596409f0",
"reference": "3fbac7a3da41ebaac7d51708244f68df596409f0",
"url": "https://api.github.com/repos/codeigniter4/shield/zipball/2d1b2177a914dcd490f54a6706792eacabd9e3e8",
"reference": "2d1b2177a914dcd490f54a6706792eacabd9e3e8",
"shasum": ""
},
"require": {
"codeigniter4/settings": "^2.1",
"php": "^7.4.3 || ^8.0"
"php": "^8.1"
},
"provide": {
"codeigniter4/authentication-implementation": "1.0"
},
"require-dev": {
"codeigniter/phpstan-codeigniter": "^1.3",
"codeigniter4/devkit": "^1.0",
"codeigniter4/devkit": "^1.3",
"codeigniter4/framework": ">=4.3.5 <4.5.0 || ^4.5.1",
"firebase/php-jwt": "^6.4",
"mikey179/vfsstream": "^1.6.7",
"mockery/mockery": "^1.0",
"phpstan/extension-installer": "^1.3",
"phpstan/phpstan-strict-rules": "^1.5",
"rector/rector": "1.0.4"
"phpstan/phpstan-strict-rules": "^2.0"
},
"suggest": {
"ext-curl": "Required to use the password validation rule via PwnedValidator class.",
@ -602,10 +716,14 @@
"psr-4": {
"CodeIgniter\\Shield\\": "src"
},
"exclude-from-classmap": ["**/Database/Migrations/**"]
"exclude-from-classmap": [
"**/Database/Migrations/**"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Lonnie Ezell",
@ -628,7 +746,7 @@
"slack": "https://codeigniterchat.slack.com",
"source": "https://github.com/codeigniter4/shield"
},
"time": "2024-04-14T08:57:57+00:00"
"time": "2025-07-14T10:26:03+00:00"
},
{
"name": "codeigniter4/tasks",
@ -636,23 +754,23 @@
"source": {
"type": "git",
"url": "https://github.com/codeigniter4/tasks.git",
"reference": "7cfd0918765854b68861f9470eff3d8b9e4e537d"
"reference": "8d0c0f83d48dd1ac322d30a4c51ff309ab5368e0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/codeigniter4/tasks/zipball/7cfd0918765854b68861f9470eff3d8b9e4e537d",
"reference": "7cfd0918765854b68861f9470eff3d8b9e4e537d",
"url": "https://api.github.com/repos/codeigniter4/tasks/zipball/8d0c0f83d48dd1ac322d30a4c51ff309ab5368e0",
"reference": "8d0c0f83d48dd1ac322d30a4c51ff309ab5368e0",
"shasum": ""
},
"require": {
"codeigniter4/queue": "dev-develop",
"codeigniter4/settings": "^2.0",
"ext-json": "*",
"php": "^7.4 || ^8.0"
"php": "^8.2"
},
"require-dev": {
"codeigniter4/devkit": "^1.0",
"codeigniter4/framework": "^4.1",
"rector/rector": "1.0.4"
"codeigniter4/devkit": "^1.3",
"codeigniter4/framework": "^4.3"
},
"default-branch": true,
"type": "library",
@ -660,7 +778,9 @@
"psr-4": {
"CodeIgniter\\Tasks\\": "src"
},
"exclude-from-classmap": ["**/Database/Migrations/**"]
"exclude-from-classmap": [
"**/Database/Migrations/**"
]
},
"autoload-dev": {
"psr-4": {
@ -668,14 +788,18 @@
}
},
"scripts": {
"post-update-cmd": ["bash admin/setup.sh"],
"post-update-cmd": [
"bash admin/setup.sh"
],
"analyze": [
"Composer\\Config::disableProcessTimeout",
"phpstan analyze",
"psalm",
"rector process --dry-run"
],
"sa": ["@analyze"],
"sa": [
"@analyze"
],
"ci": [
"Composer\\Config::disableProcessTimeout",
"@cs",
@ -684,18 +808,34 @@
"@analyze",
"@test"
],
"cs": ["php-cs-fixer fix --ansi --verbose --dry-run --diff"],
"cs-fix": ["php-cs-fixer fix --ansi --verbose --diff"],
"style": ["@cs-fix"],
"deduplicate": ["phpcpd src/ tests/"],
"inspect": ["deptrac analyze --cache-file=build/deptrac.cache"],
"cs": [
"php-cs-fixer fix --ansi --verbose --dry-run --diff"
],
"cs-fix": [
"php-cs-fixer fix --ansi --verbose --diff"
],
"style": [
"@cs-fix"
],
"deduplicate": [
"phpcpd src/ tests/"
],
"inspect": [
"deptrac analyze --cache-file=build/deptrac.cache"
],
"mutate": [
"infection --threads=2 --skip-initial-tests --coverage=build/phpunit"
],
"retool": ["retool"],
"test": ["phpunit"]
"retool": [
"retool"
],
"test": [
"phpunit"
]
},
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Lonnie Ezell",
@ -705,25 +845,30 @@
],
"description": "Task Scheduler for CodeIgniter 4",
"homepage": "https://github.com/codeigniter4/tasks",
"keywords": ["codeigniter", "codeigniter4", "cron", "task scheduling"],
"keywords": [
"codeigniter",
"codeigniter4",
"cron",
"task scheduling"
],
"support": {
"source": "https://github.com/codeigniter4/tasks/tree/develop",
"issues": "https://github.com/codeigniter4/tasks/issues"
},
"time": "2024-04-06T08:58:00+00:00"
"time": "2026-02-15T08:22:03+00:00"
},
{
"name": "composer/ca-bundle",
"version": "1.5.0",
"version": "1.5.10",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99"
"reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/0c5ccfcfea312b5c5a190a21ac5cef93f74baf99",
"reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/961a5e4056dd2e4a2eedcac7576075947c28bf63",
"reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63",
"shasum": ""
},
"require": {
@ -733,8 +878,8 @@
},
"require-dev": {
"phpstan/phpstan": "^1.10",
"psr/log": "^1.0",
"symfony/phpunit-bridge": "^4.2 || ^5",
"phpunit/phpunit": "^8 || ^9",
"psr/log": "^1.0 || ^2.0 || ^3.0",
"symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
@ -749,7 +894,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
@ -758,11 +905,17 @@
}
],
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
"keywords": ["cabundle", "cacert", "certificate", "ssl", "tls"],
"keywords": [
"cabundle",
"cacert",
"certificate",
"ssl",
"tls"
],
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
"source": "https://github.com/composer/ca-bundle/tree/1.5.0"
"source": "https://github.com/composer/ca-bundle/tree/1.5.10"
},
"funding": [
{
@ -772,26 +925,22 @@
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2024-03-15T14:00:32+00:00"
"time": "2025-12-08T15:06:51+00:00"
},
{
"name": "dflydev/dot-access-data",
"version": "v3.0.2",
"version": "v3.0.3",
"source": {
"type": "git",
"url": "https://github.com/dflydev/dflydev-dot-access-data.git",
"reference": "f41715465d65213d644d3141a6a93081be5d3549"
"reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549",
"reference": "f41715465d65213d644d3141a6a93081be5d3549",
"url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f",
"reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f",
"shasum": ""
},
"require": {
@ -816,7 +965,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Dragonfly Development Inc.",
@ -841,38 +992,43 @@
],
"description": "Given a deep data structure, access data by dot notation.",
"homepage": "https://github.com/dflydev/dflydev-dot-access-data",
"keywords": ["access", "data", "dot", "notation"],
"keywords": [
"access",
"data",
"dot",
"notation"
],
"support": {
"issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
"source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2"
"source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3"
},
"time": "2022-10-27T11:44:00+00:00"
"time": "2024-07-08T12:26:09+00:00"
},
{
"name": "geoip2/geoip2",
"version": "v3.0.0",
"version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/maxmind/GeoIP2-php.git",
"reference": "1a802ce9356cdd1c6b681c030fd9563750e11e6a"
"reference": "49fceddd694295e76e970a32848e03bb19e56b42"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/1a802ce9356cdd1c6b681c030fd9563750e11e6a",
"reference": "1a802ce9356cdd1c6b681c030fd9563750e11e6a",
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/49fceddd694295e76e970a32848e03bb19e56b42",
"reference": "49fceddd694295e76e970a32848e03bb19e56b42",
"shasum": ""
},
"require": {
"ext-json": "*",
"maxmind-db/reader": "^1.11.1",
"maxmind/web-service-common": "~0.8",
"maxmind-db/reader": "^1.13.0",
"maxmind/web-service-common": "~0.11",
"php": ">=8.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "3.*",
"phpstan/phpstan": "*",
"phpunit/phpunit": "^10.0",
"squizlabs/php_codesniffer": "3.*"
"squizlabs/php_codesniffer": "4.*"
},
"type": "library",
"autoload": {
@ -881,7 +1037,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["Apache-2.0"],
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Gregory J. Oschwald",
@ -891,33 +1049,39 @@
],
"description": "MaxMind GeoIP2 PHP API",
"homepage": "https://github.com/maxmind/GeoIP2-php",
"keywords": ["IP", "geoip", "geoip2", "geolocation", "maxmind"],
"keywords": [
"IP",
"geoip",
"geoip2",
"geolocation",
"maxmind"
],
"support": {
"issues": "https://github.com/maxmind/GeoIP2-php/issues",
"source": "https://github.com/maxmind/GeoIP2-php/tree/v3.0.0"
"source": "https://github.com/maxmind/GeoIP2-php/tree/v3.3.0"
},
"time": "2023-12-04T17:16:34+00:00"
"time": "2025-11-20T18:50:15+00:00"
},
{
"name": "graham-campbell/result-type",
"version": "v1.1.2",
"version": "v1.1.4",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Result-Type.git",
"reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862"
"reference": "e01f4a821471308ba86aa202fed6698b6b695e3b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862",
"reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862",
"url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b",
"reference": "e01f4a821471308ba86aa202fed6698b6b695e3b",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"phpoption/phpoption": "^1.9.2"
"phpoption/phpoption": "^1.9.5"
},
"require-dev": {
"phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
"phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7"
},
"type": "library",
"autoload": {
@ -926,7 +1090,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
@ -944,7 +1110,7 @@
],
"support": {
"issues": "https://github.com/GrahamCampbell/Result-Type/issues",
"source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2"
"source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4"
},
"funding": [
{
@ -956,26 +1122,26 @@
"type": "tidelift"
}
],
"time": "2023-11-12T22:16:48+00:00"
"time": "2025-12-27T19:43:20+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "7.8.1",
"version": "7.10.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
"reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.5.3 || ^2.0.1",
"guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
"guzzlehttp/promises": "^2.3",
"guzzlehttp/psr7": "^2.8",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@ -986,9 +1152,9 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*",
"php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
"guzzle/client-integration-tests": "3.0.2",
"php-http/message-factory": "^1.1",
"phpunit/phpunit": "^8.5.36 || ^9.6.15",
"phpunit/phpunit": "^8.5.39 || ^9.6.20",
"psr/log": "^1.1 || ^2.0 || ^3.0"
},
"suggest": {
@ -1004,13 +1170,17 @@
}
},
"autoload": {
"files": ["src/functions_include.php"],
"files": [
"src/functions_include.php"
],
"psr-4": {
"GuzzleHttp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
@ -1062,7 +1232,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.8.1"
"source": "https://github.com/guzzle/guzzle/tree/7.10.0"
},
"funding": [
{
@ -1078,20 +1248,20 @@
"type": "tidelift"
}
],
"time": "2023-12-03T20:35:24+00:00"
"time": "2025-08-23T22:36:01+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "2.0.2",
"version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
"reference": "481557b130ef3790cf82b713667b43030dc9c957"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
"url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
"reference": "481557b130ef3790cf82b713667b43030dc9c957",
"shasum": ""
},
"require": {
@ -1099,7 +1269,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"type": "library",
"extra": {
@ -1114,7 +1284,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
@ -1138,10 +1310,12 @@
}
],
"description": "Guzzle promises library",
"keywords": ["promise"],
"keywords": [
"promise"
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.0.2"
"source": "https://github.com/guzzle/promises/tree/2.3.0"
},
"funding": [
{
@ -1157,20 +1331,20 @@
"type": "tidelift"
}
],
"time": "2023-12-03T20:19:20+00:00"
"time": "2025-08-22T14:34:08+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "2.6.2",
"version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
"reference": "21dc724a0583619cd1652f673303492272778051"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
"reference": "21dc724a0583619cd1652f673303492272778051",
"shasum": ""
},
"require": {
@ -1185,8 +1359,8 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "^0.9",
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
"http-interop/http-factory-tests": "0.9.0",
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@ -1204,7 +1378,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
@ -1255,7 +1431,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.6.2"
"source": "https://github.com/guzzle/psr7/tree/2.8.0"
},
"funding": [
{
@ -1271,7 +1447,7 @@
"type": "tidelift"
}
],
"time": "2023-12-03T20:05:35+00:00"
"time": "2025-08-23T21:21:41+00:00"
},
{
"name": "james-heinrich/getid3",
@ -1323,7 +1499,11 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["GPL-1.0-or-later", "LGPL-3.0-only", "MPL-2.0"],
"license": [
"GPL-1.0-or-later",
"LGPL-3.0-only",
"MPL-2.0"
],
"authors": [
{
"name": "James Heinrich",
@ -1340,7 +1520,14 @@
],
"description": "Extract and write useful information to/from popular multimedia file formats",
"homepage": "https://www.getid3.org/",
"keywords": ["audio", "codecs", "id3", "metadata", "tags", "video"],
"keywords": [
"audio",
"codecs",
"id3",
"metadata",
"tags",
"video"
],
"support": {
"issues": "https://github.com/JamesHeinrich/getID3/issues",
"source": "https://github.com/JamesHeinrich/getID3/tree/v2.0.0-beta6"
@ -1349,33 +1536,32 @@
},
{
"name": "laminas/laminas-escaper",
"version": "2.13.0",
"version": "2.18.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-escaper.git",
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba"
"reference": "06f211dfffff18d91844c1f55250d5d13c007e18"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/af459883f4018d0f8a0c69c7a209daef3bf973ba",
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/06f211dfffff18d91844c1f55250d5d13c007e18",
"reference": "06f211dfffff18d91844c1f55250d5d13c007e18",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-mbstring": "*",
"php": "~8.1.0 || ~8.2.0 || ~8.3.0"
"php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"conflict": {
"zendframework/zend-escaper": "*"
},
"require-dev": {
"infection/infection": "^0.27.0",
"laminas/laminas-coding-standard": "~2.5.0",
"maglnet/composer-require-checker": "^3.8.0",
"phpunit/phpunit": "^9.6.7",
"psalm/plugin-phpunit": "^0.18.4",
"vimeo/psalm": "^5.9"
"infection/infection": "^0.31.0",
"laminas/laminas-coding-standard": "~3.1.0",
"phpunit/phpunit": "^11.5.42",
"psalm/plugin-phpunit": "^0.19.5",
"vimeo/psalm": "^6.13.1"
},
"type": "library",
"autoload": {
@ -1384,10 +1570,15 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
"homepage": "https://laminas.dev",
"keywords": ["escaper", "laminas"],
"keywords": [
"escaper",
"laminas"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-escaper/",
@ -1402,20 +1593,20 @@
"type": "community_bridge"
}
],
"time": "2023-10-10T08:35:13+00:00"
"time": "2025-10-14T18:31:13+00:00"
},
{
"name": "league/commonmark",
"version": "2.4.2",
"version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
"reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf"
"reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf",
"reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
"reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
"shasum": ""
},
"require": {
@ -1428,8 +1619,8 @@
},
"require-dev": {
"cebe/markdown": "^1.0",
"commonmark/cmark": "0.30.3",
"commonmark/commonmark.js": "0.30.0",
"commonmark/cmark": "0.31.1",
"commonmark/commonmark.js": "0.31.1",
"composer/package-versions-deprecated": "^1.8",
"embed/embed": "^4.4",
"erusev/parsedown": "^1.0",
@ -1440,10 +1631,11 @@
"phpstan/phpstan": "^1.8.2",
"phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
"scrutinizer/ocular": "^1.8.1",
"symfony/finder": "^5.3 | ^6.0 || ^7.0",
"symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0",
"symfony/finder": "^5.3 | ^6.0 | ^7.0",
"symfony/process": "^5.4 | ^6.0 | ^7.0",
"symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
"unleashedtech/php-coding-standard": "^3.1.1",
"vimeo/psalm": "^4.24.0 || ^5.0.0"
"vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
},
"suggest": {
"symfony/yaml": "v2.3+ required if using the Front Matter extension"
@ -1451,7 +1643,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
"dev-main": "2.9-dev"
}
},
"autoload": {
@ -1460,7 +1652,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Colin O'Dell",
@ -1506,7 +1700,7 @@
"type": "tidelift"
}
],
"time": "2024-02-02T11:59:32+00:00"
"time": "2025-11-26T21:48:24+00:00"
},
{
"name": "league/config",
@ -1546,7 +1740,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Colin O'Dell",
@ -1615,7 +1811,9 @@
"unleashedtech/php-coding-standard": "^2.7 || ^3.0",
"vimeo/psalm": "^4.22 || ^5.0"
},
"bin": ["bin/html-to-markdown"],
"bin": [
"bin/html-to-markdown"
],
"type": "library",
"extra": {
"branch-alias": {
@ -1628,7 +1826,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Colin O'Dell",
@ -1645,7 +1845,10 @@
],
"description": "An HTML-to-markdown conversion helper for PHP",
"homepage": "https://github.com/thephpleague/html-to-markdown",
"keywords": ["html", "markdown"],
"keywords": [
"html",
"markdown"
],
"support": {
"issues": "https://github.com/thephpleague/html-to-markdown/issues",
"source": "https://github.com/thephpleague/html-to-markdown/tree/5.1.1"
@ -1672,36 +1875,35 @@
},
{
"name": "maxmind-db/reader",
"version": "v1.11.1",
"version": "v1.13.1",
"source": {
"type": "git",
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
"reference": "1e66f73ffcf25e17c7a910a1317e9720a95497c7"
"reference": "2194f58d0f024ce923e685cdf92af3daf9951908"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/1e66f73ffcf25e17c7a910a1317e9720a95497c7",
"reference": "1e66f73ffcf25e17c7a910a1317e9720a95497c7",
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/2194f58d0f024ce923e685cdf92af3daf9951908",
"reference": "2194f58d0f024ce923e685cdf92af3daf9951908",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"conflict": {
"ext-maxminddb": "<1.11.1,>=2.0.0"
"ext-maxminddb": "<1.11.1 || >=2.0.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "3.*",
"php-coveralls/php-coveralls": "^2.1",
"phpstan/phpstan": "*",
"phpunit/phpcov": ">=6.0.0",
"phpunit/phpunit": ">=8.0.0,<10.0.0",
"squizlabs/php_codesniffer": "3.*"
"squizlabs/php_codesniffer": "4.*"
},
"suggest": {
"ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups",
"maxmind-db/reader-ext": "C extension for significantly faster IP lookups (install via PIE: pie install maxmind-db/reader-ext)"
},
"type": "library",
"autoload": {
@ -1710,7 +1912,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["Apache-2.0"],
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Gregory J. Oschwald",
@ -1720,38 +1924,44 @@
],
"description": "MaxMind DB Reader API",
"homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
"keywords": ["database", "geoip", "geoip2", "geolocation", "maxmind"],
"keywords": [
"database",
"geoip",
"geoip2",
"geolocation",
"maxmind"
],
"support": {
"issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
"source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.11.1"
"source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.13.1"
},
"time": "2023-12-02T00:09:23+00:00"
"time": "2025-11-21T22:24:26+00:00"
},
{
"name": "maxmind/web-service-common",
"version": "v0.9.0",
"version": "v0.11.1",
"source": {
"type": "git",
"url": "https://github.com/maxmind/web-service-common-php.git",
"reference": "4dc5a3e8df38aea4ca3b1096cee3a038094e9b53"
"reference": "c309236b5a5555b96cf560089ec3cead12d845d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/4dc5a3e8df38aea4ca3b1096cee3a038094e9b53",
"reference": "4dc5a3e8df38aea4ca3b1096cee3a038094e9b53",
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/c309236b5a5555b96cf560089ec3cead12d845d2",
"reference": "c309236b5a5555b96cf560089ec3cead12d845d2",
"shasum": ""
},
"require": {
"composer/ca-bundle": "^1.0.3",
"ext-curl": "*",
"ext-json": "*",
"php": ">=7.2"
"php": ">=8.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "3.*",
"phpstan/phpstan": "*",
"phpunit/phpunit": "^8.0 || ^9.0",
"squizlabs/php_codesniffer": "3.*"
"phpunit/phpunit": "^10.0",
"squizlabs/php_codesniffer": "4.*"
},
"type": "library",
"autoload": {
@ -1761,7 +1971,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["Apache-2.0"],
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Gregory Oschwald",
@ -1772,32 +1984,32 @@
"homepage": "https://github.com/maxmind/web-service-common-php",
"support": {
"issues": "https://github.com/maxmind/web-service-common-php/issues",
"source": "https://github.com/maxmind/web-service-common-php/tree/v0.9.0"
"source": "https://github.com/maxmind/web-service-common-php/tree/v0.11.1"
},
"time": "2022-03-28T17:43:20+00:00"
"time": "2026-01-13T17:56:03+00:00"
},
{
"name": "melbahja/seo",
"version": "v2.1.1",
"version": "v3.0.2",
"source": {
"type": "git",
"url": "https://github.com/melbahja/seo.git",
"reference": "22b0b3273bf9c8867cadf018e4daa3e426525929"
"reference": "e8d36b2c46e1b05af957c90beea19090f64d5bf9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/melbahja/seo/zipball/22b0b3273bf9c8867cadf018e4daa3e426525929",
"reference": "22b0b3273bf9c8867cadf018e4daa3e426525929",
"url": "https://api.github.com/repos/melbahja/seo/zipball/e8d36b2c46e1b05af957c90beea19090f64d5bf9",
"reference": "e8d36b2c46e1b05af957c90beea19090f64d5bf9",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-xml": "*",
"php": ">=7.2"
"php": ">=8.1"
},
"require-dev": {
"phpunit/phpunit": "^8.5"
"phpunit/phpunit": "^10.0"
},
"type": "library",
"autoload": {
@ -1806,7 +2018,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Mohamed ELbahja",
@ -1815,40 +2029,46 @@
"role": "Developer"
}
],
"description": "Simple PHP library to help developers 🍻 do better on-page SEO optimization",
"description": "SEO library for PHP is a simple PHP library to help developers 🍻 do better on-page SEO optimizations.",
"keywords": [
"PHP7",
"images sitemaps",
"index sitemaps",
"meta tags",
"news sitemaps",
"open graph",
"php8",
"rich results",
"schema.org",
"search engine optimization",
"seo",
"sitemap index",
"sitemap.xml",
"sitemaps",
"twitter tags"
"twitter tags",
"video sitemaps"
],
"support": {
"issues": "https://github.com/melbahja/seo/issues",
"source": "https://github.com/melbahja/seo/tree/v2.1.1"
"source": "https://github.com/melbahja/seo/tree/v3.0.2"
},
"time": "2022-09-11T11:16:07+00:00"
"time": "2026-02-08T12:48:54+00:00"
},
{
"name": "michalsn/codeigniter4-uuid",
"version": "v1.1.0",
"version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/michalsn/codeigniter4-uuid.git",
"reference": "051cf47a36eece304f166a63e3ffcdae0ca186d4"
"reference": "31457ec91f54e3c981762d9f06e87e417869c380"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/michalsn/codeigniter4-uuid/zipball/051cf47a36eece304f166a63e3ffcdae0ca186d4",
"reference": "051cf47a36eece304f166a63e3ffcdae0ca186d4",
"url": "https://api.github.com/repos/michalsn/codeigniter4-uuid/zipball/31457ec91f54e3c981762d9f06e87e417869c380",
"reference": "31457ec91f54e3c981762d9f06e87e417869c380",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"php": ">=8.1",
"ramsey/uuid": "^4.7"
},
@ -1863,7 +2083,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "michalsn",
@ -1873,25 +2095,30 @@
],
"description": "UUID package for CodeIgniter 4 with support for Model and Entity.",
"homepage": "https://github.com/michalsn/codeigniter4-uuid",
"keywords": ["codeigniter4", "entity", "model", "uuid"],
"keywords": [
"codeigniter4",
"entity",
"model",
"uuid"
],
"support": {
"issues": "https://github.com/michalsn/codeigniter4-uuid/issues",
"source": "https://github.com/michalsn/codeigniter4-uuid/tree/v1.1.0"
"source": "https://github.com/michalsn/codeigniter4-uuid/tree/v1.3.1"
},
"time": "2024-04-22T14:12:58+00:00"
"time": "2025-10-16T10:20:23+00:00"
},
{
"name": "mpratt/embera",
"version": "2.0.38",
"version": "2.0.42",
"source": {
"type": "git",
"url": "https://github.com/mpratt/Embera.git",
"reference": "25d6b9385e27cad9618bdde8355226247d39671d"
"reference": "afa728339c6f078c803c9277a5054ca241b3c469"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mpratt/Embera/zipball/25d6b9385e27cad9618bdde8355226247d39671d",
"reference": "25d6b9385e27cad9618bdde8355226247d39671d",
"url": "https://api.github.com/repos/mpratt/Embera/zipball/afa728339c6f078c803c9277a5054ca241b3c469",
"reference": "afa728339c6f078c803c9277a5054ca241b3c469",
"shasum": ""
},
"require": {
@ -1900,7 +2127,8 @@
},
"require-dev": {
"phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^9.0"
"phpunit/phpunit": "^9.0||^10.0",
"symfony/yaml": "^2.1"
},
"suggest": {
"ext-curl": "Fetch data using curl instead of using file_get_contents"
@ -1912,7 +2140,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Pratt",
@ -1938,7 +2168,7 @@
],
"support": {
"issues": "https://github.com/mpratt/Embera/issues",
"source": "https://github.com/mpratt/Embera/tree/2.0.38"
"source": "https://github.com/mpratt/Embera/tree/2.0.42"
},
"funding": [
{
@ -1946,20 +2176,20 @@
"type": "paypal"
}
],
"time": "2024-04-13T04:35:29+00:00"
"time": "2025-01-04T06:07:59+00:00"
},
{
"name": "mtdowling/jmespath.php",
"version": "2.7.0",
"version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/jmespath/jmespath.php.git",
"reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b"
"reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/bbb69a935c2cbb0c03d7f481a238027430f6440b",
"reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b",
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
"reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
"shasum": ""
},
"require": {
@ -1970,21 +2200,27 @@
"composer/xdebug-handler": "^3.0.3",
"phpunit/phpunit": "^8.5.33"
},
"bin": ["bin/jp.php"],
"bin": [
"bin/jp.php"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.7-dev"
"dev-master": "2.8-dev"
}
},
"autoload": {
"files": ["src/JmesPath.php"],
"files": [
"src/JmesPath.php"
],
"psr-4": {
"JmesPath\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
@ -1998,47 +2234,59 @@
}
],
"description": "Declaratively specify how to extract elements from a JSON document",
"keywords": ["json", "jsonpath"],
"keywords": [
"json",
"jsonpath"
],
"support": {
"issues": "https://github.com/jmespath/jmespath.php/issues",
"source": "https://github.com/jmespath/jmespath.php/tree/2.7.0"
"source": "https://github.com/jmespath/jmespath.php/tree/2.8.0"
},
"time": "2023-08-25T10:54:48+00:00"
"time": "2024-09-04T18:46:31+00:00"
},
{
"name": "nette/schema",
"version": "v1.2.5",
"version": "v1.3.4",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
"reference": "0462f0166e823aad657c9224d0f849ecac1ba10a"
"reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a",
"reference": "0462f0166e823aad657c9224d0f849ecac1ba10a",
"url": "https://api.github.com/repos/nette/schema/zipball/086497a2f34b82fede9b5a41cc8e131d087cd8f7",
"reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7",
"shasum": ""
},
"require": {
"nette/utils": "^2.5.7 || ^3.1.5 || ^4.0",
"php": "7.1 - 8.3"
"nette/utils": "^4.0",
"php": "8.1 - 8.5"
},
"require-dev": {
"nette/tester": "^2.3 || ^2.4",
"phpstan/phpstan-nette": "^1.0",
"tracy/tracy": "^2.7"
"nette/tester": "^2.6",
"phpstan/phpstan": "^2.0@stable",
"tracy/tracy": "^2.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2-dev"
"dev-master": "1.3-dev"
}
},
"autoload": {
"classmap": ["src/"]
"psr-4": {
"Nette\\": "src"
},
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"],
"license": [
"BSD-3-Clause",
"GPL-2.0-only",
"GPL-3.0-only"
],
"authors": [
{
"name": "David Grudl",
@ -2051,38 +2299,44 @@
],
"description": "📐 Nette Schema: validating data structures against a given Schema.",
"homepage": "https://nette.org",
"keywords": ["config", "nette"],
"keywords": [
"config",
"nette"
],
"support": {
"issues": "https://github.com/nette/schema/issues",
"source": "https://github.com/nette/schema/tree/v1.2.5"
"source": "https://github.com/nette/schema/tree/v1.3.4"
},
"time": "2023-10-05T20:37:59+00:00"
"time": "2026-02-08T02:54:00+00:00"
},
{
"name": "nette/utils",
"version": "v3.2.10",
"version": "v4.1.3",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
"reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2"
"reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/utils/zipball/a4175c62652f2300c8017fb7e640f9ccb11648d2",
"reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2",
"url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe",
"reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe",
"shasum": ""
},
"require": {
"php": ">=7.2 <8.4"
"php": "8.2 - 8.5"
},
"conflict": {
"nette/di": "<3.0.6"
"nette/finder": "<3",
"nette/schema": "<1.2.2"
},
"require-dev": {
"jetbrains/phpstorm-attributes": "dev-master",
"nette/tester": "~2.0",
"phpstan/phpstan": "^1.0",
"tracy/tracy": "^2.3"
"jetbrains/phpstorm-attributes": "^1.2",
"nette/phpstan-rules": "^1.0",
"nette/tester": "^2.5",
"phpstan/extension-installer": "^1.4@stable",
"phpstan/phpstan": "^2.1@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
"ext-gd": "to use Image",
@ -2090,20 +2344,28 @@
"ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
"ext-json": "to use Nette\\Utils\\Json",
"ext-mbstring": "to use Strings::lower() etc...",
"ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()",
"ext-xml": "to use Strings::length() etc. when mbstring is not available"
"ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2-dev"
"dev-master": "4.1-dev"
}
},
"autoload": {
"classmap": ["src/"]
"psr-4": {
"Nette\\": "src"
},
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"],
"license": [
"BSD-3-Clause",
"GPL-2.0-only",
"GPL-3.0-only"
],
"authors": [
{
"name": "David Grudl",
@ -2134,58 +2396,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
"source": "https://github.com/nette/utils/tree/v3.2.10"
"source": "https://github.com/nette/utils/tree/v4.1.3"
},
"time": "2023-07-30T15:38:18+00:00"
},
{
"name": "nikic/php-parser",
"version": "v4.19.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "4e1b88d21c69391150ace211e9eaf05810858d0b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b",
"reference": "4e1b88d21c69391150ace211e9eaf05810858d0b",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=7.1"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": ["bin/php-parse"],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.9-dev"
}
},
"autoload": {
"psr-4": {
"PhpParser\\": "lib/PhpParser"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"authors": [
{
"name": "Nikita Popov"
}
],
"description": "A PHP parser written in PHP",
"keywords": ["parser", "php"],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1"
},
"time": "2024-03-17T08:10:35+00:00"
"time": "2026-02-13T03:05:33+00:00"
},
{
"name": "opawg/user-agents-v2-php",
@ -2209,7 +2422,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Benjamin Bellamy",
@ -2227,16 +2442,16 @@
},
{
"name": "phpoption/phpoption",
"version": "1.9.2",
"version": "1.9.5",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
"reference": "80735db690fe4fc5c76dfa7f9b770634285fa820"
"reference": "75365b91986c2405cf5e1e012c5595cd487a98be"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820",
"reference": "80735db690fe4fc5c76dfa7f9b770634285fa820",
"url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be",
"reference": "75365b91986c2405cf5e1e012c5595cd487a98be",
"shasum": ""
},
"require": {
@ -2244,13 +2459,13 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
"phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": true
"forward-command": false
},
"branch-alias": {
"dev-master": "1.9-dev"
@ -2262,7 +2477,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["Apache-2.0"],
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Johannes M. Schmitt",
@ -2276,10 +2493,15 @@
}
],
"description": "Option Type for PHP",
"keywords": ["language", "option", "php", "type"],
"keywords": [
"language",
"option",
"php",
"type"
],
"support": {
"issues": "https://github.com/schmittjoh/php-option/issues",
"source": "https://github.com/schmittjoh/php-option/tree/1.9.2"
"source": "https://github.com/schmittjoh/php-option/tree/1.9.5"
},
"funding": [
{
@ -2291,20 +2513,20 @@
"type": "tidelift"
}
],
"time": "2023-11-12T21:59:55+00:00"
"time": "2025-12-27T19:41:33+00:00"
},
{
"name": "phpseclib/phpseclib",
"version": "2.0.47",
"version": "2.0.51",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "b7d7d90ee7df7f33a664b4aea32d50a305d35adb"
"reference": "ed661e7cdaeb8c419e609e2f3203551a13c2ed48"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/b7d7d90ee7df7f33a664b4aea32d50a305d35adb",
"reference": "b7d7d90ee7df7f33a664b4aea32d50a305d35adb",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/ed661e7cdaeb8c419e609e2f3203551a13c2ed48",
"reference": "ed661e7cdaeb8c419e609e2f3203551a13c2ed48",
"shasum": ""
},
"require": {
@ -2324,13 +2546,17 @@
},
"type": "library",
"autoload": {
"files": ["phpseclib/bootstrap.php"],
"files": [
"phpseclib/bootstrap.php"
],
"psr-4": {
"phpseclib\\": "phpseclib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Jim Wigginton",
@ -2381,7 +2607,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/2.0.47"
"source": "https://github.com/phpseclib/phpseclib/tree/2.0.51"
},
"funding": [
{
@ -2397,7 +2623,7 @@
"type": "tidelift"
}
],
"time": "2024-02-26T04:55:38+00:00"
"time": "2026-01-27T09:11:52+00:00"
},
{
"name": "psr/cache",
@ -2428,7 +2654,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
@ -2436,7 +2664,11 @@
}
],
"description": "Common interface for caching libraries",
"keywords": ["cache", "psr", "psr-6"],
"keywords": [
"cache",
"psr",
"psr-6"
],
"support": {
"source": "https://github.com/php-fig/cache/tree/3.0.0"
},
@ -2471,7 +2703,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
@ -2479,7 +2713,11 @@
}
],
"description": "Standard interfaces for event handling.",
"keywords": ["events", "psr", "psr-14"],
"keywords": [
"events",
"psr",
"psr-14"
],
"support": {
"issues": "https://github.com/php-fig/event-dispatcher/issues",
"source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
@ -2516,7 +2754,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
@ -2525,7 +2765,12 @@
],
"description": "Common interface for HTTP clients",
"homepage": "https://github.com/php-fig/http-client",
"keywords": ["http", "http-client", "psr", "psr-18"],
"keywords": [
"http",
"http-client",
"psr",
"psr-18"
],
"support": {
"source": "https://github.com/php-fig/http-client"
},
@ -2533,20 +2778,20 @@
},
{
"name": "psr/http-factory",
"version": "1.0.2",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
"reference": "e616d01114759c4c489f93b099585439f795fe35"
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
"reference": "e616d01114759c4c489f93b099585439f795fe35",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
"php": ">=7.1",
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
@ -2561,14 +2806,16 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interfaces for PSR-7 HTTP message factories",
"description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
"keywords": [
"factory",
"http",
@ -2580,9 +2827,9 @@
"response"
],
"support": {
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
"source": "https://github.com/php-fig/http-factory"
},
"time": "2023-04-10T20:10:41+00:00"
"time": "2024-04-15T12:06:14+00:00"
},
{
"name": "psr/http-message",
@ -2613,7 +2860,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
@ -2637,16 +2886,16 @@
},
{
"name": "psr/log",
"version": "3.0.0",
"version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
"reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
"url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
@ -2664,7 +2913,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
@ -2673,11 +2924,15 @@
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": ["log", "psr", "psr-3"],
"keywords": [
"log",
"psr",
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/3.0.0"
"source": "https://github.com/php-fig/log/tree/3.0.2"
},
"time": "2021-07-14T16:46:02+00:00"
"time": "2024-09-11T13:17:53+00:00"
},
{
"name": "ralouphie/getallheaders",
@ -2702,10 +2957,14 @@
},
"type": "library",
"autoload": {
"files": ["src/getallheaders.php"]
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
@ -2721,16 +2980,16 @@
},
{
"name": "ramsey/collection",
"version": "2.0.0",
"version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/ramsey/collection.git",
"reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
"reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
"reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
"url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
"reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
"shasum": ""
},
"require": {
@ -2738,25 +2997,22 @@
},
"require-dev": {
"captainhook/plugin-composer": "^5.3",
"ergebnis/composer-normalize": "^2.28.3",
"fakerphp/faker": "^1.21",
"ergebnis/composer-normalize": "^2.45",
"fakerphp/faker": "^1.24",
"hamcrest/hamcrest-php": "^2.0",
"jangregor/phpstan-prophecy": "^1.0",
"mockery/mockery": "^1.5",
"jangregor/phpstan-prophecy": "^2.1",
"mockery/mockery": "^1.6",
"php-parallel-lint/php-console-highlighter": "^1.0",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpcsstandards/phpcsutils": "^1.0.0-rc1",
"phpspec/prophecy-phpunit": "^2.0",
"phpstan/extension-installer": "^1.2",
"phpstan/phpstan": "^1.9",
"phpstan/phpstan-mockery": "^1.1",
"phpstan/phpstan-phpunit": "^1.3",
"phpunit/phpunit": "^9.5",
"psalm/plugin-mockery": "^1.1",
"psalm/plugin-phpunit": "^0.18.4",
"ramsey/coding-standard": "^2.0.3",
"ramsey/conventional-commits": "^1.3",
"vimeo/psalm": "^5.4"
"php-parallel-lint/php-parallel-lint": "^1.4",
"phpspec/prophecy-phpunit": "^2.3",
"phpstan/extension-installer": "^1.4",
"phpstan/phpstan": "^2.1",
"phpstan/phpstan-mockery": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^10.5",
"ramsey/coding-standard": "^2.3",
"ramsey/conventional-commits": "^1.6",
"roave/security-advisories": "dev-latest"
},
"type": "library",
"extra": {
@ -2773,7 +3029,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Ben Ramsey",
@ -2782,40 +3040,36 @@
}
],
"description": "A PHP library for representing and manipulating collections.",
"keywords": ["array", "collection", "hash", "map", "queue", "set"],
"keywords": [
"array",
"collection",
"hash",
"map",
"queue",
"set"
],
"support": {
"issues": "https://github.com/ramsey/collection/issues",
"source": "https://github.com/ramsey/collection/tree/2.0.0"
"source": "https://github.com/ramsey/collection/tree/2.1.1"
},
"funding": [
{
"url": "https://github.com/ramsey",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
"type": "tidelift"
}
],
"time": "2022-12-31T21:50:55+00:00"
"time": "2025-03-22T05:38:12+00:00"
},
{
"name": "ramsey/uuid",
"version": "4.7.6",
"version": "4.9.2",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "91039bc1faa45ba123c4328958e620d382ec7088"
"reference": "8429c78ca35a09f27565311b98101e2826affde0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
"reference": "91039bc1faa45ba123c4328958e620d382ec7088",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0",
"reference": "8429c78ca35a09f27565311b98101e2826affde0",
"shasum": ""
},
"require": {
"brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
"ext-json": "*",
"brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
"php": "^8.0",
"ramsey/collection": "^1.2 || ^2.0"
},
@ -2823,26 +3077,23 @@
"rhumsaa/uuid": "self.version"
},
"require-dev": {
"captainhook/captainhook": "^5.10",
"captainhook/captainhook": "^5.25",
"captainhook/plugin-composer": "^5.3",
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
"doctrine/annotations": "^1.8",
"ergebnis/composer-normalize": "^2.15",
"mockery/mockery": "^1.3",
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
"ergebnis/composer-normalize": "^2.47",
"mockery/mockery": "^1.6",
"paragonie/random-lib": "^2",
"php-mock/php-mock": "^2.2",
"php-mock/php-mock-mockery": "^1.3",
"php-parallel-lint/php-parallel-lint": "^1.1",
"phpbench/phpbench": "^1.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-mockery": "^1.1",
"phpstan/phpstan-phpunit": "^1.1",
"phpunit/phpunit": "^8.5 || ^9",
"ramsey/composer-repl": "^1.4",
"slevomat/coding-standard": "^8.4",
"squizlabs/php_codesniffer": "^3.5",
"vimeo/psalm": "^4.9"
"php-mock/php-mock": "^2.6",
"php-mock/php-mock-mockery": "^1.5",
"php-parallel-lint/php-parallel-lint": "^1.4.0",
"phpbench/phpbench": "^1.2.14",
"phpstan/extension-installer": "^1.4",
"phpstan/phpstan": "^2.1",
"phpstan/phpstan-mockery": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^9.6",
"slevomat/coding-standard": "^8.18",
"squizlabs/php_codesniffer": "^3.13"
},
"suggest": {
"ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
@ -2858,43 +3109,41 @@
}
},
"autoload": {
"files": ["src/functions.php"],
"files": [
"src/functions.php"
],
"psr-4": {
"Ramsey\\Uuid\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
"keywords": ["guid", "identifier", "uuid"],
"keywords": [
"guid",
"identifier",
"uuid"
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
"source": "https://github.com/ramsey/uuid/tree/4.7.6"
"source": "https://github.com/ramsey/uuid/tree/4.9.2"
},
"funding": [
{
"url": "https://github.com/ramsey",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
"type": "tidelift"
}
],
"time": "2024-04-27T21:32:50+00:00"
"time": "2025-12-14T04:43:48+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.4.0",
"version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
"reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
"reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
"shasum": ""
},
"require": {
@ -2902,19 +3151,23 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.4-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
}
},
"autoload": {
"files": ["function.php"]
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
@ -2928,7 +3181,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
},
"funding": [
{
@ -2944,24 +3197,94 @@
"type": "tidelift"
}
],
"time": "2023-05-23T14:45:45+00:00"
"time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.29.0",
"name": "symfony/filesystem",
"version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
"url": "https://github.com/symfony/filesystem.git",
"reference": "d551b38811096d0be9c4691d406991b47c0c630a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
"reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a",
"reference": "d551b38811096d0be9c4691d406991b47c0c630a",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=8.2",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8"
},
"require-dev": {
"symfony/process": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Filesystem\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v7.4.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-11-27T13:27:24+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
"reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"provide": {
"ext-ctype": "*"
@ -2972,18 +3295,22 @@
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": ["bootstrap.php"],
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Gert de Pagter",
@ -2996,9 +3323,14 @@
],
"description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
"keywords": ["compatibility", "ctype", "polyfill", "portable"],
"keywords": [
"compatibility",
"ctype",
"polyfill",
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
},
"funding": [
{
@ -3009,29 +3341,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.29.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"shasum": ""
},
"require": {
"php": ">=7.1"
"ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
"ext-mbstring": "*"
@ -3042,18 +3379,22 @@
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": ["bootstrap.php"],
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
@ -3066,9 +3407,15 @@
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": ["compatibility", "mbstring", "polyfill", "portable", "shim"],
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
@ -3079,46 +3426,56 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2024-12-23T08:48:59+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.29.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": ["bootstrap.php"],
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"classmap": ["Resources/stubs"]
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Ion Bazan",
@ -3135,9 +3492,14 @@
],
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": ["compatibility", "polyfill", "portable", "shim"],
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
},
"funding": [
{
@ -3148,35 +3510,39 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2025-01-02T08:10:11+00:00"
},
{
"name": "vlucas/phpdotenv",
"version": "v5.6.0",
"version": "v5.6.3",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
"reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4"
"reference": "955e7815d677a3eaa7075231212f2110983adecc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
"reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc",
"reference": "955e7815d677a3eaa7075231212f2110983adecc",
"shasum": ""
},
"require": {
"ext-pcre": "*",
"graham-campbell/result-type": "^1.1.2",
"graham-campbell/result-type": "^1.1.4",
"php": "^7.2.5 || ^8.0",
"phpoption/phpoption": "^1.9.2",
"symfony/polyfill-ctype": "^1.24",
"symfony/polyfill-mbstring": "^1.24",
"symfony/polyfill-php80": "^1.24"
"phpoption/phpoption": "^1.9.5",
"symfony/polyfill-ctype": "^1.26",
"symfony/polyfill-mbstring": "^1.26",
"symfony/polyfill-php80": "^1.26"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
@ -3190,7 +3556,7 @@
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": true
"forward-command": false
},
"branch-alias": {
"dev-master": "5.6-dev"
@ -3202,7 +3568,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Graham Campbell",
@ -3216,10 +3584,14 @@
}
],
"description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
"keywords": ["dotenv", "env", "environment"],
"keywords": [
"dotenv",
"env",
"environment"
],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
"source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0"
"source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3"
},
"funding": [
{
@ -3231,7 +3603,7 @@
"type": "tidelift"
}
],
"time": "2023-11-12T22:43:29+00:00"
"time": "2025-12-27T19:49:13+00:00"
},
{
"name": "whichbrowser/parser",
@ -3266,11 +3638,15 @@
"type": "library",
"autoload": {
"psr-4": {
"WhichBrowser\\": ["src/"]
"WhichBrowser\\": [
"src/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Niels Leenheer",
@ -3280,7 +3656,12 @@
],
"description": "Useragent sniffing library for PHP",
"homepage": "http://whichbrowser.net",
"keywords": ["browser", "sniffing", "ua", "useragent"],
"keywords": [
"browser",
"sniffing",
"ua",
"useragent"
],
"support": {
"issues": "https://github.com/WhichBrowser/Parser-PHP/issues",
"source": "https://github.com/WhichBrowser/Parser-PHP/tree/v2.1.8"
@ -3288,95 +3669,108 @@
"time": "2024-04-17T12:47:41+00:00"
},
{
"name": "yassinedoghri/codeigniter-icons",
"version": "dev-develop",
"name": "yassinedoghri/codeigniter-vite",
"version": "v2.1.0",
"source": {
"type": "git",
"url": "https://github.com/yassinedoghri/codeigniter-icons.git",
"reference": "76526f22734df74651e784de6633962a05dcbd97"
"url": "https://github.com/yassinedoghri/codeigniter-vite.git",
"reference": "95c1dd30b716e3204ce981aa564202b299f9c8a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yassinedoghri/codeigniter-icons/zipball/76526f22734df74651e784de6633962a05dcbd97",
"reference": "76526f22734df74651e784de6633962a05dcbd97",
"url": "https://api.github.com/repos/yassinedoghri/codeigniter-vite/zipball/95c1dd30b716e3204ce981aa564202b299f9c8a5",
"reference": "95c1dd30b716e3204ce981aa564202b299f9c8a5",
"shasum": ""
},
"require": {
"php": ">=8.1",
"yassinedoghri/php-icons": "dev-develop"
},
"require-dev": {
"codeigniter/phpstan-codeigniter": "^v1.4.3",
"codeigniter4/devkit": "^v1.2.2",
"codeigniter4/framework": "^4.3.5",
"phpstan/extension-installer": "^1.3.1",
"phpstan/phpstan": "^1.10.66",
"rector/rector": "^1.0.4",
"symplify/coding-standard": "^12.1.4",
"symplify/easy-coding-standard": "^12.1.14"
},
"default-branch": true,
"type": "library",
"autoload": {
"psr-4": {
"CodeIgniterIcons\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"authors": [
{
"name": "Yassine Doghri",
"email": "yassine@doghri.fr",
"homepage": "https://yassinedoghri.com",
"role": "Maintainer"
}
],
"description": "A CodeIgniter4 library with convenient helper functions to render svg icons using yassinedoghri/php-icons.",
"keywords": ["codeigniter", "codeigniter4", "iconify", "icons"],
"support": {
"issues": "https://github.com/yassinedoghri/codeigniter-icons/issues",
"source": "https://github.com/yassinedoghri/codeigniter-icons/tree/develop"
},
"time": "2024-04-09T22:06:07+00:00"
},
{
"name": "yassinedoghri/php-icons",
"version": "dev-develop",
"source": {
"type": "git",
"url": "https://github.com/yassinedoghri/php-icons.git",
"reference": "976acbd9564f5ba13b11f4086c59b007a9374a4e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yassinedoghri/php-icons/zipball/976acbd9564f5ba13b11f4086c59b007a9374a4e",
"reference": "976acbd9564f5ba13b11f4086c59b007a9374a4e",
"shasum": ""
},
"require": {
"adhocore/cli": "^v1.7.1",
"composer-runtime-api": "^2.2",
"nikic/php-parser": "^v4.0",
"php": ">=8.1"
},
"require-dev": {
"kint-php/kint": "^5.1.1",
"phpstan/phpstan": "^1.10.67",
"rector/rector": "^1.0.4",
"symplify/coding-standard": "^12.1.4",
"symplify/easy-coding-standard": "^12.1.14"
"codeigniter/phpstan-codeigniter": "^1.5.4",
"codeigniter4/framework": "^v4.6.0",
"pestphp/pest": "^3.8.4",
"pestphp/pest-plugin-type-coverage": "^3.6.1",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan": "^2.1.22",
"rector/rector": "^2.1.4",
"symplify/coding-standard": "^12.4.3",
"symplify/easy-coding-standard": "^12.5.24"
},
"default-branch": true,
"bin": ["bin/php-icons"],
"type": "library",
"autoload": {
"psr-4": {
"CodeIgniterVite\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Yassine Doghri",
"homepage": "https://yassinedoghri.com/"
}
],
"description": "An opinionated Vite integration for CodeIgniter4 projects.",
"keywords": [
"codeigniter",
"codeigniter4",
"iconify",
"icons",
"php-icons"
],
"support": {
"issues": "https://github.com/yassinedoghri/codeigniter-vite/issues",
"source": "https://github.com/yassinedoghri/codeigniter-vite/tree/v2.1.0"
},
"time": "2025-09-09T18:36:45+00:00"
},
{
"name": "yassinedoghri/php-icons",
"version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/yassinedoghri/php-icons.git",
"reference": "ae5d7727431f6891a0660d2b20818795fae40b41"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yassinedoghri/php-icons/zipball/ae5d7727431f6891a0660d2b20818795fae40b41",
"reference": "ae5d7727431f6891a0660d2b20818795fae40b41",
"shasum": ""
},
"require": {
"adhocore/cli": "^v1.9.3",
"composer-runtime-api": "^2.2",
"php": ">=8.1"
},
"require-dev": {
"kint-php/kint": "^6.0.1",
"pestphp/pest": "^3.7.4",
"pestphp/pest-plugin-type-coverage": "^3.4.0",
"phpstan/phpstan": "^2.1.10",
"rector/rector": "^2.0.10",
"symplify/coding-standard": "^12.2.3",
"symplify/easy-coding-standard": "^12.5.9"
},
"bin": [
"bin/php-icons"
],
"type": "library",
"autoload": {
"files": [
"src/functions.php",
"src/Console/helpers.php"
],
"psr-4": {
"PHPIcons\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Yassine Doghri",
@ -3388,9 +3782,9 @@
"description": "A PHP library based on iconify's API to download and render svg icons from popular open source icon sets.",
"support": {
"issues": "https://github.com/yassinedoghri/php-icons/issues",
"source": "https://github.com/yassinedoghri/php-icons/tree/develop"
"source": "https://github.com/yassinedoghri/php-icons/tree/v1.3.0"
},
"time": "2024-04-26T15:47:20+00:00"
"time": "2025-03-23T16:46:25+00:00"
},
{
"name": "yassinedoghri/podcast-feed",
@ -3398,12 +3792,12 @@
"source": {
"type": "git",
"url": "https://github.com/yassinedoghri/podcast-feed.git",
"reference": "f34156e62c9eef8bd5561f8a585d99501e235505"
"reference": "d617e204fe85e0b7bd12b9d382cae4064af280c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yassinedoghri/podcast-feed/zipball/f34156e62c9eef8bd5561f8a585d99501e235505",
"reference": "f34156e62c9eef8bd5561f8a585d99501e235505",
"url": "https://api.github.com/repos/yassinedoghri/podcast-feed/zipball/d617e204fe85e0b7bd12b9d382cae4064af280c8",
"reference": "d617e204fe85e0b7bd12b9d382cae4064af280c8",
"shasum": ""
},
"require": {
@ -3425,7 +3819,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["AGPL-3.0-or-later"],
"license": [
"AGPL-3.0-or-later"
],
"authors": [
{
"name": "Yassine Doghri",
@ -3445,16 +3841,16 @@
"packages-dev": [
{
"name": "captainhook/captainhook",
"version": "5.23.0",
"version": "5.28.3",
"source": {
"type": "git",
"url": "https://github.com/captainhookphp/captainhook.git",
"reference": "08d90e4d98db123ab58826be8e891d7d36c14f2a"
"url": "https://github.com/captainhook-git/captainhook.git",
"reference": "5d35b249f3843ef36ead119f4347e649278ad6d8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/captainhookphp/captainhook/zipball/08d90e4d98db123ab58826be8e891d7d36c14f2a",
"reference": "08d90e4d98db123ab58826be8e891d7d36c14f2a",
"url": "https://api.github.com/repos/captainhook-git/captainhook/zipball/5d35b249f3843ef36ead119f4347e649278ad6d8",
"reference": "5d35b249f3843ef36ead119f4347e649278ad6d8",
"shasum": ""
},
"require": {
@ -3465,10 +3861,10 @@
"php": ">=8.0",
"sebastianfeldmann/camino": "^0.9.2",
"sebastianfeldmann/cli": "^3.3",
"sebastianfeldmann/git": "^3.10",
"symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
"symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
"symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0"
"sebastianfeldmann/git": "^3.16.0",
"symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
"symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
"symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0"
},
"replace": {
"sebastianfeldmann/captainhook": "*"
@ -3477,14 +3873,16 @@
"composer/composer": "~1 || ^2.0",
"mikey179/vfsstream": "~1"
},
"bin": ["bin/captainhook"],
"bin": [
"bin/captainhook"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "6.0.x-dev"
},
"captainhook": {
"config": "captainhook.json"
},
"branch-alias": {
"dev-main": "6.0.x-dev"
}
},
"autoload": {
@ -3493,7 +3891,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Sebastian Feldmann",
@ -3501,7 +3901,7 @@
}
],
"description": "PHP git hook manager",
"homepage": "http://php.captainhook.info/",
"homepage": "https://php.captainhook.info/",
"keywords": [
"commit-msg",
"git",
@ -3512,8 +3912,8 @@
"prepare-commit-msg"
],
"support": {
"issues": "https://github.com/captainhookphp/captainhook/issues",
"source": "https://github.com/captainhookphp/captainhook/tree/5.23.0"
"issues": "https://github.com/captainhook-git/captainhook/issues",
"source": "https://github.com/captainhook-git/captainhook/tree/5.28.3"
},
"funding": [
{
@ -3521,20 +3921,20 @@
"type": "github"
}
],
"time": "2024-04-12T10:39:21+00:00"
"time": "2026-02-16T14:08:58+00:00"
},
{
"name": "captainhook/secrets",
"version": "0.9.5",
"version": "0.9.7",
"source": {
"type": "git",
"url": "https://github.com/captainhookphp/secrets.git",
"reference": "8aa90d5b9b7892abd11b9da2fc172a7b32b90cbe"
"url": "https://github.com/captainhook-git/secrets.git",
"reference": "d62c97f75f81ac98e22f1c282482bd35fa82f631"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/captainhookphp/secrets/zipball/8aa90d5b9b7892abd11b9da2fc172a7b32b90cbe",
"reference": "8aa90d5b9b7892abd11b9da2fc172a7b32b90cbe",
"url": "https://api.github.com/repos/captainhook-git/secrets/zipball/d62c97f75f81ac98e22f1c282482bd35fa82f631",
"reference": "d62c97f75f81ac98e22f1c282482bd35fa82f631",
"shasum": ""
},
"require": {
@ -3548,7 +3948,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Sebastian Feldmann",
@ -3566,8 +3968,8 @@
"tokens"
],
"support": {
"issues": "https://github.com/captainhookphp/secrets/issues",
"source": "https://github.com/captainhookphp/secrets/tree/0.9.5"
"issues": "https://github.com/captainhook-git/secrets/issues",
"source": "https://github.com/captainhook-git/secrets/tree/0.9.7"
},
"funding": [
{
@ -3575,47 +3977,111 @@
"type": "github"
}
],
"time": "2023-11-30T18:10:18+00:00"
"time": "2025-04-08T07:10:48+00:00"
},
{
"name": "codeigniter/phpstan-codeigniter",
"version": "v1.4.3",
"name": "clue/ndjson-react",
"version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/CodeIgniter/phpstan-codeigniter.git",
"reference": "bff4a7cfe251bb288223e95d6f588e956dfc0a93"
"url": "https://github.com/clue/reactphp-ndjson.git",
"reference": "392dc165fce93b5bb5c637b67e59619223c931b0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/CodeIgniter/phpstan-codeigniter/zipball/bff4a7cfe251bb288223e95d6f588e956dfc0a93",
"reference": "bff4a7cfe251bb288223e95d6f588e956dfc0a93",
"url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0",
"reference": "392dc165fce93b5bb5c637b67e59619223c931b0",
"shasum": ""
},
"require": {
"php": ">=5.3",
"react/stream": "^1.2"
},
"require-dev": {
"phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35",
"react/event-loop": "^1.2"
},
"type": "library",
"autoload": {
"psr-4": {
"Clue\\React\\NDJson\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering"
}
],
"description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
"homepage": "https://github.com/clue/reactphp-ndjson",
"keywords": [
"NDJSON",
"json",
"jsonlines",
"newline",
"reactphp",
"streaming"
],
"support": {
"issues": "https://github.com/clue/reactphp-ndjson/issues",
"source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0"
},
"funding": [
{
"url": "https://clue.engineering/support",
"type": "custom"
},
{
"url": "https://github.com/clue",
"type": "github"
}
],
"time": "2022-12-23T10:58:28+00:00"
},
{
"name": "codeigniter/phpstan-codeigniter",
"version": "v1.5.4",
"source": {
"type": "git",
"url": "https://github.com/CodeIgniter/phpstan-codeigniter.git",
"reference": "e959fb0841c29a01870aa6570f3095f42e1057ad"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/CodeIgniter/phpstan-codeigniter/zipball/e959fb0841c29a01870aa6570f3095f42e1057ad",
"reference": "e959fb0841c29a01870aa6570f3095f42e1057ad",
"shasum": ""
},
"require": {
"codeigniter4/framework": "^4.4",
"php": "^8.1",
"phpstan/phpstan": "^1.10"
"phpstan/phpstan": "^2.0"
},
"conflict": {
"codeigniter/framework": "*"
},
"require-dev": {
"codeigniter/coding-standard": "^1.7",
"codeigniter4/shield": "^1.0@beta",
"friendsofphp/php-cs-fixer": "^3.20",
"nexusphp/cs-config": "^3.12",
"php-parallel-lint/php-parallel-lint": "^1.3",
"codeigniter4/framework": "^4.5",
"codeigniter4/shield": "^1.0",
"friendsofphp/php-cs-fixer": "^3.49",
"nexusphp/cs-config": "^3.21",
"phpstan/extension-installer": "^1.3",
"phpstan/phpstan-deprecation-rules": "^1.1",
"phpstan/phpstan-phpunit": "^1.3",
"phpstan/phpstan-strict-rules": "^1.5",
"phpunit/phpunit": "^10.2",
"rector/rector": "^0.18.2"
"phpstan/phpstan-deprecation-rules": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpstan/phpstan-strict-rules": "^2.0",
"phpunit/phpunit": "^10.5 || ^11.4"
},
"type": "phpstan-extension",
"extra": {
"phpstan": {
"includes": ["extension.neon"]
"includes": [
"extension.neon"
]
}
},
"autoload": {
@ -3624,7 +4090,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "John Paul E. Balandan, CPA",
@ -3645,32 +4113,40 @@
"slack": "https://codeigniterchat.slack.com",
"source": "https://github.com/CodeIgniter/phpstan-codeigniter"
},
"time": "2023-12-21T03:39:48+00:00"
"time": "2025-06-24T17:28:48+00:00"
},
{
"name": "composer/pcre",
"version": "3.1.3",
"version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
"reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8"
"reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
"reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
"url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
"conflict": {
"phpstan/phpstan": "<1.11.10"
},
"require-dev": {
"phpstan/phpstan": "^1.3",
"phpstan/phpstan-strict-rules": "^1.1",
"symfony/phpunit-bridge": "^5"
"phpstan/phpstan": "^1.12 || ^2",
"phpstan/phpstan-strict-rules": "^1 || ^2",
"phpunit/phpunit": "^8 || ^9"
},
"type": "library",
"extra": {
"phpstan": {
"includes": [
"extension.neon"
]
},
"branch-alias": {
"dev-main": "3.x-dev"
}
@ -3681,7 +4157,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
@ -3690,10 +4168,15 @@
}
],
"description": "PCRE wrapping library that offers type-safe preg_* replacements.",
"keywords": ["PCRE", "preg", "regex", "regular expression"],
"keywords": [
"PCRE",
"preg",
"regex",
"regular expression"
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/3.1.3"
"source": "https://github.com/composer/pcre/tree/3.3.2"
},
"funding": [
{
@ -3709,28 +4192,28 @@
"type": "tidelift"
}
],
"time": "2024-03-19T10:26:25+00:00"
"time": "2024-11-12T16:29:46+00:00"
},
{
"name": "composer/semver",
"version": "3.4.0",
"version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
"url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.4",
"symfony/phpunit-bridge": "^4.2 || ^5"
"phpstan/phpstan": "^1.11",
"symfony/phpunit-bridge": "^3 || ^7"
},
"type": "library",
"extra": {
@ -3744,7 +4227,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nils Adermann",
@ -3763,11 +4248,16 @@
}
],
"description": "Semver library that offers utilities, version constraint parsing and validation.",
"keywords": ["semantic", "semver", "validation", "versioning"],
"keywords": [
"semantic",
"semver",
"validation",
"versioning"
],
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.4.0"
"source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
@ -3777,26 +4267,22 @@
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2023-08-31T09:50:34+00:00"
"time": "2025-08-20T19:15:30+00:00"
},
{
"name": "composer/xdebug-handler",
"version": "3.0.4",
"version": "3.0.5",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
"reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255"
"reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
"reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
"reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
"shasum": ""
},
"require": {
@ -3816,7 +4302,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "John Stevenson",
@ -3824,11 +4312,14 @@
}
],
"description": "Restarts a process without Xdebug.",
"keywords": ["Xdebug", "performance"],
"keywords": [
"Xdebug",
"performance"
],
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
"source": "https://github.com/composer/xdebug-handler/tree/3.0.4"
"source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
},
"funding": [
{
@ -3844,68 +4335,191 @@
"type": "tidelift"
}
],
"time": "2024-03-26T18:29:49+00:00"
"time": "2024-05-06T16:37:16+00:00"
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v3.54.0",
"name": "evenement/evenement",
"version": "v3.0.2",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08"
"url": "https://github.com/igorw/evenement.git",
"reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2aecbc8640d7906c38777b3dcab6f4ca79004d08",
"reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08",
"url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
"reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
"shasum": ""
},
"require": {
"composer/semver": "^3.4",
"composer/xdebug-handler": "^3.0.3",
"ext-filter": "*",
"ext-json": "*",
"ext-tokenizer": "*",
"php": "^7.4 || ^8.0",
"sebastian/diff": "^4.0 || ^5.0 || ^6.0",
"symfony/console": "^5.4 || ^6.0 || ^7.0",
"symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
"symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
"symfony/finder": "^5.4 || ^6.0 || ^7.0",
"symfony/options-resolver": "^5.4 || ^6.0 || ^7.0",
"symfony/polyfill-mbstring": "^1.28",
"symfony/polyfill-php80": "^1.28",
"symfony/polyfill-php81": "^1.28",
"symfony/process": "^5.4 || ^6.0 || ^7.0",
"symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
"php": ">=7.0"
},
"require-dev": {
"facile-it/paraunit": "^1.3 || ^2.0",
"infection/infection": "^0.27.11",
"justinrainbow/json-schema": "^5.2",
"keradus/cli-executor": "^2.1",
"mikey179/vfsstream": "^1.6.11",
"php-coveralls/php-coveralls": "^2.7",
"php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4",
"phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2",
"symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
"phpunit/phpunit": "^9 || ^6"
},
"type": "library",
"autoload": {
"psr-4": {
"Evenement\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Igor Wiedler",
"email": "igor@wiedler.ch"
}
],
"description": "Événement is a very simple event dispatching library for PHP",
"keywords": [
"event-dispatcher",
"event-emitter"
],
"support": {
"issues": "https://github.com/igorw/evenement/issues",
"source": "https://github.com/igorw/evenement/tree/v3.0.2"
},
"time": "2023-08-08T05:53:35+00:00"
},
{
"name": "fidry/cpu-core-counter",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/theofidry/cpu-core-counter.git",
"reference": "db9508f7b1474469d9d3c53b86f817e344732678"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678",
"reference": "db9508f7b1474469d9d3c53b86f817e344732678",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"fidry/makefile": "^0.2.0",
"fidry/php-cs-fixer-config": "^1.1.2",
"phpstan/extension-installer": "^1.2.0",
"phpstan/phpstan": "^2.0",
"phpstan/phpstan-deprecation-rules": "^2.0.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpstan/phpstan-strict-rules": "^2.0",
"phpunit/phpunit": "^8.5.31 || ^9.5.26",
"webmozarts/strict-phpunit": "^7.5"
},
"type": "library",
"autoload": {
"psr-4": {
"Fidry\\CpuCoreCounter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Théo FIDRY",
"email": "theo.fidry@gmail.com"
}
],
"description": "Tiny utility to get the number of CPU cores.",
"keywords": [
"CPU",
"core"
],
"support": {
"issues": "https://github.com/theofidry/cpu-core-counter/issues",
"source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0"
},
"funding": [
{
"url": "https://github.com/theofidry",
"type": "github"
}
],
"time": "2025-08-14T07:29:31+00:00"
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v3.94.1",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "d1a3634e29916367b885250e1fc4dfd5ffe3b091"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d1a3634e29916367b885250e1fc4dfd5ffe3b091",
"reference": "d1a3634e29916367b885250e1fc4dfd5ffe3b091",
"shasum": ""
},
"require": {
"clue/ndjson-react": "^1.3",
"composer/semver": "^3.4",
"composer/xdebug-handler": "^3.0.5",
"ext-filter": "*",
"ext-hash": "*",
"ext-json": "*",
"ext-tokenizer": "*",
"fidry/cpu-core-counter": "^1.3",
"php": "^7.4 || ^8.0",
"react/child-process": "^0.6.6",
"react/event-loop": "^1.5",
"react/socket": "^1.16",
"react/stream": "^1.4",
"sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0",
"symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/polyfill-mbstring": "^1.33",
"symfony/polyfill-php80": "^1.33",
"symfony/polyfill-php81": "^1.33",
"symfony/polyfill-php84": "^1.33",
"symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0",
"symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0"
},
"require-dev": {
"facile-it/paraunit": "^1.3.1 || ^2.7.1",
"infection/infection": "^0.32.3",
"justinrainbow/json-schema": "^6.6.4",
"keradus/cli-executor": "^2.3",
"mikey179/vfsstream": "^1.6.12",
"php-coveralls/php-coveralls": "^2.9.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.7",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.7",
"phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.51",
"symfony/polyfill-php85": "^1.33",
"symfony/var-dumper": "^5.4.48 || ^6.4.32 || ^7.4.4 || ^8.0.4",
"symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0.1"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
"ext-mbstring": "For handling non-UTF8 characters."
},
"bin": ["php-cs-fixer"],
"bin": [
"php-cs-fixer"
],
"type": "application",
"autoload": {
"psr-4": {
"PhpCsFixer\\": "src/"
}
},
"exclude-from-classmap": [
"src/**/Internal/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
@ -3925,7 +4539,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.54.0"
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.94.1"
},
"funding": [
{
@ -3933,27 +4547,28 @@
"type": "github"
}
],
"time": "2024-04-17T08:12:13+00:00"
"time": "2026-02-18T12:24:42+00:00"
},
{
"name": "mikey179/vfsstream",
"version": "v1.6.11",
"version": "v1.6.12",
"source": {
"type": "git",
"url": "https://github.com/bovigo/vfsStream.git",
"reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f"
"reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/bovigo/vfsStream/zipball/17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f",
"reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f",
"url": "https://api.github.com/repos/bovigo/vfsStream/zipball/fe695ec993e0a55c3abdda10a9364eb31c6f1bf0",
"reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": ">=7.1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.5|^5.0"
"phpunit/phpunit": "^7.5||^8.5||^9.6",
"yoast/phpunit-polyfills": "^2.0"
},
"type": "library",
"extra": {
@ -3967,7 +4582,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Frank Kleine",
@ -3982,20 +4599,20 @@
"source": "https://github.com/bovigo/vfsStream/tree/master",
"wiki": "https://github.com/bovigo/vfsStream/wiki"
},
"time": "2022-02-23T02:02:42+00:00"
"time": "2024-08-29T18:43:31+00:00"
},
{
"name": "myclabs/deep-copy",
"version": "1.11.1",
"version": "1.13.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
"reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"shasum": ""
},
"require": {
@ -4003,27 +4620,38 @@
},
"conflict": {
"doctrine/collections": "<1.6.8",
"doctrine/common": "<2.13.3 || >=3,<3.2.2"
"doctrine/common": "<2.13.3 || >=3 <3.2.2"
},
"require-dev": {
"doctrine/collections": "^1.6.8",
"doctrine/common": "^2.13.3 || ^3.2.2",
"phpspec/prophecy": "^1.10",
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
},
"type": "library",
"autoload": {
"files": ["src/DeepCopy/deep_copy.php"],
"files": [
"src/DeepCopy/deep_copy.php"
],
"psr-4": {
"DeepCopy\\": "src/DeepCopy/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "Create deep copies (clones) of your objects",
"keywords": ["clone", "copy", "duplicate", "object", "object graph"],
"keywords": [
"clone",
"copy",
"duplicate",
"object",
"object graph"
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
"source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
"funding": [
{
@ -4031,7 +4659,65 @@
"type": "tidelift"
}
],
"time": "2023-03-08T13:26:56+00:00"
"time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nikic/php-parser",
"version": "v5.7.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-json": "*",
"ext-tokenizer": "*",
"php": ">=7.4"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^9.0"
},
"bin": [
"bin/php-parse"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.x-dev"
}
},
"autoload": {
"psr-4": {
"PhpParser\\": "lib/PhpParser"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Nikita Popov"
}
],
"description": "A PHP parser written in PHP",
"keywords": [
"parser",
"php"
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
},
"time": "2025-12-06T11:56:16+00:00"
},
{
"name": "phar-io/manifest",
@ -4062,10 +4748,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Arne Blankerts",
@ -4115,10 +4805,14 @@
},
"type": "library",
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Arne Blankerts",
@ -4145,22 +4839,22 @@
},
{
"name": "phpstan/extension-installer",
"version": "1.3.1",
"version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/phpstan/extension-installer.git",
"reference": "f45734bfb9984c6c56c4486b71230355f066a58a"
"reference": "85e90b3942d06b2326fba0403ec24fe912372936"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f45734bfb9984c6c56c4486b71230355f066a58a",
"reference": "f45734bfb9984c6c56c4486b71230355f066a58a",
"url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936",
"reference": "85e90b3942d06b2326fba0403ec24fe912372936",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.0",
"php": "^7.2 || ^8.0",
"phpstan/phpstan": "^1.9.0"
"phpstan/phpstan": "^1.9.0 || ^2.0"
},
"require-dev": {
"composer/composer": "^2.0",
@ -4177,43 +4871,54 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "Composer plugin for automatic installation of PHPStan extensions",
"keywords": [
"dev",
"static analysis"
],
"support": {
"issues": "https://github.com/phpstan/extension-installer/issues",
"source": "https://github.com/phpstan/extension-installer/tree/1.3.1"
"source": "https://github.com/phpstan/extension-installer/tree/1.4.3"
},
"time": "2023-05-24T08:59:17+00:00"
"time": "2024-09-04T20:21:43+00:00"
},
{
"name": "phpstan/phpstan",
"version": "1.10.67",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
},
"version": "2.1.39",
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224",
"reference": "c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224",
"shasum": ""
},
"require": {
"php": "^7.2|^8.0"
"php": "^7.4|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
},
"bin": ["phpstan", "phpstan.phar"],
"bin": [
"phpstan",
"phpstan.phar"
],
"type": "library",
"autoload": {
"files": ["bootstrap.php"]
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "PHPStan - PHP Static Analysis Tool",
"keywords": ["dev", "static analysis"],
"keywords": [
"dev",
"static analysis"
],
"support": {
"docs": "https://phpstan.org/user-guide/getting-started",
"forum": "https://github.com/phpstan/phpstan/discussions",
@ -4231,36 +4936,36 @@
"type": "github"
}
],
"time": "2024-04-16T07:22:02+00:00"
"time": "2026-02-11T14:48:56+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "10.1.14",
"version": "10.1.16",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
"reference": "7e308268858ed6baedc8704a304727d20bc07c77"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
"reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
"reference": "7e308268858ed6baedc8704a304727d20bc07c77",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
"nikic/php-parser": "^4.18 || ^5.0",
"nikic/php-parser": "^4.19.1 || ^5.1.0",
"php": ">=8.1",
"phpunit/php-file-iterator": "^4.0",
"phpunit/php-text-template": "^3.0",
"sebastian/code-unit-reverse-lookup": "^3.0",
"sebastian/complexity": "^3.0",
"sebastian/environment": "^6.0",
"sebastian/lines-of-code": "^2.0",
"sebastian/version": "^4.0",
"theseer/tokenizer": "^1.2.0"
"phpunit/php-file-iterator": "^4.1.0",
"phpunit/php-text-template": "^3.0.1",
"sebastian/code-unit-reverse-lookup": "^3.0.0",
"sebastian/complexity": "^3.2.0",
"sebastian/environment": "^6.1.0",
"sebastian/lines-of-code": "^2.0.2",
"sebastian/version": "^4.0.1",
"theseer/tokenizer": "^1.2.3"
},
"require-dev": {
"phpunit/phpunit": "^10.1"
@ -4272,14 +4977,18 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "10.1-dev"
"dev-main": "10.1.x-dev"
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4289,11 +4998,15 @@
],
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
"keywords": ["coverage", "testing", "xunit"],
"keywords": [
"coverage",
"testing",
"xunit"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
},
"funding": [
{
@ -4301,7 +5014,7 @@
"type": "github"
}
],
"time": "2024-03-12T15:33:41+00:00"
"time": "2024-08-22T04:31:57+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -4330,10 +5043,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4343,7 +5060,10 @@
],
"description": "FilterIterator implementation that filters files based on a list of suffixes.",
"homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
"keywords": ["filesystem", "iterator"],
"keywords": [
"filesystem",
"iterator"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
"security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
@ -4388,10 +5108,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4401,7 +5125,9 @@
],
"description": "Invoke callables with a timeout",
"homepage": "https://github.com/sebastianbergmann/php-invoker/",
"keywords": ["process"],
"keywords": [
"process"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-invoker/issues",
"source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
@ -4441,10 +5167,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4454,7 +5184,9 @@
],
"description": "Simple template engine.",
"homepage": "https://github.com/sebastianbergmann/php-text-template/",
"keywords": ["template"],
"keywords": [
"template"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
"security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
@ -4495,10 +5227,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4508,7 +5244,9 @@
],
"description": "Utility class for timing",
"homepage": "https://github.com/sebastianbergmann/php-timer/",
"keywords": ["timer"],
"keywords": [
"timer"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
"source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
@ -4523,16 +5261,16 @@
},
{
"name": "phpunit/phpunit",
"version": "10.5.20",
"version": "10.5.63",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3"
"reference": "33198268dad71e926626b618f3ec3966661e4d90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/547d314dc24ec1e177720d45c6263fb226cc2ae3",
"reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90",
"reference": "33198268dad71e926626b618f3ec3966661e4d90",
"shasum": ""
},
"require": {
@ -4542,31 +5280,33 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
"myclabs/deep-copy": "^1.10.1",
"phar-io/manifest": "^2.0.3",
"phar-io/version": "^3.0.2",
"myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.1",
"phpunit/php-code-coverage": "^10.1.5",
"phpunit/php-file-iterator": "^4.0",
"phpunit/php-invoker": "^4.0",
"phpunit/php-text-template": "^3.0",
"phpunit/php-timer": "^6.0",
"sebastian/cli-parser": "^2.0",
"sebastian/code-unit": "^2.0",
"sebastian/comparator": "^5.0",
"sebastian/diff": "^5.0",
"sebastian/environment": "^6.0",
"sebastian/exporter": "^5.1",
"sebastian/global-state": "^6.0.1",
"sebastian/object-enumerator": "^5.0",
"sebastian/recursion-context": "^5.0",
"sebastian/type": "^4.0",
"sebastian/version": "^4.0"
"phpunit/php-code-coverage": "^10.1.16",
"phpunit/php-file-iterator": "^4.1.0",
"phpunit/php-invoker": "^4.0.0",
"phpunit/php-text-template": "^3.0.1",
"phpunit/php-timer": "^6.0.0",
"sebastian/cli-parser": "^2.0.1",
"sebastian/code-unit": "^2.0.0",
"sebastian/comparator": "^5.0.5",
"sebastian/diff": "^5.1.1",
"sebastian/environment": "^6.1.0",
"sebastian/exporter": "^5.1.4",
"sebastian/global-state": "^6.0.2",
"sebastian/object-enumerator": "^5.0.0",
"sebastian/recursion-context": "^5.0.1",
"sebastian/type": "^4.0.0",
"sebastian/version": "^4.0.1"
},
"suggest": {
"ext-soap": "To be able to generate mocks based on WSDL files"
},
"bin": ["phpunit"],
"bin": [
"phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
@ -4574,11 +5314,17 @@
}
},
"autoload": {
"files": ["src/Framework/Assert/Functions.php"],
"classmap": ["src/"]
"files": [
"src/Framework/Assert/Functions.php"
],
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4588,11 +5334,15 @@
],
"description": "The PHP Unit Testing framework.",
"homepage": "https://phpunit.de/",
"keywords": ["phpunit", "testing", "xunit"],
"keywords": [
"phpunit",
"testing",
"xunit"
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.20"
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63"
},
"funding": [
{
@ -4603,12 +5353,20 @@
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
{
"url": "https://liberapay.com/sebastianbergmann",
"type": "liberapay"
},
{
"url": "https://thanks.dev/u/gh/sebastianbergmann",
"type": "thanks_dev"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
"type": "tidelift"
}
],
"time": "2024-04-24T06:32:35+00:00"
"time": "2026-01-27T05:48:37+00:00"
},
{
"name": "psr/container",
@ -4639,7 +5397,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
@ -4662,22 +5422,548 @@
"time": "2021-11-05T16:47:00+00:00"
},
{
"name": "rector/rector",
"version": "1.0.4",
"name": "react/cache",
"version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
"reference": "6e04d0eb087aef707fa0c5686d33d6ff61f4a555"
"url": "https://github.com/reactphp/cache.git",
"reference": "d47c472b64aa5608225f47965a484b75c7817d5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/6e04d0eb087aef707fa0c5686d33d6ff61f4a555",
"reference": "6e04d0eb087aef707fa0c5686d33d6ff61f4a555",
"url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b",
"reference": "d47c472b64aa5608225f47965a484b75c7817d5b",
"shasum": ""
},
"require": {
"php": "^7.2|^8.0",
"phpstan/phpstan": "^1.10.57"
"php": ">=5.3.0",
"react/promise": "^3.0 || ^2.0 || ^1.1"
},
"require-dev": {
"phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Cache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, Promise-based cache interface for ReactPHP",
"keywords": [
"cache",
"caching",
"promise",
"reactphp"
],
"support": {
"issues": "https://github.com/reactphp/cache/issues",
"source": "https://github.com/reactphp/cache/tree/v1.2.0"
},
"funding": [
{
"url": "https://opencollective.com/reactphp",
"type": "open_collective"
}
],
"time": "2022-11-30T15:59:55+00:00"
},
{
"name": "react/child-process",
"version": "v0.6.7",
"source": {
"type": "git",
"url": "https://github.com/reactphp/child-process.git",
"reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3",
"reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.0",
"react/event-loop": "^1.2",
"react/stream": "^1.4"
},
"require-dev": {
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
"react/socket": "^1.16",
"sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\ChildProcess\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Event-driven library for executing child processes with ReactPHP.",
"keywords": [
"event-driven",
"process",
"reactphp"
],
"support": {
"issues": "https://github.com/reactphp/child-process/issues",
"source": "https://github.com/reactphp/child-process/tree/v0.6.7"
},
"funding": [
{
"url": "https://opencollective.com/reactphp",
"type": "open_collective"
}
],
"time": "2025-12-23T15:25:20+00:00"
},
{
"name": "react/dns",
"version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/dns.git",
"reference": "7562c05391f42701c1fccf189c8225fece1cd7c3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3",
"reference": "7562c05391f42701c1fccf189c8225fece1cd7c3",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/cache": "^1.0 || ^0.6 || ^0.5",
"react/event-loop": "^1.2",
"react/promise": "^3.2 || ^2.7 || ^1.2.1"
},
"require-dev": {
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
"react/async": "^4.3 || ^3 || ^2",
"react/promise-timer": "^1.11"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Dns\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async DNS resolver for ReactPHP",
"keywords": [
"async",
"dns",
"dns-resolver",
"reactphp"
],
"support": {
"issues": "https://github.com/reactphp/dns/issues",
"source": "https://github.com/reactphp/dns/tree/v1.14.0"
},
"funding": [
{
"url": "https://opencollective.com/reactphp",
"type": "open_collective"
}
],
"time": "2025-11-18T19:34:28+00:00"
},
{
"name": "react/event-loop",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/event-loop.git",
"reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
"reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
},
"suggest": {
"ext-pcntl": "For signal handling support when using the StreamSelectLoop"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\EventLoop\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
"keywords": [
"asynchronous",
"event-loop"
],
"support": {
"issues": "https://github.com/reactphp/event-loop/issues",
"source": "https://github.com/reactphp/event-loop/tree/v1.6.0"
},
"funding": [
{
"url": "https://opencollective.com/reactphp",
"type": "open_collective"
}
],
"time": "2025-11-17T20:46:25+00:00"
},
{
"name": "react/promise",
"version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
"reference": "23444f53a813a3296c1368bb104793ce8d88f04a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a",
"reference": "23444f53a813a3296c1368bb104793ce8d88f04a",
"shasum": ""
},
"require": {
"php": ">=7.1.0"
},
"require-dev": {
"phpstan/phpstan": "1.12.28 || 1.4.10",
"phpunit/phpunit": "^9.6 || ^7.5"
},
"type": "library",
"autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": {
"React\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "A lightweight implementation of CommonJS Promises/A for PHP",
"keywords": [
"promise",
"promises"
],
"support": {
"issues": "https://github.com/reactphp/promise/issues",
"source": "https://github.com/reactphp/promise/tree/v3.3.0"
},
"funding": [
{
"url": "https://opencollective.com/reactphp",
"type": "open_collective"
}
],
"time": "2025-08-19T18:57:03+00:00"
},
{
"name": "react/socket",
"version": "v1.17.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
"reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08",
"reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.0",
"react/dns": "^1.13",
"react/event-loop": "^1.2",
"react/promise": "^3.2 || ^2.6 || ^1.2.1",
"react/stream": "^1.4"
},
"require-dev": {
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
"react/async": "^4.3 || ^3.3 || ^2",
"react/promise-stream": "^1.4",
"react/promise-timer": "^1.11"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Socket\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
"keywords": [
"Connection",
"Socket",
"async",
"reactphp",
"stream"
],
"support": {
"issues": "https://github.com/reactphp/socket/issues",
"source": "https://github.com/reactphp/socket/tree/v1.17.0"
},
"funding": [
{
"url": "https://opencollective.com/reactphp",
"type": "open_collective"
}
],
"time": "2025-11-19T20:47:34+00:00"
},
{
"name": "react/stream",
"version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/stream.git",
"reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
"reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.8",
"react/event-loop": "^1.2"
},
"require-dev": {
"clue/stream-filter": "~1.2",
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Stream\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
"keywords": [
"event-driven",
"io",
"non-blocking",
"pipe",
"reactphp",
"readable",
"stream",
"writable"
],
"support": {
"issues": "https://github.com/reactphp/stream/issues",
"source": "https://github.com/reactphp/stream/tree/v1.4.0"
},
"funding": [
{
"url": "https://opencollective.com/reactphp",
"type": "open_collective"
}
],
"time": "2024-06-11T12:45:25+00:00"
},
{
"name": "rector/rector",
"version": "2.3.6",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
"reference": "ca9ebb81d280cd362ea39474dabd42679e32ca6b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/ca9ebb81d280cd362ea39474dabd42679e32ca6b",
"reference": "ca9ebb81d280cd362ea39474dabd42679e32ca6b",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
"phpstan/phpstan": "^2.1.38"
},
"conflict": {
"rector/rector-doctrine": "*",
@ -4688,18 +5974,30 @@
"suggest": {
"ext-dom": "To manipulate phpunit.xml via the custom-rule command"
},
"bin": ["bin/rector"],
"bin": [
"bin/rector"
],
"type": "library",
"autoload": {
"files": ["bootstrap.php"]
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "Instant Upgrade and Automated Refactoring of any PHP code",
"keywords": ["automation", "dev", "migration", "refactoring"],
"homepage": "https://getrector.com/",
"keywords": [
"automation",
"dev",
"migration",
"refactoring"
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
"source": "https://github.com/rectorphp/rector/tree/1.0.4"
"source": "https://github.com/rectorphp/rector/tree/2.3.6"
},
"funding": [
{
@ -4707,7 +6005,7 @@
"type": "github"
}
],
"time": "2024-04-05T09:01:07+00:00"
"time": "2026-02-06T14:25:06+00:00"
},
{
"name": "sebastian/cli-parser",
@ -4736,10 +6034,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4789,10 +6091,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4841,10 +6147,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4867,16 +6177,16 @@
},
{
"name": "sebastian/comparator",
"version": "5.0.1",
"version": "5.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "2db5010a484d53ebf536087a70b4a5423c102372"
"reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
"reference": "2db5010a484d53ebf536087a70b4a5423c102372",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d",
"reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d",
"shasum": ""
},
"require": {
@ -4887,7 +6197,7 @@
"sebastian/exporter": "^5.0"
},
"require-dev": {
"phpunit/phpunit": "^10.3"
"phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@ -4896,10 +6206,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -4920,19 +6234,35 @@
],
"description": "Provides the functionality to compare PHP values for equality",
"homepage": "https://github.com/sebastianbergmann/comparator",
"keywords": ["comparator", "compare", "equality"],
"keywords": [
"comparator",
"compare",
"equality"
],
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
"source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
"source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
{
"url": "https://liberapay.com/sebastianbergmann",
"type": "liberapay"
},
{
"url": "https://thanks.dev/u/gh/sebastianbergmann",
"type": "thanks_dev"
},
{
"url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
"type": "tidelift"
}
],
"time": "2023-08-14T13:18:12+00:00"
"time": "2026-01-24T09:25:16+00:00"
},
{
"name": "sebastian/complexity",
@ -4962,10 +6292,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5016,10 +6350,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5032,7 +6370,12 @@
],
"description": "Diff implementation",
"homepage": "https://github.com/sebastianbergmann/diff",
"keywords": ["diff", "udiff", "unidiff", "unified diff"],
"keywords": [
"diff",
"udiff",
"unidiff",
"unified diff"
],
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
@ -5076,10 +6419,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5088,7 +6435,11 @@
],
"description": "Provides functionality to handle HHVM/PHP environments",
"homepage": "https://github.com/sebastianbergmann/environment",
"keywords": ["Xdebug", "environment", "hhvm"],
"keywords": [
"Xdebug",
"environment",
"hhvm"
],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"security": "https://github.com/sebastianbergmann/environment/security/policy",
@ -5104,16 +6455,16 @@
},
{
"name": "sebastian/exporter",
"version": "5.1.2",
"version": "5.1.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "955288482d97c19a372d3f31006ab3f37da47adf"
"reference": "0735b90f4da94969541dac1da743446e276defa6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
"reference": "955288482d97c19a372d3f31006ab3f37da47adf",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6",
"reference": "0735b90f4da94969541dac1da743446e276defa6",
"shasum": ""
},
"require": {
@ -5122,7 +6473,7 @@
"sebastian/recursion-context": "^5.0"
},
"require-dev": {
"phpunit/phpunit": "^10.0"
"phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@ -5131,10 +6482,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5159,19 +6514,34 @@
],
"description": "Provides the functionality to export PHP variables for visualization",
"homepage": "https://www.github.com/sebastianbergmann/exporter",
"keywords": ["export", "exporter"],
"keywords": [
"export",
"exporter"
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"security": "https://github.com/sebastianbergmann/exporter/security/policy",
"source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
"source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
{
"url": "https://liberapay.com/sebastianbergmann",
"type": "liberapay"
},
{
"url": "https://thanks.dev/u/gh/sebastianbergmann",
"type": "thanks_dev"
},
{
"url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
"type": "tidelift"
}
],
"time": "2024-03-02T07:17:12+00:00"
"time": "2025-09-24T06:09:11+00:00"
},
{
"name": "sebastian/global-state",
@ -5203,10 +6573,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5215,7 +6589,9 @@
],
"description": "Snapshotting of global state",
"homepage": "https://www.github.com/sebastianbergmann/global-state",
"keywords": ["global state"],
"keywords": [
"global state"
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"security": "https://github.com/sebastianbergmann/global-state/security/policy",
@ -5257,10 +6633,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5312,10 +6692,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5363,10 +6747,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5389,23 +6777,23 @@
},
{
"name": "sebastian/recursion-context",
"version": "5.0.0",
"version": "5.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
"reference": "05909fb5bc7df4c52992396d0116aed689f93712"
"reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712",
"reference": "05909fb5bc7df4c52992396d0116aed689f93712",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a",
"reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"require-dev": {
"phpunit/phpunit": "^10.0"
"phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@ -5414,10 +6802,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5436,15 +6828,28 @@
"homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0"
"security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
"source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
{
"url": "https://liberapay.com/sebastianbergmann",
"type": "liberapay"
},
{
"url": "https://thanks.dev/u/gh/sebastianbergmann",
"type": "thanks_dev"
},
{
"url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
"type": "tidelift"
}
],
"time": "2023-02-03T07:05:40+00:00"
"time": "2025-08-10T07:50:56+00:00"
},
{
"name": "sebastian/type",
@ -5473,10 +6878,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5522,10 +6931,14 @@
}
},
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
@ -5576,7 +6989,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Sebastian Feldmann",
@ -5585,7 +7000,10 @@
],
"description": "Path management the OO way",
"homepage": "https://github.com/sebastianfeldmann/camino",
"keywords": ["file system", "path"],
"keywords": [
"file system",
"path"
],
"support": {
"issues": "https://github.com/sebastianfeldmann/camino/issues",
"source": "https://github.com/sebastianfeldmann/camino/tree/0.9.5"
@ -5600,16 +7018,16 @@
},
{
"name": "sebastianfeldmann/cli",
"version": "3.4.1",
"version": "3.4.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianfeldmann/cli.git",
"reference": "8a932e99e9455981fb32fa6c085492462fe8f8cf"
"reference": "6fa122afd528dae7d7ec988a604aa6c600f5d9b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/8a932e99e9455981fb32fa6c085492462fe8f8cf",
"reference": "8a932e99e9455981fb32fa6c085492462fe8f8cf",
"url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/6fa122afd528dae7d7ec988a604aa6c600f5d9b5",
"reference": "6fa122afd528dae7d7ec988a604aa6c600f5d9b5",
"shasum": ""
},
"require": {
@ -5630,7 +7048,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Sebastian Feldmann",
@ -5639,10 +7059,12 @@
],
"description": "PHP cli helper classes",
"homepage": "https://github.com/sebastianfeldmann/cli",
"keywords": ["cli"],
"keywords": [
"cli"
],
"support": {
"issues": "https://github.com/sebastianfeldmann/cli/issues",
"source": "https://github.com/sebastianfeldmann/cli/tree/3.4.1"
"source": "https://github.com/sebastianfeldmann/cli/tree/3.4.2"
},
"funding": [
{
@ -5650,20 +7072,20 @@
"type": "github"
}
],
"time": "2021-12-20T14:59:49+00:00"
"time": "2024-11-26T10:19:01+00:00"
},
{
"name": "sebastianfeldmann/git",
"version": "3.11.0",
"version": "3.16.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianfeldmann/git.git",
"reference": "5cb1ea94f65c7420419abe8f12c45cc7eb094790"
"reference": "40a5cc043f0957228767f639e370ec92590e940f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/5cb1ea94f65c7420419abe8f12c45cc7eb094790",
"reference": "5cb1ea94f65c7420419abe8f12c45cc7eb094790",
"url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/40a5cc043f0957228767f639e370ec92590e940f",
"reference": "40a5cc043f0957228767f639e370ec92590e940f",
"shasum": ""
},
"require": {
@ -5688,7 +7110,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Sebastian Feldmann",
@ -5697,10 +7121,12 @@
],
"description": "PHP git wrapper",
"homepage": "https://github.com/sebastianfeldmann/git",
"keywords": ["git"],
"keywords": [
"git"
],
"support": {
"issues": "https://github.com/sebastianfeldmann/git/issues",
"source": "https://github.com/sebastianfeldmann/git/tree/3.11.0"
"source": "https://github.com/sebastianfeldmann/git/tree/3.16.0"
},
"funding": [
{
@ -5708,27 +7134,28 @@
"type": "github"
}
],
"time": "2024-01-23T09:11:14+00:00"
"time": "2026-01-26T20:59:18+00:00"
},
{
"name": "symfony/console",
"version": "v7.0.6",
"version": "v7.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5"
"reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/fde915cd8e7eb99b3d531d3d5c09531429c3f9e5",
"reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5",
"url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
"reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/string": "^6.4|^7.0"
"symfony/string": "^7.2|^8.0"
},
"conflict": {
"symfony/dependency-injection": "<6.4",
@ -5742,26 +7169,30 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
"symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/lock": "^6.4|^7.0",
"symfony/messenger": "^6.4|^7.0",
"symfony/process": "^6.4|^7.0",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0"
"symfony/config": "^6.4|^7.0|^8.0",
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/event-dispatcher": "^6.4|^7.0|^8.0",
"symfony/http-foundation": "^6.4|^7.0|^8.0",
"symfony/http-kernel": "^6.4|^7.0|^8.0",
"symfony/lock": "^6.4|^7.0|^8.0",
"symfony/messenger": "^6.4|^7.0|^8.0",
"symfony/process": "^6.4|^7.0|^8.0",
"symfony/stopwatch": "^6.4|^7.0|^8.0",
"symfony/var-dumper": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Console\\": ""
},
"exclude-from-classmap": ["/Tests/"]
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
@ -5774,9 +7205,14 @@
],
"description": "Eases the creation of beautiful and testable command line interfaces",
"homepage": "https://symfony.com",
"keywords": ["cli", "command-line", "console", "terminal"],
"keywords": [
"cli",
"command-line",
"console",
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.0.6"
"source": "https://github.com/symfony/console/tree/v7.4.4"
},
"funding": [
{
@ -5787,25 +7223,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-04-01T11:04:53+00:00"
"time": "2026-01-13T11:36:38+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v7.0.3",
"version": "v7.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "834c28d533dd0636f910909d01b9ff45cc094b5e"
"reference": "dc2c0eba1af673e736bb851d747d266108aea746"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e",
"reference": "834c28d533dd0636f910909d01b9ff45cc094b5e",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746",
"reference": "dc2c0eba1af673e736bb851d747d266108aea746",
"shasum": ""
},
"require": {
@ -5822,23 +7262,28 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
"symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/error-handler": "^6.4|^7.0",
"symfony/expression-language": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/config": "^6.4|^7.0|^8.0",
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/error-handler": "^6.4|^7.0|^8.0",
"symfony/expression-language": "^6.4|^7.0|^8.0",
"symfony/framework-bundle": "^6.4|^7.0|^8.0",
"symfony/http-foundation": "^6.4|^7.0|^8.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/stopwatch": "^6.4|^7.0"
"symfony/stopwatch": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\EventDispatcher\\": ""
},
"exclude-from-classmap": ["/Tests/"]
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
@ -5852,7 +7297,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3"
"source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4"
},
"funding": [
{
@ -5863,25 +7308,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-23T15:02:46+00:00"
"time": "2026-01-05T11:45:34+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v3.4.2",
"version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "4e64b49bf370ade88e567de29465762e316e4224"
"reference": "59eb412e93815df44f05f342958efa9f46b1e586"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224",
"reference": "4e64b49bf370ade88e567de29465762e316e4224",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
"reference": "59eb412e93815df44f05f342958efa9f46b1e586",
"shasum": ""
},
"require": {
@ -5890,12 +7339,12 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.4-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
}
},
"autoload": {
@ -5904,7 +7353,9 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
@ -5926,7 +7377,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
},
"funding": [
{
@ -5942,96 +7393,41 @@
"type": "tidelift"
}
],
"time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/filesystem",
"version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "408105dff4c104454100730bdfd1a9cdd993f04d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/408105dff4c104454100730bdfd1a9cdd993f04d",
"reference": "408105dff4c104454100730bdfd1a9cdd993f04d",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Filesystem\\": ""
},
"exclude-from-classmap": ["/Tests/"]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v7.0.6"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-03-21T19:37:36+00:00"
"time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/finder",
"version": "v7.0.0",
"version": "v7.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56"
"reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56",
"reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56",
"url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
"reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"require-dev": {
"symfony/filesystem": "^6.4|^7.0"
"symfony/filesystem": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Finder\\": ""
},
"exclude-from-classmap": ["/Tests/"]
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
@ -6045,7 +7441,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v7.0.0"
"source": "https://github.com/symfony/finder/tree/v7.4.5"
},
"funding": [
{
@ -6056,25 +7452,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2023-10-31T17:59:56+00:00"
"time": "2026-01-26T15:07:59+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v7.0.0",
"version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "700ff4096e346f54cb628ea650767c8130f1001f"
"reference": "b38026df55197f9e39a44f3215788edf83187b80"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/700ff4096e346f54cb628ea650767c8130f1001f",
"reference": "700ff4096e346f54cb628ea650767c8130f1001f",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80",
"reference": "b38026df55197f9e39a44f3215788edf83187b80",
"shasum": ""
},
"require": {
@ -6086,10 +7486,14 @@
"psr-4": {
"Symfony\\Component\\OptionsResolver\\": ""
},
"exclude-from-classmap": ["/Tests/"]
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
@ -6102,9 +7506,13 @@
],
"description": "Provides an improved replacement for the array_replace PHP function",
"homepage": "https://symfony.com",
"keywords": ["config", "configuration", "options"],
"keywords": [
"config",
"configuration",
"options"
],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v7.0.0"
"source": "https://github.com/symfony/options-resolver/tree/v7.4.0"
},
"funding": [
{
@ -6115,29 +7523,33 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2023-08-08T10:20:21+00:00"
"time": "2025-11-12T15:39:26+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.29.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f"
"reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f",
"reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
"reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
@ -6145,18 +7557,22 @@
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": ["bootstrap.php"],
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Grapheme\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
@ -6178,7 +7594,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
},
"funding": [
{
@ -6189,29 +7605,33 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2025-06-27T09:58:17+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.29.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "bc45c394692b948b4d383a08d7753968bed9a83d"
"reference": "3833d7255cc303546435cb650316bff708a1c75c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d",
"reference": "bc45c394692b948b4d383a08d7753968bed9a83d",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
"reference": "3833d7255cc303546435cb650316bff708a1c75c",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
@ -6219,19 +7639,25 @@
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": ["bootstrap.php"],
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"classmap": ["Resources/stubs"]
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
@ -6253,7 +7679,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
},
"funding": [
{
@ -6264,46 +7690,56 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.29.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "c565ad1e63f30e7477fc40738343c62b40bc672d"
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d",
"reference": "c565ad1e63f30e7477fc40738343c62b40bc672d",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": ["bootstrap.php"],
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php81\\": ""
},
"classmap": ["Resources/stubs"]
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
@ -6316,9 +7752,14 @@
],
"description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": ["compatibility", "polyfill", "portable", "shim"],
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0"
},
"funding": [
{
@ -6329,25 +7770,109 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/process",
"version": "v7.0.4",
"name": "symfony/polyfill-php84",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9"
"url": "https://github.com/symfony/polyfill-php84.git",
"reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/0e7727191c3b71ebec6d529fa0e50a01ca5679e9",
"reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9",
"url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
"reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php84\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-06-24T13:30:11+00:00"
},
{
"name": "symfony/process",
"version": "v7.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "608476f4604102976d687c483ac63a79ba18cc97"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97",
"reference": "608476f4604102976d687c483ac63a79ba18cc97",
"shasum": ""
},
"require": {
@ -6358,10 +7883,14 @@
"psr-4": {
"Symfony\\Component\\Process\\": ""
},
"exclude-from-classmap": ["/Tests/"]
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
@ -6375,7 +7904,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v7.0.4"
"source": "https://github.com/symfony/process/tree/v7.4.5"
},
"funding": [
{
@ -6386,52 +7915,61 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-02-22T20:27:20+00:00"
"time": "2026-01-26T15:07:59+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v3.4.2",
"version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "11bbf19a0fb7b36345861e85c5768844c552906e"
"reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e",
"reference": "11bbf19a0fb7b36345861e85c5768844c552906e",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
"reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/container": "^1.1|^2.0"
"psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
"ext-psr": "<1.1|>=2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.4-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Service\\": ""
},
"exclude-from-classmap": ["/Test/"]
"exclude-from-classmap": [
"/Test/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
@ -6453,7 +7991,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.4.2"
"source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
},
"funding": [
{
@ -6464,25 +8002,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2023-12-19T21:51:00+00:00"
"time": "2025-07-15T11:30:57+00:00"
},
{
"name": "symfony/stopwatch",
"version": "v7.0.3",
"version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
"reference": "983900d6fddf2b0cbaacacbbad07610854bd8112"
"reference": "8a24af0a2e8a872fb745047180649b8418303084"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112",
"reference": "983900d6fddf2b0cbaacacbbad07610854bd8112",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084",
"reference": "8a24af0a2e8a872fb745047180649b8418303084",
"shasum": ""
},
"require": {
@ -6494,10 +8036,14 @@
"psr-4": {
"Symfony\\Component\\Stopwatch\\": ""
},
"exclude-from-classmap": ["/Tests/"]
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
@ -6511,7 +8057,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/stopwatch/tree/v7.0.3"
"source": "https://github.com/symfony/stopwatch/tree/v7.4.0"
},
"funding": [
{
@ -6522,31 +8068,36 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-23T15:02:46+00:00"
"time": "2025-08-04T07:05:15+00:00"
},
{
"name": "symfony/string",
"version": "v7.0.4",
"version": "v7.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "f5832521b998b0bec40bee688ad5de98d4cf111b"
"reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b",
"reference": "f5832521b998b0bec40bee688ad5de98d4cf111b",
"url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f",
"reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-grapheme": "~1.33",
"symfony/polyfill-intl-normalizer": "~1.0",
"symfony/polyfill-mbstring": "~1.0"
},
@ -6554,22 +8105,28 @@
"symfony/translation-contracts": "<2.5"
},
"require-dev": {
"symfony/error-handler": "^6.4|^7.0",
"symfony/http-client": "^6.4|^7.0",
"symfony/intl": "^6.4|^7.0",
"symfony/emoji": "^7.1|^8.0",
"symfony/http-client": "^6.4|^7.0|^8.0",
"symfony/intl": "^6.4|^7.0|^8.0",
"symfony/translation-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^6.4|^7.0"
"symfony/var-exporter": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
"files": ["Resources/functions.php"],
"files": [
"Resources/functions.php"
],
"psr-4": {
"Symfony\\Component\\String\\": ""
},
"exclude-from-classmap": ["/Tests/"]
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
@ -6582,9 +8139,16 @@
],
"description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
"homepage": "https://symfony.com",
"keywords": ["grapheme", "i18n", "string", "unicode", "utf-8", "utf8"],
"keywords": [
"grapheme",
"i18n",
"string",
"unicode",
"utf-8",
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.0.4"
"source": "https://github.com/symfony/string/tree/v7.4.4"
},
"funding": [
{
@ -6595,44 +8159,47 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-02-01T13:17:36+00:00"
"time": "2026-01-12T10:54:30+00:00"
},
{
"name": "symplify/coding-standard",
"version": "12.1.4",
"version": "13.0.0",
"source": {
"type": "git",
"url": "https://github.com/symplify/coding-standard.git",
"reference": "1a591e18c64e7367b243729a43a70c2e92025468"
"reference": "bd7c36af1e96eecd08cfcc0a772a19767aa02300"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symplify/coding-standard/zipball/1a591e18c64e7367b243729a43a70c2e92025468",
"reference": "1a591e18c64e7367b243729a43a70c2e92025468",
"url": "https://api.github.com/repos/symplify/coding-standard/zipball/bd7c36af1e96eecd08cfcc0a772a19767aa02300",
"reference": "bd7c36af1e96eecd08cfcc0a772a19767aa02300",
"shasum": ""
},
"require": {
"friendsofphp/php-cs-fixer": "^3.49",
"nette/utils": "^3.2",
"php": ">=8.2",
"symplify/rule-doc-generator-contracts": "^11.1"
"friendsofphp/php-cs-fixer": "^3.89",
"nette/utils": "^4.0",
"php": ">=8.2"
},
"require-dev": {
"phpstan/extension-installer": "^1.3",
"phpstan/phpstan": "^1.10.58",
"phpunit/phpunit": "^10.5",
"rector/rector": "^1.0",
"squizlabs/php_codesniffer": "^3.8.1",
"symplify/easy-coding-standard": "^12.1",
"symplify/phpstan-extensions": "^11.4",
"symplify/rule-doc-generator": "^12.0",
"tomasvotruba/class-leak": "^0.2",
"tracy/tracy": "^2.10"
"phpstan/extension-installer": "^1.4",
"phpstan/phpstan": "^2.1",
"phpunit/phpunit": "^11.5|^12.0",
"rector/jack": "^0.2",
"rector/rector": "^2.2",
"squizlabs/php_codesniffer": "^4.0",
"symplify/easy-coding-standard": "^12.6",
"symplify/phpstan-extensions": "^12.0",
"tomasvotruba/class-leak": "^2.0",
"tracy/tracy": "^2.11"
},
"type": "library",
"autoload": {
@ -6641,11 +8208,13 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "Set of Symplify rules for PHP_CodeSniffer and PHP CS Fixer.",
"support": {
"issues": "https://github.com/symplify/coding-standard/issues",
"source": "https://github.com/symplify/coding-standard/tree/12.1.4"
"source": "https://github.com/symplify/coding-standard/tree/13.0.0"
},
"funding": [
{
@ -6657,42 +8226,56 @@
"type": "github"
}
],
"time": "2024-02-23T13:07:31+00:00"
"time": "2025-10-30T21:46:47+00:00"
},
{
"name": "symplify/easy-coding-standard",
"version": "12.1.14",
"version": "13.0.4",
"source": {
"type": "git",
"url": "https://github.com/easy-coding-standard/easy-coding-standard.git",
"reference": "e3c4a241ee36704f7cf920d5931f39693e64afd5"
"reference": "5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/e3c4a241ee36704f7cf920d5931f39693e64afd5",
"reference": "e3c4a241ee36704f7cf920d5931f39693e64afd5",
"url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8",
"reference": "5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"conflict": {
"friendsofphp/php-cs-fixer": "<3.46",
"phpcsstandards/php_codesniffer": "<3.8",
"friendsofphp/php-cs-fixer": "<3.92.4",
"phpcsstandards/php_codesniffer": "<4.0.1",
"symplify/coding-standard": "<12.1"
},
"bin": ["bin/ecs"],
"suggest": {
"ext-dom": "Needed to support checkstyle output format in class CheckstyleOutputFormatter"
},
"bin": [
"bin/ecs"
],
"type": "library",
"autoload": {
"files": ["bootstrap.php"]
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"license": [
"MIT"
],
"description": "Use Coding Standard with 0-knowledge of PHP-CS-Fixer and PHP_CodeSniffer",
"keywords": ["Code style", "automation", "fixer", "static analysis"],
"keywords": [
"Code style",
"automation",
"fixer",
"static analysis"
],
"support": {
"issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues",
"source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.1.14"
"source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/13.0.4"
},
"funding": [
{
@ -6704,77 +8287,20 @@
"type": "github"
}
],
"time": "2024-02-23T13:10:40+00:00"
},
{
"name": "symplify/rule-doc-generator-contracts",
"version": "11.2.0",
"source": {
"type": "git",
"url": "https://github.com/symplify/rule-doc-generator-contracts.git",
"reference": "479cfcfd46047f80624aba931d9789e50475b5c6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symplify/rule-doc-generator-contracts/zipball/479cfcfd46047f80624aba931d9789e50475b5c6",
"reference": "479cfcfd46047f80624aba931d9789e50475b5c6",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpstan/extension-installer": "^1.2",
"rector/rector": "^0.15.10",
"symplify/easy-ci": "^11.1",
"symplify/easy-coding-standard": "^11.1",
"symplify/easy-testing": "^11.1",
"symplify/phpstan-extensions": "^11.1",
"symplify/phpstan-rules": "11.2.3.72",
"tomasvotruba/unused-public": "^0.0.34"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "11.2-dev"
}
},
"autoload": {
"psr-4": {
"Symplify\\RuleDocGenerator\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"description": "Contracts for production code of RuleDocGenerator",
"support": {
"source": "https://github.com/symplify/rule-doc-generator-contracts/tree/11.2.0"
},
"funding": [
{
"url": "https://www.paypal.me/rectorphp",
"type": "custom"
},
{
"url": "https://github.com/tomasvotruba",
"type": "github"
}
],
"time": "2024-03-18T22:02:54+00:00"
"time": "2026-01-05T09:10:04+00:00"
},
{
"name": "theseer/tokenizer",
"version": "1.2.3",
"version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
"reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
"reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
"reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
"reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
"shasum": ""
},
"require": {
@ -6785,10 +8311,14 @@
},
"type": "library",
"autoload": {
"classmap": ["src/"]
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": ["BSD-3-Clause"],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Arne Blankerts",
@ -6799,7 +8329,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
"source": "https://github.com/theseer/tokenizer/tree/1.2.3"
"source": "https://github.com/theseer/tokenizer/tree/1.3.1"
},
"funding": [
{
@ -6807,7 +8337,7 @@
"type": "github"
}
],
"time": "2024-03-03T12:36:25+00:00"
"time": "2025-11-17T20:03:58+00:00"
}
],
"aliases": [],
@ -6815,7 +8345,6 @@
"stability-flags": {
"codeigniter4/tasks": 20,
"opawg/user-agents-v2-php": 20,
"yassinedoghri/codeigniter-icons": 20,
"yassinedoghri/podcast-feed": 20
},
"prefer-stable": true,
@ -6823,6 +8352,6 @@
"platform": {
"php": "^8.1"
},
"platform-dev": [],
"plugin-api-version": "2.6.0"
"platform-dev": {},
"plugin-api-version": "2.9.0"
}

View file

@ -4,7 +4,7 @@
# ⚠️ NOT optimized for production
# should be used only for continuous integration
#---------------------------------------------------
FROM php:8.1-fpm-alpine3.19
FROM php:8.1-fpm-alpine3.22
LABEL maintainer="Yassine Doghri <yassine@doghri.fr>"

View file

@ -4,85 +4,109 @@ stages:
docker-build-rolling:
stage: build
image:
name: docker.io/docker:23.0.3-dind
name: docker.io/docker:29.2-dind
services:
- docker:23.0.3-dind
- docker:29.2-dind
variables:
TAG: $CI_COMMIT_BRANCH
DOCKER_BUILDKIT: 1
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
script:
before_script:
# ensure the Docker config directory exists
- mkdir -p /root/.docker
# copy credentials to authenticate against registry
- cp ${DOCKER_HUB_CONFIG} /root/.docker/config.json
- docker context create tls-environment
- docker buildx create --use tls-environment
- docker buildx build --push --platform=linux/amd64 --file=docker/production/castopod/Dockerfile --tag=${DOCKER_IMAGE_CASTOPOD}:${TAG} .
- docker buildx build --push --platform=linux/amd64 --file=docker/production/web-server/Dockerfile --tag=${DOCKER_IMAGE_WEB_SERVER}:${TAG} .
- docker buildx build --push --platform=linux/amd64 --file=docker/production/app/Dockerfile --tag=${DOCKER_IMAGE_APP}:${TAG} .
needs:
- pipeline: $PARENT_PIPELINE_ID
job: bundle
only:
refs:
- develop
docker-build-main-release:
- docker context create tls-environment
# Create and use builder with optimized settings
- docker buildx create
--name fast-multiplatform
--driver docker-container
--driver-opt network=host
--driver-opt image=moby/buildkit:v0.27.1
--use
tls-environment
# initialize and boot fast-multiplatform builder
# configure BuildKit features that aren't enabled by default
- docker buildx inspect --bootstrap
script:
- docker buildx build
--target production
--secret id=maxmind-licence-key,env=MAXMIND_LICENCE_KEY
--platform linux/amd64
--file docker/production/Dockerfile
--push
--tag ${DOCKER_IMAGE_CASTOPOD}:${TAG}
.
rules:
- if: $CI_COMMIT_BRANCH == 'develop'
docker-build-release:
stage: build
image:
name: docker.io/docker:23.0.3-dind
name: docker.io/docker:29.2-dind
services:
- docker:23.0.3-dind
- docker:29.2-dind
variables:
DOCKER_BUILDKIT: 1
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
script:
before_script:
# ensure the Docker config directory exists
- mkdir -p /root/.docker
# copy credentials to authenticate against registry
- cp ${DOCKER_HUB_CONFIG} /root/.docker/config.json
- export CP_VERSION=$(cat CP_VERSION.env)
- docker context create tls-environment
- docker buildx create --use tls-environment
- docker buildx build --push --platform=linux/amd64 --file=docker/production/castopod/Dockerfile --tag=${DOCKER_IMAGE_CASTOPOD}:${CP_VERSION} --tag=${DOCKER_IMAGE_CASTOPOD}:latest .
- docker buildx build --push --platform=linux/amd64 --file=docker/production/web-server/Dockerfile --tag=${DOCKER_IMAGE_WEB_SERVER}:${CP_VERSION} --tag=${DOCKER_IMAGE_WEB_SERVER}:latest .
- docker buildx build --push --platform=linux/amd64 --file=docker/production/app/Dockerfile --tag=${DOCKER_IMAGE_APP}:${CP_VERSION} --tag=${DOCKER_IMAGE_APP}:latest .
# when --platform=linux/amd64,linux/arm64: amd64 image takes too long to be pushed as it needs to wait for arm64 to be built
# --> build and push amd64 image to be pushed first, then overwrite manifest after building arm64
- docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/castopod/Dockerfile --tag=${DOCKER_IMAGE_CASTOPOD}:${CP_VERSION} --tag=${DOCKER_IMAGE_CASTOPOD}:latest .
needs:
- pipeline: $PARENT_PIPELINE_ID
job: release
only:
refs:
- main
docker-build-alpha-beta-release:
stage: build
image:
name: docker.io/docker:23.0.3-dind
services:
- docker:23.0.3-dind
variables:
TAG: $CI_COMMIT_BRANCH
DOCKER_BUILDKIT: 1
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
script:
- mkdir -p /root/.docker
- cp ${DOCKER_HUB_CONFIG} /root/.docker/config.json
- export CP_VERSION=$(cat CP_VERSION.env)
## Prepare Docker image tags from git tag
## --------------------------------------
# extract full SemVer from git tag (remove leading "v")
- export IMAGE_TAG_VERSION=$(echo "$CI_COMMIT_TAG" | sed 's/^v//')
# extract channel (prerelease like "alpha", "beta", "next"; "latest" for stable)
- export IMAGE_TAG_CHANNEL=$(echo "$IMAGE_TAG_VERSION" | sed 's/^[^-]*-\([^.]*\)\..*/\1/; t; s/.*/latest/')
# extract major version number (first SemVer component)
- export IMAGE_TAG_MAJOR=$(echo "$IMAGE_TAG_VERSION" | sed 's/\..*//')
# construct major-channel tag ("X" for stable, "X-channel" for prerelease)
- export IMAGE_TAG_MAJOR_CHANNEL=$([ "$IMAGE_TAG_CHANNEL" = "latest" ] && echo "$IMAGE_TAG_MAJOR" || echo "${IMAGE_TAG_MAJOR}-${IMAGE_TAG_CHANNEL}")
- docker context create tls-environment
- docker buildx create --use tls-environment
- docker buildx build --push --platform=linux/amd64 --file=docker/production/castopod/Dockerfile --tag=${DOCKER_IMAGE_CASTOPOD}:${CP_VERSION} --tag=${DOCKER_IMAGE_CASTOPOD}:${TAG} .
- docker buildx build --push --platform=linux/amd64 --file=docker/production/web-server/Dockerfile --tag=${DOCKER_IMAGE_WEB_SERVER}:${CP_VERSION} --tag=${DOCKER_IMAGE_WEB_SERVER}:${TAG} .
- docker buildx build --push --platform=linux/amd64 --file=docker/production/app/Dockerfile --tag=${DOCKER_IMAGE_APP}:${CP_VERSION} --tag=${DOCKER_IMAGE_APP}:${TAG} .
# Create and use builder with optimized settings
- docker buildx create
--name fast-multiplatform
--driver docker-container
--driver-opt network=host
--driver-opt image=moby/buildkit:v0.27.1
--use
tls-environment
# initialize and boot fast-multiplatform builder
# configure BuildKit features that aren't enabled by default
- docker buildx inspect --bootstrap
script:
- docker buildx build
--target production
--secret id=maxmind-licence-key,env=MAXMIND_LICENCE_KEY
--platform linux/amd64
--file docker/production/Dockerfile
--push
--tag ${DOCKER_IMAGE_CASTOPOD}:${IMAGE_TAG_VERSION}
--tag ${DOCKER_IMAGE_CASTOPOD}:${IMAGE_TAG_CHANNEL}
--tag ${DOCKER_IMAGE_CASTOPOD}:${IMAGE_TAG_MAJOR_CHANNEL}
.
# when --platform=linux/amd64,linux/arm64: amd64 image takes too long to be pushed as it needs to wait for arm64 to be built
# --> build and push amd64 image to be pushed first, then overwrite manifest after building arm64
- docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/castopod/Dockerfile --tag=${DOCKER_IMAGE_CASTOPOD}:${CP_VERSION} --tag=${DOCKER_IMAGE_CASTOPOD}:${TAG} .
needs:
- pipeline: $PARENT_PIPELINE_ID
job: release
only:
refs:
- alpha
- beta
# --> build and push amd64 image first, then overwrite manifest after building arm64
- docker buildx build
--target production
--secret id=maxmind-licence-key,env=MAXMIND_LICENCE_KEY
--platform linux/amd64,linux/arm64
--file docker/production/Dockerfile
--push
--tag ${DOCKER_IMAGE_CASTOPOD}:${IMAGE_TAG_VERSION}
--tag ${DOCKER_IMAGE_CASTOPOD}:${IMAGE_TAG_CHANNEL}
--tag ${DOCKER_IMAGE_CASTOPOD}:${IMAGE_TAG_MAJOR_CHANNEL}
.
rules:
- if: $CI_COMMIT_TAG

View file

@ -0,0 +1,154 @@
####################################################
# Castopod's Production Dockerfile
####################################################
# An optimized Dockerfile for production using
# multi-stage builds:
# 1. BUNDLE castopod
# 2. BUILD the FrankenPHP/debian based prod image
#---------------------------------------------------
ARG PHP_VERSION="8.4"
####################################################
# BUNDLE STAGE
# -------------------------------------------------
# Bundle castopod for production using
# a PHP / Alpine image
#---------------------------------------------------
FROM php:${PHP_VERSION}-alpine3.23 AS bundle
LABEL maintainer="Yassine Doghri <yassine@doghri.fr>"
COPY . /castopod-src
WORKDIR /castopod-src
COPY --from=composer:2.9 /usr/bin/composer /usr/local/bin/composer
RUN \
# download GeoLite2-City archive and extract it to writable/uploads
--mount=type=secret,id=maxmind-licence-key,env=MAXMIND_LICENCE_KEY \
wget -c "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=$MAXMIND_LICENCE_KEY&suffix=tar.gz" -O - | tar -xz -C ./writable/uploads/ \
# rename extracted archives' folders
&& mv ./writable/uploads/GeoLite2-City* ./writable/uploads/GeoLite2-City
RUN \
# install composer globally
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
# install node and pnpm
&& apk add --no-cache \
nodejs \
pnpm \
git \
rsync \
# install production dependencies only using the --no-dev option
&& composer install --no-dev --prefer-dist --no-ansi --no-interaction --no-progress --ignore-platform-reqs \
# install js dependencies based on lockfile
&& pnpm install --frozen-lockfile \
# build all production static assets (css, js, images, icons, fonts, etc.)
&& pnpm run build \
# create castopod folder bundle: uses .rsync-filter (-F) file to copy only needed files
&& rsync -aF . /castopod
####################################################
# BUILD STAGE
# -------------------------------------------------
# Define production image based on FrankenPHP /
# Debian with services managed by s6-overlay
#---------------------------------------------------
FROM serversideup/php:${PHP_VERSION}-frankenphp-trixie AS production
LABEL maintainer="Yassine Doghri <yassine@doghri.fr>"
USER root
ARG TARGETARCH
# Latest releases available at https://github.com/aptible/supercronic/releases
# add supercronic to handle cron jobs
RUN if [ "$TARGETARCH" = "amd64" ]; then \
SUPERCRONIC_URL="https://github.com/aptible/supercronic/releases/download/v0.2.43/supercronic-linux-amd64"; \
SUPERCRONIC_SHA1SUM="f97b92132b61a8f827c3faf67106dc0e4467ccf2"; \
SUPERCRONIC="supercronic-linux-amd64"; \
elif [ "$TARGETARCH" = "arm64" ]; then \
SUPERCRONIC_URL="https://github.com/aptible/supercronic/releases/download/v0.2.43/supercronic-linux-arm64"; \
SUPERCRONIC_SHA1SUM="5c6266786c2813d6f8a99965d84452faae42b483"; \
SUPERCRONIC="supercronic-linux-arm64"; \
else \
echo "Unsupported TARGETARCH: $TARGETARCH"; exit 1; \
fi && \
curl -fsSLO "$SUPERCRONIC_URL" \
&& echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \
&& chmod +x "$SUPERCRONIC" \
&& mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
&& ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic
ARG S6_OVERLAY_VERSION=3.2.2.0
# add s6-overlay process manager
ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp
RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz
# add Arch-specific tarball
RUN if [ "$TARGETARCH" = "amd64" ]; then \
S6_ARCH="x86_64"; \
elif [ "$TARGETARCH" = "arm64" ]; then \
S6_ARCH="aarch64"; \
else \
echo "Unsupported TARGETARCH: $TARGETARCH"; exit 1; \
fi && \
curl -fsSL -o /tmp/s6-overlay-${S6_ARCH}.tar.xz \
"https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz" && \
tar -C / -Jxpf /tmp/s6-overlay-${S6_ARCH}.tar.xz && \
rm /tmp/s6-overlay-${S6_ARCH}.tar.xz
# copy s6-overlay services
COPY --chown=www-data:www-data docker/production/s6-rc.d /etc/s6-overlay/s6-rc.d
# make prepare-environment executable for bootstrapping the Castopod environment
RUN chmod +x /etc/s6-overlay/s6-rc.d/bootstrap/prepare-environment.sh
RUN \
apt-get update \
&& apt-get install -y \
ffmpeg \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libwebp-dev \
libicu-dev \
&& install-php-extensions \
intl \
mysqli \
exif \
gd \
# As of PHP 7.4 we don't need to add --with-png
&& docker-php-ext-configure gd --with-webp --with-jpeg --with-freetype
# copy castopod bundle from bundle stage
COPY --from=bundle --chown=www-data:www-data /castopod /app
RUN \
chmod -R 550 /app/ \
&& chmod -R 770 /app/public/media/ \
&& chmod -R 770 /app/writable/ \
&& chmod 750 /app/
ARG \
PHP_MEMORY_LIMIT=512M \
PHP_MAX_EXECUTION_TIME=300 \
PHP_UPLOAD_MAX_FILE_SIZE=512M \
PHP_POST_MAX_SIZE=512M \
PHP_OPCACHE_ENABLE=1
ENV \
PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT} \
PHP_MAX_EXECUTION_TIME=${PHP_MAX_EXECUTION_TIME} \
PHP_UPLOAD_MAX_FILE_SIZE=${PHP_UPLOAD_MAX_FILE_SIZE} \
PHP_POST_MAX_SIZE=${PHP_POST_MAX_SIZE} \
PHP_OPCACHE_ENABLE=${PHP_OPCACHE_ENABLE}
USER www-data
ENTRYPOINT ["docker-php-serversideup-entrypoint"]
CMD ["/init"]

View file

@ -1,44 +0,0 @@
FROM docker.io/golang:1.20-bookworm AS CRON_BUILDER
ARG SUPERCRONIC_VERSION=v0.2.25
RUN apt-get update && \
apt-get install -y git && \
git clone https://github.com/aptible/supercronic.git && \
cd supercronic && \
git checkout $SUPERCRONIC_VERSION && \
go build && \
mv supercronic /usr/local/bin
FROM docker.io/php:8.1-fpm
COPY --from=CRON_BUILDER /usr/local/bin/supercronic /usr/local/bin/supercronic
COPY docker/production/common/prepare_environment.sh /prepare_environment.sh
COPY docker/production/app/entrypoint.sh /entrypoint.sh
COPY docker/production/common/uploads.template.ini /uploads.template.ini
COPY docker/production/common/crontab.txt /crontab.txt
COPY docker/production/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY castopod /var/www/castopod
RUN apt-get update && \
apt-get install -y supervisor ffmpeg curl gettext-base libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev libxpm-dev libpcre2-8-0 libicu-dev && \
rm -rf /var/lib/apt/lists/* && \
pecl install -o -f redis && \
rm -rf /tmp/pear && \
docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm && \
docker-php-ext-install mysqli gd intl exif && \
docker-php-ext-enable mysqli gd intl exif redis && \
chmod +x /entrypoint.sh && \
chmod -R 750 /var/www/castopod && \
chown -R root:www-data /var/www/castopod && \
chown -R www-data:www-data /var/www/castopod/writable /var/www/castopod/public/media
WORKDIR /var/www/castopod
VOLUME /var/www/castopod/public/media
EXPOSE 9000
ENTRYPOINT [ "sh", "-c" ]
CMD [ "/entrypoint.sh" ]

View file

@ -1,12 +0,0 @@
#!/bin/sh
ENV_FILE_LOCATION=/var/www/castopod/.env
# Fix ownership and permissions of castopod folders
chmod -R 750 /var/www/castopod
chown -R root:www-data /var/www/castopod
chown -R www-data:www-data /var/www/castopod/writable /var/www/castopod/public/media
. /prepare_environment.sh
supervisord

View file

@ -1,20 +0,0 @@
[supervisord]
nodaemon=true
[program:supercronic]
command=supercronic /crontab.txt
autostart=true
autorestart=unexpected
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:fpm]
command=/usr/local/sbin/php-fpm
autostart=true
autorestart=unexpected
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

View file

@ -1,57 +0,0 @@
FROM docker.io/golang:1.21-bookworm AS CRON_BUILDER
ARG SUPERCRONIC_VERSION=v0.2.26
RUN apt-get update && \
apt-get install -y git && \
git clone https://github.com/aptible/supercronic.git && \
cd supercronic && \
git checkout $SUPERCRONIC_VERSION && \
go build && \
mv supercronic /usr/local/bin
FROM docker.io/php:8.2-cli
ARG UNIT_VERSION=1.31.1
COPY --from=CRON_BUILDER /usr/local/bin/supercronic /usr/local/bin/supercronic
COPY docker/production/common/prepare_environment.sh /prepare_environment.sh
COPY docker/production/castopod/entrypoint.sh /entrypoint.sh
COPY castopod /var/www/castopod
COPY docker/production/castopod/config.template.json /config.template.json
COPY docker/production/common/uploads.template.ini /uploads.template.ini
COPY docker/production/common/crontab.txt /crontab.txt
COPY docker/production/castopod/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN apt-get update && \
apt-get install -y supervisor ffmpeg curl gettext-base libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev libxpm-dev libpcre2-dev libicu-dev git && \
rm -rf /var/lib/apt/lists/* && \
git clone https://github.com/nginx/unit.git && \
cd unit && \
git checkout $UNIT_VERSION && \
./configure --user=www-data --group=www-data && \
./configure php && \
make && \
make install && \
cd .. && \
rm -rf unit && \
pecl install -o -f redis && \
rm -rf /tmp/pear && \
docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm && \
docker-php-ext-install mysqli gd intl exif && \
docker-php-ext-enable mysqli gd intl exif redis && \
ln -s /dev/stdout /var/log/unit.log && \
mkdir -p /usr/local/var/lib/unit /usr/local/var/run/unit /usr/local/var/log/unit && \
chmod 544 /entrypoint.sh && \
chmod -R 750 /var/www/castopod && \
chown -R root:www-data /var/www/castopod && \
chown -R www-data:www-data /var/www/castopod/writable /var/www/castopod/public/media
WORKDIR /var/www/castopod
VOLUME /var/www/castopod/public/media
EXPOSE 8000
ENTRYPOINT [ "sh", "-c" ]
CMD [ "/entrypoint.sh" ]

View file

@ -1,60 +0,0 @@
{
"listeners": {
"*:8000": {
"pass": "routes"
}
},
"routes": [
{
"match": {
"uri": "~^.+\\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf|map)$"
},
"action": {
"share": "/var/www/castopod/public$uri",
"response_headers": {
"X-Content-Type-Options": "nosniff",
"Access-Control-Allow-Origin": "*",
"Cache-Control": "max-age=604800"
},
"fallback": {
"pass": "applications/castopod"
}
}
},
{
"action": {
"share": "/var/www/castopod/public$uri",
"response_headers": {
"X-Frame-Options": "sameorigin",
"X-Content-Type-Options": "nosniff",
"Access-Control-Allow-Origin": "*"
},
"fallback": {
"pass": "applications/castopod"
}
}
}
],
"applications": {
"castopod": {
"type": "php",
"root": "/var/www/castopod/public/",
"script": "index.php"
}
},
"access_log": {
"path": "/dev/stdout"
},
"settings": {
"http": {
"body_read_timeout": $CP_TIMEOUT,
"max_body_size": $CP_MAX_BODY_SIZE_BYTES,
"static": {
"mime_types": {
"text/vtt": [".vtt"],
"text/srt": [".srt"]
}
}
}
}
}

View file

@ -1,8 +0,0 @@
#!/bin/sh
ENV_FILE_LOCATION=/var/www/castopod/.env
. /prepare_environment.sh
cat /config.template.json | envsubst '$CP_MAX_BODY_SIZE_BYTES$CP_TIMEOUT' > /usr/local/var/lib/unit/conf.json
supervisord

View file

@ -1,19 +0,0 @@
[supervisord]
nodaemon=true
[program:supercronic]
command=supercronic /crontab.txt
autostart=true
autorestart=unexpected
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:unit]
command=unitd --no-daemon
autostart=true
autorestart=unexpected
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile_maxbytes=0

View file

@ -1 +0,0 @@
* * * * * /usr/local/bin/php /var/www/castopod/spark tasks:run >> /dev/null 2>&1

View file

@ -1,6 +0,0 @@
file_uploads = On
memory_limit = $CP_PHP_MEMORY_LIMIT
upload_max_filesize = $CP_MAX_BODY_SIZE
post_max_size = $CP_MAX_BODY_SIZE
max_execution_time = $CP_TIMEOUT
max_input_time = $CP_TIMEOUT

View file

@ -1,4 +1,6 @@
#!/bin/sh
#!/command/with-contenv sh
ENV_FILE_LOCATION=/app/.env
log_error() {
printf "\033[0;31mERROR:\033[0m $1\n"
@ -9,6 +11,13 @@ log_warning() {
printf "\033[0;33mWARNING:\033[0m $1\n"
}
log_info() {
printf "\033[0;34mINFO:\033[0m $1\n"
}
# Remove .env file if exists to recreate it.
rm -f $ENV_FILE_LOCATION
if [ -z "${CP_BASEURL}" ]
then
log_error "CP_BASEURL must be set"
@ -16,19 +25,19 @@ fi
if [ -z "${CP_MEDIA_BASEURL}" ]
then
echo "CP_MEDIA_BASEURL is empty, using CP_BASEURL by default"
log_info "CP_MEDIA_BASEURL is empty, using CP_BASEURL by default"
CP_MEDIA_BASEURL=$CP_BASEURL
fi
if [ -z "${CP_ADMIN_GATEWAY}" ]
then
echo "CP_ADMIN_GATEWAY is empty, using default"
log_info "CP_ADMIN_GATEWAY is empty, using default \"cp-admin\""
CP_ADMIN_GATEWAY="cp-admin"
fi
if [ -z "${CP_AUTH_GATEWAY}" ]
then
echo "CP_AUTH_GATEWAY is empty, using default"
log_info "CP_AUTH_GATEWAY is empty, using default \"cp-auth\""
CP_AUTH_GATEWAY="cp-auth"
fi
@ -39,13 +48,13 @@ fi
if [ -z "${CP_DATABASE_HOSTNAME}" ]
then
log_warning "CP_DATABASE_HOSTNAME is empty, using default"
log_warning "CP_DATABASE_HOSTNAME is empty, using default \"mariadb\""
CP_DATABASE_HOSTNAME="mariadb"
fi
if [ -z "${CP_DATABASE_PREFIX}" ]
then
echo "CP_DATABASE_PREFIX is empty, using default"
log_info "CP_DATABASE_PREFIX is empty, using default \"cp_\""
CP_DATABASE_PREFIX="cp_"
fi
@ -84,29 +93,28 @@ fi
if [ ! -z "${CP_REDIS_HOST}" ]
then
echo "Using redis cache handler"
log_info "Using redis cache handler"
CP_CACHE_HANDLER="redis"
if [ -z "${CP_REDIS_PASSWORD}" ]
then
echo "CP_REDIS_PASSWORD is empty, using default"
CP_REDIS_PASSWORD="null"
log_error "You must set CP_REDIS_PASSWORD when using redis as a cache handler."
else
CP_REDIS_PASSWORD="\"${CP_REDIS_PASSWORD}\""
fi
if [ -z "${CP_REDIS_PORT}" ]
then
echo "CP_REDIS_PORT is empty, using default"
log_info "CP_REDIS_PORT is empty, using default port \"6379\""
CP_REDIS_PORT="6379"
fi
if [ -z "${CP_REDIS_DATABASE}" ]
then
echo "CP_REDIS_DATABASE is empty, using default"
log_info "CP_REDIS_DATABASE is empty, using default \"0\""
CP_REDIS_DATABASE="0"
fi
else
echo "Using file cache handler"
log_info "Using file cache handler"
CP_CACHE_HANDLER="file"
fi
@ -134,28 +142,6 @@ then
fi
fi
if [ -z "${CP_PHP_MEMORY_LIMIT}" ]
then
export CP_PHP_MEMORY_LIMIT="512M"
fi
if [ -z "${CP_MAX_BODY_SIZE}" ]
then
export CP_MAX_BODY_SIZE="512M"
fi
CP_MAX_BODY_SIZE_BYTES=$(numfmt --from=iec "$CP_MAX_BODY_SIZE")
if [ $? -ne 0 ]
then
log_error "Failed to parse CP_MAX_BODY_SIZE ($CP_MAX_BODY_SIZE) as human readable number"
fi
export CP_MAX_BODY_SIZE_BYTES=$CP_MAX_BODY_SIZE_BYTES
if [ -z "${CP_TIMEOUT}" ]
then
export CP_TIMEOUT=900
fi
cat << EOF > $ENV_FILE_LOCATION
app.baseURL="${CP_BASEURL}"
media.baseURL="${CP_MEDIA_BASEURL}"
@ -238,20 +224,17 @@ if [ ! -z "${CP_EMAIL_SMTP_HOST}" ]
then
if [ -z "${CP_EMAIL_SMTP_USERNAME}" ]
then
echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_USERNAME must be set"
exit 1
log_error "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_USERNAME must be set"
fi
if [ -z "${CP_EMAIL_SMTP_PASSWORD}" ]
then
echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_PASSWORD must be set"
exit 1
log_error "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_PASSWORD must be set"
fi
if [ -z "${CP_EMAIL_FROM}" ]
then
echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_FROM must be set"
exit 1
log_error "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_FROM must be set"
fi
cat << EOF >> $ENV_FILE_LOCATION
@ -273,8 +256,7 @@ EOF
then
if [ "${CP_EMAIL_SMTP_CRYPTO}" != "ssl" ] && [ "${CP_EMAIL_SMTP_CRYPTO}" != "tls" ]
then
echo "CP_EMAIL_SMTP_CRYPTO must be ssl or tls"
exit 1
log_error "CP_EMAIL_SMTP_CRYPTO must be ssl or tls"
fi
cat << EOF >> $ENV_FILE_LOCATION
email.SMTPCrypto=${CP_EMAIL_SMTP_CRYPTO}
@ -282,11 +264,14 @@ EOF
fi
fi
echo "Using config:"
log_info "Using config:"
cat $ENV_FILE_LOCATION
#Run database migrations after 10 seconds (to wait for the database to be started)
(sleep 10 && php spark castopod:database-update) &
# prevent .env from being writable
chmod -w $ENV_FILE_LOCATION
#Apply php configuration
cat /uploads.template.ini | envsubst '$CP_MAX_BODY_SIZE$CP_MAX_BODY_SIZE_BYTES$CP_TIMEOUT$CP_PHP_MEMORY_LIMIT' > /usr/local/etc/php/conf.d/uploads.ini
#Run database migrations
/usr/local/bin/php /var/www/html/spark castopod:database-update
# clear cache to account for new assets and any change in data structure
/usr/local/bin/php /var/www/html/spark cache:clear

View file

@ -0,0 +1 @@
oneshot

View file

@ -0,0 +1,2 @@
#!/command/with-contenv sh
/etc/s6-overlay/s6-rc.d/bootstrap/prepare-environment.sh

View file

@ -0,0 +1,2 @@
#!/command/with-contenv sh
frankenphp run --config /etc/frankenphp/Caddyfile --adapter caddyfile

View file

@ -0,0 +1 @@
longrun

View file

@ -0,0 +1 @@
* * * * * /usr/local/bin/php /var/www/html/spark tasks:run >> /dev/null 2>&1

View file

@ -0,0 +1,2 @@
#!/command/with-contenv sh
supercronic /etc/s6-overlay/s6-rc.d/supercronic/crontab

View file

@ -0,0 +1 @@
longrun

View file

@ -1,18 +0,0 @@
FROM docker.io/nginx:1.25
COPY docker/production/web-server/entrypoint.sh /entrypoint.sh
COPY docker/production/web-server/nginx.template.conf /nginx.template.conf
COPY castopod/public /var/www/html
RUN chmod +x /entrypoint.sh && \
apt-get update && \
apt-get install -y curl gettext-base && \
rm -rf /var/lib/apt/lists/* && \
usermod -aG www-data nginx
HEALTHCHECK --interval=30s --timeout=3s CMD curl --fail http://localhost || exit 1
VOLUME /var/www/html/media
EXPOSE 80
WORKDIR /var/www/html
CMD ["/entrypoint.sh"]

View file

@ -1,20 +0,0 @@
#!/bin/sh
if [ -z "${CP_APP_HOSTNAME}" ]
then
echo "CP_APP_HOSTNAME is empty, using default"
export CP_APP_HOSTNAME="app"
fi
if [ -z "${CP_MAX_BODY_SIZE}" ]
then
export CP_MAX_BODY_SIZE=512M
fi
if [ -z "${CP_TIMEOUT}" ]
then
export CP_TIMEOUT=900
fi
cat /nginx.template.conf | envsubst '$CP_APP_HOSTNAME$CP_MAX_BODY_SIZE$CP_TIMEOUT' > /etc/nginx/nginx.conf
nginx -g "daemon off;"

View file

@ -1,80 +0,0 @@
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
types {
text/vtt vtt;
text/srt srt;
}
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Real-IP;
upstream php-handler {
server $CP_APP_HOSTNAME:9000;
}
server {
listen 80;
root /var/www/html;
server_tokens off;
add_header X-Frame-Options sameorigin always;
add_header Permissions-Policy interest-cohort=();
add_header X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;";
client_max_body_size $CP_MAX_BODY_SIZE;
client_body_timeout ${CP_TIMEOUT}s;
fastcgi_buffers 64 4K;
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_types application/atom+xml application/javascript application/rss+xml image/bmp image/svg+xml image/x-icon text/css text/plain text/html;
try_files $uri $uri/ /index.php?$args;
index index.php index.html;
location ~ \.php$ {
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_index index.php;
fastcgi_param SERVER_NAME $host;
fastcgi_pass php-handler;
fastcgi_param SCRIPT_FILENAME /var/www/castopod/public/$fastcgi_script_name;
try_files $uri =404;
fastcgi_read_timeout 3600;
fastcgi_send_timeout 3600;
}
location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf|map)$ {
add_header Access-Control-Allow-Origin "*";
expires max;
access_log off;
}
}
}

View file

@ -1,4 +1,4 @@
image: node:20
image: node:22
stages:
- build
@ -6,8 +6,9 @@ stages:
.documentation-setup:
before_script:
- npm install --global corepack@latest
- corepack enable
- corepack prepare pnpm@latest-9 --activate
- corepack prepare pnpm@latest-10 --activate
- pnpm config set store-dir .pnpm-store
- cd docs
- chmod +x ./scripts/i18n-filter.sh
@ -27,11 +28,10 @@ build:
stage: build
script:
- pnpm run build
except:
- develop
- main
- beta
- alpha
rules:
- if: $CI_COMMIT_BRANCH =~ /^(develop|main|alpha|beta|next)$/
when: never
- when: on_success
build-production:
extends: .documentation-setup
@ -45,11 +45,8 @@ build-production:
paths:
- docs/dist/$CI_COMMIT_REF_SLUG
expire_in: 30 mins
only:
- develop
- main
- beta
- alpha
rules:
- if: $CI_COMMIT_BRANCH =~ /^(develop|main|alpha|beta|next)$/
deploy:
stage: deploy
@ -75,8 +72,5 @@ deploy:
script:
- rsync -avzuh -e "ssh -p $SSH_PORT" $SOURCE_FOLDER $USER@$HOST:$TEMP_DIRECTORY --progress
- ssh $USER@$HOST -p $SSH_PORT "rsync -rtv $TEMP_DIRECTORY $DIRECTORY"
only:
- develop
- main
- beta
- alpha
rules:
- if: $CI_COMMIT_BRANCH =~ /^(develop|main|alpha|beta|next)$/

View file

@ -6,9 +6,6 @@
pnpm create astro@latest -- --template starlight
```
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics)
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics)
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
## 🚀 Project Structure
@ -16,15 +13,14 @@ pnpm create astro@latest -- --template starlight
Inside of your Astro + Starlight project, you'll see the following folders and
files:
```
```sh
.
├── public/
├── src/
│ ├── assets/
│ ├── content/
│ │ ├── docs/
│ │ └── config.ts
│ └── env.d.ts
│ │ └── docs/
│ └── content.config.ts
├── astro.config.mjs
├── package.json
└── tsconfig.json
@ -42,14 +38,14 @@ Static assets, like favicons, can be placed in the `public/` directory.
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
| Command | Action |
| :--------------------- | :----------------------------------------------- |
| `pnpm install` | Installs dependencies |
| `pnpm dev` | Starts local dev server at `localhost:4321` |
| `pnpm build` | Build your production site to `./dist/` |
| `pnpm preview` | Preview your build locally, before deploying |
| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` |
| `pnpm astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?

View file

@ -1,13 +1,15 @@
// @ts-check
import { defineConfig } from "astro/config";
import starlight from "@astrojs/starlight";
import tailwind from "@astrojs/tailwind";
const site = "https://docs.castopod.org/";
const base = process.env.BASE ?? "/docs";
// https://astro.build/config
export default defineConfig({
server: {
host: true,
},
site,
base,
integrations: [
@ -16,8 +18,7 @@ export default defineConfig({
description:
"Check out the Castopod documentation! Install your own free & open-source podcast host, help make it better by contributing, or simply learn more about Castopod!",
components: {
Header: "./src/components/Header.astro",
MobileMenuFooter: "./src/components/MobileMenuFooter.astro",
ThemeSelect: "./src/components/ThemeSelect.astro",
},
logo: {
src: "./src/assets/castopod-logo-inline.svg",
@ -28,7 +29,7 @@ export default defineConfig({
"@fontsource/inter/400.css",
"@fontsource/inter/600.css",
"@fontsource/rubik/700.css",
"./src/styles/tailwind.css",
"./src/styles/custom.css",
],
head: [
{
@ -81,6 +82,33 @@ export default defineConfig({
},
},
],
social: [
{
icon: "discord",
label: "Discord",
href: "https://castopod.org/chat",
},
{
icon: "blueSky",
label: "Bluesky",
href: "https://bsky.app/profile/castopod.org",
},
{
icon: "mastodon",
label: "Mastodon",
href: "https://podlibre.social/@Castopod",
},
{
icon: "gitlab",
label: "Source code",
href: "https://code.castopod.org/adaures/castopod",
},
{
icon: "github",
label: "Github",
href: "https://github.com/ad-aures/castopod",
},
],
defaultLocale: "en",
locales: {
en: {
@ -115,16 +143,9 @@ export default defineConfig({
lang: "zh-Hans",
},
},
social: {
discord: "https://castopod.org/chat",
"x.com": "https://twitter.com/castopod",
mastodon: "https://podlibre.social/@Castopod",
gitlab: "https://code.castopod.org/adaures/castopod",
github: "https://github.com/ad-aures/castopod",
},
sidebar: [
{
label: "Instroduction",
label: "Introduction",
link: "/",
translations: {
fr: "Installer",
@ -181,16 +202,114 @@ export default defineConfig({
"nn-no": "Autentisering",
},
},
{
label: "Create your first podcast",
link: "/getting-started/create-podcast/",
translations: {},
},
{
label: "Create your first episode",
link: "/getting-started/create-episode/",
translations: {},
},
],
},
{
label: "User guide",
translations: {},
items: [
{
label: "Introduction",
link: "/user-guide/",
},
{
label: "Manage your instance",
translations: {},
items: [
{
label: "Introduction",
link: "/user-guide/instance/",
},
{
label: "Add a podcast",
link: "/user-guide/instance/podcast",
translations: {},
},
{
label: "Persons",
link: "/user-guide/instance/persons",
translations: {},
},
{
label: "Fediverse",
link: "/user-guide/instance/fediverse",
translations: {},
},
{
label: "Users",
link: "/user-guide/instance/users",
translations: {},
},
{
label: "Pages",
link: "/user-guide/instance/pages",
translations: {},
},
{
label: "Settings",
link: "/user-guide/instance/settings",
translations: {},
},
],
},
{
label: "Manage your podcasts",
translations: {},
items: [
{
label: "Introduction",
link: "/user-guide/podcast/",
},
{
label: "Podcast dashboard",
link: "/user-guide/podcast/dashboard",
translations: {},
},
{
label: "Episodes",
link: "/user-guide/podcast/episodes",
translations: {},
},
{
label: "Analytics",
link: "/user-guide/podcast/analytics",
translations: {},
},
{
label: "Broadcasting",
link: "/user-guide/podcast/broadcast",
translations: {},
},
{
label: "Contributors",
link: "/user-guide/podcast/contributors",
translations: {},
},
],
},
{
label: "Website overview",
link: "/user-guide/website/",
translations: {},
},
],
},
],
editLink: {
baseUrl:
"https://code.castopod.org/adaures/castopod/-/edit/develop/docs/",
baseUrl: "https://code.castopod.org/adaures/castopod/-/edit/main/docs/",
},
}),
tailwind({
applyBaseStyles: false,
}),
],
});

View file

@ -1,28 +1,20 @@
{
"name": "civil-chasm",
"name": "castopod-docs",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"build": "astro build",
"preview": "astro preview",
"astro": "astro",
"prepare": "astro telemetry disable"
},
"dependencies": {
"@astrojs/check": "^0.7.0",
"@astrojs/starlight": "^0.22.4",
"@astrojs/starlight-tailwind": "^2.0.2",
"@astrojs/tailwind": "^5.1.0",
"@fontsource/inter": "^5.0.18",
"@fontsource/rubik": "^5.0.20",
"astro": "^4.8.6",
"autoprefixer": "^10.4.19",
"cssnano": "^7.0.1",
"postcss-preset-env": "^9.5.13",
"sharp": "^0.33.4",
"tailwindcss": "^3.4.3",
"typescript": "^5.4.5"
"@astrojs/starlight": "^0.37.6",
"@fontsource/inter": "^5.2.8",
"@fontsource/rubik": "^5.2.8",
"astro": "^5.17.1",
"sharp": "^0.34.5"
}
}

9221
docs/pnpm-lock.yaml generated
View file

@ -7,705 +7,132 @@ settings:
importers:
.:
dependencies:
"@astrojs/check":
specifier: ^0.7.0
version: 0.7.0(typescript@5.4.5)
"@astrojs/starlight":
specifier: ^0.22.4
version: 0.22.4(astro@4.8.6(typescript@5.4.5))
"@astrojs/starlight-tailwind":
specifier: ^2.0.2
version: 2.0.2(@astrojs/starlight@0.22.4(astro@4.8.6(typescript@5.4.5)))(@astrojs/tailwind@5.1.0(astro@4.8.6(typescript@5.4.5))(tailwindcss@3.4.3))(tailwindcss@3.4.3)
"@astrojs/tailwind":
specifier: ^5.1.0
version: 5.1.0(astro@4.8.6(typescript@5.4.5))(tailwindcss@3.4.3)
specifier: ^0.37.6
version: 0.37.6(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))
"@fontsource/inter":
specifier: ^5.0.18
version: 5.0.18
specifier: ^5.2.8
version: 5.2.8
"@fontsource/rubik":
specifier: ^5.0.20
version: 5.0.20
specifier: ^5.2.8
version: 5.2.8
astro:
specifier: ^4.8.6
version: 4.8.6(typescript@5.4.5)
autoprefixer:
specifier: ^10.4.19
version: 10.4.19(postcss@8.4.33)
cssnano:
specifier: ^7.0.1
version: 7.0.1(postcss@8.4.33)
postcss-preset-env:
specifier: ^9.5.13
version: 9.5.13(postcss@8.4.33)
specifier: ^5.17.1
version: 5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)
sharp:
specifier: ^0.33.4
version: 0.33.4
tailwindcss:
specifier: ^3.4.3
version: 3.4.3
typescript:
specifier: ^5.4.5
version: 5.4.5
specifier: ^0.34.5
version: 0.34.5
packages:
"@alloc/quick-lru@5.2.0":
"@astrojs/compiler@2.13.1":
resolution:
{
integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==,
integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==,
}
engines: { node: ">=10" }
"@ampproject/remapping@2.2.1":
"@astrojs/internal-helpers@0.7.2":
resolution:
{
integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==,
integrity: sha512-KCkCqR3Goym79soqEtbtLzJfqhTWMyVaizUi35FLzgGSzBotSw8DB1qwsu7U96ihOJgYhDk2nVPz+3LnXPeX6g==,
}
engines: { node: ">=6.0.0" }
"@astrojs/check@0.7.0":
"@astrojs/internal-helpers@0.7.5":
resolution:
{
integrity: sha512-UTqwOeKNu9IYZmJXEeWnQuTdSd/pX58Hl4TUARsMlT97SVDL//kLBE4T/ctxRz6J573N87oE5ddtW/uOOnQTug==,
integrity: sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==,
}
hasBin: true
"@astrojs/markdown-remark@6.3.10":
resolution:
{
integrity: sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==,
}
"@astrojs/markdown-remark@6.3.6":
resolution:
{
integrity: sha512-bwylYktCTsLMVoCOEHbn2GSUA3c5KT/qilekBKA3CBng0bo1TYjNZPr761vxumRk9kJGqTOtU+fgCAp5Vwokug==,
}
"@astrojs/mdx@4.3.4":
resolution:
{
integrity: sha512-Ew3iP+6zuzzJWNEH5Qr1iknrue1heEfgmfuMpuwLaSwqlUiJQ0NDb2oxKosgWU1ROYmVf1H4KCmS6QdMWKyFjw==,
}
engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 }
peerDependencies:
typescript: ^5.0.0
astro: ^5.0.0
"@astrojs/compiler@2.8.0":
"@astrojs/prism@3.3.0":
resolution:
{
integrity: sha512-yrpD1WRGqsJwANaDIdtHo+YVjvIOFAjC83lu5qENIgrafwZcJgSXDuwVMXOgok4tFzpeKLsFQ6c3FoUdloLWBQ==,
integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==,
}
engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 }
"@astrojs/sitemap@3.5.1":
resolution:
{
integrity: sha512-uX5z52GLtQTgOe8r3jeGmFRYrFe52mdpLYJzqjvL1cdy5Kg3MLOZEvaZ/OCH0fSq0t7e50uJQ6oBMZG0ffszBg==,
}
"@astrojs/internal-helpers@0.4.0":
"@astrojs/starlight@0.37.6":
resolution:
{
integrity: sha512-6B13lz5n6BrbTqCTwhXjJXuR1sqiX/H6rTxzlXx+lN1NnV4jgnq/KJldCQaUWJzPL5SiWahQyinxAbxQtwgPHA==,
}
"@astrojs/language-server@2.10.0":
resolution:
{
integrity: sha512-crHXpqYfA5qWioiuZnZFpTsNItgBlF1f0S9MzDYS7/pfCALkHNJ7K3w9U/j0uMKymsT4hC7BfMaX0DYlfdSzHg==,
}
hasBin: true
peerDependencies:
prettier: ^3.0.0
prettier-plugin-astro: ">=0.11.0"
peerDependenciesMeta:
prettier:
optional: true
prettier-plugin-astro:
optional: true
"@astrojs/markdown-remark@5.1.0":
resolution:
{
integrity: sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ==,
}
"@astrojs/mdx@2.3.1":
resolution:
{
integrity: sha512-BOQFKD2Pi9cRntNQJlpF2fh4xV8doNpmVy9NKI95r4jsitrY4X5aTOhAowi+fkQgP/zW1A4HwCyQ6Pdam6z8zQ==,
}
engines: { node: ^18.17.1 || ^20.3.0 || >=21.0.0 }
peerDependencies:
astro: ^4.0.0
"@astrojs/prism@3.1.0":
resolution:
{
integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==,
}
engines: { node: ^18.17.1 || ^20.3.0 || >=21.0.0 }
"@astrojs/sitemap@3.0.5":
resolution:
{
integrity: sha512-60eLzNjMza3ABypiQPUC6ElOSZNZeY5CwSwgJ03hfeonl+Db9x12CCzBFdTw7A5Mq+O54xEZVUrR0tB+yWgX8w==,
}
"@astrojs/starlight-tailwind@2.0.2":
resolution:
{
integrity: sha512-XJccwk6VLeQZuGQwoiLZLNAPCn2fQobtl10Ra2c2yDLjdYEActcqy0eidZbouAwGlbS9I0iJogeGjHQJ2Casjg==,
integrity: sha512-wQrKwH431q+8FsLBnNQeG+R36TMtEGxTQ2AuiVpcx9APcazvL3n7wVW8mMmYyxX0POjTnxlcWPkdMGR3Yj1L+w==,
}
peerDependencies:
"@astrojs/starlight": ">=0.9.0"
"@astrojs/tailwind": ^5.0.0
tailwindcss: ^3.3.3
astro: ^5.5.0
"@astrojs/starlight@0.22.4":
"@astrojs/telemetry@3.3.0":
resolution:
{
integrity: sha512-AgiVEVv2ZkGHkoJcjY0azXG2K7892i+z4FpKtasnESTciomO91I/X9vAfKfHxmTxdVP5BGPxBFVi0Bp2X4Lxvg==,
integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==,
}
peerDependencies:
astro: ^4.2.7
engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 }
"@astrojs/tailwind@5.1.0":
"@babel/helper-string-parser@7.27.1":
resolution:
{
integrity: sha512-BJoCDKuWhU9FT2qYg+fr6Nfb3qP4ShtyjXGHKA/4mHN94z7BGcmauQK23iy+YH5qWvTnhqkd6mQPQ1yTZTe9Ig==,
}
peerDependencies:
astro: ^3.0.0 || ^4.0.0
tailwindcss: ^3.0.24
"@astrojs/telemetry@3.1.0":
resolution:
{
integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==,
}
engines: { node: ^18.17.1 || ^20.3.0 || >=21.0.0 }
"@babel/code-frame@7.24.2":
resolution:
{
integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==,
integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==,
}
engines: { node: ">=6.9.0" }
"@babel/compat-data@7.24.4":
"@babel/helper-validator-identifier@7.28.5":
resolution:
{
integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==,
integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==,
}
engines: { node: ">=6.9.0" }
"@babel/core@7.24.5":
"@babel/parser@7.29.0":
resolution:
{
integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==,
}
engines: { node: ">=6.9.0" }
"@babel/generator@7.24.5":
resolution:
{
integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-annotate-as-pure@7.22.5":
resolution:
{
integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-compilation-targets@7.23.6":
resolution:
{
integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-environment-visitor@7.22.20":
resolution:
{
integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-function-name@7.23.0":
resolution:
{
integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-hoist-variables@7.22.5":
resolution:
{
integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-module-imports@7.22.15":
resolution:
{
integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-module-imports@7.24.3":
resolution:
{
integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-module-transforms@7.24.5":
resolution:
{
integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==,
}
engines: { node: ">=6.9.0" }
peerDependencies:
"@babel/core": ^7.0.0
"@babel/helper-plugin-utils@7.22.5":
resolution:
{
integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-simple-access@7.24.5":
resolution:
{
integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-split-export-declaration@7.24.5":
resolution:
{
integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-string-parser@7.24.1":
resolution:
{
integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-validator-identifier@7.24.5":
resolution:
{
integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==,
}
engines: { node: ">=6.9.0" }
"@babel/helper-validator-option@7.23.5":
resolution:
{
integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==,
}
engines: { node: ">=6.9.0" }
"@babel/helpers@7.24.5":
resolution:
{
integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==,
}
engines: { node: ">=6.9.0" }
"@babel/highlight@7.24.5":
resolution:
{
integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==,
}
engines: { node: ">=6.9.0" }
"@babel/parser@7.24.5":
resolution:
{
integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==,
integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==,
}
engines: { node: ">=6.0.0" }
hasBin: true
"@babel/plugin-syntax-jsx@7.23.3":
"@babel/runtime@7.28.3":
resolution:
{
integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==,
}
engines: { node: ">=6.9.0" }
peerDependencies:
"@babel/core": ^7.0.0-0
"@babel/plugin-transform-react-jsx@7.23.4":
resolution:
{
integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==,
}
engines: { node: ">=6.9.0" }
peerDependencies:
"@babel/core": ^7.0.0-0
"@babel/template@7.22.15":
resolution:
{
integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==,
integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==,
}
engines: { node: ">=6.9.0" }
"@babel/template@7.24.0":
"@babel/types@7.29.0":
resolution:
{
integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==,
integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==,
}
engines: { node: ">=6.9.0" }
"@babel/traverse@7.24.5":
"@capsizecss/unpack@4.0.0":
resolution:
{
integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==,
integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==,
}
engines: { node: ">=6.9.0" }
"@babel/types@7.24.5":
resolution:
{
integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==,
}
engines: { node: ">=6.9.0" }
"@csstools/cascade-layer-name-parser@1.0.11":
resolution:
{
integrity: sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
"@csstools/css-parser-algorithms": ^2.6.3
"@csstools/css-tokenizer": ^2.3.1
"@csstools/color-helpers@4.2.0":
resolution:
{
integrity: sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg==,
}
engines: { node: ^14 || ^16 || >=18 }
"@csstools/css-calc@1.2.2":
resolution:
{
integrity: sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
"@csstools/css-parser-algorithms": ^2.6.3
"@csstools/css-tokenizer": ^2.3.1
"@csstools/css-color-parser@2.0.2":
resolution:
{
integrity: sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
"@csstools/css-parser-algorithms": ^2.6.3
"@csstools/css-tokenizer": ^2.3.1
"@csstools/css-parser-algorithms@2.6.3":
resolution:
{
integrity: sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
"@csstools/css-tokenizer": ^2.3.1
"@csstools/css-tokenizer@2.3.1":
resolution:
{
integrity: sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==,
}
engines: { node: ^14 || ^16 || >=18 }
"@csstools/media-query-list-parser@2.1.11":
resolution:
{
integrity: sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
"@csstools/css-parser-algorithms": ^2.6.3
"@csstools/css-tokenizer": ^2.3.1
"@csstools/postcss-cascade-layers@4.0.6":
resolution:
{
integrity: sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-color-function@3.0.16":
resolution:
{
integrity: sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-color-mix-function@2.0.16":
resolution:
{
integrity: sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-exponential-functions@1.0.7":
resolution:
{
integrity: sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-font-format-keywords@3.0.2":
resolution:
{
integrity: sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-gamut-mapping@1.0.9":
resolution:
{
integrity: sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-gradients-interpolation-method@4.0.17":
resolution:
{
integrity: sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-hwb-function@3.0.15":
resolution:
{
integrity: sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-ic-unit@3.0.6":
resolution:
{
integrity: sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-initial@1.0.1":
resolution:
{
integrity: sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-is-pseudo-class@4.0.8":
resolution:
{
integrity: sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-light-dark-function@1.0.5":
resolution:
{
integrity: sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-logical-float-and-clear@2.0.1":
resolution:
{
integrity: sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-logical-overflow@1.0.1":
resolution:
{
integrity: sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-logical-overscroll-behavior@1.0.1":
resolution:
{
integrity: sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-logical-resize@2.0.1":
resolution:
{
integrity: sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-logical-viewport-units@2.0.9":
resolution:
{
integrity: sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-media-minmax@1.1.6":
resolution:
{
integrity: sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.9":
resolution:
{
integrity: sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-nested-calc@3.0.2":
resolution:
{
integrity: sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-normalize-display-values@3.0.2":
resolution:
{
integrity: sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-oklab-function@3.0.16":
resolution:
{
integrity: sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-progressive-custom-properties@3.2.0":
resolution:
{
integrity: sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-relative-color-syntax@2.0.16":
resolution:
{
integrity: sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-scope-pseudo-class@3.0.1":
resolution:
{
integrity: sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-stepped-value-functions@3.0.8":
resolution:
{
integrity: sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-text-decoration-shorthand@3.0.6":
resolution:
{
integrity: sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-trigonometric-functions@3.0.8":
resolution:
{
integrity: sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/postcss-unset-value@3.0.1":
resolution:
{
integrity: sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
"@csstools/selector-resolve-nested@1.1.0":
resolution:
{
integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss-selector-parser: ^6.0.13
"@csstools/selector-specificity@3.1.1":
resolution:
{
integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss-selector-parser: ^6.0.13
"@csstools/utilities@1.0.0":
resolution:
{
integrity: sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
engines: { node: ">=18" }
"@ctrl/tinycolor@4.1.0":
resolution:
@ -714,1062 +141,833 @@ packages:
}
engines: { node: ">=14" }
"@emmetio/abbreviation@2.3.3":
"@emnapi/runtime@1.8.1":
resolution:
{
integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==,
integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==,
}
"@emmetio/css-abbreviation@2.1.8":
"@esbuild/aix-ppc64@0.25.9":
resolution:
{
integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==,
integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==,
}
"@emmetio/css-parser@0.4.0":
resolution:
{
integrity: sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==,
}
"@emmetio/html-matcher@1.3.0":
resolution:
{
integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==,
}
"@emmetio/scanner@1.0.4":
resolution:
{
integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==,
}
"@emmetio/stream-reader-utils@0.1.0":
resolution:
{
integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==,
}
"@emmetio/stream-reader@2.2.0":
resolution:
{
integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==,
}
"@emnapi/runtime@1.1.1":
resolution:
{
integrity: sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==,
}
"@esbuild/aix-ppc64@0.20.2":
resolution:
{
integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [ppc64]
os: [aix]
"@esbuild/aix-ppc64@0.21.3":
"@esbuild/android-arm64@0.25.9":
resolution:
{
integrity: sha512-yTgnwQpFVYfvvo4SvRFB0SwrW8YjOxEoT7wfMT7Ol5v7v5LDNvSGo67aExmxOb87nQNeWPVvaGBNfQ7BXcrZ9w==,
integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==,
}
engines: { node: ">=12" }
cpu: [ppc64]
os: [aix]
"@esbuild/android-arm64@0.20.2":
resolution:
{
integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [arm64]
os: [android]
"@esbuild/android-arm64@0.21.3":
"@esbuild/android-arm@0.25.9":
resolution:
{
integrity: sha512-c+ty9necz3zB1Y+d/N+mC6KVVkGUUOcm4ZmT5i/Fk5arOaY3i6CA3P5wo/7+XzV8cb4GrI/Zjp8NuOQ9Lfsosw==,
integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==,
}
engines: { node: ">=12" }
cpu: [arm64]
os: [android]
"@esbuild/android-arm@0.20.2":
resolution:
{
integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [arm]
os: [android]
"@esbuild/android-arm@0.21.3":
"@esbuild/android-x64@0.25.9":
resolution:
{
integrity: sha512-bviJOLMgurLJtF1/mAoJLxDZDL6oU5/ztMHnJQRejbJrSc9FFu0QoUoFhvi6qSKJEw9y5oGyvr9fuDtzJ30rNQ==,
integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==,
}
engines: { node: ">=12" }
cpu: [arm]
os: [android]
"@esbuild/android-x64@0.20.2":
resolution:
{
integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [x64]
os: [android]
"@esbuild/android-x64@0.21.3":
"@esbuild/darwin-arm64@0.25.9":
resolution:
{
integrity: sha512-JReHfYCRK3FVX4Ra+y5EBH1b9e16TV2OxrPAvzMsGeES0X2Ndm9ImQRI4Ket757vhc5XBOuGperw63upesclRw==,
integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [android]
"@esbuild/darwin-arm64@0.20.2":
resolution:
{
integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [arm64]
os: [darwin]
"@esbuild/darwin-arm64@0.21.3":
"@esbuild/darwin-x64@0.25.9":
resolution:
{
integrity: sha512-U3fuQ0xNiAkXOmQ6w5dKpEvXQRSpHOnbw7gEfHCRXPeTKW9sBzVck6C5Yneb8LfJm0l6le4NQfkNPnWMSlTFUQ==,
integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==,
}
engines: { node: ">=12" }
cpu: [arm64]
os: [darwin]
"@esbuild/darwin-x64@0.20.2":
resolution:
{
integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [x64]
os: [darwin]
"@esbuild/darwin-x64@0.21.3":
"@esbuild/freebsd-arm64@0.25.9":
resolution:
{
integrity: sha512-3m1CEB7F07s19wmaMNI2KANLcnaqryJxO1fXHUV5j1rWn+wMxdUYoPyO2TnAbfRZdi7ADRwJClmOwgT13qlP3Q==,
integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [darwin]
"@esbuild/freebsd-arm64@0.20.2":
resolution:
{
integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [arm64]
os: [freebsd]
"@esbuild/freebsd-arm64@0.21.3":
"@esbuild/freebsd-x64@0.25.9":
resolution:
{
integrity: sha512-fsNAAl5pU6wmKHq91cHWQT0Fz0vtyE1JauMzKotrwqIKAswwP5cpHUCxZNSTuA/JlqtScq20/5KZ+TxQdovU/g==,
integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==,
}
engines: { node: ">=12" }
cpu: [arm64]
os: [freebsd]
"@esbuild/freebsd-x64@0.20.2":
resolution:
{
integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [x64]
os: [freebsd]
"@esbuild/freebsd-x64@0.21.3":
"@esbuild/linux-arm64@0.25.9":
resolution:
{
integrity: sha512-tci+UJ4zP5EGF4rp8XlZIdq1q1a/1h9XuronfxTMCNBslpCtmk97Q/5qqy1Mu4zIc0yswN/yP/BLX+NTUC1bXA==,
integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [freebsd]
"@esbuild/linux-arm64@0.20.2":
resolution:
{
integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [arm64]
os: [linux]
"@esbuild/linux-arm64@0.21.3":
"@esbuild/linux-arm@0.25.9":
resolution:
{
integrity: sha512-vvG6R5g5ieB4eCJBQevyDMb31LMHthLpXTc2IGkFnPWS/GzIFDnaYFp558O+XybTmYrVjxnryru7QRleJvmZ6Q==,
integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==,
}
engines: { node: ">=12" }
cpu: [arm64]
os: [linux]
"@esbuild/linux-arm@0.20.2":
resolution:
{
integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [arm]
os: [linux]
"@esbuild/linux-arm@0.21.3":
"@esbuild/linux-ia32@0.25.9":
resolution:
{
integrity: sha512-f6kz2QpSuyHHg01cDawj0vkyMwuIvN62UAguQfnNVzbge2uWLhA7TCXOn83DT0ZvyJmBI943MItgTovUob36SQ==,
integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==,
}
engines: { node: ">=12" }
cpu: [arm]
os: [linux]
"@esbuild/linux-ia32@0.20.2":
resolution:
{
integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [ia32]
os: [linux]
"@esbuild/linux-ia32@0.21.3":
"@esbuild/linux-loong64@0.25.9":
resolution:
{
integrity: sha512-HjCWhH7K96Na+66TacDLJmOI9R8iDWDDiqe17C7znGvvE4sW1ECt9ly0AJ3dJH62jHyVqW9xpxZEU1jKdt+29A==,
integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==,
}
engines: { node: ">=12" }
cpu: [ia32]
os: [linux]
"@esbuild/linux-loong64@0.20.2":
resolution:
{
integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [loong64]
os: [linux]
"@esbuild/linux-loong64@0.21.3":
"@esbuild/linux-mips64el@0.25.9":
resolution:
{
integrity: sha512-BGpimEccmHBZRcAhdlRIxMp7x9PyJxUtj7apL2IuoG9VxvU/l/v1z015nFs7Si7tXUwEsvjc1rOJdZCn4QTU+Q==,
integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==,
}
engines: { node: ">=12" }
cpu: [loong64]
os: [linux]
"@esbuild/linux-mips64el@0.20.2":
resolution:
{
integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [mips64el]
os: [linux]
"@esbuild/linux-mips64el@0.21.3":
"@esbuild/linux-ppc64@0.25.9":
resolution:
{
integrity: sha512-5rMOWkp7FQGtAH3QJddP4w3s47iT20hwftqdm7b+loe95o8JU8ro3qZbhgMRy0VuFU0DizymF1pBKkn3YHWtsw==,
integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==,
}
engines: { node: ">=12" }
cpu: [mips64el]
os: [linux]
"@esbuild/linux-ppc64@0.20.2":
resolution:
{
integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==,
}
engines: { node: ">=12" }
engines: { node: ">=18" }
cpu: [ppc64]
os: [linux]
"@esbuild/linux-ppc64@0.21.3":
"@esbuild/linux-riscv64@0.25.9":
resolution:
{
integrity: sha512-h0zj1ldel89V5sjPLo5H1SyMzp4VrgN1tPkN29TmjvO1/r0MuMRwJxL8QY05SmfsZRs6TF0c/IDH3u7XYYmbAg==,
integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==,
}
engines: { node: ">=18" }
cpu: [riscv64]
os: [linux]
"@esbuild/linux-s390x@0.25.9":
resolution:
{
integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==,
}
engines: { node: ">=18" }
cpu: [s390x]
os: [linux]
"@esbuild/linux-x64@0.25.9":
resolution:
{
integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [linux]
"@esbuild/netbsd-arm64@0.25.9":
resolution:
{
integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [netbsd]
"@esbuild/netbsd-x64@0.25.9":
resolution:
{
integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [netbsd]
"@esbuild/openbsd-arm64@0.25.9":
resolution:
{
integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [openbsd]
"@esbuild/openbsd-x64@0.25.9":
resolution:
{
integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [openbsd]
"@esbuild/openharmony-arm64@0.25.9":
resolution:
{
integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [openharmony]
"@esbuild/sunos-x64@0.25.9":
resolution:
{
integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [sunos]
"@esbuild/win32-arm64@0.25.9":
resolution:
{
integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [win32]
"@esbuild/win32-ia32@0.25.9":
resolution:
{
integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==,
}
engines: { node: ">=18" }
cpu: [ia32]
os: [win32]
"@esbuild/win32-x64@0.25.9":
resolution:
{
integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [win32]
"@expressive-code/core@0.41.3":
resolution:
{
integrity: sha512-9qzohqU7O0+JwMEEgQhnBPOw5DtsQRBXhW++5fvEywsuX44vCGGof1SL5OvPElvNgaWZ4pFZAFSlkNOkGyLwSQ==,
}
"@expressive-code/plugin-frames@0.41.3":
resolution:
{
integrity: sha512-rFQtmf/3N2CK3Cq/uERweMTYZnBu+CwxBdHuOftEmfA9iBE7gTVvwpbh82P9ZxkPLvc40UMhYt7uNuAZexycRQ==,
}
"@expressive-code/plugin-shiki@0.41.3":
resolution:
{
integrity: sha512-RlTARoopzhFJIOVHLGvuXJ8DCEme/hjV+ZnRJBIxzxsKVpGPW4Oshqg9xGhWTYdHstTsxO663s0cdBLzZj9TQA==,
}
"@expressive-code/plugin-text-markers@0.41.3":
resolution:
{
integrity: sha512-SN8tkIzDpA0HLAscEYD2IVrfLiid6qEdE9QLlGVSxO1KEw7qYvjpbNBQjUjMr5/jvTJ7ys6zysU2vLPHE0sb2g==,
}
"@fontsource/inter@5.2.8":
resolution:
{
integrity: sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==,
}
"@fontsource/rubik@5.2.8":
resolution:
{
integrity: sha512-PIc8QR7FqWPcYhbdRiGff56vQlKqg/ytES1YqecSq1GkgxiH4TBshrFvDEOZ9JonUF9m1qQ+qXxJj7wD5zgXEw==,
}
"@img/colour@1.0.0":
resolution:
{
integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==,
}
engines: { node: ">=18" }
"@img/sharp-darwin-arm64@0.34.5":
resolution:
{
integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==,
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [arm64]
os: [darwin]
"@img/sharp-darwin-x64@0.34.5":
resolution:
{
integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==,
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [x64]
os: [darwin]
"@img/sharp-libvips-darwin-arm64@1.2.4":
resolution:
{
integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==,
}
cpu: [arm64]
os: [darwin]
"@img/sharp-libvips-darwin-x64@1.2.4":
resolution:
{
integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==,
}
cpu: [x64]
os: [darwin]
"@img/sharp-libvips-linux-arm64@1.2.4":
resolution:
{
integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==,
}
cpu: [arm64]
os: [linux]
libc: [glibc]
"@img/sharp-libvips-linux-arm@1.2.4":
resolution:
{
integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==,
}
cpu: [arm]
os: [linux]
libc: [glibc]
"@img/sharp-libvips-linux-ppc64@1.2.4":
resolution:
{
integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==,
}
engines: { node: ">=12" }
cpu: [ppc64]
os: [linux]
libc: [glibc]
"@esbuild/linux-riscv64@0.20.2":
"@img/sharp-libvips-linux-riscv64@1.2.4":
resolution:
{
integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==,
integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==,
}
engines: { node: ">=12" }
cpu: [riscv64]
os: [linux]
libc: [glibc]
"@esbuild/linux-riscv64@0.21.3":
"@img/sharp-libvips-linux-s390x@1.2.4":
resolution:
{
integrity: sha512-dkAKcTsTJ+CRX6bnO17qDJbLoW37npd5gSNtSzjYQr0svghLJYGYB0NF1SNcU1vDcjXLYS5pO4qOW4YbFama4A==,
integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==,
}
engines: { node: ">=12" }
cpu: [s390x]
os: [linux]
libc: [glibc]
"@img/sharp-libvips-linux-x64@1.2.4":
resolution:
{
integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==,
}
cpu: [x64]
os: [linux]
libc: [glibc]
"@img/sharp-libvips-linuxmusl-arm64@1.2.4":
resolution:
{
integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==,
}
cpu: [arm64]
os: [linux]
libc: [musl]
"@img/sharp-libvips-linuxmusl-x64@1.2.4":
resolution:
{
integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==,
}
cpu: [x64]
os: [linux]
libc: [musl]
"@img/sharp-linux-arm64@0.34.5":
resolution:
{
integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==,
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [arm64]
os: [linux]
libc: [glibc]
"@img/sharp-linux-arm@0.34.5":
resolution:
{
integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==,
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [arm]
os: [linux]
libc: [glibc]
"@img/sharp-linux-ppc64@0.34.5":
resolution:
{
integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==,
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [ppc64]
os: [linux]
libc: [glibc]
"@img/sharp-linux-riscv64@0.34.5":
resolution:
{
integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==,
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [riscv64]
os: [linux]
libc: [glibc]
"@esbuild/linux-s390x@0.20.2":
"@img/sharp-linux-s390x@0.34.5":
resolution:
{
integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==,
integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==,
}
engines: { node: ">=12" }
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [s390x]
os: [linux]
libc: [glibc]
"@esbuild/linux-s390x@0.21.3":
"@img/sharp-linux-x64@0.34.5":
resolution:
{
integrity: sha512-vnD1YUkovEdnZWEuMmy2X2JmzsHQqPpZElXx6dxENcIwTu+Cu5ERax6+Ke1QsE814Zf3c6rxCfwQdCTQ7tPuXA==,
integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==,
}
engines: { node: ">=12" }
cpu: [s390x]
os: [linux]
"@esbuild/linux-x64@0.20.2":
resolution:
{
integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==,
}
engines: { node: ">=12" }
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [x64]
os: [linux]
libc: [glibc]
"@esbuild/linux-x64@0.21.3":
"@img/sharp-linuxmusl-arm64@0.34.5":
resolution:
{
integrity: sha512-IOXOIm9WaK7plL2gMhsWJd+l2bfrhfilv0uPTptoRoSb2p09RghhQQp9YY6ZJhk/kqmeRt6siRdMSLLwzuT0KQ==,
integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [linux]
"@esbuild/netbsd-x64@0.20.2":
resolution:
{
integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [netbsd]
"@esbuild/netbsd-x64@0.21.3":
resolution:
{
integrity: sha512-uTgCwsvQ5+vCQnqM//EfDSuomo2LhdWhFPS8VL8xKf+PKTCrcT/2kPPoWMTs22aB63MLdGMJiE3f1PHvCDmUOw==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [netbsd]
"@esbuild/openbsd-x64@0.20.2":
resolution:
{
integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [openbsd]
"@esbuild/openbsd-x64@0.21.3":
resolution:
{
integrity: sha512-vNAkR17Ub2MgEud2Wag/OE4HTSI6zlb291UYzHez/psiKarp0J8PKGDnAhMBcHFoOHMXHfExzmjMojJNbAStrQ==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [openbsd]
"@esbuild/sunos-x64@0.20.2":
resolution:
{
integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [sunos]
"@esbuild/sunos-x64@0.21.3":
resolution:
{
integrity: sha512-W8H9jlGiSBomkgmouaRoTXo49j4w4Kfbl6I1bIdO/vT0+0u4f20ko3ELzV3hPI6XV6JNBVX+8BC+ajHkvffIJA==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [sunos]
"@esbuild/win32-arm64@0.20.2":
resolution:
{
integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==,
}
engines: { node: ">=12" }
cpu: [arm64]
os: [win32]
"@esbuild/win32-arm64@0.21.3":
resolution:
{
integrity: sha512-EjEomwyLSCg8Ag3LDILIqYCZAq/y3diJ04PnqGRgq8/4O3VNlXyMd54j/saShaN4h5o5mivOjAzmU6C3X4v0xw==,
}
engines: { node: ">=12" }
cpu: [arm64]
os: [win32]
"@esbuild/win32-ia32@0.20.2":
resolution:
{
integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==,
}
engines: { node: ">=12" }
cpu: [ia32]
os: [win32]
"@esbuild/win32-ia32@0.21.3":
resolution:
{
integrity: sha512-WGiE/GgbsEwR33++5rzjiYsKyHywE8QSZPF7Rfx9EBfK3Qn3xyR6IjyCr5Uk38Kg8fG4/2phN7sXp4NPWd3fcw==,
}
engines: { node: ">=12" }
cpu: [ia32]
os: [win32]
"@esbuild/win32-x64@0.20.2":
resolution:
{
integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [win32]
"@esbuild/win32-x64@0.21.3":
resolution:
{
integrity: sha512-xRxC0jaJWDLYvcUvjQmHCJSfMrgmUuvsoXgDeU/wTorQ1ngDdUBuFtgY3W1Pc5sprGAvZBtWdJX7RPg/iZZUqA==,
}
engines: { node: ">=12" }
cpu: [x64]
os: [win32]
"@expressive-code/core@0.35.3":
resolution:
{
integrity: sha512-SYamcarAjufYhbuK/kfvJSvAXLsfnM7DKc78R7Dq4B73R5bKQK2m5zR0l57tXr4yp2C5Z8lu5xZncdwWxcmPdg==,
}
"@expressive-code/plugin-frames@0.35.3":
resolution:
{
integrity: sha512-QYytMq6IsaHgTofQ5b6d+CnbxkqLdikSF2hC+IL/ZZwPYHYZoUlmjIwmJZhY4/hHqJGELrtZsyVdlt06RntgmA==,
}
"@expressive-code/plugin-shiki@0.35.3":
resolution:
{
integrity: sha512-aFQBPepv0zhVXqJFAvfQ4vXYv/meJKiqmEEKSxdjAfwXllIV49PDlnGEXmbGYjR4hUQQjbfDgzAbrbfePc3YVQ==,
}
"@expressive-code/plugin-text-markers@0.35.3":
resolution:
{
integrity: sha512-gDdnQrfDRXw5Y+PKHJDkpAUdf2pthYOthGcgy3JB8GOTQ3EL1h+755Ct/bGc4MR6jn+dgnQP47uHMWQaccvN6Q==,
}
"@fontsource/inter@5.0.18":
resolution:
{
integrity: sha512-YCsoYPTcs713sI7tLtxaPrIhXAXvEetGg5Ry02ivA8qUOb3fQHojbK/X9HLD5OOKvFUNR2Ynkwb1kR1hVKQHpw==,
}
"@fontsource/rubik@5.0.20":
resolution:
{
integrity: sha512-4iEk1Nnnz4kzrpfsjfHXOm7HDVtsDfs8uihhE4LaXqQuxnY8lERZWJhtGAKILDwbx3gsnVXI+0beUNLRmaHeCw==,
}
"@img/sharp-darwin-arm64@0.33.4":
resolution:
{
integrity: sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==,
}
engines:
{
glibc: ">=2.26",
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
}
cpu: [arm64]
os: [darwin]
"@img/sharp-darwin-x64@0.33.4":
resolution:
{
integrity: sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==,
}
engines:
{
glibc: ">=2.26",
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
}
cpu: [x64]
os: [darwin]
"@img/sharp-libvips-darwin-arm64@1.0.2":
resolution:
{
integrity: sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==,
}
engines: { macos: ">=11", npm: ">=9.6.5", pnpm: ">=7.1.0", yarn: ">=3.2.0" }
cpu: [arm64]
os: [darwin]
"@img/sharp-libvips-darwin-x64@1.0.2":
resolution:
{
integrity: sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==,
}
engines:
{ macos: ">=10.13", npm: ">=9.6.5", pnpm: ">=7.1.0", yarn: ">=3.2.0" }
cpu: [x64]
os: [darwin]
"@img/sharp-libvips-linux-arm64@1.0.2":
resolution:
{
integrity: sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==,
}
engines:
{ glibc: ">=2.26", npm: ">=9.6.5", pnpm: ">=7.1.0", yarn: ">=3.2.0" }
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [arm64]
os: [linux]
libc: [musl]
"@img/sharp-libvips-linux-arm@1.0.2":
"@img/sharp-linuxmusl-x64@0.34.5":
resolution:
{
integrity: sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==,
integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==,
}
engines:
{ glibc: ">=2.28", npm: ">=9.6.5", pnpm: ">=7.1.0", yarn: ">=3.2.0" }
cpu: [arm]
os: [linux]
"@img/sharp-libvips-linux-s390x@1.0.2":
resolution:
{
integrity: sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==,
}
engines:
{ glibc: ">=2.28", npm: ">=9.6.5", pnpm: ">=7.1.0", yarn: ">=3.2.0" }
cpu: [s390x]
os: [linux]
"@img/sharp-libvips-linux-x64@1.0.2":
resolution:
{
integrity: sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==,
}
engines:
{ glibc: ">=2.26", npm: ">=9.6.5", pnpm: ">=7.1.0", yarn: ">=3.2.0" }
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [x64]
os: [linux]
libc: [musl]
"@img/sharp-libvips-linuxmusl-arm64@1.0.2":
"@img/sharp-wasm32@0.34.5":
resolution:
{
integrity: sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==,
}
engines:
{ musl: ">=1.2.2", npm: ">=9.6.5", pnpm: ">=7.1.0", yarn: ">=3.2.0" }
cpu: [arm64]
os: [linux]
"@img/sharp-libvips-linuxmusl-x64@1.0.2":
resolution:
{
integrity: sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==,
}
engines:
{ musl: ">=1.2.2", npm: ">=9.6.5", pnpm: ">=7.1.0", yarn: ">=3.2.0" }
cpu: [x64]
os: [linux]
"@img/sharp-linux-arm64@0.33.4":
resolution:
{
integrity: sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==,
}
engines:
{
glibc: ">=2.26",
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
}
cpu: [arm64]
os: [linux]
"@img/sharp-linux-arm@0.33.4":
resolution:
{
integrity: sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==,
}
engines:
{
glibc: ">=2.28",
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
}
cpu: [arm]
os: [linux]
"@img/sharp-linux-s390x@0.33.4":
resolution:
{
integrity: sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==,
}
engines:
{
glibc: ">=2.31",
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
}
cpu: [s390x]
os: [linux]
"@img/sharp-linux-x64@0.33.4":
resolution:
{
integrity: sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==,
}
engines:
{
glibc: ">=2.26",
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
}
cpu: [x64]
os: [linux]
"@img/sharp-linuxmusl-arm64@0.33.4":
resolution:
{
integrity: sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==,
}
engines:
{
musl: ">=1.2.2",
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
}
cpu: [arm64]
os: [linux]
"@img/sharp-linuxmusl-x64@0.33.4":
resolution:
{
integrity: sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==,
}
engines:
{
musl: ">=1.2.2",
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
}
cpu: [x64]
os: [linux]
"@img/sharp-wasm32@0.33.4":
resolution:
{
integrity: sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==,
}
engines:
{
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==,
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [wasm32]
"@img/sharp-win32-ia32@0.33.4":
"@img/sharp-win32-arm64@0.34.5":
resolution:
{
integrity: sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==,
integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==,
}
engines:
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [arm64]
os: [win32]
"@img/sharp-win32-ia32@0.34.5":
resolution:
{
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==,
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [ia32]
os: [win32]
"@img/sharp-win32-x64@0.33.4":
"@img/sharp-win32-x64@0.34.5":
resolution:
{
integrity: sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==,
integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==,
}
engines:
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
cpu: [x64]
os: [win32]
"@jridgewell/sourcemap-codec@1.5.5":
resolution:
{
node: ^18.17.0 || ^20.3.0 || >=21.0.0,
npm: ">=9.6.5",
pnpm: ">=7.1.0",
yarn: ">=3.2.0",
integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==,
}
"@mdx-js/mdx@3.1.0":
resolution:
{
integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==,
}
"@oslojs/encoding@1.1.0":
resolution:
{
integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==,
}
"@pagefind/darwin-arm64@1.3.0":
resolution:
{
integrity: sha512-365BEGl6ChOsauRjyVpBjXybflXAOvoMROw3TucAROHIcdBvXk9/2AmEvGFU0r75+vdQI4LJdJdpH4Y6Yqaj4A==,
}
cpu: [arm64]
os: [darwin]
"@pagefind/darwin-x64@1.3.0":
resolution:
{
integrity: sha512-zlGHA23uuXmS8z3XxEGmbHpWDxXfPZ47QS06tGUq0HDcZjXjXHeLG+cboOy828QIV5FXsm9MjfkP5e4ZNbOkow==,
}
cpu: [x64]
os: [darwin]
"@pagefind/default-ui@1.3.0":
resolution:
{
integrity: sha512-CGKT9ccd3+oRK6STXGgfH+m0DbOKayX6QGlq38TfE1ZfUcPc5+ulTuzDbZUnMo+bubsEOIypm4Pl2iEyzZ1cNg==,
}
"@pagefind/linux-arm64@1.3.0":
resolution:
{
integrity: sha512-8lsxNAiBRUk72JvetSBXs4WRpYrQrVJXjlRRnOL6UCdBN9Nlsz0t7hWstRk36+JqHpGWOKYiuHLzGYqYAqoOnQ==,
}
cpu: [arm64]
os: [linux]
"@pagefind/linux-x64@1.3.0":
resolution:
{
integrity: sha512-hAvqdPJv7A20Ucb6FQGE6jhjqy+vZ6pf+s2tFMNtMBG+fzcdc91uTw7aP/1Vo5plD0dAOHwdxfkyw0ugal4kcQ==,
}
cpu: [x64]
os: [linux]
"@pagefind/windows-x64@1.3.0":
resolution:
{
integrity: sha512-BR1bIRWOMqkf8IoU576YDhij1Wd/Zf2kX/kCI0b2qzCKC8wcc2GQJaaRMCpzvCCrmliO4vtJ6RITp/AnoYUUmQ==,
}
cpu: [x64]
os: [win32]
"@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462":
"@rollup/pluginutils@5.3.0":
resolution:
{
integrity: sha512-etqLfpSJ5zaw76KUNF603be6d6QsiQPmaHr9FKEp4zhLZJzWCCMH6Icak7MtLUFLZLMpL761mZNImi/joBo1ZA==,
integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==,
}
engines: { node: ">=14.0.0" }
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
"@jridgewell/gen-mapping@0.3.3":
"@rollup/rollup-android-arm-eabi@4.48.1":
resolution:
{
integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==,
}
engines: { node: ">=6.0.0" }
"@jridgewell/gen-mapping@0.3.5":
resolution:
{
integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==,
}
engines: { node: ">=6.0.0" }
"@jridgewell/resolve-uri@3.1.1":
resolution:
{
integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==,
}
engines: { node: ">=6.0.0" }
"@jridgewell/set-array@1.1.2":
resolution:
{
integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==,
}
engines: { node: ">=6.0.0" }
"@jridgewell/set-array@1.2.1":
resolution:
{
integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==,
}
engines: { node: ">=6.0.0" }
"@jridgewell/sourcemap-codec@1.4.15":
resolution:
{
integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==,
}
"@jridgewell/trace-mapping@0.3.20":
resolution:
{
integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==,
}
"@jridgewell/trace-mapping@0.3.25":
resolution:
{
integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==,
}
"@mdx-js/mdx@3.0.0":
resolution:
{
integrity: sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==,
}
"@nodelib/fs.scandir@2.1.5":
resolution:
{
integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==,
}
engines: { node: ">= 8" }
"@nodelib/fs.stat@2.0.5":
resolution:
{
integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==,
}
engines: { node: ">= 8" }
"@nodelib/fs.walk@1.2.8":
resolution:
{
integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==,
}
engines: { node: ">= 8" }
"@pagefind/darwin-arm64@1.0.4":
resolution:
{
integrity: sha512-2OcthvceX2xhm5XbgOmW+lT45oLuHqCmvFeFtxh1gsuP5cO8vcD8ZH8Laj4pXQFCcK6eAdSShx+Ztx/LsQWZFQ==,
}
cpu: [arm64]
os: [darwin]
"@pagefind/darwin-x64@1.0.4":
resolution:
{
integrity: sha512-xkdvp0D9Ld/ZKsjo/y1bgfhTEU72ITimd2PMMQtts7jf6JPIOJbsiErCvm37m/qMFuPGEq/8d+fZ4pydOj08HQ==,
}
cpu: [x64]
os: [darwin]
"@pagefind/default-ui@1.0.4":
resolution:
{
integrity: sha512-edkcaPSKq67C49Vehjo+LQCpT615v4d7JRhfGzFPccePvdklaL+VXrfghN/uIfsdoG+HoLI1PcYy2iFcB9CTkw==,
}
"@pagefind/linux-arm64@1.0.4":
resolution:
{
integrity: sha512-jGBrcCzIrMnNxLKVtogaQyajVfTAXM59KlBEwg6vTn8NW4fQ6nuFbbhlG4dTIsaamjEM5e8ZBEAKZfTB/qd9xw==,
}
cpu: [arm64]
os: [linux]
"@pagefind/linux-x64@1.0.4":
resolution:
{
integrity: sha512-LIn/QcvcEtLEBqKe5vpSbSC2O3fvqbRCWOTIklslqSORisCsvzsWbP6j+LYxE9q0oWIfkdMoWV1vrE/oCKRxHg==,
}
cpu: [x64]
os: [linux]
"@pagefind/windows-x64@1.0.4":
resolution:
{
integrity: sha512-QlBCVeZfj9fc9sbUgdOz76ZDbeK4xZihOBAFqGuRJeChfM8pnVeH9iqSnXgO3+m9oITugTf7PicyRUFAG76xeQ==,
}
cpu: [x64]
os: [win32]
"@rollup/rollup-android-arm-eabi@4.17.2":
resolution:
{
integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==,
integrity: sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw==,
}
cpu: [arm]
os: [android]
"@rollup/rollup-android-arm64@4.17.2":
"@rollup/rollup-android-arm64@4.48.1":
resolution:
{
integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==,
integrity: sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ==,
}
cpu: [arm64]
os: [android]
"@rollup/rollup-darwin-arm64@4.17.2":
"@rollup/rollup-darwin-arm64@4.48.1":
resolution:
{
integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==,
integrity: sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A==,
}
cpu: [arm64]
os: [darwin]
"@rollup/rollup-darwin-x64@4.17.2":
"@rollup/rollup-darwin-x64@4.48.1":
resolution:
{
integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==,
integrity: sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ==,
}
cpu: [x64]
os: [darwin]
"@rollup/rollup-linux-arm-gnueabihf@4.17.2":
"@rollup/rollup-freebsd-arm64@4.48.1":
resolution:
{
integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==,
integrity: sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ==,
}
cpu: [arm64]
os: [freebsd]
"@rollup/rollup-freebsd-x64@4.48.1":
resolution:
{
integrity: sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ==,
}
cpu: [x64]
os: [freebsd]
"@rollup/rollup-linux-arm-gnueabihf@4.48.1":
resolution:
{
integrity: sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==,
}
cpu: [arm]
os: [linux]
libc: [glibc]
"@rollup/rollup-linux-arm-musleabihf@4.17.2":
"@rollup/rollup-linux-arm-musleabihf@4.48.1":
resolution:
{
integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==,
integrity: sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==,
}
cpu: [arm]
os: [linux]
libc: [musl]
"@rollup/rollup-linux-arm64-gnu@4.17.2":
"@rollup/rollup-linux-arm64-gnu@4.48.1":
resolution:
{
integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==,
integrity: sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==,
}
cpu: [arm64]
os: [linux]
libc: [glibc]
"@rollup/rollup-linux-arm64-musl@4.17.2":
"@rollup/rollup-linux-arm64-musl@4.48.1":
resolution:
{
integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==,
integrity: sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==,
}
cpu: [arm64]
os: [linux]
libc: [musl]
"@rollup/rollup-linux-powerpc64le-gnu@4.17.2":
"@rollup/rollup-linux-loongarch64-gnu@4.48.1":
resolution:
{
integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==,
integrity: sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==,
}
cpu: [loong64]
os: [linux]
libc: [glibc]
"@rollup/rollup-linux-ppc64-gnu@4.48.1":
resolution:
{
integrity: sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==,
}
cpu: [ppc64]
os: [linux]
libc: [glibc]
"@rollup/rollup-linux-riscv64-gnu@4.17.2":
"@rollup/rollup-linux-riscv64-gnu@4.48.1":
resolution:
{
integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==,
integrity: sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==,
}
cpu: [riscv64]
os: [linux]
libc: [glibc]
"@rollup/rollup-linux-s390x-gnu@4.17.2":
"@rollup/rollup-linux-riscv64-musl@4.48.1":
resolution:
{
integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==,
integrity: sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==,
}
cpu: [riscv64]
os: [linux]
libc: [musl]
"@rollup/rollup-linux-s390x-gnu@4.48.1":
resolution:
{
integrity: sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==,
}
cpu: [s390x]
os: [linux]
libc: [glibc]
"@rollup/rollup-linux-x64-gnu@4.17.2":
"@rollup/rollup-linux-x64-gnu@4.48.1":
resolution:
{
integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==,
integrity: sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==,
}
cpu: [x64]
os: [linux]
libc: [glibc]
"@rollup/rollup-linux-x64-musl@4.17.2":
"@rollup/rollup-linux-x64-musl@4.48.1":
resolution:
{
integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==,
integrity: sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==,
}
cpu: [x64]
os: [linux]
libc: [musl]
"@rollup/rollup-win32-arm64-msvc@4.17.2":
"@rollup/rollup-win32-arm64-msvc@4.48.1":
resolution:
{
integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==,
integrity: sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==,
}
cpu: [arm64]
os: [win32]
"@rollup/rollup-win32-ia32-msvc@4.17.2":
"@rollup/rollup-win32-ia32-msvc@4.48.1":
resolution:
{
integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==,
integrity: sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ==,
}
cpu: [ia32]
os: [win32]
"@rollup/rollup-win32-x64-msvc@4.17.2":
"@rollup/rollup-win32-x64-msvc@4.48.1":
resolution:
{
integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==,
integrity: sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg==,
}
cpu: [x64]
os: [win32]
"@shikijs/core@1.5.2":
"@shikijs/core@3.11.0":
resolution:
{
integrity: sha512-wSAOgaz48GmhILFElMCeQypSZmj6Ru6DttOOtl3KNkdJ17ApQuGNCfzpk4cClasVrnIu45++2DBwG4LNMQAfaA==,
integrity: sha512-oJwU+DxGqp6lUZpvtQgVOXNZcVsirN76tihOLBmwILkKuRuwHteApP8oTXmL4tF5vS5FbOY0+8seXmiCoslk4g==,
}
"@trysound/sax@0.2.0":
"@shikijs/core@3.22.0":
resolution:
{
integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==,
}
engines: { node: ">=10.13.0" }
"@types/acorn@4.0.6":
resolution:
{
integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==,
integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==,
}
"@types/babel__core@7.20.5":
"@shikijs/engine-javascript@3.11.0":
resolution:
{
integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==,
integrity: sha512-6/ov6pxrSvew13k9ztIOnSBOytXeKs5kfIR7vbhdtVRg+KPzvp2HctYGeWkqv7V6YIoLicnig/QF3iajqyElZA==,
}
"@types/babel__generator@7.6.7":
"@shikijs/engine-javascript@3.22.0":
resolution:
{
integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==,
integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==,
}
"@types/babel__template@7.4.4":
"@shikijs/engine-oniguruma@3.11.0":
resolution:
{
integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==,
integrity: sha512-4DwIjIgETK04VneKbfOE4WNm4Q7WC1wo95wv82PoHKdqX4/9qLRUwrfKlmhf0gAuvT6GHy0uc7t9cailk6Tbhw==,
}
"@types/babel__traverse@7.20.4":
"@shikijs/engine-oniguruma@3.22.0":
resolution:
{
integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==,
integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==,
}
"@types/cookie@0.6.0":
"@shikijs/langs@3.11.0":
resolution:
{
integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==,
integrity: sha512-Njg/nFL4HDcf/ObxcK2VeyidIq61EeLmocrwTHGGpOQx0BzrPWM1j55XtKQ1LvvDWH15cjQy7rg96aJ1/l63uw==,
}
"@shikijs/langs@3.22.0":
resolution:
{
integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==,
}
"@shikijs/themes@3.11.0":
resolution:
{
integrity: sha512-BhhWRzCTEk2CtWt4S4bgsOqPJRkapvxdsifAwqP+6mk5uxboAQchc0etiJ0iIasxnMsb764qGD24DK9albcU9Q==,
}
"@shikijs/themes@3.22.0":
resolution:
{
integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==,
}
"@shikijs/types@3.11.0":
resolution:
{
integrity: sha512-RB7IMo2E7NZHyfkqAuaf4CofyY8bPzjWPjJRzn6SEak3b46fIQyG6Vx5fG/obqkfppQ+g8vEsiD7Uc6lqQt32Q==,
}
"@shikijs/types@3.22.0":
resolution:
{
integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==,
}
"@shikijs/vscode-textmate@10.0.2":
resolution:
{
integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==,
}
"@types/debug@4.1.12":
@ -1778,46 +976,52 @@ packages:
integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==,
}
"@types/estree-jsx@1.0.3":
"@types/estree-jsx@1.0.5":
resolution:
{
integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==,
integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==,
}
"@types/estree@1.0.5":
"@types/estree@1.0.8":
resolution:
{
integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==,
integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==,
}
"@types/hast@3.0.3":
"@types/hast@3.0.4":
resolution:
{
integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==,
integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==,
}
"@types/mdast@4.0.3":
"@types/js-yaml@4.0.9":
resolution:
{
integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==,
integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==,
}
"@types/mdx@2.0.10":
"@types/mdast@4.0.4":
resolution:
{
integrity: sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==,
integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==,
}
"@types/ms@0.7.34":
"@types/mdx@2.0.13":
resolution:
{
integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==,
integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==,
}
"@types/nlcst@1.0.4":
"@types/ms@2.1.0":
resolution:
{
integrity: sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg==,
integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==,
}
"@types/nlcst@2.0.3":
resolution:
{
integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==,
}
"@types/node@17.0.45":
@ -1826,90 +1030,34 @@ packages:
integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==,
}
"@types/node@24.3.0":
resolution:
{
integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==,
}
"@types/sax@1.2.7":
resolution:
{
integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==,
}
"@types/unist@2.0.10":
"@types/unist@2.0.11":
resolution:
{
integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==,
integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==,
}
"@types/unist@3.0.2":
"@types/unist@3.0.3":
resolution:
{
integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==,
integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==,
}
"@ungap/structured-clone@1.2.0":
"@ungap/structured-clone@1.3.0":
resolution:
{
integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==,
}
"@volar/kit@2.2.4":
resolution:
{
integrity: sha512-TyRYaj56NBwa+0DgYbIkNQm+pN5DaV1dvZ5PzoKGDk9oag/sCG+W6wVkyaqmYCNJkXpmRtM627RkeMRTBvnYzw==,
}
peerDependencies:
typescript: "*"
"@volar/language-core@2.2.4":
resolution:
{
integrity: sha512-7As47GndxGxsqqYnbreLrfB5NDUeQioPM2LJKUuB4/34c0NpEJ2byVl3c9KYdjIdiEstWZ9JLtLKNTaPWb5jtA==,
}
"@volar/language-server@2.2.4":
resolution:
{
integrity: sha512-wgRsKsqFMY7MRkmBfIX+GB0uzAv2Nks7YS3Ud6RWdHsjEu7tF+cXzBX/IRgW5HOayLLPC1xES2PYXk26hdOIoA==,
}
"@volar/language-service@2.2.4":
resolution:
{
integrity: sha512-3OxJFADEsAZp1RoTS3SX2GY9SeVnB9mbd3N/Faz45IvnT2EFAyVJGPOyrz5bJDvKuCtjdoTNNWS1GX1bHGytrA==,
}
"@volar/snapshot-document@2.2.4":
resolution:
{
integrity: sha512-XwL9Jo5+nn4WZystok1+kRXbmFuJXaCx0KfJYZizJQDd7kPDgBcyci/aKsBVNhIgiD9JT0KKycru0ndyHRadGQ==,
}
"@volar/source-map@2.2.4":
resolution:
{
integrity: sha512-m92FLpR9vB1YEZfiZ+bfgpLrToL/DNkOrorWVep3pffHrwwI4Tx2oIQN+sqHJfKkiT5N3J1owC+8crhAEinfjg==,
}
"@volar/typescript@2.2.4":
resolution:
{
integrity: sha512-uAQC53tgEbHO62G8NXMfmBrJAlP2QJ9WxVEEQqqK3I6VSy8frL5LbH3hAWODxiwMWixv74wJLWlKbWXOgdIoRQ==,
}
"@vscode/emmet-helper@2.9.2":
resolution:
{
integrity: sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==,
}
"@vscode/l10n@0.0.16":
resolution:
{
integrity: sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==,
}
"@vscode/l10n@0.0.18":
resolution:
{
integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==,
integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==,
}
acorn-jsx@5.3.2:
@ -1920,18 +1068,10 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.11.2:
acorn@8.15.0:
resolution:
{
integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==,
}
engines: { node: ">=0.4.0" }
hasBin: true
acorn@8.11.3:
resolution:
{
integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==,
integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==,
}
engines: { node: ">=0.4.0" }
hasBin: true
@ -1949,27 +1089,13 @@ packages:
}
engines: { node: ">=8" }
ansi-regex@6.0.1:
ansi-regex@6.2.0:
resolution:
{
integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==,
integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==,
}
engines: { node: ">=12" }
ansi-styles@3.2.1:
resolution:
{
integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==,
}
engines: { node: ">=4" }
ansi-styles@4.3.0:
resolution:
{
integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==,
}
engines: { node: ">=8" }
ansi-styles@6.2.1:
resolution:
{
@ -1977,12 +1103,6 @@ packages:
}
engines: { node: ">=12" }
any-promise@1.3.0:
resolution:
{
integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==,
}
anymatch@3.1.3:
resolution:
{
@ -1996,23 +1116,18 @@ packages:
integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==,
}
argparse@1.0.10:
resolution:
{
integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==,
}
argparse@2.0.1:
resolution:
{
integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==,
}
aria-query@5.3.0:
aria-query@5.3.2:
resolution:
{
integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==,
integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==,
}
engines: { node: ">= 0.4" }
array-iterate@2.0.1:
resolution:
@ -2020,45 +1135,36 @@ packages:
integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==,
}
astring@1.8.6:
astring@1.9.0:
resolution:
{
integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==,
integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==,
}
hasBin: true
astro-expressive-code@0.35.3:
astro-expressive-code@0.41.3:
resolution:
{
integrity: sha512-f1L1m3J3EzZHDEox6TXmuKo5fTSbaNxE/HU0S0UQmvlCowtOKnU/LOsoDwsbQSYGKz+fdLRPsCjFMiKqEoyfcw==,
integrity: sha512-u+zHMqo/QNLE2eqYRCrK3+XMlKakv33Bzuz+56V1gs8H0y6TZ0hIi3VNbIxeTn51NLn+mJfUV/A0kMNfE4rANw==,
}
peerDependencies:
astro: ^4.0.0-beta || ^3.3.0
astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0
astro@4.8.6:
astro@5.17.1:
resolution:
{
integrity: sha512-psHIfK+e+bMPhRwghV9yCGH/uc1jvY4DHmDZdoEepax9yA7kzYH0wt3dpkqlcrO2zxl5jzSC3DmqZfkD6wnW9A==,
integrity: sha512-oD3tlxTaVWGq/Wfbqk6gxzVRz98xa/rYlpe+gU2jXJMSD01k6sEDL01ZlT8mVSYB/rMgnvIOfiQQ3BbLdN237A==,
}
engines:
{ node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: ">=9.6.5", pnpm: ">=7.1.0" }
{ node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: ">=9.6.5", pnpm: ">=7.1.0" }
hasBin: true
autoprefixer@10.4.19:
axobject-query@4.1.0:
resolution:
{
integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==,
}
engines: { node: ^10 || ^12 || >=14 }
hasBin: true
peerDependencies:
postcss: ^8.1.0
axobject-query@4.0.0:
resolution:
{
integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==,
integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==,
}
engines: { node: ">= 0.4" }
bail@2.0.2:
resolution:
@ -2066,12 +1172,6 @@ packages:
integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==,
}
balanced-match@1.0.2:
resolution:
{
integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==,
}
base-64@1.0.0:
resolution:
{
@ -2090,72 +1190,25 @@ packages:
integrity: sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==,
}
binary-extensions@2.2.0:
resolution:
{
integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==,
}
engines: { node: ">=8" }
boolbase@1.0.0:
resolution:
{
integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==,
}
boxen@7.1.1:
boxen@8.0.1:
resolution:
{
integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==,
integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==,
}
engines: { node: ">=14.16" }
engines: { node: ">=18" }
brace-expansion@1.1.11:
camelcase@8.0.0:
resolution:
{
integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==,
}
braces@3.0.2:
resolution:
{
integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==,
}
engines: { node: ">=8" }
browserslist@4.23.0:
resolution:
{
integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==,
}
engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 }
hasBin: true
camelcase-css@2.0.1:
resolution:
{
integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==,
}
engines: { node: ">= 6" }
camelcase@7.0.1:
resolution:
{
integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==,
}
engines: { node: ">=14.16" }
caniuse-api@3.0.0:
resolution:
{
integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==,
}
caniuse-lite@1.0.30001620:
resolution:
{
integrity: sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==,
integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==,
}
engines: { node: ">=16" }
ccount@2.0.1:
resolution:
@ -2163,17 +1216,10 @@ packages:
integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==,
}
chalk@2.4.2:
chalk@5.6.0:
resolution:
{
integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==,
}
engines: { node: ">=4" }
chalk@5.3.0:
resolution:
{
integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==,
integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==,
}
engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 }
@ -2201,24 +1247,17 @@ packages:
integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==,
}
chokidar@3.5.3:
chokidar@5.0.0:
resolution:
{
integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==,
integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==,
}
engines: { node: ">= 8.10.0" }
engines: { node: ">= 20.19.0" }
chokidar@3.6.0:
ci-info@4.4.0:
resolution:
{
integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==,
}
engines: { node: ">= 8.10.0" }
ci-info@4.0.0:
resolution:
{
integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==,
integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==,
}
engines: { node: ">=8" }
@ -2229,27 +1268,6 @@ packages:
}
engines: { node: ">=10" }
cli-cursor@4.0.0:
resolution:
{
integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==,
}
engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
cli-spinners@2.9.2:
resolution:
{
integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==,
}
engines: { node: ">=6" }
cliui@8.0.1:
resolution:
{
integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==,
}
engines: { node: ">=12" }
clsx@2.1.1:
resolution:
{
@ -2263,69 +1281,18 @@ packages:
integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==,
}
color-convert@1.9.3:
resolution:
{
integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==,
}
color-convert@2.0.1:
resolution:
{
integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==,
}
engines: { node: ">=7.0.0" }
color-name@1.1.3:
resolution:
{
integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==,
}
color-name@1.1.4:
resolution:
{
integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==,
}
color-string@1.9.1:
resolution:
{
integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==,
}
color@4.2.3:
resolution:
{
integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==,
}
engines: { node: ">=12.5.0" }
colord@2.9.3:
resolution:
{
integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==,
}
comma-separated-tokens@2.0.3:
resolution:
{
integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==,
}
commander@4.1.1:
commander@11.1.0:
resolution:
{
integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==,
integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==,
}
engines: { node: ">= 6" }
commander@7.2.0:
resolution:
{
integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==,
}
engines: { node: ">= 10" }
engines: { node: ">=16" }
common-ancestor-path@1.0.1:
resolution:
@ -2333,78 +1300,35 @@ packages:
integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==,
}
concat-map@0.0.1:
cookie-es@1.2.2:
resolution:
{
integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==,
integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==,
}
convert-source-map@2.0.0:
cookie@1.1.1:
resolution:
{
integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==,
integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==,
}
engines: { node: ">=18" }
crossws@0.3.5:
resolution:
{
integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==,
}
cookie@0.6.0:
css-select@5.2.2:
resolution:
{
integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==,
}
engines: { node: ">= 0.6" }
cross-spawn@7.0.3:
resolution:
{
integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==,
}
engines: { node: ">= 8" }
css-blank-pseudo@6.0.2:
resolution:
{
integrity: sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
css-declaration-sorter@7.2.0:
resolution:
{
integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.0.9
css-has-pseudo@6.0.5:
resolution:
{
integrity: sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
css-prefers-color-scheme@9.0.1:
resolution:
{
integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
css-select@5.1.0:
resolution:
{
integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==,
integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==,
}
css-selector-parser@3.0.4:
css-selector-parser@3.1.3:
resolution:
{
integrity: sha512-pnmS1dbKsz6KA4EW4BznyPL2xxkNDRg62hcD0v8g6DEw2W7hxOln5M953jsp9hmw5Dg57S6o/A8GOn37mbAgcQ==,
integrity: sha512-gJMigczVZqYAk0hPVzx/M4Hm1D9QOtqkdQk9005TNzDIUGzo5cnHEDiKUT7jGPximL/oYb+LIitcHFQ4aKupxg==,
}
css-tree@2.2.1:
@ -2414,26 +1338,20 @@ packages:
}
engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" }
css-tree@2.3.1:
css-tree@3.1.0:
resolution:
{
integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==,
integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==,
}
engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 }
css-what@6.1.0:
css-what@6.2.2:
resolution:
{
integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==,
integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==,
}
engines: { node: ">= 6" }
cssdb@8.0.1:
resolution:
{
integrity: sha512-diegY/vnOYmPXY0bOBj5jeHaiK8MMpjgPuipirY8pF9AthtqEXgqVdKF5tnb6RTc/ZdhQqG0TBnInQ5CbbUW7Q==,
}
cssesc@3.0.0:
resolution:
{
@ -2442,33 +1360,6 @@ packages:
engines: { node: ">=4" }
hasBin: true
cssnano-preset-default@7.0.1:
resolution:
{
integrity: sha512-Fumyr+uZMcjYQeuHssAZxn0cKj3cdQc5GcxkBcmEzISGB+UW9CLNlU4tBOJbJGcPukFDlicG32eFbrc8K9V5pw==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
cssnano-utils@5.0.0:
resolution:
{
integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
cssnano@7.0.1:
resolution:
{
integrity: sha512-917Mej/4SdI7b55atsli3sU4MOJ9XDoKgnlCtQtXYj8XUFcM3riTuYHyqBBnnskawW+zWwp0KxJzpEUodlpqUg==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
csso@5.0.5:
resolution:
{
@ -2476,10 +1367,10 @@ packages:
}
engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" }
debug@4.3.4:
debug@4.4.1:
resolution:
{
integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==,
integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==,
}
engines: { node: ">=6.0" }
peerDependencies:
@ -2488,10 +1379,28 @@ packages:
supports-color:
optional: true
decode-named-character-reference@1.0.2:
debug@4.4.3:
resolution:
{
integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==,
integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==,
}
engines: { node: ">=6.0" }
peerDependencies:
supports-color: "*"
peerDependenciesMeta:
supports-color:
optional: true
decode-named-character-reference@1.2.0:
resolution:
{
integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==,
}
defu@6.1.4:
resolution:
{
integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==,
}
dequal@2.0.3:
@ -2501,10 +1410,16 @@ packages:
}
engines: { node: ">=6" }
detect-libc@2.0.3:
destr@2.0.5:
resolution:
{
integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==,
integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==,
}
detect-libc@2.1.2:
resolution:
{
integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==,
}
engines: { node: ">=8" }
@ -2515,10 +1430,10 @@ packages:
}
engines: { node: ">=18" }
devalue@5.0.0:
devalue@5.6.2:
resolution:
{
integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==,
integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==,
}
devlop@1.1.0:
@ -2527,16 +1442,10 @@ packages:
integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==,
}
didyoumean@1.2.2:
diff@8.0.3:
resolution:
{
integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==,
}
diff@5.2.0:
resolution:
{
integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==,
integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==,
}
engines: { node: ">=0.3.1" }
@ -2572,41 +1481,23 @@ packages:
}
engines: { node: ">= 4" }
domutils@3.1.0:
domutils@3.2.2:
resolution:
{
integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==,
integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==,
}
dset@3.1.3:
dset@3.1.4:
resolution:
{
integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==,
integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==,
}
engines: { node: ">=4" }
eastasianwidth@0.2.0:
emoji-regex@10.4.0:
resolution:
{
integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==,
}
electron-to-chromium@1.4.773:
resolution:
{
integrity: sha512-87eHF+h3PlCRwbxVEAw9KtK3v7lWfc/sUDr0W76955AdYTG4bV/k0zrl585Qnj/skRMH2qOSiE+kqMeOQ+LOpw==,
}
emmet@2.4.6:
resolution:
{
integrity: sha512-dJfbdY/hfeTyf/Ef7Y7ubLYzkBvPQ912wPaeVYpAxvFxkEBf/+hJu4H6vhAvFN6HlxqedlfVn2x1S44FfQ97pg==,
}
emoji-regex@10.3.0:
resolution:
{
integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==,
integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==,
}
emoji-regex@8.0.0:
@ -2615,12 +1506,6 @@ packages:
integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==,
}
emoji-regex@9.2.2:
resolution:
{
integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==,
}
entities@4.5.0:
resolution:
{
@ -2628,48 +1513,39 @@ packages:
}
engines: { node: ">=0.12" }
es-module-lexer@1.4.1:
entities@6.0.1:
resolution:
{
integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==,
integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==,
}
engines: { node: ">=0.12" }
es-module-lexer@1.7.0:
resolution:
{
integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==,
}
es-module-lexer@1.5.2:
esast-util-from-estree@2.0.0:
resolution:
{
integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==,
integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==,
}
esbuild@0.20.2:
esast-util-from-js@2.0.1:
resolution:
{
integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==,
integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==,
}
engines: { node: ">=12" }
esbuild@0.25.9:
resolution:
{
integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==,
}
engines: { node: ">=18" }
hasBin: true
esbuild@0.21.3:
resolution:
{
integrity: sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw==,
}
engines: { node: ">=12" }
hasBin: true
escalade@3.1.1:
resolution:
{
integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==,
}
engines: { node: ">=6" }
escape-string-regexp@1.0.5:
resolution:
{
integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==,
}
engines: { node: ">=0.8.0" }
escape-string-regexp@5.0.0:
resolution:
{
@ -2677,14 +1553,6 @@ packages:
}
engines: { node: ">=12" }
esprima@4.0.1:
resolution:
{
integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==,
}
engines: { node: ">=4" }
hasBin: true
estree-util-attach-comments@3.0.0:
resolution:
{
@ -2703,6 +1571,12 @@ packages:
integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==,
}
estree-util-scope@1.0.0:
resolution:
{
integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==,
}
estree-util-to-js@2.0.0:
resolution:
{
@ -2715,6 +1589,12 @@ packages:
integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==,
}
estree-walker@2.0.2:
resolution:
{
integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==,
}
estree-walker@3.0.3:
resolution:
{
@ -2727,25 +1607,11 @@ packages:
integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==,
}
execa@8.0.1:
expressive-code@0.41.3:
resolution:
{
integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==,
integrity: sha512-YLnD62jfgBZYrXIPQcJ0a51Afv9h8VlWqEGK9uU2T5nL/5rb8SnA86+7+mgCZe5D34Tff5RNEA5hjNVJYHzrFg==,
}
engines: { node: ">=16.17" }
expressive-code@0.35.3:
resolution:
{
integrity: sha512-XjWWUCxS4uQjPoRM98R7SNWWIYlFEaOeHm1piWv+c7coHCekuWno81thsc3g/UJ+DajNtOEsIQIAAcsBQZ8LMg==,
}
extend-shallow@2.0.1:
resolution:
{
integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==,
}
engines: { node: ">=0.10.0" }
extend@3.0.2:
resolution:
@ -2753,45 +1619,17 @@ packages:
integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==,
}
fast-glob@3.3.2:
fdir@6.5.0:
resolution:
{
integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==,
}
engines: { node: ">=8.6.0" }
fastq@1.15.0:
resolution:
{
integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==,
}
fill-range@7.0.1:
resolution:
{
integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==,
}
engines: { node: ">=8" }
find-up@4.1.0:
resolution:
{
integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==,
}
engines: { node: ">=8" }
find-up@5.0.0:
resolution:
{
integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==,
}
engines: { node: ">=10" }
find-yarn-workspace-root2@1.2.16:
resolution:
{
integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==,
integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==,
}
engines: { node: ">=12.0.0" }
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
flattie@1.1.1:
resolution:
@ -2800,17 +1638,18 @@ packages:
}
engines: { node: ">=8" }
fraction.js@4.3.7:
fontace@0.4.1:
resolution:
{
integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==,
integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==,
}
fs.realpath@1.0.0:
fontkitten@1.0.2:
resolution:
{
integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==,
integrity: sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==,
}
engines: { node: ">=20" }
fsevents@2.3.3:
resolution:
@ -2820,99 +1659,24 @@ packages:
engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
os: [darwin]
function-bind@1.1.2:
get-east-asian-width@1.3.0:
resolution:
{
integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==,
}
gensync@1.0.0-beta.2:
resolution:
{
integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==,
}
engines: { node: ">=6.9.0" }
get-caller-file@2.0.5:
resolution:
{
integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==,
}
engines: { node: 6.* || 8.* || >= 10.* }
get-east-asian-width@1.2.0:
resolution:
{
integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==,
integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==,
}
engines: { node: ">=18" }
get-stream@8.0.1:
resolution:
{
integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==,
}
engines: { node: ">=16" }
github-slugger@2.0.0:
resolution:
{
integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==,
}
glob-parent@5.1.2:
h3@1.15.5:
resolution:
{
integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==,
integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==,
}
engines: { node: ">= 6" }
glob-parent@6.0.2:
resolution:
{
integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==,
}
engines: { node: ">=10.13.0" }
glob@7.1.6:
resolution:
{
integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==,
}
globals@11.12.0:
resolution:
{
integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==,
}
engines: { node: ">=4" }
graceful-fs@4.2.11:
resolution:
{
integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==,
}
gray-matter@4.0.3:
resolution:
{
integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==,
}
engines: { node: ">=6.0" }
has-flag@3.0.0:
resolution:
{
integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==,
}
engines: { node: ">=4" }
hasown@2.0.0:
resolution:
{
integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==,
}
engines: { node: ">= 0.4" }
hast-util-embedded@3.0.0:
resolution:
@ -2920,16 +1684,22 @@ packages:
integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==,
}
hast-util-from-html@2.0.1:
hast-util-format@1.1.0:
resolution:
{
integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==,
integrity: sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==,
}
hast-util-from-parse5@8.0.1:
hast-util-from-html@2.0.3:
resolution:
{
integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==,
integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==,
}
hast-util-from-parse5@8.0.3:
resolution:
{
integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==,
}
hast-util-has-property@3.0.0:
@ -2938,10 +1708,10 @@ packages:
integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==,
}
hast-util-is-body-ok-link@3.0.0:
hast-util-is-body-ok-link@3.0.1:
resolution:
{
integrity: sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w==,
integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==,
}
hast-util-is-element@3.0.0:
@ -2950,6 +1720,12 @@ packages:
integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==,
}
hast-util-minify-whitespace@1.0.1:
resolution:
{
integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==,
}
hast-util-parse-selector@4.0.0:
resolution:
{
@ -2962,40 +1738,34 @@ packages:
integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==,
}
hast-util-raw@9.0.1:
hast-util-raw@9.1.0:
resolution:
{
integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==,
integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==,
}
hast-util-select@6.0.2:
hast-util-select@6.0.4:
resolution:
{
integrity: sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==,
integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==,
}
hast-util-to-estree@3.1.0:
hast-util-to-estree@3.1.3:
resolution:
{
integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==,
integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==,
}
hast-util-to-html@9.0.0:
hast-util-to-html@9.0.5:
resolution:
{
integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==,
integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==,
}
hast-util-to-html@9.0.1:
hast-util-to-jsx-runtime@2.3.6:
resolution:
{
integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==,
}
hast-util-to-jsx-runtime@2.3.0:
resolution:
{
integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==,
integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==,
}
hast-util-to-parse5@8.0.0:
@ -3004,10 +1774,10 @@ packages:
integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==,
}
hast-util-to-string@3.0.0:
hast-util-to-string@3.0.1:
resolution:
{
integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==,
integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==,
}
hast-util-to-text@4.0.2:
@ -3022,16 +1792,10 @@ packages:
integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==,
}
hastscript@8.0.0:
hastscript@9.0.1:
resolution:
{
integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==,
}
hastscript@9.0.0:
resolution:
{
integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==,
integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==,
}
html-escaper@3.0.3:
@ -3046,53 +1810,46 @@ packages:
integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==,
}
html-whitespace-sensitive-tag-names@3.0.0:
html-whitespace-sensitive-tag-names@3.0.1:
resolution:
{
integrity: sha512-KlClZ3/Qy5UgvpvVvDomGhnQhNWH5INE8GwvSIQ9CWt1K0zbbXrl7eN5bWaafOZgtmO3jMPwUqmrmEwinhPq1w==,
integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==,
}
http-cache-semantics@4.1.1:
http-cache-semantics@4.2.0:
resolution:
{
integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==,
integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==,
}
human-signals@5.0.0:
i18next@23.16.8:
resolution:
{
integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==,
}
engines: { node: ">=16.17.0" }
import-meta-resolve@4.0.0:
resolution:
{
integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==,
integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==,
}
inflight@1.0.6:
import-meta-resolve@4.1.0:
resolution:
{
integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==,
integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==,
}
inherits@2.0.4:
import-meta-resolve@4.2.0:
resolution:
{
integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==,
integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==,
}
inline-style-parser@0.1.1:
inline-style-parser@0.2.4:
resolution:
{
integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==,
integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==,
}
inline-style-parser@0.2.2:
iron-webcrypto@1.2.1:
resolution:
{
integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==,
integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==,
}
is-alphabetical@2.0.1:
@ -3107,32 +1864,6 @@ packages:
integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==,
}
is-arrayish@0.3.2:
resolution:
{
integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==,
}
is-binary-path@2.1.0:
resolution:
{
integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==,
}
engines: { node: ">=8" }
is-buffer@2.0.5:
resolution:
{
integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==,
}
engines: { node: ">=4" }
is-core-module@2.13.1:
resolution:
{
integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==,
}
is-decimal@2.0.1:
resolution:
{
@ -3147,20 +1878,6 @@ packages:
engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
hasBin: true
is-extendable@0.1.1:
resolution:
{
integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==,
}
engines: { node: ">=0.10.0" }
is-extglob@2.1.1:
resolution:
{
integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==,
}
engines: { node: ">=0.10.0" }
is-fullwidth-code-point@3.0.0:
resolution:
{
@ -3168,13 +1885,6 @@ packages:
}
engines: { node: ">=8" }
is-glob@4.0.3:
resolution:
{
integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==,
}
engines: { node: ">=0.10.0" }
is-hexadecimal@2.0.1:
resolution:
{
@ -3189,20 +1899,6 @@ packages:
engines: { node: ">=14.16" }
hasBin: true
is-interactive@2.0.0:
resolution:
{
integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==,
}
engines: { node: ">=12" }
is-number@7.0.0:
resolution:
{
integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==,
}
engines: { node: ">=0.12.0" }
is-plain-obj@4.1.0:
resolution:
{
@ -3210,33 +1906,6 @@ packages:
}
engines: { node: ">=12" }
is-reference@3.0.2:
resolution:
{
integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==,
}
is-stream@3.0.0:
resolution:
{
integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==,
}
engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
is-unicode-supported@1.3.0:
resolution:
{
integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==,
}
engines: { node: ">=12" }
is-unicode-supported@2.0.0:
resolution:
{
integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==,
}
engines: { node: ">=18" }
is-wsl@3.1.0:
resolution:
{
@ -3244,32 +1913,6 @@ packages:
}
engines: { node: ">=16" }
isexe@2.0.0:
resolution:
{
integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==,
}
jiti@1.21.0:
resolution:
{
integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==,
}
hasBin: true
js-tokens@4.0.0:
resolution:
{
integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==,
}
js-yaml@3.14.1:
resolution:
{
integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==,
}
hasBin: true
js-yaml@4.1.0:
resolution:
{
@ -3277,35 +1920,13 @@ packages:
}
hasBin: true
jsesc@2.5.2:
js-yaml@4.1.1:
resolution:
{
integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==,
integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==,
}
engines: { node: ">=4" }
hasBin: true
json5@2.2.3:
resolution:
{
integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==,
}
engines: { node: ">=6" }
hasBin: true
jsonc-parser@2.3.1:
resolution:
{
integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==,
}
kind-of@6.0.3:
resolution:
{
integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==,
}
engines: { node: ">=0.10.0" }
kleur@3.0.3:
resolution:
{
@ -3320,72 +1941,12 @@ packages:
}
engines: { node: ">=6" }
lilconfig@2.1.0:
klona@2.0.6:
resolution:
{
integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==,
integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==,
}
engines: { node: ">=10" }
lilconfig@3.0.0:
resolution:
{
integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==,
}
engines: { node: ">=14" }
lilconfig@3.1.1:
resolution:
{
integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==,
}
engines: { node: ">=14" }
lines-and-columns@1.2.4:
resolution:
{
integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==,
}
load-yaml-file@0.2.0:
resolution:
{
integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==,
}
engines: { node: ">=6" }
locate-path@5.0.0:
resolution:
{
integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==,
}
engines: { node: ">=8" }
locate-path@6.0.0:
resolution:
{
integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==,
}
engines: { node: ">=10" }
lodash.memoize@4.1.2:
resolution:
{
integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==,
}
lodash.uniq@4.5.0:
resolution:
{
integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==,
}
log-symbols@6.0.0:
resolution:
{
integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==,
}
engines: { node: ">=18" }
engines: { node: ">= 8" }
longest-streak@3.1.0:
resolution:
@ -3393,23 +1954,29 @@ packages:
integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==,
}
lru-cache@5.1.1:
lru-cache@11.2.5:
resolution:
{
integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==,
integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==,
}
engines: { node: 20 || >=22 }
magic-string@0.30.18:
resolution:
{
integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==,
}
lru-cache@6.0.0:
magic-string@0.30.21:
resolution:
{
integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==,
integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==,
}
engines: { node: ">=10" }
magic-string@0.30.10:
magicast@0.5.2:
resolution:
{
integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==,
integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==,
}
markdown-extensions@2.0.0:
@ -3419,10 +1986,10 @@ packages:
}
engines: { node: ">=16" }
markdown-table@3.0.3:
markdown-table@3.0.4:
resolution:
{
integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==,
integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==,
}
mdast-util-definitions@6.0.0:
@ -3431,34 +1998,34 @@ packages:
integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==,
}
mdast-util-directive@3.0.0:
mdast-util-directive@3.1.0:
resolution:
{
integrity: sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==,
integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==,
}
mdast-util-find-and-replace@3.0.1:
mdast-util-find-and-replace@3.0.2:
resolution:
{
integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==,
integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==,
}
mdast-util-from-markdown@2.0.0:
mdast-util-from-markdown@2.0.2:
resolution:
{
integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==,
integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==,
}
mdast-util-gfm-autolink-literal@2.0.0:
mdast-util-gfm-autolink-literal@2.0.1:
resolution:
{
integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==,
integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==,
}
mdast-util-gfm-footnote@2.0.0:
mdast-util-gfm-footnote@2.1.0:
resolution:
{
integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==,
integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==,
}
mdast-util-gfm-strikethrough@2.0.0:
@ -3479,22 +2046,22 @@ packages:
integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==,
}
mdast-util-gfm@3.0.0:
mdast-util-gfm@3.1.0:
resolution:
{
integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==,
integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==,
}
mdast-util-mdx-expression@2.0.0:
mdast-util-mdx-expression@2.0.1:
resolution:
{
integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==,
integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==,
}
mdast-util-mdx-jsx@3.0.0:
mdast-util-mdx-jsx@3.2.0:
resolution:
{
integrity: sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==,
integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==,
}
mdast-util-mdx@3.0.0:
@ -3509,22 +2076,22 @@ packages:
integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==,
}
mdast-util-phrasing@4.0.0:
mdast-util-phrasing@4.1.0:
resolution:
{
integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==,
integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==,
}
mdast-util-to-hast@13.0.2:
mdast-util-to-hast@13.2.0:
resolution:
{
integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==,
integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==,
}
mdast-util-to-markdown@2.1.0:
mdast-util-to-markdown@2.1.2:
resolution:
{
integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==,
integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==,
}
mdast-util-to-string@4.0.0:
@ -3539,59 +2106,46 @@ packages:
integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==,
}
mdn-data@2.0.30:
mdn-data@2.12.2:
resolution:
{
integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==,
integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==,
}
merge-stream@2.0.0:
micromark-core-commonmark@2.0.3:
resolution:
{
integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==,
integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==,
}
merge2@1.4.1:
micromark-extension-directive@3.0.2:
resolution:
{
integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==,
}
engines: { node: ">= 8" }
micromark-core-commonmark@2.0.0:
resolution:
{
integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==,
integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==,
}
micromark-extension-directive@3.0.0:
micromark-extension-gfm-autolink-literal@2.1.0:
resolution:
{
integrity: sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==,
integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==,
}
micromark-extension-gfm-autolink-literal@2.0.0:
micromark-extension-gfm-footnote@2.1.0:
resolution:
{
integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==,
integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==,
}
micromark-extension-gfm-footnote@2.0.0:
micromark-extension-gfm-strikethrough@2.1.0:
resolution:
{
integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==,
integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==,
}
micromark-extension-gfm-strikethrough@2.0.0:
micromark-extension-gfm-table@2.1.1:
resolution:
{
integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==,
}
micromark-extension-gfm-table@2.0.0:
resolution:
{
integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==,
integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==,
}
micromark-extension-gfm-tagfilter@2.0.0:
@ -3600,10 +2154,10 @@ packages:
integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==,
}
micromark-extension-gfm-task-list-item@2.0.1:
micromark-extension-gfm-task-list-item@2.1.0:
resolution:
{
integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==,
integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==,
}
micromark-extension-gfm@3.0.0:
@ -3612,16 +2166,16 @@ packages:
integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==,
}
micromark-extension-mdx-expression@3.0.0:
micromark-extension-mdx-expression@3.0.1:
resolution:
{
integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==,
integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==,
}
micromark-extension-mdx-jsx@3.0.0:
micromark-extension-mdx-jsx@3.0.2:
resolution:
{
integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==,
integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==,
}
micromark-extension-mdx-md@2.0.0:
@ -3642,208 +2196,182 @@ packages:
integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==,
}
micromark-factory-destination@2.0.0:
micromark-factory-destination@2.0.1:
resolution:
{
integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==,
integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==,
}
micromark-factory-label@2.0.0:
micromark-factory-label@2.0.1:
resolution:
{
integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==,
integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==,
}
micromark-factory-mdx-expression@2.0.1:
micromark-factory-mdx-expression@2.0.3:
resolution:
{
integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==,
integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==,
}
micromark-factory-space@2.0.0:
micromark-factory-space@2.0.1:
resolution:
{
integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==,
integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==,
}
micromark-factory-title@2.0.0:
micromark-factory-title@2.0.1:
resolution:
{
integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==,
integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==,
}
micromark-factory-whitespace@2.0.0:
micromark-factory-whitespace@2.0.1:
resolution:
{
integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==,
integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==,
}
micromark-util-character@2.0.1:
micromark-util-character@2.1.1:
resolution:
{
integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==,
integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==,
}
micromark-util-chunked@2.0.0:
micromark-util-chunked@2.0.1:
resolution:
{
integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==,
integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==,
}
micromark-util-classify-character@2.0.0:
micromark-util-classify-character@2.0.1:
resolution:
{
integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==,
integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==,
}
micromark-util-combine-extensions@2.0.0:
micromark-util-combine-extensions@2.0.1:
resolution:
{
integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==,
integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==,
}
micromark-util-decode-numeric-character-reference@2.0.1:
micromark-util-decode-numeric-character-reference@2.0.2:
resolution:
{
integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==,
integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==,
}
micromark-util-decode-string@2.0.0:
micromark-util-decode-string@2.0.1:
resolution:
{
integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==,
integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==,
}
micromark-util-encode@2.0.0:
micromark-util-encode@2.0.1:
resolution:
{
integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==,
integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==,
}
micromark-util-events-to-acorn@2.0.2:
micromark-util-events-to-acorn@2.0.3:
resolution:
{
integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==,
integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==,
}
micromark-util-html-tag-name@2.0.0:
micromark-util-html-tag-name@2.0.1:
resolution:
{
integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==,
integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==,
}
micromark-util-normalize-identifier@2.0.0:
micromark-util-normalize-identifier@2.0.1:
resolution:
{
integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==,
integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==,
}
micromark-util-resolve-all@2.0.0:
micromark-util-resolve-all@2.0.1:
resolution:
{
integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==,
integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==,
}
micromark-util-sanitize-uri@2.0.0:
micromark-util-sanitize-uri@2.0.1:
resolution:
{
integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==,
integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==,
}
micromark-util-subtokenize@2.0.0:
micromark-util-subtokenize@2.1.0:
resolution:
{
integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==,
integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==,
}
micromark-util-symbol@2.0.0:
micromark-util-symbol@2.0.1:
resolution:
{
integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==,
integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==,
}
micromark-util-types@2.0.0:
micromark-util-types@2.0.2:
resolution:
{
integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==,
integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==,
}
micromark@4.0.0:
micromark@4.0.2:
resolution:
{
integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==,
integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==,
}
micromatch@4.0.5:
mrmime@2.0.1:
resolution:
{
integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==,
}
engines: { node: ">=8.6" }
mimic-fn@2.1.0:
resolution:
{
integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==,
}
engines: { node: ">=6" }
mimic-fn@4.0.0:
resolution:
{
integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==,
}
engines: { node: ">=12" }
minimatch@3.1.2:
resolution:
{
integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==,
}
mrmime@2.0.0:
resolution:
{
integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==,
integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==,
}
engines: { node: ">=10" }
ms@2.1.2:
ms@2.1.3:
resolution:
{
integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==,
integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==,
}
muggle-string@0.4.1:
nanoid@3.3.11:
resolution:
{
integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==,
}
mz@2.7.0:
resolution:
{
integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==,
}
nanoid@3.3.7:
resolution:
{
integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==,
integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==,
}
engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 }
hasBin: true
nlcst-to-string@3.1.1:
neotraverse@0.6.18:
resolution:
{
integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==,
integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==,
}
engines: { node: ">= 10" }
nlcst-to-string@4.0.0:
resolution:
{
integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==,
}
node-releases@2.0.14:
node-fetch-native@1.6.7:
resolution:
{
integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==,
integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==,
}
node-mock-http@1.0.4:
resolution:
{
integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==,
}
normalize-path@3.0.0:
@ -3853,210 +2381,104 @@ packages:
}
engines: { node: ">=0.10.0" }
normalize-range@0.1.2:
resolution:
{
integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==,
}
engines: { node: ">=0.10.0" }
not@0.1.0:
resolution:
{
integrity: sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==,
}
npm-run-path@5.1.0:
resolution:
{
integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==,
}
engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
nth-check@2.1.1:
resolution:
{
integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==,
}
object-assign@4.1.1:
ofetch@1.5.1:
resolution:
{
integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==,
}
engines: { node: ">=0.10.0" }
object-hash@3.0.0:
resolution:
{
integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==,
}
engines: { node: ">= 6" }
once@1.4.0:
resolution:
{
integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==,
integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==,
}
onetime@5.1.2:
ohash@2.0.11:
resolution:
{
integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==,
integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==,
}
engines: { node: ">=6" }
onetime@6.0.0:
oniguruma-parser@0.12.1:
resolution:
{
integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==,
integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==,
}
engines: { node: ">=12" }
ora@8.0.1:
oniguruma-to-es@4.3.3:
resolution:
{
integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==,
integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==,
}
oniguruma-to-es@4.3.4:
resolution:
{
integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==,
}
p-limit@6.2.0:
resolution:
{
integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==,
}
engines: { node: ">=18" }
p-limit@2.3.0:
p-queue@8.1.1:
resolution:
{
integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==,
}
engines: { node: ">=6" }
p-limit@3.1.0:
resolution:
{
integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==,
}
engines: { node: ">=10" }
p-limit@5.0.0:
resolution:
{
integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==,
integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==,
}
engines: { node: ">=18" }
p-locate@4.1.0:
p-timeout@6.1.4:
resolution:
{
integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==,
}
engines: { node: ">=8" }
p-locate@5.0.0:
resolution:
{
integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==,
}
engines: { node: ">=10" }
p-queue@8.0.1:
resolution:
{
integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==,
}
engines: { node: ">=18" }
p-timeout@6.1.2:
resolution:
{
integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==,
integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==,
}
engines: { node: ">=14.16" }
p-try@2.2.0:
package-manager-detector@1.6.0:
resolution:
{
integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==,
integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==,
}
engines: { node: ">=6" }
pagefind@1.0.4:
pagefind@1.3.0:
resolution:
{
integrity: sha512-oRIizYe+zSI2Jw4zcMU0ebDZm27751hRFiSOBLwc1OIYMrsZKk+3m8p9EVaOmc6zZdtqwwdilNUNxXvBeHcP9w==,
integrity: sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw==,
}
hasBin: true
parse-entities@4.0.1:
parse-entities@4.0.2:
resolution:
{
integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==,
integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==,
}
parse-latin@5.0.1:
parse-latin@7.0.0:
resolution:
{
integrity: sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==,
integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==,
}
parse5@7.1.2:
parse5@7.3.0:
resolution:
{
integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==,
integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==,
}
path-browserify@1.0.1:
piccolore@0.1.3:
resolution:
{
integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==,
integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==,
}
path-exists@4.0.0:
picocolors@1.1.1:
resolution:
{
integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==,
}
engines: { node: ">=8" }
path-is-absolute@1.0.1:
resolution:
{
integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==,
}
engines: { node: ">=0.10.0" }
path-key@3.1.1:
resolution:
{
integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==,
}
engines: { node: ">=8" }
path-key@4.0.0:
resolution:
{
integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==,
}
engines: { node: ">=12" }
path-parse@1.0.7:
resolution:
{
integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==,
}
path-to-regexp@6.2.2:
resolution:
{
integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==,
}
periscopic@3.1.0:
resolution:
{
integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==,
}
picocolors@1.0.0:
resolution:
{
integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==,
integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==,
}
picomatch@2.3.1:
@ -4066,602 +2488,40 @@ packages:
}
engines: { node: ">=8.6" }
pify@2.3.0:
picomatch@4.0.3:
resolution:
{
integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==,
integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==,
}
engines: { node: ">=0.10.0" }
engines: { node: ">=12" }
pify@4.0.1:
postcss-nested@6.2.0:
resolution:
{
integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==,
}
engines: { node: ">=6" }
pirates@4.0.6:
resolution:
{
integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==,
}
engines: { node: ">= 6" }
pkg-dir@4.2.0:
resolution:
{
integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==,
}
engines: { node: ">=8" }
postcss-attribute-case-insensitive@6.0.3:
resolution:
{
integrity: sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-calc@10.0.0:
resolution:
{
integrity: sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==,
}
engines: { node: ^18.12 || ^20.9 || >=22.0 }
peerDependencies:
postcss: ^8.4.38
postcss-clamp@4.1.0:
resolution:
{
integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==,
}
engines: { node: ">=7.6.0" }
peerDependencies:
postcss: ^8.4.6
postcss-color-functional-notation@6.0.11:
resolution:
{
integrity: sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-color-hex-alpha@9.0.4:
resolution:
{
integrity: sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-color-rebeccapurple@9.0.3:
resolution:
{
integrity: sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-colormin@7.0.0:
resolution:
{
integrity: sha512-5CN6fqtsEtEtwf3mFV3B4UaZnlYljPpzmGeDB4yCK067PnAtfLe9uX2aFZaEwxHE7HopG5rUkW8gyHrNAesHEg==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-convert-values@7.0.0:
resolution:
{
integrity: sha512-bMuzDgXBbFbByPgj+/r6va8zNuIDUaIIbvAFgdO1t3zdgJZ77BZvu6dfWyd6gHEJnYzmeVr9ayUsAQL3/qLJ0w==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-custom-media@10.0.6:
resolution:
{
integrity: sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-custom-properties@13.3.10:
resolution:
{
integrity: sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-custom-selectors@7.1.10:
resolution:
{
integrity: sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-dir-pseudo-class@8.0.1:
resolution:
{
integrity: sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-discard-comments@7.0.0:
resolution:
{
integrity: sha512-xpSdzRqYmy4YIVmjfGyYXKaI1SRnK6CTr+4Zmvyof8ANwvgfZgGdVtmgAvzh59gJm808mJCWQC9tFN0KF5dEXA==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-discard-duplicates@7.0.0:
resolution:
{
integrity: sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-discard-empty@7.0.0:
resolution:
{
integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-discard-overridden@7.0.0:
resolution:
{
integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-double-position-gradients@5.0.6:
resolution:
{
integrity: sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-focus-visible@9.0.1:
resolution:
{
integrity: sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-focus-within@8.0.1:
resolution:
{
integrity: sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-font-variant@5.0.0:
resolution:
{
integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==,
}
peerDependencies:
postcss: ^8.1.0
postcss-gap-properties@5.0.1:
resolution:
{
integrity: sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-image-set-function@6.0.3:
resolution:
{
integrity: sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-import@15.1.0:
resolution:
{
integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==,
}
engines: { node: ">=14.0.0" }
peerDependencies:
postcss: ^8.0.0
postcss-js@4.0.1:
resolution:
{
integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==,
}
engines: { node: ^12 || ^14 || >= 16 }
peerDependencies:
postcss: ^8.4.21
postcss-lab-function@6.0.16:
resolution:
{
integrity: sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-load-config@4.0.2:
resolution:
{
integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==,
}
engines: { node: ">= 14" }
peerDependencies:
postcss: ">=8.0.9"
ts-node: ">=9.0.0"
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
postcss-logical@7.0.1:
resolution:
{
integrity: sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-merge-longhand@7.0.0:
resolution:
{
integrity: sha512-0X8I4/9+G03X5/5NnrfopG/YEln2XU8heDh7YqBaiq2SeaKIG3n66ShZPjIolmVuLBQ0BEm3yS8o1mlCLHdW7A==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-merge-rules@7.0.0:
resolution:
{
integrity: sha512-Zty3VlOsD6VSjBMu6PiHCVpLegtBT/qtZRVBcSeyEZ6q1iU5qTYT0WtEoLRV+YubZZguS5/ycfP+NRiKfjv6aw==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-minify-font-values@7.0.0:
resolution:
{
integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-minify-gradients@7.0.0:
resolution:
{
integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-minify-params@7.0.0:
resolution:
{
integrity: sha512-XOJAuX8Q/9GT1sGxlUvaFEe2H9n50bniLZblXXsAT/BwSfFYvzSZeFG7uupwc0KbKpTnflnQ7aMwGzX6JUWliQ==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-minify-selectors@7.0.0:
resolution:
{
integrity: sha512-f00CExZhD6lNw2vTZbcnmfxVgaVKzUw6IRsIFX3JTT8GdsoABc1WnhhGwL1i8YPJ3sSWw39fv7XPtvLb+3Uitw==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-nested@6.0.1:
resolution:
{
integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==,
integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==,
}
engines: { node: ">=12.0" }
peerDependencies:
postcss: ^8.2.14
postcss-nesting@12.1.4:
postcss-selector-parser@6.1.2:
resolution:
{
integrity: sha512-CcHOq94K137E+U4Ommu7pexcpp0Tjm24zl4UcqWs1oSLAr5cLI+jLrqQ5h/bdjhMX6cMbzunyustVNnvrzF8Zg==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-normalize-charset@7.0.0:
resolution:
{
integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-normalize-display-values@7.0.0:
resolution:
{
integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-normalize-positions@7.0.0:
resolution:
{
integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-normalize-repeat-style@7.0.0:
resolution:
{
integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-normalize-string@7.0.0:
resolution:
{
integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-normalize-timing-functions@7.0.0:
resolution:
{
integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-normalize-unicode@7.0.0:
resolution:
{
integrity: sha512-OnKV52/VFFDAim4n0pdI+JAhsolLBdnCKxE6VV5lW5Q/JeVGFN8UM8ur6/A3EAMLsT1ZRm3fDHh/rBoBQpqi2w==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-normalize-url@7.0.0:
resolution:
{
integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-normalize-whitespace@7.0.0:
resolution:
{
integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-opacity-percentage@2.0.0:
resolution:
{
integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.2
postcss-ordered-values@7.0.0:
resolution:
{
integrity: sha512-KROvC63A8UQW1eYDljQe1dtwc1E/M+mMwDT6z7khV/weHYLWTghaLRLunU7x1xw85lWFwVZOAGakxekYvKV+0w==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-overflow-shorthand@5.0.1:
resolution:
{
integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-page-break@3.0.4:
resolution:
{
integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==,
}
peerDependencies:
postcss: ^8
postcss-place@9.0.1:
resolution:
{
integrity: sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-preset-env@9.5.13:
resolution:
{
integrity: sha512-YQMwWu6MAc4Envrjf/mW2BTrb5J8WkrJ4dV2VostZVDhrmEPpYREOyhmvtlFLDxK1/AmTDY8aXjZViMC1qKu/w==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-pseudo-class-any-link@9.0.2:
resolution:
{
integrity: sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-reduce-initial@7.0.0:
resolution:
{
integrity: sha512-iqGgmBxY9LrblZ0BKLjmrA1mC/cf9A/wYCCqSmD6tMi+xAyVl0+DfixZIHSVDMbCPRPjNmVF0DFGth/IDGelFQ==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-reduce-transforms@7.0.0:
resolution:
{
integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-replace-overflow-wrap@4.0.0:
resolution:
{
integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==,
}
peerDependencies:
postcss: ^8.0.3
postcss-selector-not@7.0.2:
resolution:
{
integrity: sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==,
}
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss: ^8.4
postcss-selector-parser@6.0.13:
resolution:
{
integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==,
integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==,
}
engines: { node: ">=4" }
postcss-selector-parser@6.0.16:
postcss@8.5.6:
resolution:
{
integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==,
}
engines: { node: ">=4" }
postcss-svgo@7.0.0:
resolution:
{
integrity: sha512-Xj5DRdvA97yRy3wjbCH2NKXtDUwEnph6EHr5ZXszsBVKCNrKXYBjzAXqav7/Afz5WwJ/1peZoTguCEJIg7ytmA==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >= 18 }
peerDependencies:
postcss: ^8.4.31
postcss-unique-selectors@7.0.0:
resolution:
{
integrity: sha512-NYFqcft7vVQMZlQPsMdMPy+qU/zDpy95Malpw4GeA9ZZjM6dVXDshXtDmLc0m4WCD6XeZCJqjTfPT1USsdt+rA==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
postcss-value-parser@4.2.0:
resolution:
{
integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==,
}
postcss@8.4.31:
resolution:
{
integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==,
integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==,
}
engines: { node: ^10 || ^12 || >=14 }
postcss@8.4.33:
prismjs@1.30.0:
resolution:
{
integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==,
}
engines: { node: ^10 || ^12 || >=14 }
postcss@8.4.38:
resolution:
{
integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==,
}
engines: { node: ^10 || ^12 || >=14 }
preferred-pm@3.1.3:
resolution:
{
integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==,
}
engines: { node: ">=10" }
prismjs@1.29.0:
resolution:
{
integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==,
integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==,
}
engines: { node: ">=6" }
@ -4672,53 +2532,91 @@ packages:
}
engines: { node: ">= 6" }
property-information@6.4.0:
property-information@6.5.0:
resolution:
{
integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==,
integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==,
}
queue-microtask@1.2.3:
property-information@7.1.0:
resolution:
{
integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==,
integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==,
}
read-cache@1.0.0:
radix3@1.1.2:
resolution:
{
integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==,
integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==,
}
readdirp@3.6.0:
readdirp@5.0.0:
resolution:
{
integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==,
integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==,
}
engines: { node: ">=8.10.0" }
engines: { node: ">= 20.19.0" }
rehype-expressive-code@0.35.3:
recma-build-jsx@1.0.0:
resolution:
{
integrity: sha512-kj43Rg+WzYUs8RRr6XyBr60pnrIZEgbmn9yJoV6qka1UDpcx7r8icn6Q2uSAgaLtlEUy+HCPgQJraOZrA53LOQ==,
integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==,
}
rehype-format@5.0.0:
recma-jsx@1.0.1:
resolution:
{
integrity: sha512-kM4II8krCHmUhxrlvzFSptvaWh280Fr7UGNJU5DCMuvmAwGCNmGfi9CvFAQK6JDjsNoRMWQStglK3zKJH685Wg==,
integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==,
}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
recma-parse@1.0.0:
resolution:
{
integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==,
}
rehype-minify-whitespace@6.0.0:
recma-stringify@1.0.0:
resolution:
{
integrity: sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA==,
integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==,
}
rehype-parse@9.0.0:
regex-recursion@6.0.2:
resolution:
{
integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==,
integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==,
}
regex-utilities@2.3.0:
resolution:
{
integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==,
}
regex@6.0.1:
resolution:
{
integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==,
}
rehype-expressive-code@0.41.3:
resolution:
{
integrity: sha512-8d9Py4c/V6I/Od2VIXFAdpiO2kc0SV2qTJsRAaqSIcM9aruW4ASLNe2kOEo1inXAAkIhpFzAHTc358HKbvpNUg==,
}
rehype-format@5.0.1:
resolution:
{
integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==,
}
rehype-parse@9.0.1:
resolution:
{
integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==,
}
rehype-raw@7.0.0:
@ -4727,34 +2625,40 @@ packages:
integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==,
}
rehype-stringify@10.0.0:
rehype-recma@1.0.0:
resolution:
{
integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==,
integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==,
}
rehype@13.0.1:
rehype-stringify@10.0.1:
resolution:
{
integrity: sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==,
integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==,
}
remark-directive@3.0.0:
rehype@13.0.2:
resolution:
{
integrity: sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==,
integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==,
}
remark-gfm@4.0.0:
remark-directive@3.0.1:
resolution:
{
integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==,
integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==,
}
remark-mdx@3.0.0:
remark-gfm@4.0.1:
resolution:
{
integrity: sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==,
integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==,
}
remark-mdx@3.1.0:
resolution:
{
integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==,
}
remark-parse@11.0.0:
@ -4763,18 +2667,18 @@ packages:
integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==,
}
remark-rehype@11.1.0:
remark-rehype@11.1.2:
resolution:
{
integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==,
integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==,
}
remark-smartypants@2.0.0:
remark-smartypants@3.0.2:
resolution:
{
integrity: sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==,
integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==,
}
engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
engines: { node: ">=16.0.0" }
remark-stringify@11.0.0:
resolution:
@ -4782,158 +2686,69 @@ packages:
integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==,
}
request-light@0.7.0:
retext-latin@4.0.0:
resolution:
{
integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==,
integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==,
}
require-directory@2.1.1:
retext-smartypants@6.2.0:
resolution:
{
integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==,
}
engines: { node: ">=0.10.0" }
resolve@1.22.8:
resolution:
{
integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==,
}
hasBin: true
restore-cursor@4.0.0:
resolution:
{
integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==,
}
engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
retext-latin@3.1.0:
resolution:
{
integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==,
integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==,
}
retext-smartypants@5.2.0:
retext-stringify@4.0.0:
resolution:
{
integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==,
integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==,
}
retext-stringify@3.1.0:
retext@9.0.0:
resolution:
{
integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==,
integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==,
}
retext@8.1.0:
rollup@4.48.1:
resolution:
{
integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==,
}
reusify@1.0.4:
resolution:
{
integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==,
}
engines: { iojs: ">=1.0.0", node: ">=0.10.0" }
rollup@4.17.2:
resolution:
{
integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==,
integrity: sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg==,
}
engines: { node: ">=18.0.0", npm: ">=8.0.0" }
hasBin: true
run-parallel@1.2.0:
sax@1.4.1:
resolution:
{
integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==,
integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==,
}
sax@1.3.0:
semver@7.7.4:
resolution:
{
integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==,
}
section-matter@1.0.0:
resolution:
{
integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==,
}
engines: { node: ">=4" }
semver@6.3.1:
resolution:
{
integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==,
}
hasBin: true
semver@7.5.4:
resolution:
{
integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==,
integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==,
}
engines: { node: ">=10" }
hasBin: true
semver@7.6.2:
sharp@0.34.5:
resolution:
{
integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==,
integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==,
}
engines: { node: ">=10" }
hasBin: true
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
sharp@0.33.4:
shiki@3.11.0:
resolution:
{
integrity: sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==,
}
engines: { libvips: ">=8.15.2", node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
shebang-command@2.0.0:
resolution:
{
integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==,
}
engines: { node: ">=8" }
shebang-regex@3.0.0:
resolution:
{
integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==,
}
engines: { node: ">=8" }
shiki@1.5.2:
resolution:
{
integrity: sha512-fpPbuSaatinmdGijE7VYUD3hxLozR3ZZ+iAx8Iy2X6REmJGyF5hQl94SgmiUNTospq346nXUVZx0035dyGvIVw==,
integrity: sha512-VgKumh/ib38I1i3QkMn6mAQA6XjjQubqaAYhfge71glAll0/4xnt8L2oSuC45Qcr/G5Kbskj4RliMQddGmy/Og==,
}
signal-exit@3.0.7:
shiki@3.22.0:
resolution:
{
integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==,
}
signal-exit@4.1.0:
resolution:
{
integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==,
}
engines: { node: ">=14" }
simple-swizzle@0.2.2:
resolution:
{
integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==,
integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==,
}
sisteransi@1.0.5:
@ -4942,34 +2757,42 @@ packages:
integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==,
}
sitemap@7.1.1:
sitemap@8.0.0:
resolution:
{
integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==,
integrity: sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==,
}
engines: { node: ">=12.0.0", npm: ">=5.6.0" }
engines: { node: ">=14.0.0", npm: ">=6.0.0" }
deprecated: "SECURITY: Multiple vulnerabilities fixed in 8.0.1 (XML injection, path traversal, command injection, protocol injection). Upgrade immediately: npm install sitemap@8.0.1"
hasBin: true
source-map-js@1.0.2:
smol-toml@1.4.2:
resolution:
{
integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==,
integrity: sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==,
}
engines: { node: ">= 18" }
smol-toml@1.6.0:
resolution:
{
integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==,
}
engines: { node: ">= 18" }
source-map-js@1.2.1:
resolution:
{
integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==,
}
engines: { node: ">=0.10.0" }
source-map-js@1.2.0:
source-map@0.7.6:
resolution:
{
integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==,
integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==,
}
engines: { node: ">=0.10.0" }
source-map@0.7.4:
resolution:
{
integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==,
}
engines: { node: ">= 8" }
engines: { node: ">= 12" }
space-separated-tokens@2.0.2:
resolution:
@ -4977,19 +2800,12 @@ packages:
integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==,
}
sprintf-js@1.0.3:
stream-replace-string@2.0.0:
resolution:
{
integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==,
integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==,
}
stdin-discarder@0.2.2:
resolution:
{
integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==,
}
engines: { node: ">=18" }
string-width@4.2.3:
resolution:
{
@ -4997,24 +2813,17 @@ packages:
}
engines: { node: ">=8" }
string-width@5.1.2:
string-width@7.2.0:
resolution:
{
integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==,
}
engines: { node: ">=12" }
string-width@7.1.0:
resolution:
{
integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==,
integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==,
}
engines: { node: ">=18" }
stringify-entities@4.0.3:
stringify-entities@4.0.4:
resolution:
{
integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==,
integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==,
}
strip-ansi@6.0.1:
@ -5031,112 +2840,45 @@ packages:
}
engines: { node: ">=12" }
strip-bom-string@1.0.0:
style-to-js@1.1.17:
resolution:
{
integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==,
}
engines: { node: ">=0.10.0" }
strip-bom@3.0.0:
resolution:
{
integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==,
}
engines: { node: ">=4" }
strip-final-newline@3.0.0:
resolution:
{
integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==,
}
engines: { node: ">=12" }
style-to-object@0.4.4:
resolution:
{
integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==,
integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==,
}
style-to-object@1.0.5:
style-to-object@1.0.9:
resolution:
{
integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==,
integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==,
}
stylehacks@7.0.0:
svgo@4.0.0:
resolution:
{
integrity: sha512-47Nw4pQ6QJb4CA6dzF2m9810sjQik4dfk4UwAm5wlwhrW3syzZKF8AR4/cfO3Cr6lsFgAoznQq0Wg57qhjTA2A==,
integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==,
}
engines: { node: ^18.12.0 || ^20.9.0 || >=22.0 }
peerDependencies:
postcss: ^8.4.31
sucrase@3.34.0:
resolution:
{
integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==,
}
engines: { node: ">=8" }
engines: { node: ">=16" }
hasBin: true
supports-color@5.5.0:
tiny-inflate@1.0.3:
resolution:
{
integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==,
}
engines: { node: ">=4" }
supports-preserve-symlinks-flag@1.0.0:
resolution:
{
integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==,
}
engines: { node: ">= 0.4" }
svgo@3.3.2:
resolution:
{
integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==,
}
engines: { node: ">=14.0.0" }
hasBin: true
tailwindcss@3.4.3:
resolution:
{
integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==,
}
engines: { node: ">=14.0.0" }
hasBin: true
thenify-all@1.6.0:
resolution:
{
integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==,
}
engines: { node: ">=0.8" }
thenify@3.3.1:
resolution:
{
integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==,
integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==,
}
to-fast-properties@2.0.0:
tinyexec@1.0.2:
resolution:
{
integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==,
integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==,
}
engines: { node: ">=4" }
engines: { node: ">=18" }
to-regex-range@5.0.1:
tinyglobby@0.2.15:
resolution:
{
integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==,
integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==,
}
engines: { node: ">=8.0" }
engines: { node: ">=12.0.0" }
trim-lines@3.0.1:
resolution:
@ -5144,22 +2886,16 @@ packages:
integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==,
}
trough@2.1.0:
trough@2.2.0:
resolution:
{
integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==,
integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==,
}
ts-interface-checker@0.1.13:
tsconfck@3.1.6:
resolution:
{
integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==,
}
tsconfck@3.0.3:
resolution:
{
integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==,
integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==,
}
engines: { node: ^18 || >=20 }
hasBin: true
@ -5169,55 +2905,67 @@ packages:
typescript:
optional: true
tslib@2.6.2:
tslib@2.8.1:
resolution:
{
integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==,
integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==,
}
type-fest@2.19.0:
type-fest@4.41.0:
resolution:
{
integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==,
integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==,
}
engines: { node: ">=12.20" }
engines: { node: ">=16" }
typesafe-path@0.2.2:
typescript@5.9.2:
resolution:
{
integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==,
}
typescript-auto-import-cache@0.3.2:
resolution:
{
integrity: sha512-+laqe5SFL1vN62FPOOJSUDTZxtgsoOXjneYOXIpx5rQ4UMiN89NAtJLpqLqyebv9fgQ/IMeeTX+mQyRnwvJzvg==,
}
typescript@5.4.5:
resolution:
{
integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==,
integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==,
}
engines: { node: ">=14.17" }
hasBin: true
unherit@3.0.1:
ufo@1.6.1:
resolution:
{
integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==,
integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==,
}
unified@10.1.2:
ufo@1.6.3:
resolution:
{
integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==,
integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==,
}
unified@11.0.4:
ultrahtml@1.6.0:
resolution:
{
integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==,
integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==,
}
uncrypto@0.1.3:
resolution:
{
integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==,
}
undici-types@7.10.0:
resolution:
{
integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==,
}
unified@11.0.5:
resolution:
{
integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==,
}
unifont@0.7.3:
resolution:
{
integrity: sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==,
}
unist-util-find-after@5.0.0:
@ -5226,22 +2974,16 @@ packages:
integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==,
}
unist-util-is@5.2.1:
resolution:
{
integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==,
}
unist-util-is@6.0.0:
resolution:
{
integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==,
}
unist-util-modify-children@3.1.1:
unist-util-modify-children@4.0.0:
resolution:
{
integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==,
integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==,
}
unist-util-position-from-estree@2.0.0:
@ -5262,28 +3004,16 @@ packages:
integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==,
}
unist-util-stringify-position@3.0.3:
resolution:
{
integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==,
}
unist-util-stringify-position@4.0.0:
resolution:
{
integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==,
}
unist-util-visit-children@2.0.2:
unist-util-visit-children@3.0.0:
resolution:
{
integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==,
}
unist-util-visit-parents@5.1.3:
resolution:
{
integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==,
integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==,
}
unist-util-visit-parents@6.0.1:
@ -5292,10 +3022,10 @@ packages:
integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==,
}
unist-util-visit@4.1.2:
unist-util-visit-parents@6.0.2:
resolution:
{
integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==,
integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==,
}
unist-util-visit@5.0.0:
@ -5304,14 +3034,70 @@ packages:
integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==,
}
update-browserslist-db@1.0.13:
unstorage@1.17.4:
resolution:
{
integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==,
integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==,
}
hasBin: true
peerDependencies:
browserslist: ">= 4.21.0"
"@azure/app-configuration": ^1.8.0
"@azure/cosmos": ^4.2.0
"@azure/data-tables": ^13.3.0
"@azure/identity": ^4.6.0
"@azure/keyvault-secrets": ^4.9.0
"@azure/storage-blob": ^12.26.0
"@capacitor/preferences": ^6 || ^7 || ^8
"@deno/kv": ">=0.9.0"
"@netlify/blobs": ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0
"@planetscale/database": ^1.19.0
"@upstash/redis": ^1.34.3
"@vercel/blob": ">=0.27.1"
"@vercel/functions": ^2.2.12 || ^3.0.0
"@vercel/kv": ^1 || ^2 || ^3
aws4fetch: ^1.0.20
db0: ">=0.2.1"
idb-keyval: ^6.2.1
ioredis: ^5.4.2
uploadthing: ^7.4.4
peerDependenciesMeta:
"@azure/app-configuration":
optional: true
"@azure/cosmos":
optional: true
"@azure/data-tables":
optional: true
"@azure/identity":
optional: true
"@azure/keyvault-secrets":
optional: true
"@azure/storage-blob":
optional: true
"@capacitor/preferences":
optional: true
"@deno/kv":
optional: true
"@netlify/blobs":
optional: true
"@planetscale/database":
optional: true
"@upstash/redis":
optional: true
"@vercel/blob":
optional: true
"@vercel/functions":
optional: true
"@vercel/kv":
optional: true
aws4fetch:
optional: true
db0:
optional: true
idb-keyval:
optional: true
ioredis:
optional: true
uploadthing:
optional: true
util-deprecate@1.0.2:
resolution:
@ -5319,209 +3105,78 @@ packages:
integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==,
}
vfile-location@5.0.2:
vfile-location@5.0.3:
resolution:
{
integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==,
integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==,
}
vfile-message@3.1.4:
vfile-message@4.0.3:
resolution:
{
integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==,
integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==,
}
vfile-message@4.0.2:
vfile@6.0.3:
resolution:
{
integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==,
integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==,
}
vfile@5.3.7:
vite@6.4.1:
resolution:
{
integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==,
integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==,
}
vfile@6.0.1:
resolution:
{
integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==,
}
vite@5.2.11:
resolution:
{
integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==,
}
engines: { node: ^18.0.0 || >=20.0.0 }
engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 }
hasBin: true
peerDependencies:
"@types/node": ^18.0.0 || >=20.0.0
"@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0
jiti: ">=1.21.0"
less: "*"
lightningcss: ^1.21.0
sass: "*"
sass-embedded: "*"
stylus: "*"
sugarss: "*"
terser: ^5.4.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
peerDependenciesMeta:
"@types/node":
optional: true
jiti:
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
vitefu@0.2.5:
vitefu@1.1.1:
resolution:
{
integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==,
integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==,
}
peerDependencies:
vite: ^3.0.0 || ^4.0.0 || ^5.0.0
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
peerDependenciesMeta:
vite:
optional: true
volar-service-css@0.0.45:
resolution:
{
integrity: sha512-f+AlUI1+kESbcZSVaNJVAnK0c/9Da5StoxzPqA5/8VqUHJWNdubWNnwG5xpFVTfgh6pgTcey3UBhBfHytFaIOg==,
}
peerDependencies:
"@volar/language-service": ~2.2.3
peerDependenciesMeta:
"@volar/language-service":
optional: true
volar-service-emmet@0.0.45:
resolution:
{
integrity: sha512-9nLXSDkR1vA/3fQkFEsSXAu3XovQxOpTkVG2jilQgfek/K1ZLkaA/WMhN/TtmPmQg4NxE9Ni6mA5udBQ5gVXIA==,
}
peerDependencies:
"@volar/language-service": ~2.2.3
peerDependenciesMeta:
"@volar/language-service":
optional: true
volar-service-html@0.0.45:
resolution:
{
integrity: sha512-tLTJqfy1v5C4nmeAsfekFIKPl4r4qDMyL0L9MWywr/EApZzPCsbeUGxCqdzxSMC2q7PMCfX2i167txDo+J0LVA==,
}
peerDependencies:
"@volar/language-service": ~2.2.3
peerDependenciesMeta:
"@volar/language-service":
optional: true
volar-service-prettier@0.0.45:
resolution:
{
integrity: sha512-+mBS2EsDgp/kunKEBnHvhBwIQm5v2ahw4NKpKdg4sTpXy3UxqHt+Fq/wRYQ7Z8LlNVNRVfp75ThjM+w2zaZBAw==,
}
peerDependencies:
"@volar/language-service": ~2.2.3
prettier: ^2.2 || ^3.0
peerDependenciesMeta:
"@volar/language-service":
optional: true
prettier:
optional: true
volar-service-typescript-twoslash-queries@0.0.45:
resolution:
{
integrity: sha512-KrPUUvKggZgV9mrDpstCzmf20irgv0ooMv+FGDzIIQUkya+d2+nSS8Mx2h9FvsYgLccUVw5jU3Rhwhd3pv/7qg==,
}
peerDependencies:
"@volar/language-service": ~2.2.3
peerDependenciesMeta:
"@volar/language-service":
optional: true
volar-service-typescript@0.0.45:
resolution:
{
integrity: sha512-i/mMIIAMastJ2kgPo3qvX0Rrl7NyxhIYZ0ug/B4ambZcLPI1vzBgS2fmvyWX3jhBYHh8NmbAotFj+0Y9JtN47A==,
}
peerDependencies:
"@volar/language-service": ~2.2.3
peerDependenciesMeta:
"@volar/language-service":
optional: true
vscode-css-languageservice@6.2.10:
resolution:
{
integrity: sha512-sYUZPku4mQ06AWGCbMyjv2tdR6juBW6hTbVPFwbJvNVzdtEfBioQOgkdXg7yMJNWnXkvWSU1FL2kb4Vxu5Cdyw==,
}
vscode-html-languageservice@5.2.0:
resolution:
{
integrity: sha512-cdNMhyw57/SQzgUUGSIMQ66jikqEN6nBNyhx5YuOyj9310+eY9zw8Q0cXpiKzDX8aHYFewQEXRnigl06j/TVwQ==,
}
vscode-jsonrpc@8.2.0:
resolution:
{
integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==,
}
engines: { node: ">=14.0.0" }
vscode-languageserver-protocol@3.17.5:
resolution:
{
integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==,
}
vscode-languageserver-textdocument@1.0.11:
resolution:
{
integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==,
}
vscode-languageserver-types@3.17.5:
resolution:
{
integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==,
}
vscode-languageserver@9.0.1:
resolution:
{
integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==,
}
hasBin: true
vscode-nls@5.2.0:
resolution:
{
integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==,
}
vscode-uri@2.1.2:
resolution:
{
integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==,
}
vscode-uri@3.0.8:
resolution:
{
integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==,
}
web-namespaces@2.0.1:
resolution:
{
@ -5535,80 +3190,25 @@ packages:
}
engines: { node: ">=4" }
which-pm@2.0.0:
widest-line@5.0.0:
resolution:
{
integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==,
integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==,
}
engines: { node: ">=8.15" }
engines: { node: ">=18" }
which-pm@2.1.1:
wrap-ansi@9.0.0:
resolution:
{
integrity: sha512-xzzxNw2wMaoCWXiGE8IJ9wuPMU+EYhFksjHxrRT8kMT5SnocBPRg69YAMtyV4D12fP582RA+k3P8H9J5EMdIxQ==,
integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==,
}
engines: { node: ">=8.15" }
engines: { node: ">=18" }
which@2.0.2:
xxhash-wasm@1.1.0:
resolution:
{
integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==,
integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==,
}
engines: { node: ">= 8" }
hasBin: true
widest-line@4.0.1:
resolution:
{
integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==,
}
engines: { node: ">=12" }
wrap-ansi@7.0.0:
resolution:
{
integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==,
}
engines: { node: ">=10" }
wrap-ansi@8.1.0:
resolution:
{
integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==,
}
engines: { node: ">=12" }
wrappy@1.0.2:
resolution:
{
integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==,
}
y18n@5.0.8:
resolution:
{
integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==,
}
engines: { node: ">=10" }
yallist@3.1.1:
resolution:
{
integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==,
}
yallist@4.0.0:
resolution:
{
integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==,
}
yaml@2.3.4:
resolution:
{
integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==,
}
engines: { node: ">= 14" }
yargs-parser@21.1.1:
resolution:
@ -5617,45 +3217,48 @@ packages:
}
engines: { node: ">=12" }
yargs@17.7.2:
yocto-queue@1.2.1:
resolution:
{
integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==,
}
engines: { node: ">=12" }
yocto-queue@0.1.0:
resolution:
{
integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==,
}
engines: { node: ">=10" }
yocto-queue@1.0.0:
resolution:
{
integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==,
integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==,
}
engines: { node: ">=12.20" }
zod-to-json-schema@3.23.0:
yocto-spinner@0.2.3:
resolution:
{
integrity: sha512-az0uJ243PxsRIa2x1WmNE/pnuA05gUq/JB8Lwe1EDCCL/Fz9MgjYQ0fPlyc2Tcv6aF2ZA7WM5TWaRZVEFaAIag==,
integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==,
}
engines: { node: ">=18.19" }
yoctocolors@2.1.2:
resolution:
{
integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==,
}
engines: { node: ">=18" }
zod-to-json-schema@3.25.1:
resolution:
{
integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==,
}
peerDependencies:
zod: ^3.23.3
zod: ^3.25 || ^4
zod@3.22.4:
zod-to-ts@1.2.0:
resolution:
{
integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==,
integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==,
}
peerDependencies:
typescript: ^4.9.4 || ^5.0.2
zod: ^3
zod@3.23.8:
zod@3.25.76:
resolution:
{
integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==,
integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==,
}
zwitch@2.0.4:
@ -5665,1093 +3268,600 @@ packages:
}
snapshots:
"@alloc/quick-lru@5.2.0": {}
"@astrojs/compiler@2.13.1": {}
"@ampproject/remapping@2.2.1":
"@astrojs/internal-helpers@0.7.2": {}
"@astrojs/internal-helpers@0.7.5": {}
"@astrojs/markdown-remark@6.3.10":
dependencies:
"@jridgewell/gen-mapping": 0.3.3
"@jridgewell/trace-mapping": 0.3.20
"@astrojs/check@0.7.0(typescript@5.4.5)":
dependencies:
"@astrojs/language-server": 2.10.0(typescript@5.4.5)
chokidar: 3.5.3
fast-glob: 3.3.2
kleur: 4.1.5
typescript: 5.4.5
yargs: 17.7.2
transitivePeerDependencies:
- prettier
- prettier-plugin-astro
"@astrojs/compiler@2.8.0": {}
"@astrojs/internal-helpers@0.4.0": {}
"@astrojs/language-server@2.10.0(typescript@5.4.5)":
dependencies:
"@astrojs/compiler": 2.8.0
"@jridgewell/sourcemap-codec": 1.4.15
"@volar/kit": 2.2.4(typescript@5.4.5)
"@volar/language-core": 2.2.4
"@volar/language-server": 2.2.4
"@volar/language-service": 2.2.4
"@volar/typescript": 2.2.4
fast-glob: 3.3.2
volar-service-css: 0.0.45(@volar/language-service@2.2.4)
volar-service-emmet: 0.0.45(@volar/language-service@2.2.4)
volar-service-html: 0.0.45(@volar/language-service@2.2.4)
volar-service-prettier: 0.0.45(@volar/language-service@2.2.4)
volar-service-typescript: 0.0.45(@volar/language-service@2.2.4)
volar-service-typescript-twoslash-queries: 0.0.45(@volar/language-service@2.2.4)
vscode-html-languageservice: 5.2.0
vscode-uri: 3.0.8
transitivePeerDependencies:
- typescript
"@astrojs/markdown-remark@5.1.0":
dependencies:
"@astrojs/prism": 3.1.0
"@astrojs/internal-helpers": 0.7.5
"@astrojs/prism": 3.3.0
github-slugger: 2.0.0
hast-util-from-html: 2.0.1
hast-util-from-html: 2.0.3
hast-util-to-text: 4.0.2
import-meta-resolve: 4.0.0
import-meta-resolve: 4.2.0
js-yaml: 4.1.1
mdast-util-definitions: 6.0.0
rehype-raw: 7.0.0
rehype-stringify: 10.0.0
remark-gfm: 4.0.0
rehype-stringify: 10.0.1
remark-gfm: 4.0.1
remark-parse: 11.0.0
remark-rehype: 11.1.0
remark-smartypants: 2.0.0
shiki: 1.5.2
unified: 11.0.4
remark-rehype: 11.1.2
remark-smartypants: 3.0.2
shiki: 3.22.0
smol-toml: 1.6.0
unified: 11.0.5
unist-util-remove-position: 5.0.0
unist-util-visit: 5.0.0
unist-util-visit-parents: 6.0.2
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
"@astrojs/markdown-remark@6.3.6":
dependencies:
"@astrojs/internal-helpers": 0.7.2
"@astrojs/prism": 3.3.0
github-slugger: 2.0.0
hast-util-from-html: 2.0.3
hast-util-to-text: 4.0.2
import-meta-resolve: 4.1.0
js-yaml: 4.1.0
mdast-util-definitions: 6.0.0
rehype-raw: 7.0.0
rehype-stringify: 10.0.1
remark-gfm: 4.0.1
remark-parse: 11.0.0
remark-rehype: 11.1.2
remark-smartypants: 3.0.2
shiki: 3.11.0
smol-toml: 1.4.2
unified: 11.0.5
unist-util-remove-position: 5.0.0
unist-util-visit: 5.0.0
unist-util-visit-parents: 6.0.1
vfile: 6.0.1
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
"@astrojs/mdx@2.3.1(astro@4.8.6(typescript@5.4.5))":
"@astrojs/mdx@4.3.4(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))":
dependencies:
"@astrojs/markdown-remark": 5.1.0
"@mdx-js/mdx": 3.0.0
acorn: 8.11.2
astro: 4.8.6(typescript@5.4.5)
es-module-lexer: 1.4.1
"@astrojs/markdown-remark": 6.3.6
"@mdx-js/mdx": 3.1.0(acorn@8.15.0)
acorn: 8.15.0
astro: 5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)
es-module-lexer: 1.7.0
estree-util-visit: 2.0.0
github-slugger: 2.0.0
gray-matter: 4.0.3
hast-util-to-html: 9.0.0
hast-util-to-html: 9.0.5
kleur: 4.1.5
rehype-raw: 7.0.0
remark-gfm: 4.0.0
remark-smartypants: 2.0.0
source-map: 0.7.4
remark-gfm: 4.0.1
remark-smartypants: 3.0.2
source-map: 0.7.6
unist-util-visit: 5.0.0
vfile: 6.0.1
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
"@astrojs/prism@3.1.0":
"@astrojs/prism@3.3.0":
dependencies:
prismjs: 1.29.0
prismjs: 1.30.0
"@astrojs/sitemap@3.0.5":
"@astrojs/sitemap@3.5.1":
dependencies:
sitemap: 7.1.1
zod: 3.22.4
sitemap: 8.0.0
stream-replace-string: 2.0.0
zod: 3.25.76
"@astrojs/starlight-tailwind@2.0.2(@astrojs/starlight@0.22.4(astro@4.8.6(typescript@5.4.5)))(@astrojs/tailwind@5.1.0(astro@4.8.6(typescript@5.4.5))(tailwindcss@3.4.3))(tailwindcss@3.4.3)":
"@astrojs/starlight@0.37.6(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))":
dependencies:
"@astrojs/starlight": 0.22.4(astro@4.8.6(typescript@5.4.5))
"@astrojs/tailwind": 5.1.0(astro@4.8.6(typescript@5.4.5))(tailwindcss@3.4.3)
tailwindcss: 3.4.3
"@astrojs/starlight@0.22.4(astro@4.8.6(typescript@5.4.5))":
dependencies:
"@astrojs/mdx": 2.3.1(astro@4.8.6(typescript@5.4.5))
"@astrojs/sitemap": 3.0.5
"@pagefind/default-ui": 1.0.4
"@types/hast": 3.0.3
"@types/mdast": 4.0.3
astro: 4.8.6(typescript@5.4.5)
astro-expressive-code: 0.35.3(astro@4.8.6(typescript@5.4.5))
"@astrojs/markdown-remark": 6.3.6
"@astrojs/mdx": 4.3.4(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))
"@astrojs/sitemap": 3.5.1
"@pagefind/default-ui": 1.3.0
"@types/hast": 3.0.4
"@types/js-yaml": 4.0.9
"@types/mdast": 4.0.4
astro: 5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)
astro-expressive-code: 0.41.3(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))
bcp-47: 2.1.0
hast-util-from-html: 2.0.1
hast-util-select: 6.0.2
hast-util-to-string: 3.0.0
hastscript: 8.0.0
mdast-util-directive: 3.0.0
mdast-util-to-markdown: 2.1.0
pagefind: 1.0.4
rehype: 13.0.1
rehype-format: 5.0.0
remark-directive: 3.0.0
unified: 11.0.4
hast-util-from-html: 2.0.3
hast-util-select: 6.0.4
hast-util-to-string: 3.0.1
hastscript: 9.0.1
i18next: 23.16.8
js-yaml: 4.1.0
klona: 2.0.6
magic-string: 0.30.18
mdast-util-directive: 3.1.0
mdast-util-to-markdown: 2.1.2
mdast-util-to-string: 4.0.0
pagefind: 1.3.0
rehype: 13.0.2
rehype-format: 5.0.1
remark-directive: 3.0.1
ultrahtml: 1.6.0
unified: 11.0.5
unist-util-visit: 5.0.0
vfile: 6.0.1
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
"@astrojs/tailwind@5.1.0(astro@4.8.6(typescript@5.4.5))(tailwindcss@3.4.3)":
"@astrojs/telemetry@3.3.0":
dependencies:
astro: 4.8.6(typescript@5.4.5)
autoprefixer: 10.4.19(postcss@8.4.31)
postcss: 8.4.31
postcss-load-config: 4.0.2(postcss@8.4.31)
tailwindcss: 3.4.3
transitivePeerDependencies:
- ts-node
"@astrojs/telemetry@3.1.0":
dependencies:
ci-info: 4.0.0
debug: 4.3.4
ci-info: 4.4.0
debug: 4.4.3
dlv: 1.1.3
dset: 3.1.3
dset: 3.1.4
is-docker: 3.0.0
is-wsl: 3.1.0
which-pm-runs: 1.1.0
transitivePeerDependencies:
- supports-color
"@babel/code-frame@7.24.2":
"@babel/helper-string-parser@7.27.1": {}
"@babel/helper-validator-identifier@7.28.5": {}
"@babel/parser@7.29.0":
dependencies:
"@babel/highlight": 7.24.5
picocolors: 1.0.0
"@babel/types": 7.29.0
"@babel/compat-data@7.24.4": {}
"@babel/runtime@7.28.3": {}
"@babel/core@7.24.5":
"@babel/types@7.29.0":
dependencies:
"@ampproject/remapping": 2.2.1
"@babel/code-frame": 7.24.2
"@babel/generator": 7.24.5
"@babel/helper-compilation-targets": 7.23.6
"@babel/helper-module-transforms": 7.24.5(@babel/core@7.24.5)
"@babel/helpers": 7.24.5
"@babel/parser": 7.24.5
"@babel/template": 7.24.0
"@babel/traverse": 7.24.5
"@babel/types": 7.24.5
convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
"@babel/helper-string-parser": 7.27.1
"@babel/helper-validator-identifier": 7.28.5
"@babel/generator@7.24.5":
"@capsizecss/unpack@4.0.0":
dependencies:
"@babel/types": 7.24.5
"@jridgewell/gen-mapping": 0.3.5
"@jridgewell/trace-mapping": 0.3.25
jsesc: 2.5.2
"@babel/helper-annotate-as-pure@7.22.5":
dependencies:
"@babel/types": 7.24.5
"@babel/helper-compilation-targets@7.23.6":
dependencies:
"@babel/compat-data": 7.24.4
"@babel/helper-validator-option": 7.23.5
browserslist: 4.23.0
lru-cache: 5.1.1
semver: 6.3.1
"@babel/helper-environment-visitor@7.22.20": {}
"@babel/helper-function-name@7.23.0":
dependencies:
"@babel/template": 7.22.15
"@babel/types": 7.24.5
"@babel/helper-hoist-variables@7.22.5":
dependencies:
"@babel/types": 7.24.5
"@babel/helper-module-imports@7.22.15":
dependencies:
"@babel/types": 7.24.5
"@babel/helper-module-imports@7.24.3":
dependencies:
"@babel/types": 7.24.5
"@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)":
dependencies:
"@babel/core": 7.24.5
"@babel/helper-environment-visitor": 7.22.20
"@babel/helper-module-imports": 7.24.3
"@babel/helper-simple-access": 7.24.5
"@babel/helper-split-export-declaration": 7.24.5
"@babel/helper-validator-identifier": 7.24.5
"@babel/helper-plugin-utils@7.22.5": {}
"@babel/helper-simple-access@7.24.5":
dependencies:
"@babel/types": 7.24.5
"@babel/helper-split-export-declaration@7.24.5":
dependencies:
"@babel/types": 7.24.5
"@babel/helper-string-parser@7.24.1": {}
"@babel/helper-validator-identifier@7.24.5": {}
"@babel/helper-validator-option@7.23.5": {}
"@babel/helpers@7.24.5":
dependencies:
"@babel/template": 7.24.0
"@babel/traverse": 7.24.5
"@babel/types": 7.24.5
transitivePeerDependencies:
- supports-color
"@babel/highlight@7.24.5":
dependencies:
"@babel/helper-validator-identifier": 7.24.5
chalk: 2.4.2
js-tokens: 4.0.0
picocolors: 1.0.0
"@babel/parser@7.24.5":
dependencies:
"@babel/types": 7.24.5
"@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.5)":
dependencies:
"@babel/core": 7.24.5
"@babel/helper-plugin-utils": 7.22.5
"@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.5)":
dependencies:
"@babel/core": 7.24.5
"@babel/helper-annotate-as-pure": 7.22.5
"@babel/helper-module-imports": 7.22.15
"@babel/helper-plugin-utils": 7.22.5
"@babel/plugin-syntax-jsx": 7.23.3(@babel/core@7.24.5)
"@babel/types": 7.24.5
"@babel/template@7.22.15":
dependencies:
"@babel/code-frame": 7.24.2
"@babel/parser": 7.24.5
"@babel/types": 7.24.5
"@babel/template@7.24.0":
dependencies:
"@babel/code-frame": 7.24.2
"@babel/parser": 7.24.5
"@babel/types": 7.24.5
"@babel/traverse@7.24.5":
dependencies:
"@babel/code-frame": 7.24.2
"@babel/generator": 7.24.5
"@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.24.5
"@babel/parser": 7.24.5
"@babel/types": 7.24.5
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
"@babel/types@7.24.5":
dependencies:
"@babel/helper-string-parser": 7.24.1
"@babel/helper-validator-identifier": 7.24.5
to-fast-properties: 2.0.0
"@csstools/cascade-layer-name-parser@1.0.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)":
dependencies:
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/color-helpers@4.2.0": {}
"@csstools/css-calc@1.2.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)":
dependencies:
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/css-color-parser@2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)":
dependencies:
"@csstools/color-helpers": 4.2.0
"@csstools/css-calc": 1.2.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1)":
dependencies:
"@csstools/css-tokenizer": 2.3.1
"@csstools/css-tokenizer@2.3.1": {}
"@csstools/media-query-list-parser@2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)":
dependencies:
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-cascade-layers@4.0.6(postcss@8.4.33)":
dependencies:
"@csstools/selector-specificity": 3.1.1(postcss-selector-parser@6.0.16)
postcss: 8.4.33
postcss-selector-parser: 6.0.16
"@csstools/postcss-color-function@3.0.16(postcss@8.4.33)":
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
"@csstools/postcss-color-mix-function@2.0.16(postcss@8.4.33)":
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
"@csstools/postcss-exponential-functions@1.0.7(postcss@8.4.33)":
dependencies:
"@csstools/css-calc": 1.2.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
postcss: 8.4.33
"@csstools/postcss-font-format-keywords@3.0.2(postcss@8.4.33)":
dependencies:
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
"@csstools/postcss-gamut-mapping@1.0.9(postcss@8.4.33)":
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
postcss: 8.4.33
"@csstools/postcss-gradients-interpolation-method@4.0.17(postcss@8.4.33)":
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
"@csstools/postcss-hwb-function@3.0.15(postcss@8.4.33)":
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
"@csstools/postcss-ic-unit@3.0.6(postcss@8.4.33)":
dependencies:
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
"@csstools/postcss-initial@1.0.1(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
"@csstools/postcss-is-pseudo-class@4.0.8(postcss@8.4.33)":
dependencies:
"@csstools/selector-specificity": 3.1.1(postcss-selector-parser@6.0.16)
postcss: 8.4.33
postcss-selector-parser: 6.0.16
"@csstools/postcss-light-dark-function@1.0.5(postcss@8.4.33)":
dependencies:
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
"@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
"@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
"@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
"@csstools/postcss-logical-resize@2.0.1(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
"@csstools/postcss-logical-viewport-units@2.0.9(postcss@8.4.33)":
dependencies:
"@csstools/css-tokenizer": 2.3.1
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
"@csstools/postcss-media-minmax@1.1.6(postcss@8.4.33)":
dependencies:
"@csstools/css-calc": 1.2.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/media-query-list-parser": 2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
postcss: 8.4.33
"@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.9(postcss@8.4.33)":
dependencies:
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/media-query-list-parser": 2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
postcss: 8.4.33
"@csstools/postcss-nested-calc@3.0.2(postcss@8.4.33)":
dependencies:
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
"@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
"@csstools/postcss-oklab-function@3.0.16(postcss@8.4.33)":
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
"@csstools/postcss-progressive-custom-properties@3.2.0(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
"@csstools/postcss-relative-color-syntax@2.0.16(postcss@8.4.33)":
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
"@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
"@csstools/postcss-stepped-value-functions@3.0.8(postcss@8.4.33)":
dependencies:
"@csstools/css-calc": 1.2.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
postcss: 8.4.33
"@csstools/postcss-text-decoration-shorthand@3.0.6(postcss@8.4.33)":
dependencies:
"@csstools/color-helpers": 4.2.0
postcss: 8.4.33
postcss-value-parser: 4.2.0
"@csstools/postcss-trigonometric-functions@3.0.8(postcss@8.4.33)":
dependencies:
"@csstools/css-calc": 1.2.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
postcss: 8.4.33
"@csstools/postcss-unset-value@3.0.1(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
"@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.16)":
dependencies:
postcss-selector-parser: 6.0.16
"@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.0.16)":
dependencies:
postcss-selector-parser: 6.0.16
"@csstools/utilities@1.0.0(postcss@8.4.33)":
dependencies:
postcss: 8.4.33
fontkitten: 1.0.2
"@ctrl/tinycolor@4.1.0": {}
"@emmetio/abbreviation@2.3.3":
"@emnapi/runtime@1.8.1":
dependencies:
"@emmetio/scanner": 1.0.4
"@emmetio/css-abbreviation@2.1.8":
dependencies:
"@emmetio/scanner": 1.0.4
"@emmetio/css-parser@0.4.0":
dependencies:
"@emmetio/stream-reader": 2.2.0
"@emmetio/stream-reader-utils": 0.1.0
"@emmetio/html-matcher@1.3.0":
dependencies:
"@emmetio/scanner": 1.0.4
"@emmetio/scanner@1.0.4": {}
"@emmetio/stream-reader-utils@0.1.0": {}
"@emmetio/stream-reader@2.2.0": {}
"@emnapi/runtime@1.1.1":
dependencies:
tslib: 2.6.2
tslib: 2.8.1
optional: true
"@esbuild/aix-ppc64@0.20.2":
"@esbuild/aix-ppc64@0.25.9":
optional: true
"@esbuild/aix-ppc64@0.21.3":
"@esbuild/android-arm64@0.25.9":
optional: true
"@esbuild/android-arm64@0.20.2":
"@esbuild/android-arm@0.25.9":
optional: true
"@esbuild/android-arm64@0.21.3":
"@esbuild/android-x64@0.25.9":
optional: true
"@esbuild/android-arm@0.20.2":
"@esbuild/darwin-arm64@0.25.9":
optional: true
"@esbuild/android-arm@0.21.3":
"@esbuild/darwin-x64@0.25.9":
optional: true
"@esbuild/android-x64@0.20.2":
"@esbuild/freebsd-arm64@0.25.9":
optional: true
"@esbuild/android-x64@0.21.3":
"@esbuild/freebsd-x64@0.25.9":
optional: true
"@esbuild/darwin-arm64@0.20.2":
"@esbuild/linux-arm64@0.25.9":
optional: true
"@esbuild/darwin-arm64@0.21.3":
"@esbuild/linux-arm@0.25.9":
optional: true
"@esbuild/darwin-x64@0.20.2":
"@esbuild/linux-ia32@0.25.9":
optional: true
"@esbuild/darwin-x64@0.21.3":
"@esbuild/linux-loong64@0.25.9":
optional: true
"@esbuild/freebsd-arm64@0.20.2":
"@esbuild/linux-mips64el@0.25.9":
optional: true
"@esbuild/freebsd-arm64@0.21.3":
"@esbuild/linux-ppc64@0.25.9":
optional: true
"@esbuild/freebsd-x64@0.20.2":
"@esbuild/linux-riscv64@0.25.9":
optional: true
"@esbuild/freebsd-x64@0.21.3":
"@esbuild/linux-s390x@0.25.9":
optional: true
"@esbuild/linux-arm64@0.20.2":
"@esbuild/linux-x64@0.25.9":
optional: true
"@esbuild/linux-arm64@0.21.3":
"@esbuild/netbsd-arm64@0.25.9":
optional: true
"@esbuild/linux-arm@0.20.2":
"@esbuild/netbsd-x64@0.25.9":
optional: true
"@esbuild/linux-arm@0.21.3":
"@esbuild/openbsd-arm64@0.25.9":
optional: true
"@esbuild/linux-ia32@0.20.2":
"@esbuild/openbsd-x64@0.25.9":
optional: true
"@esbuild/linux-ia32@0.21.3":
"@esbuild/openharmony-arm64@0.25.9":
optional: true
"@esbuild/linux-loong64@0.20.2":
"@esbuild/sunos-x64@0.25.9":
optional: true
"@esbuild/linux-loong64@0.21.3":
"@esbuild/win32-arm64@0.25.9":
optional: true
"@esbuild/linux-mips64el@0.20.2":
"@esbuild/win32-ia32@0.25.9":
optional: true
"@esbuild/linux-mips64el@0.21.3":
"@esbuild/win32-x64@0.25.9":
optional: true
"@esbuild/linux-ppc64@0.20.2":
optional: true
"@esbuild/linux-ppc64@0.21.3":
optional: true
"@esbuild/linux-riscv64@0.20.2":
optional: true
"@esbuild/linux-riscv64@0.21.3":
optional: true
"@esbuild/linux-s390x@0.20.2":
optional: true
"@esbuild/linux-s390x@0.21.3":
optional: true
"@esbuild/linux-x64@0.20.2":
optional: true
"@esbuild/linux-x64@0.21.3":
optional: true
"@esbuild/netbsd-x64@0.20.2":
optional: true
"@esbuild/netbsd-x64@0.21.3":
optional: true
"@esbuild/openbsd-x64@0.20.2":
optional: true
"@esbuild/openbsd-x64@0.21.3":
optional: true
"@esbuild/sunos-x64@0.20.2":
optional: true
"@esbuild/sunos-x64@0.21.3":
optional: true
"@esbuild/win32-arm64@0.20.2":
optional: true
"@esbuild/win32-arm64@0.21.3":
optional: true
"@esbuild/win32-ia32@0.20.2":
optional: true
"@esbuild/win32-ia32@0.21.3":
optional: true
"@esbuild/win32-x64@0.20.2":
optional: true
"@esbuild/win32-x64@0.21.3":
optional: true
"@expressive-code/core@0.35.3":
"@expressive-code/core@0.41.3":
dependencies:
"@ctrl/tinycolor": 4.1.0
hast-util-select: 6.0.2
hast-util-to-html: 9.0.1
hast-util-select: 6.0.4
hast-util-to-html: 9.0.5
hast-util-to-text: 4.0.2
hastscript: 9.0.0
postcss: 8.4.38
postcss-nested: 6.0.1(postcss@8.4.38)
hastscript: 9.0.1
postcss: 8.5.6
postcss-nested: 6.2.0(postcss@8.5.6)
unist-util-visit: 5.0.0
unist-util-visit-parents: 6.0.1
"@expressive-code/plugin-frames@0.35.3":
"@expressive-code/plugin-frames@0.41.3":
dependencies:
"@expressive-code/core": 0.35.3
"@expressive-code/core": 0.41.3
"@expressive-code/plugin-shiki@0.35.3":
"@expressive-code/plugin-shiki@0.41.3":
dependencies:
"@expressive-code/core": 0.35.3
shiki: 1.5.2
"@expressive-code/core": 0.41.3
shiki: 3.11.0
"@expressive-code/plugin-text-markers@0.35.3":
"@expressive-code/plugin-text-markers@0.41.3":
dependencies:
"@expressive-code/core": 0.35.3
"@expressive-code/core": 0.41.3
"@fontsource/inter@5.0.18": {}
"@fontsource/inter@5.2.8": {}
"@fontsource/rubik@5.0.20": {}
"@fontsource/rubik@5.2.8": {}
"@img/sharp-darwin-arm64@0.33.4":
"@img/colour@1.0.0": {}
"@img/sharp-darwin-arm64@0.34.5":
optionalDependencies:
"@img/sharp-libvips-darwin-arm64": 1.0.2
"@img/sharp-libvips-darwin-arm64": 1.2.4
optional: true
"@img/sharp-darwin-x64@0.33.4":
"@img/sharp-darwin-x64@0.34.5":
optionalDependencies:
"@img/sharp-libvips-darwin-x64": 1.0.2
"@img/sharp-libvips-darwin-x64": 1.2.4
optional: true
"@img/sharp-libvips-darwin-arm64@1.0.2":
"@img/sharp-libvips-darwin-arm64@1.2.4":
optional: true
"@img/sharp-libvips-darwin-x64@1.0.2":
"@img/sharp-libvips-darwin-x64@1.2.4":
optional: true
"@img/sharp-libvips-linux-arm64@1.0.2":
"@img/sharp-libvips-linux-arm64@1.2.4":
optional: true
"@img/sharp-libvips-linux-arm@1.0.2":
"@img/sharp-libvips-linux-arm@1.2.4":
optional: true
"@img/sharp-libvips-linux-s390x@1.0.2":
"@img/sharp-libvips-linux-ppc64@1.2.4":
optional: true
"@img/sharp-libvips-linux-x64@1.0.2":
"@img/sharp-libvips-linux-riscv64@1.2.4":
optional: true
"@img/sharp-libvips-linuxmusl-arm64@1.0.2":
"@img/sharp-libvips-linux-s390x@1.2.4":
optional: true
"@img/sharp-libvips-linuxmusl-x64@1.0.2":
"@img/sharp-libvips-linux-x64@1.2.4":
optional: true
"@img/sharp-linux-arm64@0.33.4":
"@img/sharp-libvips-linuxmusl-arm64@1.2.4":
optional: true
"@img/sharp-libvips-linuxmusl-x64@1.2.4":
optional: true
"@img/sharp-linux-arm64@0.34.5":
optionalDependencies:
"@img/sharp-libvips-linux-arm64": 1.0.2
"@img/sharp-libvips-linux-arm64": 1.2.4
optional: true
"@img/sharp-linux-arm@0.33.4":
"@img/sharp-linux-arm@0.34.5":
optionalDependencies:
"@img/sharp-libvips-linux-arm": 1.0.2
"@img/sharp-libvips-linux-arm": 1.2.4
optional: true
"@img/sharp-linux-s390x@0.33.4":
"@img/sharp-linux-ppc64@0.34.5":
optionalDependencies:
"@img/sharp-libvips-linux-s390x": 1.0.2
"@img/sharp-libvips-linux-ppc64": 1.2.4
optional: true
"@img/sharp-linux-x64@0.33.4":
"@img/sharp-linux-riscv64@0.34.5":
optionalDependencies:
"@img/sharp-libvips-linux-x64": 1.0.2
"@img/sharp-libvips-linux-riscv64": 1.2.4
optional: true
"@img/sharp-linuxmusl-arm64@0.33.4":
"@img/sharp-linux-s390x@0.34.5":
optionalDependencies:
"@img/sharp-libvips-linuxmusl-arm64": 1.0.2
"@img/sharp-libvips-linux-s390x": 1.2.4
optional: true
"@img/sharp-linuxmusl-x64@0.33.4":
"@img/sharp-linux-x64@0.34.5":
optionalDependencies:
"@img/sharp-libvips-linuxmusl-x64": 1.0.2
"@img/sharp-libvips-linux-x64": 1.2.4
optional: true
"@img/sharp-wasm32@0.33.4":
dependencies:
"@emnapi/runtime": 1.1.1
"@img/sharp-linuxmusl-arm64@0.34.5":
optionalDependencies:
"@img/sharp-libvips-linuxmusl-arm64": 1.2.4
optional: true
"@img/sharp-win32-ia32@0.33.4":
"@img/sharp-linuxmusl-x64@0.34.5":
optionalDependencies:
"@img/sharp-libvips-linuxmusl-x64": 1.2.4
optional: true
"@img/sharp-win32-x64@0.33.4":
"@img/sharp-wasm32@0.34.5":
dependencies:
"@emnapi/runtime": 1.8.1
optional: true
"@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462":
"@img/sharp-win32-arm64@0.34.5":
optional: true
"@img/sharp-win32-ia32@0.34.5":
optional: true
"@img/sharp-win32-x64@0.34.5":
optional: true
"@jridgewell/sourcemap-codec@1.5.5": {}
"@mdx-js/mdx@3.1.0(acorn@8.15.0)":
dependencies:
"@vscode/l10n": 0.0.18
vscode-languageserver-textdocument: 1.0.11
vscode-languageserver-types: 3.17.5
vscode-uri: 3.0.8
"@jridgewell/gen-mapping@0.3.3":
dependencies:
"@jridgewell/set-array": 1.1.2
"@jridgewell/sourcemap-codec": 1.4.15
"@jridgewell/trace-mapping": 0.3.20
"@jridgewell/gen-mapping@0.3.5":
dependencies:
"@jridgewell/set-array": 1.2.1
"@jridgewell/sourcemap-codec": 1.4.15
"@jridgewell/trace-mapping": 0.3.25
"@jridgewell/resolve-uri@3.1.1": {}
"@jridgewell/set-array@1.1.2": {}
"@jridgewell/set-array@1.2.1": {}
"@jridgewell/sourcemap-codec@1.4.15": {}
"@jridgewell/trace-mapping@0.3.20":
dependencies:
"@jridgewell/resolve-uri": 3.1.1
"@jridgewell/sourcemap-codec": 1.4.15
"@jridgewell/trace-mapping@0.3.25":
dependencies:
"@jridgewell/resolve-uri": 3.1.1
"@jridgewell/sourcemap-codec": 1.4.15
"@mdx-js/mdx@3.0.0":
dependencies:
"@types/estree": 1.0.5
"@types/estree-jsx": 1.0.3
"@types/hast": 3.0.3
"@types/mdx": 2.0.10
"@types/estree": 1.0.8
"@types/estree-jsx": 1.0.5
"@types/hast": 3.0.4
"@types/mdx": 2.0.13
collapse-white-space: 2.1.0
devlop: 1.1.0
estree-util-build-jsx: 3.0.1
estree-util-is-identifier-name: 3.0.0
estree-util-to-js: 2.0.0
estree-util-scope: 1.0.0
estree-walker: 3.0.3
hast-util-to-estree: 3.1.0
hast-util-to-jsx-runtime: 2.3.0
hast-util-to-jsx-runtime: 2.3.6
markdown-extensions: 2.0.0
periscopic: 3.1.0
remark-mdx: 3.0.0
recma-build-jsx: 1.0.0
recma-jsx: 1.0.1(acorn@8.15.0)
recma-stringify: 1.0.0
rehype-recma: 1.0.0
remark-mdx: 3.1.0
remark-parse: 11.0.0
remark-rehype: 11.1.0
source-map: 0.7.4
unified: 11.0.4
remark-rehype: 11.1.2
source-map: 0.7.6
unified: 11.0.5
unist-util-position-from-estree: 2.0.0
unist-util-stringify-position: 4.0.0
unist-util-visit: 5.0.0
vfile: 6.0.1
vfile: 6.0.3
transitivePeerDependencies:
- acorn
- supports-color
"@nodelib/fs.scandir@2.1.5":
"@oslojs/encoding@1.1.0": {}
"@pagefind/darwin-arm64@1.3.0":
optional: true
"@pagefind/darwin-x64@1.3.0":
optional: true
"@pagefind/default-ui@1.3.0": {}
"@pagefind/linux-arm64@1.3.0":
optional: true
"@pagefind/linux-x64@1.3.0":
optional: true
"@pagefind/windows-x64@1.3.0":
optional: true
"@rollup/pluginutils@5.3.0(rollup@4.48.1)":
dependencies:
"@nodelib/fs.stat": 2.0.5
run-parallel: 1.2.0
"@types/estree": 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
optionalDependencies:
rollup: 4.48.1
"@nodelib/fs.stat@2.0.5": {}
"@rollup/rollup-android-arm-eabi@4.48.1":
optional: true
"@nodelib/fs.walk@1.2.8":
"@rollup/rollup-android-arm64@4.48.1":
optional: true
"@rollup/rollup-darwin-arm64@4.48.1":
optional: true
"@rollup/rollup-darwin-x64@4.48.1":
optional: true
"@rollup/rollup-freebsd-arm64@4.48.1":
optional: true
"@rollup/rollup-freebsd-x64@4.48.1":
optional: true
"@rollup/rollup-linux-arm-gnueabihf@4.48.1":
optional: true
"@rollup/rollup-linux-arm-musleabihf@4.48.1":
optional: true
"@rollup/rollup-linux-arm64-gnu@4.48.1":
optional: true
"@rollup/rollup-linux-arm64-musl@4.48.1":
optional: true
"@rollup/rollup-linux-loongarch64-gnu@4.48.1":
optional: true
"@rollup/rollup-linux-ppc64-gnu@4.48.1":
optional: true
"@rollup/rollup-linux-riscv64-gnu@4.48.1":
optional: true
"@rollup/rollup-linux-riscv64-musl@4.48.1":
optional: true
"@rollup/rollup-linux-s390x-gnu@4.48.1":
optional: true
"@rollup/rollup-linux-x64-gnu@4.48.1":
optional: true
"@rollup/rollup-linux-x64-musl@4.48.1":
optional: true
"@rollup/rollup-win32-arm64-msvc@4.48.1":
optional: true
"@rollup/rollup-win32-ia32-msvc@4.48.1":
optional: true
"@rollup/rollup-win32-x64-msvc@4.48.1":
optional: true
"@shikijs/core@3.11.0":
dependencies:
"@nodelib/fs.scandir": 2.1.5
fastq: 1.15.0
"@shikijs/types": 3.11.0
"@shikijs/vscode-textmate": 10.0.2
"@types/hast": 3.0.4
hast-util-to-html: 9.0.5
"@pagefind/darwin-arm64@1.0.4":
optional: true
"@pagefind/darwin-x64@1.0.4":
optional: true
"@pagefind/default-ui@1.0.4": {}
"@pagefind/linux-arm64@1.0.4":
optional: true
"@pagefind/linux-x64@1.0.4":
optional: true
"@pagefind/windows-x64@1.0.4":
optional: true
"@rollup/rollup-android-arm-eabi@4.17.2":
optional: true
"@rollup/rollup-android-arm64@4.17.2":
optional: true
"@rollup/rollup-darwin-arm64@4.17.2":
optional: true
"@rollup/rollup-darwin-x64@4.17.2":
optional: true
"@rollup/rollup-linux-arm-gnueabihf@4.17.2":
optional: true
"@rollup/rollup-linux-arm-musleabihf@4.17.2":
optional: true
"@rollup/rollup-linux-arm64-gnu@4.17.2":
optional: true
"@rollup/rollup-linux-arm64-musl@4.17.2":
optional: true
"@rollup/rollup-linux-powerpc64le-gnu@4.17.2":
optional: true
"@rollup/rollup-linux-riscv64-gnu@4.17.2":
optional: true
"@rollup/rollup-linux-s390x-gnu@4.17.2":
optional: true
"@rollup/rollup-linux-x64-gnu@4.17.2":
optional: true
"@rollup/rollup-linux-x64-musl@4.17.2":
optional: true
"@rollup/rollup-win32-arm64-msvc@4.17.2":
optional: true
"@rollup/rollup-win32-ia32-msvc@4.17.2":
optional: true
"@rollup/rollup-win32-x64-msvc@4.17.2":
optional: true
"@shikijs/core@1.5.2": {}
"@trysound/sax@0.2.0": {}
"@types/acorn@4.0.6":
"@shikijs/core@3.22.0":
dependencies:
"@types/estree": 1.0.5
"@shikijs/types": 3.22.0
"@shikijs/vscode-textmate": 10.0.2
"@types/hast": 3.0.4
hast-util-to-html: 9.0.5
"@types/babel__core@7.20.5":
"@shikijs/engine-javascript@3.11.0":
dependencies:
"@babel/parser": 7.24.5
"@babel/types": 7.24.5
"@types/babel__generator": 7.6.7
"@types/babel__template": 7.4.4
"@types/babel__traverse": 7.20.4
"@shikijs/types": 3.11.0
"@shikijs/vscode-textmate": 10.0.2
oniguruma-to-es: 4.3.3
"@types/babel__generator@7.6.7":
"@shikijs/engine-javascript@3.22.0":
dependencies:
"@babel/types": 7.24.5
"@shikijs/types": 3.22.0
"@shikijs/vscode-textmate": 10.0.2
oniguruma-to-es: 4.3.4
"@types/babel__template@7.4.4":
"@shikijs/engine-oniguruma@3.11.0":
dependencies:
"@babel/parser": 7.24.5
"@babel/types": 7.24.5
"@shikijs/types": 3.11.0
"@shikijs/vscode-textmate": 10.0.2
"@types/babel__traverse@7.20.4":
"@shikijs/engine-oniguruma@3.22.0":
dependencies:
"@babel/types": 7.24.5
"@shikijs/types": 3.22.0
"@shikijs/vscode-textmate": 10.0.2
"@types/cookie@0.6.0": {}
"@shikijs/langs@3.11.0":
dependencies:
"@shikijs/types": 3.11.0
"@shikijs/langs@3.22.0":
dependencies:
"@shikijs/types": 3.22.0
"@shikijs/themes@3.11.0":
dependencies:
"@shikijs/types": 3.11.0
"@shikijs/themes@3.22.0":
dependencies:
"@shikijs/types": 3.22.0
"@shikijs/types@3.11.0":
dependencies:
"@shikijs/vscode-textmate": 10.0.2
"@types/hast": 3.0.4
"@shikijs/types@3.22.0":
dependencies:
"@shikijs/vscode-textmate": 10.0.2
"@types/hast": 3.0.4
"@shikijs/vscode-textmate@10.0.2": {}
"@types/debug@4.1.12":
dependencies:
"@types/ms": 0.7.34
"@types/ms": 2.1.0
"@types/estree-jsx@1.0.3":
"@types/estree-jsx@1.0.5":
dependencies:
"@types/estree": 1.0.5
"@types/estree": 1.0.8
"@types/estree@1.0.5": {}
"@types/estree@1.0.8": {}
"@types/hast@3.0.3":
"@types/hast@3.0.4":
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
"@types/mdast@4.0.3":
"@types/js-yaml@4.0.9": {}
"@types/mdast@4.0.4":
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
"@types/mdx@2.0.10": {}
"@types/mdx@2.0.13": {}
"@types/ms@0.7.34": {}
"@types/ms@2.1.0": {}
"@types/nlcst@1.0.4":
"@types/nlcst@2.0.3":
dependencies:
"@types/unist": 2.0.10
"@types/unist": 3.0.3
"@types/node@17.0.45": {}
"@types/node@24.3.0":
dependencies:
undici-types: 7.10.0
"@types/sax@1.2.7":
dependencies:
"@types/node": 17.0.45
"@types/node": 24.3.0
"@types/unist@2.0.10": {}
"@types/unist@2.0.11": {}
"@types/unist@3.0.2": {}
"@types/unist@3.0.3": {}
"@ungap/structured-clone@1.2.0": {}
"@ungap/structured-clone@1.3.0": {}
"@volar/kit@2.2.4(typescript@5.4.5)":
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
"@volar/language-service": 2.2.4
"@volar/typescript": 2.2.4
typesafe-path: 0.2.2
typescript: 5.4.5
vscode-languageserver-textdocument: 1.0.11
vscode-uri: 3.0.8
acorn: 8.15.0
"@volar/language-core@2.2.4":
dependencies:
"@volar/source-map": 2.2.4
"@volar/language-server@2.2.4":
dependencies:
"@volar/language-core": 2.2.4
"@volar/language-service": 2.2.4
"@volar/snapshot-document": 2.2.4
"@volar/typescript": 2.2.4
"@vscode/l10n": 0.0.16
path-browserify: 1.0.1
request-light: 0.7.0
vscode-languageserver: 9.0.1
vscode-languageserver-protocol: 3.17.5
vscode-languageserver-textdocument: 1.0.11
vscode-uri: 3.0.8
"@volar/language-service@2.2.4":
dependencies:
"@volar/language-core": 2.2.4
vscode-languageserver-protocol: 3.17.5
vscode-languageserver-textdocument: 1.0.11
vscode-uri: 3.0.8
"@volar/snapshot-document@2.2.4":
dependencies:
vscode-languageserver-protocol: 3.17.5
vscode-languageserver-textdocument: 1.0.11
"@volar/source-map@2.2.4":
dependencies:
muggle-string: 0.4.1
"@volar/typescript@2.2.4":
dependencies:
"@volar/language-core": 2.2.4
path-browserify: 1.0.1
"@vscode/emmet-helper@2.9.2":
dependencies:
emmet: 2.4.6
jsonc-parser: 2.3.1
vscode-languageserver-textdocument: 1.0.11
vscode-languageserver-types: 3.17.5
vscode-uri: 2.1.2
"@vscode/l10n@0.0.16": {}
"@vscode/l10n@0.0.18": {}
acorn-jsx@5.3.2(acorn@8.11.2):
dependencies:
acorn: 8.11.2
acorn@8.11.2: {}
acorn@8.11.3: {}
acorn@8.15.0: {}
ansi-align@3.0.1:
dependencies:
@ -6759,20 +3869,10 @@ snapshots:
ansi-regex@5.0.1: {}
ansi-regex@6.0.1: {}
ansi-styles@3.2.1:
dependencies:
color-convert: 1.9.3
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
ansi-regex@6.2.0: {}
ansi-styles@6.2.1: {}
any-promise@1.3.0: {}
anymatch@3.1.3:
dependencies:
normalize-path: 3.0.0
@ -6780,131 +3880,125 @@ snapshots:
arg@5.0.2: {}
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
argparse@2.0.1: {}
aria-query@5.3.0:
dependencies:
dequal: 2.0.3
aria-query@5.3.2: {}
array-iterate@2.0.1: {}
astring@1.8.6: {}
astring@1.9.0: {}
astro-expressive-code@0.35.3(astro@4.8.6(typescript@5.4.5)):
astro-expressive-code@0.41.3(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)):
dependencies:
astro: 4.8.6(typescript@5.4.5)
rehype-expressive-code: 0.35.3
astro: 5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)
rehype-expressive-code: 0.41.3
astro@4.8.6(typescript@5.4.5):
astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2):
dependencies:
"@astrojs/compiler": 2.8.0
"@astrojs/internal-helpers": 0.4.0
"@astrojs/markdown-remark": 5.1.0
"@astrojs/telemetry": 3.1.0
"@babel/core": 7.24.5
"@babel/generator": 7.24.5
"@babel/parser": 7.24.5
"@babel/plugin-transform-react-jsx": 7.23.4(@babel/core@7.24.5)
"@babel/traverse": 7.24.5
"@babel/types": 7.24.5
"@types/babel__core": 7.20.5
"@types/cookie": 0.6.0
acorn: 8.11.3
aria-query: 5.3.0
axobject-query: 4.0.0
boxen: 7.1.1
chokidar: 3.6.0
ci-info: 4.0.0
"@astrojs/compiler": 2.13.1
"@astrojs/internal-helpers": 0.7.5
"@astrojs/markdown-remark": 6.3.10
"@astrojs/telemetry": 3.3.0
"@capsizecss/unpack": 4.0.0
"@oslojs/encoding": 1.1.0
"@rollup/pluginutils": 5.3.0(rollup@4.48.1)
acorn: 8.15.0
aria-query: 5.3.2
axobject-query: 4.1.0
boxen: 8.0.1
ci-info: 4.4.0
clsx: 2.1.1
common-ancestor-path: 1.0.1
cookie: 0.6.0
cookie: 1.1.1
cssesc: 3.0.0
debug: 4.3.4
debug: 4.4.3
deterministic-object-hash: 2.0.2
devalue: 5.0.0
diff: 5.2.0
devalue: 5.6.2
diff: 8.0.3
dlv: 1.1.3
dset: 3.1.3
es-module-lexer: 1.5.2
esbuild: 0.21.3
dset: 3.1.4
es-module-lexer: 1.7.0
esbuild: 0.25.9
estree-walker: 3.0.3
execa: 8.0.1
fast-glob: 3.3.2
flattie: 1.1.1
fontace: 0.4.1
github-slugger: 2.0.0
gray-matter: 4.0.3
html-escaper: 3.0.3
http-cache-semantics: 4.1.1
js-yaml: 4.1.0
kleur: 4.1.5
magic-string: 0.30.10
mrmime: 2.0.0
ora: 8.0.1
p-limit: 5.0.0
p-queue: 8.0.1
path-to-regexp: 6.2.2
preferred-pm: 3.1.3
http-cache-semantics: 4.2.0
import-meta-resolve: 4.2.0
js-yaml: 4.1.1
magic-string: 0.30.21
magicast: 0.5.2
mrmime: 2.0.1
neotraverse: 0.6.18
p-limit: 6.2.0
p-queue: 8.1.1
package-manager-detector: 1.6.0
piccolore: 0.1.3
picomatch: 4.0.3
prompts: 2.4.2
rehype: 13.0.1
resolve: 1.22.8
semver: 7.6.2
shiki: 1.5.2
string-width: 7.1.0
strip-ansi: 7.1.0
tsconfck: 3.0.3(typescript@5.4.5)
rehype: 13.0.2
semver: 7.7.4
shiki: 3.22.0
smol-toml: 1.6.0
svgo: 4.0.0
tinyexec: 1.0.2
tinyglobby: 0.2.15
tsconfck: 3.1.6(typescript@5.9.2)
ultrahtml: 1.6.0
unifont: 0.7.3
unist-util-visit: 5.0.0
vfile: 6.0.1
vite: 5.2.11
vitefu: 0.2.5(vite@5.2.11)
which-pm: 2.1.1
unstorage: 1.17.4
vfile: 6.0.3
vite: 6.4.1(@types/node@24.3.0)
vitefu: 1.1.1(vite@6.4.1(@types/node@24.3.0))
xxhash-wasm: 1.1.0
yargs-parser: 21.1.1
zod: 3.23.8
zod-to-json-schema: 3.23.0(zod@3.23.8)
yocto-spinner: 0.2.3
zod: 3.25.76
zod-to-json-schema: 3.25.1(zod@3.25.76)
zod-to-ts: 1.2.0(typescript@5.9.2)(zod@3.25.76)
optionalDependencies:
sharp: 0.33.4
sharp: 0.34.5
transitivePeerDependencies:
- "@azure/app-configuration"
- "@azure/cosmos"
- "@azure/data-tables"
- "@azure/identity"
- "@azure/keyvault-secrets"
- "@azure/storage-blob"
- "@capacitor/preferences"
- "@deno/kv"
- "@netlify/blobs"
- "@planetscale/database"
- "@types/node"
- "@upstash/redis"
- "@vercel/blob"
- "@vercel/functions"
- "@vercel/kv"
- aws4fetch
- db0
- idb-keyval
- ioredis
- jiti
- less
- lightningcss
- rollup
- sass
- sass-embedded
- stylus
- sugarss
- supports-color
- terser
- tsx
- typescript
- uploadthing
- yaml
autoprefixer@10.4.19(postcss@8.4.31):
dependencies:
browserslist: 4.23.0
caniuse-lite: 1.0.30001620
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.0
postcss: 8.4.31
postcss-value-parser: 4.2.0
autoprefixer@10.4.19(postcss@8.4.33):
dependencies:
browserslist: 4.23.0
caniuse-lite: 1.0.30001620
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.0
postcss: 8.4.33
postcss-value-parser: 4.2.0
axobject-query@4.0.0:
dependencies:
dequal: 2.0.3
axobject-query@4.1.0: {}
bail@2.0.2: {}
balanced-match@1.0.2: {}
base-64@1.0.0: {}
bcp-47-match@2.0.3: {}
@ -6915,59 +4009,24 @@ snapshots:
is-alphanumerical: 2.0.1
is-decimal: 2.0.1
binary-extensions@2.2.0: {}
boolbase@1.0.0: {}
boxen@7.1.1:
boxen@8.0.1:
dependencies:
ansi-align: 3.0.1
camelcase: 7.0.1
chalk: 5.3.0
camelcase: 8.0.0
chalk: 5.6.0
cli-boxes: 3.0.0
string-width: 5.1.2
type-fest: 2.19.0
widest-line: 4.0.1
wrap-ansi: 8.1.0
string-width: 7.2.0
type-fest: 4.41.0
widest-line: 5.0.0
wrap-ansi: 9.0.0
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
braces@3.0.2:
dependencies:
fill-range: 7.0.1
browserslist@4.23.0:
dependencies:
caniuse-lite: 1.0.30001620
electron-to-chromium: 1.4.773
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.23.0)
camelcase-css@2.0.1: {}
camelcase@7.0.1: {}
caniuse-api@3.0.0:
dependencies:
browserslist: 4.23.0
caniuse-lite: 1.0.30001620
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
caniuse-lite@1.0.30001620: {}
camelcase@8.0.0: {}
ccount@2.0.1: {}
chalk@2.4.2:
dependencies:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
chalk@5.3.0: {}
chalk@5.6.0: {}
character-entities-html4@2.1.0: {}
@ -6977,213 +4036,91 @@ snapshots:
character-reference-invalid@2.0.1: {}
chokidar@3.5.3:
chokidar@5.0.0:
dependencies:
anymatch: 3.1.3
braces: 3.0.2
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
readdirp: 5.0.0
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
braces: 3.0.2
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
ci-info@4.0.0: {}
ci-info@4.4.0: {}
cli-boxes@3.0.0: {}
cli-cursor@4.0.0:
dependencies:
restore-cursor: 4.0.0
cli-spinners@2.9.2: {}
cliui@8.0.1:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
clsx@2.1.1: {}
collapse-white-space@2.1.0: {}
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
color-name@1.1.3: {}
color-name@1.1.4: {}
color-string@1.9.1:
dependencies:
color-name: 1.1.4
simple-swizzle: 0.2.2
color@4.2.3:
dependencies:
color-convert: 2.0.1
color-string: 1.9.1
colord@2.9.3: {}
comma-separated-tokens@2.0.3: {}
commander@4.1.1: {}
commander@7.2.0: {}
commander@11.1.0: {}
common-ancestor-path@1.0.1: {}
concat-map@0.0.1: {}
cookie-es@1.2.2: {}
convert-source-map@2.0.0: {}
cookie@1.1.1: {}
cookie@0.6.0: {}
cross-spawn@7.0.3:
crossws@0.3.5:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
uncrypto: 0.1.3
css-blank-pseudo@6.0.2(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
css-declaration-sorter@7.2.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
css-has-pseudo@6.0.5(postcss@8.4.33):
dependencies:
"@csstools/selector-specificity": 3.1.1(postcss-selector-parser@6.0.16)
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
css-prefers-color-scheme@9.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
css-select@5.1.0:
css-select@5.2.2:
dependencies:
boolbase: 1.0.0
css-what: 6.1.0
css-what: 6.2.2
domhandler: 5.0.3
domutils: 3.1.0
domutils: 3.2.2
nth-check: 2.1.1
css-selector-parser@3.0.4: {}
css-selector-parser@3.1.3: {}
css-tree@2.2.1:
dependencies:
mdn-data: 2.0.28
source-map-js: 1.2.0
source-map-js: 1.2.1
css-tree@2.3.1:
css-tree@3.1.0:
dependencies:
mdn-data: 2.0.30
source-map-js: 1.2.0
mdn-data: 2.12.2
source-map-js: 1.2.1
css-what@6.1.0: {}
cssdb@8.0.1: {}
css-what@6.2.2: {}
cssesc@3.0.0: {}
cssnano-preset-default@7.0.1(postcss@8.4.33):
dependencies:
browserslist: 4.23.0
css-declaration-sorter: 7.2.0(postcss@8.4.33)
cssnano-utils: 5.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-calc: 10.0.0(postcss@8.4.33)
postcss-colormin: 7.0.0(postcss@8.4.33)
postcss-convert-values: 7.0.0(postcss@8.4.33)
postcss-discard-comments: 7.0.0(postcss@8.4.33)
postcss-discard-duplicates: 7.0.0(postcss@8.4.33)
postcss-discard-empty: 7.0.0(postcss@8.4.33)
postcss-discard-overridden: 7.0.0(postcss@8.4.33)
postcss-merge-longhand: 7.0.0(postcss@8.4.33)
postcss-merge-rules: 7.0.0(postcss@8.4.33)
postcss-minify-font-values: 7.0.0(postcss@8.4.33)
postcss-minify-gradients: 7.0.0(postcss@8.4.33)
postcss-minify-params: 7.0.0(postcss@8.4.33)
postcss-minify-selectors: 7.0.0(postcss@8.4.33)
postcss-normalize-charset: 7.0.0(postcss@8.4.33)
postcss-normalize-display-values: 7.0.0(postcss@8.4.33)
postcss-normalize-positions: 7.0.0(postcss@8.4.33)
postcss-normalize-repeat-style: 7.0.0(postcss@8.4.33)
postcss-normalize-string: 7.0.0(postcss@8.4.33)
postcss-normalize-timing-functions: 7.0.0(postcss@8.4.33)
postcss-normalize-unicode: 7.0.0(postcss@8.4.33)
postcss-normalize-url: 7.0.0(postcss@8.4.33)
postcss-normalize-whitespace: 7.0.0(postcss@8.4.33)
postcss-ordered-values: 7.0.0(postcss@8.4.33)
postcss-reduce-initial: 7.0.0(postcss@8.4.33)
postcss-reduce-transforms: 7.0.0(postcss@8.4.33)
postcss-svgo: 7.0.0(postcss@8.4.33)
postcss-unique-selectors: 7.0.0(postcss@8.4.33)
cssnano-utils@5.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
cssnano@7.0.1(postcss@8.4.33):
dependencies:
cssnano-preset-default: 7.0.1(postcss@8.4.33)
lilconfig: 3.1.1
postcss: 8.4.33
csso@5.0.5:
dependencies:
css-tree: 2.2.1
debug@4.3.4:
debug@4.4.1:
dependencies:
ms: 2.1.2
ms: 2.1.3
decode-named-character-reference@1.0.2:
debug@4.4.3:
dependencies:
ms: 2.1.3
decode-named-character-reference@1.2.0:
dependencies:
character-entities: 2.0.2
defu@6.1.4: {}
dequal@2.0.3: {}
detect-libc@2.0.3: {}
destr@2.0.5: {}
detect-libc@2.1.2: {}
deterministic-object-hash@2.0.2:
dependencies:
base-64: 1.0.0
devalue@5.0.0: {}
devalue@5.6.2: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
didyoumean@1.2.2: {}
diff@5.2.0: {}
diff@8.0.3: {}
direction@2.0.1: {}
@ -7201,454 +4138,356 @@ snapshots:
dependencies:
domelementtype: 2.3.0
domutils@3.1.0:
domutils@3.2.2:
dependencies:
dom-serializer: 2.0.0
domelementtype: 2.3.0
domhandler: 5.0.3
dset@3.1.3: {}
dset@3.1.4: {}
eastasianwidth@0.2.0: {}
electron-to-chromium@1.4.773: {}
emmet@2.4.6:
dependencies:
"@emmetio/abbreviation": 2.3.3
"@emmetio/css-abbreviation": 2.1.8
emoji-regex@10.3.0: {}
emoji-regex@10.4.0: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
entities@4.5.0: {}
es-module-lexer@1.4.1: {}
entities@6.0.1: {}
es-module-lexer@1.5.2: {}
es-module-lexer@1.7.0: {}
esbuild@0.20.2:
esast-util-from-estree@2.0.0:
dependencies:
"@types/estree-jsx": 1.0.5
devlop: 1.1.0
estree-util-visit: 2.0.0
unist-util-position-from-estree: 2.0.0
esast-util-from-js@2.0.1:
dependencies:
"@types/estree-jsx": 1.0.5
acorn: 8.15.0
esast-util-from-estree: 2.0.0
vfile-message: 4.0.3
esbuild@0.25.9:
optionalDependencies:
"@esbuild/aix-ppc64": 0.20.2
"@esbuild/android-arm": 0.20.2
"@esbuild/android-arm64": 0.20.2
"@esbuild/android-x64": 0.20.2
"@esbuild/darwin-arm64": 0.20.2
"@esbuild/darwin-x64": 0.20.2
"@esbuild/freebsd-arm64": 0.20.2
"@esbuild/freebsd-x64": 0.20.2
"@esbuild/linux-arm": 0.20.2
"@esbuild/linux-arm64": 0.20.2
"@esbuild/linux-ia32": 0.20.2
"@esbuild/linux-loong64": 0.20.2
"@esbuild/linux-mips64el": 0.20.2
"@esbuild/linux-ppc64": 0.20.2
"@esbuild/linux-riscv64": 0.20.2
"@esbuild/linux-s390x": 0.20.2
"@esbuild/linux-x64": 0.20.2
"@esbuild/netbsd-x64": 0.20.2
"@esbuild/openbsd-x64": 0.20.2
"@esbuild/sunos-x64": 0.20.2
"@esbuild/win32-arm64": 0.20.2
"@esbuild/win32-ia32": 0.20.2
"@esbuild/win32-x64": 0.20.2
esbuild@0.21.3:
optionalDependencies:
"@esbuild/aix-ppc64": 0.21.3
"@esbuild/android-arm": 0.21.3
"@esbuild/android-arm64": 0.21.3
"@esbuild/android-x64": 0.21.3
"@esbuild/darwin-arm64": 0.21.3
"@esbuild/darwin-x64": 0.21.3
"@esbuild/freebsd-arm64": 0.21.3
"@esbuild/freebsd-x64": 0.21.3
"@esbuild/linux-arm": 0.21.3
"@esbuild/linux-arm64": 0.21.3
"@esbuild/linux-ia32": 0.21.3
"@esbuild/linux-loong64": 0.21.3
"@esbuild/linux-mips64el": 0.21.3
"@esbuild/linux-ppc64": 0.21.3
"@esbuild/linux-riscv64": 0.21.3
"@esbuild/linux-s390x": 0.21.3
"@esbuild/linux-x64": 0.21.3
"@esbuild/netbsd-x64": 0.21.3
"@esbuild/openbsd-x64": 0.21.3
"@esbuild/sunos-x64": 0.21.3
"@esbuild/win32-arm64": 0.21.3
"@esbuild/win32-ia32": 0.21.3
"@esbuild/win32-x64": 0.21.3
escalade@3.1.1: {}
escape-string-regexp@1.0.5: {}
"@esbuild/aix-ppc64": 0.25.9
"@esbuild/android-arm": 0.25.9
"@esbuild/android-arm64": 0.25.9
"@esbuild/android-x64": 0.25.9
"@esbuild/darwin-arm64": 0.25.9
"@esbuild/darwin-x64": 0.25.9
"@esbuild/freebsd-arm64": 0.25.9
"@esbuild/freebsd-x64": 0.25.9
"@esbuild/linux-arm": 0.25.9
"@esbuild/linux-arm64": 0.25.9
"@esbuild/linux-ia32": 0.25.9
"@esbuild/linux-loong64": 0.25.9
"@esbuild/linux-mips64el": 0.25.9
"@esbuild/linux-ppc64": 0.25.9
"@esbuild/linux-riscv64": 0.25.9
"@esbuild/linux-s390x": 0.25.9
"@esbuild/linux-x64": 0.25.9
"@esbuild/netbsd-arm64": 0.25.9
"@esbuild/netbsd-x64": 0.25.9
"@esbuild/openbsd-arm64": 0.25.9
"@esbuild/openbsd-x64": 0.25.9
"@esbuild/openharmony-arm64": 0.25.9
"@esbuild/sunos-x64": 0.25.9
"@esbuild/win32-arm64": 0.25.9
"@esbuild/win32-ia32": 0.25.9
"@esbuild/win32-x64": 0.25.9
escape-string-regexp@5.0.0: {}
esprima@4.0.1: {}
estree-util-attach-comments@3.0.0:
dependencies:
"@types/estree": 1.0.5
"@types/estree": 1.0.8
estree-util-build-jsx@3.0.1:
dependencies:
"@types/estree-jsx": 1.0.3
"@types/estree-jsx": 1.0.5
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
estree-walker: 3.0.3
estree-util-is-identifier-name@3.0.0: {}
estree-util-scope@1.0.0:
dependencies:
"@types/estree": 1.0.8
devlop: 1.1.0
estree-util-to-js@2.0.0:
dependencies:
"@types/estree-jsx": 1.0.3
astring: 1.8.6
source-map: 0.7.4
"@types/estree-jsx": 1.0.5
astring: 1.9.0
source-map: 0.7.6
estree-util-visit@2.0.0:
dependencies:
"@types/estree-jsx": 1.0.3
"@types/unist": 3.0.2
"@types/estree-jsx": 1.0.5
"@types/unist": 3.0.3
estree-walker@2.0.2: {}
estree-walker@3.0.3:
dependencies:
"@types/estree": 1.0.5
"@types/estree": 1.0.8
eventemitter3@5.0.1: {}
execa@8.0.1:
expressive-code@0.41.3:
dependencies:
cross-spawn: 7.0.3
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: 3.0.0
expressive-code@0.35.3:
dependencies:
"@expressive-code/core": 0.35.3
"@expressive-code/plugin-frames": 0.35.3
"@expressive-code/plugin-shiki": 0.35.3
"@expressive-code/plugin-text-markers": 0.35.3
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
"@expressive-code/core": 0.41.3
"@expressive-code/plugin-frames": 0.41.3
"@expressive-code/plugin-shiki": 0.41.3
"@expressive-code/plugin-text-markers": 0.41.3
extend@3.0.2: {}
fast-glob@3.3.2:
dependencies:
"@nodelib/fs.stat": 2.0.5
"@nodelib/fs.walk": 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
fastq@1.15.0:
dependencies:
reusify: 1.0.4
fill-range@7.0.1:
dependencies:
to-regex-range: 5.0.1
find-up@4.1.0:
dependencies:
locate-path: 5.0.0
path-exists: 4.0.0
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
path-exists: 4.0.0
find-yarn-workspace-root2@1.2.16:
dependencies:
micromatch: 4.0.5
pkg-dir: 4.2.0
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
flattie@1.1.1: {}
fraction.js@4.3.7: {}
fontace@0.4.1:
dependencies:
fontkitten: 1.0.2
fs.realpath@1.0.0: {}
fontkitten@1.0.2:
dependencies:
tiny-inflate: 1.0.3
fsevents@2.3.3:
optional: true
function-bind@1.1.2: {}
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
get-east-asian-width@1.2.0: {}
get-stream@8.0.1: {}
get-east-asian-width@1.3.0: {}
github-slugger@2.0.0: {}
glob-parent@5.1.2:
h3@1.15.5:
dependencies:
is-glob: 4.0.3
glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
glob@7.1.6:
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
globals@11.12.0: {}
graceful-fs@4.2.11: {}
gray-matter@4.0.3:
dependencies:
js-yaml: 3.14.1
kind-of: 6.0.3
section-matter: 1.0.0
strip-bom-string: 1.0.0
has-flag@3.0.0: {}
hasown@2.0.0:
dependencies:
function-bind: 1.1.2
cookie-es: 1.2.2
crossws: 0.3.5
defu: 6.1.4
destr: 2.0.5
iron-webcrypto: 1.2.1
node-mock-http: 1.0.4
radix3: 1.1.2
ufo: 1.6.3
uncrypto: 0.1.3
hast-util-embedded@3.0.0:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
hast-util-is-element: 3.0.0
hast-util-from-html@2.0.1:
hast-util-format@1.1.0:
dependencies:
"@types/hast": 3.0.3
devlop: 1.1.0
hast-util-from-parse5: 8.0.1
parse5: 7.1.2
vfile: 6.0.1
vfile-message: 4.0.2
"@types/hast": 3.0.4
hast-util-embedded: 3.0.0
hast-util-minify-whitespace: 1.0.1
hast-util-phrasing: 3.0.1
hast-util-whitespace: 3.0.0
html-whitespace-sensitive-tag-names: 3.0.1
unist-util-visit-parents: 6.0.1
hast-util-from-parse5@8.0.1:
hast-util-from-html@2.0.3:
dependencies:
"@types/hast": 3.0.3
"@types/unist": 3.0.2
"@types/hast": 3.0.4
devlop: 1.1.0
hastscript: 8.0.0
property-information: 6.4.0
vfile: 6.0.1
vfile-location: 5.0.2
hast-util-from-parse5: 8.0.3
parse5: 7.3.0
vfile: 6.0.3
vfile-message: 4.0.3
hast-util-from-parse5@8.0.3:
dependencies:
"@types/hast": 3.0.4
"@types/unist": 3.0.3
devlop: 1.1.0
hastscript: 9.0.1
property-information: 7.1.0
vfile: 6.0.3
vfile-location: 5.0.3
web-namespaces: 2.0.1
hast-util-has-property@3.0.0:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
hast-util-is-body-ok-link@3.0.0:
hast-util-is-body-ok-link@3.0.1:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
hast-util-is-element@3.0.0:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
hast-util-minify-whitespace@1.0.1:
dependencies:
"@types/hast": 3.0.4
hast-util-embedded: 3.0.0
hast-util-is-element: 3.0.0
hast-util-whitespace: 3.0.0
unist-util-is: 6.0.0
hast-util-parse-selector@4.0.0:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
hast-util-phrasing@3.0.1:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
hast-util-embedded: 3.0.0
hast-util-has-property: 3.0.0
hast-util-is-body-ok-link: 3.0.0
hast-util-is-body-ok-link: 3.0.1
hast-util-is-element: 3.0.0
hast-util-raw@9.0.1:
hast-util-raw@9.1.0:
dependencies:
"@types/hast": 3.0.3
"@types/unist": 3.0.2
"@ungap/structured-clone": 1.2.0
hast-util-from-parse5: 8.0.1
"@types/hast": 3.0.4
"@types/unist": 3.0.3
"@ungap/structured-clone": 1.3.0
hast-util-from-parse5: 8.0.3
hast-util-to-parse5: 8.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.0.2
parse5: 7.1.2
mdast-util-to-hast: 13.2.0
parse5: 7.3.0
unist-util-position: 5.0.0
unist-util-visit: 5.0.0
vfile: 6.0.1
vfile: 6.0.3
web-namespaces: 2.0.1
zwitch: 2.0.4
hast-util-select@6.0.2:
hast-util-select@6.0.4:
dependencies:
"@types/hast": 3.0.3
"@types/unist": 3.0.2
"@types/hast": 3.0.4
"@types/unist": 3.0.3
bcp-47-match: 2.0.3
comma-separated-tokens: 2.0.3
css-selector-parser: 3.0.4
css-selector-parser: 3.1.3
devlop: 1.1.0
direction: 2.0.1
hast-util-has-property: 3.0.0
hast-util-to-string: 3.0.0
hast-util-to-string: 3.0.1
hast-util-whitespace: 3.0.0
not: 0.1.0
nth-check: 2.1.1
property-information: 6.4.0
property-information: 7.1.0
space-separated-tokens: 2.0.2
unist-util-visit: 5.0.0
zwitch: 2.0.4
hast-util-to-estree@3.1.0:
hast-util-to-estree@3.1.3:
dependencies:
"@types/estree": 1.0.5
"@types/estree-jsx": 1.0.3
"@types/hast": 3.0.3
"@types/estree": 1.0.8
"@types/estree-jsx": 1.0.5
"@types/hast": 3.0.4
comma-separated-tokens: 2.0.3
devlop: 1.1.0
estree-util-attach-comments: 3.0.0
estree-util-is-identifier-name: 3.0.0
hast-util-whitespace: 3.0.0
mdast-util-mdx-expression: 2.0.0
mdast-util-mdx-jsx: 3.0.0
mdast-util-mdx-expression: 2.0.1
mdast-util-mdx-jsx: 3.2.0
mdast-util-mdxjs-esm: 2.0.1
property-information: 6.4.0
property-information: 7.1.0
space-separated-tokens: 2.0.2
style-to-object: 0.4.4
style-to-js: 1.1.17
unist-util-position: 5.0.0
zwitch: 2.0.4
transitivePeerDependencies:
- supports-color
hast-util-to-html@9.0.0:
hast-util-to-html@9.0.5:
dependencies:
"@types/hast": 3.0.3
"@types/unist": 3.0.2
"@types/hast": 3.0.4
"@types/unist": 3.0.3
ccount: 2.0.1
comma-separated-tokens: 2.0.3
hast-util-raw: 9.0.1
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.0.2
property-information: 6.4.0
mdast-util-to-hast: 13.2.0
property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.3
stringify-entities: 4.0.4
zwitch: 2.0.4
hast-util-to-html@9.0.1:
hast-util-to-jsx-runtime@2.3.6:
dependencies:
"@types/hast": 3.0.3
"@types/unist": 3.0.2
ccount: 2.0.1
comma-separated-tokens: 2.0.3
hast-util-raw: 9.0.1
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.0.2
property-information: 6.4.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.3
zwitch: 2.0.4
hast-util-to-jsx-runtime@2.3.0:
dependencies:
"@types/estree": 1.0.5
"@types/hast": 3.0.3
"@types/unist": 3.0.2
"@types/estree": 1.0.8
"@types/hast": 3.0.4
"@types/unist": 3.0.3
comma-separated-tokens: 2.0.3
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
hast-util-whitespace: 3.0.0
mdast-util-mdx-expression: 2.0.0
mdast-util-mdx-jsx: 3.0.0
mdast-util-mdx-expression: 2.0.1
mdast-util-mdx-jsx: 3.2.0
mdast-util-mdxjs-esm: 2.0.1
property-information: 6.4.0
property-information: 7.1.0
space-separated-tokens: 2.0.2
style-to-object: 1.0.5
style-to-js: 1.1.17
unist-util-position: 5.0.0
vfile-message: 4.0.2
vfile-message: 4.0.3
transitivePeerDependencies:
- supports-color
hast-util-to-parse5@8.0.0:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
comma-separated-tokens: 2.0.3
devlop: 1.1.0
property-information: 6.4.0
property-information: 6.5.0
space-separated-tokens: 2.0.2
web-namespaces: 2.0.1
zwitch: 2.0.4
hast-util-to-string@3.0.0:
hast-util-to-string@3.0.1:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
hast-util-to-text@4.0.2:
dependencies:
"@types/hast": 3.0.3
"@types/unist": 3.0.2
"@types/hast": 3.0.4
"@types/unist": 3.0.3
hast-util-is-element: 3.0.0
unist-util-find-after: 5.0.0
hast-util-whitespace@3.0.0:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
hastscript@8.0.0:
hastscript@9.0.1:
dependencies:
"@types/hast": 3.0.3
"@types/hast": 3.0.4
comma-separated-tokens: 2.0.3
hast-util-parse-selector: 4.0.0
property-information: 6.4.0
space-separated-tokens: 2.0.2
hastscript@9.0.0:
dependencies:
"@types/hast": 3.0.3
comma-separated-tokens: 2.0.3
hast-util-parse-selector: 4.0.0
property-information: 6.4.0
property-information: 7.1.0
space-separated-tokens: 2.0.2
html-escaper@3.0.3: {}
html-void-elements@3.0.0: {}
html-whitespace-sensitive-tag-names@3.0.0: {}
html-whitespace-sensitive-tag-names@3.0.1: {}
http-cache-semantics@4.1.1: {}
http-cache-semantics@4.2.0: {}
human-signals@5.0.0: {}
import-meta-resolve@4.0.0: {}
inflight@1.0.6:
i18next@23.16.8:
dependencies:
once: 1.4.0
wrappy: 1.0.2
"@babel/runtime": 7.28.3
inherits@2.0.4: {}
import-meta-resolve@4.1.0: {}
inline-style-parser@0.1.1: {}
import-meta-resolve@4.2.0: {}
inline-style-parser@0.2.2: {}
inline-style-parser@0.2.4: {}
iron-webcrypto@1.2.1: {}
is-alphabetical@2.0.1: {}
@ -7657,1282 +4496,750 @@ snapshots:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
is-arrayish@0.3.2: {}
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.2.0
is-buffer@2.0.5: {}
is-core-module@2.13.1:
dependencies:
hasown: 2.0.0
is-decimal@2.0.1: {}
is-docker@3.0.0: {}
is-extendable@0.1.1: {}
is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
is-hexadecimal@2.0.1: {}
is-inside-container@1.0.0:
dependencies:
is-docker: 3.0.0
is-interactive@2.0.0: {}
is-number@7.0.0: {}
is-plain-obj@4.1.0: {}
is-reference@3.0.2:
dependencies:
"@types/estree": 1.0.5
is-stream@3.0.0: {}
is-unicode-supported@1.3.0: {}
is-unicode-supported@2.0.0: {}
is-wsl@3.1.0:
dependencies:
is-inside-container: 1.0.0
isexe@2.0.0: {}
jiti@1.21.0: {}
js-tokens@4.0.0: {}
js-yaml@3.14.1:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
jsesc@2.5.2: {}
json5@2.2.3: {}
jsonc-parser@2.3.1: {}
kind-of@6.0.3: {}
js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
kleur@3.0.3: {}
kleur@4.1.5: {}
lilconfig@2.1.0: {}
lilconfig@3.0.0: {}
lilconfig@3.1.1: {}
lines-and-columns@1.2.4: {}
load-yaml-file@0.2.0:
dependencies:
graceful-fs: 4.2.11
js-yaml: 3.14.1
pify: 4.0.1
strip-bom: 3.0.0
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
lodash.memoize@4.1.2: {}
lodash.uniq@4.5.0: {}
log-symbols@6.0.0:
dependencies:
chalk: 5.3.0
is-unicode-supported: 1.3.0
klona@2.0.6: {}
longest-streak@3.1.0: {}
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
lru-cache@11.2.5: {}
lru-cache@6.0.0:
magic-string@0.30.18:
dependencies:
yallist: 4.0.0
"@jridgewell/sourcemap-codec": 1.5.5
magic-string@0.30.10:
magic-string@0.30.21:
dependencies:
"@jridgewell/sourcemap-codec": 1.4.15
"@jridgewell/sourcemap-codec": 1.5.5
magicast@0.5.2:
dependencies:
"@babel/parser": 7.29.0
"@babel/types": 7.29.0
source-map-js: 1.2.1
markdown-extensions@2.0.0: {}
markdown-table@3.0.3: {}
markdown-table@3.0.4: {}
mdast-util-definitions@6.0.0:
dependencies:
"@types/mdast": 4.0.3
"@types/unist": 3.0.2
"@types/mdast": 4.0.4
"@types/unist": 3.0.3
unist-util-visit: 5.0.0
mdast-util-directive@3.0.0:
mdast-util-directive@3.1.0:
dependencies:
"@types/mdast": 4.0.3
"@types/unist": 3.0.2
"@types/mdast": 4.0.4
"@types/unist": 3.0.3
ccount: 2.0.1
devlop: 1.1.0
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
parse-entities: 4.0.1
stringify-entities: 4.0.3
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
parse-entities: 4.0.2
stringify-entities: 4.0.4
unist-util-visit-parents: 6.0.1
transitivePeerDependencies:
- supports-color
mdast-util-find-and-replace@3.0.1:
mdast-util-find-and-replace@3.0.2:
dependencies:
"@types/mdast": 4.0.3
"@types/mdast": 4.0.4
escape-string-regexp: 5.0.0
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
mdast-util-from-markdown@2.0.0:
mdast-util-from-markdown@2.0.2:
dependencies:
"@types/mdast": 4.0.3
"@types/unist": 3.0.2
decode-named-character-reference: 1.0.2
"@types/mdast": 4.0.4
"@types/unist": 3.0.3
decode-named-character-reference: 1.2.0
devlop: 1.1.0
mdast-util-to-string: 4.0.0
micromark: 4.0.0
micromark-util-decode-numeric-character-reference: 2.0.1
micromark-util-decode-string: 2.0.0
micromark-util-normalize-identifier: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark: 4.0.2
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-decode-string: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-autolink-literal@2.0.0:
mdast-util-gfm-autolink-literal@2.0.1:
dependencies:
"@types/mdast": 4.0.3
"@types/mdast": 4.0.4
ccount: 2.0.1
devlop: 1.1.0
mdast-util-find-and-replace: 3.0.1
micromark-util-character: 2.0.1
mdast-util-find-and-replace: 3.0.2
micromark-util-character: 2.1.1
mdast-util-gfm-footnote@2.0.0:
mdast-util-gfm-footnote@2.1.0:
dependencies:
"@types/mdast": 4.0.3
"@types/mdast": 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
micromark-util-normalize-identifier: 2.0.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
micromark-util-normalize-identifier: 2.0.1
transitivePeerDependencies:
- supports-color
mdast-util-gfm-strikethrough@2.0.0:
dependencies:
"@types/mdast": 4.0.3
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
"@types/mdast": 4.0.4
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-table@2.0.0:
dependencies:
"@types/mdast": 4.0.3
"@types/mdast": 4.0.4
devlop: 1.1.0
markdown-table: 3.0.3
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
markdown-table: 3.0.4
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-task-list-item@2.0.0:
dependencies:
"@types/mdast": 4.0.3
"@types/mdast": 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm@3.0.0:
mdast-util-gfm@3.1.0:
dependencies:
mdast-util-from-markdown: 2.0.0
mdast-util-gfm-autolink-literal: 2.0.0
mdast-util-gfm-footnote: 2.0.0
mdast-util-from-markdown: 2.0.2
mdast-util-gfm-autolink-literal: 2.0.1
mdast-util-gfm-footnote: 2.1.0
mdast-util-gfm-strikethrough: 2.0.0
mdast-util-gfm-table: 2.0.0
mdast-util-gfm-task-list-item: 2.0.0
mdast-util-to-markdown: 2.1.0
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-mdx-expression@2.0.0:
mdast-util-mdx-expression@2.0.1:
dependencies:
"@types/estree-jsx": 1.0.3
"@types/hast": 3.0.3
"@types/mdast": 4.0.3
"@types/estree-jsx": 1.0.5
"@types/hast": 3.0.4
"@types/mdast": 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-mdx-jsx@3.0.0:
mdast-util-mdx-jsx@3.2.0:
dependencies:
"@types/estree-jsx": 1.0.3
"@types/hast": 3.0.3
"@types/mdast": 4.0.3
"@types/unist": 3.0.2
"@types/estree-jsx": 1.0.5
"@types/hast": 3.0.4
"@types/mdast": 4.0.4
"@types/unist": 3.0.3
ccount: 2.0.1
devlop: 1.1.0
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
parse-entities: 4.0.1
stringify-entities: 4.0.3
unist-util-remove-position: 5.0.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
parse-entities: 4.0.2
stringify-entities: 4.0.4
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2
vfile-message: 4.0.3
transitivePeerDependencies:
- supports-color
mdast-util-mdx@3.0.0:
dependencies:
mdast-util-from-markdown: 2.0.0
mdast-util-mdx-expression: 2.0.0
mdast-util-mdx-jsx: 3.0.0
mdast-util-from-markdown: 2.0.2
mdast-util-mdx-expression: 2.0.1
mdast-util-mdx-jsx: 3.2.0
mdast-util-mdxjs-esm: 2.0.1
mdast-util-to-markdown: 2.1.0
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-mdxjs-esm@2.0.1:
dependencies:
"@types/estree-jsx": 1.0.3
"@types/hast": 3.0.3
"@types/mdast": 4.0.3
"@types/estree-jsx": 1.0.5
"@types/hast": 3.0.4
"@types/mdast": 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-phrasing@4.0.0:
mdast-util-phrasing@4.1.0:
dependencies:
"@types/mdast": 4.0.3
"@types/mdast": 4.0.4
unist-util-is: 6.0.0
mdast-util-to-hast@13.0.2:
mdast-util-to-hast@13.2.0:
dependencies:
"@types/hast": 3.0.3
"@types/mdast": 4.0.3
"@ungap/structured-clone": 1.2.0
"@types/hast": 3.0.4
"@types/mdast": 4.0.4
"@ungap/structured-clone": 1.3.0
devlop: 1.1.0
micromark-util-sanitize-uri: 2.0.0
micromark-util-sanitize-uri: 2.0.1
trim-lines: 3.0.1
unist-util-position: 5.0.0
unist-util-visit: 5.0.0
vfile: 6.0.3
mdast-util-to-markdown@2.1.0:
mdast-util-to-markdown@2.1.2:
dependencies:
"@types/mdast": 4.0.3
"@types/unist": 3.0.2
"@types/mdast": 4.0.4
"@types/unist": 3.0.3
longest-streak: 3.1.0
mdast-util-phrasing: 4.0.0
mdast-util-phrasing: 4.1.0
mdast-util-to-string: 4.0.0
micromark-util-decode-string: 2.0.0
micromark-util-classify-character: 2.0.1
micromark-util-decode-string: 2.0.1
unist-util-visit: 5.0.0
zwitch: 2.0.4
mdast-util-to-string@4.0.0:
dependencies:
"@types/mdast": 4.0.3
"@types/mdast": 4.0.4
mdn-data@2.0.28: {}
mdn-data@2.0.30: {}
mdn-data@2.12.2: {}
merge-stream@2.0.0: {}
merge2@1.4.1: {}
micromark-core-commonmark@2.0.0:
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.0.2
decode-named-character-reference: 1.2.0
devlop: 1.1.0
micromark-factory-destination: 2.0.0
micromark-factory-label: 2.0.0
micromark-factory-space: 2.0.0
micromark-factory-title: 2.0.0
micromark-factory-whitespace: 2.0.0
micromark-util-character: 2.0.1
micromark-util-chunked: 2.0.0
micromark-util-classify-character: 2.0.0
micromark-util-html-tag-name: 2.0.0
micromark-util-normalize-identifier: 2.0.0
micromark-util-resolve-all: 2.0.0
micromark-util-subtokenize: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-destination: 2.0.1
micromark-factory-label: 2.0.1
micromark-factory-space: 2.0.1
micromark-factory-title: 2.0.1
micromark-factory-whitespace: 2.0.1
micromark-util-character: 2.1.1
micromark-util-chunked: 2.0.1
micromark-util-classify-character: 2.0.1
micromark-util-html-tag-name: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-subtokenize: 2.1.0
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-directive@3.0.0:
micromark-extension-directive@3.0.2:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.0
micromark-factory-whitespace: 2.0.0
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
parse-entities: 4.0.1
micromark-factory-space: 2.0.1
micromark-factory-whitespace: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
parse-entities: 4.0.2
micromark-extension-gfm-autolink-literal@2.0.0:
micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
micromark-util-character: 2.0.1
micromark-util-sanitize-uri: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-character: 2.1.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-footnote@2.0.0:
micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
micromark-core-commonmark: 2.0.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.1
micromark-util-normalize-identifier: 2.0.0
micromark-util-sanitize-uri: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-core-commonmark: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-strikethrough@2.0.0:
micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.0
micromark-util-classify-character: 2.0.0
micromark-util-resolve-all: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-chunked: 2.0.1
micromark-util-classify-character: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-table@2.0.0:
micromark-extension-gfm-table@2.1.1:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
micromark-util-types: 2.0.0
micromark-util-types: 2.0.2
micromark-extension-gfm-task-list-item@2.0.1:
micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm@3.0.0:
dependencies:
micromark-extension-gfm-autolink-literal: 2.0.0
micromark-extension-gfm-footnote: 2.0.0
micromark-extension-gfm-strikethrough: 2.0.0
micromark-extension-gfm-table: 2.0.0
micromark-extension-gfm-autolink-literal: 2.1.0
micromark-extension-gfm-footnote: 2.1.0
micromark-extension-gfm-strikethrough: 2.1.0
micromark-extension-gfm-table: 2.1.1
micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.0.1
micromark-util-combine-extensions: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-mdx-expression@3.0.0:
micromark-extension-mdx-expression@3.0.1:
dependencies:
"@types/estree": 1.0.5
"@types/estree": 1.0.8
devlop: 1.1.0
micromark-factory-mdx-expression: 2.0.1
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.1
micromark-util-events-to-acorn: 2.0.2
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-mdx-expression: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-events-to-acorn: 2.0.3
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-mdx-jsx@3.0.0:
micromark-extension-mdx-jsx@3.0.2:
dependencies:
"@types/acorn": 4.0.6
"@types/estree": 1.0.5
"@types/estree": 1.0.8
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
micromark-factory-mdx-expression: 2.0.1
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
vfile-message: 4.0.2
micromark-factory-mdx-expression: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-events-to-acorn: 2.0.3
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
vfile-message: 4.0.3
micromark-extension-mdx-md@2.0.0:
dependencies:
micromark-util-types: 2.0.0
micromark-util-types: 2.0.2
micromark-extension-mdxjs-esm@3.0.0:
dependencies:
"@types/estree": 1.0.5
"@types/estree": 1.0.8
devlop: 1.1.0
micromark-core-commonmark: 2.0.0
micromark-util-character: 2.0.1
micromark-util-events-to-acorn: 2.0.2
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-core-commonmark: 2.0.3
micromark-util-character: 2.1.1
micromark-util-events-to-acorn: 2.0.3
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
unist-util-position-from-estree: 2.0.0
vfile-message: 4.0.2
vfile-message: 4.0.3
micromark-extension-mdxjs@3.0.0:
dependencies:
acorn: 8.11.2
acorn-jsx: 5.3.2(acorn@8.11.2)
micromark-extension-mdx-expression: 3.0.0
micromark-extension-mdx-jsx: 3.0.0
acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0)
micromark-extension-mdx-expression: 3.0.1
micromark-extension-mdx-jsx: 3.0.2
micromark-extension-mdx-md: 2.0.0
micromark-extension-mdxjs-esm: 3.0.0
micromark-util-combine-extensions: 2.0.0
micromark-util-types: 2.0.0
micromark-util-combine-extensions: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-destination@2.0.0:
micromark-factory-destination@2.0.1:
dependencies:
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-label@2.0.0:
micromark-factory-label@2.0.1:
dependencies:
devlop: 1.1.0
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-mdx-expression@2.0.1:
micromark-factory-mdx-expression@2.0.3:
dependencies:
"@types/estree": 1.0.5
"@types/estree": 1.0.8
devlop: 1.1.0
micromark-util-character: 2.0.1
micromark-util-events-to-acorn: 2.0.2
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-events-to-acorn: 2.0.3
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
unist-util-position-from-estree: 2.0.0
vfile-message: 4.0.2
vfile-message: 4.0.3
micromark-factory-space@2.0.0:
micromark-factory-space@2.0.1:
dependencies:
micromark-util-character: 2.0.1
micromark-util-types: 2.0.0
micromark-util-character: 2.1.1
micromark-util-types: 2.0.2
micromark-factory-title@2.0.0:
micromark-factory-title@2.0.1:
dependencies:
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-whitespace@2.0.0:
micromark-factory-whitespace@2.0.1:
dependencies:
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-util-character@2.0.1:
micromark-util-character@2.1.1:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-util-chunked@2.0.0:
micromark-util-chunked@2.0.1:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-symbol: 2.0.1
micromark-util-classify-character@2.0.0:
micromark-util-classify-character@2.0.1:
dependencies:
micromark-util-character: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-util-combine-extensions@2.0.0:
micromark-util-combine-extensions@2.0.1:
dependencies:
micromark-util-chunked: 2.0.0
micromark-util-types: 2.0.0
micromark-util-chunked: 2.0.1
micromark-util-types: 2.0.2
micromark-util-decode-numeric-character-reference@2.0.1:
micromark-util-decode-numeric-character-reference@2.0.2:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-symbol: 2.0.1
micromark-util-decode-string@2.0.0:
micromark-util-decode-string@2.0.1:
dependencies:
decode-named-character-reference: 1.0.2
micromark-util-character: 2.0.1
micromark-util-decode-numeric-character-reference: 2.0.1
micromark-util-symbol: 2.0.0
decode-named-character-reference: 1.2.0
micromark-util-character: 2.1.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-symbol: 2.0.1
micromark-util-encode@2.0.0: {}
micromark-util-encode@2.0.1: {}
micromark-util-events-to-acorn@2.0.2:
micromark-util-events-to-acorn@2.0.3:
dependencies:
"@types/acorn": 4.0.6
"@types/estree": 1.0.5
"@types/unist": 3.0.2
"@types/estree": 1.0.8
"@types/unist": 3.0.3
devlop: 1.1.0
estree-util-visit: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
vfile-message: 4.0.2
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
vfile-message: 4.0.3
micromark-util-html-tag-name@2.0.0: {}
micromark-util-html-tag-name@2.0.1: {}
micromark-util-normalize-identifier@2.0.0:
micromark-util-normalize-identifier@2.0.1:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-symbol: 2.0.1
micromark-util-resolve-all@2.0.0:
micromark-util-resolve-all@2.0.1:
dependencies:
micromark-util-types: 2.0.0
micromark-util-types: 2.0.2
micromark-util-sanitize-uri@2.0.0:
micromark-util-sanitize-uri@2.0.1:
dependencies:
micromark-util-character: 2.0.1
micromark-util-encode: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-character: 2.1.1
micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-subtokenize@2.0.0:
micromark-util-subtokenize@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-chunked: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-util-symbol@2.0.0: {}
micromark-util-symbol@2.0.1: {}
micromark-util-types@2.0.0: {}
micromark-util-types@2.0.2: {}
micromark@4.0.0:
micromark@4.0.2:
dependencies:
"@types/debug": 4.1.12
debug: 4.3.4
decode-named-character-reference: 1.0.2
debug: 4.4.1
decode-named-character-reference: 1.2.0
devlop: 1.1.0
micromark-core-commonmark: 2.0.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.1
micromark-util-chunked: 2.0.0
micromark-util-combine-extensions: 2.0.0
micromark-util-decode-numeric-character-reference: 2.0.1
micromark-util-encode: 2.0.0
micromark-util-normalize-identifier: 2.0.0
micromark-util-resolve-all: 2.0.0
micromark-util-sanitize-uri: 2.0.0
micromark-util-subtokenize: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-core-commonmark: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-chunked: 2.0.1
micromark-util-combine-extensions: 2.0.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-encode: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-subtokenize: 2.1.0
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
transitivePeerDependencies:
- supports-color
micromatch@4.0.5:
mrmime@2.0.1: {}
ms@2.1.3: {}
nanoid@3.3.11: {}
neotraverse@0.6.18: {}
nlcst-to-string@4.0.0:
dependencies:
braces: 3.0.2
picomatch: 2.3.1
"@types/nlcst": 2.0.3
mimic-fn@2.1.0: {}
node-fetch-native@1.6.7: {}
mimic-fn@4.0.0: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
mrmime@2.0.0: {}
ms@2.1.2: {}
muggle-string@0.4.1: {}
mz@2.7.0:
dependencies:
any-promise: 1.3.0
object-assign: 4.1.1
thenify-all: 1.6.0
nanoid@3.3.7: {}
nlcst-to-string@3.1.1:
dependencies:
"@types/nlcst": 1.0.4
node-releases@2.0.14: {}
node-mock-http@1.0.4: {}
normalize-path@3.0.0: {}
normalize-range@0.1.2: {}
not@0.1.0: {}
npm-run-path@5.1.0:
dependencies:
path-key: 4.0.0
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
object-assign@4.1.1: {}
object-hash@3.0.0: {}
once@1.4.0:
ofetch@1.5.1:
dependencies:
wrappy: 1.0.2
destr: 2.0.5
node-fetch-native: 1.6.7
ufo: 1.6.1
onetime@5.1.2:
ohash@2.0.11: {}
oniguruma-parser@0.12.1: {}
oniguruma-to-es@4.3.3:
dependencies:
mimic-fn: 2.1.0
oniguruma-parser: 0.12.1
regex: 6.0.1
regex-recursion: 6.0.2
onetime@6.0.0:
oniguruma-to-es@4.3.4:
dependencies:
mimic-fn: 4.0.0
oniguruma-parser: 0.12.1
regex: 6.0.1
regex-recursion: 6.0.2
ora@8.0.1:
p-limit@6.2.0:
dependencies:
chalk: 5.3.0
cli-cursor: 4.0.0
cli-spinners: 2.9.2
is-interactive: 2.0.0
is-unicode-supported: 2.0.0
log-symbols: 6.0.0
stdin-discarder: 0.2.2
string-width: 7.1.0
strip-ansi: 7.1.0
yocto-queue: 1.2.1
p-limit@2.3.0:
dependencies:
p-try: 2.2.0
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
p-limit@5.0.0:
dependencies:
yocto-queue: 1.0.0
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
p-locate@5.0.0:
dependencies:
p-limit: 3.1.0
p-queue@8.0.1:
p-queue@8.1.1:
dependencies:
eventemitter3: 5.0.1
p-timeout: 6.1.2
p-timeout: 6.1.4
p-timeout@6.1.2: {}
p-timeout@6.1.4: {}
p-try@2.2.0: {}
package-manager-detector@1.6.0: {}
pagefind@1.0.4:
pagefind@1.3.0:
optionalDependencies:
"@pagefind/darwin-arm64": 1.0.4
"@pagefind/darwin-x64": 1.0.4
"@pagefind/linux-arm64": 1.0.4
"@pagefind/linux-x64": 1.0.4
"@pagefind/windows-x64": 1.0.4
"@pagefind/darwin-arm64": 1.3.0
"@pagefind/darwin-x64": 1.3.0
"@pagefind/linux-arm64": 1.3.0
"@pagefind/linux-x64": 1.3.0
"@pagefind/windows-x64": 1.3.0
parse-entities@4.0.1:
parse-entities@4.0.2:
dependencies:
"@types/unist": 2.0.10
character-entities: 2.0.2
"@types/unist": 2.0.11
character-entities-legacy: 3.0.0
character-reference-invalid: 2.0.1
decode-named-character-reference: 1.0.2
decode-named-character-reference: 1.2.0
is-alphanumerical: 2.0.1
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
parse-latin@5.0.1:
parse-latin@7.0.0:
dependencies:
nlcst-to-string: 3.1.1
unist-util-modify-children: 3.1.1
unist-util-visit-children: 2.0.2
"@types/nlcst": 2.0.3
"@types/unist": 3.0.3
nlcst-to-string: 4.0.0
unist-util-modify-children: 4.0.0
unist-util-visit-children: 3.0.0
vfile: 6.0.3
parse5@7.1.2:
parse5@7.3.0:
dependencies:
entities: 4.5.0
entities: 6.0.1
path-browserify@1.0.1: {}
piccolore@0.1.3: {}
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
path-key@3.1.1: {}
path-key@4.0.0: {}
path-parse@1.0.7: {}
path-to-regexp@6.2.2: {}
periscopic@3.1.0:
dependencies:
"@types/estree": 1.0.5
estree-walker: 3.0.3
is-reference: 3.0.2
picocolors@1.0.0: {}
picocolors@1.1.1: {}
picomatch@2.3.1: {}
pify@2.3.0: {}
picomatch@4.0.3: {}
pify@4.0.1: {}
pirates@4.0.6: {}
pkg-dir@4.2.0:
postcss-nested@6.2.0(postcss@8.5.6):
dependencies:
find-up: 4.1.0
postcss: 8.5.6
postcss-selector-parser: 6.1.2
postcss-attribute-case-insensitive@6.0.3(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-calc@10.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
postcss-clamp@4.1.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-color-functional-notation@6.0.11(postcss@8.4.33):
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-color-hex-alpha@9.0.4(postcss@8.4.33):
dependencies:
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-color-rebeccapurple@9.0.3(postcss@8.4.33):
dependencies:
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-colormin@7.0.0(postcss@8.4.33):
dependencies:
browserslist: 4.23.0
caniuse-api: 3.0.0
colord: 2.9.3
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-convert-values@7.0.0(postcss@8.4.33):
dependencies:
browserslist: 4.23.0
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-custom-media@10.0.6(postcss@8.4.33):
dependencies:
"@csstools/cascade-layer-name-parser": 1.0.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/media-query-list-parser": 2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
postcss: 8.4.33
postcss-custom-properties@13.3.10(postcss@8.4.33):
dependencies:
"@csstools/cascade-layer-name-parser": 1.0.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-custom-selectors@7.1.10(postcss@8.4.33):
dependencies:
"@csstools/cascade-layer-name-parser": 1.0.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-dir-pseudo-class@8.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-discard-comments@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-discard-duplicates@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-discard-empty@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-discard-overridden@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-double-position-gradients@5.0.6(postcss@8.4.33):
dependencies:
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-focus-visible@9.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-focus-within@8.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-font-variant@5.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-gap-properties@5.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-image-set-function@6.0.3(postcss@8.4.33):
dependencies:
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-import@15.1.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.8
postcss-js@4.0.1(postcss@8.4.33):
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.33
postcss-lab-function@6.0.16(postcss@8.4.33):
dependencies:
"@csstools/css-color-parser": 2.0.2(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
"@csstools/css-parser-algorithms": 2.6.3(@csstools/css-tokenizer@2.3.1)
"@csstools/css-tokenizer": 2.3.1
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/utilities": 1.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-load-config@4.0.2(postcss@8.4.31):
dependencies:
lilconfig: 3.0.0
yaml: 2.3.4
optionalDependencies:
postcss: 8.4.31
postcss-load-config@4.0.2(postcss@8.4.33):
dependencies:
lilconfig: 3.0.0
yaml: 2.3.4
optionalDependencies:
postcss: 8.4.33
postcss-logical@7.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-merge-longhand@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
stylehacks: 7.0.0(postcss@8.4.33)
postcss-merge-rules@7.0.0(postcss@8.4.33):
dependencies:
browserslist: 4.23.0
caniuse-api: 3.0.0
cssnano-utils: 5.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-minify-font-values@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-minify-gradients@7.0.0(postcss@8.4.33):
dependencies:
colord: 2.9.3
cssnano-utils: 5.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-minify-params@7.0.0(postcss@8.4.33):
dependencies:
browserslist: 4.23.0
cssnano-utils: 5.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-minify-selectors@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-nested@6.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.13
postcss-nested@6.0.1(postcss@8.4.38):
dependencies:
postcss: 8.4.38
postcss-selector-parser: 6.0.13
postcss-nesting@12.1.4(postcss@8.4.33):
dependencies:
"@csstools/selector-resolve-nested": 1.1.0(postcss-selector-parser@6.0.16)
"@csstools/selector-specificity": 3.1.1(postcss-selector-parser@6.0.16)
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-normalize-charset@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-normalize-display-values@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-normalize-positions@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-normalize-repeat-style@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-normalize-string@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-normalize-timing-functions@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-normalize-unicode@7.0.0(postcss@8.4.33):
dependencies:
browserslist: 4.23.0
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-normalize-url@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-normalize-whitespace@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-opacity-percentage@2.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-ordered-values@7.0.0(postcss@8.4.33):
dependencies:
cssnano-utils: 5.0.0(postcss@8.4.33)
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-overflow-shorthand@5.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-page-break@3.0.4(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-place@9.0.1(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-preset-env@9.5.13(postcss@8.4.33):
dependencies:
"@csstools/postcss-cascade-layers": 4.0.6(postcss@8.4.33)
"@csstools/postcss-color-function": 3.0.16(postcss@8.4.33)
"@csstools/postcss-color-mix-function": 2.0.16(postcss@8.4.33)
"@csstools/postcss-exponential-functions": 1.0.7(postcss@8.4.33)
"@csstools/postcss-font-format-keywords": 3.0.2(postcss@8.4.33)
"@csstools/postcss-gamut-mapping": 1.0.9(postcss@8.4.33)
"@csstools/postcss-gradients-interpolation-method": 4.0.17(postcss@8.4.33)
"@csstools/postcss-hwb-function": 3.0.15(postcss@8.4.33)
"@csstools/postcss-ic-unit": 3.0.6(postcss@8.4.33)
"@csstools/postcss-initial": 1.0.1(postcss@8.4.33)
"@csstools/postcss-is-pseudo-class": 4.0.8(postcss@8.4.33)
"@csstools/postcss-light-dark-function": 1.0.5(postcss@8.4.33)
"@csstools/postcss-logical-float-and-clear": 2.0.1(postcss@8.4.33)
"@csstools/postcss-logical-overflow": 1.0.1(postcss@8.4.33)
"@csstools/postcss-logical-overscroll-behavior": 1.0.1(postcss@8.4.33)
"@csstools/postcss-logical-resize": 2.0.1(postcss@8.4.33)
"@csstools/postcss-logical-viewport-units": 2.0.9(postcss@8.4.33)
"@csstools/postcss-media-minmax": 1.1.6(postcss@8.4.33)
"@csstools/postcss-media-queries-aspect-ratio-number-values": 2.0.9(postcss@8.4.33)
"@csstools/postcss-nested-calc": 3.0.2(postcss@8.4.33)
"@csstools/postcss-normalize-display-values": 3.0.2(postcss@8.4.33)
"@csstools/postcss-oklab-function": 3.0.16(postcss@8.4.33)
"@csstools/postcss-progressive-custom-properties": 3.2.0(postcss@8.4.33)
"@csstools/postcss-relative-color-syntax": 2.0.16(postcss@8.4.33)
"@csstools/postcss-scope-pseudo-class": 3.0.1(postcss@8.4.33)
"@csstools/postcss-stepped-value-functions": 3.0.8(postcss@8.4.33)
"@csstools/postcss-text-decoration-shorthand": 3.0.6(postcss@8.4.33)
"@csstools/postcss-trigonometric-functions": 3.0.8(postcss@8.4.33)
"@csstools/postcss-unset-value": 3.0.1(postcss@8.4.33)
autoprefixer: 10.4.19(postcss@8.4.33)
browserslist: 4.23.0
css-blank-pseudo: 6.0.2(postcss@8.4.33)
css-has-pseudo: 6.0.5(postcss@8.4.33)
css-prefers-color-scheme: 9.0.1(postcss@8.4.33)
cssdb: 8.0.1
postcss: 8.4.33
postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.33)
postcss-clamp: 4.1.0(postcss@8.4.33)
postcss-color-functional-notation: 6.0.11(postcss@8.4.33)
postcss-color-hex-alpha: 9.0.4(postcss@8.4.33)
postcss-color-rebeccapurple: 9.0.3(postcss@8.4.33)
postcss-custom-media: 10.0.6(postcss@8.4.33)
postcss-custom-properties: 13.3.10(postcss@8.4.33)
postcss-custom-selectors: 7.1.10(postcss@8.4.33)
postcss-dir-pseudo-class: 8.0.1(postcss@8.4.33)
postcss-double-position-gradients: 5.0.6(postcss@8.4.33)
postcss-focus-visible: 9.0.1(postcss@8.4.33)
postcss-focus-within: 8.0.1(postcss@8.4.33)
postcss-font-variant: 5.0.0(postcss@8.4.33)
postcss-gap-properties: 5.0.1(postcss@8.4.33)
postcss-image-set-function: 6.0.3(postcss@8.4.33)
postcss-lab-function: 6.0.16(postcss@8.4.33)
postcss-logical: 7.0.1(postcss@8.4.33)
postcss-nesting: 12.1.4(postcss@8.4.33)
postcss-opacity-percentage: 2.0.0(postcss@8.4.33)
postcss-overflow-shorthand: 5.0.1(postcss@8.4.33)
postcss-page-break: 3.0.4(postcss@8.4.33)
postcss-place: 9.0.1(postcss@8.4.33)
postcss-pseudo-class-any-link: 9.0.2(postcss@8.4.33)
postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.33)
postcss-selector-not: 7.0.2(postcss@8.4.33)
postcss-pseudo-class-any-link@9.0.2(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-reduce-initial@7.0.0(postcss@8.4.33):
dependencies:
browserslist: 4.23.0
caniuse-api: 3.0.0
postcss: 8.4.33
postcss-reduce-transforms@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
postcss-replace-overflow-wrap@4.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-not@7.0.2(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-selector-parser@6.0.13:
postcss-selector-parser@6.1.2:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-selector-parser@6.0.16:
postcss@8.5.6:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
postcss-svgo@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-value-parser: 4.2.0
svgo: 3.3.2
postcss-unique-selectors@7.0.0(postcss@8.4.33):
dependencies:
postcss: 8.4.33
postcss-selector-parser: 6.0.16
postcss-value-parser@4.2.0: {}
postcss@8.4.31:
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
source-map-js: 1.0.2
postcss@8.4.33:
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
source-map-js: 1.0.2
postcss@8.4.38:
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
source-map-js: 1.2.0
preferred-pm@3.1.3:
dependencies:
find-up: 5.0.0
find-yarn-workspace-root2: 1.2.16
path-exists: 4.0.0
which-pm: 2.0.0
prismjs@1.29.0: {}
prismjs@1.30.0: {}
prompts@2.4.2:
dependencies:
kleur: 3.0.3
sisteransi: 1.0.5
property-information@6.4.0: {}
property-information@6.5.0: {}
queue-microtask@1.2.3: {}
property-information@7.1.0: {}
read-cache@1.0.0:
radix3@1.1.2: {}
readdirp@5.0.0: {}
recma-build-jsx@1.0.0:
dependencies:
pify: 2.3.0
"@types/estree": 1.0.8
estree-util-build-jsx: 3.0.1
vfile: 6.0.3
readdirp@3.6.0:
recma-jsx@1.0.1(acorn@8.15.0):
dependencies:
picomatch: 2.3.1
acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0)
estree-util-to-js: 2.0.0
recma-parse: 1.0.0
recma-stringify: 1.0.0
unified: 11.0.5
rehype-expressive-code@0.35.3:
recma-parse@1.0.0:
dependencies:
expressive-code: 0.35.3
"@types/estree": 1.0.8
esast-util-from-js: 2.0.1
unified: 11.0.5
vfile: 6.0.3
rehype-format@5.0.0:
recma-stringify@1.0.0:
dependencies:
"@types/hast": 3.0.3
hast-util-embedded: 3.0.0
hast-util-is-element: 3.0.0
hast-util-phrasing: 3.0.1
hast-util-whitespace: 3.0.0
html-whitespace-sensitive-tag-names: 3.0.0
rehype-minify-whitespace: 6.0.0
unist-util-visit-parents: 6.0.1
"@types/estree": 1.0.8
estree-util-to-js: 2.0.0
unified: 11.0.5
vfile: 6.0.3
rehype-minify-whitespace@6.0.0:
regex-recursion@6.0.2:
dependencies:
"@types/hast": 3.0.3
hast-util-embedded: 3.0.0
hast-util-is-element: 3.0.0
hast-util-whitespace: 3.0.0
unist-util-is: 6.0.0
regex-utilities: 2.3.0
rehype-parse@9.0.0:
regex-utilities@2.3.0: {}
regex@6.0.1:
dependencies:
"@types/hast": 3.0.3
hast-util-from-html: 2.0.1
unified: 11.0.4
regex-utilities: 2.3.0
rehype-expressive-code@0.41.3:
dependencies:
expressive-code: 0.41.3
rehype-format@5.0.1:
dependencies:
"@types/hast": 3.0.4
hast-util-format: 1.1.0
rehype-parse@9.0.1:
dependencies:
"@types/hast": 3.0.4
hast-util-from-html: 2.0.3
unified: 11.0.5
rehype-raw@7.0.0:
dependencies:
"@types/hast": 3.0.3
hast-util-raw: 9.0.1
vfile: 6.0.1
"@types/hast": 3.0.4
hast-util-raw: 9.1.0
vfile: 6.0.3
rehype-stringify@10.0.0:
rehype-recma@1.0.0:
dependencies:
"@types/hast": 3.0.3
hast-util-to-html: 9.0.0
unified: 11.0.4
rehype@13.0.1:
dependencies:
"@types/hast": 3.0.3
rehype-parse: 9.0.0
rehype-stringify: 10.0.0
unified: 11.0.4
remark-directive@3.0.0:
dependencies:
"@types/mdast": 4.0.3
mdast-util-directive: 3.0.0
micromark-extension-directive: 3.0.0
unified: 11.0.4
"@types/estree": 1.0.8
"@types/hast": 3.0.4
hast-util-to-estree: 3.1.3
transitivePeerDependencies:
- supports-color
remark-gfm@4.0.0:
rehype-stringify@10.0.1:
dependencies:
"@types/mdast": 4.0.3
mdast-util-gfm: 3.0.0
"@types/hast": 3.0.4
hast-util-to-html: 9.0.5
unified: 11.0.5
rehype@13.0.2:
dependencies:
"@types/hast": 3.0.4
rehype-parse: 9.0.1
rehype-stringify: 10.0.1
unified: 11.0.5
remark-directive@3.0.1:
dependencies:
"@types/mdast": 4.0.4
mdast-util-directive: 3.1.0
micromark-extension-directive: 3.0.2
unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-gfm@4.0.1:
dependencies:
"@types/mdast": 4.0.4
mdast-util-gfm: 3.1.0
micromark-extension-gfm: 3.0.0
remark-parse: 11.0.0
remark-stringify: 11.0.0
unified: 11.0.4
unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-mdx@3.0.0:
remark-mdx@3.1.0:
dependencies:
mdast-util-mdx: 3.0.0
micromark-extension-mdxjs: 3.0.0
@ -8941,182 +5248,162 @@ snapshots:
remark-parse@11.0.0:
dependencies:
"@types/mdast": 4.0.3
mdast-util-from-markdown: 2.0.0
micromark-util-types: 2.0.0
unified: 11.0.4
"@types/mdast": 4.0.4
mdast-util-from-markdown: 2.0.2
micromark-util-types: 2.0.2
unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-rehype@11.1.0:
remark-rehype@11.1.2:
dependencies:
"@types/hast": 3.0.3
"@types/mdast": 4.0.3
mdast-util-to-hast: 13.0.2
unified: 11.0.4
vfile: 6.0.1
"@types/hast": 3.0.4
"@types/mdast": 4.0.4
mdast-util-to-hast: 13.2.0
unified: 11.0.5
vfile: 6.0.3
remark-smartypants@2.0.0:
remark-smartypants@3.0.2:
dependencies:
retext: 8.1.0
retext-smartypants: 5.2.0
unist-util-visit: 4.1.2
retext: 9.0.0
retext-smartypants: 6.2.0
unified: 11.0.5
unist-util-visit: 5.0.0
remark-stringify@11.0.0:
dependencies:
"@types/mdast": 4.0.3
mdast-util-to-markdown: 2.1.0
unified: 11.0.4
"@types/mdast": 4.0.4
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
request-light@0.7.0: {}
require-directory@2.1.1: {}
resolve@1.22.8:
retext-latin@4.0.0:
dependencies:
is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
"@types/nlcst": 2.0.3
parse-latin: 7.0.0
unified: 11.0.5
restore-cursor@4.0.0:
retext-smartypants@6.2.0:
dependencies:
onetime: 5.1.2
signal-exit: 3.0.7
"@types/nlcst": 2.0.3
nlcst-to-string: 4.0.0
unist-util-visit: 5.0.0
retext-latin@3.1.0:
retext-stringify@4.0.0:
dependencies:
"@types/nlcst": 1.0.4
parse-latin: 5.0.1
unherit: 3.0.1
unified: 10.1.2
"@types/nlcst": 2.0.3
nlcst-to-string: 4.0.0
unified: 11.0.5
retext-smartypants@5.2.0:
retext@9.0.0:
dependencies:
"@types/nlcst": 1.0.4
nlcst-to-string: 3.1.1
unified: 10.1.2
unist-util-visit: 4.1.2
"@types/nlcst": 2.0.3
retext-latin: 4.0.0
retext-stringify: 4.0.0
unified: 11.0.5
retext-stringify@3.1.0:
rollup@4.48.1:
dependencies:
"@types/nlcst": 1.0.4
nlcst-to-string: 3.1.1
unified: 10.1.2
retext@8.1.0:
dependencies:
"@types/nlcst": 1.0.4
retext-latin: 3.1.0
retext-stringify: 3.1.0
unified: 10.1.2
reusify@1.0.4: {}
rollup@4.17.2:
dependencies:
"@types/estree": 1.0.5
"@types/estree": 1.0.8
optionalDependencies:
"@rollup/rollup-android-arm-eabi": 4.17.2
"@rollup/rollup-android-arm64": 4.17.2
"@rollup/rollup-darwin-arm64": 4.17.2
"@rollup/rollup-darwin-x64": 4.17.2
"@rollup/rollup-linux-arm-gnueabihf": 4.17.2
"@rollup/rollup-linux-arm-musleabihf": 4.17.2
"@rollup/rollup-linux-arm64-gnu": 4.17.2
"@rollup/rollup-linux-arm64-musl": 4.17.2
"@rollup/rollup-linux-powerpc64le-gnu": 4.17.2
"@rollup/rollup-linux-riscv64-gnu": 4.17.2
"@rollup/rollup-linux-s390x-gnu": 4.17.2
"@rollup/rollup-linux-x64-gnu": 4.17.2
"@rollup/rollup-linux-x64-musl": 4.17.2
"@rollup/rollup-win32-arm64-msvc": 4.17.2
"@rollup/rollup-win32-ia32-msvc": 4.17.2
"@rollup/rollup-win32-x64-msvc": 4.17.2
"@rollup/rollup-android-arm-eabi": 4.48.1
"@rollup/rollup-android-arm64": 4.48.1
"@rollup/rollup-darwin-arm64": 4.48.1
"@rollup/rollup-darwin-x64": 4.48.1
"@rollup/rollup-freebsd-arm64": 4.48.1
"@rollup/rollup-freebsd-x64": 4.48.1
"@rollup/rollup-linux-arm-gnueabihf": 4.48.1
"@rollup/rollup-linux-arm-musleabihf": 4.48.1
"@rollup/rollup-linux-arm64-gnu": 4.48.1
"@rollup/rollup-linux-arm64-musl": 4.48.1
"@rollup/rollup-linux-loongarch64-gnu": 4.48.1
"@rollup/rollup-linux-ppc64-gnu": 4.48.1
"@rollup/rollup-linux-riscv64-gnu": 4.48.1
"@rollup/rollup-linux-riscv64-musl": 4.48.1
"@rollup/rollup-linux-s390x-gnu": 4.48.1
"@rollup/rollup-linux-x64-gnu": 4.48.1
"@rollup/rollup-linux-x64-musl": 4.48.1
"@rollup/rollup-win32-arm64-msvc": 4.48.1
"@rollup/rollup-win32-ia32-msvc": 4.48.1
"@rollup/rollup-win32-x64-msvc": 4.48.1
fsevents: 2.3.3
run-parallel@1.2.0:
sax@1.4.1: {}
semver@7.7.4: {}
sharp@0.34.5:
dependencies:
queue-microtask: 1.2.3
sax@1.3.0: {}
section-matter@1.0.0:
dependencies:
extend-shallow: 2.0.1
kind-of: 6.0.3
semver@6.3.1: {}
semver@7.5.4:
dependencies:
lru-cache: 6.0.0
semver@7.6.2: {}
sharp@0.33.4:
dependencies:
color: 4.2.3
detect-libc: 2.0.3
semver: 7.6.2
"@img/colour": 1.0.0
detect-libc: 2.1.2
semver: 7.7.4
optionalDependencies:
"@img/sharp-darwin-arm64": 0.33.4
"@img/sharp-darwin-x64": 0.33.4
"@img/sharp-libvips-darwin-arm64": 1.0.2
"@img/sharp-libvips-darwin-x64": 1.0.2
"@img/sharp-libvips-linux-arm": 1.0.2
"@img/sharp-libvips-linux-arm64": 1.0.2
"@img/sharp-libvips-linux-s390x": 1.0.2
"@img/sharp-libvips-linux-x64": 1.0.2
"@img/sharp-libvips-linuxmusl-arm64": 1.0.2
"@img/sharp-libvips-linuxmusl-x64": 1.0.2
"@img/sharp-linux-arm": 0.33.4
"@img/sharp-linux-arm64": 0.33.4
"@img/sharp-linux-s390x": 0.33.4
"@img/sharp-linux-x64": 0.33.4
"@img/sharp-linuxmusl-arm64": 0.33.4
"@img/sharp-linuxmusl-x64": 0.33.4
"@img/sharp-wasm32": 0.33.4
"@img/sharp-win32-ia32": 0.33.4
"@img/sharp-win32-x64": 0.33.4
"@img/sharp-darwin-arm64": 0.34.5
"@img/sharp-darwin-x64": 0.34.5
"@img/sharp-libvips-darwin-arm64": 1.2.4
"@img/sharp-libvips-darwin-x64": 1.2.4
"@img/sharp-libvips-linux-arm": 1.2.4
"@img/sharp-libvips-linux-arm64": 1.2.4
"@img/sharp-libvips-linux-ppc64": 1.2.4
"@img/sharp-libvips-linux-riscv64": 1.2.4
"@img/sharp-libvips-linux-s390x": 1.2.4
"@img/sharp-libvips-linux-x64": 1.2.4
"@img/sharp-libvips-linuxmusl-arm64": 1.2.4
"@img/sharp-libvips-linuxmusl-x64": 1.2.4
"@img/sharp-linux-arm": 0.34.5
"@img/sharp-linux-arm64": 0.34.5
"@img/sharp-linux-ppc64": 0.34.5
"@img/sharp-linux-riscv64": 0.34.5
"@img/sharp-linux-s390x": 0.34.5
"@img/sharp-linux-x64": 0.34.5
"@img/sharp-linuxmusl-arm64": 0.34.5
"@img/sharp-linuxmusl-x64": 0.34.5
"@img/sharp-wasm32": 0.34.5
"@img/sharp-win32-arm64": 0.34.5
"@img/sharp-win32-ia32": 0.34.5
"@img/sharp-win32-x64": 0.34.5
shebang-command@2.0.0:
shiki@3.11.0:
dependencies:
shebang-regex: 3.0.0
"@shikijs/core": 3.11.0
"@shikijs/engine-javascript": 3.11.0
"@shikijs/engine-oniguruma": 3.11.0
"@shikijs/langs": 3.11.0
"@shikijs/themes": 3.11.0
"@shikijs/types": 3.11.0
"@shikijs/vscode-textmate": 10.0.2
"@types/hast": 3.0.4
shebang-regex@3.0.0: {}
shiki@1.5.2:
shiki@3.22.0:
dependencies:
"@shikijs/core": 1.5.2
signal-exit@3.0.7: {}
signal-exit@4.1.0: {}
simple-swizzle@0.2.2:
dependencies:
is-arrayish: 0.3.2
"@shikijs/core": 3.22.0
"@shikijs/engine-javascript": 3.22.0
"@shikijs/engine-oniguruma": 3.22.0
"@shikijs/langs": 3.22.0
"@shikijs/themes": 3.22.0
"@shikijs/types": 3.22.0
"@shikijs/vscode-textmate": 10.0.2
"@types/hast": 3.0.4
sisteransi@1.0.5: {}
sitemap@7.1.1:
sitemap@8.0.0:
dependencies:
"@types/node": 17.0.45
"@types/sax": 1.2.7
arg: 5.0.2
sax: 1.3.0
sax: 1.4.1
source-map-js@1.0.2: {}
smol-toml@1.4.2: {}
source-map-js@1.2.0: {}
smol-toml@1.6.0: {}
source-map@0.7.4: {}
source-map-js@1.2.1: {}
source-map@0.7.6: {}
space-separated-tokens@2.0.2: {}
sprintf-js@1.0.3: {}
stdin-discarder@0.2.2: {}
stream-replace-string@2.0.0: {}
string-width@4.2.3:
dependencies:
@ -9124,19 +5411,13 @@ snapshots:
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
string-width@5.1.2:
string-width@7.2.0:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
emoji-regex: 10.4.0
get-east-asian-width: 1.3.0
strip-ansi: 7.1.0
string-width@7.1.0:
dependencies:
emoji-regex: 10.3.0
get-east-asian-width: 1.2.0
strip-ansi: 7.1.0
stringify-entities@4.0.3:
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
@ -9147,398 +5428,206 @@ snapshots:
strip-ansi@7.1.0:
dependencies:
ansi-regex: 6.0.1
ansi-regex: 6.2.0
strip-bom-string@1.0.0: {}
strip-bom@3.0.0: {}
strip-final-newline@3.0.0: {}
style-to-object@0.4.4:
style-to-js@1.1.17:
dependencies:
inline-style-parser: 0.1.1
style-to-object: 1.0.9
style-to-object@1.0.5:
style-to-object@1.0.9:
dependencies:
inline-style-parser: 0.2.2
inline-style-parser: 0.2.4
stylehacks@7.0.0(postcss@8.4.33):
svgo@4.0.0:
dependencies:
browserslist: 4.23.0
postcss: 8.4.33
postcss-selector-parser: 6.0.16
sucrase@3.34.0:
dependencies:
"@jridgewell/gen-mapping": 0.3.3
commander: 4.1.1
glob: 7.1.6
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.6
ts-interface-checker: 0.1.13
supports-color@5.5.0:
dependencies:
has-flag: 3.0.0
supports-preserve-symlinks-flag@1.0.0: {}
svgo@3.3.2:
dependencies:
"@trysound/sax": 0.2.0
commander: 7.2.0
css-select: 5.1.0
css-tree: 2.3.1
css-what: 6.1.0
commander: 11.1.0
css-select: 5.2.2
css-tree: 3.1.0
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.0.0
picocolors: 1.1.1
sax: 1.4.1
tailwindcss@3.4.3:
tiny-inflate@1.0.3: {}
tinyexec@1.0.2: {}
tinyglobby@0.2.15:
dependencies:
"@alloc/quick-lru": 5.2.0
arg: 5.0.2
chokidar: 3.5.3
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.2
glob-parent: 6.0.2
is-glob: 4.0.3
jiti: 1.21.0
lilconfig: 2.1.0
micromatch: 4.0.5
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.0.0
postcss: 8.4.33
postcss-import: 15.1.0(postcss@8.4.33)
postcss-js: 4.0.1(postcss@8.4.33)
postcss-load-config: 4.0.2(postcss@8.4.33)
postcss-nested: 6.0.1(postcss@8.4.33)
postcss-selector-parser: 6.0.13
resolve: 1.22.8
sucrase: 3.34.0
transitivePeerDependencies:
- ts-node
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
thenify@3.3.1:
dependencies:
any-promise: 1.3.0
to-fast-properties@2.0.0: {}
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
trim-lines@3.0.1: {}
trough@2.1.0: {}
trough@2.2.0: {}
ts-interface-checker@0.1.13: {}
tsconfck@3.0.3(typescript@5.4.5):
tsconfck@3.1.6(typescript@5.9.2):
optionalDependencies:
typescript: 5.4.5
typescript: 5.9.2
tslib@2.6.2:
tslib@2.8.1:
optional: true
type-fest@2.19.0: {}
type-fest@4.41.0: {}
typesafe-path@0.2.2: {}
typescript@5.9.2: {}
typescript-auto-import-cache@0.3.2:
ufo@1.6.1: {}
ufo@1.6.3: {}
ultrahtml@1.6.0: {}
uncrypto@0.1.3: {}
undici-types@7.10.0: {}
unified@11.0.5:
dependencies:
semver: 7.5.4
typescript@5.4.5: {}
unherit@3.0.1: {}
unified@10.1.2:
dependencies:
"@types/unist": 2.0.10
bail: 2.0.2
extend: 3.0.2
is-buffer: 2.0.5
is-plain-obj: 4.1.0
trough: 2.1.0
vfile: 5.3.7
unified@11.0.4:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
bail: 2.0.2
devlop: 1.1.0
extend: 3.0.2
is-plain-obj: 4.1.0
trough: 2.1.0
vfile: 6.0.1
trough: 2.2.0
vfile: 6.0.3
unifont@0.7.3:
dependencies:
css-tree: 3.1.0
ofetch: 1.5.1
ohash: 2.0.11
unist-util-find-after@5.0.0:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-is: 6.0.0
unist-util-is@5.2.1:
dependencies:
"@types/unist": 2.0.10
unist-util-is@6.0.0:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-modify-children@3.1.1:
unist-util-modify-children@4.0.0:
dependencies:
"@types/unist": 2.0.10
"@types/unist": 3.0.3
array-iterate: 2.0.1
unist-util-position-from-estree@2.0.0:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-position@5.0.0:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-remove-position@5.0.0:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-visit: 5.0.0
unist-util-stringify-position@3.0.3:
dependencies:
"@types/unist": 2.0.10
unist-util-stringify-position@4.0.0:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-visit-children@2.0.2:
unist-util-visit-children@3.0.0:
dependencies:
"@types/unist": 2.0.10
unist-util-visit-parents@5.1.3:
dependencies:
"@types/unist": 2.0.10
unist-util-is: 5.2.1
"@types/unist": 3.0.3
unist-util-visit-parents@6.0.1:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-is: 6.0.0
unist-util-visit@4.1.2:
unist-util-visit-parents@6.0.2:
dependencies:
"@types/unist": 2.0.10
unist-util-is: 5.2.1
unist-util-visit-parents: 5.1.3
"@types/unist": 3.0.3
unist-util-is: 6.0.0
unist-util-visit@5.0.0:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
update-browserslist-db@1.0.13(browserslist@4.23.0):
unstorage@1.17.4:
dependencies:
browserslist: 4.23.0
escalade: 3.1.1
picocolors: 1.0.0
anymatch: 3.1.3
chokidar: 5.0.0
destr: 2.0.5
h3: 1.15.5
lru-cache: 11.2.5
node-fetch-native: 1.6.7
ofetch: 1.5.1
ufo: 1.6.3
util-deprecate@1.0.2: {}
vfile-location@5.0.2:
vfile-location@5.0.3:
dependencies:
"@types/unist": 3.0.2
vfile: 6.0.1
"@types/unist": 3.0.3
vfile: 6.0.3
vfile-message@3.1.4:
vfile-message@4.0.3:
dependencies:
"@types/unist": 2.0.10
unist-util-stringify-position: 3.0.3
vfile-message@4.0.2:
dependencies:
"@types/unist": 3.0.2
"@types/unist": 3.0.3
unist-util-stringify-position: 4.0.0
vfile@5.3.7:
vfile@6.0.3:
dependencies:
"@types/unist": 2.0.10
is-buffer: 2.0.5
unist-util-stringify-position: 3.0.3
vfile-message: 3.1.4
"@types/unist": 3.0.3
vfile-message: 4.0.3
vfile@6.0.1:
vite@6.4.1(@types/node@24.3.0):
dependencies:
"@types/unist": 3.0.2
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2
vite@5.2.11:
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.17.2
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
rollup: 4.48.1
tinyglobby: 0.2.15
optionalDependencies:
"@types/node": 24.3.0
fsevents: 2.3.3
vitefu@0.2.5(vite@5.2.11):
vitefu@1.1.1(vite@6.4.1(@types/node@24.3.0)):
optionalDependencies:
vite: 5.2.11
volar-service-css@0.0.45(@volar/language-service@2.2.4):
dependencies:
vscode-css-languageservice: 6.2.10
vscode-languageserver-textdocument: 1.0.11
vscode-uri: 3.0.8
optionalDependencies:
"@volar/language-service": 2.2.4
volar-service-emmet@0.0.45(@volar/language-service@2.2.4):
dependencies:
"@emmetio/css-parser": 0.4.0
"@emmetio/html-matcher": 1.3.0
"@vscode/emmet-helper": 2.9.2
optionalDependencies:
"@volar/language-service": 2.2.4
volar-service-html@0.0.45(@volar/language-service@2.2.4):
dependencies:
vscode-html-languageservice: "@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462"
vscode-languageserver-textdocument: 1.0.11
vscode-uri: 3.0.8
optionalDependencies:
"@volar/language-service": 2.2.4
volar-service-prettier@0.0.45(@volar/language-service@2.2.4):
dependencies:
vscode-uri: 3.0.8
optionalDependencies:
"@volar/language-service": 2.2.4
volar-service-typescript-twoslash-queries@0.0.45(@volar/language-service@2.2.4):
optionalDependencies:
"@volar/language-service": 2.2.4
volar-service-typescript@0.0.45(@volar/language-service@2.2.4):
dependencies:
path-browserify: 1.0.1
semver: 7.5.4
typescript-auto-import-cache: 0.3.2
vscode-languageserver-textdocument: 1.0.11
vscode-nls: 5.2.0
optionalDependencies:
"@volar/language-service": 2.2.4
vscode-css-languageservice@6.2.10:
dependencies:
"@vscode/l10n": 0.0.16
vscode-languageserver-textdocument: 1.0.11
vscode-languageserver-types: 3.17.5
vscode-uri: 3.0.8
vscode-html-languageservice@5.2.0:
dependencies:
"@vscode/l10n": 0.0.18
vscode-languageserver-textdocument: 1.0.11
vscode-languageserver-types: 3.17.5
vscode-uri: 3.0.8
vscode-jsonrpc@8.2.0: {}
vscode-languageserver-protocol@3.17.5:
dependencies:
vscode-jsonrpc: 8.2.0
vscode-languageserver-types: 3.17.5
vscode-languageserver-textdocument@1.0.11: {}
vscode-languageserver-types@3.17.5: {}
vscode-languageserver@9.0.1:
dependencies:
vscode-languageserver-protocol: 3.17.5
vscode-nls@5.2.0: {}
vscode-uri@2.1.2: {}
vscode-uri@3.0.8: {}
vite: 6.4.1(@types/node@24.3.0)
web-namespaces@2.0.1: {}
which-pm-runs@1.1.0: {}
which-pm@2.0.0:
widest-line@5.0.0:
dependencies:
load-yaml-file: 0.2.0
path-exists: 4.0.0
string-width: 7.2.0
which-pm@2.1.1:
dependencies:
load-yaml-file: 0.2.0
path-exists: 4.0.0
which@2.0.2:
dependencies:
isexe: 2.0.0
widest-line@4.0.1:
dependencies:
string-width: 5.1.2
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@8.1.0:
wrap-ansi@9.0.0:
dependencies:
ansi-styles: 6.2.1
string-width: 5.1.2
string-width: 7.2.0
strip-ansi: 7.1.0
wrappy@1.0.2: {}
y18n@5.0.8: {}
yallist@3.1.1: {}
yallist@4.0.0: {}
yaml@2.3.4: {}
xxhash-wasm@1.1.0: {}
yargs-parser@21.1.1: {}
yargs@17.7.2:
yocto-queue@1.2.1: {}
yocto-spinner@0.2.3:
dependencies:
cliui: 8.0.1
escalade: 3.1.1
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
yoctocolors: 2.1.2
yocto-queue@0.1.0: {}
yoctocolors@2.1.2: {}
yocto-queue@1.0.0: {}
zod-to-json-schema@3.23.0(zod@3.23.8):
zod-to-json-schema@3.25.1(zod@3.25.76):
dependencies:
zod: 3.23.8
zod: 3.25.76
zod@3.22.4: {}
zod-to-ts@1.2.0(typescript@5.9.2)(zod@3.25.76):
dependencies:
typescript: 5.9.2
zod: 3.25.76
zod@3.23.8: {}
zod@3.25.76: {}
zwitch@2.0.4: {}

View file

@ -1,10 +0,0 @@
module.exports = {
plugins: [
require("autoprefixer"),
require("cssnano"),
require("postcss-preset-env")({
stage: 3,
features: { "nesting-rules": false },
}),
],
};

View file

@ -1,6 +1,6 @@
en
ca
de
en
es
fr
nn-no

View file

@ -1,16 +1,16 @@
---
import Select from '@astrojs/starlight/components/Select.astro';
import type { Props } from '@astrojs/starlight/props';
---
<docs-version-select>
<Select
icon="starlight"
label="version"
value="develop"
value="main"
options={[
{ label: 'develop', selected: import.meta.env.BASE_URL === '/develop', value: '/develop' },
{ label: 'next', selected: import.meta.env.BASE_URL === '/next', value: '/next' },
{ label: 'latest', selected: import.meta.env.BASE_URL === '/main', value: 'main' },
{ label: 'develop', selected: import.meta.env.BASE_URL === '/develop', value: 'develop' },
{ label: 'next', selected: import.meta.env.BASE_URL === '/next', value: 'next' },
]}
width="7em"
/>

View file

@ -1,90 +0,0 @@
---
import config from 'virtual:starlight/user-config';
import type { Props } from '@astrojs/starlight/props';
import LanguageSelect from 'virtual:starlight/components/LanguageSelect';
import Search from 'virtual:starlight/components/Search';
import SiteTitle from 'virtual:starlight/components/SiteTitle';
import SocialIcons from 'virtual:starlight/components/SocialIcons';
import ThemeSelect from 'virtual:starlight/components/ThemeSelect';
import VersionSelect from './DocsVersionSelect.astro';
/**
* Render the `Search` component if Pagefind is enabled or the default search component has been overridden.
*/
const shouldRenderSearch =
config.pagefind || config.components.Search !== '@astrojs/starlight/components/Search.astro';
---
<div class="header sl-flex">
<div class="title-wrapper sl-flex">
<SiteTitle {...Astro.props} />
</div>
<div class="sl-flex">
{shouldRenderSearch && <Search {...Astro.props} />}
</div>
<div class="sl-hidden md:sl-flex right-group">
<div class="sl-flex social-icons">
<SocialIcons {...Astro.props} />
</div>
<ThemeSelect {...Astro.props} />
<VersionSelect {...Astro.props} />
<LanguageSelect {...Astro.props} />
</div>
</div>
<style>
.header {
gap: var(--sl-nav-gap);
justify-content: space-between;
align-items: center;
height: 100%;
}
.title-wrapper {
/* Prevent long titles overflowing and covering the search and menu buttons on narrow viewports. */
overflow: hidden;
}
.right-group,
.social-icons {
gap: 1rem;
align-items: center;
}
.social-icons::after {
content: '';
height: 2rem;
border-inline-end: 1px solid var(--sl-color-gray-5);
}
@media (min-width: 50rem) {
:global(:root[data-has-sidebar]) {
--__sidebar-pad: calc(2 * var(--sl-nav-pad-x));
}
:global(:root:not([data-has-toc])) {
--__toc-width: 0rem;
}
.header {
--__sidebar-width: max(0rem, var(--sl-content-inline-start, 0rem) - var(--sl-nav-pad-x));
--__main-column-fr: calc(
(
100% + var(--__sidebar-pad, 0rem) - var(--__toc-width, var(--sl-sidebar-width)) -
(2 * var(--__toc-width, var(--sl-nav-pad-x))) - var(--sl-content-inline-start, 0rem) -
var(--sl-content-width)
) / 2
);
display: grid;
grid-template-columns:
/* 1 (site title): runs up until the main content columns left edge or the width of the title, whichever is the largest */
minmax(
calc(var(--__sidebar-width) + max(0rem, var(--__main-column-fr) - var(--sl-nav-gap))),
auto
)
/* 2 (search box): all free space that is available. */
1fr
/* 3 (right items): use the space that these need. */
auto;
align-content: center;
}
}
</style>

View file

@ -1,35 +0,0 @@
---
import LanguageSelect from 'virtual:starlight/components/LanguageSelect';
import SocialIcons from 'virtual:starlight/components/SocialIcons';
import ThemeSelect from 'virtual:starlight/components/ThemeSelect';
import type { Props } from '@astrojs/starlight/props';
import VersionSelect from './DocsVersionSelect.astro';
---
<div class="mobile-preferences sl-flex">
<div class="sl-flex social-icons">
<SocialIcons {...Astro.props} />
</div>
<ThemeSelect {...Astro.props} />
<VersionSelect {...Astro.props} />
<LanguageSelect {...Astro.props} />
</div>
<style>
.social-icons {
margin-inline-end: auto;
gap: 1rem;
align-items: center;
padding-block: 1rem;
}
.social-icons:empty {
display: none;
}
.mobile-preferences {
justify-content: space-between;
flex-wrap: wrap;
border-top: 1px solid var(--sl-color-gray-6);
column-gap: 1rem;
padding: 0.5rem 0;
}
</style>

View file

@ -0,0 +1,8 @@
---
import Default from '@astrojs/starlight/components/ThemeSelect.astro';
import VersionSelect from './DocsVersionSelect.astro';
---
<Default><slot /></Default>
<VersionSelect />

View file

@ -0,0 +1,8 @@
import { defineCollection } from "astro:content";
import { docsLoader, i18nLoader } from "@astrojs/starlight/loaders";
import { docsSchema, i18nSchema } from "@astrojs/starlight/schema";
export const collections = {
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
i18n: defineCollection({ loader: i18nLoader(), schema: i18nSchema() }),
};

View file

@ -1,7 +0,0 @@
import { defineCollection } from "astro:content";
import { docsSchema, i18nSchema } from "@astrojs/starlight/schema";
export const collections = {
docs: defineCollection({ schema: docsSchema() }),
i18n: defineCollection({ type: "data", schema: i18nSchema() }),
};

View file

@ -9,11 +9,11 @@ níveis:
1. [toda instância](#1-instance-wide-roles-and-permissions)
2. [por podcast](#2-per-podcast-roles-and-permissions)
## Papéis e permissões para toda a instância
## 2. Por funções de podcast e permissões
### Cargos de instância
### Instance roles
{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
@ -21,11 +21,11 @@ níveis:
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
{/* AUTH-INSTANCE-ROLES-LIST:END */}
{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
### Permissões da instância
### Instance permissions
{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
@ -39,13 +39,13 @@ níveis:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
## 2. Por funções de podcast e permissões
## 2. Per podcast roles and permissions
### Por cargos de podcast
{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@ -54,11 +54,11 @@ níveis:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
{/* AUTH-PODCAST-ROLES-LIST:END */}
{/_ AUTH-PODCAST-ROLES-LIST:END _/}
### Por permissões de podcast
{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@ -82,4 +82,4 @@ níveis:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}

View file

@ -24,87 +24,88 @@ can be added as a cache handler.
## Example usage
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
```yml
version: "3.7"
2. Create a `docker-compose.yml` file with the following:
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
CP_REDIS_PASSWORD: changeme
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
```yml
version: "3.7"
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
CP_REDIS_PASSWORD: changeme
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
command: --requirepass changeme
volumes:
- castopod-cache:/data
networks:
- castopod-app
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
castopod-cache:
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
command: --requirepass changeme
volumes:
- castopod-cache:/data
networks:
- castopod-app
networks:
castopod-app:
castopod-db:
```
volumes:
castopod-media:
castopod-db:
castopod-cache:
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
networks:
castopod-app:
castopod-db:
```
3. Setup a reverse proxy for TLS (SSL/HTTPS)
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
3. Setup a reverse proxy for TLS (SSL/HTTPS)
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
5. You're all set, start podcasting! 🎙️🚀
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
5. You're all set, start podcasting! 🎙️🚀
## Environment Variables

View file

@ -7,15 +7,6 @@ import { Aside } from "@astrojs/starlight/components";
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
<Aside>
We've released official Docker images for Castopod!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
</Aside>
## Requirements
- PHP v8.1 or higher
@ -24,7 +15,7 @@ If you prefer using Docker, you may skip this and go straight to the
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
### PHP v8.1, alebo vyššia
### PHP v8.1 or higher
PHP version 8.1 or higher is required, with the following extensions installed:
@ -91,7 +82,6 @@ want to generate Video Clips. The following extensions must be installed:
**Note** - If you do not add this cron task, the following Castopod features
will not work:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
@ -117,6 +107,7 @@ based on the `.env.example` file.
### Using CLI
1. Create a `.env` file in the package root based on the `.env.example` file.
2. Initialize the database using:
```sh

View file

@ -1,5 +1,5 @@
---
title: Zabezpečenie
title: Security concerns
---
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP

View file

@ -12,26 +12,22 @@ improvements ⚡.
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
3. On your server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
@ -51,6 +47,7 @@ improvements ⚡.
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
<Aside>

View file

@ -1,5 +1,5 @@
---
title: Donemat 👋
title: Welcome 👋
---
import { LinkCard } from "@astrojs/starlight/components";
@ -13,45 +13,45 @@ small footprint.
<LinkCard title="Staliañ" href="./getting-started/install" />
## Perzhioù
## Features
- 🌱 &nbsp;Free & open-source (AGPL v3 License)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics
belong to you, and&nbsp;you&nbsp;only
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
- 🌱  Free & open-source (AGPL v3 License)
- 🔐  Focused on data sovereignty: your content, audience, and analytics
belong to you, and you only
- 🪄  Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Arc'hantaouiñ :
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- 💬  Built-in social network:
- 🚀  Castopod is part of the Fediverse, a decentralized social network
- ❤️  Create posts, share, favourite, and comment on episodes
- 📈  Built-in analytics:
- ⚖️  GDPR / CCPA / LGPD compliant
- 🪙  Standard IABv2 audience measurement
- 🏡  On-premises analytics, no third party involved
- 📢  Built-in marketing tools:
- ✅  SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱  PWA: install as a standalone app
- 🎨  Customizable theme colors
- 🎬  Generate ready-to-share Video clips from episodes
- 🔉  Generate soundbites
- ▶️  Embeddable player, embed your episodes on any website
- 💸  Monetization:
- 🔗  Funding links
- 📲  listen-to-click ads
- 🤝  value4value / WebMonetization
- 💎  Premium podcasts
- 📡  Publish your episodes everywhere with RSS:
- 📱  On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
- ⚡  Broadcast your episodes instantly with WebSub
- 📥  Podcast import: move your existing podcast into Castopod
- 📤  Move your podcast out of Castopod
- 🔀  Multi-tenant: host as many podcasts as you want
- 👥  Multi-user: add contributors and set roles
- 🌎  i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
## Perak Castopod ?
## Motivation
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
@ -146,7 +146,7 @@ That being said, there are two main differences with other podcasting solutions:
Love Castopod and would like to help? Take a look at the following documentation
to get you started.
### Kod an dereadegezh
### Code of conduct
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
@ -159,1195 +159,7 @@ Read our [contributing guide](../contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Contributors ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
{/* ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section */}
{/* prettier-ignore-start */}
{/* markdownlint-disable */}
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/yassinedoghri">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100"
width="100px;"
alt="Yassine Doghri"
/>
<br />
<sub>
<b>Yassine Doghri</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a href="#maintenance-yassinedoghri" title="Maintenance">
🚧
</a>{" "}
<a href="#content-yassinedoghri" title="Content">
🖋
</a>{" "}
<a href="#design-yassinedoghri" title="Design">
🎨
</a>{" "}
<a href="#a11y-yassinedoghri" title="Accessibility">
️️️️♿️
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-yassinedoghri" title="Answering Questions">
💬
</a>{" "}
<a href="#mentoring-yassinedoghri" title="Mentoring">
🧑‍🏫
</a>{" "}
<a
href="#infra-yassinedoghri"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a href="#projectManagement-yassinedoghri" title="Project Management">
📆
</a>{" "}
<a
href="https://blog.castopod.org/author/yassinedoghri/"
title="Blogposts"
>
📝
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/benjamin">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100"
width="100px;"
alt="Benjamin Bellamy"
/>
<br />
<sub>
<b>Benjamin Bellamy</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a href="#content-benjamin" title="Content">
🖋
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-benjamin" title="Answering Questions">
💬
</a>{" "}
<a
href="#infra-benjamin"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a
href="https://blog.castopod.org/author/benjamin-bellamy/"
title="Blogposts"
>
📝
</a>{" "}
<a href="#projectManagement-benjamin" title="Project Management">
📆
</a>{" "}
<a href="#talk-benjamin" title="Talks">
📢
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/ola-hn">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Ola Hneini"
/>
<br />
<sub>
<b>Ola Hneini</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a href="#maintenance-ola" title="Maintenance">
🚧
</a>{" "}
<a href="#question-ola" title="Answering Questions">
💬
</a>{" "}
<a href="#ideas-ola" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mamot.fr/@rdelaage">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Romain de Laage"
/>
<br />
<sub>
<b>Romain de Laage</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="#infra-rdelaage"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/lyonelbernard">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Lyonel Bernard"
/>
<br />
<sub>
<b>Lyonel Bernard</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#question-Lyonel" title="Answering Questions">
💬
</a>{" "}
<a href="#audio-Lyonel" title="Audio">
🔊
</a>{" "}
<a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://www.crypticchameleon.com/">
<img
src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100"
width="100px;"
alt="Christopher Lagonick-Weitzel"
/>
<br />
<sub>
<b>Christopher Lagonick-Weitzel</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#question-ctlw83" title="Answering Questions">
💬
</a>{" "}
<a href="#audio-ctlw83" title="Audio">
🔊
</a>{" "}
<a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://ernestoacosta.me/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Ernesto Acosta"
/>
<br />
<sub>
<b>Ernesto Acosta</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#audio-ernestoacostame" title="Audio">
🔊
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-ernestoacostame" title="Answering Questions">
💬
</a>{" "}
<a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://mastodon.fedi.bzh/@ewen">
<img
src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100"
width="100px;"
alt="Ewen"
/>
<br />
<sub>
<b>Ewen</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-3wen" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/Behel">
<img
src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100"
width="100px;"
alt="Bastien Luneteau"
/>
<br />
<sub>
<b>Bastien Luneteau</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://www.cecillie.fr/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Cécile Ricordeau"
/>
<br />
<sub>
<b>Cécile Ricordeau</b>
</sub>
</a>
<br />
<a href="#design-cecillie" title="Design">
🎨
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/PatrykMis">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Patryk Miś"
/>
<br />
<sub>
<b>Patryk Miś</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/mspanc">
<img
src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100"
width="100px;"
alt="Marcin Lewandowski"
/>
<br />
<sub>
<b>Marcin Lewandowski</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/SJanik">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Sebastian Janik"
/>
<br />
<sub>
<b>Sebastian Janik</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/patryk">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Patryk Karczmarczyk"
/>
<br />
<sub>
<b>Patryk Karczmarczyk</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/ddenis">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="denis d"
/>
<br />
<sub>
<b>denis d</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/douglaskastle">
<img
src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100"
width="100px;"
alt="Douglas Kastle"
/>
<br />
<sub>
<b>Douglas Kastle</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/cExplorer">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="cExplorer"
/>
<br />
<sub>
<b>cExplorer</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer"
title="Bug reports"
>
🐛
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/imacrea">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="ImaCrea"
/>
<br />
<sub>
<b>ImaCrea</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/jonas">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Jonas S"
/>
<br />
<sub>
<b>Jonas S</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/yannL">
<img
src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100"
width="100px;"
alt="LEFEBVRE Yann"
/>
<br />
<sub>
<b>LEFEBVRE Yann</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/spaetz">
<img
src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100"
width="100px;"
alt="Sebastian Späth"
/>
<br />
<sub>
<b>Sebastian Späth</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/rocky">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="rocky III"
/>
<br />
<sub>
<b>rocky III</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/Regenpfeifer">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100"
width="100px;"
alt="Hermann Josef Eckl"
/>
<br />
<sub>
<b>Hermann Josef Eckl</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/cyrilledel">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Delhaye Cyrille"
/>
<br />
<sub>
<b>Delhaye Cyrille</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/otetranome">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100"
width="100px;"
alt="João Leandro"
/>
<br />
<sub>
<b>João Leandro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://achouvardas.eu/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Angelos Chouvardas"
/>
<br />
<sub>
<b>Angelos Chouvardas</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mastodon.fjerland.no/@eivind">
<img
src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100"
width="100px;"
alt="Eivind"
/>
<br />
<sub>
<b>Eivind</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/forght">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100"
width="100px;"
alt="forght"
/>
<br />
<sub>
<b>forght</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/glottis0q">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100"
width="100px;"
alt="glottis0q"
/>
<br />
<sub>
<b>glottis0q</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mstdn.fr/@ButterflyOfFire">
<img
src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100"
width="100px;"
alt="ButterflyOfFire"
/>
<br />
<sub>
<b>ButterflyOfFire</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/lil5">
<img
src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100"
width="100px;"
alt="Lucian I. Last"
/>
<br />
<sub>
<b>Lucian I. Last</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/luuzviir">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100"
width="100px;"
alt="LuuzViir"
/>
<br />
<sub>
<b>LuuzViir</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/cthtc">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100"
width="100px;"
alt="CTHTC"
/>
<br />
<sub>
<b>CTHTC</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/retrograde">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100"
width="100px;"
alt="Russian Retro"
/>
<br />
<sub>
<b>Russian Retro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/mareklach">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100"
width="100px;"
alt="Marek L'ach"
/>
<br />
<sub>
<b>Marek L'ach</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/gunchleoc">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100"
width="100px;"
alt="GunChleoc"
/>
<br />
<sub>
<b>GunChleoc</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/gabisnow">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100"
width="100px;"
alt="GabiSnow"
/>
<br />
<sub>
<b>GabiSnow</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/bendaha">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100"
width="100px;"
alt="bendaha"
/>
<br />
<sub>
<b>bendaha</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/samuelroland">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100"
width="100px;"
alt="Samuel Roland"
/>
<br />
<sub>
<b>Samuel Roland</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://dimitriregnier.net/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Dimitri Regnier"
/>
<br />
<sub>
<b>Dimitri Regnier</b>
</sub>
</a>
<br />
<a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://im.irithys.com/@thy">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100"
width="100px;"
alt="irithys"
/>
<br />
<sub>
<b>irithys</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/caos30">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Sergi"
/>
<br />
<sub>
<b>Sergi</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/xosem">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100"
width="100px;"
alt="ghose (XoseM)"
/>
<br />
<sub>
<b>ghose (XoseM)</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/basen1982">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Andreas Olsson"
/>
<br />
<sub>
<b>Andreas Olsson</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/leonfrom">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="leonfrom"
/>
<br />
<sub>
<b>leonfrom</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/agentcobra57">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="agentcobra"
/>
<br />
<sub>
<b>agentcobra</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/alephoto85">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100"
width="100px;"
alt="Alessandro"
/>
<br />
<sub>
<b>Alessandro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/liimee">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="liimee"
/>
<br />
<sub>
<b>liimee</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/ahmedsabouni">
<img
src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100"
width="100px;"
alt="Ahmed Sabouni"
/>
<br />
<sub>
<b>Ahmed Sabouni</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/KrzysztofDomanczyk">
<img
src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100"
width="100px;"
alt="KrzysztofDomanczyk"
/>
<br />
<sub>
<b>KrzysztofDomanczyk</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/NeoluxConsulting">
<img
src="https://secure.gravatar.com/avatar/6e745565356330c1e29a85d52bffdaa1?s=80&d=identicon?s=100"
width="100px;"
alt="Guy Martin"
/>
<br />
<sub>
<b>Guy Martin</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=NeoluxConsulting"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
</tr>
</tbody>
</table>
{/* markdownlint-restore */}
{/* prettier-ignore-end */}
{/* ALL-CONTRIBUTORS-LIST:END */}
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Darempred
## Contact
You may reach us for help or ask any question you have on:
@ -1360,7 +172,7 @@ Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [Bluesky](https://bsky.app/profile/castopod.org)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
@ -1374,7 +186,7 @@ backers. If you'd like to help, please consider
[![NLnet Logo](../../../assets/images/sponsors/nlnet.svg)](https://nlnet.nl/)
## Aotre
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)

View file

@ -12,73 +12,73 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| --------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------ |
| Dreistmerour·ez | Ur c'hontroll klok en deus war Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Merour·ez | Merañ a ra endalc'had Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podkaster | Implijerien·ezed kustum Castopod. | admin.access |
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podkaster | General users of Castopod. | admin.access |
{/* AUTH-INSTANCE-ROLES-LIST:END */}
{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
### Instance permissions
{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ----------------------- | ------------------------------------------------------------------------------------------------- |
| admin.access | Gallout a ra gwelet taolenn-stur Castopod. |
| admin.settings | Gallout a ra gwelet arventennoù Castopod. |
| users.manage | Gallout a ra ober war-dro implijerien·ezed Castopod. |
| persons.manage | Gallout a ra merañ an emellerien·ezed. |
| pages.manage | Gallout a ra merañ ar pajennoù. |
| podcasts.view | Gallout a ra gwelet an holl bodkastoù. |
| podcasts.create | Gallout a ra krouiñ podkastoù nevez. |
| podcasts.import | Gallout a ra enporzhiañ podkastoù. |
| fediverse.manage-blocks | Gallout a ra mirout aktourien·ezed pe domanioù ar Fediverse ouzh kaout darempredoù gant Castopod. |
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
## 2. Per podcast roles and permissions
### Per podcast roles
{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ---------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Merour·ez | Ur c'hontroll klok en deus war ar podkast #\{id\}. | \* |
| Embanner | Merañ a ra endalc'had hag embannadurioù ar podkast #\{id\}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Aozer·ez | Merañ a ra endalc'had ar podkast #\{id\} met ne c'hall ket embann anezho. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Kouviad·ez | Perzhiad·ez eus ar podkast #\{id\}. | view, episodes.view |
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #\{id\}. | \* |
| Editor | Manages content and publications of podcast #\{id\}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
{/* AUTH-PODCAST-ROLES-LIST:END */}
{/_ AUTH-PODCAST-ROLES-LIST:END _/}
### Per podcast permissions
{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| view | Gallout a ra gwelet taolenn-stur ha muzulioù heklev ar podkast #\{id\}. |
| edit | Gallout a ra kemmañ ar podkast #\{id\}. |
| delete | Gallout a ra lemel ar podkast #\{id\}. |
| manage-import | Gallout a ra sinkronekaat ar podkast enporzhiet #\{id\}. |
| manage-persons | Gallout a ra merañ koumanantoù ar podkast #\{id\}. |
| manage-subscriptions | Gallout a ra merañ koumanantoù ar podkast #\{id\}. |
| manage-contributors | Gallout a ra merañ perzhidi ha perzhiadezed ar podkast #\{id\}. |
| manage-platforms | Gallout a ra ouzhpennañ pe lemel liammoù etrezek savennoù diavaez evit ar podkast #\{id\}. |
| manage-publications | Gallout a ra embann ar podkast #\{id\}. |
| manage-notifications | Gallout a ra gwelet kemennoù ar podkast #\{id\} ha lakaat anezho evel lennet. |
| interact-as | Gallout a ra ober traoù gant identelezh ar podkast #\{id\}: ouzhpennañ ur gemennadenn d'ar re garetañ, rannañ anezhi pe respont dezhi. |
| episodes.view | Gallout a ra gwelet taolennoù-stur ha muzulioù heklev rannoù ar podkast #\{id\}. |
| episodes.create | Gallout a ra krouiñ rannoù evit podkast #\{id\}. |
| episodes.edit | Gallout a ra kemmañ rannoù ar podkast #\{id\}. |
| episodes.delete | Gallout a ra lemel rannoù ar podkast #\{id\}. |
| episodes.manage-persons | Gallout a ra merañ emellerien·ezed ar podkast #\{id\}. |
| episodes.manage-clips | Gallout a ra merañ klipoù video pe tennadoù son ar podkast #\{id\}. |
| episodes.manage-publications | Gallout a ra embann pe diembann rannoù ha kemennadennoù ar podkast #\{id\}. |
| episodes.manage-comments | Gallout a ra krouiñ/lemel evezhiadennoù evit rannoù ar podkast #\{id\}. |
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
| view | Can view dashboard and analytics of podcast #\{id\}. |
| edit | Can edit podcast #\{id\}. |
| delete | Can delete podcast #\{id\}. |
| manage-import | Can synchronize imported podcast #\{id\}. |
| manage-persons | Can manage subscriptions of podcast #\{id\}. |
| manage-subscriptions | Can manage subscriptions of podcast #\{id\}. |
| manage-contributors | Can manage contributors of podcast #\{id\}. |
| manage-platforms | Can set/remove platform links of podcast #\{id\}. |
| manage-publications | Can publish podcast #\{id\}. |
| manage-notifications | Can view and mark notifications as read for podcast #\{id\}. |
| interact-as | Can interact as the podcast #\{id\} to favourite, share or reply to posts. |
| episodes.view | Can view dashboards and analytics of podcast #\{id\}'s episodes. |
| episodes.create | Can create episodes for podcast #\{id\}. |
| episodes.edit | Can edit episodes of podcast #\{id\}. |
| episodes.delete | Can delete episodes of podcast #\{id\}. |
| episodes.manage-persons | Can manage episode persons of podcast #\{id\}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #\{id\}. |
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}

View file

@ -24,129 +24,130 @@ can be added as a cache handler.
## Example usage
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
```yml
version: "3.7"
2. Create a `docker-compose.yml` file with the following:
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
CP_REDIS_PASSWORD: changeme
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
```yml
version: "3.7"
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
CP_REDIS_PASSWORD: changeme
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
command: --requirepass changeme
volumes:
- castopod-cache:/data
networks:
- castopod-app
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
castopod-cache:
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
command: --requirepass changeme
volumes:
- castopod-cache:/data
networks:
- castopod-app
networks:
castopod-app:
castopod-db:
```
volumes:
castopod-media:
castopod-db:
castopod-cache:
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
networks:
castopod-app:
castopod-db:
```
3. Setup a reverse proxy for TLS (SSL/HTTPS)
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
3. Setup a reverse proxy for TLS (SSL/HTTPS)
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
5. You're all set, start podcasting! 🎙️🚀
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
5. You're all set, start podcasting! 🎙️🚀
## Omgevingsvariabelen
- **castopod/castopod** and **castopod/app**
| De naam van de variabele | Type (`default`) | Standaard |
| ------------------------------------- | ----------------------- | ------------------ |
| **`CP_BASEURL`** | tekenreeks | `niet gedefineerd` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `niet gedefineerd` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `niet gedefineerd` |
| **`CP_EMAIL_FROM`** | ?string | `niet gedefineerd` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `niet gedefineerd` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `niet gedefineerd` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `niet gedefineerd` |
| **`CP_MEDIA_S3_KEY`** | ?string | `niet gedefineerd` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `niet gedefineerd` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `niet gedefineerd` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `niet gedefineerd` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `niet gedefineerd` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| De naam van de variabele | Type (`default`) | Standaard |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/web-server**

View file

@ -1,5 +1,5 @@
---
title: Penaos staliañ Castopod?
title: How to install Castopod?
---
import { Aside } from "@astrojs/starlight/components";
@ -7,15 +7,6 @@ import { Aside } from "@astrojs/starlight/components";
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
<Aside>
We've released official Docker images for Castopod!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
</Aside>
## Requirements
- PHP v8.1 or higher
@ -49,7 +40,7 @@ You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
#### Brientoù
#### Privileges
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
@ -91,7 +82,6 @@ want to generate Video Clips. The following extensions must be installed:
**Note** - If you do not add this cron task, the following Castopod features
will not work:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
@ -104,7 +94,7 @@ want to generate Video Clips. The following extensions must be installed:
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Kregiñ da bodkastiñ!
3. Start podcasting!
<Aside>
@ -117,6 +107,7 @@ based on the `.env.example` file.
### Using CLI
1. Create a `.env` file in the package root based on the `.env.example` file.
2. Initialize the database using:
```sh
@ -131,7 +122,7 @@ based on the `.env.example` file.
4. Head on to your admin gateway to start podcasting!
### Arventenniñ ar posteloù/SMTP
### Email/SMTP setup
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
@ -150,7 +141,7 @@ email.SMTPPass="your_smtp_password"
#### Email config options
| Anv ar varienne | Doare | Dre ziouer |
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
@ -191,9 +182,9 @@ media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### Arventennoù S3
#### S3 config options
| Anv ar varienn | Doare | Dre ziouer |
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
@ -209,7 +200,7 @@ media.s3.region="your_s3_region"
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Staliañ dre YunoHost
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of

View file

@ -1,19 +1,18 @@
---
title: Bezbednosni interesi
title: Security concerns
---
Castopod je napravljen na [CodeIgniter4](https://codeigniter.com/), PHP okviru
koji podstiče
[dobre bezbednosne prakse](https://codeigniter.com/user_guide/concepts/security.html).
Da biste maksimalno povećali bezbednost vaše instance i sprečili bilo kakav
zlonamerni napad, mi preporučujemo da ažurirate sve dozvole Castopod datoteka
nakon instalacije ili ažuriranja (da biste izbegli bilo kakvu grešku prethodne
dozvole):
To maximize your instance's safety and prevent any malicious attack, we
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
- `writable/` direktorijum mora biti **readable** i **writable**.
- `public/media/` direktorijum mora biti **readable** i **writable**.
- bilo koja druga datoteka mora biti podešena na **readonly**.
- any other file must be set to **readonly**.
Na primer, ukoliko koristite Apache ili NGINX sa Ubuntu-om možete uraditi
sledeće:

View file

@ -12,26 +12,22 @@ improvements ⚡.
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
3. War ho servijer:
3. On your server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
@ -51,6 +47,7 @@ improvements ⚡.
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
<Aside>

View file

@ -15,39 +15,39 @@ small footprint.
## Features
- 🌱 &nbsp;Free & open-source (AGPL v3 License)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics
belong to you, and&nbsp;you&nbsp;only
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
- 🌱  Free & open-source (AGPL v3 License)
- 🔐  Focused on data sovereignty: your content, audience, and analytics
belong to you, and you only
- 🪄  Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- 💬  Built-in social network:
- 🚀  Castopod is part of the Fediverse, a decentralized social network
- ❤️  Create posts, share, favourite, and comment on episodes
- 📈  Built-in analytics:
- ⚖️  GDPR / CCPA / LGPD compliant
- 🪙  Standard IABv2 audience measurement
- 🏡  On-premises analytics, no third party involved
- 📢  Built-in marketing tools:
- ✅  SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱  PWA: install as a standalone app
- 🎨  Customizable theme colors
- 🎬  Generate ready-to-share Video clips from episodes
- 🔉  Generate soundbites
- ▶️  Embeddable player, embed your episodes on any website
- 💸  Monetization:
- 🔗  Funding links
- 📲  listen-to-click ads
- 🤝  value4value / WebMonetization
- 💎  Premium podcasts
- 📡  Publish your episodes everywhere with RSS:
- 📱  On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
- ⚡  Broadcast your episodes instantly with WebSub
- 📥  Podcast import: move your existing podcast into Castopod
- 📤  Move your podcast out of Castopod
- 🔀  Multi-tenant: host as many podcasts as you want
- 👥  Multi-user: add contributors and set roles
- 🌎  i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
@ -159,1194 +159,6 @@ Read our [contributing guide](../contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Contributors ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
{/* ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section */}
{/* prettier-ignore-start */}
{/* markdownlint-disable */}
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/yassinedoghri">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100"
width="100px;"
alt="Yassine Doghri"
/>
<br />
<sub>
<b>Yassine Doghri</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a href="#maintenance-yassinedoghri" title="Maintenance">
🚧
</a>{" "}
<a href="#content-yassinedoghri" title="Content">
🖋
</a>{" "}
<a href="#design-yassinedoghri" title="Design">
🎨
</a>{" "}
<a href="#a11y-yassinedoghri" title="Accessibility">
️️️️♿️
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-yassinedoghri" title="Answering Questions">
💬
</a>{" "}
<a href="#mentoring-yassinedoghri" title="Mentoring">
🧑‍🏫
</a>{" "}
<a
href="#infra-yassinedoghri"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a href="#projectManagement-yassinedoghri" title="Project Management">
📆
</a>{" "}
<a
href="https://blog.castopod.org/author/yassinedoghri/"
title="Blogposts"
>
📝
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/benjamin">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100"
width="100px;"
alt="Benjamin Bellamy"
/>
<br />
<sub>
<b>Benjamin Bellamy</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a href="#content-benjamin" title="Content">
🖋
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-benjamin" title="Answering Questions">
💬
</a>{" "}
<a
href="#infra-benjamin"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a
href="https://blog.castopod.org/author/benjamin-bellamy/"
title="Blogposts"
>
📝
</a>{" "}
<a href="#projectManagement-benjamin" title="Project Management">
📆
</a>{" "}
<a href="#talk-benjamin" title="Talks">
📢
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/ola-hn">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Ola Hneini"
/>
<br />
<sub>
<b>Ola Hneini</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a href="#maintenance-ola" title="Maintenance">
🚧
</a>{" "}
<a href="#question-ola" title="Answering Questions">
💬
</a>{" "}
<a href="#ideas-ola" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mamot.fr/@rdelaage">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Romain de Laage"
/>
<br />
<sub>
<b>Romain de Laage</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="#infra-rdelaage"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/lyonelbernard">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Lyonel Bernard"
/>
<br />
<sub>
<b>Lyonel Bernard</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#question-Lyonel" title="Answering Questions">
💬
</a>{" "}
<a href="#audio-Lyonel" title="Audio">
🔊
</a>{" "}
<a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://www.crypticchameleon.com/">
<img
src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100"
width="100px;"
alt="Christopher Lagonick-Weitzel"
/>
<br />
<sub>
<b>Christopher Lagonick-Weitzel</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#question-ctlw83" title="Answering Questions">
💬
</a>{" "}
<a href="#audio-ctlw83" title="Audio">
🔊
</a>{" "}
<a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://ernestoacosta.me/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Ernesto Acosta"
/>
<br />
<sub>
<b>Ernesto Acosta</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#audio-ernestoacostame" title="Audio">
🔊
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-ernestoacostame" title="Answering Questions">
💬
</a>{" "}
<a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://mastodon.fedi.bzh/@ewen">
<img
src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100"
width="100px;"
alt="Ewen"
/>
<br />
<sub>
<b>Ewen</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-3wen" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/Behel">
<img
src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100"
width="100px;"
alt="Bastien Luneteau"
/>
<br />
<sub>
<b>Bastien Luneteau</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://www.cecillie.fr/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Cécile Ricordeau"
/>
<br />
<sub>
<b>Cécile Ricordeau</b>
</sub>
</a>
<br />
<a href="#design-cecillie" title="Design">
🎨
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/PatrykMis">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Patryk Miś"
/>
<br />
<sub>
<b>Patryk Miś</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/mspanc">
<img
src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100"
width="100px;"
alt="Marcin Lewandowski"
/>
<br />
<sub>
<b>Marcin Lewandowski</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/SJanik">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Sebastian Janik"
/>
<br />
<sub>
<b>Sebastian Janik</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/patryk">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Patryk Karczmarczyk"
/>
<br />
<sub>
<b>Patryk Karczmarczyk</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/ddenis">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="denis d"
/>
<br />
<sub>
<b>denis d</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/douglaskastle">
<img
src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100"
width="100px;"
alt="Douglas Kastle"
/>
<br />
<sub>
<b>Douglas Kastle</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/cExplorer">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="cExplorer"
/>
<br />
<sub>
<b>cExplorer</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer"
title="Bug reports"
>
🐛
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/imacrea">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="ImaCrea"
/>
<br />
<sub>
<b>ImaCrea</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/jonas">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Jonas S"
/>
<br />
<sub>
<b>Jonas S</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/yannL">
<img
src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100"
width="100px;"
alt="LEFEBVRE Yann"
/>
<br />
<sub>
<b>LEFEBVRE Yann</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/spaetz">
<img
src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100"
width="100px;"
alt="Sebastian Späth"
/>
<br />
<sub>
<b>Sebastian Späth</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/rocky">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="rocky III"
/>
<br />
<sub>
<b>rocky III</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/Regenpfeifer">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100"
width="100px;"
alt="Hermann Josef Eckl"
/>
<br />
<sub>
<b>Hermann Josef Eckl</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/cyrilledel">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Delhaye Cyrille"
/>
<br />
<sub>
<b>Delhaye Cyrille</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/otetranome">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100"
width="100px;"
alt="João Leandro"
/>
<br />
<sub>
<b>João Leandro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://achouvardas.eu/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Angelos Chouvardas"
/>
<br />
<sub>
<b>Angelos Chouvardas</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mastodon.fjerland.no/@eivind">
<img
src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100"
width="100px;"
alt="Eivind"
/>
<br />
<sub>
<b>Eivind</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/forght">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100"
width="100px;"
alt="forght"
/>
<br />
<sub>
<b>forght</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/glottis0q">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100"
width="100px;"
alt="glottis0q"
/>
<br />
<sub>
<b>glottis0q</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mstdn.fr/@ButterflyOfFire">
<img
src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100"
width="100px;"
alt="ButterflyOfFire"
/>
<br />
<sub>
<b>ButterflyOfFire</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/lil5">
<img
src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100"
width="100px;"
alt="Lucian I. Last"
/>
<br />
<sub>
<b>Lucian I. Last</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/luuzviir">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100"
width="100px;"
alt="LuuzViir"
/>
<br />
<sub>
<b>LuuzViir</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/cthtc">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100"
width="100px;"
alt="CTHTC"
/>
<br />
<sub>
<b>CTHTC</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/retrograde">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100"
width="100px;"
alt="Russian Retro"
/>
<br />
<sub>
<b>Russian Retro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/mareklach">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100"
width="100px;"
alt="Marek L'ach"
/>
<br />
<sub>
<b>Marek L'ach</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/gunchleoc">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100"
width="100px;"
alt="GunChleoc"
/>
<br />
<sub>
<b>GunChleoc</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/gabisnow">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100"
width="100px;"
alt="GabiSnow"
/>
<br />
<sub>
<b>GabiSnow</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/bendaha">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100"
width="100px;"
alt="bendaha"
/>
<br />
<sub>
<b>bendaha</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/samuelroland">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100"
width="100px;"
alt="Samuel Roland"
/>
<br />
<sub>
<b>Samuel Roland</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://dimitriregnier.net/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Dimitri Regnier"
/>
<br />
<sub>
<b>Dimitri Regnier</b>
</sub>
</a>
<br />
<a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://im.irithys.com/@thy">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100"
width="100px;"
alt="irithys"
/>
<br />
<sub>
<b>irithys</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/caos30">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Sergi"
/>
<br />
<sub>
<b>Sergi</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/xosem">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100"
width="100px;"
alt="ghose (XoseM)"
/>
<br />
<sub>
<b>ghose (XoseM)</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/basen1982">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Andreas Olsson"
/>
<br />
<sub>
<b>Andreas Olsson</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/leonfrom">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="leonfrom"
/>
<br />
<sub>
<b>leonfrom</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/agentcobra57">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="agentcobra"
/>
<br />
<sub>
<b>agentcobra</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/alephoto85">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100"
width="100px;"
alt="Alessandro"
/>
<br />
<sub>
<b>Alessandro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/liimee">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="liimee"
/>
<br />
<sub>
<b>liimee</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/ahmedsabouni">
<img
src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100"
width="100px;"
alt="Ahmed Sabouni"
/>
<br />
<sub>
<b>Ahmed Sabouni</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/KrzysztofDomanczyk">
<img
src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100"
width="100px;"
alt="KrzysztofDomanczyk"
/>
<br />
<sub>
<b>KrzysztofDomanczyk</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/NeoluxConsulting">
<img
src="https://secure.gravatar.com/avatar/6e745565356330c1e29a85d52bffdaa1?s=80&d=identicon?s=100"
width="100px;"
alt="Guy Martin"
/>
<br />
<sub>
<b>Guy Martin</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=NeoluxConsulting"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
</tr>
</tbody>
</table>
{/* markdownlint-restore */}
{/* prettier-ignore-end */}
{/* ALL-CONTRIBUTORS-LIST:END */}
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contact
You may reach us for help or ask any question you have on:
@ -1360,7 +172,7 @@ Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [Bluesky](https://bsky.app/profile/castopod.org)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)

View file

@ -12,7 +12,7 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------ |
@ -20,11 +20,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Administrador | Administra el contingut de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Usos generals de Castopod. | admin.access |
{/* AUTH-INSTANCE-ROLES-LIST:END */}
{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
### Instance permissions
{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ----------------------- | -------------------------------------------------------------------- |
@ -38,13 +38,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Pot importar pòdcasts. |
| fediverse.manage-blocks | Pot evitar que actors/dominis del fedivers interactuen amb Castopod. |
{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
## 2. Per podcast roles and permissions
### Per podcast roles
{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@ -53,11 +53,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Autor | Administra el contingut del podcast #\{id\} però no el pot publicar. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Convidat | Col·laborador general del podcast #\{id\}. | view, episodes.view |
{/* AUTH-PODCAST-ROLES-LIST:END */}
{/_ AUTH-PODCAST-ROLES-LIST:END _/}
### Per podcast permissions
{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
@ -81,4 +81,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Pot publicar/anul·lar la publicació d'episodis i publicacions del pòdcast #\{id\}. |
| episodes.manage-comments | Pot crear/eliminar comentaris d'episodi del pòdcast #\{id\}. |
{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}

View file

@ -12,8 +12,8 @@ process:
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una
configuració de Nginx per a Castopod
A més, Castopod requereix una base de dades compatible amb MySQL. Es pot afegir
una base de dades Redis com a gestor de memòria cau.
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
## Etiquetes compatibles
@ -24,89 +24,89 @@ una base de dades Redis com a gestor de memòria cau.
## Exemple d'ús
1. Instal·leu [docker](https://docs.docker.com/get-docker/) i
[docker-compose](https://docs.docker.com/compose/install/)
2. Creeu un fitxer `docker-compose.yml` amb el següent:
1. Instal·leu [docker](https://docs.docker.com/get-docker/) i
[docker-compose](https://docs.docker.com/compose/install/)
```yml
version: "3.7"
2. Creeu un fitxer `docker-compose.yml` amb el següent:
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
CP_REDIS_PASSWORD: changeme
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
```yml
version: "3.7"
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
CP_REDIS_PASSWORD: changeme
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
command: --requirepass changeme
volumes:
- castopod-cache:/data
networks:
- castopod-app
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
castopod-cache:
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
command: --requirepass changeme
volumes:
- castopod-cache:/data
networks:
- castopod-app
networks:
castopod-app:
castopod-db:
```
volumes:
castopod-media:
castopod-db:
castopod-cache:
Heu d'adaptar algunes variables a les vostres necessitats (per exemple,
`CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` i
`CP_ANALYTICS_SALT`).
networks:
castopod-app:
castopod-db:
```
3. Configureu un `reverse proxy` per a TLS (SSL/HTTPS)
Heu d'adaptar algunes variables a les vostres necessitats (per exemple,
`CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` i
`CP_ANALYTICS_SALT`).
TLS és obligatori perquè ActivityPub funcioni. Aquest feina es pot gestionar
fàcilment amb un `reverse proxy`, per exemple amb
[Caddy](https://caddyserver.com/):
3. Configureu un `reverse proxy` per a TLS (SSL/HTTPS)
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
4. Executeu `docker-compose up -d`, espereu que s'inicialitzi i aneu a
`https://castopod.exemple.com/cp-install` per acabar de configurar Castopod!
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
5. Ja esteu a punt, podeu començar a fer podcasts! 🎙️🚀
4. Executeu `docker-compose up -d`, espereu que s'inicialitzi i aneu a
`https://castopod.exemple.com/cp-install` per acabar de configurar Castopod!
5. You're all set, start podcasting! 🎙️🚀
## Variables d'entorn

View file

@ -4,24 +4,14 @@ title: Com instal·lar Castopod?
import { Aside } from "@astrojs/starlight/components";
Castopod va ser pensat per ser fàcil d'instal·lar. Ja sigui utilitzant un
allotjament dedicat o un compartit, podeu instal·lar-lo a la majoria de
servidors web compatibles amb PHP-MySQL.
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
<Aside>
Hem publicat imatges oficials de Docker per a Castopod!
Si preferiu utilitzar Docker, podeu ometre això i anar directament a la
[documentació de Docker](./docker.md) per a Castopod.
</Aside>
## Requisits
## Requirements
- PHP v8.1 or higher
- MySQL versió 5.7 o superior o MariaDB versió 10.2 o superior
- Support d'HTTPS
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
@ -32,58 +22,57 @@ PHP version 8.1 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) amb les llibreries
**JPEG**, **PNG** i **WEBP**.
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
A més, assegureu-vos que les extensions següents estiguin habilitades al vostre
PHP:
Additionally, make sure that the following extensions are enabled in your PHP:
- json (activat per defecte; no el desactiveu)
- xml (activat per defecte; no el desactiveu)
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
### Base de dades compatible amb MySQL
### MySQL compatible database
> Us recomanem que utilitzeu [MariaDB](https://mariadb.org).
> We recommend using [MariaDB](https://mariadb.org).
Necessitareu el nom d'amfitrió del servidor (hostname), el nom de la base de
dades, el nom d'usuari i la contrasenya per completar el procés d'instal·lació.
Si no els teniu, poseu-vos en contacte amb l'administrador del vostre servidor.
You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
#### Privilegis
#### Privileges
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
### (Opcional) FFmpeg v4.1.8 o superior per fer videoclips
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
Si voleu generar videoclips, cal [FFmpeg](https://www.ffmpeg.org/) versió 4.1.8
o superior. Cal instal·lar les següents extensions:
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
want to generate Video Clips. The following extensions must be installed:
- La llibreria **FreeType 2** per
- **FreeType 2** library for
[gd](https://www.php.net/manual/en/image.installation.php).
### (Opcional) Altres recomanacions
### (Optional) Other recommendations
- Redis per a un millor rendiment de la memòria cau.
- CDN per a la memòria cau de fitxers estàtics i millors rendiments.
- Passarel·la de correu electrònic per a contrasenyes perdudes.
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
## Instruccions d'instal·lació
## Install instructions
### Pre-requisits
### Pre-requisites
0. Obteniu un servidor web amb els [requisits](#requirements) instal·lats
1. Creeu una base de dades MySQL per a Castopod amb un usuari amb privilegis
d'accés i modificació (per a més informació, vegeu
[base de dades compatible MySQL](#mysql-compatible-database)).
2. Activeu HTTPS al vostre domini amb un _certificat SSL_.
3. Baixeu i descomprimiu el darrer [paquet Castopod](https://castopod.org/) al
servidor web si encara no ho heu fet.
- ⚠️ Establiu l'arrel del document del servidor web a la subcarpeta
`castopod/public/`.
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
@ -93,7 +82,6 @@ o superior. Cal instal·lar les següents extensions:
**Note** - If you do not add this cron task, the following Castopod features
will not work:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
@ -101,25 +89,25 @@ o superior. Cal instal·lar les següents extensions:
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recomanat) Assistent d'instal·lació
### (recommended) Install Wizard
1. Executeu l'script d'instal·lació de Castopod anant a la pàgina web de
l'assistent d'instal·lació (`https://exemple.com/cp-install`) al vostre
navegador web preferit.
2. Seguiu les instruccions a la vostra pantalla.
3. Comenceu a fer podcasts!
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
<Aside>
L'script d'instal·lació escriu un fitxer `.env` a l'arrel del paquet. If you
cannot go through the install wizard, you can create and edit the `.env` file
manually based on the `.env.example` file.
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
</Aside>
### Using CLI
1. Create a `.env` file in the package root based on the `.env.example` file.
2. Initialize the database using:
```sh
@ -207,7 +195,7 @@ media.s3.region="your_s3_region"
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Paquets de la comunitat
## Community packages
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
@ -227,7 +215,7 @@ self-hosting for you.
>
<img
src="https://install-app.yunohost.org/install-with-yunohost.svg"
alt="Instal·lar Castopod amb YunoHost"
alt="Install Castopod with YunoHost"
class="align-middle"
/>
</a>
@ -248,7 +236,7 @@ self-hosting for you.
<path fill="none" d="M0 0h24v24H0z" />
<path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z" />
</svg>
Repositori a Github
Github Repo
</a>
</div>

View file

@ -12,26 +12,22 @@ d'errors 🐛 i millores de rendiment ⚡.
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
3. On your server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
@ -51,6 +47,7 @@ d'errors 🐛 i millores de rendiment ⚡.
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
<Aside>
@ -65,7 +62,7 @@ Releases may come with additional update instructions (see
## Fully Automated updates
> Aviat... 👀
> Coming soon... 👀
## Preguntes més freqüents (FAQ)
@ -77,7 +74,7 @@ corner.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
### Fa temps que no actualitzo la meva instància... Què hauria de fer?
### I haven't updated my instance in a long time… What should I do?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
@ -99,7 +96,7 @@ For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
més antiga a la més recent) començant per `v1.0.0-alpha.43`,
`v1.0.0-alpha.44`, `v1.0.0-alpha.45`, ..., `v1.0.0-beta.1`.
3. ✨ Gaudiu de la vostra nova instància, tot fet i preparat!
3. ✨ Enjoy your fresh instance, you're all done!
### Hauria de fer una còpia de seguretat abans d'actualitzar?

View file

@ -15,43 +15,43 @@ molt petita.
## Característiques
- 🌱 &nbsp;Gratis i de codi obert (llicència AGPL v3)
- 🔐 &nbsp;Centrat en la sobirania de les dades: el vostre contingut, audiència
- 🌱  Gratis i de codi obert (llicència AGPL v3)
- 🔐  Centrat en la sobirania de les dades: el vostre contingut, audiència
i estadístiques us pertanyen, i només a vosaltres
- 🪄 &nbsp;Funcions de podcasting 2.0: GUID, bloqueigos, transcripcions,
- 🪄  Funcions de podcasting 2.0: GUID, bloqueigos, transcripcions,
finançament, capítols, geo-localització, persones, fragments d'àudio, …
- 💬 &nbsp;Xarxa social integrada:
- 🚀 &nbsp;Castopod forma part de Fediverse, una xarxa social descentralitzada
- ❤️ &nbsp;Creeu publicacions, compartiu-les, afegiu-hi com a preferits i
- 💬  Xarxa social integrada:
- 🚀  Castopod forma part de Fediverse, una xarxa social descentralitzada
- ❤️  Creeu publicacions, compartiu-les, afegiu-hi com a preferits i
comenteu episodis
- 📈 &nbsp;Estadístiques integrades:
- ⚖️ &nbsp;Complint amb GDPR / CCPA / LGPD
- 🪙 &nbsp;Mesura d'audiència segons l'estàndard IABv2
- 🏡 &nbsp;Estadístiques locals, sense cap tercer implicat
- 📢 &nbsp;Eines de màrqueting integrades:
- ✅ &nbsp;Preparada per a SEO (metaetiquetes de gràfics oberts, JSON-LD, …)
- 📱 &nbsp;PWA: instal·lable pels oients com a aplicació autònoma
- 🎨 &nbsp;Colors del tema personalitzables
- 🎬 &nbsp;Genereu videoclips d'episodis preparats per compartir
- 🔉 &nbsp;Genera fragments d'àudio de cada episodi
- ▶️ &nbsp;Reproductor incrustable, per incrustar els episodis a qualsevol
- 📈  Estadístiques integrades:
- ⚖️  Complint amb GDPR / CCPA / LGPD
- 🪙  Mesura d'audiència segons l'estàndard IABv2
- 🏡  Estadístiques locals, sense cap tercer implicat
- 📢  Eines de màrqueting integrades:
- ✅  Preparada per a SEO (metaetiquetes de gràfics oberts, JSON-LD, …)
- 📱  PWA: instal·lable pels oients com a aplicació autònoma
- 🎨  Colors del tema personalitzables
- 🎬  Genereu videoclips d'episodis preparats per compartir
- 🔉  Genera fragments d'àudio de cada episodi
- ▶️  Reproductor incrustable, per incrustar els episodis a qualsevol
lloc web
- 💸 &nbsp;Monetització:
- 🔗 &nbsp;Enllaços de finançament
- 📲 &nbsp;Anuncis per escoltar-fent-clic
- 🤝 &nbsp;Integració amb value4value i WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publiqueu els vostres episodis a tot arreu amb RSS:
- 📱 &nbsp;A tots els directoris i aplicacions: Podcast Index, Apple Podcasts,
- 💸  Monetització:
- 🔗  Enllaços de finançament
- 📲  Anuncis per escoltar-fent-clic
- 🤝  Integració amb value4value i WebMonetization
- 💎  Premium podcasts
- 📡  Publiqueu els vostres episodis a tot arreu amb RSS:
- 📱  A tots els directoris i aplicacions: Podcast Index, Apple Podcasts,
Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Emeteu els vostres episodis a l'instant amb WebSub
- 📥 &nbsp;Importació de podcasts: moveu el vostre podcast existent a Castopod
- 📤 &nbsp;Traieu el vostre podcast fora de Castopod
- 🔀 &nbsp;Multi-podcast: allotgeu tants programes com vulgueu en un mateix lloc
- 👥 &nbsp;Multi-usuari: afegiu col·laboradors i definiu rols
- 🌎 &nbsp;Suport i18n: traduït a l'anglès, català, espanyol, xinès, francès,
polonès, alemany, portuguès brasiler ... i
[més per venir](https://translate.castopod.org)!
- ⚡  Emeteu els vostres episodis a l'instant amb WebSub
- 📥  Importació de podcasts: moveu el vostre podcast existent a Castopod
- 📤  Traieu el vostre podcast fora de Castopod
- 🔀  Multi-podcast: allotgeu tants programes com vulgueu en un mateix lloc
- 👥  Multi-usuari: afegiu col·laboradors i definiu rols
- 🌎  i18n support: translated in English, French, Polish, German,
Brazilian Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivació
@ -135,9 +135,9 @@ Each of these solutions differ from one another, you may compare with the
That being said, there are two main differences with other podcasting solutions:
- Castopod es pot auto-allotjar i és la única solució que us permet mantenir el
control total sobre el que produïu. A més, com que és de codi obert, fins i
tot podeu personalitzar-lo com vulgueu.
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Castopod és l'única solució que actualment integra tant una xarxa social
descentralitzada amb ActivityPub com moltes de les funcions de podcasting 2.0,
@ -163,1210 +163,22 @@ and test your changes to Castopod.
## Col·laboradors ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
{/* ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section */}
{/* prettier-ignore-start */}
{/* markdownlint-disable */}
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/yassinedoghri">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100"
width="100px;"
alt="Yassine Doghri"
/>
<br />
<sub>
<b>Yassine Doghri</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a href="#maintenance-yassinedoghri" title="Maintenance">
🚧
</a>{" "}
<a href="#content-yassinedoghri" title="Content">
🖋
</a>{" "}
<a href="#design-yassinedoghri" title="Design">
🎨
</a>{" "}
<a href="#a11y-yassinedoghri" title="Accessibility">
️️️️♿️
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-yassinedoghri" title="Answering Questions">
💬
</a>{" "}
<a href="#mentoring-yassinedoghri" title="Mentoring">
🧑‍🏫
</a>{" "}
<a
href="#infra-yassinedoghri"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a href="#projectManagement-yassinedoghri" title="Project Management">
📆
</a>{" "}
<a
href="https://blog.castopod.org/author/yassinedoghri/"
title="Blogposts"
>
📝
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/benjamin">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100"
width="100px;"
alt="Benjamin Bellamy"
/>
<br />
<sub>
<b>Benjamin Bellamy</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a href="#content-benjamin" title="Content">
🖋
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-benjamin" title="Answering Questions">
💬
</a>{" "}
<a
href="#infra-benjamin"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a
href="https://blog.castopod.org/author/benjamin-bellamy/"
title="Blogposts"
>
📝
</a>{" "}
<a href="#projectManagement-benjamin" title="Project Management">
📆
</a>{" "}
<a href="#talk-benjamin" title="Talks">
📢
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/ola-hn">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Ola Hneini"
/>
<br />
<sub>
<b>Ola Hneini</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a href="#maintenance-ola" title="Maintenance">
🚧
</a>{" "}
<a href="#question-ola" title="Answering Questions">
💬
</a>{" "}
<a href="#ideas-ola" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mamot.fr/@rdelaage">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Romain de Laage"
/>
<br />
<sub>
<b>Romain de Laage</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="#infra-rdelaage"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/lyonelbernard">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Lyonel Bernard"
/>
<br />
<sub>
<b>Lyonel Bernard</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#question-Lyonel" title="Answering Questions">
💬
</a>{" "}
<a href="#audio-Lyonel" title="Audio">
🔊
</a>{" "}
<a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://www.crypticchameleon.com/">
<img
src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100"
width="100px;"
alt="Christopher Lagonick-Weitzel"
/>
<br />
<sub>
<b>Christopher Lagonick-Weitzel</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#question-ctlw83" title="Answering Questions">
💬
</a>{" "}
<a href="#audio-ctlw83" title="Audio">
🔊
</a>{" "}
<a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://ernestoacosta.me/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Ernesto Acosta"
/>
<br />
<sub>
<b>Ernesto Acosta</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#audio-ernestoacostame" title="Audio">
🔊
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-ernestoacostame" title="Answering Questions">
💬
</a>{" "}
<a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://mastodon.fedi.bzh/@ewen">
<img
src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100"
width="100px;"
alt="Ewen"
/>
<br />
<sub>
<b>Ewen</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-3wen" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/Behel">
<img
src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100"
width="100px;"
alt="Bastien Luneteau"
/>
<br />
<sub>
<b>Bastien Luneteau</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://www.cecillie.fr/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Cécile Ricordeau"
/>
<br />
<sub>
<b>Cécile Ricordeau</b>
</sub>
</a>
<br />
<a href="#design-cecillie" title="Design">
🎨
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/PatrykMis">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Patryk Miś"
/>
<br />
<sub>
<b>Patryk Miś</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/mspanc">
<img
src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100"
width="100px;"
alt="Marcin Lewandowski"
/>
<br />
<sub>
<b>Marcin Lewandowski</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/SJanik">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Sebastian Janik"
/>
<br />
<sub>
<b>Sebastian Janik</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/patryk">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Patryk Karczmarczyk"
/>
<br />
<sub>
<b>Patryk Karczmarczyk</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/ddenis">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="denis d"
/>
<br />
<sub>
<b>denis d</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/douglaskastle">
<img
src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100"
width="100px;"
alt="Douglas Kastle"
/>
<br />
<sub>
<b>Douglas Kastle</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/cExplorer">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="cExplorer"
/>
<br />
<sub>
<b>cExplorer</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer"
title="Bug reports"
>
🐛
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/imacrea">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="ImaCrea"
/>
<br />
<sub>
<b>ImaCrea</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/jonas">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Jonas S"
/>
<br />
<sub>
<b>Jonas S</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/yannL">
<img
src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100"
width="100px;"
alt="LEFEBVRE Yann"
/>
<br />
<sub>
<b>LEFEBVRE Yann</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/spaetz">
<img
src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100"
width="100px;"
alt="Sebastian Späth"
/>
<br />
<sub>
<b>Sebastian Späth</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/rocky">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="rocky III"
/>
<br />
<sub>
<b>rocky III</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/Regenpfeifer">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100"
width="100px;"
alt="Hermann Josef Eckl"
/>
<br />
<sub>
<b>Hermann Josef Eckl</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/cyrilledel">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Delhaye Cyrille"
/>
<br />
<sub>
<b>Delhaye Cyrille</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/otetranome">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100"
width="100px;"
alt="João Leandro"
/>
<br />
<sub>
<b>João Leandro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://achouvardas.eu/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Angelos Chouvardas"
/>
<br />
<sub>
<b>Angelos Chouvardas</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mastodon.fjerland.no/@eivind">
<img
src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100"
width="100px;"
alt="Eivind"
/>
<br />
<sub>
<b>Eivind</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/forght">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100"
width="100px;"
alt="forght"
/>
<br />
<sub>
<b>forght</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/glottis0q">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100"
width="100px;"
alt="glottis0q"
/>
<br />
<sub>
<b>glottis0q</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mstdn.fr/@ButterflyOfFire">
<img
src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100"
width="100px;"
alt="ButterflyOfFire"
/>
<br />
<sub>
<b>ButterflyOfFire</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/lil5">
<img
src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100"
width="100px;"
alt="Lucian I. Last"
/>
<br />
<sub>
<b>Lucian I. Last</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/luuzviir">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100"
width="100px;"
alt="LuuzViir"
/>
<br />
<sub>
<b>LuuzViir</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/cthtc">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100"
width="100px;"
alt="CTHTC"
/>
<br />
<sub>
<b>CTHTC</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/retrograde">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100"
width="100px;"
alt="Russian Retro"
/>
<br />
<sub>
<b>Russian Retro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/mareklach">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100"
width="100px;"
alt="Marek L'ach"
/>
<br />
<sub>
<b>Marek L'ach</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/gunchleoc">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100"
width="100px;"
alt="GunChleoc"
/>
<br />
<sub>
<b>GunChleoc</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/gabisnow">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100"
width="100px;"
alt="GabiSnow"
/>
<br />
<sub>
<b>GabiSnow</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/bendaha">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100"
width="100px;"
alt="bendaha"
/>
<br />
<sub>
<b>bendaha</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/samuelroland">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100"
width="100px;"
alt="Samuel Roland"
/>
<br />
<sub>
<b>Samuel Roland</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://dimitriregnier.net/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Dimitri Regnier"
/>
<br />
<sub>
<b>Dimitri Regnier</b>
</sub>
</a>
<br />
<a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://im.irithys.com/@thy">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100"
width="100px;"
alt="irithys"
/>
<br />
<sub>
<b>irithys</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/caos30">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Sergi"
/>
<br />
<sub>
<b>Sergi</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/xosem">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100"
width="100px;"
alt="ghose (XoseM)"
/>
<br />
<sub>
<b>ghose (XoseM)</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/basen1982">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Andreas Olsson"
/>
<br />
<sub>
<b>Andreas Olsson</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/leonfrom">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="leonfrom"
/>
<br />
<sub>
<b>leonfrom</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/agentcobra57">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="agentcobra"
/>
<br />
<sub>
<b>agentcobra</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/alephoto85">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100"
width="100px;"
alt="Alessandro"
/>
<br />
<sub>
<b>Alessandro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/liimee">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="liimee"
/>
<br />
<sub>
<b>liimee</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/ahmedsabouni">
<img
src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100"
width="100px;"
alt="Ahmed Sabouni"
/>
<br />
<sub>
<b>Ahmed Sabouni</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/KrzysztofDomanczyk">
<img
src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100"
width="100px;"
alt="KrzysztofDomanczyk"
/>
<br />
<sub>
<b>KrzysztofDomanczyk</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/NeoluxConsulting">
<img
src="https://secure.gravatar.com/avatar/6e745565356330c1e29a85d52bffdaa1?s=80&d=identicon?s=100"
width="100px;"
alt="Guy Martin"
/>
<br />
<sub>
<b>Guy Martin</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=NeoluxConsulting"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
</tr>
</tbody>
</table>
{/* markdownlint-restore */}
{/* prettier-ignore-end */}
{/* ALL-CONTRIBUTORS-LIST:END */}
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contacte
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (per a la interacció directa amb
desenvolupadors i la comunitat)
- [Seguiment d'incidències](https://code.castopod.org/adaures/castopod/-/issues)
(per a sol·licituds de noves funcionalitats i informes d'errors)
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (instància de Mastodon)
- [Twitter](https://twitter.com/castopod)
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Bluesky](https://bsky.app/profile/castopod.org)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Patrocinadors
## Sponsors
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
@ -1376,7 +188,7 @@ backers. If you'd like to help, please consider
[![NLnet Logo](../../../assets/images/sponsors/nlnet.svg)](https://nlnet.nl/)
## Llicència
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)

View file

@ -12,7 +12,7 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Rolloù an istañs
{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
@ -20,11 +20,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
{/* AUTH-INSTANCE-ROLES-LIST:END */}
{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
### Aotreoù war an istañs
{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
@ -38,13 +38,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
## 2. Per podcast roles and permissions
### Per podcast roles
{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@ -53,11 +53,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
{/* AUTH-PODCAST-ROLES-LIST:END */}
{/_ AUTH-PODCAST-ROLES-LIST:END _/}
### Per podcast permissions
{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@ -81,4 +81,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}

View file

@ -12,8 +12,8 @@ izrade:
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server):
Nginx konfiguracija za Castopod
Pored toga, Castopod zahteva MySQL kompatibilnu bazu podataka. Redis baza
podataka može se dodati kao obrađivač keša.
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
## Podržani tagovi
@ -24,86 +24,87 @@ podataka može se dodati kao obrađivač keša.
## Primer upotrebe
1. Instalirajte [docker](https://docs.docker.com/get-docker/) i
[docker-compose](https://docs.docker.com/compose/install/)
2. Napravite `docker-compose.yml` datoteku sa sledećim:
1. Instalirajte [docker](https://docs.docker.com/get-docker/) i
[docker-compose](https://docs.docker.com/compose/install/)
```yml
version: "3.7"
2. Napravite `docker-compose.yml` datoteku sa sledećim:
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
```yml
version: "3.7"
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
volumes:
- castopod-cache:/data
networks:
- castopod-app
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
castopod-cache:
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
volumes:
- castopod-cache:/data
networks:
- castopod-app
networks:
castopod-app:
castopod-db:
```
volumes:
castopod-media:
castopod-db:
castopod-cache:
Morate prilagoditi neke varijable svojim potrebama (npr. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
networks:
castopod-app:
castopod-db:
```
3. Podesite obrnuti proksi za TLS (SSL/HTTPS)
Morate prilagoditi neke varijable svojim potrebama (npr. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
TLS je obavezan da bu ActivityPub radio. Ovaj posao se lako može obaviti
obrnutim proksijem, na primer sa [Caddy-ijem](https://caddyserver.com/):
3. Podesite obrnuti proksi za TLS (SSL/HTTPS)
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
4. Pokrenite `docker-compose up -d`, sačekajte da se pokrene i idite na
`https://castopod.example.com/cp-install` da biste završili instalaciju
Castopod-a!
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
5. Sve je spremno, započnite sa podkastingom! 🎙️🚀
4. Pokrenite `docker-compose up -d`, sačekajte da se pokrene i idite na
`https://castopod.example.com/cp-install` da biste završili instalaciju
Castopod-a!
5. You're all set, start podcasting! 🎙️🚀
## Promenljive okruženja

View file

@ -7,15 +7,6 @@ import { Aside } from "@astrojs/starlight/components";
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
<Aside>
We've released official Docker images for Castopod!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
</Aside>
## Requirements
- PHP v8.1 or higher
@ -91,7 +82,6 @@ want to generate Video Clips. The following extensions must be installed:
**Note** - If you do not add this cron task, the following Castopod features
will not work:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
@ -117,6 +107,7 @@ based on the `.env.example` file.
### Using CLI
1. Create a `.env` file in the package root based on the `.env.example` file.
2. Initialize the database using:
```sh

View file

@ -12,26 +12,22 @@ improvements ⚡.
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
3. On your server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
@ -51,6 +47,7 @@ improvements ⚡.
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
<Aside>

View file

@ -18,39 +18,39 @@ otiskom (footprint).
- 🌱 Besplatan i otvorenog koda (AGPL v3 License)
- 🔐 Fokusiran an suverenitet podataka: vaš sadržaj, publika i analitika pripada
vama i samo vama
- 🪄 &nbsp;Podkasting 2.0 funkcionalnosti: GUID, zaključan, transkripti,
- 🪄  Podkasting 2.0 funkcionalnosti: GUID, zaključan, transkripti,
podrška, poglavlja, lokacija, posobe, zvučni isečci, …
- 💬 &nbsp;Ugrađena društvena mreža:
- 🚀 &nbsp;Castopod je deo Fediversa, decentralizovane društvene mreže
- ❤️ &nbsp;Napravite objave, delite, dodajte u omiljene i komentarišite
- 💬  Ugrađena društvena mreža:
- 🚀  Castopod je deo Fediversa, decentralizovane društvene mreže
- ❤️  Napravite objave, delite, dodajte u omiljene i komentarišite
epizode
- 📈 &nbsp;Ugrađena analitika:
- ⚖️ &nbsp;U skladu sa GDPR / CCPA / LGPD
- 🪙 &nbsp;Merenje publike putem IABv2 standarda
- 🏡 &nbsp;Analitika na licu mesta, bez uključenosti trećih strana
- 📢 &nbsp;Ugrađeni marketinški alati:
- ✅ &nbsp;SEO spremno (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: instalirajte kao samostojeću aplikaciju
- 🎨 &nbsp;Prilagodljive boje teme
- 🎬 &nbsp;Napravite video isečke iz epizoda koji su spremni za deljenje
- 🔉 &nbsp;Napravite audio isečke
- ▶️ &nbsp;Plejer koji možete koristiti na svom sajtu (embed)
- 💸 &nbsp;Monetizacija:
- 🔗 &nbsp;Linkovi za podršku publike
- 📲 &nbsp;Slušaj i klikni reklame
- 🤝 &nbsp;value4value / Veb Monetizacija
- 💎 &nbsp;Premijum podkasti
- 📡 &nbsp;Objavite svoje epizode svugde uz RSS:
- 📱 &nbsp;Na svim agregatorima i aplikacijama: Podcast Index, Apple Podcasts,
- 📈  Ugrađena analitika:
- ⚖️  U skladu sa GDPR / CCPA / LGPD
- 🪙  Merenje publike putem IABv2 standarda
- 🏡  Analitika na licu mesta, bez uključenosti trećih strana
- 📢  Ugrađeni marketinški alati:
- ✅  SEO spremno (open-graph meta-tags, JSON-LD, …)
- 📱  PWA: instalirajte kao samostojeću aplikaciju
- 🎨  Prilagodljive boje teme
- 🎬  Napravite video isečke iz epizoda koji su spremni za deljenje
- 🔉  Napravite audio isečke
- ▶️  Plejer koji možete koristiti na svom sajtu (embed)
- 💸  Monetizacija:
- 🔗  Linkovi za podršku publike
- 📲  Slušaj i klikni reklame
- 🤝  value4value / Veb Monetizacija
- 💎  Premijum podkasti
- 📡  Objavite svoje epizode svugde uz RSS:
- 📱  Na svim agregatorima i aplikacijama: Podcast Index, Apple Podcasts,
Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Emitujte svoje epizode instant uz WebSub
- 📥 &nbsp;Uvoz podkasta: prebacite svoj postojeći podkast na Castopod
- 📤 &nbsp;Prebacite svoj podkast sa Castopod-a
- 🔀 &nbsp;Mreža: hostujte koliko god želite podkasta
- 👥 &nbsp;Više korisnika: dodajte saradnike i odredite njihove uloge
- 🌎 &nbsp;i18n podrška: prevedeno na engleski, francuski, poljski, nemački,
brazilski portugalski, španski…
[još jezika uskoro](https://translate.castopod.org)!
- ⚡  Emitujte svoje epizode instant uz WebSub
- 📥  Uvoz podkasta: prebacite svoj postojeći podkast na Castopod
- 📤  Prebacite svoj podkast sa Castopod-a
- 🔀  Mreža: hostujte koliko god želite podkasta
- 👥  Više korisnika: dodajte saradnike i odredite njihove uloge
- 🌎  i18n support: translated in English, French, Polish, German,
Brazilian Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivacija
@ -76,28 +76,28 @@ Ovaj projekat gura zajednica otvorenog koda, ponajviše
## Poređenje sa drugim rešenjima
Verujemo da jedno rešenje nije dobro za sve, već da sve zavisi od vaših potreba.
Tako da evo poređenja sa drugim alatima kako bi ste mogli da procenite da li je
Castopod prava stvar za vas.
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for you.
### Castopod protiv Wordpress-a
Castopod je često nazivan "Wordpress-om za podkaste" zbog sličnosti koje deli sa
ovom ploatformom. U neku ruku ovo je tačno. I zapravo, Castopod bio je u velikoj
meri inspirisan Wordpress ekosistemom, videvši lakoću usvajanja od zajednice i
broja veb lokacija koje rade na njemu.
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running it.
Isto kao i Wordpress, Castopod je besplatan i otvorenog koda, napravljen
koristeći PHP i MySQL baze podataka i spakovan na način koji vam omogućava
jednostavnu instalaciju na većini veb servera.
Wordpress je odličan način na napravite veb stranicu i upotpunite je dodatcima
kako bi dobili ono što želite. To je potpuno razvijen CMS koji vam pomaže da
dobijete bilo koju vrstu veb stranica na mreži.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
S druge strane, Castopod treba da odgovori na posebne potrebe podkastera,
fokusirajući se na podkasting, i ništa drugo. Nisu vam potrebni nikakvi dodatci
kako bi ste krenuli na svoje podkastersko putovanje.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting journey.
Ovo omogućava optimizaciju procesa specifičnih za podcasting: u rasponu od
kreiranja vaših podkasta i objavljivanja novih epizoda sve do emitovanja,
@ -108,17 +108,17 @@ funkcionišu zajedno jer dele iste zahteve!
### Castopod protiv Funkwhale-a
Funkwhale je moderan besplatni muzički server otvorenog koda koji se samostalno
hostuje. Kao i Castopod, Funkwhale je deo Fedivers-a, decentralizovane društvene
mreže što omogućava kompatibilnost između njih.
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale je u početku napravljen oko muzike. Kasnije, kako je projekat
napredovao, dodata je opcija hostovanja podkasta.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Za razliku od Funkwhale-a, Castopod je dizajniran i napravljen isključivo oko
podkasta. Ovo omogućava lakšu implementaciju funkcionalnosti koje se odnose na
podkast ekosistem, kao što su podkasting 2.0 alati (transkripti, poglavlja,
lokacije, osobe, ...).
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
Tako da bi ste verovatno trebali da koristite Funkwhale ukoliko želite da
hostujete svoju muziku a Castopod ukoliko želite da hostujete svoje podkaste.
@ -135,9 +135,9 @@ Svako od ovih rešenja se razlikuje jedno od drugog, možete ih uporediti sa
Imajući to u vidu, postoje dve glavne razlike u odnosu na druga rešenja za
podkasting:
- Castopod može biti samostalno hostovan i jedino je rešenje koje vam omogućava
da zadržite punu kontrolu nad onim što proizvodite. Takođe, pošto je otvorenog
koda, možete ga čak prilagoditi kako želite.
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Castopod je jedino rešenje koje trenutno uklapa decentralizovanu društvenu
mrežu sa ActivityPub-om kao i mnoge funkcionalnosti podkasting-a 2.0, nadajući
@ -145,15 +145,15 @@ podkasting:
## Doprinos
Volite Catsopod i voleli bi ste da pomognete? Pogledajte dokumentaciju koja
sledi kako bi ste počeli.
Love Castopod and would like to help? Take a look at the following documentation
to get you started.
### Kodeks ponašanja
Castopod je usvojio Kodeks ponašanja kojeg očekujemo da se učesnici u projektu
pridržavaju. Molimo da pročitate
[Uputstvo Kodeksa ponašanja](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
kako bi ste razumeli šta hoće a šta neće biti tolerisano.
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be tolerated.
### Vodič za doprinos
@ -166,1218 +166,31 @@ unapređenja i kako da napravite i testirate svoje promene na Castopod-u.
Veliko hvala ovim divnim ljudima
([ključ emotikona](https://allcontributors.org/docs/en/emoji-key)):
{/* ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section */}
{/* prettier-ignore-start */}
{/* markdownlint-disable */}
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/yassinedoghri">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100"
width="100px;"
alt="Yassine Doghri"
/>
<br />
<sub>
<b>Yassine Doghri</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a href="#maintenance-yassinedoghri" title="Maintenance">
🚧
</a>{" "}
<a href="#content-yassinedoghri" title="Content">
🖋
</a>{" "}
<a href="#design-yassinedoghri" title="Design">
🎨
</a>{" "}
<a href="#a11y-yassinedoghri" title="Accessibility">
️️️️♿️
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-yassinedoghri" title="Answering Questions">
💬
</a>{" "}
<a href="#mentoring-yassinedoghri" title="Mentoring">
🧑‍🏫
</a>{" "}
<a
href="#infra-yassinedoghri"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a href="#projectManagement-yassinedoghri" title="Project Management">
📆
</a>{" "}
<a
href="https://blog.castopod.org/author/yassinedoghri/"
title="Blogposts"
>
📝
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/benjamin">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100"
width="100px;"
alt="Benjamin Bellamy"
/>
<br />
<sub>
<b>Benjamin Bellamy</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a href="#content-benjamin" title="Content">
🖋
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-benjamin" title="Answering Questions">
💬
</a>{" "}
<a
href="#infra-benjamin"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a
href="https://blog.castopod.org/author/benjamin-bellamy/"
title="Blogposts"
>
📝
</a>{" "}
<a href="#projectManagement-benjamin" title="Project Management">
📆
</a>{" "}
<a href="#talk-benjamin" title="Talks">
📢
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/ola-hn">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Ola Hneini"
/>
<br />
<sub>
<b>Ola Hneini</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola"
title="Reviewed Pull Requests"
>
👀
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a href="#maintenance-ola" title="Maintenance">
🚧
</a>{" "}
<a href="#question-ola" title="Answering Questions">
💬
</a>{" "}
<a href="#ideas-ola" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mamot.fr/@rdelaage">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Romain de Laage"
/>
<br />
<sub>
<b>Romain de Laage</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="#infra-rdelaage"
title="Infrastructure (Hosting, Build-Tools, etc)"
>
🚇
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Documentation"
>
📖
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/lyonelbernard">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Lyonel Bernard"
/>
<br />
<sub>
<b>Lyonel Bernard</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#question-Lyonel" title="Answering Questions">
💬
</a>{" "}
<a href="#audio-Lyonel" title="Audio">
🔊
</a>{" "}
<a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://www.crypticchameleon.com/">
<img
src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100"
width="100px;"
alt="Christopher Lagonick-Weitzel"
/>
<br />
<sub>
<b>Christopher Lagonick-Weitzel</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#question-ctlw83" title="Answering Questions">
💬
</a>{" "}
<a href="#audio-ctlw83" title="Audio">
🔊
</a>{" "}
<a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://ernestoacosta.me/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Ernesto Acosta"
/>
<br />
<sub>
<b>Ernesto Acosta</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#audio-ernestoacostame" title="Audio">
🔊
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#question-ernestoacostame" title="Answering Questions">
💬
</a>{" "}
<a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://mastodon.fedi.bzh/@ewen">
<img
src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100"
width="100px;"
alt="Ewen"
/>
<br />
<sub>
<b>Ewen</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-3wen" title="Ideas, Planning, & Feedback">
🤔
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/Behel">
<img
src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100"
width="100px;"
alt="Bastien Luneteau"
/>
<br />
<sub>
<b>Bastien Luneteau</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://www.cecillie.fr/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Cécile Ricordeau"
/>
<br />
<sub>
<b>Cécile Ricordeau</b>
</sub>
</a>
<br />
<a href="#design-cecillie" title="Design">
🎨
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/PatrykMis">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Patryk Miś"
/>
<br />
<sub>
<b>Patryk Miś</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/mspanc">
<img
src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100"
width="100px;"
alt="Marcin Lewandowski"
/>
<br />
<sub>
<b>Marcin Lewandowski</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/SJanik">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Sebastian Janik"
/>
<br />
<sub>
<b>Sebastian Janik</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/patryk">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Patryk Karczmarczyk"
/>
<br />
<sub>
<b>Patryk Karczmarczyk</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/ddenis">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="denis d"
/>
<br />
<sub>
<b>denis d</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/douglaskastle">
<img
src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100"
width="100px;"
alt="Douglas Kastle"
/>
<br />
<sub>
<b>Douglas Kastle</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/cExplorer">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="cExplorer"
/>
<br />
<sub>
<b>cExplorer</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer"
title="Bug reports"
>
🐛
</a>{" "}
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/imacrea">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="ImaCrea"
/>
<br />
<sub>
<b>ImaCrea</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/jonas">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Jonas S"
/>
<br />
<sub>
<b>Jonas S</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/yannL">
<img
src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100"
width="100px;"
alt="LEFEBVRE Yann"
/>
<br />
<sub>
<b>LEFEBVRE Yann</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/spaetz">
<img
src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100"
width="100px;"
alt="Sebastian Späth"
/>
<br />
<sub>
<b>Sebastian Späth</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/rocky">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="rocky III"
/>
<br />
<sub>
<b>rocky III</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/Regenpfeifer">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100"
width="100px;"
alt="Hermann Josef Eckl"
/>
<br />
<sub>
<b>Hermann Josef Eckl</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer"
title="Bug reports"
>
🐛
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/cyrilledel">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Delhaye Cyrille"
/>
<br />
<sub>
<b>Delhaye Cyrille</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel"
title="Bug reports"
>
🐛
</a>{" "}
<a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/otetranome">
<img
src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100"
width="100px;"
alt="João Leandro"
/>
<br />
<sub>
<b>João Leandro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>{" "}
<a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://achouvardas.eu/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Angelos Chouvardas"
/>
<br />
<sub>
<b>Angelos Chouvardas</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://mastodon.fjerland.no/@eivind">
<img
src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100"
width="100px;"
alt="Eivind"
/>
<br />
<sub>
<b>Eivind</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/forght">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100"
width="100px;"
alt="forght"
/>
<br />
<sub>
<b>forght</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/glottis0q">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100"
width="100px;"
alt="glottis0q"
/>
<br />
<sub>
<b>glottis0q</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/glottis0q">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100"
width="100px;"
alt="glottis0q"
/>
<br />
<sub>
<b>glottis0q</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/lil5">
<img
src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100"
width="100px;"
alt="Lucian I. Last"
/>
<br />
<sub>
<b>Lucian I. Last</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/luuzviir">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100"
width="100px;"
alt="LuuzViir"
/>
<br />
<sub>
<b>LuuzViir</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/cthtc">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100"
width="100px;"
alt="CTHTC"
/>
<br />
<sub>
<b>CTHTC</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/retrograde">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100"
width="100px;"
alt="Russian Retro"
/>
<br />
<sub>
<b>Russian Retro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/mareklach">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100"
width="100px;"
alt="Marek L'ach"
/>
<br />
<sub>
<b>Marek L'ach</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/gunchleoc">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100"
width="100px;"
alt="GunChleoc"
/>
<br />
<sub>
<b>GunChleoc</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/gabisnow">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100"
width="100px;"
alt="GabiSnow"
/>
<br />
<sub>
<b>GabiSnow</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/bendaha">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100"
width="100px;"
alt="bendaha"
/>
<br />
<sub>
<b>bendaha</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/samuelroland">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100"
width="100px;"
alt="Samuel Roland"
/>
<br />
<sub>
<b>Samuel Roland</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://dimitriregnier.net/">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Dimitri Regnier"
/>
<br />
<sub>
<b>Dimitri Regnier</b>
</sub>
</a>
<br />
<a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">
🤔
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://im.irithys.com/@thy">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100"
width="100px;"
alt="irithys"
/>
<br />
<sub>
<b>irithys</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://twitter.com/caos30">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Sergi"
/>
<br />
<sub>
<b>Sergi</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/xosem">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100"
width="100px;"
alt="ghose (XoseM)"
/>
<br />
<sub>
<b>ghose (XoseM)</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/basen1982">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="Andreas Olsson"
/>
<br />
<sub>
<b>Andreas Olsson</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/leonfrom">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="leonfrom"
/>
<br />
<sub>
<b>leonfrom</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/agentcobra57">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="agentcobra"
/>
<br />
<sub>
<b>agentcobra</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/alephoto85">
<img
src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100"
width="100px;"
alt="Alessandro"
/>
<br />
<sub>
<b>Alessandro</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://crowdin.com/profile/liimee">
<img
src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100"
width="100px;"
alt="liimee"
/>
<br />
<sub>
<b>liimee</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/ahmedsabouni">
<img
src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100"
width="100px;"
alt="Ahmed Sabouni"
/>
<br />
<sub>
<b>Ahmed Sabouni</b>
</sub>
</a>
<br />
<a href="https://translate.castopod.org" title="Translation">
🌍
</a>
</td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/KrzysztofDomanczyk">
<img
src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100"
width="100px;"
alt="KrzysztofDomanczyk"
/>
<br />
<sub>
<b>KrzysztofDomanczyk</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
<td align="center" valign="top" width="14.28%">
<a href="https://code.castopod.org/NeoluxConsulting">
<img
src="https://secure.gravatar.com/avatar/6e745565356330c1e29a85d52bffdaa1?s=80&d=identicon?s=100"
width="100px;"
alt="Guy Martin"
/>
<br />
<sub>
<b>Guy Martin</b>
</sub>
</a>
<br />
<a
href="https://code.castopod.org/adaures/castopod/issues?author_username=NeoluxConsulting"
title="Bug reports"
>
🐛
</a>{" "}
<a
href="https://code.castopod.org/adaures/castopod/commits/master"
title="Code"
>
💻
</a>
</td>
</tr>
</tbody>
</table>
Alternatively, you can follow us on social media platforms to get news about
Castopod:
{/* markdownlint-restore */}
{/* prettier-ignore-end */}
{/* ALL-CONTRIBUTORS-LIST:END */}
Ovaj projekat prati specifikaciju
[svih saradnika](https://github.com/all-contributors/all-contributors).
Doprinosi bilo koje vrste su dobrodošli!
## Kontakt
Možete nas kontaktirati za pomoć ili postaviti bilo koje pitanje koje imate na:
- [Discord-u](https://castopod.org/discord) (za direktnu interakciju sa
programerima i zajednicom)
- [Listi pitanja](https://code.castopod.org/adaures/castopod/-/issues) (za
zahteve za funkcionalnostima i prijavu bagova)
Takođe, možete nas pratiti na društvenim mrežama kako bi ste dobili najnovije
vesti o Castopod-u:
- [podlibre.social](https://podlibre.social/@Castopod) (instanca Mastodon-a)
- [Twitter](https://twitter.com/castopod)
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Bluesky](https://bsky.app/profile/castopod.org)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponzori
## Sponsors
Tekući razvoj Castopod-a je omogućen uz podršku vas koji nas podržavate. Ukoliko
želite da pomognete, razmislite o
[sponzorisanju razvoja Castopod-a](https://opencollective.com/castopod/contribute).
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
[![Ad Aures Logo](../../../assets/images/sponsors/adaures.svg)](https://adaures.com/)
[![NLnet Logo](../../../assets/images/sponsors/nlnet.svg)](https://nlnet.nl/)
## Licenca
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Autorska prava © 2020-danas, [Ad Aures](https://adaures.com/).
Copyright © 2020-present, [Ad Aures](https://adaures.com/).

View file

@ -13,7 +13,7 @@ definiert:
### Instanz Rollen
{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------ |
@ -21,11 +21,11 @@ definiert:
| Manager | Verwaltet Castopods Inhalte. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Allgemeine Benutzer von Castopod. | admin.access |
{/* AUTH-INSTANCE-ROLES-LIST:END */}
{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
### Instanz Berechtigungen
{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ----------------------- | ---------------------------------------------------------------------------- |
@ -39,13 +39,13 @@ definiert:
| podcasts.import | Kann Podcasts importieren. |
| fediverse.manage-blocks | Kann föderierte Nutzer/Domains davon abhalten, mit Castopod zu interagieren. |
{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
## 2. Pro Podcast Rollen und Berechtigungen
### Pro Podcast Rollen
{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
| role | description | permissions |
| ------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@ -54,11 +54,11 @@ definiert:
| Autor | Verwaltet Inhalte von Podcast #\{id\}, kann diese aber nicht veröffentlichen. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gast | Allgemeiner Mitwirkender des Podcasts #\{id\}. | view, episodes.view |
{/* AUTH-PODCAST-ROLES-LIST:END */}
{/_ AUTH-PODCAST-ROLES-LIST:END _/}
### Pro Podcast Berechtigung
{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- |
@ -82,4 +82,4 @@ definiert:
| episodes.manage-publications | Kann Episoden und Posts von Podcast #\{id\} veröffentlichen/zurückziehen. |
| episodes.manage-comments | Kann Kommentare von Folgen des Podcasts #\{id\} erstellen und löschen. |
{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}

Some files were not shown because too many files have changed in this diff Show more