docs(init): create documentation website using vitepress

- rename podlibre to adaures
- rename castopod-host to castopod
- simplify README and redirect to docs site
- move INSTALL and UPDATE docs
- add new gitlabci pipeline to deploy docs
- upgrade node to v16 in Dockerfile
This commit is contained in:
Yassine Doghri 2022-02-19 16:06:11 +00:00
commit fa5b5f51a4
327 changed files with 5619 additions and 1445 deletions

View file

@ -1,10 +1,10 @@
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.117.1/containers/docker-existing-dockerfile
{
"name": "Castopod Host dev",
"name": "Castopod dev",
"dockerComposeFile": ["../docker-compose.yml", "./docker-compose.yml"],
"service": "app",
"workspaceFolder": "/castopod-host",
"workspaceFolder": "/castopod",
"postCreateCommand": "composer install && npm install && npm run build:static",
"postStartCommand": "crontab ./crontab && cron && php spark serve --host 0.0.0.0",
"postAttachCommand": "crontab ./crontab && service cron reload",

View file

@ -4,7 +4,7 @@ services:
volumes:
# Mounts the project folder to '/workspace'. While this file is in .devcontainer,
# mounts are relative to the first file in the list, which is a level up.
- .:/castopod-host:cached
- .:/castopod:cached
# Overrides default command so things don't shut down after the process ends.
command: /bin/sh -c "while sleep 1000; do :; done"

View file

@ -2,7 +2,7 @@
# Example Environment Configuration file
#
# This file can be used as a starting point for
# your Castopod Host instance settings.
# your Castopod instance settings.
#
# For manual configuration:
# - copy this file's contents to a file named `.env`

8
.gitignore vendored
View file

@ -173,7 +173,7 @@ mariadb
phpmyadmin
sessions
# Castopod Host bundle & packages
castopod-host/
castopod-host-*.zip
castopod-host-*.tar.gz
# Castopod bundle & packages
castopod/
castopod-*.zip
castopod-*.tar.gz

View file

@ -1,10 +1,11 @@
image: code.podlibre.org:5050/podlibre/castopod-host:latest
image: code.castopod.org:5050/ad-aures/castopod:latest
stages:
- prepare
- quality
- bundle
- release
- deploy
php-dependencies:
stage: prepare
@ -76,15 +77,15 @@ bundle:
# make scripts/bundle.sh executable
- chmod +x ./scripts/bundle.sh
# bundle castopod-host with commit ref as version
# bundle castopod with commit ref as version
- ./scripts/bundle.sh ${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}
dependencies:
- php-dependencies
- js-dependencies
artifacts:
name: "castopod-host-${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}"
name: "castopod-${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}"
paths:
- castopod-host
- castopod
except:
- main
- beta
@ -113,3 +114,12 @@ release:
- main
- beta
- alpha
documentation:
stage: deploy
trigger:
include: docs/.gitlab-ci.yml
strategy: depend
only:
changes:
- docs/**/*

View file

@ -0,0 +1,17 @@
### Before submitting an issue
1. **Use the issue search** — check if the issue has already been
reported.
2. **Check if the issue has been fixed** — try to reproduce it using the
latest release.
3. **Isolate the problem** — ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
4. **Select an issue template** — choose a template from `bug` or
`feature-request` and fill out the info you deem necessary. The more context
we get, the easier it is to implement the feature or fix the bug you report.
Check out the [CONTRIBUTING manual](../../CONTRIBUTING.md) for more info.

View file

@ -1,8 +1,14 @@
{
"branches": [
"main",
{ "name": "alpha", "prerelease": true },
{ "name": "beta", "prerelease": true }
{
"name": "alpha",
"prerelease": true
},
{
"name": "beta",
"prerelease": true
}
],
"plugins": [
"@semantic-release/commit-analyzer",
@ -30,15 +36,15 @@
[
"@semantic-release/gitlab",
{
"gitlabUrl": "https://code.podlibre.org/",
"gitlabUrl": "https://code.castopod.org/",
"assets": [
{
"path": "castopod-host-*.zip",
"label": "Castopod Host Package (zip)"
"path": "castopod-*.zip",
"label": "Castopod Package (zip)"
},
{
"path": "castopod-host-*.tar.gz",
"label": "Castopod Host Package (tar.gz)"
"path": "castopod-*.tar.gz",
"label": "Castopod Package (tar.gz)"
}
]
}

View file

@ -1,4 +1,4 @@
# rsync filter rules to copy required files for Castopod Host's bundle
# rsync filter rules to copy required files for Castopod's bundle
- app/Views/_assets/
+ app/***
@ -10,6 +10,4 @@
+ .env.example
+ LICENSE.md
+ README.md
+ INSTALL.md
+ UPDATE.md
- **

View file

@ -1,4 +1,4 @@
# Authors
- [Benjamin Bellamy](https://code.podlibre.org/benjamin) <ben@podlibre.org>
- [Yassine Doghri](https://code.podlibre.org/yassine) <yassine@podlibre.org>
- [Benjamin Bellamy](https://code.castopod.org/benjamin) <ben@castopod.org>
- [Yassine Doghri](https://code.castopod.org/yassine) <yassine@castopod.org>

View file

@ -1,103 +1,103 @@
# [1.0.0-beta.8](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2022-02-10)
# [1.0.0-beta.8](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2022-02-10)
### Features
- **podcast-form:** add new_feed_url field to set an url when changing domain or
host
([e7eec48](https://code.podlibre.org/podlibre/castopod-host/commit/e7eec48e7bc06a9aa907db01ed3e5b536e7dd8be))
([e7eec48](https://code.castopod.org/ad-aures/castopod/commit/e7eec48e7bc06a9aa907db01ed3e5b536e7dd8be))
# [1.0.0-beta.7](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2022-02-05)
# [1.0.0-beta.7](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2022-02-05)
### Bug Fixes
- **activitypub:** allow cors on get requests for routes exposing acitivitypub
objects
([2f24809](https://code.podlibre.org/podlibre/castopod-host/commit/2f2480998f9abb34f02ab186c65d462a74b4e640))
([2f24809](https://code.castopod.org/ad-aures/castopod/commit/2f2480998f9abb34f02ab186c65d462a74b4e640))
- **fediverse:** set model instances as non shared to prevent overlapping
([91128fa](https://code.podlibre.org/podlibre/castopod-host/commit/91128fad7a68e1f4e5acacba90b6899288699e61))
([91128fa](https://code.castopod.org/ad-aures/castopod/commit/91128fad7a68e1f4e5acacba90b6899288699e61))
- **htaccess:** add ? after index.php in RewriteRule
([d9d139e](https://code.podlibre.org/podlibre/castopod-host/commit/d9d139eefa03c28d1a064b3b32c9036193497e57)),
closes [#152](https://code.podlibre.org/podlibre/castopod-host/issues/152)
([d9d139e](https://code.castopod.org/ad-aures/castopod/commit/d9d139eefa03c28d1a064b3b32c9036193497e57)),
closes [#152](https://code.castopod.org/ad-aures/castopod/issues/152)
### Features
- **home:** sort podcasts by recent activity + add dropdown menu to choose
between sorting options
([7b89da6](https://code.podlibre.org/podlibre/castopod-host/commit/7b89da6106c150708782d39ed2742fe416c41e89)),
closes [#164](https://code.podlibre.org/podlibre/castopod-host/issues/164)
([7b89da6](https://code.castopod.org/ad-aures/castopod/commit/7b89da6106c150708782d39ed2742fe416c41e89)),
closes [#164](https://code.castopod.org/ad-aures/castopod/issues/164)
# [1.0.0-beta.6](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2022-02-03)
# [1.0.0-beta.6](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2022-02-03)
### Bug Fixes
- **activitypub:** add conditions for possibly missing actor properties + add
user-agent to requests
([8fbf948](https://code.podlibre.org/podlibre/castopod-host/commit/8fbf948fbba22ffd33966a1b2ccd42e8f7c1f8a2))
([8fbf948](https://code.castopod.org/ad-aures/castopod/commit/8fbf948fbba22ffd33966a1b2ccd42e8f7c1f8a2))
- **activitypub:** add target actor id to like / announce activities to send
directly to note's actor
([962dd30](https://code.podlibre.org/podlibre/castopod-host/commit/962dd305f5d3f6eadc68f400e0e8f953827fe20d))
([962dd30](https://code.castopod.org/ad-aures/castopod/commit/962dd305f5d3f6eadc68f400e0e8f953827fe20d))
- **activitypub:** add target_actor_id for create activity to broadcast post
reply
([0128a21](https://code.podlibre.org/podlibre/castopod-host/commit/0128a21ec55dcc0a2fbf4081dadb4c4737735ba1))
([0128a21](https://code.castopod.org/ad-aures/castopod/commit/0128a21ec55dcc0a2fbf4081dadb4c4737735ba1))
- **http-signature:** update SIGNATURE_PATTERN allowing signature keys to be
sent in any order
([b7f285e](https://code.podlibre.org/podlibre/castopod-host/commit/b7f285e4e24247fedb94f030356fa6f291f525cc))
([b7f285e](https://code.castopod.org/ad-aures/castopod/commit/b7f285e4e24247fedb94f030356fa6f291f525cc))
- **install:** set message block on forms to show error messages
([3a0a20d](https://code.podlibre.org/podlibre/castopod-host/commit/3a0a20d59cdae7f166325efb750eaa6e9800ba6e)),
closes [#157](https://code.podlibre.org/podlibre/castopod-host/issues/157)
([3a0a20d](https://code.castopod.org/ad-aures/castopod/commit/3a0a20d59cdae7f166325efb750eaa6e9800ba6e)),
closes [#157](https://code.castopod.org/ad-aures/castopod/issues/157)
- **markdown-editor:** remove unnecessary buttons for podcast and episode
editors + add extensions
([9c4f60e](https://code.podlibre.org/podlibre/castopod-host/commit/9c4f60e00bcbd4f784f12d2a6fed357ad402ee2e))
([9c4f60e](https://code.castopod.org/ad-aures/castopod/commit/9c4f60e00bcbd4f784f12d2a6fed357ad402ee2e))
- **podcast-activity:** check if transcript and chapters are set before
including them in audio
([5855a25](https://code.podlibre.org/podlibre/castopod-host/commit/5855a250936f91641efef77650890a18d8e9917f))
([5855a25](https://code.castopod.org/ad-aures/castopod/commit/5855a250936f91641efef77650890a18d8e9917f))
- **podcast:** use markdown description value for editor + set prose class to
about description
([f304d97](https://code.podlibre.org/podlibre/castopod-host/commit/f304d97b14e0ef383509cb3bba50beb55bf701ba)),
closes [#156](https://code.podlibre.org/podlibre/castopod-host/issues/156)
([f304d97](https://code.castopod.org/ad-aures/castopod/commit/f304d97b14e0ef383509cb3bba50beb55bf701ba)),
closes [#156](https://code.castopod.org/ad-aures/castopod/issues/156)
# [1.0.0-beta.5](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2022-01-31)
# [1.0.0-beta.5](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2022-01-31)
### Bug Fixes
- **analytics:** set initial value for duration and bandwidth
([ee50539](https://code.podlibre.org/podlibre/castopod-host/commit/ee5053959154b1a2e5fbe4b43162968425206a26))
([ee50539](https://code.castopod.org/ad-aures/castopod/commit/ee5053959154b1a2e5fbe4b43162968425206a26))
# [1.0.0-beta.4](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2022-01-29)
# [1.0.0-beta.4](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2022-01-29)
### Bug Fixes
- **housekeeping:** replace the use of GLOB_BRACE with looping over file
extensions
([42d92d0](https://code.podlibre.org/podlibre/castopod-host/commit/42d92d0c8dfe0c567c28f5bfdda129890fa4c2ec)),
closes [#154](https://code.podlibre.org/podlibre/castopod-host/issues/154)
([42d92d0](https://code.castopod.org/ad-aures/castopod/commit/42d92d0c8dfe0c567c28f5bfdda129890fa4c2ec)),
closes [#154](https://code.castopod.org/ad-aures/castopod/issues/154)
- **housekeeping:** set default sizes value + ignore illegal IFD size error to
proceed with script
([f21ca57](https://code.podlibre.org/podlibre/castopod-host/commit/f21ca57603cfa503699b7e09a155e18d876d65fe))
([f21ca57](https://code.castopod.org/ad-aures/castopod/commit/f21ca57603cfa503699b7e09a155e18d876d65fe))
### Features
- **housekeeping:** add clear_cache option to flush redis or files cache
([99bfac0](https://code.podlibre.org/podlibre/castopod-host/commit/99bfac0b428a4bc6fe8bfd10a355dfd93f42ba5c))
([99bfac0](https://code.castopod.org/ad-aures/castopod/commit/99bfac0b428a4bc6fe8bfd10a355dfd93f42ba5c))
# [1.0.0-beta.3](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2022-01-28)
# [1.0.0-beta.3](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2022-01-28)
### Bug Fixes
- revert to beta.1's codeigniter4 version
([e831411](https://code.podlibre.org/podlibre/castopod-host/commit/e83141127080ccde44987195db46ba97fd6cc2ca))
([e831411](https://code.castopod.org/ad-aures/castopod/commit/e83141127080ccde44987195db46ba97fd6cc2ca))
# [1.0.0-beta.2](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2022-01-28)
# [1.0.0-beta.2](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2022-01-28)
### Bug Fixes
- **migrations:** ignore invalid utf8 chars for media files metadata + update
transcript parser
([45e8f99](https://code.podlibre.org/podlibre/castopod-host/commit/45e8f99e753cc02ec105e6f4d7fe026a205724f8))
([45e8f99](https://code.castopod.org/ad-aures/castopod/commit/45e8f99e753cc02ec105e6f4d7fe026a205724f8))
- **video-clips:** set audio codec to aac, fixing audio issue on twitter
([3c22c68](https://code.podlibre.org/podlibre/castopod-host/commit/3c22c68ee81f77bd7fcf7e2739ee6af016407843))
([3c22c68](https://code.castopod.org/ad-aures/castopod/commit/3c22c68ee81f77bd7fcf7e2739ee6af016407843))
- **video-clips:** set longer podcast and episode lengths for squared format
([c030113](https://code.podlibre.org/podlibre/castopod-host/commit/c0301134c2048dc29eb2b995e4d5c22c49444100))
([c030113](https://code.castopod.org/ad-aures/castopod/commit/c0301134c2048dc29eb2b995e4d5c22c49444100))
# 1.0.0-beta.1 (2022-01-23)
@ -105,1589 +105,1589 @@
- **a11y:** replace active tab color to contrast with background on podcast and
episode pages
([f3785e1](https://code.podlibre.org/podlibre/castopod-host/commit/f3785e140147d085a2fb6a62ded87cdfe360f442))
([f3785e1](https://code.castopod.org/ad-aures/castopod/commit/f3785e140147d085a2fb6a62ded87cdfe360f442))
- **activity-pub:** cache issues when navigating to activity stream urls
([7bcbfb3](https://code.podlibre.org/podlibre/castopod-host/commit/7bcbfb32f7cca08d111be46c7f1640e372d4a4b0))
([7bcbfb3](https://code.castopod.org/ad-aures/castopod/commit/7bcbfb32f7cca08d111be46c7f1640e372d4a4b0))
- **activity-pub:** get database records using new model instances
([92536dd](https://code.podlibre.org/podlibre/castopod-host/commit/92536ddb3812214a9c5682b92e547e5c1998a5d7))
([92536dd](https://code.castopod.org/ad-aures/castopod/commit/92536ddb3812214a9c5682b92e547e5c1998a5d7))
- **activitypub:** set created_by to null for reblog if no user + update episode
oembed data
([209dfbd](https://code.podlibre.org/podlibre/castopod-host/commit/209dfbd134e1a2cc02e7c24c158d786fa4dda61d))
([209dfbd](https://code.castopod.org/ad-aures/castopod/commit/209dfbd134e1a2cc02e7c24c158d786fa4dda61d))
- add admin-audio-player to vite config to have admin player show up
([93cb9b2](https://code.podlibre.org/podlibre/castopod-host/commit/93cb9b24701c09b92820204a67c1fc1b3c044708))
([93cb9b2](https://code.castopod.org/ad-aures/castopod/commit/93cb9b24701c09b92820204a67c1fc1b3c044708))
- add application/octet-stream mimetype to mp3 and m4a extensions to prevent
ext_in error
([339bef8](https://code.podlibre.org/podlibre/castopod-host/commit/339bef878e54983d86e91e6ff7a931a843d321b3)),
closes [#145](https://code.podlibre.org/podlibre/castopod-host/issues/145)
([339bef8](https://code.castopod.org/ad-aures/castopod/commit/339bef878e54983d86e91e6ff7a931a843d321b3)),
closes [#145](https://code.castopod.org/ad-aures/castopod/issues/145)
- add category_label component to include parent category in about podcast page
([74e7d68](https://code.podlibre.org/podlibre/castopod-host/commit/74e7d68ac834885c4b89ee6e7d60db2157165799))
([74e7d68](https://code.castopod.org/ad-aures/castopod/commit/74e7d68ac834885c4b89ee6e7d60db2157165799))
- add head request to analytics_hit route
([f0a2f0b](https://code.podlibre.org/podlibre/castopod-host/commit/f0a2f0bea491ca91976b351bb79837e95c9d094b))
([f0a2f0b](https://code.castopod.org/ad-aures/castopod/commit/f0a2f0bea491ca91976b351bb79837e95c9d094b))
- add missing explicit badge for podcasts and episodes
([cdf9f9d](https://code.podlibre.org/podlibre/castopod-host/commit/cdf9f9d53f2597f19455cb65c51da4677bb99327))
([cdf9f9d](https://code.castopod.org/ad-aures/castopod/commit/cdf9f9d53f2597f19455cb65c51da4677bb99327))
- add open graph size for podcast images to replace the inadequate large format
([33aae1f](https://code.podlibre.org/podlibre/castopod-host/commit/33aae1f7934e4962116e94e477dbf48e24971f5f))
([33aae1f](https://code.castopod.org/ad-aures/castopod/commit/33aae1f7934e4962116e94e477dbf48e24971f5f))
- add public/media folder to castopod bundle
([8053d35](https://code.podlibre.org/podlibre/castopod-host/commit/8053d3521b481872711dabaaf265d08b9bfbaa87)),
closes [#52](https://code.podlibre.org/podlibre/castopod-host/issues/52)
([8053d35](https://code.castopod.org/ad-aures/castopod/commit/8053d3521b481872711dabaaf265d08b9bfbaa87)),
closes [#52](https://code.castopod.org/ad-aures/castopod/issues/52)
- add translation key for audio-clipper trim labels
([db191ac](https://code.podlibre.org/podlibre/castopod-host/commit/db191ac31bd16bad2a72afdb8b25c685adf86a6e))
([db191ac](https://code.castopod.org/ad-aures/castopod/commit/db191ac31bd16bad2a72afdb8b25c685adf86a6e))
- add where condition to get episode count without deleted episodes
([7661734](https://code.podlibre.org/podlibre/castopod-host/commit/7661734ed296654630f3668132671117519145dd)),
closes [#67](https://code.podlibre.org/podlibre/castopod-host/issues/67)
([7661734](https://code.castopod.org/ad-aures/castopod/commit/7661734ed296654630f3668132671117519145dd)),
closes [#67](https://code.castopod.org/ad-aures/castopod/issues/67)
- **admin:** save block and lock switches
([b66c0af](https://code.podlibre.org/podlibre/castopod-host/commit/b66c0afc8fab2e338402a9a4f8105e5f5459e208))
([b66c0af](https://code.castopod.org/ad-aures/castopod/commit/b66c0afc8fab2e338402a9a4f8105e5f5459e208))
- **analytics:** redirect to mp3 file even when referer was not set
([9fc388d](https://code.podlibre.org/podlibre/castopod-host/commit/9fc388d154f29c335dedcd624abe8c1751762c07))
([9fc388d](https://code.castopod.org/ad-aures/castopod/commit/9fc388d154f29c335dedcd624abe8c1751762c07))
- **analytics:** remove charts empty values + remove useless language cache
([1678794](https://code.podlibre.org/podlibre/castopod-host/commit/16787941539ba4014281a366789ea896a9cd2afc))
([1678794](https://code.castopod.org/ad-aures/castopod/commit/16787941539ba4014281a366789ea896a9cd2afc))
- **analytics:** set duration field to precise decimal as episode's audio file
duration
([d772685](https://code.podlibre.org/podlibre/castopod-host/commit/d77268540569b2be9d91d5e09aefb3ff5ac2b071))
([d772685](https://code.castopod.org/ad-aures/castopod/commit/d77268540569b2be9d91d5e09aefb3ff5ac2b071))
- **analytics:** update migrations to set decimal precision for latitude and
longitude
([714d6b5](https://code.podlibre.org/podlibre/castopod-host/commit/714d6b5d4950e52cf1c3170bb59954f98ffd48bd))
([714d6b5](https://code.castopod.org/ad-aures/castopod/commit/714d6b5d4950e52cf1c3170bb59954f98ffd48bd))
- **analytics:** update service management so that it works with new OPAWG slug
values
([7fe9d42](https://code.podlibre.org/podlibre/castopod-host/commit/7fe9d42500ade2c6fa3ff4365b4affc475af0e51))
([7fe9d42](https://code.castopod.org/ad-aures/castopod/commit/7fe9d42500ade2c6fa3ff4365b4affc475af0e51))
- **audio-clipper:** add mouse position offset when stretching clip to prevent
content from jumping
([602654b](https://code.podlibre.org/podlibre/castopod-host/commit/602654b99b33ee8c29da080058a0aaea976cd484))
([602654b](https://code.castopod.org/ad-aures/castopod/commit/602654b99b33ee8c29da080058a0aaea976cd484))
- **audio-clipper:** show audio playing progress + put waveform behind audio
clipper
([01a09dc](https://code.podlibre.org/podlibre/castopod-host/commit/01a09dc447b81c5412ceb45d6706a867939fd4dd))
([01a09dc](https://code.castopod.org/ad-aures/castopod/commit/01a09dc447b81c5412ceb45d6706a867939fd4dd))
- **avatar:** use default avatar when no avatar url has been set
([9d23c7e](https://code.podlibre.org/podlibre/castopod-host/commit/9d23c7e7e142c6cf1a1418e37e41d711064593c4)),
closes [#111](https://code.podlibre.org/podlibre/castopod-host/issues/111)
([9d23c7e](https://code.castopod.org/ad-aures/castopod/commit/9d23c7e7e142c6cf1a1418e37e41d711064593c4)),
closes [#111](https://code.castopod.org/ad-aures/castopod/issues/111)
- **bundle:** include modules and themes when copying files with rsync
([cd5bb88](https://code.podlibre.org/podlibre/castopod-host/commit/cd5bb8835c6e259408a8c13a2196a347e161da83))
([cd5bb88](https://code.castopod.org/ad-aures/castopod/commit/cd5bb8835c6e259408a8c13a2196a347e161da83))
- **bundle:** update vite input files path + add `set -e` in bash scripts to
fail if command fails
([0ee53c7](https://code.podlibre.org/podlibre/castopod-host/commit/0ee53c71ffadb8a6ddb1febd9f912bc99f5f7a0b))
([0ee53c7](https://code.castopod.org/ad-aures/castopod/commit/0ee53c71ffadb8a6ddb1febd9f912bc99f5f7a0b))
- **cache:** add locale for podcast and episode pages + clear some persisting
cache in models
([9cec8a8](https://code.podlibre.org/podlibre/castopod-host/commit/9cec8a81ccbb7239402fe6633dbc31979272302a)),
closes [#42](https://code.podlibre.org/podlibre/castopod-host/issues/42)
[#61](https://code.podlibre.org/podlibre/castopod-host/issues/61)
([9cec8a8](https://code.castopod.org/ad-aures/castopod/commit/9cec8a81ccbb7239402fe6633dbc31979272302a)),
closes [#42](https://code.castopod.org/ad-aures/castopod/issues/42)
[#61](https://code.castopod.org/ad-aures/castopod/issues/61)
- **cache:** return a non cached view when connected
([e2e7358](https://code.podlibre.org/podlibre/castopod-host/commit/e2e735815d805a48eed2ea3288d060d0ddb253a3))
([e2e7358](https://code.castopod.org/ad-aures/castopod/commit/e2e735815d805a48eed2ea3288d060d0ddb253a3))
- **cache:** suffix cache names with authenticated for credits, map and pages
([418a70b](https://code.podlibre.org/podlibre/castopod-host/commit/418a70b2a670d8ba0ab6c15fa5faa41f6be55e53))
([418a70b](https://code.castopod.org/ad-aures/castopod/commit/418a70b2a670d8ba0ab6c15fa5faa41f6be55e53))
- cast actor_id to pass as int to set_interact_as_actor() function
([56a8e5d](https://code.podlibre.org/podlibre/castopod-host/commit/56a8e5d7dd615322aeb007e730801c65d0b02e5c))
([56a8e5d](https://code.castopod.org/ad-aures/castopod/commit/56a8e5d7dd615322aeb007e730801c65d0b02e5c))
- **category:** remove uncategorized option to enforce users in choosing a
category
([8c64f25](https://code.podlibre.org/podlibre/castopod-host/commit/8c64f25a0e72fec03d25544797d32623b2276fce))
([8c64f25](https://code.castopod.org/ad-aures/castopod/commit/8c64f25a0e72fec03d25544797d32623b2276fce))
- check for database connection and podcasts table existence before redirecting
to install
([eb74e81](https://code.podlibre.org/podlibre/castopod-host/commit/eb74e81c3d93581e310b391cd029e62a0d690a8a))
([eb74e81](https://code.castopod.org/ad-aures/castopod/commit/eb74e81c3d93581e310b391cd029e62a0d690a8a))
- check that additional files are valid when creating episode
([eac5bc8](https://code.podlibre.org/podlibre/castopod-host/commit/eac5bc876de125e1fe08d1b89f767a04fc0fbfb6))
([eac5bc8](https://code.castopod.org/ad-aures/castopod/commit/eac5bc876de125e1fe08d1b89f767a04fc0fbfb6))
- check that note has a preview_card_id before displaying it
([acb8b3a](https://code.podlibre.org/podlibre/castopod-host/commit/acb8b3a40172ccb184ffe544760601d756692e6c)),
closes [#114](https://code.podlibre.org/podlibre/castopod-host/issues/114)
([acb8b3a](https://code.castopod.org/ad-aures/castopod/commit/acb8b3a40172ccb184ffe544760601d756692e6c)),
closes [#114](https://code.castopod.org/ad-aures/castopod/issues/114)
- clear cache when deleting podcast banner
([99bb40b](https://code.podlibre.org/podlibre/castopod-host/commit/99bb40b8bc17b8ee2cd8468a82e46ea280c92cb6))
([99bb40b](https://code.castopod.org/ad-aures/castopod/commit/99bb40b8bc17b8ee2cd8468a82e46ea280c92cb6))
- comment all cache clean after page update to prevent analytics cache deletion
([e6197a4](https://code.podlibre.org/podlibre/castopod-host/commit/e6197a4972a3cce3d67dd7972bb54f8720b8e5b7))
([e6197a4](https://code.castopod.org/ad-aures/castopod/commit/e6197a4972a3cce3d67dd7972bb54f8720b8e5b7))
- **comments:** add comment view partials for public pages
([fcecbe1](https://code.podlibre.org/podlibre/castopod-host/commit/fcecbe1c68b0d28d19454fba65caf3ab769fbc75))
([fcecbe1](https://code.castopod.org/ad-aures/castopod/commit/fcecbe1c68b0d28d19454fba65caf3ab769fbc75))
- correct chart data
([4d3e9c8](https://code.podlibre.org/podlibre/castopod-host/commit/4d3e9c8c02cdc882e9fe1c29625695b6f83c820a))
([4d3e9c8](https://code.castopod.org/ad-aures/castopod/commit/4d3e9c8c02cdc882e9fe1c29625695b6f83c820a))
- correct percona compatibility issue
([e53f819](https://code.podlibre.org/podlibre/castopod-host/commit/e53f819264b2d6902996f11ffcbb7c99295a90ef))
([e53f819](https://code.castopod.org/ad-aures/castopod/commit/e53f819264b2d6902996f11ffcbb7c99295a90ef))
- correct php-fpm issues
([1ef55d7](https://code.podlibre.org/podlibre/castopod-host/commit/1ef55d7315bb44abe05f02ec8a84b6b6a557a9a0))
([1ef55d7](https://code.castopod.org/ad-aures/castopod/commit/1ef55d7315bb44abe05f02ec8a84b6b6a557a9a0))
- correct referrer bug
([ed69b2f](https://code.podlibre.org/podlibre/castopod-host/commit/ed69b2f5004ed1cd18bac824c08a0df01f5d2637))
([ed69b2f](https://code.castopod.org/ad-aures/castopod/commit/ed69b2f5004ed1cd18bac824c08a0df01f5d2637))
- correction for servers with low int precision
([31b7828](https://code.podlibre.org/podlibre/castopod-host/commit/31b7828e77519ef43e9bcfcbdf6c21712f97a571))
([31b7828](https://code.castopod.org/ad-aures/castopod/commit/31b7828e77519ef43e9bcfcbdf6c21712f97a571))
- **cors:** add preflight option routes for episode, podcast and status objects
([a281abf](https://code.podlibre.org/podlibre/castopod-host/commit/a281abfda475388a07943c169dab460cc2d4f944))
([a281abf](https://code.castopod.org/ad-aures/castopod/commit/a281abfda475388a07943c169dab460cc2d4f944))
- declare typed properties in PHPDoc for php<7.4
([14dd44d](https://code.podlibre.org/podlibre/castopod-host/commit/14dd44d03d6db0d9ae4198db8e65c92a0e45cb31)),
closes [#23](https://code.podlibre.org/podlibre/castopod-host/issues/23)
([14dd44d](https://code.castopod.org/ad-aures/castopod/commit/14dd44d03d6db0d9ae4198db8e65c92a0e45cb31)),
closes [#23](https://code.castopod.org/ad-aures/castopod/issues/23)
- define podcast_id and platform_slug as foreign keys in podcasts_plaforms table
([6e9451a](https://code.podlibre.org/podlibre/castopod-host/commit/6e9451a1103b43750fa70ad576de36af25ca29cb))
([6e9451a](https://code.castopod.org/ad-aures/castopod/commit/6e9451a1103b43750fa70ad576de36af25ca29cb))
- define podcastNamespaceLink value
([0d744d2](https://code.podlibre.org/podlibre/castopod-host/commit/0d744d212df0d070ceea185068eaf2746e1ccd48))
([0d744d2](https://code.castopod.org/ad-aures/castopod/commit/0d744d212df0d070ceea185068eaf2746e1ccd48))
- **embeddable-player:** enable any ancestor when X-Frame-Options is set on
server
([44a4962](https://code.podlibre.org/podlibre/castopod-host/commit/44a4962e0b7e3ed87e9914b4e7792a0d52330ff8))
([44a4962](https://code.castopod.org/ad-aures/castopod/commit/44a4962e0b7e3ed87e9914b4e7792a0d52330ff8))
- **embed:** open embedded player's links in new tab
([4aa73d7](https://code.podlibre.org/podlibre/castopod-host/commit/4aa73d71e3b8c0a6c3f75f4d1d45c4d693aba64c))
([4aa73d7](https://code.castopod.org/ad-aures/castopod/commit/4aa73d71e3b8c0a6c3f75f4d1d45c4d693aba64c))
- **episode-form:** show warning to set `memory_limit`, `upload_max_filesize` &
`post_max_size`
([3b3c218](https://code.podlibre.org/podlibre/castopod-host/commit/3b3c218b9c868e9f12c54d7670e69d84c9ee79c0)),
closes [#5](https://code.podlibre.org/podlibre/castopod-host/issues/5)
[#86](https://code.podlibre.org/podlibre/castopod-host/issues/86)
([3b3c218](https://code.castopod.org/ad-aures/castopod/commit/3b3c218b9c868e9f12c54d7670e69d84c9ee79c0)),
closes [#5](https://code.castopod.org/ad-aures/castopod/issues/5)
[#86](https://code.castopod.org/ad-aures/castopod/issues/86)
- **episodeCount:** add missing brackets to French language file
([c1b4112](https://code.podlibre.org/podlibre/castopod-host/commit/c1b411265ad9b06e95a8b097ecf73445b88dcb45))
([c1b4112](https://code.castopod.org/ad-aures/castopod/commit/c1b411265ad9b06e95a8b097ecf73445b88dcb45))
- **episode:** replace guid's empty string value to null
([441052a](https://code.podlibre.org/podlibre/castopod-host/commit/441052af8d99e6e317edefd1e58ad71799357088))
([441052a](https://code.castopod.org/ad-aures/castopod/commit/441052af8d99e6e317edefd1e58ad71799357088))
- **episodes-page:** handle defaultQuery being null when no podcast episodes
([15183b7](https://code.podlibre.org/podlibre/castopod-host/commit/15183b7eab57dac007bcdfa8c3651239de1ae05a)),
closes [#100](https://code.podlibre.org/podlibre/castopod-host/issues/100)
([15183b7](https://code.castopod.org/ad-aures/castopod/commit/15183b7eab57dac007bcdfa8c3651239de1ae05a)),
closes [#100](https://code.castopod.org/ad-aures/castopod/issues/100)
- **episodes-table:** set descriptions to be not null
([6774ec1](https://code.podlibre.org/podlibre/castopod-host/commit/6774ec10fa78527be6b7548ca1dc34ad0ada090c))
([6774ec1](https://code.castopod.org/ad-aures/castopod/commit/6774ec10fa78527be6b7548ca1dc34ad0ada090c))
- **episodes:** add publication status + set publication date to null when none
has been set
([d882981](https://code.podlibre.org/podlibre/castopod-host/commit/d882981b3a86c81921ce6b07d4cf61fc13983689)),
closes [#70](https://code.podlibre.org/podlibre/castopod-host/issues/70)
([d882981](https://code.castopod.org/ad-aures/castopod/commit/d882981b3a86c81921ce6b07d4cf61fc13983689)),
closes [#70](https://code.castopod.org/ad-aures/castopod/issues/70)
- escape generated feed tag values and remove new lines from public pages meta
description
([6238a43](https://code.podlibre.org/podlibre/castopod-host/commit/6238a43863210afe8988ad7cf251e6bfc6c8557c)),
closes [#57](https://code.podlibre.org/podlibre/castopod-host/issues/57)
[#46](https://code.podlibre.org/podlibre/castopod-host/issues/46)
([6238a43](https://code.castopod.org/ad-aures/castopod/commit/6238a43863210afe8988ad7cf251e6bfc6c8557c)),
closes [#57](https://code.castopod.org/ad-aures/castopod/issues/57)
[#46](https://code.castopod.org/ad-aures/castopod/issues/46)
- expire default query cache upon scheduled episode publication
([b72e7c8](https://code.podlibre.org/podlibre/castopod-host/commit/b72e7c8691c887e41107baea0a4d50a39eaf8c8b)),
closes [#81](https://code.podlibre.org/podlibre/castopod-host/issues/81)
([b72e7c8](https://code.castopod.org/ad-aures/castopod/commit/b72e7c8691c887e41107baea0a4d50a39eaf8c8b)),
closes [#81](https://code.castopod.org/ad-aures/castopod/issues/81)
- fix layout bugs in admin and update translation files
([a834171](https://code.podlibre.org/podlibre/castopod-host/commit/a83417180cf61cdfadc5509b0aaa2fdb66592be3)),
closes [#40](https://code.podlibre.org/podlibre/castopod-host/issues/40)
([a834171](https://code.castopod.org/ad-aures/castopod/commit/a83417180cf61cdfadc5509b0aaa2fdb66592be3)),
closes [#40](https://code.castopod.org/ad-aures/castopod/issues/40)
- **follow:** add missing helpers to Actor controller
([ee53a73](https://code.podlibre.org/podlibre/castopod-host/commit/ee53a732dc12ebbf5706e14969749a12cfd9d559))
([ee53a73](https://code.castopod.org/ad-aures/castopod/commit/ee53a732dc12ebbf5706e14969749a12cfd9d559))
- handle HEAD requests on podcast_feed route
([74b2640](https://code.podlibre.org/podlibre/castopod-host/commit/74b2640f2a25c4cd6fd8835fc492c2a6893d4950)),
closes [#79](https://code.podlibre.org/podlibre/castopod-host/issues/79)
([74b2640](https://code.castopod.org/ad-aures/castopod/commit/74b2640f2a25c4cd6fd8835fc492c2a6893d4950)),
closes [#79](https://code.castopod.org/ad-aures/castopod/issues/79)
- **images:** set default mimetype if none is specified when getting size info
([6e4acc6](https://code.podlibre.org/podlibre/castopod-host/commit/6e4acc64ad256178cee7905402b48bafcd49f84c))
([6e4acc6](https://code.castopod.org/ad-aures/castopod/commit/6e4acc64ad256178cee7905402b48bafcd49f84c))
- **import-with-escaped-characters:** remove \CodeIgniter\HTTP\URI in
download_file, closes
[#103](https://code.podlibre.org/podlibre/castopod-host/issues/103)
([35b5be0](https://code.podlibre.org/podlibre/castopod-host/commit/35b5be095ff54d27acec1610a846ec0cdbdf1d65))
[#103](https://code.castopod.org/ad-aures/castopod/issues/103)
([35b5be0](https://code.castopod.org/ad-aures/castopod/commit/35b5be095ff54d27acec1610a846ec0cdbdf1d65))
- **import:** add extension when downloading file without + truncate slug if too
long
([c5f18bb](https://code.podlibre.org/podlibre/castopod-host/commit/c5f18bb6dc08a758ff735454bbe9cfa45a68c09b))
([c5f18bb](https://code.castopod.org/ad-aures/castopod/commit/c5f18bb6dc08a758ff735454bbe9cfa45a68c09b))
- **import:** add validation for handle field to prevent
Router.invalidParameterType error
([5bf7200](https://code.podlibre.org/podlibre/castopod-host/commit/5bf7200fb390f2447b29f24b495f24483cf7b205)),
closes [#119](https://code.podlibre.org/podlibre/castopod-host/issues/119)
([5bf7200](https://code.castopod.org/ad-aures/castopod/commit/5bf7200fb390f2447b29f24b495f24483cf7b205)),
closes [#119](https://code.castopod.org/ad-aures/castopod/issues/119)
- **import:** cast description's SimpleXMLElement to string
([02d17be](https://code.podlibre.org/podlibre/castopod-host/commit/02d17be4ffe229fc6657207d31eba0543b5f1a4c))
([02d17be](https://code.castopod.org/ad-aures/castopod/commit/02d17be4ffe229fc6657207d31eba0543b5f1a4c))
- **import:** remove query string from files url
([109c4aa](https://code.podlibre.org/podlibre/castopod-host/commit/109c4aa1afb72dd8b99c0302d74a7fef5a38638e))
([109c4aa](https://code.castopod.org/ad-aures/castopod/commit/109c4aa1afb72dd8b99c0302d74a7fef5a38638e))
- **import:** save media files during podcast import + set missing media fields
([a9989d8](https://code.podlibre.org/podlibre/castopod-host/commit/a9989d841a634f8cf6c04df25f40bb1e7d4fcdcc))
([a9989d8](https://code.castopod.org/ad-aures/castopod/commit/a9989d841a634f8cf6c04df25f40bb1e7d4fcdcc))
- **import:** set episode and season numbers to null when not present in item
tag
([3211398](https://code.podlibre.org/podlibre/castopod-host/commit/3211398c78b1b28b76a46427ee07874bbf84a85d))
([3211398](https://code.castopod.org/ad-aures/castopod/commit/3211398c78b1b28b76a46427ee07874bbf84a85d))
- **import:** use <image><url> tag when no <itunes:image> is present
([20e607a](https://code.podlibre.org/podlibre/castopod-host/commit/20e607afb755bc75056041738fa7cbf6723d754c))
([20e607a](https://code.castopod.org/ad-aures/castopod/commit/20e607afb755bc75056041738fa7cbf6723d754c))
- include missing variables on public ui's episode page and remote_actions
([193b373](https://code.podlibre.org/podlibre/castopod-host/commit/193b373bc94a5270acae99b637aa84b6cb2dedfe))
([193b373](https://code.castopod.org/ad-aures/castopod/commit/193b373bc94a5270acae99b637aa84b6cb2dedfe))
- **install:** redirect manually to install wizard on first visit
([2ceaaca](https://code.podlibre.org/podlibre/castopod-host/commit/2ceaaca44f1b82fc64d961e2fb4f4aaeade7e736))
([2ceaaca](https://code.castopod.org/ad-aures/castopod/commit/2ceaaca44f1b82fc64d961e2fb4f4aaeade7e736))
- **install:** redirect to host_url install route on instanceConfig validation
error
([99250b1](https://code.podlibre.org/podlibre/castopod-host/commit/99250b1868657c249a447399c7ebc69e00d43d1a))
([99250b1](https://code.castopod.org/ad-aures/castopod/commit/99250b1868657c249a447399c7ebc69e00d43d1a))
- **install:** redirect to input baseUrl after instance config
([2426af7](https://code.podlibre.org/podlibre/castopod-host/commit/2426af7de8c9d426aaf534ff17b67f71c2e9f374)),
closes [#53](https://code.podlibre.org/podlibre/castopod-host/issues/53)
([2426af7](https://code.castopod.org/ad-aures/castopod/commit/2426af7de8c9d426aaf534ff17b67f71c2e9f374)),
closes [#53](https://code.castopod.org/ad-aures/castopod/issues/53)
- **interact-as:** set actor_id instead of podcast id upon login event
([5dfade7](https://code.podlibre.org/podlibre/castopod-host/commit/5dfade7cf37f339c56d2e577c679b88a1b1d9336)),
closes [#104](https://code.podlibre.org/podlibre/castopod-host/issues/104)
([5dfade7](https://code.castopod.org/ad-aures/castopod/commit/5dfade7cf37f339c56d2e577c679b88a1b1d9336)),
closes [#104](https://code.castopod.org/ad-aures/castopod/issues/104)
- **json-ld:** add missing properties to PodcastSeries object
([e97266c](https://code.podlibre.org/podlibre/castopod-host/commit/e97266c5d4883a10f68b3685ecc0d1942f54d658))
([e97266c](https://code.castopod.org/ad-aures/castopod/commit/e97266c5d4883a10f68b3685ecc0d1942f54d658))
- keep subtitle line breaks when parsing srt file to json
([cfb3da6](https://code.podlibre.org/podlibre/castopod-host/commit/cfb3da6592f2de23cb1a7ac420f19fc77fa338aa))
([cfb3da6](https://code.castopod.org/ad-aures/castopod/commit/cfb3da6592f2de23cb1a7ac420f19fc77fa338aa))
- **layouts:** replace holy-grail layout with tailwind config + widen public
podcast layout
([be5a287](https://code.podlibre.org/podlibre/castopod-host/commit/be5a28787fdb180b64d9bf570120eff7072ab9aa))
([be5a287](https://code.castopod.org/ad-aures/castopod/commit/be5a28787fdb180b64d9bf570120eff7072ab9aa))
- **map:** update episode markers query to discard unpublished episodes
([b3caac4](https://code.podlibre.org/podlibre/castopod-host/commit/b3caac45b12a23e4289d00133d2ad7915d084c44))
([b3caac4](https://code.castopod.org/ad-aures/castopod/commit/b3caac45b12a23e4289d00133d2ad7915d084c44))
- **md-editor:** build new markdown editor with lit +
github/markdown-toolbar-element
([9ec1cb9](https://code.podlibre.org/podlibre/castopod-host/commit/9ec1cb93da6f41124c48b8cf14ee6942e865bede)),
closes [#93](https://code.podlibre.org/podlibre/castopod-host/issues/93)
[#94](https://code.podlibre.org/podlibre/castopod-host/issues/94)
[#120](https://code.podlibre.org/podlibre/castopod-host/issues/120)
([9ec1cb9](https://code.castopod.org/ad-aures/castopod/commit/9ec1cb93da6f41124c48b8cf14ee6942e865bede)),
closes [#93](https://code.castopod.org/ad-aures/castopod/issues/93)
[#94](https://code.castopod.org/ad-aures/castopod/issues/94)
[#120](https://code.castopod.org/ad-aures/castopod/issues/120)
- minor corrections
([13be386](https://code.podlibre.org/podlibre/castopod-host/commit/13be386842e94d9def1f7de4720931d8f6935171))
([13be386](https://code.castopod.org/ad-aures/castopod/commit/13be386842e94d9def1f7de4720931d8f6935171))
- move analytics to helper
([d311917](https://code.podlibre.org/podlibre/castopod-host/commit/d31191732e41aa106234b5ebe6e54ee02f0ce603))
([d311917](https://code.castopod.org/ad-aures/castopod/commit/d31191732e41aa106234b5ebe6e54ee02f0ce603))
- **multiselect:** add missing class names in choices options for purge to work
properly
([719538d](https://code.podlibre.org/podlibre/castopod-host/commit/719538d0ccb28af3c3c5e1a4b6468d4b772fe819))
([719538d](https://code.castopod.org/ad-aures/castopod/commit/719538d0ccb28af3c3c5e1a4b6468d4b772fe819))
- **open-graph:** replace non existant episode description to podcast
description in podcast page
([b02584e](https://code.podlibre.org/podlibre/castopod-host/commit/b02584ee609af1ad1b5680cc28208d113eb0410b))
([b02584e](https://code.castopod.org/ad-aures/castopod/commit/b02584ee609af1ad1b5680cc28208d113eb0410b))
- **package.json:** update destination of postcss generation scripts
([21413f8](https://code.podlibre.org/podlibre/castopod-host/commit/21413f8af3b8a0ac01d8c6f15bcd7a63e524e964))
([21413f8](https://code.castopod.org/ad-aures/castopod/commit/21413f8af3b8a0ac01d8c6f15bcd7a63e524e964))
- **pages:** add locale to page cache
([8f999ce](https://code.podlibre.org/podlibre/castopod-host/commit/8f999ce2f7ee1416c30cf58c84f67b3d11b3f142))
([8f999ce](https://code.castopod.org/ad-aures/castopod/commit/8f999ce2f7ee1416c30cf58c84f67b3d11b3f142))
- **partner:** set correct image URL
([61554be](https://code.podlibre.org/podlibre/castopod-host/commit/61554be12a64d59ab99fab810b1b05632b408f3a))
([61554be](https://code.castopod.org/ad-aures/castopod/commit/61554be12a64d59ab99fab810b1b05632b408f3a))
- pass timezone to relative time component to show the localized time in the UI
([b9db936](https://code.podlibre.org/podlibre/castopod-host/commit/b9db936461d4cb914958bb3256bb910bbd7ba815))
([b9db936](https://code.castopod.org/ad-aures/castopod/commit/b9db936461d4cb914958bb3256bb910bbd7ba815))
- **persons:** prevent overflow of persons list by adding horizontal scroll
([9e8995d](https://code.podlibre.org/podlibre/castopod-host/commit/9e8995dc6e039032cc65f87895cf770f99e8b244))
([9e8995d](https://code.castopod.org/ad-aures/castopod/commit/9e8995dc6e039032cc65f87895cf770f99e8b244))
- **persons:** set person picture as optional for better ux
([7fdea63](https://code.podlibre.org/podlibre/castopod-host/commit/7fdea63de7e572810082c84fff3013af580df58b)),
closes [#125](https://code.podlibre.org/podlibre/castopod-host/issues/125)
([7fdea63](https://code.castopod.org/ad-aures/castopod/commit/7fdea63de7e572810082c84fff3013af580df58b)),
closes [#125](https://code.castopod.org/ad-aures/castopod/issues/125)
- **platforms:** display platform link only when visible is toggled on
([6e503c8](https://code.podlibre.org/podlibre/castopod-host/commit/6e503c8d6182987e48892370623183f871bbd1c1)),
closes [#39](https://code.podlibre.org/podlibre/castopod-host/issues/39)
([6e503c8](https://code.castopod.org/ad-aures/castopod/commit/6e503c8d6182987e48892370623183f871bbd1c1)),
closes [#39](https://code.castopod.org/ad-aures/castopod/issues/39)
- **podcast-import:** move guid attribute declaration for Episode entity to
include slug data
([5d02ae3](https://code.podlibre.org/podlibre/castopod-host/commit/5d02ae39908a9d743627135b372bf981134c4328))
([5d02ae3](https://code.castopod.org/ad-aures/castopod/commit/5d02ae39908a9d743627135b372bf981134c4328))
- **pwa:** add scope to webmanifests to allow installing an app per podcast
([74c683e](https://code.podlibre.org/podlibre/castopod-host/commit/74c683eb44398a84443ec17903c3e002bb5ea9b9))
([74c683e](https://code.castopod.org/ad-aures/castopod/commit/74c683eb44398a84443ec17903c3e002bb5ea9b9))
- **pwa:** set app display as standalone in the webmanifests
([7aa37d2](https://code.podlibre.org/podlibre/castopod-host/commit/7aa37d24ac13a1ee160c01a56b43621d7efcfbbc))
([7aa37d2](https://code.castopod.org/ad-aures/castopod/commit/7aa37d24ac13a1ee160c01a56b43621d7efcfbbc))
- re-order graph values
([35f633b](https://code.podlibre.org/podlibre/castopod-host/commit/35f633b4c71c087d1ddc9bba9e9bbe18de09204f))
([35f633b](https://code.castopod.org/ad-aures/castopod/commit/35f633b4c71c087d1ddc9bba9e9bbe18de09204f))
- redirect to non cached views when authenticated in public views
([482b47b](https://code.podlibre.org/podlibre/castopod-host/commit/482b47ba6bdab7f27fc5704a559567228e07cd14))
([482b47b](https://code.castopod.org/ad-aures/castopod/commit/482b47ba6bdab7f27fc5704a559567228e07cd14))
- **release:** add missing version number to castopod-host package
([8f3e9d9](https://code.podlibre.org/podlibre/castopod-host/commit/8f3e9d90c14545d3f84d4469b26a53db4554b4dc))
([8f3e9d9](https://code.castopod.org/ad-aures/castopod/commit/8f3e9d90c14545d3f84d4469b26a53db4554b4dc))
- remove defer from js script declaration as it is a module
([18ae557](https://code.podlibre.org/podlibre/castopod-host/commit/18ae557e97f1cef775cd1e75fb1fedee7f1c0cc9))
([18ae557](https://code.castopod.org/ad-aures/castopod/commit/18ae557e97f1cef775cd1e75fb1fedee7f1c0cc9))
- remove fixed size from podcast sidebar + rearrange account info + space out
import radio inputs
([776eec6](https://code.podlibre.org/podlibre/castopod-host/commit/776eec6f0d533d6c92ebec16f7a9dbfcde1f41f4))
([776eec6](https://code.castopod.org/ad-aures/castopod/commit/776eec6f0d533d6c92ebec16f7a9dbfcde1f41f4))
- remove required for other_categories field and add podcast_id to latest
podcasts query
([5417be0](https://code.podlibre.org/podlibre/castopod-host/commit/5417be0049288489a19c7b575aa77bd1e2bc0243))
([5417be0](https://code.castopod.org/ad-aures/castopod/commit/5417be0049288489a19c7b575aa77bd1e2bc0243))
- remove required property to persons picture
([c546be3](https://code.podlibre.org/podlibre/castopod-host/commit/c546be385b243014243ae93356006cd126d2f00d)),
closes [#125](https://code.podlibre.org/podlibre/castopod-host/issues/125)
([c546be3](https://code.castopod.org/ad-aures/castopod/commit/c546be385b243014243ae93356006cd126d2f00d)),
closes [#125](https://code.castopod.org/ad-aures/castopod/issues/125)
- rename field status to task_status to get scheduled activities
([4ff82a5](https://code.podlibre.org/podlibre/castopod-host/commit/4ff82a5f0a38dbbc9e272fca7df70ea5a190e334))
([4ff82a5](https://code.castopod.org/ad-aures/castopod/commit/4ff82a5f0a38dbbc9e272fca7df70ea5a190e334))
- rename issue_templates labels
([9f00305](https://code.podlibre.org/podlibre/castopod-host/commit/9f00305844e5a168e89d727fe29892b4ad5e48d6))
([9f00305](https://code.castopod.org/ad-aures/castopod/commit/9f00305844e5a168e89d727fe29892b4ad5e48d6))
- rename MyAccount controller file
([e109df3](https://code.podlibre.org/podlibre/castopod-host/commit/e109df3004a3a98d72de39532e062fff9917f50f)),
closes [#60](https://code.podlibre.org/podlibre/castopod-host/issues/60)
([e109df3](https://code.castopod.org/ad-aures/castopod/commit/e109df3004a3a98d72de39532e062fff9917f50f)),
closes [#60](https://code.castopod.org/ad-aures/castopod/issues/60)
- rename podcast name to podcast handle to clarify field usage
([9dd4c77](https://code.podlibre.org/podlibre/castopod-host/commit/9dd4c7741eb1b7cb5fc214ff674697f3aa986df0)),
closes [#126](https://code.podlibre.org/podlibre/castopod-host/issues/126)
([9dd4c77](https://code.castopod.org/ad-aures/castopod/commit/9dd4c7741eb1b7cb5fc214ff674697f3aa986df0)),
closes [#126](https://code.castopod.org/ad-aures/castopod/issues/126)
- reorder fields as composite primary keys for analytics tables
([9660aa9](https://code.podlibre.org/podlibre/castopod-host/commit/9660aa97c8ffd4fe61f3a388d52b9ac5dd8e1d63))
([9660aa9](https://code.castopod.org/ad-aures/castopod/commit/9660aa97c8ffd4fe61f3a388d52b9ac5dd8e1d63))
- replace getWebEnclosureUrl with getEnclosureWebUrl
([8122cea](https://code.podlibre.org/podlibre/castopod-host/commit/8122ceaf8a70050f14b3078f28b024e7d7cdb9ac))
([8122cea](https://code.castopod.org/ad-aures/castopod/commit/8122ceaf8a70050f14b3078f28b024e7d7cdb9ac))
- replace hardcoded style links with vite service + set default value for remote
transcript url
([3f2e056](https://code.podlibre.org/podlibre/castopod-host/commit/3f2e05608e43d47bbb518a9acfaf56ec3eefafb4)),
closes [#149](https://code.podlibre.org/podlibre/castopod-host/issues/149)
[#150](https://code.podlibre.org/podlibre/castopod-host/issues/150)
([3f2e056](https://code.castopod.org/ad-aures/castopod/commit/3f2e05608e43d47bbb518a9acfaf56ec3eefafb4)),
closes [#149](https://code.castopod.org/ad-aures/castopod/issues/149)
[#150](https://code.castopod.org/ad-aures/castopod/issues/150)
- replace website key for webpages in breadcrumb translate file
([50e32ff](https://code.podlibre.org/podlibre/castopod-host/commit/50e32ff75636c1d4c5d945a267e884cb26ad7191))
([50e32ff](https://code.castopod.org/ad-aures/castopod/commit/50e32ff75636c1d4c5d945a267e884cb26ad7191))
- rewrite regenerate image function to use saveSizes method from Image entity
([3889912](https://code.podlibre.org/podlibre/castopod-host/commit/38899124ec27e94a8c798bc2db528f9f785eec20))
([3889912](https://code.castopod.org/ad-aures/castopod/commit/38899124ec27e94a8c798bc2db528f9f785eec20))
- **rss-import:** add Castopod user-agent, handle redirects for downloaded
files, add Content namespace
([214243b](https://code.podlibre.org/podlibre/castopod-host/commit/214243b3fec4937e45ef1ceaba1149004cdf3b44))
([214243b](https://code.castopod.org/ad-aures/castopod/commit/214243b3fec4937e45ef1ceaba1149004cdf3b44))
- **rss:** cast number type values to string in rss_helper
([7180ae9](https://code.podlibre.org/podlibre/castopod-host/commit/7180ae9ec700930b69c04ed91f8eceea16ad77ce)),
closes [#148](https://code.podlibre.org/podlibre/castopod-host/issues/148)
([7180ae9](https://code.castopod.org/ad-aures/castopod/commit/7180ae9ec700930b69c04ed91f8eceea16ad77ce)),
closes [#148](https://code.castopod.org/ad-aures/castopod/issues/148)
- **rss:** do not escape podcast and episode titles in the xml
([0dd3b7e](https://code.podlibre.org/podlibre/castopod-host/commit/0dd3b7e0bf00d5a9eb80c93cba1efcada59ec3c1)),
closes [#138](https://code.podlibre.org/podlibre/castopod-host/issues/138)
[#71](https://code.podlibre.org/podlibre/castopod-host/issues/71)
([0dd3b7e](https://code.castopod.org/ad-aures/castopod/commit/0dd3b7e0bf00d5a9eb80c93cba1efcada59ec3c1)),
closes [#138](https://code.castopod.org/ad-aures/castopod/issues/138)
[#71](https://code.castopod.org/ad-aures/castopod/issues/71)
- **rss:** set ❬itunes:author❭ tag to owner_name if publisher not specified
([2271c14](https://code.podlibre.org/podlibre/castopod-host/commit/2271c1445b1ded12bc53b5d23b5e59d12b17c71a)),
closes [#96](https://code.podlibre.org/podlibre/castopod-host/issues/96)
([2271c14](https://code.castopod.org/ad-aures/castopod/commit/2271c1445b1ded12bc53b5d23b5e59d12b17c71a)),
closes [#96](https://code.castopod.org/ad-aures/castopod/issues/96)
- **rss:** use originalPath instead of originalMediaPath in Image library
([b4012b7](https://code.podlibre.org/podlibre/castopod-host/commit/b4012b7d2ed6b34b69ad767570dd33f0dc7db920))
([b4012b7](https://code.castopod.org/ad-aures/castopod/commit/b4012b7d2ed6b34b69ad767570dd33f0dc7db920))
- save transcript and chapters files to podcasts folder
([63f49c7](https://code.podlibre.org/podlibre/castopod-host/commit/63f49c719f672b615c5a8893d3868dffcd332e47))
([63f49c7](https://code.castopod.org/ad-aures/castopod/commit/63f49c719f672b615c5a8893d3868dffcd332e47))
- set cache expiration to next note publish to show note on publication date
([0a66de3](https://code.podlibre.org/podlibre/castopod-host/commit/0a66de3e6c17d4ac94ee8e13bd00ceaf64b1303e))
([0a66de3](https://code.castopod.org/ad-aures/castopod/commit/0a66de3e6c17d4ac94ee8e13bd00ceaf64b1303e))
- set episode description footer to null when empty value
([3a7d97d](https://code.podlibre.org/podlibre/castopod-host/commit/3a7d97d660046d80698611311ff3708110d2af82))
([3a7d97d](https://code.castopod.org/ad-aures/castopod/commit/3a7d97d660046d80698611311ff3708110d2af82))
- set episode duration translation to hardcoded english
([c39efc9](https://code.podlibre.org/podlibre/castopod-host/commit/c39efc9489180662edcebd142d4476c0617ea97f)),
closes [#64](https://code.podlibre.org/podlibre/castopod-host/issues/64)
([c39efc9](https://code.castopod.org/ad-aures/castopod/commit/c39efc9489180662edcebd142d4476c0617ea97f)),
closes [#64](https://code.castopod.org/ad-aures/castopod/issues/64)
- set episode guid upon episode creation
([ad8b153](https://code.podlibre.org/podlibre/castopod-host/commit/ad8b153f2a3b1a3b1751bf63785c4950e1516e6b)),
closes [#48](https://code.podlibre.org/podlibre/castopod-host/issues/48)
([ad8b153](https://code.castopod.org/ad-aures/castopod/commit/ad8b153f2a3b1a3b1751bf63785c4950e1516e6b)),
closes [#48](https://code.castopod.org/ad-aures/castopod/issues/48)
- set episode numbers during import + remove all custom form_helpers + minor ui
issues
([99a3b8d](https://code.podlibre.org/podlibre/castopod-host/commit/99a3b8d33e00482da50dd62bdaa9215a351a56e4))
([99a3b8d](https://code.castopod.org/ad-aures/castopod/commit/99a3b8d33e00482da50dd62bdaa9215a351a56e4))
- set localized slug_field key as string in french language
([17fb29b](https://code.podlibre.org/podlibre/castopod-host/commit/17fb29b20993b7deee4e252e0e3a4a2459ee0d98))
([17fb29b](https://code.castopod.org/ad-aures/castopod/commit/17fb29b20993b7deee4e252e0e3a4a2459ee0d98))
- set location to null when getting empty string
([71b1b5f](https://code.podlibre.org/podlibre/castopod-host/commit/71b1b5f775af475b1dc78328330e277f565e41b6))
([71b1b5f](https://code.castopod.org/ad-aures/castopod/commit/71b1b5f775af475b1dc78328330e277f565e41b6))
- **settings:** add .jpg extension to site-icon file input to display all jpeg
images
([f611a16](https://code.podlibre.org/podlibre/castopod-host/commit/f611a16cd0c1a389e1c5a287eaec9d2a927a4bb6))
([f611a16](https://code.castopod.org/ad-aures/castopod/commit/f611a16cd0c1a389e1c5a287eaec9d2a927a4bb6))
- sort episodic podcasts by season
([d7b6794](https://code.podlibre.org/podlibre/castopod-host/commit/d7b6794f68f9a01fd606a407c6eb4c12d15dee74))
([d7b6794](https://code.castopod.org/ad-aures/castopod/commit/d7b6794f68f9a01fd606a407c6eb4c12d15dee74))
- **themes:** update themes stylesheet route and remove css extension
([e4e7e00](https://code.podlibre.org/podlibre/castopod-host/commit/e4e7e0005e931967dd6162588f1c5913dbf4603e))
([e4e7e00](https://code.castopod.org/ad-aures/castopod/commit/e4e7e0005e931967dd6162588f1c5913dbf4603e))
- **types:** update fake seeders types + fix bugs
([76a4bf3](https://code.podlibre.org/podlibre/castopod-host/commit/76a4bf344160df679db29e236e7df7822970fb60))
([76a4bf3](https://code.castopod.org/ad-aures/castopod/commit/76a4bf344160df679db29e236e7df7822970fb60))
- unpublish episode before deleting it + add validation step before deletion
([f75bd76](https://code.podlibre.org/podlibre/castopod-host/commit/f75bd76458eeb01a2d37912695e33f77d03b7a69)),
closes [#112](https://code.podlibre.org/podlibre/castopod-host/issues/112)
[#55](https://code.podlibre.org/podlibre/castopod-host/issues/55)
([f75bd76](https://code.castopod.org/ad-aures/castopod/commit/f75bd76458eeb01a2d37912695e33f77d03b7a69)),
closes [#112](https://code.castopod.org/ad-aures/castopod/issues/112)
[#55](https://code.castopod.org/ad-aures/castopod/issues/55)
- update .htaccess for shared hosting config
([2379826](https://code.podlibre.org/podlibre/castopod-host/commit/2379826352e2f4b5060910bf9f29268610102f2e))
([2379826](https://code.castopod.org/ad-aures/castopod/commit/2379826352e2f4b5060910bf9f29268610102f2e))
- update broken contributor dropdown fields
([e5b7515](https://code.podlibre.org/podlibre/castopod-host/commit/e5b75150234bd7f19e01def93425d3bda7379dd3))
([e5b7515](https://code.castopod.org/ad-aures/castopod/commit/e5b75150234bd7f19e01def93425d3bda7379dd3))
- update condition in AnalyticsTrait
([fbc0967](https://code.podlibre.org/podlibre/castopod-host/commit/fbc0967caa81630d514ddb1b93b0834ebb4d913b))
([fbc0967](https://code.castopod.org/ad-aures/castopod/commit/fbc0967caa81630d514ddb1b93b0834ebb4d913b))
- update condition in home controller to redirect to install page
([33f1b91](https://code.podlibre.org/podlibre/castopod-host/commit/33f1b91d55dd0652c979d50fc85879dbf88a4a42))
([33f1b91](https://code.castopod.org/ad-aures/castopod/commit/33f1b91d55dd0652c979d50fc85879dbf88a4a42))
- update conditions when checking for empty max_episodes and season_number
([fbad0b5](https://code.podlibre.org/podlibre/castopod-host/commit/fbad0b59f68c65eba2fdcd5a8d3b312b622e9a45))
([fbad0b5](https://code.castopod.org/ad-aures/castopod/commit/fbad0b59f68c65eba2fdcd5a8d3b312b622e9a45))
- update iso-369 language table seeder
([0c90db4](https://code.podlibre.org/podlibre/castopod-host/commit/0c90db44c40de5af5b0b32b54489bda9424d9ef6))
([0c90db4](https://code.castopod.org/ad-aures/castopod/commit/0c90db44c40de5af5b0b32b54489bda9424d9ef6))
- update MarkdownEditor component + restyle Button and other components
([b05d177](https://code.podlibre.org/podlibre/castopod-host/commit/b05d177f1b7f44fef043ac5eb41f07133a2cf52d))
([b05d177](https://code.castopod.org/ad-aures/castopod/commit/b05d177f1b7f44fef043ac5eb41f07133a2cf52d))
- update purgecss content path for php helper files
([eb70bb4](https://code.podlibre.org/podlibre/castopod-host/commit/eb70bb4f7078ff347aeb8f5dcc7896311d289466)),
closes [#59](https://code.podlibre.org/podlibre/castopod-host/issues/59)
([eb70bb4](https://code.castopod.org/ad-aures/castopod/commit/eb70bb4f7078ff347aeb8f5dcc7896311d289466)),
closes [#59](https://code.castopod.org/ad-aures/castopod/issues/59)
- update translations for settings' tasks to include what they should be used
for
([06b1a8b](https://code.podlibre.org/podlibre/castopod-host/commit/06b1a8b29b6ce5d81c5570d250bdac4e0c9ee5ca))
([06b1a8b](https://code.castopod.org/ad-aures/castopod/commit/06b1a8b29b6ce5d81c5570d250bdac4e0c9ee5ca))
- use slash instead of backslash to call layout
([a80adb2](https://code.podlibre.org/podlibre/castopod-host/commit/a80adb22958fc0a38374cbce2d950a0042e699eb))
([a80adb2](https://code.castopod.org/ad-aures/castopod/commit/a80adb22958fc0a38374cbce2d950a0042e699eb))
- **ux:** allow for empty message upon episode publication and warn user on
submit
([33d01b8](https://code.podlibre.org/podlibre/castopod-host/commit/33d01b8d4fd6ebf24e9f011aa705c456c846956c)),
closes [#129](https://code.podlibre.org/podlibre/castopod-host/issues/129)
([33d01b8](https://code.castopod.org/ad-aures/castopod/commit/33d01b8d4fd6ebf24e9f011aa705c456c846956c)),
closes [#129](https://code.castopod.org/ad-aures/castopod/issues/129)
- **ux:** redirect user to install page on database error in home page
([9017e30](https://code.podlibre.org/podlibre/castopod-host/commit/9017e30bf41bed8c2be65091bbc5fb1e63aef87a))
([9017e30](https://code.castopod.org/ad-aures/castopod/commit/9017e30bf41bed8c2be65091bbc5fb1e63aef87a))
- **video-clips:** check if created video exists before recreating it and
failing
([dff1208](https://code.podlibre.org/podlibre/castopod-host/commit/dff12087251b2b89e195604202094b5ddd9a0936))
([dff1208](https://code.castopod.org/ad-aures/castopod/commit/dff12087251b2b89e195604202094b5ddd9a0936))
- **video-clips:** clear video clip cache after process has finished
([3ae6232](https://code.podlibre.org/podlibre/castopod-host/commit/3ae62325856f6ff331a5d9ed901b9fa097ca7055))
([3ae6232](https://code.castopod.org/ad-aures/castopod/commit/3ae62325856f6ff331a5d9ed901b9fa097ca7055))
- **video-clips:** create unique temporary files for resources to be deleted
after generation
([7f7c878](https://code.podlibre.org/podlibre/castopod-host/commit/7f7c878cb6ecf7b4a967b2af87da82bc6593081e))
([7f7c878](https://code.castopod.org/ad-aures/castopod/commit/7f7c878cb6ecf7b4a967b2af87da82bc6593081e))
- **video-clips:** tweak portrait parameters to have subtitles display without
overflowing
([2385b1a](https://code.podlibre.org/podlibre/castopod-host/commit/2385b1a2926d1344569836e18cb30adb4c604664))
([2385b1a](https://code.castopod.org/ad-aures/castopod/commit/2385b1a2926d1344569836e18cb30adb4c604664))
- **xml-editor:** escape xml editor's content + restyle form sections to prevent
overflowing
([588590b](https://code.podlibre.org/podlibre/castopod-host/commit/588590bd2c0346e2465ff8f1930580d76a3bf068))
([588590b](https://code.castopod.org/ad-aures/castopod/commit/588590bd2c0346e2465ff8f1930580d76a3bf068))
### Features
- **activitypub:** add Podcast actor and PodcastEpisode object with comments
([9e1e5d2](https://code.podlibre.org/podlibre/castopod-host/commit/9e1e5d2e862d6a3345d11ca7f96b955c76bfa013))
([9e1e5d2](https://code.castopod.org/ad-aures/castopod/commit/9e1e5d2e862d6a3345d11ca7f96b955c76bfa013))
- add alternate rss feed link tag to podcast page head
([a973c09](https://code.podlibre.org/podlibre/castopod-host/commit/a973c097d54a3d0186c4079b9d4d3e81aae38505)),
closes [#35](https://code.podlibre.org/podlibre/castopod-host/issues/35)
([a973c09](https://code.castopod.org/ad-aures/castopod/commit/a973c097d54a3d0186c4079b9d4d3e81aae38505)),
closes [#35](https://code.castopod.org/ad-aures/castopod/issues/35)
- add analytics and unknown useragents
([ec92e65](https://code.podlibre.org/podlibre/castopod-host/commit/ec92e65aa42e09b1df04600b52a0c679dfc494bb))
([ec92e65](https://code.castopod.org/ad-aures/castopod/commit/ec92e65aa42e09b1df04600b52a0c679dfc494bb))
- add audio-clipper toolbar + add video-clip-previewer
([0255753](https://code.podlibre.org/podlibre/castopod-host/commit/02557539e6eb48fc23ee2ee3b0c75aee3310965b))
([0255753](https://code.castopod.org/ad-aures/castopod/commit/02557539e6eb48fc23ee2ee3b0c75aee3310965b))
- add audio-clipper webcomponent (wip)
([21d4251](https://code.podlibre.org/podlibre/castopod-host/commit/21d4251b9bcd5acb0f8a1761bc4edc34a3dbc228))
([21d4251](https://code.castopod.org/ad-aures/castopod/commit/21d4251b9bcd5acb0f8a1761bc4edc34a3dbc228))
- add basic stats on podcast about page
([1670558](https://code.podlibre.org/podlibre/castopod-host/commit/1670558473dba47219d470ff21d6224db6ab42ba))
([1670558](https://code.castopod.org/ad-aures/castopod/commit/1670558473dba47219d470ff21d6224db6ab42ba))
- add breadcrumb in admin area
([7fb1de2](https://code.podlibre.org/podlibre/castopod-host/commit/7fb1de2cf3c97c4cd7afe3bd71bbe66041786ecd)),
closes [#17](https://code.podlibre.org/podlibre/castopod-host/issues/17)
([7fb1de2](https://code.castopod.org/ad-aures/castopod/commit/7fb1de2cf3c97c4cd7afe3bd71bbe66041786ecd)),
closes [#17](https://code.castopod.org/ad-aures/castopod/issues/17)
- add cache to ActivityPub sql queries + cache activity and note pages
([2d297f4](https://code.podlibre.org/podlibre/castopod-host/commit/2d297f45b3d7ef6e8711875a0b9b908e878115fa))
([2d297f4](https://code.castopod.org/ad-aures/castopod/commit/2d297f45b3d7ef6e8711875a0b9b908e878115fa))
- add CDN url
([972bcbf](https://code.podlibre.org/podlibre/castopod-host/commit/972bcbf65ee119b8641ca3c4e5c0e8cf9ca8dd4f)),
closes [#37](https://code.podlibre.org/podlibre/castopod-host/issues/37)
([972bcbf](https://code.castopod.org/ad-aures/castopod/commit/972bcbf65ee119b8641ca3c4e5c0e8cf9ca8dd4f)),
closes [#37](https://code.castopod.org/ad-aures/castopod/issues/37)
- add codemirror to display xml editor for custom rss field
([f15f262](https://code.podlibre.org/podlibre/castopod-host/commit/f15f26240cd5311fa9d07779f364b6639a501dec))
([f15f262](https://code.castopod.org/ad-aures/castopod/commit/f15f26240cd5311fa9d07779f364b6639a501dec))
- add cumulative listening time charts
([588b4d2](https://code.podlibre.org/podlibre/castopod-host/commit/588b4d28da00bc12d02126e23181690f54d81716))
([588b4d2](https://code.castopod.org/ad-aures/castopod/commit/588b4d28da00bc12d02126e23181690f54d81716))
- add DropdownMenu component + remove global audio player in admin
([abb7fba](https://code.podlibre.org/podlibre/castopod-host/commit/abb7fbac276d77b7d31a0aeba75d464f3ba3ad46))
([abb7fba](https://code.castopod.org/ad-aures/castopod/commit/abb7fbac276d77b7d31a0aeba75d464f3ba3ad46))
- add episode_numbering() component helper to display episode and season numbers
([3f4a6bd](https://code.podlibre.org/podlibre/castopod-host/commit/3f4a6bd0b9f870f16107a41b102b6bf734868198))
([3f4a6bd](https://code.castopod.org/ad-aures/castopod/commit/3f4a6bd0b9f870f16107a41b102b6bf734868198))
- add french translation
([196920d](https://code.podlibre.org/podlibre/castopod-host/commit/196920d62f1810b4c35f800d17d7f93627319091))
([196920d](https://code.castopod.org/ad-aures/castopod/commit/196920d62f1810b4c35f800d17d7f93627319091))
- add heading component + update ecs rules to fix views
([23bdc6f](https://code.podlibre.org/podlibre/castopod-host/commit/23bdc6f8e36b7e8dfbe32755a54dea59ad913432))
([23bdc6f](https://code.castopod.org/ad-aures/castopod/commit/23bdc6f8e36b7e8dfbe32755a54dea59ad913432))
- add housekeeping task to run after migrations
([89dee41](https://code.podlibre.org/podlibre/castopod-host/commit/89dee41d583e57251ea9315402a757f03571d7ad))
([89dee41](https://code.castopod.org/ad-aures/castopod/commit/89dee41d583e57251ea9315402a757f03571d7ad))
- add install wizard form to bootstrap database and create the first superadmin
user
([cba871c](https://code.podlibre.org/podlibre/castopod-host/commit/cba871c5df9f7120c44d9952456ebbd0d220669e)),
closes [#2](https://code.podlibre.org/podlibre/castopod-host/issues/2)
([cba871c](https://code.castopod.org/ad-aures/castopod/commit/cba871c5df9f7120c44d9952456ebbd0d220669e)),
closes [#2](https://code.castopod.org/ad-aures/castopod/issues/2)
- add ISO 3166 country codes
([97cd94b](https://code.podlibre.org/podlibre/castopod-host/commit/97cd94b47494b66faf43fbbe0748872da80020a4))
([97cd94b](https://code.castopod.org/ad-aures/castopod/commit/97cd94b47494b66faf43fbbe0748872da80020a4))
- add js audio player on podcast, admin and embeddable player pages + fix admon
episodes ux
([0e14eb4](https://code.podlibre.org/podlibre/castopod-host/commit/0e14eb4d3f526b0fd256a6144f3fbfc3fe52a357)),
closes [#131](https://code.podlibre.org/podlibre/castopod-host/issues/131)
([0e14eb4](https://code.castopod.org/ad-aures/castopod/commit/0e14eb4d3f526b0fd256a6144f3fbfc3fe52a357)),
closes [#131](https://code.castopod.org/ad-aures/castopod/issues/131)
- add lock podcast according to the Podcastindex podcast-namespace to prevent
unauthozized import
([72b3012](https://code.podlibre.org/podlibre/castopod-host/commit/72b301272e0b70ded3e2b237391909e3f152ad0b))
([72b3012](https://code.castopod.org/ad-aures/castopod/commit/72b301272e0b70ded3e2b237391909e3f152ad0b))
- add map analytics, add episodes analytics, clean analytics page layout,
translate countries
([07eae83](https://code.podlibre.org/podlibre/castopod-host/commit/07eae83a00d860e149359fae67d549488403d88b))
([07eae83](https://code.castopod.org/ad-aures/castopod/commit/07eae83a00d860e149359fae67d549488403d88b))
- add media entity and link documents, images and audio files to it
([6ecf286](https://code.podlibre.org/podlibre/castopod-host/commit/6ecf2866cfcde31a0840f15c3340808ce14b44cf))
([6ecf286](https://code.castopod.org/ad-aures/castopod/commit/6ecf2866cfcde31a0840f15c3340808ce14b44cf))
- add Noto Sans Mono font to use for durations + button to access new video clip
form in list
([7609bb6](https://code.podlibre.org/podlibre/castopod-host/commit/7609bb60330539aa91bfdafbb35c2d585624218a))
([7609bb6](https://code.castopod.org/ad-aures/castopod/commit/7609bb60330539aa91bfdafbb35c2d585624218a))
- add npm for js dependencies + move src/ files to root folder
([cbb83a6](https://code.podlibre.org/podlibre/castopod-host/commit/cbb83a6f308ac9357e9fb0cca5edae9d3fee5b48))
([cbb83a6](https://code.castopod.org/ad-aures/castopod/commit/cbb83a6f308ac9357e9fb0cca5edae9d3fee5b48))
- add Open Graph and Twitter meta tags
([af970b8](https://code.podlibre.org/podlibre/castopod-host/commit/af970b8bac949e4c63047e04aca1b7403a4e8deb)),
closes [#41](https://code.podlibre.org/podlibre/castopod-host/issues/41)
([af970b8](https://code.castopod.org/ad-aures/castopod/commit/af970b8bac949e4c63047e04aca1b7403a4e8deb)),
closes [#41](https://code.castopod.org/ad-aures/castopod/issues/41)
- add pages table to store custom instance pages (eg. legal-notice, cookie
policy, etc.)
([9c224a8](https://code.podlibre.org/podlibre/castopod-host/commit/9c224a8ac6dd95f3c6c087a300fc8bac48e8090f)),
closes [#24](https://code.podlibre.org/podlibre/castopod-host/issues/24)
([9c224a8](https://code.castopod.org/ad-aures/castopod/commit/9c224a8ac6dd95f3c6c087a300fc8bac48e8090f)),
closes [#24](https://code.castopod.org/ad-aures/castopod/issues/24)
- add platform models
([a333d29](https://code.podlibre.org/podlibre/castopod-host/commit/a333d291966229a909c0851fd8b890ed97c48ceb))
([a333d29](https://code.castopod.org/ad-aures/castopod/commit/a333d291966229a909c0851fd8b890ed97c48ceb))
- add platforms form in podcast settings
([043f49c](https://code.podlibre.org/podlibre/castopod-host/commit/043f49c784bc007ca0fa756ca4ed2d3b08843ad9))
([043f49c](https://code.castopod.org/ad-aures/castopod/commit/043f49c784bc007ca0fa756ca4ed2d3b08843ad9))
- add platforms tables
([ce59344](https://code.podlibre.org/podlibre/castopod-host/commit/ce5934419a516c9926dd3fd0ace3c11a95b60722))
([ce59344](https://code.castopod.org/ad-aures/castopod/commit/ce5934419a516c9926dd3fd0ace3c11a95b60722))
- add podcast banner field for each podcast + refactor images configuration
([4a8147b](https://code.podlibre.org/podlibre/castopod-host/commit/4a8147bfbbd98d9badfc57a0f2a18bdd5812e802))
([4a8147b](https://code.castopod.org/ad-aures/castopod/commit/4a8147bfbbd98d9badfc57a0f2a18bdd5812e802))
- add remote_url alternative for transcript and chapters files
([3143c9a](https://code.podlibre.org/podlibre/castopod-host/commit/3143c9ad36e4cf1364205cf2be39c0c96f80fdd2))
([3143c9a](https://code.castopod.org/ad-aures/castopod/commit/3143c9ad36e4cf1364205cf2be39c0c96f80fdd2))
- add replied to post or comment to reply element
([d0f9c60](https://code.podlibre.org/podlibre/castopod-host/commit/d0f9c6018f1af527099f3e26b5d824710fa11caf))
([d0f9c60](https://code.castopod.org/ad-aures/castopod/commit/d0f9c6018f1af527099f3e26b5d824710fa11caf))
- add schema.org json-ld objects to podcasts, episodes, posts and comments pages
([902f959](https://code.podlibre.org/podlibre/castopod-host/commit/902f959b30a10839684f093eb86edebc5d826a0b))
([902f959](https://code.castopod.org/ad-aures/castopod/commit/902f959b30a10839684f093eb86edebc5d826a0b))
- add task to housekeeping setting for resetting all instance counts
([9303e51](https://code.podlibre.org/podlibre/castopod-host/commit/9303e51bc50d730a8026f58984e83b840360ee88))
([9303e51](https://code.castopod.org/ad-aures/castopod/commit/9303e51bc50d730a8026f58984e83b840360ee88))
- add unique listeners analytics
([3a49258](https://code.podlibre.org/podlibre/castopod-host/commit/3a4925816f3268230640525ad7af507aab8eecb9))
([3a49258](https://code.castopod.org/ad-aures/castopod/commit/3a4925816f3268230640525ad7af507aab8eecb9))
- add user permissions and basic groups to handle authorizations
([d58e518](https://code.podlibre.org/podlibre/castopod-host/commit/d58e51874a4722921b75b0049117015c2380406e)),
closes [#3](https://code.podlibre.org/podlibre/castopod-host/issues/3)
[#18](https://code.podlibre.org/podlibre/castopod-host/issues/18)
([d58e518](https://code.castopod.org/ad-aures/castopod/commit/d58e51874a4722921b75b0049117015c2380406e)),
closes [#3](https://code.castopod.org/ad-aures/castopod/issues/3)
[#18](https://code.castopod.org/ad-aures/castopod/issues/18)
- **admin:** make header stick on scroll and show title + action buttons using
css only
([d60498c](https://code.podlibre.org/podlibre/castopod-host/commit/d60498c1beb970a14eeb3bbe02d1b1d8116624b0))
([d60498c](https://code.castopod.org/ad-aures/castopod/commit/d60498c1beb970a14eeb3bbe02d1b1d8116624b0))
- **admin:** update admin layout for better ux + update brand pine colors
([d86142e](https://code.podlibre.org/podlibre/castopod-host/commit/d86142ebe7cd7582835f180b79fbeaaaba703528))
([d86142e](https://code.castopod.org/ad-aures/castopod/commit/d86142ebe7cd7582835f180b79fbeaaaba703528))
- allow cross origin requests on episode comments
([e12f95a](https://code.podlibre.org/podlibre/castopod-host/commit/e12f95aca13c6d54489a9cfd99d4cd2490fe83ab))
([e12f95a](https://code.castopod.org/ad-aures/castopod/commit/e12f95aca13c6d54489a9cfd99d4cd2490fe83ab))
- **analytics:** add 'other' group to pie charts in order to display more
accurate data
([73acef9](https://code.podlibre.org/podlibre/castopod-host/commit/73acef933ff3485987afc5157de022910876fc12))
([73acef9](https://code.castopod.org/ad-aures/castopod/commit/73acef933ff3485987afc5157de022910876fc12))
- **analytics:** add charts and data export
([78625c4](https://code.podlibre.org/podlibre/castopod-host/commit/78625c471b4f03a09bd42f72b82217e1f2d01cef))
([78625c4](https://code.castopod.org/ad-aures/castopod/commit/78625c471b4f03a09bd42f72b82217e1f2d01cef))
- **analytics:** add service name from rss user-agent
([7202b98](https://code.podlibre.org/podlibre/castopod-host/commit/7202b9867bd59aafa8c338a4230fb5e5c55b24c6))
([7202b98](https://code.castopod.org/ad-aures/castopod/commit/7202b9867bd59aafa8c338a4230fb5e5c55b24c6))
- **analytics:** add weekday and hour bar charts
([8ab3132](https://code.podlibre.org/podlibre/castopod-host/commit/8ab313296bb4a254ab05e90b17d896039839b784))
([8ab3132](https://code.castopod.org/ad-aures/castopod/commit/8ab313296bb4a254ab05e90b17d896039839b784))
- build hashed static files to renew browser cache
([37c54d2](https://code.podlibre.org/podlibre/castopod-host/commit/37c54d247749bdf8f528babd4a78f24d48051063)),
closes [#107](https://code.podlibre.org/podlibre/castopod-host/issues/107)
([37c54d2](https://code.castopod.org/ad-aures/castopod/commit/37c54d247749bdf8f528babd4a78f24d48051063)),
closes [#107](https://code.castopod.org/ad-aures/castopod/issues/107)
- **cache:** add podcast and episode pages to cache + clear them after insert or
update
([da0f047](https://code.podlibre.org/podlibre/castopod-host/commit/da0f0472819007e02e5da37399f2377772c618b9))
([da0f047](https://code.castopod.org/ad-aures/castopod/commit/da0f0472819007e02e5da37399f2377772c618b9))
- **categories:** create model, entity, migrations and seeds
([f73b042](https://code.podlibre.org/podlibre/castopod-host/commit/f73b042cc091be82abdbbca8992080875d526972))
([f73b042](https://code.castopod.org/ad-aures/castopod/commit/f73b042cc091be82abdbbca8992080875d526972))
- **clips:** setup clip entities and model + save video clip to have it
generated in the background
([2f6fdf9](https://code.podlibre.org/podlibre/castopod-host/commit/2f6fdf9091d52ca49709fc82621ba1c6dd0e817d))
([2f6fdf9](https://code.castopod.org/ad-aures/castopod/commit/2f6fdf9091d52ca49709fc82621ba1c6dd0e817d))
- **comments:** add comments to episodes + update naming of status to post
([bb4752c](https://code.podlibre.org/podlibre/castopod-host/commit/bb4752c35e086664f5fd75fdc0d56546a1e356f6))
([bb4752c](https://code.castopod.org/ad-aures/castopod/commit/bb4752c35e086664f5fd75fdc0d56546a1e356f6))
- **comments:** add like / undo like to comment + add comment page
([0c187ef](https://code.podlibre.org/podlibre/castopod-host/commit/0c187ef7a9278a60bcc6e5ee4d69d948b51e5c54))
([0c187ef](https://code.castopod.org/ad-aures/castopod/commit/0c187ef7a9278a60bcc6e5ee4d69d948b51e5c54))
- **components:** add custom view renderer with ComponentRenderer adapted from
bonfire2
([a95de8b](https://code.podlibre.org/podlibre/castopod-host/commit/a95de8bab010f6b01c598da72191abe97e473687))
([a95de8b](https://code.castopod.org/ad-aures/castopod/commit/a95de8bab010f6b01c598da72191abe97e473687))
- create optimized & resized images upon upload
([02e4441](https://code.podlibre.org/podlibre/castopod-host/commit/02e4441f98f27e9534e5b9b63279153d14632ccd)),
closes [#6](https://code.podlibre.org/podlibre/castopod-host/issues/6)
([02e4441](https://code.castopod.org/ad-aures/castopod/commit/02e4441f98f27e9534e5b9b63279153d14632ccd)),
closes [#6](https://code.castopod.org/ad-aures/castopod/issues/6)
- **custom-rss:** add custom xml tag injection in rss feed for ❬channel❭ and
❬item❭
([6ecdaad](https://code.podlibre.org/podlibre/castopod-host/commit/6ecdaad911d06b7f7a2b7d24710968c7eb9118f6))
([6ecdaad](https://code.castopod.org/ad-aures/castopod/commit/6ecdaad911d06b7f7a2b7d24710968c7eb9118f6))
- **devcontainer:** add devcontainer settings for dev environment
([69e7266](https://code.podlibre.org/podlibre/castopod-host/commit/69e72667365247b63430dee88194e8f0d7c28edc))
([69e7266](https://code.castopod.org/ad-aures/castopod/commit/69e72667365247b63430dee88194e8f0d7c28edc))
- display castopod version in admin footer
([9f2574e](https://code.podlibre.org/podlibre/castopod-host/commit/9f2574e6fbb61dac4e1a4252dff30017685da5f0)),
closes [#68](https://code.podlibre.org/podlibre/castopod-host/issues/68)
([9f2574e](https://code.castopod.org/ad-aures/castopod/commit/9f2574e6fbb61dac4e1a4252dff30017685da5f0)),
closes [#68](https://code.castopod.org/ad-aures/castopod/issues/68)
- display legal disclaimer and warning on podcast import page
([2f07992](https://code.podlibre.org/podlibre/castopod-host/commit/2f07992e5508b34b91f194eebfac80c51e80e90a)),
closes [#34](https://code.podlibre.org/podlibre/castopod-host/issues/34)
([2f07992](https://code.castopod.org/ad-aures/castopod/commit/2f07992e5508b34b91f194eebfac80c51e80e90a)),
closes [#34](https://code.castopod.org/ad-aures/castopod/issues/34)
- edit + delete podcast and episode
([ac5f0c7](https://code.podlibre.org/podlibre/castopod-host/commit/ac5f0c732806e955c01e05b7867801bc938c6bd5))
([ac5f0c7](https://code.castopod.org/ad-aures/castopod/commit/ac5f0c732806e955c01e05b7867801bc938c6bd5))
- **embeddable-player:** add embeddable player widget
([141788f](https://code.podlibre.org/podlibre/castopod-host/commit/141788fa089f9dedc8956c64ca515a4a4625f904))
([141788f](https://code.castopod.org/ad-aures/castopod/commit/141788fa089f9dedc8956c64ca515a4a4625f904))
- enhance admin ui with responsive design and ux improvements
([2d44b45](https://code.podlibre.org/podlibre/castopod-host/commit/2d44b457a02205d2e7da258d7029b8bc5da39533)),
closes [#31](https://code.podlibre.org/podlibre/castopod-host/issues/31)
[#9](https://code.podlibre.org/podlibre/castopod-host/issues/9)
([2d44b45](https://code.castopod.org/ad-aures/castopod/commit/2d44b457a02205d2e7da258d7029b8bc5da39533)),
closes [#31](https://code.castopod.org/ad-aures/castopod/issues/31)
[#9](https://code.castopod.org/ad-aures/castopod/issues/9)
- enhance ui using javascript in admin area
([c0e66d5](https://code.podlibre.org/podlibre/castopod-host/commit/c0e66d5f7012026e145d106f4d6bd3ba792a1b77))
([c0e66d5](https://code.castopod.org/ad-aures/castopod/commit/c0e66d5f7012026e145d106f4d6bd3ba792a1b77))
- **episodes:** add create form and view pages for episode
([f3b2c8b](https://code.podlibre.org/podlibre/castopod-host/commit/f3b2c8b84f3d93bef734e34dbe8ed729535e45e9)),
closes [#1](https://code.podlibre.org/podlibre/castopod-host/issues/1)
([f3b2c8b](https://code.castopod.org/ad-aures/castopod/commit/f3b2c8b84f3d93bef734e34dbe8ed729535e45e9)),
closes [#1](https://code.castopod.org/ad-aures/castopod/issues/1)
- **episodes:** add migrations, model and entity for episodes table
([0444821](https://code.podlibre.org/podlibre/castopod-host/commit/044482174ede555ce19a2d8c6f48771cc8e7d27b))
([0444821](https://code.castopod.org/ad-aures/castopod/commit/044482174ede555ce19a2d8c6f48771cc8e7d27b))
- **episodes:** replace all audio file URL parameters with base64 encoded data
([e1f65cd](https://code.podlibre.org/podlibre/castopod-host/commit/e1f65cd3b53353a30d4ab6eb5312393cf04a1676))
([e1f65cd](https://code.castopod.org/ad-aures/castopod/commit/e1f65cd3b53353a30d4ab6eb5312393cf04a1676))
- **episodes:** schedule episode with future publication_date by using cache
expiration time
([4f1e773](https://code.podlibre.org/podlibre/castopod-host/commit/4f1e773c0f9e4c2597f6c1b0a4773dfb34b2f203)),
closes [#47](https://code.podlibre.org/podlibre/castopod-host/issues/47)
([4f1e773](https://code.castopod.org/ad-aures/castopod/commit/4f1e773c0f9e4c2597f6c1b0a4773dfb34b2f203)),
closes [#47](https://code.castopod.org/ad-aures/castopod/issues/47)
- **fediverse:** implement activitypub protocols + update user interface
([2f525c0](https://code.podlibre.org/podlibre/castopod-host/commit/2f525c0f6e44d320bff16e22c223481923ba683e)),
closes [#69](https://code.podlibre.org/podlibre/castopod-host/issues/69)
[#65](https://code.podlibre.org/podlibre/castopod-host/issues/65)
[#85](https://code.podlibre.org/podlibre/castopod-host/issues/85)
[#51](https://code.podlibre.org/podlibre/castopod-host/issues/51)
[#91](https://code.podlibre.org/podlibre/castopod-host/issues/91)
[#92](https://code.podlibre.org/podlibre/castopod-host/issues/92)
[#88](https://code.podlibre.org/podlibre/castopod-host/issues/88)
([2f525c0](https://code.castopod.org/ad-aures/castopod/commit/2f525c0f6e44d320bff16e22c223481923ba683e)),
closes [#69](https://code.castopod.org/ad-aures/castopod/issues/69)
[#65](https://code.castopod.org/ad-aures/castopod/issues/65)
[#85](https://code.castopod.org/ad-aures/castopod/issues/85)
[#51](https://code.castopod.org/ad-aures/castopod/issues/51)
[#91](https://code.castopod.org/ad-aures/castopod/issues/91)
[#92](https://code.castopod.org/ad-aures/castopod/issues/92)
[#88](https://code.castopod.org/ad-aures/castopod/issues/88)
- **fonts:** replace Montserrat with Inter for better readablity
([bfa11d0](https://code.podlibre.org/podlibre/castopod-host/commit/bfa11d007d04b8ac714c8cf3b8050a6aaf177a26))
([bfa11d0](https://code.castopod.org/ad-aures/castopod/commit/bfa11d007d04b8ac714c8cf3b8050a6aaf177a26))
- import podcast from an rss feed url
([9a5d5a1](https://code.podlibre.org/podlibre/castopod-host/commit/9a5d5a15b4945eb319da9e999c4ca60a0a4f6d2d)),
closes [#21](https://code.podlibre.org/podlibre/castopod-host/issues/21)
([9a5d5a1](https://code.castopod.org/ad-aures/castopod/commit/9a5d5a15b4945eb319da9e999c4ca60a0a4f6d2d)),
closes [#21](https://code.castopod.org/ad-aures/castopod/issues/21)
- integrate stylized form components and update podcast edit page
([6536729](https://code.podlibre.org/podlibre/castopod-host/commit/653672954606a23796e8a7bda3c34fd6b92f84e0))
([6536729](https://code.castopod.org/ad-aures/castopod/commit/653672954606a23796e8a7bda3c34fd6b92f84e0))
- make displayed publication time as relative time using @github/time-elements
([230e139](https://code.podlibre.org/podlibre/castopod-host/commit/230e139e43324b9ebef06ca8f6e13b3d9a7bdc70))
([230e139](https://code.castopod.org/ad-aures/castopod/commit/230e139e43324b9ebef06ca8f6e13b3d9a7bdc70))
- **map:** display geolocated episodes on a map page
([4357cc2](https://code.podlibre.org/podlibre/castopod-host/commit/4357cc25ccc585ce398035c1c25d566b6a9df775))
([4357cc2](https://code.castopod.org/ad-aures/castopod/commit/4357cc25ccc585ce398035c1c25d566b6a9df775))
- **media:** clean media api + create an entity per media type
([fafaa7e](https://code.podlibre.org/podlibre/castopod-host/commit/fafaa7e689b17f09a2b056081fa1f4fc53bf716b))
([fafaa7e](https://code.castopod.org/ad-aures/castopod/commit/fafaa7e689b17f09a2b056081fa1f4fc53bf716b))
- **media:** save audio, images, transcripts and chapters to media for episode
and persons
([58e2a00](https://code.podlibre.org/podlibre/castopod-host/commit/58e2a00a87fa7d5b188e13cc521d94f0cfddba50))
([58e2a00](https://code.castopod.org/ad-aures/castopod/commit/58e2a00a87fa7d5b188e13cc521d94f0cfddba50))
- **meta-tags:** add activitypub alternate links to podcast, episode, comment
and post pages
([bd61752](https://code.podlibre.org/podlibre/castopod-host/commit/bd61752be2f574323b05d1d0aee0df55adf9a74e))
([bd61752](https://code.castopod.org/ad-aures/castopod/commit/bd61752be2f574323b05d1d0aee0df55adf9a74e))
- minor corrections to some tables
([3bf9420](https://code.podlibre.org/podlibre/castopod-host/commit/3bf9420b5956a501b3b24405d243a71a928d6086))
([3bf9420](https://code.castopod.org/ad-aures/castopod/commit/3bf9420b5956a501b3b24405d243a71a928d6086))
- **monetization:** add Web Monetization support
([96a6026](https://code.podlibre.org/podlibre/castopod-host/commit/96a6026f1db452085360f5fe248de82a2ec06468))
([96a6026](https://code.castopod.org/ad-aures/castopod/commit/96a6026f1db452085360f5fe248de82a2ec06468))
- **nodeinfo2:** add .well-known route for nodeinfo2 containing metadata about
the castopod instance
([88fddc8](https://code.podlibre.org/podlibre/castopod-host/commit/88fddc81d730978f2a4d8a671936b54041e3fe45))
([88fddc8](https://code.castopod.org/ad-aures/castopod/commit/88fddc81d730978f2a4d8a671936b54041e3fe45))
- **partner:** add link and image in episode description
([ad07bb9](https://code.podlibre.org/podlibre/castopod-host/commit/ad07bb9330dc9493813368e969e1f3a3def44614))
([ad07bb9](https://code.castopod.org/ad-aures/castopod/commit/ad07bb9330dc9493813368e969e1f3a3def44614))
- **person:** add podcastindex.org namespace person tag
([8acd011](https://code.podlibre.org/podlibre/castopod-host/commit/8acd011f13e99492ef4b44b327685bb006fe5f8f))
([8acd011](https://code.castopod.org/ad-aures/castopod/commit/8acd011f13e99492ef4b44b327685bb006fe5f8f))
- **platforms:** add AntennaPod
([53e9cfd](https://code.podlibre.org/podlibre/castopod-host/commit/53e9cfd61c794b1539e9d4691d3c4e73c4b7aaa7))
([53e9cfd](https://code.castopod.org/ad-aures/castopod/commit/53e9cfd61c794b1539e9d4691d3c4e73c4b7aaa7))
- **platforms:** add Fediverse and some funding platforms, add link on logo
([afc3d50](https://code.podlibre.org/podlibre/castopod-host/commit/afc3d50289bb4173e0697d109ffe72f6814b93d1))
([afc3d50](https://code.castopod.org/ad-aures/castopod/commit/afc3d50289bb4173e0697d109ffe72f6814b93d1))
- **platforms:** add helloasso
([16cb993](https://code.podlibre.org/podlibre/castopod-host/commit/16cb993ee6e28987a840fc27a9c2c73794c67697))
([16cb993](https://code.castopod.org/ad-aures/castopod/commit/16cb993ee6e28987a840fc27a9c2c73794c67697))
- **platforms:** add missing newpodcastapps.com's platforms
([92dd370](https://code.podlibre.org/podlibre/castopod-host/commit/92dd370e2f9a464edd26cddcde96d0e16f91548d))
([92dd370](https://code.castopod.org/ad-aures/castopod/commit/92dd370e2f9a464edd26cddcde96d0e16f91548d))
- **platforms:** add pod.link
([3d7a232](https://code.podlibre.org/podlibre/castopod-host/commit/3d7a2320ddd116e4a311605421126aff57243219))
([3d7a232](https://code.castopod.org/ad-aures/castopod/commit/3d7a2320ddd116e4a311605421126aff57243219))
- **platforms:** add Podcast Index
([ad52b1c](https://code.podlibre.org/podlibre/castopod-host/commit/ad52b1cc2b7d0bc844970214d205961a7196b4a9))
([ad52b1c](https://code.castopod.org/ad-aures/castopod/commit/ad52b1cc2b7d0bc844970214d205961a7196b4a9))
- **platforms:** add podfriend
([9fdc8d3](https://code.podlibre.org/podlibre/castopod-host/commit/9fdc8d32930234c7ffd2be6892be57febcef1086))
([9fdc8d3](https://code.castopod.org/ad-aures/castopod/commit/9fdc8d32930234c7ffd2be6892be57febcef1086))
- **podcast-form:** update routes and redirect to podcast page
([12ce905](https://code.podlibre.org/podlibre/castopod-host/commit/12ce905799002dc9c07e6de092342d30ba9fd7d8))
([12ce905](https://code.castopod.org/ad-aures/castopod/commit/12ce905799002dc9c07e6de092342d30ba9fd7d8))
- **podcast:** create a podcast using form
([1202ba3](https://code.podlibre.org/podlibre/castopod-host/commit/1202ba3545f521097c60a6a2af95e70527cd1d34))
([1202ba3](https://code.castopod.org/ad-aures/castopod/commit/1202ba3545f521097c60a6a2af95e70527cd1d34))
- prefill season and episode numbers + set episode number as mandatory for
serial podcasts
([07d740b](https://code.podlibre.org/podlibre/castopod-host/commit/07d740b79f9283e389e723954f680f909ce5de4a)),
closes [#134](https://code.podlibre.org/podlibre/castopod-host/issues/134)
[#136](https://code.podlibre.org/podlibre/castopod-host/issues/136)
([07d740b](https://code.castopod.org/ad-aures/castopod/commit/07d740b79f9283e389e723954f680f909ce5de4a)),
closes [#134](https://code.castopod.org/ad-aures/castopod/issues/134)
[#136](https://code.castopod.org/ad-aures/castopod/issues/136)
- **public-ui:** adapt public podcast and episode pages to wireframes
([40a0535](https://code.podlibre.org/podlibre/castopod-host/commit/40a0535fc1bc12a24994b651f5e00b35995cbdda)),
closes [#30](https://code.podlibre.org/podlibre/castopod-host/issues/30)
[#13](https://code.podlibre.org/podlibre/castopod-host/issues/13)
([40a0535](https://code.castopod.org/ad-aures/castopod/commit/40a0535fc1bc12a24994b651f5e00b35995cbdda)),
closes [#30](https://code.castopod.org/ad-aures/castopod/issues/30)
[#13](https://code.castopod.org/ad-aures/castopod/issues/13)
- **pwa:** add service-worker + webmanifest for each podcasts to have them
install on devices
([fee2c1c](https://code.podlibre.org/podlibre/castopod-host/commit/fee2c1c0d0d03c4ff0a6a207b0a5e0c22bb7b13a))
([fee2c1c](https://code.castopod.org/ad-aures/castopod/commit/fee2c1c0d0d03c4ff0a6a207b0a5e0c22bb7b13a))
- redesign public podcast and episode pages + remove any information clutter for
better ux
([9321400](https://code.podlibre.org/podlibre/castopod-host/commit/932140077c671f0486a2cd08ceb6126c7ecde87f))
([9321400](https://code.castopod.org/ad-aures/castopod/commit/932140077c671f0486a2cd08ceb6126c7ecde87f))
- replace form helper functions with components in admin template
([e64548b](https://code.podlibre.org/podlibre/castopod-host/commit/e64548b982ba47ff35f2272e2e30dd85eeba950b))
([e64548b](https://code.castopod.org/ad-aures/castopod/commit/e64548b982ba47ff35f2272e2e30dd85eeba950b))
- replace slug field with interactive permalink component
([578022b](https://code.podlibre.org/podlibre/castopod-host/commit/578022b8c5163ffaf8db5870ed5ec9d5d9536477))
([578022b](https://code.castopod.org/ad-aures/castopod/commit/578022b8c5163ffaf8db5870ed5ec9d5d9536477))
- restyle episode and person cards + add focus style to interactive elements for
a11y
([a505a1d](https://code.podlibre.org/podlibre/castopod-host/commit/a505a1de56e8e3056379bd60d0595f432e294728))
([a505a1d](https://code.castopod.org/ad-aures/castopod/commit/a505a1de56e8e3056379bd60d0595f432e294728))
- **rss:** add ˂podcast:guid˃ tag for channel
([1fab10e](https://code.podlibre.org/podlibre/castopod-host/commit/1fab10eb0d63bb7c3edf34ffe691e2aec2c2e43c))
([1fab10e](https://code.castopod.org/ad-aures/castopod/commit/1fab10eb0d63bb7c3edf34ffe691e2aec2c2e43c))
- **rss:** add podcast-namespace tags for platforms + previousUrl tag
([dbba8dc](https://code.podlibre.org/podlibre/castopod-host/commit/dbba8dc58133967c778514268cbfed8098ed1dbc)),
closes [#73](https://code.podlibre.org/podlibre/castopod-host/issues/73)
[#75](https://code.podlibre.org/podlibre/castopod-host/issues/75)
[#76](https://code.podlibre.org/podlibre/castopod-host/issues/76)
[#80](https://code.podlibre.org/podlibre/castopod-host/issues/80)
([dbba8dc](https://code.castopod.org/ad-aures/castopod/commit/dbba8dc58133967c778514268cbfed8098ed1dbc)),
closes [#73](https://code.castopod.org/ad-aures/castopod/issues/73)
[#75](https://code.castopod.org/ad-aures/castopod/issues/75)
[#76](https://code.castopod.org/ad-aures/castopod/issues/76)
[#80](https://code.castopod.org/ad-aures/castopod/issues/80)
- **rss:** add podcast:comments tag to link to episode comments
([32e8c7c](https://code.podlibre.org/podlibre/castopod-host/commit/32e8c7c16a61ffe08e2f3bfbdeda556811a0358c))
([32e8c7c](https://code.castopod.org/ad-aures/castopod/commit/32e8c7c16a61ffe08e2f3bfbdeda556811a0358c))
- **rss:** add podcast:location tag
([c0a2282](https://code.podlibre.org/podlibre/castopod-host/commit/c0a22829bd87d48535a86e60c6cd7280e44683a2))
([c0a2282](https://code.castopod.org/ad-aures/castopod/commit/c0a22829bd87d48535a86e60c6cd7280e44683a2))
- **rss:** add soundbites according to the podcastindex specs
([6b34617](https://code.podlibre.org/podlibre/castopod-host/commit/6b34617d07c70522cb941e96d91d9987493413eb)),
closes [#83](https://code.podlibre.org/podlibre/castopod-host/issues/83)
([6b34617](https://code.castopod.org/ad-aures/castopod/commit/6b34617d07c70522cb941e96d91d9987493413eb)),
closes [#83](https://code.castopod.org/ad-aures/castopod/issues/83)
- **rss:** add transcript and chapters support
([e769d83](https://code.podlibre.org/podlibre/castopod-host/commit/e769d83a932c169e52a630a17cd4dd8ac5cebaf6)),
closes [#72](https://code.podlibre.org/podlibre/castopod-host/issues/72)
[#82](https://code.podlibre.org/podlibre/castopod-host/issues/82)
([e769d83](https://code.castopod.org/ad-aures/castopod/commit/e769d83a932c169e52a630a17cd4dd8ac5cebaf6)),
closes [#72](https://code.castopod.org/ad-aures/castopod/issues/72)
[#82](https://code.castopod.org/ad-aures/castopod/issues/82)
- **rss:** generate rss feed from podcast entity
([c815ecd](https://code.podlibre.org/podlibre/castopod-host/commit/c815ecd6640931fee0895f80908a3ddfac482666))
([c815ecd](https://code.castopod.org/ad-aures/castopod/commit/c815ecd6640931fee0895f80908a3ddfac482666))
- **rss:** update monetization tag so that it meets PodcastIndex requirements
([4c7ecbe](https://code.podlibre.org/podlibre/castopod-host/commit/4c7ecbee83950e5f9f2482cedaab18a1ac9bfc9e))
([4c7ecbe](https://code.castopod.org/ad-aures/castopod/commit/4c7ecbee83950e5f9f2482cedaab18a1ac9bfc9e))
- **select:** enhance select input with choices.js
([910d457](https://code.podlibre.org/podlibre/castopod-host/commit/910d457cf843e0fc334b3505a4727d51633395ac))
([910d457](https://code.castopod.org/ad-aures/castopod/commit/910d457cf843e0fc334b3505a4727d51633395ac))
- set app parameter forceGlobalSecureRequests = true forcing requests to go
through https
([d9dff1b](https://code.podlibre.org/podlibre/castopod-host/commit/d9dff1b8bf89c8b526ad6cb89f98a1f160d49117))
([d9dff1b](https://code.castopod.org/ad-aures/castopod/commit/d9dff1b8bf89c8b526ad6cb89f98a1f160d49117))
- set podcast / episode description in the pages description meta tag
([1c4a504](https://code.podlibre.org/podlibre/castopod-host/commit/1c4a50442bea2d3449efce9c5ff1c80743152f55)),
closes [#44](https://code.podlibre.org/podlibre/castopod-host/issues/44)
([1c4a504](https://code.castopod.org/ad-aures/castopod/commit/1c4a50442bea2d3449efce9c5ff1c80743152f55)),
closes [#44](https://code.castopod.org/ad-aures/castopod/issues/44)
- **settings:** add general config for instance (site name, description and
icon)
([5c56f3e](https://code.podlibre.org/podlibre/castopod-host/commit/5c56f3e6f00a61af2ccf50811c155c325f2b10fa))
([5c56f3e](https://code.castopod.org/ad-aures/castopod/commit/5c56f3e6f00a61af2ccf50811c155c325f2b10fa))
- **settings:** add theme settings to set an accent color for all public pages
([5c529a8](https://code.podlibre.org/podlibre/castopod-host/commit/5c529a83aa6d6147d94e5aee996e6b0ab02f0ce4))
([5c529a8](https://code.castopod.org/ad-aures/castopod/commit/5c529a83aa6d6147d94e5aee996e6b0ab02f0ce4))
- simplify podcast page's layout for better ux
([2c0efc6](https://code.podlibre.org/podlibre/castopod-host/commit/2c0efc6563604dd067be88cfc9ddd88a01745e64))
([2c0efc6](https://code.castopod.org/ad-aures/castopod/commit/2c0efc6563604dd067be88cfc9ddd88a01745e64))
- **soundbites:** add soundbite list and creation forms with audio-clipper
component
([de19317](https://code.podlibre.org/podlibre/castopod-host/commit/de19317138a2106deb825c1eed7dda036ed7dac3))
([de19317](https://code.castopod.org/ad-aures/castopod/commit/de19317138a2106deb825c1eed7dda036ed7dac3))
- style file inputs using tailwind's file class
([8208ab6](https://code.podlibre.org/podlibre/castopod-host/commit/8208ab6785aae8c49f78eb9ac8cd53d77ec8e5e5))
([8208ab6](https://code.castopod.org/ad-aures/castopod/commit/8208ab6785aae8c49f78eb9ac8cd53d77ec8e5e5))
- **themes:** add ViewThemes library to set views in root themes folder
([7a27676](https://code.podlibre.org/podlibre/castopod-host/commit/7a276764e6a1ee3619d9d3488f6163215db75338))
([7a27676](https://code.castopod.org/ad-aures/castopod/commit/7a276764e6a1ee3619d9d3488f6163215db75338))
- **themes:** set different default banner per theme
([11c916f](https://code.podlibre.org/podlibre/castopod-host/commit/11c916fe433eb749ac32230c48e256057564cbb0))
([11c916f](https://code.castopod.org/ad-aures/castopod/commit/11c916fe433eb749ac32230c48e256057564cbb0))
- **themes:** set generic css variables for colors to enable instance themes
([a746a78](https://code.podlibre.org/podlibre/castopod-host/commit/a746a781b4bfc78209cf8302c6d7bb3cb452e446))
([a746a78](https://code.castopod.org/ad-aures/castopod/commit/a746a781b4bfc78209cf8302c6d7bb3cb452e446))
- toggle podcast sidebar on smaller screens
([f0205ec](https://code.podlibre.org/podlibre/castopod-host/commit/f0205ec274414e881cba40d6776126f05eaee583))
([f0205ec](https://code.castopod.org/ad-aures/castopod/commit/f0205ec274414e881cba40d6776126f05eaee583))
- **transcript:** parse srt subtitles into json file + add max file size info
below audio file input
([0098761](https://code.podlibre.org/podlibre/castopod-host/commit/00987610a068c8d6cdd4421ea16585fa037eb61a))
([0098761](https://code.castopod.org/ad-aures/castopod/commit/00987610a068c8d6cdd4421ea16585fa037eb61a))
- **ui:** create ViewComponents library to enable building class and view files
components
([94872f2](https://code.podlibre.org/podlibre/castopod-host/commit/94872f2338e6025c2f3770be256160838dae9003))
([94872f2](https://code.castopod.org/ad-aures/castopod/commit/94872f2338e6025c2f3770be256160838dae9003))
- update analytics so to meet IABv2 requirements
([03e23a2](https://code.podlibre.org/podlibre/castopod-host/commit/03e23a28bf9b1b73fba55352c36a8cd6cc8ae729)),
closes [#10](https://code.podlibre.org/podlibre/castopod-host/issues/10)
([03e23a2](https://code.castopod.org/ad-aures/castopod/commit/03e23a28bf9b1b73fba55352c36a8cd6cc8ae729)),
closes [#10](https://code.castopod.org/ad-aures/castopod/issues/10)
- update pine colors + create charts components
([a50abc1](https://code.podlibre.org/podlibre/castopod-host/commit/a50abc138d4997b564e3065b37504cda5ce62da6))
([a50abc1](https://code.castopod.org/ad-aures/castopod/commit/a50abc138d4997b564e3065b37504cda5ce62da6))
- **users:** add myth-auth to handle users crud + add admin gateway only
accessible by login
([c63a077](https://code.podlibre.org/podlibre/castopod-host/commit/c63a077618c61b4cde7f25ffc650a4b0e1495f44)),
closes [#11](https://code.podlibre.org/podlibre/castopod-host/issues/11)
([c63a077](https://code.castopod.org/ad-aures/castopod/commit/c63a077618c61b4cde7f25ffc650a4b0e1495f44)),
closes [#11](https://code.castopod.org/ad-aures/castopod/issues/11)
- **ux:** remove admin dashboard and redirect directly to podcast list
([27c48b8](https://code.podlibre.org/podlibre/castopod-host/commit/27c48b8fa930b33e5e15f0c8685e468e857ca9cd))
([27c48b8](https://code.castopod.org/ad-aures/castopod/commit/27c48b8fa930b33e5e15f0c8685e468e857ca9cd))
- **video-clip:** add video-clip page with video preview + logs
([42538dd](https://code.podlibre.org/podlibre/castopod-host/commit/42538dd7577be0ffe59b4fdfadbd76cc89e5ef30))
([42538dd](https://code.castopod.org/ad-aures/castopod/commit/42538dd7577be0ffe59b4fdfadbd76cc89e5ef30))
- **video-clip:** generate video clips in the bg using a cron job + add video
clip page + tidy up UI
([db0e427](https://code.podlibre.org/podlibre/castopod-host/commit/db0e4272bd6d307c562e1f961d2747cb62de0f35))
([db0e427](https://code.castopod.org/ad-aures/castopod/commit/db0e4272bd6d307c562e1f961d2747cb62de0f35))
- **video-clips:** add dimensions for portrait and squared formats
([3af404d](https://code.podlibre.org/podlibre/castopod-host/commit/3af404da3dd1901c78cc7e1778fc225f6716207d))
([3af404d](https://code.castopod.org/ad-aures/castopod/commit/3af404da3dd1901c78cc7e1778fc225f6716207d))
- **video-clips:** add new themes + add castopod logo as a watermark
([1d1490b](https://code.podlibre.org/podlibre/castopod-host/commit/1d1490b06a1f5ecb10b3b98a72efc55d09c10944))
([1d1490b](https://code.castopod.org/ad-aures/castopod/commit/1d1490b06a1f5ecb10b3b98a72efc55d09c10944))
- **video-clips:** add route for scheduled video clips + list video clips with
status
([2065ebb](https://code.podlibre.org/podlibre/castopod-host/commit/2065ebbee5e3d0f890ac90b55ca984f1d62a184c))
([2065ebb](https://code.castopod.org/ad-aures/castopod/commit/2065ebbee5e3d0f890ac90b55ca984f1d62a184c))
- **video-clips:** allow episodeNumbering text to stand in the indent of
episodeTitle paragraph
([71a063d](https://code.podlibre.org/podlibre/castopod-host/commit/71a063dac311cb21639801fbae6af7c5106c2699))
([71a063d](https://code.castopod.org/ad-aures/castopod/commit/71a063dac311cb21639801fbae6af7c5106c2699))
- **video-clips:** generate a 16:9 video using ffmpeg
([35aa7ea](https://code.podlibre.org/podlibre/castopod-host/commit/35aa7ea5d9a339b3e6f745137282268d69fe2231))
([35aa7ea](https://code.castopod.org/ad-aures/castopod/commit/35aa7ea5d9a339b3e6f745137282268d69fe2231))
- **video-clips:** generate subtitles clip using transcript json to have
subtitles accross video
([3ce07e4](https://code.podlibre.org/podlibre/castopod-host/commit/3ce07e455d171e29be30d8ad45055510eb8d363c))
([3ce07e4](https://code.castopod.org/ad-aures/castopod/commit/3ce07e455d171e29be30d8ad45055510eb8d363c))
- **video-clips:** replace hardcoded colors with config's theme colors
([e462abf](https://code.podlibre.org/podlibre/castopod-host/commit/e462abf6d660e41d2170c52caf45704008de58e9))
([e462abf](https://code.castopod.org/ad-aures/castopod/commit/e462abf6d660e41d2170c52caf45704008de58e9))
- **vite:** add vite config to decouple it from CI_ENVIRONMENT
([8721719](https://code.podlibre.org/podlibre/castopod-host/commit/8721719cd7cf32e94823541eafaba1e9309355a8))
([8721719](https://code.castopod.org/ad-aures/castopod/commit/8721719cd7cf32e94823541eafaba1e9309355a8))
- write id3v2 tags to episode's audio file
([4651d01](https://code.podlibre.org/podlibre/castopod-host/commit/4651d01a84ff3ea8433a8ae26cfd750a1ec9e88d))
([4651d01](https://code.castopod.org/ad-aures/castopod/commit/4651d01a84ff3ea8433a8ae26cfd750a1ec9e88d))
### Performance Improvements
- **cache:** update CI4 to use cache's deleteMatching method
([54b84f9](https://code.podlibre.org/podlibre/castopod-host/commit/54b84f96843af13f579fea49102c8c2ef81b0a54))
([54b84f9](https://code.castopod.org/ad-aures/castopod/commit/54b84f96843af13f579fea49102c8c2ef81b0a54))
- **cache:** use deleteMatching method to prevent forgetting cached elements in
models
([76afc0c](https://code.podlibre.org/podlibre/castopod-host/commit/76afc0cfa2feb087697bae4bc138e4956873dd62))
([76afc0c](https://code.castopod.org/ad-aures/castopod/commit/76afc0cfa2feb087697bae4bc138e4956873dd62))
- defer javascript + lazy load images for faster page loads
([f0685e4](https://code.podlibre.org/podlibre/castopod-host/commit/f0685e44799dfb494592ff97841c0ae035381db8))
([f0685e4](https://code.castopod.org/ad-aures/castopod/commit/f0685e44799dfb494592ff97841c0ae035381db8))
- **docker:** add redis caching service for development
([05ace8c](https://code.podlibre.org/podlibre/castopod-host/commit/05ace8cff2ef02d19abd40097ac5546dca6a54ca))
([05ace8c](https://code.castopod.org/ad-aures/castopod/commit/05ace8cff2ef02d19abd40097ac5546dca6a54ca))
### Reverts
- set deprecated config options back in App config
([433745f](https://code.podlibre.org/podlibre/castopod-host/commit/433745f194c73407999b207090478563283876a5))
([433745f](https://code.castopod.org/ad-aures/castopod/commit/433745f194c73407999b207090478563283876a5))
- **soundbites:** remove soundbite table from episode's public page
([5dc0f19](https://code.podlibre.org/podlibre/castopod-host/commit/5dc0f19656de0d764f627d6ae78a9e306c901835))
([5dc0f19](https://code.castopod.org/ad-aures/castopod/commit/5dc0f19656de0d764f627d6ae78a9e306c901835))
- use basic input file for episodes audio files instead of button for better UX
([d5f22fb](https://code.podlibre.org/podlibre/castopod-host/commit/d5f22fbb38c43d9b37df401eff655958a57cb40a))
([d5f22fb](https://code.castopod.org/ad-aures/castopod/commit/d5f22fbb38c43d9b37df401eff655958a57cb40a))
### BREAKING CHANGES
- **analytics:** analytics_podcasts_by_player table and analytics_podcasts
procedure were updated
# [1.0.0-alpha.80](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.79...v1.0.0-alpha.80) (2021-12-29)
# [1.0.0-alpha.80](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.79...v1.0.0-alpha.80) (2021-12-29)
### Bug Fixes
- add application/octet-stream mimetype to mp3 and m4a extensions to prevent
ext_in error
([339bef8](https://code.podlibre.org/podlibre/castopod-host/commit/339bef878e54983d86e91e6ff7a931a843d321b3)),
closes [#145](https://code.podlibre.org/podlibre/castopod-host/issues/145)
([339bef8](https://code.castopod.org/ad-aures/castopod/commit/339bef878e54983d86e91e6ff7a931a843d321b3)),
closes [#145](https://code.castopod.org/ad-aures/castopod/issues/145)
# [1.0.0-alpha.79](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.78...v1.0.0-alpha.79) (2021-12-20)
# [1.0.0-alpha.79](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.78...v1.0.0-alpha.79) (2021-12-20)
### Bug Fixes
- **import:** set episode and season numbers to null when not present in item
tag
([3211398](https://code.podlibre.org/podlibre/castopod-host/commit/3211398c78b1b28b76a46427ee07874bbf84a85d))
([3211398](https://code.castopod.org/ad-aures/castopod/commit/3211398c78b1b28b76a46427ee07874bbf84a85d))
# [1.0.0-alpha.78](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.77...v1.0.0-alpha.78) (2021-12-15)
# [1.0.0-alpha.78](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.77...v1.0.0-alpha.78) (2021-12-15)
### Bug Fixes
- **import:** add extension when downloading file without + truncate slug if too
long
([c5f18bb](https://code.podlibre.org/podlibre/castopod-host/commit/c5f18bb6dc08a758ff735454bbe9cfa45a68c09b))
([c5f18bb](https://code.castopod.org/ad-aures/castopod/commit/c5f18bb6dc08a758ff735454bbe9cfa45a68c09b))
# [1.0.0-alpha.77](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.76...v1.0.0-alpha.77) (2021-11-23)
# [1.0.0-alpha.77](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.76...v1.0.0-alpha.77) (2021-11-23)
### Bug Fixes
- **cors:** add preflight option routes for episode, podcast and status objects
([a281abf](https://code.podlibre.org/podlibre/castopod-host/commit/a281abfda475388a07943c169dab460cc2d4f944))
([a281abf](https://code.castopod.org/ad-aures/castopod/commit/a281abfda475388a07943c169dab460cc2d4f944))
- **podcast-import:** move guid attribute declaration for Episode entity to
include slug data
([5d02ae3](https://code.podlibre.org/podlibre/castopod-host/commit/5d02ae39908a9d743627135b372bf981134c4328))
([5d02ae3](https://code.castopod.org/ad-aures/castopod/commit/5d02ae39908a9d743627135b372bf981134c4328))
# [1.0.0-alpha.76](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.75...v1.0.0-alpha.76) (2021-10-26)
# [1.0.0-alpha.76](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.75...v1.0.0-alpha.76) (2021-10-26)
### Bug Fixes
- replace hardcoded style links with vite service + set default value for remote
transcript url
([3f2e056](https://code.podlibre.org/podlibre/castopod-host/commit/3f2e05608e43d47bbb518a9acfaf56ec3eefafb4)),
closes [#149](https://code.podlibre.org/podlibre/castopod-host/issues/149)
[#150](https://code.podlibre.org/podlibre/castopod-host/issues/150)
([3f2e056](https://code.castopod.org/ad-aures/castopod/commit/3f2e05608e43d47bbb518a9acfaf56ec3eefafb4)),
closes [#149](https://code.castopod.org/ad-aures/castopod/issues/149)
[#150](https://code.castopod.org/ad-aures/castopod/issues/150)
# [1.0.0-alpha.75](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.74...v1.0.0-alpha.75) (2021-10-05)
# [1.0.0-alpha.75](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.74...v1.0.0-alpha.75) (2021-10-05)
### Bug Fixes
- **rss:** cast number type values to string in rss_helper
([7180ae9](https://code.podlibre.org/podlibre/castopod-host/commit/7180ae9ec700930b69c04ed91f8eceea16ad77ce)),
closes [#148](https://code.podlibre.org/podlibre/castopod-host/issues/148)
([7180ae9](https://code.castopod.org/ad-aures/castopod/commit/7180ae9ec700930b69c04ed91f8eceea16ad77ce)),
closes [#148](https://code.castopod.org/ad-aures/castopod/issues/148)
# [1.0.0-alpha.74](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.73...v1.0.0-alpha.74) (2021-09-28)
# [1.0.0-alpha.74](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.73...v1.0.0-alpha.74) (2021-09-28)
### Features
- **platforms:** add missing newpodcastapps.com's platforms
([92dd370](https://code.podlibre.org/podlibre/castopod-host/commit/92dd370e2f9a464edd26cddcde96d0e16f91548d))
([92dd370](https://code.castopod.org/ad-aures/castopod/commit/92dd370e2f9a464edd26cddcde96d0e16f91548d))
# [1.0.0-alpha.73](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.72...v1.0.0-alpha.73) (2021-09-22)
# [1.0.0-alpha.73](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.72...v1.0.0-alpha.73) (2021-09-22)
### Bug Fixes
- **map:** update episode markers query to discard unpublished episodes
([b3caac4](https://code.podlibre.org/podlibre/castopod-host/commit/b3caac45b12a23e4289d00133d2ad7915d084c44))
([b3caac4](https://code.castopod.org/ad-aures/castopod/commit/b3caac45b12a23e4289d00133d2ad7915d084c44))
# [1.0.0-alpha.72](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.71...v1.0.0-alpha.72) (2021-09-20)
# [1.0.0-alpha.72](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.71...v1.0.0-alpha.72) (2021-09-20)
### Bug Fixes
- rename field status to task_status to get scheduled activities
([4ff82a5](https://code.podlibre.org/podlibre/castopod-host/commit/4ff82a5f0a38dbbc9e272fca7df70ea5a190e334))
([4ff82a5](https://code.castopod.org/ad-aures/castopod/commit/4ff82a5f0a38dbbc9e272fca7df70ea5a190e334))
# [1.0.0-alpha.71](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.70...v1.0.0-alpha.71) (2021-09-17)
# [1.0.0-alpha.71](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.70...v1.0.0-alpha.71) (2021-09-17)
### Features
- **map:** display geolocated episodes on a map page
([4357cc2](https://code.podlibre.org/podlibre/castopod-host/commit/4357cc25ccc585ce398035c1c25d566b6a9df775))
([4357cc2](https://code.castopod.org/ad-aures/castopod/commit/4357cc25ccc585ce398035c1c25d566b6a9df775))
# [1.0.0-alpha.70](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.69...v1.0.0-alpha.70) (2021-08-31)
# [1.0.0-alpha.70](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.69...v1.0.0-alpha.70) (2021-08-31)
### Bug Fixes
- **partner:** set correct image URL
([61554be](https://code.podlibre.org/podlibre/castopod-host/commit/61554be12a64d59ab99fab810b1b05632b408f3a))
([61554be](https://code.castopod.org/ad-aures/castopod/commit/61554be12a64d59ab99fab810b1b05632b408f3a))
# [1.0.0-alpha.69](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.68...v1.0.0-alpha.69) (2021-08-23)
# [1.0.0-alpha.69](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.68...v1.0.0-alpha.69) (2021-08-23)
### Bug Fixes
- **import:** cast description's SimpleXMLElement to string
([02d17be](https://code.podlibre.org/podlibre/castopod-host/commit/02d17be4ffe229fc6657207d31eba0543b5f1a4c))
([02d17be](https://code.castopod.org/ad-aures/castopod/commit/02d17be4ffe229fc6657207d31eba0543b5f1a4c))
# [1.0.0-alpha.68](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.67...v1.0.0-alpha.68) (2021-08-19)
# [1.0.0-alpha.68](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.67...v1.0.0-alpha.68) (2021-08-19)
### Bug Fixes
- **analytics:** redirect to mp3 file even when referer was not set
([9fc388d](https://code.podlibre.org/podlibre/castopod-host/commit/9fc388d154f29c335dedcd624abe8c1751762c07))
([9fc388d](https://code.castopod.org/ad-aures/castopod/commit/9fc388d154f29c335dedcd624abe8c1751762c07))
# [1.0.0-alpha.67](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.66...v1.0.0-alpha.67) (2021-07-24)
# [1.0.0-alpha.67](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.66...v1.0.0-alpha.67) (2021-07-24)
### Features
- allow cross origin requests on episode comments
([e12f95a](https://code.podlibre.org/podlibre/castopod-host/commit/e12f95aca13c6d54489a9cfd99d4cd2490fe83ab))
([e12f95a](https://code.castopod.org/ad-aures/castopod/commit/e12f95aca13c6d54489a9cfd99d4cd2490fe83ab))
# [1.0.0-alpha.66](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.65...v1.0.0-alpha.66) (2021-07-24)
# [1.0.0-alpha.66](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.65...v1.0.0-alpha.66) (2021-07-24)
### Features
- **rss:** add podcast:comments tag to link to episode comments
([32e8c7c](https://code.podlibre.org/podlibre/castopod-host/commit/32e8c7c16a61ffe08e2f3bfbdeda556811a0358c))
([32e8c7c](https://code.castopod.org/ad-aures/castopod/commit/32e8c7c16a61ffe08e2f3bfbdeda556811a0358c))
# [1.0.0-alpha.65](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.64...v1.0.0-alpha.65) (2021-07-22)
# [1.0.0-alpha.65](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.64...v1.0.0-alpha.65) (2021-07-22)
### Bug Fixes
- update conditions when checking for empty max_episodes and season_number
([fbad0b5](https://code.podlibre.org/podlibre/castopod-host/commit/fbad0b59f68c65eba2fdcd5a8d3b312b622e9a45))
([fbad0b5](https://code.castopod.org/ad-aures/castopod/commit/fbad0b59f68c65eba2fdcd5a8d3b312b622e9a45))
# [1.0.0-alpha.64](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.63...v1.0.0-alpha.64) (2021-07-12)
# [1.0.0-alpha.64](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.63...v1.0.0-alpha.64) (2021-07-12)
### Features
- **activitypub:** add Podcast actor and PodcastEpisode object with comments
([9e1e5d2](https://code.podlibre.org/podlibre/castopod-host/commit/9e1e5d2e862d6a3345d11ca7f96b955c76bfa013))
([9e1e5d2](https://code.castopod.org/ad-aures/castopod/commit/9e1e5d2e862d6a3345d11ca7f96b955c76bfa013))
# [1.0.0-alpha.63](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.62...v1.0.0-alpha.63) (2021-07-12)
# [1.0.0-alpha.63](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.62...v1.0.0-alpha.63) (2021-07-12)
### Features
- build hashed static files to renew browser cache
([37c54d2](https://code.podlibre.org/podlibre/castopod-host/commit/37c54d247749bdf8f528babd4a78f24d48051063)),
closes [#107](https://code.podlibre.org/podlibre/castopod-host/issues/107)
([37c54d2](https://code.castopod.org/ad-aures/castopod/commit/37c54d247749bdf8f528babd4a78f24d48051063)),
closes [#107](https://code.castopod.org/ad-aures/castopod/issues/107)
# [1.0.0-alpha.62](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.61...v1.0.0-alpha.62) (2021-07-02)
# [1.0.0-alpha.62](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.61...v1.0.0-alpha.62) (2021-07-02)
### Bug Fixes
- **episode:** replace guid's empty string value to null
([441052a](https://code.podlibre.org/podlibre/castopod-host/commit/441052af8d99e6e317edefd1e58ad71799357088))
([441052a](https://code.castopod.org/ad-aures/castopod/commit/441052af8d99e6e317edefd1e58ad71799357088))
# [1.0.0-alpha.61](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.60...v1.0.0-alpha.61) (2021-06-23)
# [1.0.0-alpha.61](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.60...v1.0.0-alpha.61) (2021-06-23)
### Bug Fixes
- **release:** add missing version number to castopod-host package
([8f3e9d9](https://code.podlibre.org/podlibre/castopod-host/commit/8f3e9d90c14545d3f84d4469b26a53db4554b4dc))
([8f3e9d9](https://code.castopod.org/ad-aures/castopod/commit/8f3e9d90c14545d3f84d4469b26a53db4554b4dc))
- **ux:** allow for empty message upon episode publication and warn user on
submit
([33d01b8](https://code.podlibre.org/podlibre/castopod-host/commit/33d01b8d4fd6ebf24e9f011aa705c456c846956c)),
closes [#129](https://code.podlibre.org/podlibre/castopod-host/issues/129)
([33d01b8](https://code.castopod.org/ad-aures/castopod/commit/33d01b8d4fd6ebf24e9f011aa705c456c846956c)),
closes [#129](https://code.castopod.org/ad-aures/castopod/issues/129)
# [1.0.0-alpha.60](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.59...v1.0.0-alpha.60) (2021-06-21)
# [1.0.0-alpha.60](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.59...v1.0.0-alpha.60) (2021-06-21)
### Features
- **rss:** add ˂podcast:guid˃ tag for channel
([1fab10e](https://code.podlibre.org/podlibre/castopod-host/commit/1fab10eb0d63bb7c3edf34ffe691e2aec2c2e43c))
([1fab10e](https://code.castopod.org/ad-aures/castopod/commit/1fab10eb0d63bb7c3edf34ffe691e2aec2c2e43c))
# [1.0.0-alpha.59](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.58...v1.0.0-alpha.59) (2021-06-15)
# [1.0.0-alpha.59](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.58...v1.0.0-alpha.59) (2021-06-15)
### Bug Fixes
- check that additional files are valid when creating episode
([eac5bc8](https://code.podlibre.org/podlibre/castopod-host/commit/eac5bc876de125e1fe08d1b89f767a04fc0fbfb6))
([eac5bc8](https://code.castopod.org/ad-aures/castopod/commit/eac5bc876de125e1fe08d1b89f767a04fc0fbfb6))
# [1.0.0-alpha.58](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.57...v1.0.0-alpha.58) (2021-06-11)
# [1.0.0-alpha.58](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.57...v1.0.0-alpha.58) (2021-06-11)
### Bug Fixes
- cast actor_id to pass as int to set_interact_as_actor() function
([56a8e5d](https://code.podlibre.org/podlibre/castopod-host/commit/56a8e5d7dd615322aeb007e730801c65d0b02e5c))
([56a8e5d](https://code.castopod.org/ad-aures/castopod/commit/56a8e5d7dd615322aeb007e730801c65d0b02e5c))
- **analytics:** set duration field to precise decimal as episode's audio file
duration
([d772685](https://code.podlibre.org/podlibre/castopod-host/commit/d77268540569b2be9d91d5e09aefb3ff5ac2b071))
([d772685](https://code.castopod.org/ad-aures/castopod/commit/d77268540569b2be9d91d5e09aefb3ff5ac2b071))
- **analytics:** update migrations to set decimal precision for latitude and
longitude
([714d6b5](https://code.podlibre.org/podlibre/castopod-host/commit/714d6b5d4950e52cf1c3170bb59954f98ffd48bd))
([714d6b5](https://code.castopod.org/ad-aures/castopod/commit/714d6b5d4950e52cf1c3170bb59954f98ffd48bd))
- check for database connection and podcasts table existence before redirecting
to install
([eb74e81](https://code.podlibre.org/podlibre/castopod-host/commit/eb74e81c3d93581e310b391cd029e62a0d690a8a))
([eb74e81](https://code.castopod.org/ad-aures/castopod/commit/eb74e81c3d93581e310b391cd029e62a0d690a8a))
- save transcript and chapters files to podcasts folder
([63f49c7](https://code.podlibre.org/podlibre/castopod-host/commit/63f49c719f672b615c5a8893d3868dffcd332e47))
([63f49c7](https://code.castopod.org/ad-aures/castopod/commit/63f49c719f672b615c5a8893d3868dffcd332e47))
- set cache expiration to next note publish to show note on publication date
([0a66de3](https://code.podlibre.org/podlibre/castopod-host/commit/0a66de3e6c17d4ac94ee8e13bd00ceaf64b1303e))
([0a66de3](https://code.castopod.org/ad-aures/castopod/commit/0a66de3e6c17d4ac94ee8e13bd00ceaf64b1303e))
- set episode description footer to null when empty value
([3a7d97d](https://code.podlibre.org/podlibre/castopod-host/commit/3a7d97d660046d80698611311ff3708110d2af82))
([3a7d97d](https://code.castopod.org/ad-aures/castopod/commit/3a7d97d660046d80698611311ff3708110d2af82))
- set location to null when getting empty string
([71b1b5f](https://code.podlibre.org/podlibre/castopod-host/commit/71b1b5f775af475b1dc78328330e277f565e41b6))
([71b1b5f](https://code.castopod.org/ad-aures/castopod/commit/71b1b5f775af475b1dc78328330e277f565e41b6))
- update condition in home controller to redirect to install page
([33f1b91](https://code.podlibre.org/podlibre/castopod-host/commit/33f1b91d55dd0652c979d50fc85879dbf88a4a42))
([33f1b91](https://code.castopod.org/ad-aures/castopod/commit/33f1b91d55dd0652c979d50fc85879dbf88a4a42))
- **activity-pub:** cache issues when navigating to activity stream urls
([7bcbfb3](https://code.podlibre.org/podlibre/castopod-host/commit/7bcbfb32f7cca08d111be46c7f1640e372d4a4b0))
([7bcbfb3](https://code.castopod.org/ad-aures/castopod/commit/7bcbfb32f7cca08d111be46c7f1640e372d4a4b0))
- **activity-pub:** get database records using new model instances
([92536dd](https://code.podlibre.org/podlibre/castopod-host/commit/92536ddb3812214a9c5682b92e547e5c1998a5d7))
([92536dd](https://code.castopod.org/ad-aures/castopod/commit/92536ddb3812214a9c5682b92e547e5c1998a5d7))
- **category:** remove uncategorized option to enforce users in choosing a
category
([8c64f25](https://code.podlibre.org/podlibre/castopod-host/commit/8c64f25a0e72fec03d25544797d32623b2276fce))
([8c64f25](https://code.castopod.org/ad-aures/castopod/commit/8c64f25a0e72fec03d25544797d32623b2276fce))
- **install:** redirect manually to install wizard on first visit
([2ceaaca](https://code.podlibre.org/podlibre/castopod-host/commit/2ceaaca44f1b82fc64d961e2fb4f4aaeade7e736))
([2ceaaca](https://code.castopod.org/ad-aures/castopod/commit/2ceaaca44f1b82fc64d961e2fb4f4aaeade7e736))
- **types:** update fake seeders types + fix bugs
([76a4bf3](https://code.podlibre.org/podlibre/castopod-host/commit/76a4bf344160df679db29e236e7df7822970fb60))
([76a4bf3](https://code.castopod.org/ad-aures/castopod/commit/76a4bf344160df679db29e236e7df7822970fb60))
- update broken contributor dropdown fields
([e5b7515](https://code.podlibre.org/podlibre/castopod-host/commit/e5b75150234bd7f19e01def93425d3bda7379dd3))
([e5b7515](https://code.castopod.org/ad-aures/castopod/commit/e5b75150234bd7f19e01def93425d3bda7379dd3))
- **ux:** redirect user to install page on database error in home page
([9017e30](https://code.podlibre.org/podlibre/castopod-host/commit/9017e30bf41bed8c2be65091bbc5fb1e63aef87a))
([9017e30](https://code.castopod.org/ad-aures/castopod/commit/9017e30bf41bed8c2be65091bbc5fb1e63aef87a))
- update condition in AnalyticsTrait
([fbc0967](https://code.podlibre.org/podlibre/castopod-host/commit/fbc0967caa81630d514ddb1b93b0834ebb4d913b))
([fbc0967](https://code.castopod.org/ad-aures/castopod/commit/fbc0967caa81630d514ddb1b93b0834ebb4d913b))
### Performance Improvements
- **cache:** use deleteMatching method to prevent forgetting cached elements in
models
([76afc0c](https://code.podlibre.org/podlibre/castopod-host/commit/76afc0cfa2feb087697bae4bc138e4956873dd62))
([76afc0c](https://code.castopod.org/ad-aures/castopod/commit/76afc0cfa2feb087697bae4bc138e4956873dd62))
### Reverts
- set deprecated config options back in App config
([433745f](https://code.podlibre.org/podlibre/castopod-host/commit/433745f194c73407999b207090478563283876a5))
([433745f](https://code.castopod.org/ad-aures/castopod/commit/433745f194c73407999b207090478563283876a5))
# [1.0.0-alpha.57](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.56...v1.0.0-alpha.57) (2021-05-12)
# [1.0.0-alpha.57](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.56...v1.0.0-alpha.57) (2021-05-12)
### Bug Fixes
- **follow:** add missing helpers to Actor controller
([ee53a73](https://code.podlibre.org/podlibre/castopod-host/commit/ee53a732dc12ebbf5706e14969749a12cfd9d559))
([ee53a73](https://code.castopod.org/ad-aures/castopod/commit/ee53a732dc12ebbf5706e14969749a12cfd9d559))
# [1.0.0-alpha.56](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.55...v1.0.0-alpha.56) (2021-05-12)
# [1.0.0-alpha.56](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.55...v1.0.0-alpha.56) (2021-05-12)
### Bug Fixes
- **rss:** use originalPath instead of originalMediaPath in Image library
([b4012b7](https://code.podlibre.org/podlibre/castopod-host/commit/b4012b7d2ed6b34b69ad767570dd33f0dc7db920))
([b4012b7](https://code.castopod.org/ad-aures/castopod/commit/b4012b7d2ed6b34b69ad767570dd33f0dc7db920))
# [1.0.0-alpha.55](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.54...v1.0.0-alpha.55) (2021-05-03)
# [1.0.0-alpha.55](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.54...v1.0.0-alpha.55) (2021-05-03)
### Features
- add remote_url alternative for transcript and chapters files
([3143c9a](https://code.podlibre.org/podlibre/castopod-host/commit/3143c9ad36e4cf1364205cf2be39c0c96f80fdd2))
([3143c9a](https://code.castopod.org/ad-aures/castopod/commit/3143c9ad36e4cf1364205cf2be39c0c96f80fdd2))
# [1.0.0-alpha.54](https://code.podlibre.org/podlibre/castopod-host/compare/v1.0.0-alpha.53...v1.0.0-alpha.54) (2021-05-03)
# [1.0.0-alpha.54](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.53...v1.0.0-alpha.54) (2021-05-03)
### Features
- set app parameter forceGlobalSecureRequests = true forcing requests to go
through https
([d9dff1b](https://code.podlibre.org/podlibre/castopod-host/commit/d9dff1b8bf89c8b526ad6cb89f98a1f160d49117))
([d9dff1b](https://code.castopod.org/ad-aures/castopod/commit/d9dff1b8bf89c8b526ad6cb89f98a1f160d49117))
- **ux:** remove admin dashboard and redirect directly to podcast list
([27c48b8](https://code.podlibre.org/podlibre/castopod-host/commit/27c48b8fa930b33e5e15f0c8685e468e857ca9cd))
([27c48b8](https://code.castopod.org/ad-aures/castopod/commit/27c48b8fa930b33e5e15f0c8685e468e857ca9cd))
- add cache to ActivityPub sql queries + cache activity and note pages
([2d297f4](https://code.podlibre.org/podlibre/castopod-host/commit/2d297f45b3d7ef6e8711875a0b9b908e878115fa))
([2d297f4](https://code.castopod.org/ad-aures/castopod/commit/2d297f45b3d7ef6e8711875a0b9b908e878115fa))
### Performance Improvements
- **cache:** update CI4 to use cache's deleteMatching method
([54b84f9](https://code.podlibre.org/podlibre/castopod-host/commit/54b84f96843af13f579fea49102c8c2ef81b0a54))
([54b84f9](https://code.castopod.org/ad-aures/castopod/commit/54b84f96843af13f579fea49102c8c2ef81b0a54))
- **docker:** add redis caching service for development
([05ace8c](https://code.podlibre.org/podlibre/castopod-host/commit/05ace8cff2ef02d19abd40097ac5546dca6a54ca))
([05ace8c](https://code.castopod.org/ad-aures/castopod/commit/05ace8cff2ef02d19abd40097ac5546dca6a54ca))
# [1.0.0-alpha.53](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.52...v1.0.0-alpha.53) (2021-04-16)
# [1.0.0-alpha.53](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.52...v1.0.0-alpha.53) (2021-04-16)
### Bug Fixes
- check that note has a preview_card_id before displaying it
([acb8b3a](https://code.podlibre.org/podlibre/castopod/commit/acb8b3a40172ccb184ffe544760601d756692e6c)),
closes [#114](https://code.podlibre.org/podlibre/castopod/issues/114)
([acb8b3a](https://code.castopod.org/ad-aures/castopod/commit/acb8b3a40172ccb184ffe544760601d756692e6c)),
closes [#114](https://code.castopod.org/ad-aures/castopod/issues/114)
# [1.0.0-alpha.52](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.51...v1.0.0-alpha.52) (2021-04-16)
# [1.0.0-alpha.52](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.51...v1.0.0-alpha.52) (2021-04-16)
### Bug Fixes
- **avatar:** use default avatar when no avatar url has been set
([9d23c7e](https://code.podlibre.org/podlibre/castopod/commit/9d23c7e7e142c6cf1a1418e37e41d711064593c4)),
closes [#111](https://code.podlibre.org/podlibre/castopod/issues/111)
([9d23c7e](https://code.castopod.org/ad-aures/castopod/commit/9d23c7e7e142c6cf1a1418e37e41d711064593c4)),
closes [#111](https://code.castopod.org/ad-aures/castopod/issues/111)
# [1.0.0-alpha.51](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.50...v1.0.0-alpha.51) (2021-04-15)
# [1.0.0-alpha.51](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.50...v1.0.0-alpha.51) (2021-04-15)
### Bug Fixes
- **interact-as:** set actor_id instead of podcast id upon login event
([5dfade7](https://code.podlibre.org/podlibre/castopod/commit/5dfade7cf37f339c56d2e577c679b88a1b1d9336)),
closes [#104](https://code.podlibre.org/podlibre/castopod/issues/104)
([5dfade7](https://code.castopod.org/ad-aures/castopod/commit/5dfade7cf37f339c56d2e577c679b88a1b1d9336)),
closes [#104](https://code.castopod.org/ad-aures/castopod/issues/104)
# [1.0.0-alpha.50](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.49...v1.0.0-alpha.50) (2021-04-14)
# [1.0.0-alpha.50](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.49...v1.0.0-alpha.50) (2021-04-14)
### Bug Fixes
- **persons:** prevent overflow of persons list by adding horizontal scroll
([9e8995d](https://code.podlibre.org/podlibre/castopod/commit/9e8995dc6e039032cc65f87895cf770f99e8b244))
([9e8995d](https://code.castopod.org/ad-aures/castopod/commit/9e8995dc6e039032cc65f87895cf770f99e8b244))
# [1.0.0-alpha.49](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.48...v1.0.0-alpha.49) (2021-04-12)
# [1.0.0-alpha.49](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.48...v1.0.0-alpha.49) (2021-04-12)
### Bug Fixes
- **multiselect:** add missing class names in choices options for purge to work
properly
([719538d](https://code.podlibre.org/podlibre/castopod/commit/719538d0ccb28af3c3c5e1a4b6468d4b772fe819))
([719538d](https://code.castopod.org/ad-aures/castopod/commit/719538d0ccb28af3c3c5e1a4b6468d4b772fe819))
# [1.0.0-alpha.48](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.47...v1.0.0-alpha.48) (2021-04-10)
# [1.0.0-alpha.48](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.47...v1.0.0-alpha.48) (2021-04-10)
### Bug Fixes
- **import-with-escaped-characters:** remove \CodeIgniter\HTTP\URI in
download_file, closes
[#103](https://code.podlibre.org/podlibre/castopod/issues/103)
([35b5be0](https://code.podlibre.org/podlibre/castopod/commit/35b5be095ff54d27acec1610a846ec0cdbdf1d65))
[#103](https://code.castopod.org/ad-aures/castopod/issues/103)
([35b5be0](https://code.castopod.org/ad-aures/castopod/commit/35b5be095ff54d27acec1610a846ec0cdbdf1d65))
# [1.0.0-alpha.47](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.46...v1.0.0-alpha.47) (2021-04-10)
# [1.0.0-alpha.47](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.46...v1.0.0-alpha.47) (2021-04-10)
### Bug Fixes
- **episodeCount:** add missing brackets to French language file
([c1b4112](https://code.podlibre.org/podlibre/castopod/commit/c1b411265ad9b06e95a8b097ecf73445b88dcb45))
([c1b4112](https://code.castopod.org/ad-aures/castopod/commit/c1b411265ad9b06e95a8b097ecf73445b88dcb45))
# [1.0.0-alpha.46](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.45...v1.0.0-alpha.46) (2021-04-09)
# [1.0.0-alpha.46](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.45...v1.0.0-alpha.46) (2021-04-09)
### Bug Fixes
- **episodes-page:** handle defaultQuery being null when no podcast episodes
([15183b7](https://code.podlibre.org/podlibre/castopod/commit/15183b7eab57dac007bcdfa8c3651239de1ae05a)),
closes [#100](https://code.podlibre.org/podlibre/castopod/issues/100)
([15183b7](https://code.castopod.org/ad-aures/castopod/commit/15183b7eab57dac007bcdfa8c3651239de1ae05a)),
closes [#100](https://code.castopod.org/ad-aures/castopod/issues/100)
# [1.0.0-alpha.45](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.44...v1.0.0-alpha.45) (2021-04-08)
# [1.0.0-alpha.45](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.44...v1.0.0-alpha.45) (2021-04-08)
### Bug Fixes
- add head request to analytics_hit route
([f0a2f0b](https://code.podlibre.org/podlibre/castopod/commit/f0a2f0bea491ca91976b351bb79837e95c9d094b))
([f0a2f0b](https://code.castopod.org/ad-aures/castopod/commit/f0a2f0bea491ca91976b351bb79837e95c9d094b))
# [1.0.0-alpha.44](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.43...v1.0.0-alpha.44) (2021-04-08)
# [1.0.0-alpha.44](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.43...v1.0.0-alpha.44) (2021-04-08)
### Bug Fixes
- **rss:** set ❬itunes:author❭ tag to owner_name if publisher not specified
([2271c14](https://code.podlibre.org/podlibre/castopod/commit/2271c1445b1ded12bc53b5d23b5e59d12b17c71a)),
closes [#96](https://code.podlibre.org/podlibre/castopod/issues/96)
([2271c14](https://code.castopod.org/ad-aures/castopod/commit/2271c1445b1ded12bc53b5d23b5e59d12b17c71a)),
closes [#96](https://code.castopod.org/ad-aures/castopod/issues/96)
# [1.0.0-alpha.43](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.42...v1.0.0-alpha.43) (2021-04-08)
# [1.0.0-alpha.43](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.42...v1.0.0-alpha.43) (2021-04-08)
### Bug Fixes
- **episode-form:** show warning to set `memory_limit`, `upload_max_filesize` &
`post_max_size`
([3b3c218](https://code.podlibre.org/podlibre/castopod/commit/3b3c218b9c868e9f12c54d7670e69d84c9ee79c0)),
closes [#5](https://code.podlibre.org/podlibre/castopod/issues/5)
[#86](https://code.podlibre.org/podlibre/castopod/issues/86)
([3b3c218](https://code.castopod.org/ad-aures/castopod/commit/3b3c218b9c868e9f12c54d7670e69d84c9ee79c0)),
closes [#5](https://code.castopod.org/ad-aures/castopod/issues/5)
[#86](https://code.castopod.org/ad-aures/castopod/issues/86)
# [1.0.0-alpha.42](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.41...v1.0.0-alpha.42) (2021-04-02)
# [1.0.0-alpha.42](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.41...v1.0.0-alpha.42) (2021-04-02)
### Features
- **fediverse:** implement activitypub protocols + update user interface
([2f525c0](https://code.podlibre.org/podlibre/castopod/commit/2f525c0f6e44d320bff16e22c223481923ba683e)),
closes [#69](https://code.podlibre.org/podlibre/castopod/issues/69)
[#65](https://code.podlibre.org/podlibre/castopod/issues/65)
[#85](https://code.podlibre.org/podlibre/castopod/issues/85)
[#51](https://code.podlibre.org/podlibre/castopod/issues/51)
[#91](https://code.podlibre.org/podlibre/castopod/issues/91)
[#92](https://code.podlibre.org/podlibre/castopod/issues/92)
[#88](https://code.podlibre.org/podlibre/castopod/issues/88)
([2f525c0](https://code.castopod.org/ad-aures/castopod/commit/2f525c0f6e44d320bff16e22c223481923ba683e)),
closes [#69](https://code.castopod.org/ad-aures/castopod/issues/69)
[#65](https://code.castopod.org/ad-aures/castopod/issues/65)
[#85](https://code.castopod.org/ad-aures/castopod/issues/85)
[#51](https://code.castopod.org/ad-aures/castopod/issues/51)
[#91](https://code.castopod.org/ad-aures/castopod/issues/91)
[#92](https://code.castopod.org/ad-aures/castopod/issues/92)
[#88](https://code.castopod.org/ad-aures/castopod/issues/88)
# [1.0.0-alpha.41](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.40...v1.0.0-alpha.41) (2021-03-30)
# [1.0.0-alpha.41](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.40...v1.0.0-alpha.41) (2021-03-30)
### Features
- **partner:** add link and image in episode description
([ad07bb9](https://code.podlibre.org/podlibre/castopod/commit/ad07bb9330dc9493813368e969e1f3a3def44614))
([ad07bb9](https://code.castopod.org/ad-aures/castopod/commit/ad07bb9330dc9493813368e969e1f3a3def44614))
# [1.0.0-alpha.40](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.39...v1.0.0-alpha.40) (2021-03-19)
# [1.0.0-alpha.40](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.39...v1.0.0-alpha.40) (2021-03-19)
### Features
- **custom-rss:** add custom xml tag injection in rss feed for ❬channel❭ and
❬item❭
([6ecdaad](https://code.podlibre.org/podlibre/castopod/commit/6ecdaad911d06b7f7a2b7d24710968c7eb9118f6))
([6ecdaad](https://code.castopod.org/ad-aures/castopod/commit/6ecdaad911d06b7f7a2b7d24710968c7eb9118f6))
# [1.0.0-alpha.39](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.38...v1.0.0-alpha.39) (2021-03-01)
# [1.0.0-alpha.39](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.38...v1.0.0-alpha.39) (2021-03-01)
### Bug Fixes
- **embeddable-player:** enable any ancestor when X-Frame-Options is set on
server
([44a4962](https://code.podlibre.org/podlibre/castopod/commit/44a4962e0b7e3ed87e9914b4e7792a0d52330ff8))
([44a4962](https://code.castopod.org/ad-aures/castopod/commit/44a4962e0b7e3ed87e9914b4e7792a0d52330ff8))
# [1.0.0-alpha.38](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.37...v1.0.0-alpha.38) (2021-02-27)
# [1.0.0-alpha.38](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.37...v1.0.0-alpha.38) (2021-02-27)
### Features
- **embeddable-player:** add embeddable player widget
([141788f](https://code.podlibre.org/podlibre/castopod/commit/141788fa089f9dedc8956c64ca515a4a4625f904))
([141788f](https://code.castopod.org/ad-aures/castopod/commit/141788fa089f9dedc8956c64ca515a4a4625f904))
# [1.0.0-alpha.37](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.36...v1.0.0-alpha.37) (2021-02-17)
# [1.0.0-alpha.37](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.36...v1.0.0-alpha.37) (2021-02-17)
### Bug Fixes
- **import:** remove query string from files url
([109c4aa](https://code.podlibre.org/podlibre/castopod/commit/109c4aa1afb72dd8b99c0302d74a7fef5a38638e))
([109c4aa](https://code.castopod.org/ad-aures/castopod/commit/109c4aa1afb72dd8b99c0302d74a7fef5a38638e))
# [1.0.0-alpha.36](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.35...v1.0.0-alpha.36) (2021-02-16)
# [1.0.0-alpha.36](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.35...v1.0.0-alpha.36) (2021-02-16)
### Features
- **platforms:** add pod.link
([3d7a232](https://code.podlibre.org/podlibre/castopod/commit/3d7a2320ddd116e4a311605421126aff57243219))
([3d7a232](https://code.castopod.org/ad-aures/castopod/commit/3d7a2320ddd116e4a311605421126aff57243219))
# [1.0.0-alpha.35](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.34...v1.0.0-alpha.35) (2021-02-12)
# [1.0.0-alpha.35](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.34...v1.0.0-alpha.35) (2021-02-12)
### Bug Fixes
- **admin:** save block and lock switches
([b66c0af](https://code.podlibre.org/podlibre/castopod/commit/b66c0afc8fab2e338402a9a4f8105e5f5459e208))
([b66c0af](https://code.castopod.org/ad-aures/castopod/commit/b66c0afc8fab2e338402a9a4f8105e5f5459e208))
# [1.0.0-alpha.34](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.33...v1.0.0-alpha.34) (2021-02-11)
# [1.0.0-alpha.34](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.33...v1.0.0-alpha.34) (2021-02-11)
### Bug Fixes
- **rss-import:** add Castopod user-agent, handle redirects for downloaded
files, add Content namespace
([214243b](https://code.podlibre.org/podlibre/castopod/commit/214243b3fec4937e45ef1ceaba1149004cdf3b44))
([214243b](https://code.castopod.org/ad-aures/castopod/commit/214243b3fec4937e45ef1ceaba1149004cdf3b44))
# [1.0.0-alpha.33](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.32...v1.0.0-alpha.33) (2021-02-10)
# [1.0.0-alpha.33](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.32...v1.0.0-alpha.33) (2021-02-10)
### Features
- **platforms:** add helloasso
([16cb993](https://code.podlibre.org/podlibre/castopod/commit/16cb993ee6e28987a840fc27a9c2c73794c67697))
([16cb993](https://code.castopod.org/ad-aures/castopod/commit/16cb993ee6e28987a840fc27a9c2c73794c67697))
# [1.0.0-alpha.32](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.31...v1.0.0-alpha.32) (2021-02-10)
# [1.0.0-alpha.32](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.31...v1.0.0-alpha.32) (2021-02-10)
### Features
- **person:** add podcastindex.org namespace person tag
([8acd011](https://code.podlibre.org/podlibre/castopod/commit/8acd011f13e99492ef4b44b327685bb006fe5f8f))
([8acd011](https://code.castopod.org/ad-aures/castopod/commit/8acd011f13e99492ef4b44b327685bb006fe5f8f))
# [1.0.0-alpha.31](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.30...v1.0.0-alpha.31) (2020-12-23)
# [1.0.0-alpha.31](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.30...v1.0.0-alpha.31) (2020-12-23)
### Features
- **rss:** add podcast:location tag
([c0a2282](https://code.podlibre.org/podlibre/castopod/commit/c0a22829bd87d48535a86e60c6cd7280e44683a2))
([c0a2282](https://code.castopod.org/ad-aures/castopod/commit/c0a22829bd87d48535a86e60c6cd7280e44683a2))
# [1.0.0-alpha.30](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.29...v1.0.0-alpha.30) (2020-12-21)
# [1.0.0-alpha.30](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.29...v1.0.0-alpha.30) (2020-12-21)
### Features
- **rss:** update monetization tag so that it meets PodcastIndex requirements
([4c7ecbe](https://code.podlibre.org/podlibre/castopod/commit/4c7ecbee83950e5f9f2482cedaab18a1ac9bfc9e))
([4c7ecbe](https://code.castopod.org/ad-aures/castopod/commit/4c7ecbee83950e5f9f2482cedaab18a1ac9bfc9e))
# [1.0.0-alpha.29](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.28...v1.0.0-alpha.29) (2020-12-10)
# [1.0.0-alpha.29](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.28...v1.0.0-alpha.29) (2020-12-10)
### Bug Fixes
- **episodes:** add publication status + set publication date to null when none
has been set
([d882981](https://code.podlibre.org/podlibre/castopod/commit/d882981b3a86c81921ce6b07d4cf61fc13983689)),
closes [#70](https://code.podlibre.org/podlibre/castopod/issues/70)
([d882981](https://code.castopod.org/ad-aures/castopod/commit/d882981b3a86c81921ce6b07d4cf61fc13983689)),
closes [#70](https://code.castopod.org/ad-aures/castopod/issues/70)
### Reverts
- **soundbites:** remove soundbite table from episode's public page
([5dc0f19](https://code.podlibre.org/podlibre/castopod/commit/5dc0f19656de0d764f627d6ae78a9e306c901835))
([5dc0f19](https://code.castopod.org/ad-aures/castopod/commit/5dc0f19656de0d764f627d6ae78a9e306c901835))
# [1.0.0-alpha.28](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.27...v1.0.0-alpha.28) (2020-12-07)
# [1.0.0-alpha.28](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.27...v1.0.0-alpha.28) (2020-12-07)
### Features
- **rss:** add soundbites according to the podcastindex specs
([6b34617](https://code.podlibre.org/podlibre/castopod/commit/6b34617d07c70522cb941e96d91d9987493413eb)),
closes [#83](https://code.podlibre.org/podlibre/castopod/issues/83)
([6b34617](https://code.castopod.org/ad-aures/castopod/commit/6b34617d07c70522cb941e96d91d9987493413eb)),
closes [#83](https://code.castopod.org/ad-aures/castopod/issues/83)
# [1.0.0-alpha.27](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.26...v1.0.0-alpha.27) (2020-12-07)
# [1.0.0-alpha.27](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.26...v1.0.0-alpha.27) (2020-12-07)
### Features
- **platforms:** add AntennaPod
([53e9cfd](https://code.podlibre.org/podlibre/castopod/commit/53e9cfd61c794b1539e9d4691d3c4e73c4b7aaa7))
([53e9cfd](https://code.castopod.org/ad-aures/castopod/commit/53e9cfd61c794b1539e9d4691d3c4e73c4b7aaa7))
# [1.0.0-alpha.26](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.25...v1.0.0-alpha.26) (2020-11-30)
# [1.0.0-alpha.26](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.25...v1.0.0-alpha.26) (2020-11-30)
### Bug Fixes
- **analytics:** update service management so that it works with new OPAWG slug
values
([7fe9d42](https://code.podlibre.org/podlibre/castopod/commit/7fe9d42500ade2c6fa3ff4365b4affc475af0e51))
([7fe9d42](https://code.castopod.org/ad-aures/castopod/commit/7fe9d42500ade2c6fa3ff4365b4affc475af0e51))
# [1.0.0-alpha.25](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.24...v1.0.0-alpha.25) (2020-11-30)
# [1.0.0-alpha.25](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.24...v1.0.0-alpha.25) (2020-11-30)
### Features
- **platforms:** add podfriend
([9fdc8d3](https://code.podlibre.org/podlibre/castopod/commit/9fdc8d32930234c7ffd2be6892be57febcef1086))
([9fdc8d3](https://code.castopod.org/ad-aures/castopod/commit/9fdc8d32930234c7ffd2be6892be57febcef1086))
# [1.0.0-alpha.24](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.23...v1.0.0-alpha.24) (2020-11-26)
# [1.0.0-alpha.24](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.23...v1.0.0-alpha.24) (2020-11-26)
### Features
- **monetization:** add Web Monetization support
([96a6026](https://code.podlibre.org/podlibre/castopod/commit/96a6026f1db452085360f5fe248de82a2ec06468))
([96a6026](https://code.castopod.org/ad-aures/castopod/commit/96a6026f1db452085360f5fe248de82a2ec06468))
# [1.0.0-alpha.23](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.22...v1.0.0-alpha.23) (2020-11-24)
# [1.0.0-alpha.23](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.22...v1.0.0-alpha.23) (2020-11-24)
### Bug Fixes
- define podcastNamespaceLink value
([0d744d2](https://code.podlibre.org/podlibre/castopod/commit/0d744d212df0d070ceea185068eaf2746e1ccd48))
([0d744d2](https://code.castopod.org/ad-aures/castopod/commit/0d744d212df0d070ceea185068eaf2746e1ccd48))
# [1.0.0-alpha.22](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.21...v1.0.0-alpha.22) (2020-11-24)
# [1.0.0-alpha.22](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.21...v1.0.0-alpha.22) (2020-11-24)
### Features
- **rss:** add transcript and chapters support
([e769d83](https://code.podlibre.org/podlibre/castopod/commit/e769d83a932c169e52a630a17cd4dd8ac5cebaf6)),
closes [#72](https://code.podlibre.org/podlibre/castopod/issues/72)
[#82](https://code.podlibre.org/podlibre/castopod/issues/82)
([e769d83](https://code.castopod.org/ad-aures/castopod/commit/e769d83a932c169e52a630a17cd4dd8ac5cebaf6)),
closes [#72](https://code.castopod.org/ad-aures/castopod/issues/72)
[#82](https://code.castopod.org/ad-aures/castopod/issues/82)
# [1.0.0-alpha.21](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.20...v1.0.0-alpha.21) (2020-11-24)
# [1.0.0-alpha.21](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.20...v1.0.0-alpha.21) (2020-11-24)
### Features
- **platforms:** add Fediverse and some funding platforms, add link on logo
([afc3d50](https://code.podlibre.org/podlibre/castopod/commit/afc3d50289bb4173e0697d109ffe72f6814b93d1))
([afc3d50](https://code.castopod.org/ad-aures/castopod/commit/afc3d50289bb4173e0697d109ffe72f6814b93d1))
# [1.0.0-alpha.20](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.19...v1.0.0-alpha.20) (2020-11-24)
# [1.0.0-alpha.20](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.19...v1.0.0-alpha.20) (2020-11-24)
### Bug Fixes
- **import:** use <image><url> tag when no <itunes:image> is present
([20e607a](https://code.podlibre.org/podlibre/castopod/commit/20e607afb755bc75056041738fa7cbf6723d754c))
([20e607a](https://code.castopod.org/ad-aures/castopod/commit/20e607afb755bc75056041738fa7cbf6723d754c))
### Features
- **rss:** add podcast-namespace tags for platforms + previousUrl tag
([dbba8dc](https://code.podlibre.org/podlibre/castopod/commit/dbba8dc58133967c778514268cbfed8098ed1dbc)),
closes [#73](https://code.podlibre.org/podlibre/castopod/issues/73)
[#75](https://code.podlibre.org/podlibre/castopod/issues/75)
[#76](https://code.podlibre.org/podlibre/castopod/issues/76)
[#80](https://code.podlibre.org/podlibre/castopod/issues/80)
([dbba8dc](https://code.castopod.org/ad-aures/castopod/commit/dbba8dc58133967c778514268cbfed8098ed1dbc)),
closes [#73](https://code.castopod.org/ad-aures/castopod/issues/73)
[#75](https://code.castopod.org/ad-aures/castopod/issues/75)
[#76](https://code.castopod.org/ad-aures/castopod/issues/76)
[#80](https://code.castopod.org/ad-aures/castopod/issues/80)
# [1.0.0-alpha.19](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.18...v1.0.0-alpha.19) (2020-11-13)
# [1.0.0-alpha.19](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.18...v1.0.0-alpha.19) (2020-11-13)
### Bug Fixes
- handle HEAD requests on podcast_feed route
([74b2640](https://code.podlibre.org/podlibre/castopod/commit/74b2640f2a25c4cd6fd8835fc492c2a6893d4950)),
closes [#79](https://code.podlibre.org/podlibre/castopod/issues/79)
([74b2640](https://code.castopod.org/ad-aures/castopod/commit/74b2640f2a25c4cd6fd8835fc492c2a6893d4950)),
closes [#79](https://code.castopod.org/ad-aures/castopod/issues/79)
# [1.0.0-alpha.18](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.17...v1.0.0-alpha.18) (2020-11-09)
# [1.0.0-alpha.18](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.17...v1.0.0-alpha.18) (2020-11-09)
### Features
- **platforms:** add Podcast Index
([ad52b1c](https://code.podlibre.org/podlibre/castopod/commit/ad52b1cc2b7d0bc844970214d205961a7196b4a9))
([ad52b1c](https://code.castopod.org/ad-aures/castopod/commit/ad52b1cc2b7d0bc844970214d205961a7196b4a9))
# [1.0.0-alpha.17](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.16...v1.0.0-alpha.17) (2020-11-05)
# [1.0.0-alpha.17](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.16...v1.0.0-alpha.17) (2020-11-05)
### Bug Fixes
- **open-graph:** replace non existant episode description to podcast
description in podcast page
([b02584e](https://code.podlibre.org/podlibre/castopod/commit/b02584ee609af1ad1b5680cc28208d113eb0410b))
([b02584e](https://code.castopod.org/ad-aures/castopod/commit/b02584ee609af1ad1b5680cc28208d113eb0410b))
# [1.0.0-alpha.16](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.15...v1.0.0-alpha.16) (2020-11-04)
# [1.0.0-alpha.16](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.15...v1.0.0-alpha.16) (2020-11-04)
### Features
- add Open Graph and Twitter meta tags
([af970b8](https://code.podlibre.org/podlibre/castopod/commit/af970b8bac949e4c63047e04aca1b7403a4e8deb)),
closes [#41](https://code.podlibre.org/podlibre/castopod/issues/41)
([af970b8](https://code.castopod.org/ad-aures/castopod/commit/af970b8bac949e4c63047e04aca1b7403a4e8deb)),
closes [#41](https://code.castopod.org/ad-aures/castopod/issues/41)
# [1.0.0-alpha.15](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.14...v1.0.0-alpha.15) (2020-11-03)
# [1.0.0-alpha.15](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.14...v1.0.0-alpha.15) (2020-11-03)
### Features
- **analytics:** add 'other' group to pie charts in order to display more
accurate data
([73acef9](https://code.podlibre.org/podlibre/castopod/commit/73acef933ff3485987afc5157de022910876fc12))
([73acef9](https://code.castopod.org/ad-aures/castopod/commit/73acef933ff3485987afc5157de022910876fc12))
# [1.0.0-alpha.14](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.13...v1.0.0-alpha.14) (2020-11-02)
# [1.0.0-alpha.14](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.13...v1.0.0-alpha.14) (2020-11-02)
### Features
- **analytics:** add weekday and hour bar charts
([8ab3132](https://code.podlibre.org/podlibre/castopod/commit/8ab313296bb4a254ab05e90b17d896039839b784))
([8ab3132](https://code.castopod.org/ad-aures/castopod/commit/8ab313296bb4a254ab05e90b17d896039839b784))
# [1.0.0-alpha.13](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.12...v1.0.0-alpha.13) (2020-10-29)
# [1.0.0-alpha.13](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.12...v1.0.0-alpha.13) (2020-10-29)
### Bug Fixes
- **episodes-table:** set descriptions to be not null
([6774ec1](https://code.podlibre.org/podlibre/castopod/commit/6774ec10fa78527be6b7548ca1dc34ad0ada090c))
([6774ec1](https://code.castopod.org/ad-aures/castopod/commit/6774ec10fa78527be6b7548ca1dc34ad0ada090c))
### Features
- add episode_numbering() component helper to display episode and season numbers
([3f4a6bd](https://code.podlibre.org/podlibre/castopod/commit/3f4a6bd0b9f870f16107a41b102b6bf734868198))
([3f4a6bd](https://code.castopod.org/ad-aures/castopod/commit/3f4a6bd0b9f870f16107a41b102b6bf734868198))
- **episodes:** replace all audio file URL parameters with base64 encoded data
([e1f65cd](https://code.podlibre.org/podlibre/castopod/commit/e1f65cd3b53353a30d4ab6eb5312393cf04a1676))
([e1f65cd](https://code.castopod.org/ad-aures/castopod/commit/e1f65cd3b53353a30d4ab6eb5312393cf04a1676))
# [1.0.0-alpha.12](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.11...v1.0.0-alpha.12) (2020-10-26)
# [1.0.0-alpha.12](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.11...v1.0.0-alpha.12) (2020-10-26)
### Bug Fixes
- replace getWebEnclosureUrl with getEnclosureWebUrl
([8122cea](https://code.podlibre.org/podlibre/castopod/commit/8122ceaf8a70050f14b3078f28b024e7d7cdb9ac))
([8122cea](https://code.castopod.org/ad-aures/castopod/commit/8122ceaf8a70050f14b3078f28b024e7d7cdb9ac))
# [1.0.0-alpha.11](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.10...v1.0.0-alpha.11) (2020-10-26)
# [1.0.0-alpha.11](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.10...v1.0.0-alpha.11) (2020-10-26)
### Features
- add CDN url
([972bcbf](https://code.podlibre.org/podlibre/castopod/commit/972bcbf65ee119b8641ca3c4e5c0e8cf9ca8dd4f)),
closes [#37](https://code.podlibre.org/podlibre/castopod/issues/37)
([972bcbf](https://code.castopod.org/ad-aures/castopod/commit/972bcbf65ee119b8641ca3c4e5c0e8cf9ca8dd4f)),
closes [#37](https://code.castopod.org/ad-aures/castopod/issues/37)
# [1.0.0-alpha.10](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.9...v1.0.0-alpha.10) (2020-10-26)
# [1.0.0-alpha.10](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.9...v1.0.0-alpha.10) (2020-10-26)
### Bug Fixes
- **install:** redirect to host_url install route on instanceConfig validation
error
([99250b1](https://code.podlibre.org/podlibre/castopod/commit/99250b1868657c249a447399c7ebc69e00d43d1a))
([99250b1](https://code.castopod.org/ad-aures/castopod/commit/99250b1868657c249a447399c7ebc69e00d43d1a))
# [1.0.0-alpha.9](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.8...v1.0.0-alpha.9) (2020-10-26)
# [1.0.0-alpha.9](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.8...v1.0.0-alpha.9) (2020-10-26)
### Features
- display castopod version in admin footer
([9f2574e](https://code.podlibre.org/podlibre/castopod/commit/9f2574e6fbb61dac4e1a4252dff30017685da5f0)),
closes [#68](https://code.podlibre.org/podlibre/castopod/issues/68)
([9f2574e](https://code.castopod.org/ad-aures/castopod/commit/9f2574e6fbb61dac4e1a4252dff30017685da5f0)),
closes [#68](https://code.castopod.org/ad-aures/castopod/issues/68)
# [1.0.0-alpha.8](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.7...v1.0.0-alpha.8) (2020-10-22)
# [1.0.0-alpha.8](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.7...v1.0.0-alpha.8) (2020-10-22)
### Features
- **episodes:** schedule episode with future publication_date by using cache
expiration time
([4f1e773](https://code.podlibre.org/podlibre/castopod/commit/4f1e773c0f9e4c2597f6c1b0a4773dfb34b2f203)),
closes [#47](https://code.podlibre.org/podlibre/castopod/issues/47)
([4f1e773](https://code.castopod.org/ad-aures/castopod/commit/4f1e773c0f9e4c2597f6c1b0a4773dfb34b2f203)),
closes [#47](https://code.castopod.org/ad-aures/castopod/issues/47)
# [1.0.0-alpha.7](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.6...v1.0.0-alpha.7) (2020-10-21)
# [1.0.0-alpha.7](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.6...v1.0.0-alpha.7) (2020-10-21)
### Features
- **analytics:** add service name from rss user-agent
([7202b98](https://code.podlibre.org/podlibre/castopod/commit/7202b9867bd59aafa8c338a4230fb5e5c55b24c6))
([7202b98](https://code.castopod.org/ad-aures/castopod/commit/7202b9867bd59aafa8c338a4230fb5e5c55b24c6))
### BREAKING CHANGES
- **analytics:** analytics_podcasts_by_player table and analytics_podcasts
procedure were updated
# [1.0.0-alpha.6](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.5...v1.0.0-alpha.6) (2020-10-20)
# [1.0.0-alpha.6](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.5...v1.0.0-alpha.6) (2020-10-20)
### Bug Fixes
- **cache:** add locale for podcast and episode pages + clear some persisting
cache in models
([9cec8a8](https://code.podlibre.org/podlibre/castopod/commit/9cec8a81ccbb7239402fe6633dbc31979272302a)),
closes [#42](https://code.podlibre.org/podlibre/castopod/issues/42)
[#61](https://code.podlibre.org/podlibre/castopod/issues/61)
([9cec8a8](https://code.castopod.org/ad-aures/castopod/commit/9cec8a81ccbb7239402fe6633dbc31979272302a)),
closes [#42](https://code.castopod.org/ad-aures/castopod/issues/42)
[#61](https://code.castopod.org/ad-aures/castopod/issues/61)
# [1.0.0-alpha.5](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.4...v1.0.0-alpha.5) (2020-10-20)
# [1.0.0-alpha.5](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.4...v1.0.0-alpha.5) (2020-10-20)
### Features
- add lock podcast according to the Podcastindex podcast-namespace to prevent
unauthozized import
([72b3012](https://code.podlibre.org/podlibre/castopod/commit/72b301272e0b70ded3e2b237391909e3f152ad0b))
([72b3012](https://code.castopod.org/ad-aures/castopod/commit/72b301272e0b70ded3e2b237391909e3f152ad0b))
# [1.0.0-alpha.4](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.3...v1.0.0-alpha.4) (2020-10-20)
# [1.0.0-alpha.4](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.3...v1.0.0-alpha.4) (2020-10-20)
### Features
- **analytics:** add charts and data export
([78625c4](https://code.podlibre.org/podlibre/castopod/commit/78625c471b4f03a09bd42f72b82217e1f2d01cef))
([78625c4](https://code.castopod.org/ad-aures/castopod/commit/78625c471b4f03a09bd42f72b82217e1f2d01cef))
# [1.0.0-alpha.3](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.2...v1.0.0-alpha.3) (2020-10-19)
# [1.0.0-alpha.3](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.2...v1.0.0-alpha.3) (2020-10-19)
### Bug Fixes
- **analytics:** remove charts empty values + remove useless language cache
([1678794](https://code.podlibre.org/podlibre/castopod/commit/16787941539ba4014281a366789ea896a9cd2afc))
([1678794](https://code.castopod.org/ad-aures/castopod/commit/16787941539ba4014281a366789ea896a9cd2afc))
# [1.0.0-alpha.2](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.1...v1.0.0-alpha.2) (2020-10-19)
# [1.0.0-alpha.2](https://code.castopod.org/ad-aures/castopod/compare/v1.0.0-alpha.1...v1.0.0-alpha.2) (2020-10-19)
### Features
- add cumulative listening time charts
([588b4d2](https://code.podlibre.org/podlibre/castopod/commit/588b4d28da00bc12d02126e23181690f54d81716))
([588b4d2](https://code.castopod.org/ad-aures/castopod/commit/588b4d28da00bc12d02126e23181690f54d81716))
# 1.0.0-alpha.1 (2020-10-16)
### Bug Fixes
- add public/media folder to castopod bundle
([8053d35](https://code.podlibre.org/podlibre/castopod/commit/8053d3521b481872711dabaaf265d08b9bfbaa87)),
closes [#52](https://code.podlibre.org/podlibre/castopod/issues/52)
([8053d35](https://code.castopod.org/ad-aures/castopod/commit/8053d3521b481872711dabaaf265d08b9bfbaa87)),
closes [#52](https://code.castopod.org/ad-aures/castopod/issues/52)
- add where condition to get episode count without deleted episodes
([7661734](https://code.podlibre.org/podlibre/castopod/commit/7661734ed296654630f3668132671117519145dd)),
closes [#67](https://code.podlibre.org/podlibre/castopod/issues/67)
([7661734](https://code.castopod.org/ad-aures/castopod/commit/7661734ed296654630f3668132671117519145dd)),
closes [#67](https://code.castopod.org/ad-aures/castopod/issues/67)
- comment all cache clean after page update to prevent analytics cache deletion
([e6197a4](https://code.podlibre.org/podlibre/castopod/commit/e6197a4972a3cce3d67dd7972bb54f8720b8e5b7))
([e6197a4](https://code.castopod.org/ad-aures/castopod/commit/e6197a4972a3cce3d67dd7972bb54f8720b8e5b7))
- correct chart data
([4d3e9c8](https://code.podlibre.org/podlibre/castopod/commit/4d3e9c8c02cdc882e9fe1c29625695b6f83c820a))
([4d3e9c8](https://code.castopod.org/ad-aures/castopod/commit/4d3e9c8c02cdc882e9fe1c29625695b6f83c820a))
- correct percona compatibility issue
([e53f819](https://code.podlibre.org/podlibre/castopod/commit/e53f819264b2d6902996f11ffcbb7c99295a90ef))
([e53f819](https://code.castopod.org/ad-aures/castopod/commit/e53f819264b2d6902996f11ffcbb7c99295a90ef))
- correct php-fpm issues
([1ef55d7](https://code.podlibre.org/podlibre/castopod/commit/1ef55d7315bb44abe05f02ec8a84b6b6a557a9a0))
([1ef55d7](https://code.castopod.org/ad-aures/castopod/commit/1ef55d7315bb44abe05f02ec8a84b6b6a557a9a0))
- correct referrer bug
([ed69b2f](https://code.podlibre.org/podlibre/castopod/commit/ed69b2f5004ed1cd18bac824c08a0df01f5d2637))
([ed69b2f](https://code.castopod.org/ad-aures/castopod/commit/ed69b2f5004ed1cd18bac824c08a0df01f5d2637))
- correction for servers with low int precision
([31b7828](https://code.podlibre.org/podlibre/castopod/commit/31b7828e77519ef43e9bcfcbdf6c21712f97a571))
([31b7828](https://code.castopod.org/ad-aures/castopod/commit/31b7828e77519ef43e9bcfcbdf6c21712f97a571))
- declare typed properties in PHPDoc for php<7.4
([14dd44d](https://code.podlibre.org/podlibre/castopod/commit/14dd44d03d6db0d9ae4198db8e65c92a0e45cb31)),
closes [#23](https://code.podlibre.org/podlibre/castopod/issues/23)
([14dd44d](https://code.castopod.org/ad-aures/castopod/commit/14dd44d03d6db0d9ae4198db8e65c92a0e45cb31)),
closes [#23](https://code.castopod.org/ad-aures/castopod/issues/23)
- escape generated feed tag values and remove new lines from public pages meta
description
([6238a43](https://code.podlibre.org/podlibre/castopod/commit/6238a43863210afe8988ad7cf251e6bfc6c8557c)),
closes [#57](https://code.podlibre.org/podlibre/castopod/issues/57)
[#46](https://code.podlibre.org/podlibre/castopod/issues/46)
([6238a43](https://code.castopod.org/ad-aures/castopod/commit/6238a43863210afe8988ad7cf251e6bfc6c8557c)),
closes [#57](https://code.castopod.org/ad-aures/castopod/issues/57)
[#46](https://code.castopod.org/ad-aures/castopod/issues/46)
- fix layout bugs in admin and update translation files
([a834171](https://code.podlibre.org/podlibre/castopod/commit/a83417180cf61cdfadc5509b0aaa2fdb66592be3)),
closes [#40](https://code.podlibre.org/podlibre/castopod/issues/40)
([a834171](https://code.castopod.org/ad-aures/castopod/commit/a83417180cf61cdfadc5509b0aaa2fdb66592be3)),
closes [#40](https://code.castopod.org/ad-aures/castopod/issues/40)
- minor corrections
([13be386](https://code.podlibre.org/podlibre/castopod/commit/13be386842e94d9def1f7de4720931d8f6935171))
([13be386](https://code.castopod.org/ad-aures/castopod/commit/13be386842e94d9def1f7de4720931d8f6935171))
- move analytics to helper
([d311917](https://code.podlibre.org/podlibre/castopod/commit/d31191732e41aa106234b5ebe6e54ee02f0ce603))
([d311917](https://code.castopod.org/ad-aures/castopod/commit/d31191732e41aa106234b5ebe6e54ee02f0ce603))
- re-order graph values
([35f633b](https://code.podlibre.org/podlibre/castopod/commit/35f633b4c71c087d1ddc9bba9e9bbe18de09204f))
([35f633b](https://code.castopod.org/ad-aures/castopod/commit/35f633b4c71c087d1ddc9bba9e9bbe18de09204f))
- remove required for other_categories field and add podcast_id to latest
podcasts query
([5417be0](https://code.podlibre.org/podlibre/castopod/commit/5417be0049288489a19c7b575aa77bd1e2bc0243))
([5417be0](https://code.castopod.org/ad-aures/castopod/commit/5417be0049288489a19c7b575aa77bd1e2bc0243))
- rename issue_templates labels
([9f00305](https://code.podlibre.org/podlibre/castopod/commit/9f00305844e5a168e89d727fe29892b4ad5e48d6))
([9f00305](https://code.castopod.org/ad-aures/castopod/commit/9f00305844e5a168e89d727fe29892b4ad5e48d6))
- rename MyAccount controller file
([e109df3](https://code.podlibre.org/podlibre/castopod/commit/e109df3004a3a98d72de39532e062fff9917f50f)),
closes [#60](https://code.podlibre.org/podlibre/castopod/issues/60)
([e109df3](https://code.castopod.org/ad-aures/castopod/commit/e109df3004a3a98d72de39532e062fff9917f50f)),
closes [#60](https://code.castopod.org/ad-aures/castopod/issues/60)
- reorder fields as composite primary keys for analytics tables
([9660aa9](https://code.podlibre.org/podlibre/castopod/commit/9660aa97c8ffd4fe61f3a388d52b9ac5dd8e1d63))
([9660aa9](https://code.castopod.org/ad-aures/castopod/commit/9660aa97c8ffd4fe61f3a388d52b9ac5dd8e1d63))
- replace website key for webpages in breadcrumb translate file
([50e32ff](https://code.podlibre.org/podlibre/castopod/commit/50e32ff75636c1d4c5d945a267e884cb26ad7191))
([50e32ff](https://code.castopod.org/ad-aures/castopod/commit/50e32ff75636c1d4c5d945a267e884cb26ad7191))
- set episode duration translation to hardcoded english
([c39efc9](https://code.podlibre.org/podlibre/castopod/commit/c39efc9489180662edcebd142d4476c0617ea97f)),
closes [#64](https://code.podlibre.org/podlibre/castopod/issues/64)
([c39efc9](https://code.castopod.org/ad-aures/castopod/commit/c39efc9489180662edcebd142d4476c0617ea97f)),
closes [#64](https://code.castopod.org/ad-aures/castopod/issues/64)
- set episode guid upon episode creation
([ad8b153](https://code.podlibre.org/podlibre/castopod/commit/ad8b153f2a3b1a3b1751bf63785c4950e1516e6b)),
closes [#48](https://code.podlibre.org/podlibre/castopod/issues/48)
([ad8b153](https://code.castopod.org/ad-aures/castopod/commit/ad8b153f2a3b1a3b1751bf63785c4950e1516e6b)),
closes [#48](https://code.castopod.org/ad-aures/castopod/issues/48)
- update purgecss content path for php helper files
([eb70bb4](https://code.podlibre.org/podlibre/castopod/commit/eb70bb4f7078ff347aeb8f5dcc7896311d289466)),
closes [#59](https://code.podlibre.org/podlibre/castopod/issues/59)
([eb70bb4](https://code.castopod.org/ad-aures/castopod/commit/eb70bb4f7078ff347aeb8f5dcc7896311d289466)),
closes [#59](https://code.castopod.org/ad-aures/castopod/issues/59)
- **install:** redirect to input baseUrl after instance config
([2426af7](https://code.podlibre.org/podlibre/castopod/commit/2426af7de8c9d426aaf534ff17b67f71c2e9f374)),
closes [#53](https://code.podlibre.org/podlibre/castopod/issues/53)
([2426af7](https://code.castopod.org/ad-aures/castopod/commit/2426af7de8c9d426aaf534ff17b67f71c2e9f374)),
closes [#53](https://code.castopod.org/ad-aures/castopod/issues/53)
- **platforms:** display platform link only when visible is toggled on
([6e503c8](https://code.podlibre.org/podlibre/castopod/commit/6e503c8d6182987e48892370623183f871bbd1c1)),
closes [#39](https://code.podlibre.org/podlibre/castopod/issues/39)
([6e503c8](https://code.castopod.org/ad-aures/castopod/commit/6e503c8d6182987e48892370623183f871bbd1c1)),
closes [#39](https://code.castopod.org/ad-aures/castopod/issues/39)
- sort episodic podcasts by season
([d7b6794](https://code.podlibre.org/podlibre/castopod/commit/d7b6794f68f9a01fd606a407c6eb4c12d15dee74))
([d7b6794](https://code.castopod.org/ad-aures/castopod/commit/d7b6794f68f9a01fd606a407c6eb4c12d15dee74))
- update .htaccess for shared hosting config
([2379826](https://code.podlibre.org/podlibre/castopod/commit/2379826352e2f4b5060910bf9f29268610102f2e))
([2379826](https://code.castopod.org/ad-aures/castopod/commit/2379826352e2f4b5060910bf9f29268610102f2e))
- update iso-369 language table seeder
([0c90db4](https://code.podlibre.org/podlibre/castopod/commit/0c90db44c40de5af5b0b32b54489bda9424d9ef6))
([0c90db4](https://code.castopod.org/ad-aures/castopod/commit/0c90db44c40de5af5b0b32b54489bda9424d9ef6))
- **package.json:** update destination of postcss generation scripts
([21413f8](https://code.podlibre.org/podlibre/castopod/commit/21413f8af3b8a0ac01d8c6f15bcd7a63e524e964))
([21413f8](https://code.castopod.org/ad-aures/castopod/commit/21413f8af3b8a0ac01d8c6f15bcd7a63e524e964))
- use slash instead of backslash to call layout
([a80adb2](https://code.podlibre.org/podlibre/castopod/commit/a80adb22958fc0a38374cbce2d950a0042e699eb))
([a80adb2](https://code.castopod.org/ad-aures/castopod/commit/a80adb22958fc0a38374cbce2d950a0042e699eb))
### Features
- add alternate rss feed link tag to podcast page head
([a973c09](https://code.podlibre.org/podlibre/castopod/commit/a973c097d54a3d0186c4079b9d4d3e81aae38505)),
closes [#35](https://code.podlibre.org/podlibre/castopod/issues/35)
([a973c09](https://code.castopod.org/ad-aures/castopod/commit/a973c097d54a3d0186c4079b9d4d3e81aae38505)),
closes [#35](https://code.castopod.org/ad-aures/castopod/issues/35)
- add analytics and unknown useragents
([ec92e65](https://code.podlibre.org/podlibre/castopod/commit/ec92e65aa42e09b1df04600b52a0c679dfc494bb))
([ec92e65](https://code.castopod.org/ad-aures/castopod/commit/ec92e65aa42e09b1df04600b52a0c679dfc494bb))
- add breadcrumb in admin area
([7fb1de2](https://code.podlibre.org/podlibre/castopod/commit/7fb1de2cf3c97c4cd7afe3bd71bbe66041786ecd)),
closes [#17](https://code.podlibre.org/podlibre/castopod/issues/17)
([7fb1de2](https://code.castopod.org/ad-aures/castopod/commit/7fb1de2cf3c97c4cd7afe3bd71bbe66041786ecd)),
closes [#17](https://code.castopod.org/ad-aures/castopod/issues/17)
- add french translation
([196920d](https://code.podlibre.org/podlibre/castopod/commit/196920d62f1810b4c35f800d17d7f93627319091))
([196920d](https://code.castopod.org/ad-aures/castopod/commit/196920d62f1810b4c35f800d17d7f93627319091))
- add install wizard form to bootstrap database and create the first superadmin
user
([cba871c](https://code.podlibre.org/podlibre/castopod/commit/cba871c5df9f7120c44d9952456ebbd0d220669e)),
closes [#2](https://code.podlibre.org/podlibre/castopod/issues/2)
([cba871c](https://code.castopod.org/ad-aures/castopod/commit/cba871c5df9f7120c44d9952456ebbd0d220669e)),
closes [#2](https://code.castopod.org/ad-aures/castopod/issues/2)
- add ISO 3166 country codes
([97cd94b](https://code.podlibre.org/podlibre/castopod/commit/97cd94b47494b66faf43fbbe0748872da80020a4))
([97cd94b](https://code.castopod.org/ad-aures/castopod/commit/97cd94b47494b66faf43fbbe0748872da80020a4))
- add map analytics, add episodes analytics, clean analytics page layout,
translate countries
([07eae83](https://code.podlibre.org/podlibre/castopod/commit/07eae83a00d860e149359fae67d549488403d88b))
([07eae83](https://code.castopod.org/ad-aures/castopod/commit/07eae83a00d860e149359fae67d549488403d88b))
- add npm for js dependencies + move src/ files to root folder
([cbb83a6](https://code.podlibre.org/podlibre/castopod/commit/cbb83a6f308ac9357e9fb0cca5edae9d3fee5b48))
([cbb83a6](https://code.castopod.org/ad-aures/castopod/commit/cbb83a6f308ac9357e9fb0cca5edae9d3fee5b48))
- add pages table to store custom instance pages (eg. legal-notice, cookie
policy, etc.)
([9c224a8](https://code.podlibre.org/podlibre/castopod/commit/9c224a8ac6dd95f3c6c087a300fc8bac48e8090f)),
closes [#24](https://code.podlibre.org/podlibre/castopod/issues/24)
([9c224a8](https://code.castopod.org/ad-aures/castopod/commit/9c224a8ac6dd95f3c6c087a300fc8bac48e8090f)),
closes [#24](https://code.castopod.org/ad-aures/castopod/issues/24)
- add platform models
([a333d29](https://code.podlibre.org/podlibre/castopod/commit/a333d291966229a909c0851fd8b890ed97c48ceb))
([a333d29](https://code.castopod.org/ad-aures/castopod/commit/a333d291966229a909c0851fd8b890ed97c48ceb))
- add platforms form in podcast settings
([043f49c](https://code.podlibre.org/podlibre/castopod/commit/043f49c784bc007ca0fa756ca4ed2d3b08843ad9))
([043f49c](https://code.castopod.org/ad-aures/castopod/commit/043f49c784bc007ca0fa756ca4ed2d3b08843ad9))
- add platforms tables
([ce59344](https://code.podlibre.org/podlibre/castopod/commit/ce5934419a516c9926dd3fd0ace3c11a95b60722))
([ce59344](https://code.castopod.org/ad-aures/castopod/commit/ce5934419a516c9926dd3fd0ace3c11a95b60722))
- add unique listeners analytics
([3a49258](https://code.podlibre.org/podlibre/castopod/commit/3a4925816f3268230640525ad7af507aab8eecb9))
([3a49258](https://code.castopod.org/ad-aures/castopod/commit/3a4925816f3268230640525ad7af507aab8eecb9))
- add user permissions and basic groups to handle authorizations
([d58e518](https://code.podlibre.org/podlibre/castopod/commit/d58e51874a4722921b75b0049117015c2380406e)),
closes [#3](https://code.podlibre.org/podlibre/castopod/issues/3)
[#18](https://code.podlibre.org/podlibre/castopod/issues/18)
([d58e518](https://code.castopod.org/ad-aures/castopod/commit/d58e51874a4722921b75b0049117015c2380406e)),
closes [#3](https://code.castopod.org/ad-aures/castopod/issues/3)
[#18](https://code.castopod.org/ad-aures/castopod/issues/18)
- create optimized & resized images upon upload
([02e4441](https://code.podlibre.org/podlibre/castopod/commit/02e4441f98f27e9534e5b9b63279153d14632ccd)),
closes [#6](https://code.podlibre.org/podlibre/castopod/issues/6)
([02e4441](https://code.castopod.org/ad-aures/castopod/commit/02e4441f98f27e9534e5b9b63279153d14632ccd)),
closes [#6](https://code.castopod.org/ad-aures/castopod/issues/6)
- display legal disclaimer and warning on podcast import page
([2f07992](https://code.podlibre.org/podlibre/castopod/commit/2f07992e5508b34b91f194eebfac80c51e80e90a)),
closes [#34](https://code.podlibre.org/podlibre/castopod/issues/34)
([2f07992](https://code.castopod.org/ad-aures/castopod/commit/2f07992e5508b34b91f194eebfac80c51e80e90a)),
closes [#34](https://code.castopod.org/ad-aures/castopod/issues/34)
- edit + delete podcast and episode
([ac5f0c7](https://code.podlibre.org/podlibre/castopod/commit/ac5f0c732806e955c01e05b7867801bc938c6bd5))
([ac5f0c7](https://code.castopod.org/ad-aures/castopod/commit/ac5f0c732806e955c01e05b7867801bc938c6bd5))
- enhance admin ui with responsive design and ux improvements
([2d44b45](https://code.podlibre.org/podlibre/castopod/commit/2d44b457a02205d2e7da258d7029b8bc5da39533)),
closes [#31](https://code.podlibre.org/podlibre/castopod/issues/31)
[#9](https://code.podlibre.org/podlibre/castopod/issues/9)
([2d44b45](https://code.castopod.org/ad-aures/castopod/commit/2d44b457a02205d2e7da258d7029b8bc5da39533)),
closes [#31](https://code.castopod.org/ad-aures/castopod/issues/31)
[#9](https://code.castopod.org/ad-aures/castopod/issues/9)
- enhance ui using javascript in admin area
([c0e66d5](https://code.podlibre.org/podlibre/castopod/commit/c0e66d5f7012026e145d106f4d6bd3ba792a1b77))
([c0e66d5](https://code.castopod.org/ad-aures/castopod/commit/c0e66d5f7012026e145d106f4d6bd3ba792a1b77))
- import podcast from an rss feed url
([9a5d5a1](https://code.podlibre.org/podlibre/castopod/commit/9a5d5a15b4945eb319da9e999c4ca60a0a4f6d2d)),
closes [#21](https://code.podlibre.org/podlibre/castopod/issues/21)
([9a5d5a1](https://code.castopod.org/ad-aures/castopod/commit/9a5d5a15b4945eb319da9e999c4ca60a0a4f6d2d)),
closes [#21](https://code.castopod.org/ad-aures/castopod/issues/21)
- set podcast / episode description in the pages description meta tag
([1c4a504](https://code.podlibre.org/podlibre/castopod/commit/1c4a50442bea2d3449efce9c5ff1c80743152f55)),
closes [#44](https://code.podlibre.org/podlibre/castopod/issues/44)
([1c4a504](https://code.castopod.org/ad-aures/castopod/commit/1c4a50442bea2d3449efce9c5ff1c80743152f55)),
closes [#44](https://code.castopod.org/ad-aures/castopod/issues/44)
- update analytics so to meet IABv2 requirements
([03e23a2](https://code.podlibre.org/podlibre/castopod/commit/03e23a28bf9b1b73fba55352c36a8cd6cc8ae729)),
closes [#10](https://code.podlibre.org/podlibre/castopod/issues/10)
([03e23a2](https://code.castopod.org/ad-aures/castopod/commit/03e23a28bf9b1b73fba55352c36a8cd6cc8ae729)),
closes [#10](https://code.castopod.org/ad-aures/castopod/issues/10)
- **cache:** add podcast and episode pages to cache + clear them after insert or
update
([da0f047](https://code.podlibre.org/podlibre/castopod/commit/da0f0472819007e02e5da37399f2377772c618b9))
([da0f047](https://code.castopod.org/ad-aures/castopod/commit/da0f0472819007e02e5da37399f2377772c618b9))
- **categories:** create model, entity, migrations and seeds
([f73b042](https://code.podlibre.org/podlibre/castopod/commit/f73b042cc091be82abdbbca8992080875d526972))
([f73b042](https://code.castopod.org/ad-aures/castopod/commit/f73b042cc091be82abdbbca8992080875d526972))
- **devcontainer:** add devcontainer settings for dev environment
([69e7266](https://code.podlibre.org/podlibre/castopod/commit/69e72667365247b63430dee88194e8f0d7c28edc))
([69e7266](https://code.castopod.org/ad-aures/castopod/commit/69e72667365247b63430dee88194e8f0d7c28edc))
- **episodes:** add create form and view pages for episode
([f3b2c8b](https://code.podlibre.org/podlibre/castopod/commit/f3b2c8b84f3d93bef734e34dbe8ed729535e45e9)),
closes [#1](https://code.podlibre.org/podlibre/castopod/issues/1)
([f3b2c8b](https://code.castopod.org/ad-aures/castopod/commit/f3b2c8b84f3d93bef734e34dbe8ed729535e45e9)),
closes [#1](https://code.castopod.org/ad-aures/castopod/issues/1)
- **episodes:** add migrations, model and entity for episodes table
([0444821](https://code.podlibre.org/podlibre/castopod/commit/044482174ede555ce19a2d8c6f48771cc8e7d27b))
([0444821](https://code.castopod.org/ad-aures/castopod/commit/044482174ede555ce19a2d8c6f48771cc8e7d27b))
- **podcast:** create a podcast using form
([1202ba3](https://code.podlibre.org/podlibre/castopod/commit/1202ba3545f521097c60a6a2af95e70527cd1d34))
([1202ba3](https://code.castopod.org/ad-aures/castopod/commit/1202ba3545f521097c60a6a2af95e70527cd1d34))
- **podcast-form:** update routes and redirect to podcast page
([12ce905](https://code.podlibre.org/podlibre/castopod/commit/12ce905799002dc9c07e6de092342d30ba9fd7d8))
([12ce905](https://code.castopod.org/ad-aures/castopod/commit/12ce905799002dc9c07e6de092342d30ba9fd7d8))
- **public-ui:** adapt public podcast and episode pages to wireframes
([40a0535](https://code.podlibre.org/podlibre/castopod/commit/40a0535fc1bc12a24994b651f5e00b35995cbdda)),
closes [#30](https://code.podlibre.org/podlibre/castopod/issues/30)
[#13](https://code.podlibre.org/podlibre/castopod/issues/13)
([40a0535](https://code.castopod.org/ad-aures/castopod/commit/40a0535fc1bc12a24994b651f5e00b35995cbdda)),
closes [#30](https://code.castopod.org/ad-aures/castopod/issues/30)
[#13](https://code.castopod.org/ad-aures/castopod/issues/13)
- **rss:** generate rss feed from podcast entity
([c815ecd](https://code.podlibre.org/podlibre/castopod/commit/c815ecd6640931fee0895f80908a3ddfac482666))
([c815ecd](https://code.castopod.org/ad-aures/castopod/commit/c815ecd6640931fee0895f80908a3ddfac482666))
- **users:** add myth-auth to handle users crud + add admin gateway only
accessible by login
([c63a077](https://code.podlibre.org/podlibre/castopod/commit/c63a077618c61b4cde7f25ffc650a4b0e1495f44)),
closes [#11](https://code.podlibre.org/podlibre/castopod/issues/11)
([c63a077](https://code.castopod.org/ad-aures/castopod/commit/c63a077618c61b4cde7f25ffc650a4b0e1495f44)),
closes [#11](https://code.castopod.org/ad-aures/castopod/issues/11)
- minor corrections to some tables
([3bf9420](https://code.podlibre.org/podlibre/castopod/commit/3bf9420b5956a501b3b24405d243a71a928d6086))
([3bf9420](https://code.castopod.org/ad-aures/castopod/commit/3bf9420b5956a501b3b24405d243a71a928d6086))
- write id3v2 tags to episode's audio file
([4651d01](https://code.podlibre.org/podlibre/castopod/commit/4651d01a84ff3ea8433a8ae26cfd750a1ec9e88d))
([4651d01](https://code.castopod.org/ad-aures/castopod/commit/4651d01a84ff3ea8433a8ae26cfd750a1ec9e88d))
### Reverts
- use basic input file for episodes audio files instead of button for better UX
([d5f22fb](https://code.podlibre.org/podlibre/castopod/commit/d5f22fbb38c43d9b37df401eff655958a57cb40a))
([d5f22fb](https://code.castopod.org/ad-aures/castopod/commit/d5f22fbb38c43d9b37df401eff655958a57cb40a))

View file

@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[abuse@podlibre.org](mailto:abuse@podlibre.org). All complaints will be reviewed
[abuse@castopod.org](mailto:abuse@castopod.org). All complaints will be reviewed
and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the

View file

@ -1,6 +1,6 @@
# Castopod Host dependencies
# Castopod dependencies
Castopod Host uses the following components:
Castopod uses the following components:
## PHP Dependencies

View file

@ -1,5 +1,5 @@
####################################################
# Castopod Host development Docker file
# Castopod development Docker file
####################################################
# ⚠️ NOT optimized for production
# should be used only for development purposes
@ -8,8 +8,8 @@ FROM php:8.0-fpm
LABEL maintainer="Yassine Doghri <yassine@doghri.fr>"
COPY . /castopod-host
WORKDIR /castopod-host
COPY . /castopod
WORKDIR /castopod
# Install composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
@ -19,7 +19,7 @@ RUN apt-get update \
# gnupg to sign commits with gpg
&& apt-get install --yes --no-install-recommends gnupg \
# npm through the nodejs package
&& curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \
&& curl -fsSL https://deb.nodesource.com/setup_16.x | bash - \
&& apt-get update \
&& apt-get install --yes --no-install-recommends nodejs \
# update npm

View file

@ -1,144 +0,0 @@
# How to install Castopod Host <!-- omit in toc -->
_Castopod Host_ 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.
## Table of contents <!-- omit in toc -->
- [Install instructions](#install-instructions)
- [0. Pre-requisites](#0-pre-requisites)
- [(recommended) Install Wizard](#recommended-install-wizard)
- [(alternative) Manual configuration](#alternative-manual-configuration)
- [Web Server Requirements](#web-server-requirements)
- [PHP v8.0 or higher](#php-v80-or-higher)
- [FFmpeg v4.1.8 or higher for Video Clips](#ffmpeg-v418-or-higher-for-video-clips)
- [MySQL compatible database](#mysql-compatible-database)
- [Privileges](#privileges)
- [(Optional) Other recommendations](#optional-other-recommendations)
- [Security concerns](#security-concerns)
## Install instructions
### 0. Pre-requisites
0. Get a Web Server with [requirements](#web-server-requirements) installed
1. Create a MySQL database for Castopod Host 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 Host Package](https://code.podlibre.org/podlibre/castopod-host/-/releases)
onto the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
- For social features to work properly, this task is used to broadcast social
activities to your followers on the fediverse:
```bash
* * * * * /path/to/php /path/to/castopod-host/public/index.php scheduled-activities
```
- For Video Clips to be created (see
[FFmpeg requirements](#ffmpeg-v418-or-higher-for-video-clips)):
```bash
* * * * * /path/to/php /path/to/castopod-host/public/index.php scheduled-video-clips
```
> These tasks run **every minute**. You may set the frequency depending on
> your needs: every 5, 10 minutes or more.
### (recommended) Install Wizard
1. Run the Castopod Host 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!
> **Note:**
>
> The install script writes a `.env` file in the package root. If you cannot go
> through the install wizard, you can
> [create and update the `.env` file manually](#alternative-manual-configuration).
### (alternative) Manual configuration
1. Rename the `.env.example` file to `.env` and update the default values with
your own.
2. Upload the `.env` file to the Castopod Host Package root on your server.
3. Go to `/cp-install` to finish the install process.
4. Start podcasting!
## Web Server Requirements
### PHP v8.0 or higher
PHP version 8.0 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) with **JPEG**,
**PNG** and **WEBP** libraries.
Additionally, make sure that the following extensions are enabled in your PHP:
- 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)
### FFmpeg v4.1.8 or higher for Video Clips
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required, with the
following extensions:
- **FreeType 2** library for
[gd](https://www.php.net/manual/en/image.installation.php).
### MySQL compatible database
> We recommend using [MariaDB](https://mariadb.org).
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.
> NB. Castopod Host only works with supported MySQL compatible databases. It
> will break with MySQL v5.6 for example as its end of life was on February
> 5, 2021.
#### Privileges
User must have at least these privileges on the database for Castopod Host to
work: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`,
`UPDATE`.
### (Optional) Other recommendations
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
## Security concerns
Castopod Host is built on top of Codeigniter, a PHP framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance safety and prevent any malicious attack, we recommend
you update all your Castopod Host files permissions after installation (to avoid
any permission error):
- `writable/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
```bash
sudo chown -R root:root /path/to/castopod-host
sudo chown -R www-data:www-data /path/to/castopod-host/writable
sudo chown -R www-data:www-data /path/to/castopod-host/public/media
```

View file

@ -1,74 +1,75 @@
<h1 align="center">
<a href="https://castopod.org/">
<img src="https://podlibre.org/static/images/Castopod-Title.svg" alt="Castopod Host" />
<img src="https://docs.castopod.org/images/logo-inline.svg" alt="Castopod" />
</a>
</h1>
> **Castopod Host is in beta version**. We are working on getting the last
> features needed for v1, making performance improvements and fixing any bugs
> that may arise along the way.
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
_Castopod Host_ is a free and open-source podcast hosting solution made for
podcasters who want engage and interact with their audience.
Castopod is a free and open-source podcast hosting solution made for podcasters
who want engage and interact with their audience.
Create, upload, publish, interact with your followers and get comprehensive
audience measurements that respect your listeners privacy.
Whether you choose to install it on your own server or have it hosted by a
professional, all your data and analytics belong to you and you only!
You may find Castopod Host's source code on the
[original repository](https://code.podlibre.org/podlibre/castopod-host) or,
alternatively, on the
[github repository (mirror)](https://github.com/podlibre/castopod-host).
## Install / Update
To install or update Castopod Host on your PHP/MySQL server:
- Download
[Castopod Host's latest Package (zip or tar.gz)](https://code.podlibre.org/podlibre/castopod-host/-/releases):
- Follow one of the procedures on:
- [“How to **install** Castopod Host”](./INSTALL.md)
- or [“How to **update** Castopod Host”](./UPDATE.md)
> Castopod is currently in **beta** but already quite stable and used by
> podcasters around the world!
## Documentation
You can check Castopod Host's documentation for
[setting up a development environment](./docs/setup-development.md).
To get started with Castopod, you may
[check out the documentation](https://docs.castopod.org/), everything should be
there!
## Security issues and vulnerabilities
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
[security@castopod.org](mailto:security@castopod.org)
## Contributing
Love Castopod Host and would like to help? Check out the
[contribution guidelines](./CONTRIBUTING.md) for this project, everything should
be there!
Love Castopod and would like to help? Check out the
[contribution guidelines](https://docs.castopod.org/contributing/guidelines) for
this project, everything should be there!
⚠️ Note that **any** contribution made on a repository other than
[the original repository](https://code.podlibre.org/podlibre/castopod-host) will
not be accepted.
[the original repository](https://code.castopod.org/ad-aures/castopod) will not
be accepted.
## Support
## Contact
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/ad-aures/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) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
[Castopod](https://nlnet.nl/project/Castopod/) was funded through the
[NGI0 Discovery](https://nlnet.nl/discovery/) Fund under grant agreement
Nº 825322.
<div style="display:flex;flex-wrap:wrap;column-gap:4rem;row-gap:2rem;">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="https://docs.castopod.org/images/sponsors/adaures.svg" alt="Ad Aures Logo" style="height:4rem;" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="https://docs.castopod.org/images/sponsors/adaures.svg" alt="NLnet Logo" style="height:4rem;" /></a>
<a href="https://opencollective.com/castopod/contribute" target="_blank" rel="noopener noreferrer">Become a sponsor</a>
</div>
The fund was established by NLnet with financial support from the European
Commission's [Next Generation Internet](https://www.ngi.eu/) programme, under
the aegis of DG Communications Networks, Content and Technology.
[release]: https://code.castopod.org/ad-aures/castopod/-/releases
[release-badge]:
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
[license]: https://code.castopod.org/ad-aures/castopod/-/blob/beta/LICENSE.md
[license-badge]:
https://img.shields.io/github/license/ad-aures/castopod?color=blue
[semantic-release]: https://github.com/semantic-release/semantic-release
[semantic-release-badge]:
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
[discord]: https://castopod.org/discord
[discord-badge]: https://img.shields.io/badge/chat-on%20discord-7389D8
[stars]: https://github.com/ad-aures/castopod/stargazers
[stars-badge]:
https://img.shields.io/github/stars/ad-aures/castopod?style=social

View file

@ -437,7 +437,7 @@ class App extends BaseConfig
public string $siteTitleSeparator = ' | ';
public string $siteDescription = 'Castopod Host is an open-source hosting platform made for podcasters who want engage and interact with their audience.';
public string $siteDescription = 'Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience.';
/**
* @var array<int|string, string>

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2022 Podlibre
* @copyright 2022 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
@ -21,7 +21,7 @@ class HomeController extends BaseController
$db = db_connect();
if ($db->getDatabase() === '' || ! $db->tableExists('podcasts')) {
// Database connection has not been set or could not find the podcasts table
// Redirecting to install page because it is likely that Castopod Host has not been installed yet.
// Redirecting to install page because it is likely that Castopod has not been installed yet.
// NB: as base_url wouldn't have been defined here, redirect to install wizard manually
$route = Services::routes()->reverseRoute('install');
return redirect()->to(rtrim(host_url(), '/') . $route);

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddCategories Creates categories table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddLanguages Creates languages table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddPodcasts Creates podcasts table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddEpisodes Creates episodes table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddPlatforms Creates platforms table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddAddPodcastsPlatforms Creates podcasts_platforms table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddPages Creates pages table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddPodcastsCategories Creates podcasts_categories table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class Persons Creates persons table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddPodcastsPersons Creates podcasts_persons table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddEpisodesPersons Creates episodes_persons table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddCreditView Creates Credit View in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddEpisodeIdToPosts Adds episode_id field to posts table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddCreatedByToPosts Adds created_by field to posts table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddEpisodeComments creates episode_comments table in database
*
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AddLikes Creates likes table in database
*
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class AppSeeder Calls all required seeders for castopod to work properly
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class PermissionSeeder Inserts permissions
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class CategorySeeder Inserts values in categories table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class FakePodcastsAnalyticsSeeder Inserts Fake Analytics in the database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class FakeWebsiteAnalyticsSeeder Inserts Fake Analytics in the database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class LanguageSeeder Inserts values in languages table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class PlatformsSeeder Inserts values in platforms table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class TestSeeder Inserts a superadmin user in the database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
@ -47,7 +47,7 @@ if (! function_exists('get_rss_feed')) {
// the last build date corresponds to the creation of the feed.xml cache
$channel->addChild('lastBuildDate', (new Time('now'))->format(DATE_RFC1123));
$channel->addChild('generator', 'Castopod Host - https://castopod.org/');
$channel->addChild('generator', 'Castopod - https://castopod.org/');
$channel->addChild('docs', 'https://cyber.harvard.edu/rss/rss.html');
$channel->addChild('guid', $podcast->guid, $podcastNamespace);

View file

@ -13,7 +13,7 @@ use Melbahja\Seo\Schema;
use Melbahja\Seo\Schema\Thing;
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Generates and renders a breadcrumb based on the current url segments
*
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -7,7 +7,7 @@ declare(strict_types=1);
*
* It introduces the alternate-content option for a route.
*
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Generates and renders a breadcrumb based on the current url segments
*
* @copyright 2022 Podlibre
* @copyright 2022 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class SoundbiteModel Model for podcasts_soundbites table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* Class PlatformModel Model for platforms table in database
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -2,7 +2,7 @@
"name": "podlibre/castopod-host",
"version": "1.0.0-beta8",
"type": "project",
"description": "Castopod Host is an open-source hosting platform made for podcasters who want engage and interact with their audience.",
"description": "Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience.",
"homepage": "https://castopod.org",
"license": "AGPL-3.0-or-later",
"require": {
@ -16,8 +16,8 @@
"vlucas/phpdotenv": "^v5.3.0",
"league/html-to-markdown": "^v5.0.1",
"opawg/user-agents-php": "^v1.0",
"podlibre/ipcat": "^v1.0",
"podlibre/podcast-namespace": "^v1.0.6",
"adaures/ipcat-php": "^1.0",
"adaures/podcast-persons-taxonomy": "^1.0",
"phpseclib/phpseclib": "~2.0.30",
"michalsn/codeigniter4-uuid": "dev-develop",
"essence/essence": "^3.5.4",
@ -59,25 +59,25 @@
"style": "vendor/bin/ecs check --ansi",
"style:fix": "vendor/bin/ecs check --fix --ansi",
"post-install-cmd": [
"@php vendor/opawg/user-agents-php/src/UserAgentsGenerate.php > vendor/opawg/user-agents-php/src/UserAgents.php",
"@php vendor/opawg/user-agents-php/src/UserAgentsRSSGenerate.php > vendor/opawg/user-agents-php/src/UserAgentsRSS.php",
"@php vendor/podlibre/ipcat/IpDbGenerate.php > vendor/podlibre/ipcat/IpDb.php",
"@php vendor/podlibre/podcast-namespace/src/TaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-en.json > modules/Admin/Language/en/PersonsTaxonomy.php",
"@php vendor/podlibre/podcast-namespace/src/TaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-fr.json > modules/Admin/Language/fr/PersonsTaxonomy.php",
"@php vendor/podlibre/podcast-namespace/src/ReversedTaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-en.json > vendor/podlibre/podcast-namespace/src/ReversedTaxonomy.php"
"@php vendor/opawg/user-agents-php/src/UserAgentsGenerate.php > vendor/opawg/user-agents-php/src/UserAgents.php",
"@php vendor/opawg/user-agents-php/src/UserAgentsRSSGenerate.php > vendor/opawg/user-agents-php/src/UserAgentsRSS.php",
"@php vendor/adaures/ipcat-php/src/IpDbGenerate.php > vendor/adaures/ipcat-php/src/IpDb.php",
"@php vendor/adaures/podcast-persons-taxonomy/src/TaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-en.json > modules/Admin/Language/en/PersonsTaxonomy.php",
"@php vendor/adaures/podcast-persons-taxonomy/src/TaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-fr.json > modules/Admin/Language/fr/PersonsTaxonomy.php",
"@php vendor/adaures/podcast-persons-taxonomy/src/ReversedTaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-en.json > vendor/adaures/podcast-persons-taxonomy/src/ReversedTaxonomy.php"
],
"post-update-cmd": [
"@composer dump-autoload",
"@php vendor/opawg/user-agents-php/src/UserAgentsGenerate.php > vendor/opawg/user-agents-php/src/UserAgents.php",
"@php vendor/opawg/user-agents-php/src/UserAgentsRSSGenerate.php > vendor/opawg/user-agents-php/src/UserAgentsRSS.php",
"@php vendor/podlibre/ipcat/IpDbGenerate.php > vendor/podlibre/ipcat/IpDb.php",
"@php vendor/podlibre/podcast-namespace/src/TaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-en.json > modules/Admin/Language/en/PersonsTaxonomy.php",
"@php vendor/podlibre/podcast-namespace/src/TaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-fr.json > modules/Admin/Language/fr/PersonsTaxonomy.php",
"@php vendor/podlibre/podcast-namespace/src/ReversedTaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-en.json > vendor/podlibre/podcast-namespace/src/ReversedTaxonomy.php"
"@php vendor/opawg/user-agents-php/src/UserAgentsGenerate.php > vendor/opawg/user-agents-php/src/UserAgents.php",
"@php vendor/opawg/user-agents-php/src/UserAgentsRSSGenerate.php > vendor/opawg/user-agents-php/src/UserAgentsRSS.php",
"@php vendor/adaures/ipcat-php/src/IpDbGenerate.php > vendor/adaures/ipcat-php/src/IpDb.php",
"@php vendor/adaures/podcast-persons-taxonomy/src/TaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-en.json > modules/Admin/Language/en/PersonsTaxonomy.php",
"@php vendor/adaures/podcast-persons-taxonomy/src/TaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-fr.json > modules/Admin/Language/fr/PersonsTaxonomy.php",
"@php vendor/adaures/podcast-persons-taxonomy/src/ReversedTaxonomyGenerate.php https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/main/taxonomy-en.json > vendor/adaures/podcast-persons-taxonomy/src/ReversedTaxonomy.php"
]
},
"support": {
"source": "https://code.podlibre.org/podlibre/castopod-host.git",
"source": "https://code.castopod.org/ad-aures/castopod.git",
"discord": "https://castopod.org/discord"
},
"minimum-stability": "dev",

132
composer.lock generated
View file

@ -4,8 +4,75 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "bf66875f72680d0f5953f03bf31c8612",
"content-hash": "ec7b17f7a9846c6f31606bcd2dea17ab",
"packages": [
{
"name": "adaures/ipcat-php",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://code.castopod.org/ad-aures/ipcat-php",
"reference": "478a121cc32147359df27d2f5d087595ddcdc8b4"
},
"require": {
"php": ">=5.4"
},
"type": "library",
"autoload": {
"psr-4": {
"AdAures\\Ipcat\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["GPL-3.0-only"],
"authors": [
{
"name": "Benjamin Bellamy",
"email": "ben@castopod.org",
"homepage": "https://code.castopod.org/benjamin"
},
{
"name": "Yassine Doghri",
"email": "yassine@doghri.fr",
"homepage": "https://code.castopod.org/yassine"
}
],
"description": "Categorization of IP Addresses adapted to PHP 5.4+ from https://github.com/client9/ipcat",
"homepage": "https://code.castopod.org/ad-aures/ipcat-php",
"time": "2022-02-12T10:19:28+00:00"
},
{
"name": "adaures/podcast-persons-taxonomy",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://code.castopod.org/ad-aures/podcast-persons-taxonomy",
"reference": "9cb2bc9a36700f28ae907482a6ee2017aa4c38b0"
},
"type": "library",
"autoload": {
"psr-4": {
"AdAures\\PodcastPersonsTaxonomy\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"authors": [
{
"name": "Benjamin Bellamy",
"email": "ben@castopod.org",
"homepage": "https://code.castopod.org/benjamin"
},
{
"name": "Yassine Doghri",
"email": "yassine@doghri.fr",
"homepage": "https://code.castopod.org/yassine"
}
],
"description": "Generate PHP translation files for CodeIgniter4 from the podcast-namespace's Persons Taxonomy json files.",
"homepage": "https://code.castopod.org/ad-aures/podcast-persons-taxonomy",
"time": "2022-02-12T10:45:50+00:00"
},
{
"name": "brick/math",
"version": "0.9.2",
@ -1724,69 +1791,6 @@
],
"time": "2021-04-06T13:56:45+00:00"
},
{
"name": "podlibre/ipcat",
"version": "v1.0",
"source": {
"type": "git",
"url": "https://github.com/podlibre/ipcat.git",
"reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/podlibre/ipcat/zipball/1adfc821be508ddc8a742f6a5d5e6e42fdf28e86",
"reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86",
"shasum": ""
},
"type": "library",
"autoload": {
"psr-4": {
"Podlibre\\Ipcat\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["GPL-3.0-only"],
"authors": [
{
"name": "Benjamin Bellamy",
"email": "ben@podlibre.org",
"homepage": "https://podlibre.org/"
}
],
"description": "Categorization of IP Addresses forked from https://github.com/client9/ipcat",
"homepage": "https://github.com/podlibre/ipcat",
"support": {
"source": "https://github.com/podlibre/ipcat/tree/v1.0"
},
"time": "2020-10-05T17:15:07+00:00"
},
{
"name": "podlibre/podcast-namespace",
"version": "v1.0.6",
"source": {
"type": "git",
"url": "https://code.podlibre.org/podlibre/podcastnamespace",
"reference": "4525c06ee9dd95bb745ee875d55b64a053c74cd6"
},
"type": "library",
"autoload": {
"psr-4": {
"Podlibre\\PodcastNamespace\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"authors": [
{
"name": "Benjamin Bellamy",
"email": "ben@podlibre.org",
"homepage": "https://podlibre.org/"
}
],
"description": "PHP implementation for the Podcast Namespace.",
"homepage": "https://code.podlibre.org/podlibre/podcastnamespace",
"time": "2021-01-14T15:47:06+00:00"
},
{
"name": "psr/cache",
"version": "1.0.1",

View file

@ -1,2 +1,2 @@
* * * * * /usr/local/bin/php /castopod-host/public/index.php scheduled-activities
* * * * * /usr/local/bin/php /castopod-host/public/index.php scheduled-video-clips
* * * * * /usr/local/bin/php /castopod/public/index.php scheduled-activities
* * * * * /usr/local/bin/php /castopod/public/index.php scheduled-video-clips

View file

@ -8,12 +8,12 @@ services:
build:
context: .
dockerfile: Dockerfile
container_name: castopod-host
command: /bin/sh -c "crontab ./crontab && cron && service cron reload && php spark serve --host 0.0.0.0"
container_name: app
command: /bin/sh -c "crontab ./crontab && cron && service cron reload && php spark serve - 0.0.0.0"
ports:
- 8080:8080
volumes:
- .:/castopod-host
- .:/castopod
depends_on:
- redis
- mariadb
@ -22,7 +22,7 @@ services:
redis:
image: redis:alpine
container_name: castopod-host_redis
container_name: castopod_redis
ports:
- 6379:6379
volumes:
@ -32,7 +32,7 @@ services:
mariadb:
image: mariadb:latest
container_name: castopod-host_mariadb
container_name: castopod_mariadb
ports:
- 3306:3306
volumes:
@ -40,14 +40,14 @@ services:
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: castopod
MYSQL_USER: podlibre
MYSQL_USER: castopod
MYSQL_PASSWORD: castopod
networks:
- castopod
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: castopod-host_phpmyadmin
container_name: castopod_phpmyadmin
environment:
PMA_HOST: mariadb
PMA_PORT: 3306

76
docs/.gitlab-ci.yml Normal file
View file

@ -0,0 +1,76 @@
image: node:16
stages:
- build
- deploy
.documentation-setup:
before_script:
- cd docs
- npm ci
cache:
paths:
- docs/node_modules/
# This job only serves for validating that the docs builds correctly on all non deployment branches
build:
extends: .documentation-setup
stage: build
script:
- npm run build
except:
- develop
- main
- beta
- alpha
build-production:
extends: .documentation-setup
stage: build
environment:
name: production
url: https://docs.castopod.org/
script:
- npm run build
artifacts:
paths:
- docs/.vitepress/dist
expire_in: 30 mins
only:
- develop
- main
- beta
- alpha
deploy:
stage: deploy
environment:
name: production
url: https://docs.castopod.org/
variables:
HOST: $DOCS_HOST
USER: $DOCS_USER
TEMP_DIRECTORY: $DOCS_TEMP_DIRECTORY
DIRECTORY: $DOCS_DIRECTORY
SSH_PORT: 3242
SOURCE_FOLDER: "docs/.vitepress/dist/"
before_script:
# install rsync for file transfers
- apt-get update && apt-get install rsync -y
# ssh config
- "which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )"
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 --decode)
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
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

74
docs/.vitepress/config.ts Normal file
View file

@ -0,0 +1,74 @@
import { defineConfig } from "vitepress";
export default defineConfig({
title: "Castopod docs",
description:
"Get started with Castopod, install it, contribute and learn more!",
srcDir: "src",
head: [
["link", { rel: "icon", type: "image/x-icon", href: "/favicon.ico" }],
["meta", { name: "twitter:site", content: "@castopod" }],
["meta", { name: "twitter:card", content: "summary" }],
[
"meta",
{
name: "twitter:image",
content: "https://docs.castopod.org/images/logo.png",
},
],
[
"script",
{
defer: "defer",
"data-domain": "docs.castopod.org",
src: "https://analytics.castopod.org/js/plausible.js",
},
],
],
themeConfig: {
nav: [
{
text: "Home",
link: "https://castopod.org/",
},
{
text: "Blog",
link: "https://blog.castopod.org/",
},
{
text: "Github",
link: "https://github.com/ad-aures/castopod",
},
],
sidebar: {
"/": getGuideSidebar(),
},
},
});
function getGuideSidebar() {
return [
{
text: "Introduction",
link: "/",
},
{
text: "Getting started",
children: [
{ text: "Install", link: "/getting-started/install" },
{ text: "Security", link: "/getting-started/security" },
{ text: "Update", link: "/getting-started/update" },
],
},
{
text: "Contributing",
children: [
{ text: "Guide", link: "/contributing/guidelines" },
{ text: "Dev Setup", link: "/contributing/setup-development" },
],
},
];
}

View file

@ -0,0 +1,6 @@
import Theme from "vitepress/theme";
import "./tailwind.css";
export default {
...Theme,
};

View file

@ -0,0 +1,2 @@
@tailwind components;
@tailwind utilities;

3552
docs/package-lock.json generated Normal file
View file

@ -0,0 +1,3552 @@
{
"name": "castopod-docs",
"version": "0.0.0-development",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "castopod-docs",
"version": "0.0.0-development",
"license": "AGPL-3.0-or-later",
"devDependencies": {
"tailwindcss": "^3.0.22",
"vitepress": "^0.22.2"
}
},
"node_modules/@algolia/autocomplete-core": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.2.tgz",
"integrity": "sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==",
"dev": true,
"dependencies": {
"@algolia/autocomplete-shared": "1.5.2"
}
},
"node_modules/@algolia/autocomplete-preset-algolia": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.2.tgz",
"integrity": "sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==",
"dev": true,
"dependencies": {
"@algolia/autocomplete-shared": "1.5.2"
},
"peerDependencies": {
"@algolia/client-search": "^4.9.1",
"algoliasearch": "^4.9.1"
}
},
"node_modules/@algolia/autocomplete-shared": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.2.tgz",
"integrity": "sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==",
"dev": true
},
"node_modules/@algolia/cache-browser-local-storage": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.12.1.tgz",
"integrity": "sha512-ERFFOnC9740xAkuO0iZTQqm2AzU7Dpz/s+g7o48GlZgx5p9GgNcsuK5eS0GoW/tAK+fnKlizCtlFHNuIWuvfsg==",
"dev": true,
"dependencies": {
"@algolia/cache-common": "4.12.1"
}
},
"node_modules/@algolia/cache-common": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.12.1.tgz",
"integrity": "sha512-UugTER3V40jT+e19Dmph5PKMeliYKxycNPwrPNADin0RcWNfT2QksK9Ff2N2W7UKraqMOzoeDb4LAJtxcK1a8Q==",
"dev": true
},
"node_modules/@algolia/cache-in-memory": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.12.1.tgz",
"integrity": "sha512-U6iaunaxK1lHsAf02UWF58foKFEcrVLsHwN56UkCtwn32nlP9rz52WOcHsgk6TJrL8NDcO5swMjtOQ5XHESFLw==",
"dev": true,
"dependencies": {
"@algolia/cache-common": "4.12.1"
}
},
"node_modules/@algolia/client-account": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.12.1.tgz",
"integrity": "sha512-jGo4ConJNoMdTCR2zouO0jO/JcJmzOK6crFxMMLvdnB1JhmMbuIKluOTJVlBWeivnmcsqb7r0v7qTCPW5PAyxQ==",
"dev": true,
"dependencies": {
"@algolia/client-common": "4.12.1",
"@algolia/client-search": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"node_modules/@algolia/client-analytics": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.12.1.tgz",
"integrity": "sha512-h1It7KXzIthlhuhfBk7LteYq72tym9maQDUsyRW0Gft8b6ZQahnRak9gcCvKwhcJ1vJoP7T7JrNYGiYSicTD9g==",
"dev": true,
"dependencies": {
"@algolia/client-common": "4.12.1",
"@algolia/client-search": "4.12.1",
"@algolia/requester-common": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"node_modules/@algolia/client-common": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.12.1.tgz",
"integrity": "sha512-obnJ8eSbv+h94Grk83DTGQ3bqhViSWureV6oK1s21/KMGWbb3DkduHm+lcwFrMFkjSUSzosLBHV9EQUIBvueTw==",
"dev": true,
"dependencies": {
"@algolia/requester-common": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"node_modules/@algolia/client-personalization": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.12.1.tgz",
"integrity": "sha512-sMSnjjPjRgByGHYygV+5L/E8a6RgU7l2GbpJukSzJ9GRY37tHmBHuvahv8JjdCGJ2p7QDYLnQy5bN5Z02qjc7Q==",
"dev": true,
"dependencies": {
"@algolia/client-common": "4.12.1",
"@algolia/requester-common": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"node_modules/@algolia/client-search": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.12.1.tgz",
"integrity": "sha512-MwwKKprfY6X2nJ5Ki/ccXM2GDEePvVjZnnoOB2io3dLKW4fTqeSRlC5DRXeFD7UM0vOPPHr4ItV2aj19APKNVQ==",
"dev": true,
"dependencies": {
"@algolia/client-common": "4.12.1",
"@algolia/requester-common": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"node_modules/@algolia/logger-common": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.12.1.tgz",
"integrity": "sha512-fCgrzlXGATNqdFTxwx0GsyPXK+Uqrx1SZ3iuY2VGPPqdt1a20clAG2n2OcLHJpvaa6vMFPlJyWvbqAgzxdxBlQ==",
"dev": true
},
"node_modules/@algolia/logger-console": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.12.1.tgz",
"integrity": "sha512-0owaEnq/davngQMYqxLA4KrhWHiXujQ1CU3FFnyUcMyBR7rGHI48zSOUpqnsAXrMBdSH6rH5BDkSUUFwsh8RkQ==",
"dev": true,
"dependencies": {
"@algolia/logger-common": "4.12.1"
}
},
"node_modules/@algolia/requester-browser-xhr": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.12.1.tgz",
"integrity": "sha512-OaMxDyG0TZG0oqz1lQh9e3woantAG1bLnuwq3fmypsrQxra4IQZiyn1x+kEb69D2TcXApI5gOgrD4oWhtEVMtw==",
"dev": true,
"dependencies": {
"@algolia/requester-common": "4.12.1"
}
},
"node_modules/@algolia/requester-common": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.12.1.tgz",
"integrity": "sha512-XWIrWQNJ1vIrSuL/bUk3ZwNMNxl+aWz6dNboRW6+lGTcMIwc3NBFE90ogbZKhNrFRff8zI4qCF15tjW+Fyhpow==",
"dev": true
},
"node_modules/@algolia/requester-node-http": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.12.1.tgz",
"integrity": "sha512-awBtwaD+s0hxkA1aehYn8F0t9wqGoBVWgY4JPHBmp1ChO3pK7RKnnvnv7QQa9vTlllX29oPt/BBVgMo1Z3n1Qg==",
"dev": true,
"dependencies": {
"@algolia/requester-common": "4.12.1"
}
},
"node_modules/@algolia/transporter": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.12.1.tgz",
"integrity": "sha512-BGeNgdEHc6dXIk2g8kdlOoQ6fQ6OIaKQcplEj7HPoi+XZUeAvRi3Pff3QWd7YmybWkjzd9AnTzieTASDWhL+sQ==",
"dev": true,
"dependencies": {
"@algolia/cache-common": "4.12.1",
"@algolia/logger-common": "4.12.1",
"@algolia/requester-common": "4.12.1"
}
},
"node_modules/@babel/code-frame": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
"integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
"dev": true,
"dependencies": {
"@babel/highlight": "^7.16.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
"integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
"version": "7.16.10",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
"integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.16.7",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight/node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/highlight/node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/highlight/node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/@babel/highlight/node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"node_modules/@babel/highlight/node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/highlight/node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/parser": {
"version": "7.17.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz",
"integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@docsearch/css": {
"version": "3.0.0-alpha.50",
"resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.50.tgz",
"integrity": "sha512-QeWFCQOtS9D+Fi20liKsPXF2j/xWKh52e+P2Z1UATIdPMqmH6zoB2lcUz+cgv6PPVgWUtECeR6VSSUm71LT94w==",
"dev": true
},
"node_modules/@docsearch/js": {
"version": "3.0.0-alpha.50",
"resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.50.tgz",
"integrity": "sha512-1ap9Wz5oR/Z8yybaCZhsptXU43es3H52eEQUZtmzb8dUWyCW+3iXaKVB/qeMJOQWtggZ/WvZV3YknVIbCMR2dQ==",
"dev": true,
"dependencies": {
"@docsearch/react": "3.0.0-alpha.50",
"preact": "^10.0.0"
}
},
"node_modules/@docsearch/react": {
"version": "3.0.0-alpha.50",
"resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.50.tgz",
"integrity": "sha512-oDGV1zZCRYv7MWsh6CyQVthYTRc3b4q+6kKwNYb1/g/Wf/4nJHutpxolFLHdEUDhrJ4Xi8wxwQG+lEwAVBTHPg==",
"dev": true,
"dependencies": {
"@algolia/autocomplete-core": "1.5.2",
"@algolia/autocomplete-preset-algolia": "1.5.2",
"@docsearch/css": "3.0.0-alpha.50",
"algoliasearch": "^4.0.0"
},
"peerDependencies": {
"@types/react": ">= 16.8.0 < 18.0.0",
"react": ">= 16.8.0 < 18.0.0",
"react-dom": ">= 16.8.0 < 18.0.0"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
"engines": {
"node": ">= 8"
}
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/@types/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
"node_modules/@types/prop-types": {
"version": "15.7.4",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
"integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
"dev": true,
"peer": true
},
"node_modules/@types/react": {
"version": "17.0.39",
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz",
"integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==",
"dev": true,
"peer": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
"node_modules/@types/scheduler": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
"dev": true,
"peer": true
},
"node_modules/@vitejs/plugin-vue": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.2.0.tgz",
"integrity": "sha512-wXigM1EwN2G7rZcwG6kLk9ivvIMhx2363tCEvMBiXcTu5nePM/12hUPVzPb83Uugt6U+zom1gTpJopi/Ow/jwg==",
"dev": true,
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"vite": "^2.5.10",
"vue": "^3.2.25"
}
},
"node_modules/@vue/compiler-core": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz",
"integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.31",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz",
"integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==",
"dev": true,
"dependencies": {
"@vue/compiler-core": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz",
"integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.31",
"@vue/compiler-dom": "3.2.31",
"@vue/compiler-ssr": "3.2.31",
"@vue/reactivity-transform": "3.2.31",
"@vue/shared": "3.2.31",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
"postcss": "^8.1.10",
"source-map": "^0.6.1"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz",
"integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==",
"dev": true,
"dependencies": {
"@vue/compiler-dom": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"node_modules/@vue/reactivity": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz",
"integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==",
"dev": true,
"dependencies": {
"@vue/shared": "3.2.31"
}
},
"node_modules/@vue/reactivity-transform": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz",
"integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.31",
"@vue/shared": "3.2.31",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz",
"integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==",
"dev": true,
"dependencies": {
"@vue/reactivity": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz",
"integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==",
"dev": true,
"dependencies": {
"@vue/runtime-core": "3.2.31",
"@vue/shared": "3.2.31",
"csstype": "^2.6.8"
}
},
"node_modules/@vue/runtime-dom/node_modules/csstype": {
"version": "2.6.19",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz",
"integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==",
"dev": true
},
"node_modules/@vue/server-renderer": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz",
"integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==",
"dev": true,
"dependencies": {
"@vue/compiler-ssr": "3.2.31",
"@vue/shared": "3.2.31"
},
"peerDependencies": {
"vue": "3.2.31"
}
},
"node_modules/@vue/shared": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz",
"integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==",
"dev": true
},
"node_modules/acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/acorn-node": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
"integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
"dev": true,
"dependencies": {
"acorn": "^7.0.0",
"acorn-walk": "^7.0.0",
"xtend": "^4.0.2"
}
},
"node_modules/acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/algoliasearch": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.12.1.tgz",
"integrity": "sha512-c0dM1g3zZBJrkzE5GA/Nu1y3fFxx3LCzxKzcmp2dgGS8P4CjszB/l3lsSh2MSrrK1Hn/KV4BlbBMXtYgG1Bfrw==",
"dev": true,
"dependencies": {
"@algolia/cache-browser-local-storage": "4.12.1",
"@algolia/cache-common": "4.12.1",
"@algolia/cache-in-memory": "4.12.1",
"@algolia/client-account": "4.12.1",
"@algolia/client-analytics": "4.12.1",
"@algolia/client-common": "4.12.1",
"@algolia/client-personalization": "4.12.1",
"@algolia/client-search": "4.12.1",
"@algolia/logger-common": "4.12.1",
"@algolia/logger-console": "4.12.1",
"@algolia/requester-browser-xhr": "4.12.1",
"@algolia/requester-common": "4.12.1",
"@algolia/requester-node-http": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/arg": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
"integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
"dev": true
},
"node_modules/autoprefixer": {
"version": "10.4.2",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
"integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
"dev": true,
"peer": true,
"dependencies": {
"browserslist": "^4.19.1",
"caniuse-lite": "^1.0.30001297",
"fraction.js": "^4.1.2",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
"postcss-value-parser": "^4.2.0"
},
"bin": {
"autoprefixer": "bin/autoprefixer"
},
"engines": {
"node": "^10 || ^12 || >=14"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/browserslist": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
"integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
"dev": true,
"peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001286",
"electron-to-chromium": "^1.4.17",
"escalade": "^3.1.1",
"node-releases": "^2.0.1",
"picocolors": "^1.0.0"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
}
},
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001312",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz",
"integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==",
"dev": true,
"peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
}
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/chokidar/node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/cosmiconfig": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
"integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
"dev": true,
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
"yaml": "^1.10.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"dev": true,
"bin": {
"cssesc": "bin/cssesc"
},
"engines": {
"node": ">=4"
}
},
"node_modules/csstype": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz",
"integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==",
"dev": true,
"peer": true
},
"node_modules/defined": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
"integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
"dev": true
},
"node_modules/detective": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
"integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
"dev": true,
"dependencies": {
"acorn-node": "^1.6.1",
"defined": "^1.0.0",
"minimist": "^1.1.1"
},
"bin": {
"detective": "bin/detective.js"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"dev": true
},
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
"dev": true
},
"node_modules/electron-to-chromium": {
"version": "1.4.71",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz",
"integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==",
"dev": true,
"peer": true
},
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/esbuild": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.21.tgz",
"integrity": "sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A==",
"dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"esbuild-android-arm64": "0.14.21",
"esbuild-darwin-64": "0.14.21",
"esbuild-darwin-arm64": "0.14.21",
"esbuild-freebsd-64": "0.14.21",
"esbuild-freebsd-arm64": "0.14.21",
"esbuild-linux-32": "0.14.21",
"esbuild-linux-64": "0.14.21",
"esbuild-linux-arm": "0.14.21",
"esbuild-linux-arm64": "0.14.21",
"esbuild-linux-mips64le": "0.14.21",
"esbuild-linux-ppc64le": "0.14.21",
"esbuild-linux-riscv64": "0.14.21",
"esbuild-linux-s390x": "0.14.21",
"esbuild-netbsd-64": "0.14.21",
"esbuild-openbsd-64": "0.14.21",
"esbuild-sunos-64": "0.14.21",
"esbuild-windows-32": "0.14.21",
"esbuild-windows-64": "0.14.21",
"esbuild-windows-arm64": "0.14.21"
}
},
"node_modules/esbuild-android-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.21.tgz",
"integrity": "sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-darwin-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.21.tgz",
"integrity": "sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-darwin-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.21.tgz",
"integrity": "sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-freebsd-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.21.tgz",
"integrity": "sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-freebsd-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.21.tgz",
"integrity": "sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-32": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.21.tgz",
"integrity": "sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.21.tgz",
"integrity": "sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-arm": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.21.tgz",
"integrity": "sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.21.tgz",
"integrity": "sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-mips64le": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.21.tgz",
"integrity": "sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A==",
"cpu": [
"mips64el"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-ppc64le": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.21.tgz",
"integrity": "sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-riscv64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.21.tgz",
"integrity": "sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-s390x": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.21.tgz",
"integrity": "sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-netbsd-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.21.tgz",
"integrity": "sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-openbsd-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.21.tgz",
"integrity": "sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-sunos-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.21.tgz",
"integrity": "sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-windows-32": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.21.tgz",
"integrity": "sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-windows-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.21.tgz",
"integrity": "sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-windows-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.21.tgz",
"integrity": "sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
"peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true
},
"node_modules/fast-glob": {
"version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
"integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.4"
},
"engines": {
"node": ">=8.6.0"
}
},
"node_modules/fast-glob/node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/fastq": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
"integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
"dev": true,
"dependencies": {
"reusify": "^1.0.4"
}
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/fraction.js": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz",
"integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==",
"dev": true,
"peer": true,
"engines": {
"node": "*"
},
"funding": {
"type": "patreon",
"url": "https://www.patreon.com/infusion"
}
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.3"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-core-module": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
"integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"node_modules/lilconfig": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
"integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
"dev": true,
"engines": {
"node": ">=10"
}
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"peer": true,
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
"bin": {
"loose-envify": "cli.js"
}
},
"node_modules/magic-string": {
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
"integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
"dev": true,
"dependencies": {
"sourcemap-codec": "^1.4.4"
}
},
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
"engines": {
"node": ">= 8"
}
},
"node_modules/micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"dependencies": {
"braces": "^3.0.1",
"picomatch": "^2.2.3"
},
"engines": {
"node": ">=8.6"
}
},
"node_modules/minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"node_modules/nanoid": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
"dev": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/node-releases": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
"integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
"dev": true,
"peer": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-range": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
"integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
"dev": true,
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true,
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-hash": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
"integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"dependencies": {
"callsites": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
"json-parse-even-better-errors": "^2.3.0",
"lines-and-columns": "^1.1.6"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/postcss": {
"version": "8.4.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
"integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
"dev": true,
"dependencies": {
"nanoid": "^3.2.0",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
"engines": {
"node": "^10 || ^12 || >=14"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
}
},
"node_modules/postcss-js": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
"integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
"dev": true,
"dependencies": {
"camelcase-css": "^2.0.1"
},
"engines": {
"node": "^12 || ^14 || >= 16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"postcss": "^8.3.3"
}
},
"node_modules/postcss-load-config": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz",
"integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==",
"dev": true,
"dependencies": {
"lilconfig": "^2.0.4",
"yaml": "^1.10.2"
},
"engines": {
"node": ">= 10"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
"ts-node": {
"optional": true
}
}
},
"node_modules/postcss-nested": {
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
"integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
"dev": true,
"dependencies": {
"postcss-selector-parser": "^6.0.6"
},
"engines": {
"node": ">=12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"postcss": "^8.2.14"
}
},
"node_modules/postcss-selector-parser": {
"version": "6.0.9",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz",
"integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
},
"engines": {
"node": ">=4"
}
},
"node_modules/postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true
},
"node_modules/preact": {
"version": "10.6.6",
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.6.tgz",
"integrity": "sha512-dgxpTFV2vs4vizwKohYKkk7g7rmp1wOOcfd4Tz3IB3Wi+ivZzsn/SpeKJhRENSE+n8sUfsAl4S3HiCVT923ABw==",
"dev": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/preact"
}
},
"node_modules/prismjs": {
"version": "1.26.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.26.0.tgz",
"integrity": "sha512-HUoH9C5Z3jKkl3UunCyiD5jwk0+Hz0fIgQ2nbwU2Oo/ceuTAQAg+pPVnfdt2TJWRVLcxKh9iuoYDUSc8clb5UQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/react": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
"integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
"dev": true,
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
"integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
"dev": true,
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"scheduler": "^0.20.2"
},
"peerDependencies": {
"react": "17.0.2"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"node_modules/resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"dependencies": {
"is-core-module": "^2.8.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
}
},
"node_modules/rollup": {
"version": "2.67.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.2.tgz",
"integrity": "sha512-hoEiBWwZtf1QdK3jZIq59L0FJj4Fiv4RplCO4pvCRC86qsoFurWB4hKQIjoRf3WvJmk5UZ9b0y5ton+62fC7Tw==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
"node": ">=10.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"dependencies": {
"queue-microtask": "^1.2.2"
}
},
"node_modules/scheduler": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
"integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
"dev": true,
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true
},
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/tailwindcss": {
"version": "3.0.22",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.22.tgz",
"integrity": "sha512-F8lt74RlNZirnkaSk310+vGQta7c0/hgx7/bqxruM4wS9lp8oqV93lzavajC3VT0Lp4UUtUVIt8ifKcmGzkr0A==",
"dev": true,
"dependencies": {
"arg": "^5.0.1",
"chalk": "^4.1.2",
"chokidar": "^3.5.3",
"color-name": "^1.1.4",
"cosmiconfig": "^7.0.1",
"detective": "^5.2.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
"fast-glob": "^3.2.11",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"normalize-path": "^3.0.0",
"object-hash": "^2.2.0",
"postcss": "^8.4.6",
"postcss-js": "^4.0.0",
"postcss-load-config": "^3.1.0",
"postcss-nested": "5.0.6",
"postcss-selector-parser": "^6.0.9",
"postcss-value-parser": "^4.2.0",
"quick-lru": "^5.1.1",
"resolve": "^1.22.0"
},
"bin": {
"tailwind": "lib/cli.js",
"tailwindcss": "lib/cli.js"
},
"engines": {
"node": ">=12.13.0"
},
"peerDependencies": {
"autoprefixer": "^10.0.2",
"postcss": "^8.0.9"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
"node_modules/vite": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.8.2.tgz",
"integrity": "sha512-zawfykcPVPYva4KusIWORNLr324Qx86/3NpfQSIOJdjnL5pYhwDoImLYMOh4lFLcP/7//tNuWM2vx2F5OSVC9w==",
"dev": true,
"dependencies": {
"esbuild": "^0.14.14",
"postcss": "^8.4.6",
"resolve": "^1.22.0",
"rollup": "^2.59.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
"node": ">=12.2.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
},
"peerDependencies": {
"less": "*",
"sass": "*",
"stylus": "*"
},
"peerDependenciesMeta": {
"less": {
"optional": true
},
"sass": {
"optional": true
},
"stylus": {
"optional": true
}
}
},
"node_modules/vitepress": {
"version": "0.22.2",
"resolved": "https://registry.npmjs.org/vitepress/-/vitepress-0.22.2.tgz",
"integrity": "sha512-L6ykQzBXKzLTSU3zZbILeF1TONO6juV/RrL0DsA9OayomVQjEOoFY7cVdKOpIBb3T5Jy/GAAVxcvWtU/XJ5k4g==",
"dev": true,
"dependencies": {
"@docsearch/css": "^3.0.0-alpha.41",
"@docsearch/js": "^3.0.0-alpha.41",
"@vitejs/plugin-vue": "^2.2.0",
"prismjs": "^1.25.0",
"vite": "^2.8.1",
"vue": "^3.2.31"
},
"bin": {
"vitepress": "bin/vitepress.js"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/vue": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz",
"integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==",
"dev": true,
"dependencies": {
"@vue/compiler-dom": "3.2.31",
"@vue/compiler-sfc": "3.2.31",
"@vue/runtime-dom": "3.2.31",
"@vue/server-renderer": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true,
"engines": {
"node": ">=0.4"
}
},
"node_modules/yaml": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true,
"engines": {
"node": ">= 6"
}
}
},
"dependencies": {
"@algolia/autocomplete-core": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.2.tgz",
"integrity": "sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==",
"dev": true,
"requires": {
"@algolia/autocomplete-shared": "1.5.2"
}
},
"@algolia/autocomplete-preset-algolia": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.2.tgz",
"integrity": "sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==",
"dev": true,
"requires": {
"@algolia/autocomplete-shared": "1.5.2"
}
},
"@algolia/autocomplete-shared": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.2.tgz",
"integrity": "sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==",
"dev": true
},
"@algolia/cache-browser-local-storage": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.12.1.tgz",
"integrity": "sha512-ERFFOnC9740xAkuO0iZTQqm2AzU7Dpz/s+g7o48GlZgx5p9GgNcsuK5eS0GoW/tAK+fnKlizCtlFHNuIWuvfsg==",
"dev": true,
"requires": {
"@algolia/cache-common": "4.12.1"
}
},
"@algolia/cache-common": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.12.1.tgz",
"integrity": "sha512-UugTER3V40jT+e19Dmph5PKMeliYKxycNPwrPNADin0RcWNfT2QksK9Ff2N2W7UKraqMOzoeDb4LAJtxcK1a8Q==",
"dev": true
},
"@algolia/cache-in-memory": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.12.1.tgz",
"integrity": "sha512-U6iaunaxK1lHsAf02UWF58foKFEcrVLsHwN56UkCtwn32nlP9rz52WOcHsgk6TJrL8NDcO5swMjtOQ5XHESFLw==",
"dev": true,
"requires": {
"@algolia/cache-common": "4.12.1"
}
},
"@algolia/client-account": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.12.1.tgz",
"integrity": "sha512-jGo4ConJNoMdTCR2zouO0jO/JcJmzOK6crFxMMLvdnB1JhmMbuIKluOTJVlBWeivnmcsqb7r0v7qTCPW5PAyxQ==",
"dev": true,
"requires": {
"@algolia/client-common": "4.12.1",
"@algolia/client-search": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"@algolia/client-analytics": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.12.1.tgz",
"integrity": "sha512-h1It7KXzIthlhuhfBk7LteYq72tym9maQDUsyRW0Gft8b6ZQahnRak9gcCvKwhcJ1vJoP7T7JrNYGiYSicTD9g==",
"dev": true,
"requires": {
"@algolia/client-common": "4.12.1",
"@algolia/client-search": "4.12.1",
"@algolia/requester-common": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"@algolia/client-common": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.12.1.tgz",
"integrity": "sha512-obnJ8eSbv+h94Grk83DTGQ3bqhViSWureV6oK1s21/KMGWbb3DkduHm+lcwFrMFkjSUSzosLBHV9EQUIBvueTw==",
"dev": true,
"requires": {
"@algolia/requester-common": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"@algolia/client-personalization": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.12.1.tgz",
"integrity": "sha512-sMSnjjPjRgByGHYygV+5L/E8a6RgU7l2GbpJukSzJ9GRY37tHmBHuvahv8JjdCGJ2p7QDYLnQy5bN5Z02qjc7Q==",
"dev": true,
"requires": {
"@algolia/client-common": "4.12.1",
"@algolia/requester-common": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"@algolia/client-search": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.12.1.tgz",
"integrity": "sha512-MwwKKprfY6X2nJ5Ki/ccXM2GDEePvVjZnnoOB2io3dLKW4fTqeSRlC5DRXeFD7UM0vOPPHr4ItV2aj19APKNVQ==",
"dev": true,
"requires": {
"@algolia/client-common": "4.12.1",
"@algolia/requester-common": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"@algolia/logger-common": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.12.1.tgz",
"integrity": "sha512-fCgrzlXGATNqdFTxwx0GsyPXK+Uqrx1SZ3iuY2VGPPqdt1a20clAG2n2OcLHJpvaa6vMFPlJyWvbqAgzxdxBlQ==",
"dev": true
},
"@algolia/logger-console": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.12.1.tgz",
"integrity": "sha512-0owaEnq/davngQMYqxLA4KrhWHiXujQ1CU3FFnyUcMyBR7rGHI48zSOUpqnsAXrMBdSH6rH5BDkSUUFwsh8RkQ==",
"dev": true,
"requires": {
"@algolia/logger-common": "4.12.1"
}
},
"@algolia/requester-browser-xhr": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.12.1.tgz",
"integrity": "sha512-OaMxDyG0TZG0oqz1lQh9e3woantAG1bLnuwq3fmypsrQxra4IQZiyn1x+kEb69D2TcXApI5gOgrD4oWhtEVMtw==",
"dev": true,
"requires": {
"@algolia/requester-common": "4.12.1"
}
},
"@algolia/requester-common": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.12.1.tgz",
"integrity": "sha512-XWIrWQNJ1vIrSuL/bUk3ZwNMNxl+aWz6dNboRW6+lGTcMIwc3NBFE90ogbZKhNrFRff8zI4qCF15tjW+Fyhpow==",
"dev": true
},
"@algolia/requester-node-http": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.12.1.tgz",
"integrity": "sha512-awBtwaD+s0hxkA1aehYn8F0t9wqGoBVWgY4JPHBmp1ChO3pK7RKnnvnv7QQa9vTlllX29oPt/BBVgMo1Z3n1Qg==",
"dev": true,
"requires": {
"@algolia/requester-common": "4.12.1"
}
},
"@algolia/transporter": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.12.1.tgz",
"integrity": "sha512-BGeNgdEHc6dXIk2g8kdlOoQ6fQ6OIaKQcplEj7HPoi+XZUeAvRi3Pff3QWd7YmybWkjzd9AnTzieTASDWhL+sQ==",
"dev": true,
"requires": {
"@algolia/cache-common": "4.12.1",
"@algolia/logger-common": "4.12.1",
"@algolia/requester-common": "4.12.1"
}
},
"@babel/code-frame": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
"integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
"dev": true,
"requires": {
"@babel/highlight": "^7.16.7"
}
},
"@babel/helper-validator-identifier": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
"integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
"dev": true
},
"@babel/highlight": {
"version": "7.16.10",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
"integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.16.7",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
"@babel/parser": {
"version": "7.17.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz",
"integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==",
"dev": true
},
"@docsearch/css": {
"version": "3.0.0-alpha.50",
"resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.50.tgz",
"integrity": "sha512-QeWFCQOtS9D+Fi20liKsPXF2j/xWKh52e+P2Z1UATIdPMqmH6zoB2lcUz+cgv6PPVgWUtECeR6VSSUm71LT94w==",
"dev": true
},
"@docsearch/js": {
"version": "3.0.0-alpha.50",
"resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.50.tgz",
"integrity": "sha512-1ap9Wz5oR/Z8yybaCZhsptXU43es3H52eEQUZtmzb8dUWyCW+3iXaKVB/qeMJOQWtggZ/WvZV3YknVIbCMR2dQ==",
"dev": true,
"requires": {
"@docsearch/react": "3.0.0-alpha.50",
"preact": "^10.0.0"
}
},
"@docsearch/react": {
"version": "3.0.0-alpha.50",
"resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.50.tgz",
"integrity": "sha512-oDGV1zZCRYv7MWsh6CyQVthYTRc3b4q+6kKwNYb1/g/Wf/4nJHutpxolFLHdEUDhrJ4Xi8wxwQG+lEwAVBTHPg==",
"dev": true,
"requires": {
"@algolia/autocomplete-core": "1.5.2",
"@algolia/autocomplete-preset-algolia": "1.5.2",
"@docsearch/css": "3.0.0-alpha.50",
"algoliasearch": "^4.0.0"
}
},
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
}
},
"@nodelib/fs.stat": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true
},
"@nodelib/fs.walk": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"requires": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
}
},
"@types/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
"@types/prop-types": {
"version": "15.7.4",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
"integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
"dev": true,
"peer": true
},
"@types/react": {
"version": "17.0.39",
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz",
"integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==",
"dev": true,
"peer": true,
"requires": {
"@types/prop-types": "*",
"@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
"@types/scheduler": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
"dev": true,
"peer": true
},
"@vitejs/plugin-vue": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.2.0.tgz",
"integrity": "sha512-wXigM1EwN2G7rZcwG6kLk9ivvIMhx2363tCEvMBiXcTu5nePM/12hUPVzPb83Uugt6U+zom1gTpJopi/Ow/jwg==",
"dev": true,
"requires": {}
},
"@vue/compiler-core": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz",
"integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.31",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"@vue/compiler-dom": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz",
"integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==",
"dev": true,
"requires": {
"@vue/compiler-core": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"@vue/compiler-sfc": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz",
"integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.31",
"@vue/compiler-dom": "3.2.31",
"@vue/compiler-ssr": "3.2.31",
"@vue/reactivity-transform": "3.2.31",
"@vue/shared": "3.2.31",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
"postcss": "^8.1.10",
"source-map": "^0.6.1"
}
},
"@vue/compiler-ssr": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz",
"integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==",
"dev": true,
"requires": {
"@vue/compiler-dom": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"@vue/reactivity": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz",
"integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==",
"dev": true,
"requires": {
"@vue/shared": "3.2.31"
}
},
"@vue/reactivity-transform": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz",
"integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==",
"dev": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.31",
"@vue/shared": "3.2.31",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
}
},
"@vue/runtime-core": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz",
"integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==",
"dev": true,
"requires": {
"@vue/reactivity": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"@vue/runtime-dom": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz",
"integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==",
"dev": true,
"requires": {
"@vue/runtime-core": "3.2.31",
"@vue/shared": "3.2.31",
"csstype": "^2.6.8"
},
"dependencies": {
"csstype": {
"version": "2.6.19",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz",
"integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==",
"dev": true
}
}
},
"@vue/server-renderer": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz",
"integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==",
"dev": true,
"requires": {
"@vue/compiler-ssr": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"@vue/shared": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz",
"integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==",
"dev": true
},
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true
},
"acorn-node": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
"integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
"dev": true,
"requires": {
"acorn": "^7.0.0",
"acorn-walk": "^7.0.0",
"xtend": "^4.0.2"
}
},
"acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
"algoliasearch": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.12.1.tgz",
"integrity": "sha512-c0dM1g3zZBJrkzE5GA/Nu1y3fFxx3LCzxKzcmp2dgGS8P4CjszB/l3lsSh2MSrrK1Hn/KV4BlbBMXtYgG1Bfrw==",
"dev": true,
"requires": {
"@algolia/cache-browser-local-storage": "4.12.1",
"@algolia/cache-common": "4.12.1",
"@algolia/cache-in-memory": "4.12.1",
"@algolia/client-account": "4.12.1",
"@algolia/client-analytics": "4.12.1",
"@algolia/client-common": "4.12.1",
"@algolia/client-personalization": "4.12.1",
"@algolia/client-search": "4.12.1",
"@algolia/logger-common": "4.12.1",
"@algolia/logger-console": "4.12.1",
"@algolia/requester-browser-xhr": "4.12.1",
"@algolia/requester-common": "4.12.1",
"@algolia/requester-node-http": "4.12.1",
"@algolia/transporter": "4.12.1"
}
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"arg": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
"integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
"dev": true
},
"autoprefixer": {
"version": "10.4.2",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
"integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
"dev": true,
"peer": true,
"requires": {
"browserslist": "^4.19.1",
"caniuse-lite": "^1.0.30001297",
"fraction.js": "^4.1.2",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
"postcss-value-parser": "^4.2.0"
}
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
},
"browserslist": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
"integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
"dev": true,
"peer": true,
"requires": {
"caniuse-lite": "^1.0.30001286",
"electron-to-chromium": "^1.4.17",
"escalade": "^3.1.1",
"node-releases": "^2.0.1",
"picocolors": "^1.0.0"
}
},
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true
},
"camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
"dev": true
},
"caniuse-lite": {
"version": "1.0.30001312",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz",
"integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==",
"dev": true,
"peer": true
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"fsevents": "~2.3.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"dependencies": {
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
}
}
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"cosmiconfig": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
"integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
"dev": true,
"requires": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
"yaml": "^1.10.0"
}
},
"cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"dev": true
},
"csstype": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz",
"integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==",
"dev": true,
"peer": true
},
"defined": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
"integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
"dev": true
},
"detective": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
"integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
"dev": true,
"requires": {
"acorn-node": "^1.6.1",
"defined": "^1.0.0",
"minimist": "^1.1.1"
}
},
"didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"dev": true
},
"dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
"dev": true
},
"electron-to-chromium": {
"version": "1.4.71",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz",
"integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==",
"dev": true,
"peer": true
},
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"requires": {
"is-arrayish": "^0.2.1"
}
},
"esbuild": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.21.tgz",
"integrity": "sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A==",
"dev": true,
"requires": {
"esbuild-android-arm64": "0.14.21",
"esbuild-darwin-64": "0.14.21",
"esbuild-darwin-arm64": "0.14.21",
"esbuild-freebsd-64": "0.14.21",
"esbuild-freebsd-arm64": "0.14.21",
"esbuild-linux-32": "0.14.21",
"esbuild-linux-64": "0.14.21",
"esbuild-linux-arm": "0.14.21",
"esbuild-linux-arm64": "0.14.21",
"esbuild-linux-mips64le": "0.14.21",
"esbuild-linux-ppc64le": "0.14.21",
"esbuild-linux-riscv64": "0.14.21",
"esbuild-linux-s390x": "0.14.21",
"esbuild-netbsd-64": "0.14.21",
"esbuild-openbsd-64": "0.14.21",
"esbuild-sunos-64": "0.14.21",
"esbuild-windows-32": "0.14.21",
"esbuild-windows-64": "0.14.21",
"esbuild-windows-arm64": "0.14.21"
}
},
"esbuild-android-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.21.tgz",
"integrity": "sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ==",
"dev": true,
"optional": true
},
"esbuild-darwin-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.21.tgz",
"integrity": "sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ==",
"dev": true,
"optional": true
},
"esbuild-darwin-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.21.tgz",
"integrity": "sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ==",
"dev": true,
"optional": true
},
"esbuild-freebsd-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.21.tgz",
"integrity": "sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g==",
"dev": true,
"optional": true
},
"esbuild-freebsd-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.21.tgz",
"integrity": "sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA==",
"dev": true,
"optional": true
},
"esbuild-linux-32": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.21.tgz",
"integrity": "sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg==",
"dev": true,
"optional": true
},
"esbuild-linux-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.21.tgz",
"integrity": "sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA==",
"dev": true,
"optional": true
},
"esbuild-linux-arm": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.21.tgz",
"integrity": "sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w==",
"dev": true,
"optional": true
},
"esbuild-linux-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.21.tgz",
"integrity": "sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g==",
"dev": true,
"optional": true
},
"esbuild-linux-mips64le": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.21.tgz",
"integrity": "sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A==",
"dev": true,
"optional": true
},
"esbuild-linux-ppc64le": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.21.tgz",
"integrity": "sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ==",
"dev": true,
"optional": true
},
"esbuild-linux-riscv64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.21.tgz",
"integrity": "sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q==",
"dev": true,
"optional": true
},
"esbuild-linux-s390x": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.21.tgz",
"integrity": "sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA==",
"dev": true,
"optional": true
},
"esbuild-netbsd-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.21.tgz",
"integrity": "sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g==",
"dev": true,
"optional": true
},
"esbuild-openbsd-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.21.tgz",
"integrity": "sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA==",
"dev": true,
"optional": true
},
"esbuild-sunos-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.21.tgz",
"integrity": "sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA==",
"dev": true,
"optional": true
},
"esbuild-windows-32": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.21.tgz",
"integrity": "sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A==",
"dev": true,
"optional": true
},
"esbuild-windows-64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.21.tgz",
"integrity": "sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA==",
"dev": true,
"optional": true
},
"esbuild-windows-arm64": {
"version": "0.14.21",
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.21.tgz",
"integrity": "sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw==",
"dev": true,
"optional": true
},
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
"peer": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true
},
"fast-glob": {
"version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
"integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.4"
},
"dependencies": {
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
}
}
}
},
"fastq": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
"integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
"dev": true,
"requires": {
"reusify": "^1.0.4"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
},
"fraction.js": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz",
"integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==",
"dev": true,
"peer": true
},
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"optional": true
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"requires": {
"is-glob": "^4.0.3"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
"function-bind": "^1.1.1"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"requires": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
}
},
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
},
"is-core-module": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
"integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"lilconfig": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
"integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
"dev": true
},
"lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"peer": true,
"requires": {
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
"magic-string": {
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
"integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
"dev": true,
"requires": {
"sourcemap-codec": "^1.4.4"
}
},
"merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true
},
"micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"requires": {
"braces": "^3.0.1",
"picomatch": "^2.2.3"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"nanoid": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
"dev": true
},
"node-releases": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
"integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
"dev": true,
"peer": true
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
"normalize-range": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
"integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
"dev": true,
"peer": true
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true,
"peer": true
},
"object-hash": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
"integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
"dev": true
},
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"requires": {
"callsites": "^3.0.0"
}
},
"parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
"json-parse-even-better-errors": "^2.3.0",
"lines-and-columns": "^1.1.6"
}
},
"path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
"postcss": {
"version": "8.4.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
"integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
"dev": true,
"requires": {
"nanoid": "^3.2.0",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
},
"postcss-js": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
"integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
"dev": true,
"requires": {
"camelcase-css": "^2.0.1"
}
},
"postcss-load-config": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz",
"integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==",
"dev": true,
"requires": {
"lilconfig": "^2.0.4",
"yaml": "^1.10.2"
}
},
"postcss-nested": {
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
"integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
"dev": true,
"requires": {
"postcss-selector-parser": "^6.0.6"
}
},
"postcss-selector-parser": {
"version": "6.0.9",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz",
"integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==",
"dev": true,
"requires": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
}
},
"postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true
},
"preact": {
"version": "10.6.6",
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.6.tgz",
"integrity": "sha512-dgxpTFV2vs4vizwKohYKkk7g7rmp1wOOcfd4Tz3IB3Wi+ivZzsn/SpeKJhRENSE+n8sUfsAl4S3HiCVT923ABw==",
"dev": true
},
"prismjs": {
"version": "1.26.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.26.0.tgz",
"integrity": "sha512-HUoH9C5Z3jKkl3UunCyiD5jwk0+Hz0fIgQ2nbwU2Oo/ceuTAQAg+pPVnfdt2TJWRVLcxKh9iuoYDUSc8clb5UQ==",
"dev": true
},
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
"quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
"dev": true
},
"react": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
"integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
"dev": true,
"peer": true,
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
},
"react-dom": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
"integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
"dev": true,
"peer": true,
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"scheduler": "^0.20.2"
}
},
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"requires": {
"picomatch": "^2.2.1"
}
},
"resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"requires": {
"is-core-module": "^2.8.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
},
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true
},
"rollup": {
"version": "2.67.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.2.tgz",
"integrity": "sha512-hoEiBWwZtf1QdK3jZIq59L0FJj4Fiv4RplCO4pvCRC86qsoFurWB4hKQIjoRf3WvJmk5UZ9b0y5ton+62fC7Tw==",
"dev": true,
"requires": {
"fsevents": "~2.3.2"
}
},
"run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"requires": {
"queue-microtask": "^1.2.2"
}
},
"scheduler": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
"integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
"dev": true,
"peer": true,
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
},
"sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
"tailwindcss": {
"version": "3.0.22",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.22.tgz",
"integrity": "sha512-F8lt74RlNZirnkaSk310+vGQta7c0/hgx7/bqxruM4wS9lp8oqV93lzavajC3VT0Lp4UUtUVIt8ifKcmGzkr0A==",
"dev": true,
"requires": {
"arg": "^5.0.1",
"chalk": "^4.1.2",
"chokidar": "^3.5.3",
"color-name": "^1.1.4",
"cosmiconfig": "^7.0.1",
"detective": "^5.2.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
"fast-glob": "^3.2.11",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"normalize-path": "^3.0.0",
"object-hash": "^2.2.0",
"postcss": "^8.4.6",
"postcss-js": "^4.0.0",
"postcss-load-config": "^3.1.0",
"postcss-nested": "5.0.6",
"postcss-selector-parser": "^6.0.9",
"postcss-value-parser": "^4.2.0",
"quick-lru": "^5.1.1",
"resolve": "^1.22.0"
}
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
"vite": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.8.2.tgz",
"integrity": "sha512-zawfykcPVPYva4KusIWORNLr324Qx86/3NpfQSIOJdjnL5pYhwDoImLYMOh4lFLcP/7//tNuWM2vx2F5OSVC9w==",
"dev": true,
"requires": {
"esbuild": "^0.14.14",
"fsevents": "~2.3.2",
"postcss": "^8.4.6",
"resolve": "^1.22.0",
"rollup": "^2.59.0"
}
},
"vitepress": {
"version": "0.22.2",
"resolved": "https://registry.npmjs.org/vitepress/-/vitepress-0.22.2.tgz",
"integrity": "sha512-L6ykQzBXKzLTSU3zZbILeF1TONO6juV/RrL0DsA9OayomVQjEOoFY7cVdKOpIBb3T5Jy/GAAVxcvWtU/XJ5k4g==",
"dev": true,
"requires": {
"@docsearch/css": "^3.0.0-alpha.41",
"@docsearch/js": "^3.0.0-alpha.41",
"@vitejs/plugin-vue": "^2.2.0",
"prismjs": "^1.25.0",
"vite": "^2.8.1",
"vue": "^3.2.31"
}
},
"vue": {
"version": "3.2.31",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz",
"integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==",
"dev": true,
"requires": {
"@vue/compiler-dom": "3.2.31",
"@vue/compiler-sfc": "3.2.31",
"@vue/runtime-dom": "3.2.31",
"@vue/server-renderer": "3.2.31",
"@vue/shared": "3.2.31"
}
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true
},
"yaml": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true
}
}
}

21
docs/package.json Normal file
View file

@ -0,0 +1,21 @@
{
"name": "castopod-docs",
"version": "0.0.0-development",
"description": "Castopod documentation using vitepress",
"main": "index.js",
"scripts": {
"dev": "vitepress --port=3050",
"build": "vitepress build",
"serve": "vitepress serve"
},
"author": {
"name": "Yassine Doghri",
"email": "yassine@doghri.fr",
"url": "https://code.castopod.org/yassine"
},
"license": "AGPL-3.0-or-later",
"devDependencies": {
"tailwindcss": "^3.0.22",
"vitepress": "^0.22.2"
}
}

5
docs/postcss.config.js Normal file
View file

@ -0,0 +1,5 @@
/* eslint-disable */
module.exports = {
plugins: [require("tailwindcss")],
};

View file

@ -0,0 +1,4 @@
{
"label": "Contributing",
"position": 3
}

View file

@ -1,6 +1,10 @@
# Contributing to Castopod Host
---
title: Guidelines
---
Love Castopod Host and want to help? Thanks so much, there's something to do for
# Contributing to Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
Please take a moment to review this document in order to make the contribution
@ -12,13 +16,13 @@ should reciprocate that respect in addressing your issue or assessing patches
and features.
⚠️ Note that **any** contribution made on a repository other than
[the original repository](https://code.podlibre.org/podlibre/castopod-host) will
not be accepted.
[the original repository](https://code.castopod.org/ad-aures/castopod) will not
be accepted.
## Using the issue tracker
The [issue tracker](https://code.podlibre.org/podlibre/castopod-host/-/issues)
is the preferred channel for [bug reports](#bug-reports),
The [issue tracker](https://code.castopod.org/ad-aures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
@ -77,13 +81,13 @@ the project:
```bash
# Clone your fork of the repo into the current directory
git clone https://code.podlibre.org/<your-username>/castopod-host.git
git clone https://code.castopod.org/<your-username>/castopod.git
# Navigate to the newly cloned directory
cd castopod-host
cd castopod
# Assign the original repo to a remote called "upstream"
git remote add upstream https://code.podlibre.org/podlibre/castopod-host.git
git remote add upstream https://code.castopod.org/ad-aures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
@ -123,7 +127,7 @@ git push origin <topic-branch-name>
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
[GNU AGPLv3](https://code.podlibre.org/podlibre/castopod-host/-/blob/main/LICENSE).
[GNU AGPLv3](https://code.castopod.org/ad-aures/castopod/-/blob/main/LICENSE).
## Collaborating guidelines

View file

@ -1,40 +1,32 @@
# Setup your development environment <!-- omit in toc -->
---
title: Development setup
sidebarDepth: 3
---
## Table of contents <!-- omit in toc -->
- [Introduction](#introduction)
- [Pre-requisites](#pre-requisites)
- [(recommended) Develop inside the app Container with VSCode](#recommended-develop-inside-the-app-container-with-vscode)
- [(not-recommended) Develop outside the app container](#not-recommended-develop-outside-the-app-container)
- [Install Castopod Host's dependencies](#install-castopod-hosts-dependencies)
- [Initialize and populate database](#initialize-and-populate-database)
- [Start hacking](#start-hacking)
- [Going Further](#going-further)
- [Useful docker / docker-compose commands](#useful-docker--docker-compose-commands)
- [Known issues](#known-issues)
- [Allocation failed - JavaScript heap out of memory](#allocation-failed---javascript-heap-out-of-memory)
- [Files created inside container are attributed to root locally (Linux)](#files-created-inside-container-are-attributed-to-root-locally-linux)
# Setup your development environment
## Introduction
Castopod Host is a web app based on the `php` framework
Castopod is a web app based on the `php` framework
[CodeIgniter 4](https://codeigniter.com).
To setup a dev environment, we use [Docker](https://www.docker.com/). A
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
> Know that you don't need any prior knowledge of Docker to follow the next
> steps. However, if you wish to use your own environment, feel free to do so!
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
## Pre-requisites
## Setup instructions
### 1. Pre-requisites
0. Install [docker](https://docs.docker.com/get-docker).
1. Clone Castopod Host project by running:
1. Clone Castopod project by running:
```bash
git clone https://code.podlibre.org/podlibre/castopod-host.git
git clone https://code.castopod.org/ad-aures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
@ -58,7 +50,7 @@ to help you kickstart your contribution.
database.default.hostname="mariadb"
database.default.database="castopod"
database.default.username="podlibre"
database.default.username="castopod"
database.default.password="castopod"
cache.handler="redis"
@ -78,12 +70,12 @@ to help you kickstart your contribution.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
## (recommended) Develop inside the app Container with VSCode
### 2. (recommended) Develop inside the app Container with VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically!
required services will be loaded automagically! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
@ -92,7 +84,7 @@ required services will be loaded automagically!
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod Host's php server.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
@ -105,8 +97,8 @@ required services will be loaded automagically!
using the following commands:
```bash
# run Castopod host server
php spark serve --host 0.0.0.0
# run Castopod server
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
@ -131,7 +123,22 @@ required services will be loaded automagically!
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
## (not-recommended) Develop outside the app container
### 3. Start hacking
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- username: **castopod**
- password: **castopod**
### 2-alt. Develop outside the app container
You do not wish to use the VSCode devcontainer? No problem!
@ -155,16 +162,17 @@ You do not wish to use the VSCode devcontainer? No problem!
> The `docker-compose up -d` command will boot 4 containers in the
> background:
>
> - `castopod-host_app`: a php based container with Castopod Host
> requirements installed
> - `castopod-host_redis`: a [redis](https://redis.io/) database to handle
> queries and pages caching
> - `castopod-host_mariadb`: a [mariadb](https://mariadb.org/) server for
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod-host_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
2. Run any command by prefixing them with `docker-compose run --rm app`:
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
@ -180,7 +188,11 @@ You do not wish to use the VSCode devcontainer? No problem!
docker-compose run --rm app git version
```
## Install Castopod Host's dependencies
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
@ -188,13 +200,15 @@ You do not wish to use the VSCode devcontainer? No problem!
composer install
```
> **Note:**
>
> The php dependencies aren't included in the repository. Composer will check
> the `composer.json` and `composer.lock` files to download the packages with
> the right versions. The dependencies will live under the `vendor/` folder.
> For more info, check out the
> [Composer documentation](https://getcomposer.org/doc/).
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
@ -202,13 +216,14 @@ You do not wish to use the VSCode devcontainer? No problem!
npm install
```
> **Note:**
>
> The javascript dependencies aren't included in the repository. Npm will
> check the `package.json` and `package.lock` files to download the packages
> with the right versions. The dependencies will live under the `node_module`
> folder. For more info, check out the
> [NPM documentation](https://docs.npmjs.com/).
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
@ -221,17 +236,21 @@ You do not wish to use the VSCode devcontainer? No problem!
npm run build:svg
```
> **Note:**
>
> The static assets generated live under the `public/assets` folder, it
> includes javascript, styles, images, fonts, icons and svg files.
::: info Note
## Initialize and populate database
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
> **Note:**
>
> You may skip this section if you go through the install wizard (go to
> `/cp-install`).
:::
### Initialize and populate database
::: tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
@ -272,14 +291,21 @@ You do not wish to use the VSCode devcontainer? No problem!
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
# Populates test data (login: admin / password: AGUehL3P)
php spark db:seed TestSeeder
```
# Populates with fake podcast analytics
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
# Populates with fake website analytics
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
@ -288,50 +314,53 @@ You do not wish to use the VSCode devcontainer? No problem!
- username: **admin**
- password: **AGUehL3P**
## Start hacking
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to:
- [localhost:8080](http://localhost:8080/) for the Castopod Host app
- [localhost:8888](http://localhost:8888/) for the phpmyadmin interface:
- username: **podlibre**
- password: **castopod**
---
## Going Further
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
# monitor the app container
docker-compose logs --tail 50 --follow --timestamps app
```
# interact with redis server using included redis-cli command
docker exec -it castopod-host_redis redis-cli
- Interact with redis server using included redis-cli command:
# monitor the redis container
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
# monitor the mariadb container
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
# monitor the phpmyadmin container
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
# restart docker containers
- Restart docker containers:
```bash
docker-compose restart
```
# Destroy all containers, opposite of `up` command
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
# Rebuild app container
- Rebuild app container:
```bash
docker-compose build app
```
@ -348,13 +377,15 @@ This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### Files created inside container are attributed to root locally (Linux)
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
> **Note:**
>
> Replace "username" with your local username
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:

View file

@ -0,0 +1,4 @@
{
"label": "Getting Started",
"position": 2
}

View file

@ -0,0 +1,154 @@
---
title: Installation
sidebarDepth: 3
---
# How to install Castopod?
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.
## Requirements
- PHP v8.0 or higher
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
### PHP v8.0 or higher
PHP version 8.0 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) with **JPEG**,
**PNG** and **WEBP** libraries.
Additionally, make sure that the following extensions are enabled in your PHP:
- 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)
### MySQL compatible database
> We recommend using [MariaDB](https://mariadb.org).
::: warning
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
:::
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.
#### Privileges
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`.
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
[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:
- **FreeType 2** library for
[gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
## Install instructions
### Pre-requisites
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):
- For social features to work properly, this task is used to broadcast social
activities to your followers on the fediverse:
```bash
* * * * * /path/to/php /path/to/castopod/public/index.php scheduled-activities
```
- For Video Clips to be created (see
[FFmpeg requirements](#ffmpeg-v418-or-higher-for-video-clips)):
```bash
* * * * * /path/to/php /path/to/castopod/public/index.php scheduled-video-clips
```
> These tasks run **every minute**. You may set the frequency depending on
> your needs: every 5, 10 minutes or more.
### (recommended) Install Wizard
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!
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can
[create and update the `.env` file manually](#alternative-manual-configuration).
:::
## 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.
### 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
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><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>Github
Repo</a>
</div>
### Install with Docker
I you wish to use Docker to install Castopod, it is possible thanks to
[Romain de Laage](https://podcastindex.social/web/@rdelaage@mamot.fr)!
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
with
Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
::: info Note
Given high demand for docker, we are planning on maintaining an official Docker
image directly into the Castopod repository.
:::

View file

@ -0,0 +1,26 @@
---
title: Security
---
# Security concerns
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
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/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
```bash
sudo chown -R root:root /path/to/castopod
sudo chown -R www-data:www-data /path/to/castopod/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media
```

View file

@ -1,44 +1,46 @@
# How to update Castopod Host <!-- omit in toc -->
---
title: Update
sidebarDepth: 3
---
After installing _Castopod Host_, you may want to update your instance to the
latest version in order to enjoy the latest features ✨, bug fixes 🐛 and
performance improvements ⚡.
# How to update Castopod?
## Table of contents <!-- omit in toc -->
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
- [Manual update instructions](#manual-update-instructions)
- [Automatic update instructions](#automatic-update-instructions)
- [Frequently asked questions (FAQ)](#frequently-asked-questions-faq)
- [Where can I find my _Castopod Host_ version?](#where-can-i-find-my-castopod-host-version)
- [I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
- [Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
## Automatic update instructions
> Coming soon... 👀
## Manual update instructions
1. Go to the
[releases page](https://code.podlibre.org/podlibre/castopod-host/-/releases)
and see if your instance is up to date with the latest _Castopod Host_
version
[releases page](https://code.castopod.org/ad-aures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
- cf.
[Where can I find my _Castopod Host_ version?](#where-can-i-find-my-castopod-host-version)
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Host Package`, you may
choose between the `zip` or `tar.gz` archives
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 Host Package and **NOT** the Source
Code
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
3. On your server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Note: you may need to reset files permissions as during the install
process. Check
[Security Concerns section in INSTALL.md](./INSTALL.md#security-concerns).
::: info Note
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
:::
4. Releases may come with additional update instructions (see
[releases page](https://code.podlibre.org/podlibre/castopod-host/-/releases)).
[releases page](https://code.castopod.org/ad-aures/castopod/-/releases)).
They are usually database migration scripts in `.sql` format to update your
database schema.
@ -50,16 +52,12 @@ performance improvements ⚡.
5. If you are using redis, clear your cache.
6. ✨ Enjoy your fresh instance, you're all done!
## Automatic update instructions
> Coming soon... 👀
## Frequently asked questions (FAQ)
### Where can I find my _Castopod Host_ version?
### Where can I find my Castopod version?
Go to your _Castopod Host_ admin panel, the version is displayed on the bottom
left corner.
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
@ -71,12 +69,12 @@ through the release instructions (4), perform them sequentially, from the oldest
to the newest.
> You may want to backup your instance depending on how long you haven't updated
> _Castopod Host_.
> Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
0. (recommended) Make a backup of your files and database.
0. (highly recommended) Make a backup of your files and database.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
@ -91,5 +89,5 @@ For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
We advise you do, so you don't lose everything if anything goes wrong!
More generally, we advise you make regular backups of your Castopod Host files
and database to prevent you from losing it all…
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…

207
docs/src/index.md Normal file
View file

@ -0,0 +1,207 @@
---
sidebarDepth: 2
---
# Welcome 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod is a free & open-source hosting platform made for podcasters who want
engage and interact with their audience.
Castopod is easy to install and was built on top of
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
::: info Note
Castopod is currently in **beta** but already quite stable and used by
podcasters around&nbsp;the&nbsp;world!
:::
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## 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, 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;Publish and broadcast everywhere with RSS: Podcast Index, Apple
Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- 📥 &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, and more to come!
## 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.
It is in fact one of the only media to have stayed this way for a long time.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
## Comparison with other solutions
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 vs Wordpress
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.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
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.
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.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
### Castopod vs Funkwhale
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 was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
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, …).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
### Castopod vs other podcast hosts
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
That being said, there are two main differences with any other podcasting
solution:
- 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 is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
## Contributing
Love Castopod and would like to help? Take a look at the following documentation
to get you started.
### Code of conduct
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/ad-aures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be tolerated.
### Contributing guide
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.
## Contact
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/ad-aures/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) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
<a href="https://opencollective.com/castopod/contribute" class="inline-flex items-center font-semibold text-black underline gap-x-1 decoration-pine-500 decoration-4 hover:no-underline" target="_blank" rel="noopener noreferrer">Become a sponsor<svg viewBox="0 0 24 24" class="h-6"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
[release]: https://code.castopod.org/ad-aures/castopod/-/releases
[release-badge]:
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
[license]: https://code.castopod.org/ad-aures/castopod/-/blob/beta/LICENSE.md
[license-badge]:
https://img.shields.io/github/license/ad-aures/castopod?color=blue
[semantic-release]: https://github.com/semantic-release/semantic-release
[semantic-release-badge]:
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
[discord]: https://castopod.org/discord
[discord-badge]: https://img.shields.io/badge/chat-on%20discord-7389D8
[stars]: https://github.com/ad-aures/castopod/stargazers
[stars-badge]:
https://img.shields.io/github/stars/ad-aures/castopod?style=social

BIN
docs/src/public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 324 65">
<path fill="#009486" d="M26.6 40.2c-1.4 1.3-3 2.3-4.9 3.1-1.9.7-4 1.1-6.2 1.1-3 0-5.6-.6-8-1.9-2.3-1.3-4.2-3-5.5-5.2-1.3-2.2-2-4.7-2-7.5s.7-5.3 2-7.5 3.2-3.9 5.5-5.2c2.3-1.3 5-1.9 8-1.9 2.2 0 4.3.4 6.2 1.1 1.9.7 3.5 1.7 4.9 3.1l-5.7 5.4c-1.3-1.7-3.1-2.5-5.4-2.5-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4s.7 4 2 5.4c1.3 1.4 3 2.2 5.1 2.2 2.2 0 4-.8 5.4-2.5l5.7 5.2ZM31.1 36.1c0-1.9.5-3.5 1.6-5s2.6-2.6 4.4-3.5c1.9-.9 4.1-1.3 6.5-1.3a23.36 23.36 0 0 1 5 .5c-.6-3.1-2.8-4.6-6.7-4.6-2.3 0-4.5.9-6.8 2.6L32.3 18c1.9-.9 3.9-1.6 5.8-2.1 1.9-.4 3.7-.7 5.4-.7 2.7 0 5.1.5 7.1 1.5s3.5 2.5 4.6 4.3c1.1 1.9 1.7 4 1.7 6.6v16.2h-6.8l-.5-3c-1 1.1-2.3 2-3.8 2.6-1.5.6-3.2 1-5 1-2.8 0-5.2-.8-7-2.3a7.42 7.42 0 0 1-2.7-6Zm8-1.8c0 .9.4 1.7 1.1 2.3.7.6 1.7.9 2.8.9 1.6 0 3-.5 4.1-1.5 1.1-1 1.6-2.2 1.6-3.6v-.6c-.7-.2-1.4-.4-2.2-.5-.8-.1-1.6-.2-2.3-.2-1.6 0-2.8.3-3.7.8-.9.5-1.4 1.3-1.4 2.4ZM61.9 40.3l3.8-6.1c1.6 1.1 3.1 1.9 4.4 2.5 1.4.6 2.6.9 3.6.9.8 0 1.5-.2 2-.6.5-.4.8-.9.8-1.4 0-.8-.5-1.5-1.4-2-.9-.5-2-1-3.3-1.5-1.3-.5-2.6-1.2-3.9-1.8-1.3-.7-2.4-1.6-3.3-2.7a6.4 6.4 0 0 1-1.3-4.2c0-2.4.9-4.3 2.8-5.9 1.9-1.5 4.5-2.3 8-2.3 1.7 0 3.5.2 5.3.6 1.9.4 3.6 1.1 5.1 2l-3.6 6.1c-.8-.5-1.9-1-3.2-1.4-1.3-.4-2.4-.6-3.4-.6-.5 0-1.1.1-1.7.3-.6.2-.9.6-.9 1.2 0 .7.4 1.3 1.3 1.7.9.4 1.9.9 3.1 1.4 1.3.5 2.6 1.1 4 1.8s2.5 1.6 3.5 2.7c.9 1.1 1.4 2.6 1.4 4.4 0 1.8-.5 3.4-1.5 4.7-1 1.3-2.4 2.3-4 3-1.7.7-3.5 1.1-5.6 1.1-1.9 0-3.9-.3-6-1-2.1-.5-4.1-1.5-6-2.9ZM88.6 15.8h4.6v-7h8.1v7h6.8v7h-6.8v10.3c0 1.3.4 2.4 1.3 3.1.9.8 1.9 1.1 3.2 1.1 1 0 2-.2 3-.6v6.6c-1.8.7-3.5 1-5.2 1-3.3 0-5.9-.9-7.7-2.7-1.8-1.8-2.7-4.3-2.7-7.7V22.5h-4.6v-6.7ZM113.1 29.8c0-2.8.6-5.3 2-7.5 1.3-2.2 3.1-3.9 5.3-5.2 2.3-1.3 4.8-1.9 7.7-1.9 2.9 0 5.4.6 7.7 1.9 2.2 1.3 4 3 5.3 5.2 1.3 2.2 2 4.7 2 7.5s-.7 5.3-2 7.5-3.1 3.9-5.3 5.2c-2.2 1.3-4.8 1.9-7.7 1.9-2.9 0-5.5-.6-7.7-1.9-2.3-1.3-4-3-5.3-5.2-1.4-2.2-2-4.7-2-7.5Zm7.8 0c0 2.2.7 4 2 5.4 1.3 1.4 3 2.2 5.1 2.2 2.1 0 3.8-.7 5.1-2.2 1.3-1.4 2-3.2 2-5.4s-.7-4-2-5.4a6.87 6.87 0 0 0-5.1-2.2c-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4ZM148.4 15.8h7.6l.2 3c1.2-1.1 2.6-2 4.1-2.7 1.6-.6 3.3-.9 5.1-.9 2.6 0 5 .6 7 1.9 2.1 1.3 3.7 3 4.9 5.2 1.2 2.2 1.8 4.7 1.8 7.5s-.6 5.3-1.8 7.5c-1.2 2.2-2.8 3.9-4.9 5.2-2.1 1.3-4.4 1.9-7 1.9-1.8 0-3.4-.3-4.9-.9-1.5-.6-2.9-1.4-4-2.5v23.8h-8.1v-49Zm15.2 6.4c-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4s.7 4 2 5.4c1.3 1.4 3 2.2 5.1 2.2 2.1 0 3.8-.7 5.1-2.2 1.3-1.4 2-3.2 2-5.4s-.7-4-2-5.4a6.67 6.67 0 0 0-5.1-2.2ZM182.4 29.8c0-2.8.6-5.3 2-7.5 1.3-2.2 3.1-3.9 5.3-5.2 2.3-1.3 4.8-1.9 7.7-1.9 2.9 0 5.4.6 7.7 1.9 2.2 1.3 4 3 5.3 5.2 1.3 2.2 2 4.7 2 7.5s-.7 5.3-2 7.5-3.1 3.9-5.3 5.2c-2.2 1.3-4.8 1.9-7.7 1.9-2.9 0-5.5-.6-7.7-1.9-2.3-1.3-4-3-5.3-5.2-1.3-2.2-2-4.7-2-7.5Zm7.9 0c0 2.2.7 4 2 5.4 1.3 1.4 3 2.2 5.1 2.2 2.1 0 3.8-.7 5.1-2.2 1.3-1.4 2-3.2 2-5.4s-.7-4-2-5.4a6.87 6.87 0 0 0-5.1-2.2c-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4ZM215.8 29.8c0-2.8.6-5.3 1.8-7.5 1.2-2.2 2.8-3.9 4.9-5.2 2.1-1.3 4.4-1.9 7-1.9 1.8 0 3.4.3 4.9.9 1.5.6 2.9 1.4 4 2.5V0h8.1v43.9h-7.6l-.2-3c-1.2 1.1-2.6 2-4.1 2.7-1.6.6-3.3.9-5.1.9-2.6 0-5-.6-7-1.9-2.1-1.3-3.7-3-4.9-5.2-1.2-2.3-1.8-4.8-1.8-7.6Zm8.3 0c0 2.2.7 4 2 5.4 1.3 1.4 3 2.2 5.1 2.2 2.1 0 3.8-.7 5.1-2.2 1.3-1.4 2-3.2 2-5.4s-.7-4-2-5.4a6.87 6.87 0 0 0-5.1-2.2c-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4ZM318.7 44h-10.82s-1.13-2.41-1.6-3.26c-.45-.86-1.55-.82-1.55-.82h-29.38s-1.07-.14-1.6.82c-.57.95-1.63 3.26-1.63 3.26h-10.65a4.47 4.47 0 0 1-4.47-4.44V4.47A4.47 4.47 0 0 1 261.44 0h57.23a4.47 4.47 0 0 1 4.47 4.44v35.09a4.45 4.45 0 0 1-4.43 4.47Z"></path>
<path fill="#E7F9E4" d="M274.95 9.51h30.2a9.34 9.34 0 0 1 9.4 9.44c0 5.18-4.22 9.4-9.4 9.4h-30.2a9.42 9.42 0 0 1 0-18.84Z"></path>
<path fill="#009486" d="M302.77 15.36a4.61 4.61 0 0 0-3.64 7.46s1.58-1.18 3.8-1.18c1.67 0 3.6 1.01 3.6 1.01a4.61 4.61 0 0 0-3.76-7.29ZM277.23 15.36a4.61 4.61 0 0 0-3.77 7.3s1.94-1.02 3.6-1.02c2.23 0 3.8 1.18 3.8 1.18a4.61 4.61 0 0 0-3.64-7.45Z"></path>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,10 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 104 20"
fill="#2A2D7C"
height="4rem"
>
<path
d="M38.56 6.39v9.18h-2.44l-.27-.65a4.35 4.35 0 01-2.77 1A4.68 4.68 0 0128.26 11a4.66 4.66 0 014.82-4.86 4.37 4.37 0 012.8 1l.33-.71zm-3 4.6a2.06 2.06 0 10-4.11 0 2.06 2.06 0 104.11 0zM50.25 3.09v12.49h-2.34l-.3-.68a4.22 4.22 0 01-2.77 1A4.68 4.68 0 0140 11a4.68 4.68 0 014.84-4.9 4.25 4.25 0 012.28.64V3.09zM47.32 11a2.06 2.06 0 10-4.11 0 2.06 2.06 0 104.11 0zM65.69 6.39v9.18h-2.44l-.25-.65a4.33 4.33 0 01-2.77 1A4.67 4.67 0 0155.4 11a4.65 4.65 0 014.81-4.86 4.35 4.35 0 012.8 1l.33-.71zm-3 4.6a2.06 2.06 0 10-4.11 0 2.06 2.06 0 104.11 0zM67.57 11.64V6.4h3.16v5.1c0 1 .52 1.54 1.37 1.54s1.35-.58 1.35-1.54V6.4h3.16v5.24c0 2.57-1.8 4.24-4.51 4.24s-4.53-1.67-4.53-4.24zM84.46 6.36v2.89h-1.23c-1.12 0-1.59.49-1.59 1.66v4.67h-3.16V6.4h2.12l.49 1a3.07 3.07 0 012.53-1.06zM95 10.91a5.9 5.9 0 01-.06.83h-6.86a1.79 1.79 0 001.92 1.6 1.85 1.85 0 001.66-.86h3.14A5 5 0 0185 11a5 5 0 0110-.08zM88.14 10h3.71A1.84 1.84 0 0090 8.58 1.77 1.77 0 0088.14 10zM99.94 15.88c-2.5 0-4-1.32-4-3.31h3a.94.94 0 001.07 1c.46 0 .9-.23.9-.71s-.69-.68-1.57-.82C97.9 11.79 96 11.36 96 9.13c0-1.84 1.57-3 3.92-3s3.86 1.25 3.89 3.11h-3c0-.59-.39-.86-1-.86s-.85.25-.85.67.7.65 1.57.8c1.45.26 3.38.56 3.38 2.89 0 1.92-1.62 3.17-4.06 3.17zM0 0v20h20V0zm13.34 12.66a3.84 3.84 0 01-2.51 3.6 3.9 3.9 0 01-1.33.24 3.84 3.84 0 01-1.33-7.44 1 1 0 011.32.61A1 1 0 018.88 11a1.78 1.78 0 001.24 3.34 1.76 1.76 0 001.16-1.67V7.19a1.64 1.64 0 00-3.28 0 1 1 0 11-2 0 3.69 3.69 0 017.38 0z"
></path>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,64 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 449 168" height="4rem">
<path
fill="#98bf00"
d="m446.6 73.88 2.5-13.65h-12.9l3.76-20.08-15.45 6.04-2.5 14.04h-9.4l-2.5 13.65h9.25l-3.15 17.3c-.14.94-.4 2.34-.64 4.14-.25 1.8-.4 3.4-.4 4.75.04 6.25 1.54 11.4 4.5 15.45 2.94 4.14 7.74 6.59 14.44 7.34l6.44-13.3c-3.44-.44-6.04-1.8-7.89-4.1-1.85-2.34-2.75-5.3-2.75-8.89 0-.7.1-1.7.25-3.05.15-1.35.3-2.45.45-3.3l3-16.34h13ZM310.7 72.33c2.4-.85 4.5-1.3 6.26-1.3 1.9 0 3.5.55 4.8 1.65 1.24 1.05 1.84 2.6 1.84 4.75 0 .6-.1 1.5-.3 2.75-.2 1.15-.35 2.2-.5 3.1l-3.6 16.89-.75 4.05c-.25 1.45-.34 2.7-.34 3.75 0 4.05 1.1 7.44 3.34 10.14 2.15 2.7 6 4.3 11.55 4.75l6.35-12.84c-2.16-.35-3.7-1.15-4.65-2.4-1-1.2-1.5-2.9-1.5-5.05 0-.5.05-1.1.15-1.75.05-.65.15-1.2.2-1.6l3.64-17.2c.3-1.44.56-2.9.75-4.34.2-1.4.3-2.8.3-4.15 0-4.95-1.44-8.94-4.34-11.9-2.95-2.94-7.05-4.44-12.3-4.44-3.05 0-5.94.5-8.8 1.5-2.8.95-6.2 2.54-10.14 4.9a17.35 17.35 0 0 0-2.8-6.75l-13.4 5.75a20.5 20.5 0 0 1 2.6 5.5 21.16 21.16 0 0 1 .56 8.4c-.1 1.14-.25 2.04-.4 2.69l-7.95 42.33h14.4l8.44-45.68a23.33 23.33 0 0 1 6.6-3.5Z"
></path>
<path
fill="#98bf00"
fill-rule="evenodd"
d="M350.74 80.08c-1.55 4.6-2.3 9.5-2.3 14.64 0 4.5.6 8.5 1.75 12s2.8 6.44 4.9 8.8a20.1 20.1 0 0 0 7.55 5.44 25.05 25.05 0 0 0 9.84 1.9c4.35 0 8.65-.8 12.95-2.4a30.3 30.3 0 0 0 11.4-7.44l-5.4-12.5c-2.5 2.8-5.25 4.9-8.3 6.35a21.07 21.07 0 0 1-9.1 2.15c-3.5 0-6.24-1.1-8.24-3.3a12.35 12.35 0 0 1-2.95-8.35v-.95c0-.4.05-.8.15-1.2a203.42 203.42 0 0 0 19.19-3.5c3.45-.84 6.8-1.8 10.1-2.8 3.24-1 6.14-2.05 8.6-3.1v-5.74c0-3.55-.56-6.75-1.66-9.6a23.32 23.32 0 0 0-4.6-7.2c-1.94-2-4.3-3.5-6.94-4.5a22.59 22.59 0 0 0-8.5-1.6c-4.45 0-8.6 1-12.34 2.96a28.48 28.48 0 0 0-9.7 8.1 38.55 38.55 0 0 0-6.4 11.84Zm21.64-10.1c1.55-.85 3.3-1.25 5.25-1.25 2.65 0 4.85.85 6.6 2.6 1.75 1.7 2.65 4.25 2.65 7.7-1.45.45-3.15 1-5.15 1.55-2.05.5-4.1 1-6.2 1.45-2.15.45-4.2.9-6.24 1.3l-5.3.9c.24-2.1.7-4.1 1.4-5.95.75-1.85 1.7-3.5 2.84-4.9 1.25-1.4 2.6-2.55 4.15-3.4Z"
></path>
<path
fill-rule="evenodd"
d="M404.17 140.45c0-1.25-.2-2.4-.6-3.4-.4-1-.95-1.84-1.6-2.6-.7-.7-1.5-1.24-2.45-1.6-.95-.34-2-.54-3.1-.54a9.95 9.95 0 0 0-7.34 3.2 11.49 11.49 0 0 0-3.1 7.9c0 1.24.2 2.34.6 3.4.35 1 .9 1.84 1.6 2.54.65.75 1.5 1.3 2.44 1.7.95.35 2 .55 3.15.55a9.87 9.87 0 0 0 7.3-3.2c.95-.95 1.7-2.15 2.25-3.5s.85-2.84.85-4.45Zm-13.9-.05c.3-.9.7-1.7 1.2-2.4.55-.7 1.2-1.25 1.96-1.7a4.66 4.66 0 0 1 2.5-.64c1.44 0 2.5.45 3.24 1.34.75.86 1.15 2.1 1.15 3.65 0 .95-.15 1.9-.45 2.85a6.75 6.75 0 0 1-3.15 4.1c-.75.4-1.6.6-2.5.6-1.45 0-2.5-.45-3.24-1.3a5.5 5.5 0 0 1-1.16-3.65c0-.94.16-1.9.46-2.85Z"
></path>
<path
d="M434.56 132.56H431l-1.9 11.04c-.05.15-.1.4-.1.75v.85h-.15l-6.4-12.64h-3.35l-3.34 18.74h3.6l2-11.3c.04-.14.04-.4.04-.64v-.86h.15l6.55 12.95 3.2-.3 3.25-18.6ZM374.38 132.56h-3.65l-3.34 18.74h3.7l3.3-18.74Z"
></path>
<path
fill-rule="evenodd"
d="M328.95 132.56h-4.25c-.8 1.35-1.65 2.9-2.6 4.55-.95 1.64-1.85 3.34-2.75 5.04-.9 1.7-1.7 3.35-2.44 4.95-.75 1.6-1.36 3-1.8 4.2h3.84c.16-.35.3-.8.5-1.25.2-.45.4-.95.66-1.4l.6-1.35c.2-.45.4-.85.54-1.2h6.5c.05.45.05.9.1 1.4l.15 1.45.15 1.35c.05.45.05.8.05 1.15l3.7-.3c0-.7-.05-1.5-.15-2.45-.05-.95-.2-1.95-.35-3-.15-1.05-.3-2.2-.5-3.35-.15-1.15-.35-2.3-.6-3.44-.2-1.16-.4-2.25-.65-3.35-.25-1.05-.45-2.05-.7-3Zm-2.35 5.55.3 1.8c.1.6.2 1.2.25 1.74.1.55.15.95.2 1.3h-4.65c.25-.45.5-.95.75-1.5.3-.55.6-1.14.9-1.75.35-.6.65-1.14.95-1.7.3-.55.55-1.04.8-1.4h.2c.1.4.2.9.3 1.5Z"
></path>
<path
d="m357.64 135.96.55-3.4h-12.8l-.55 3.4h4.55l-2.65 15.34h3.65l2.7-15.34h4.55Z"
></path>
<path
fill-rule="evenodd"
d="M297.46 132.3c-1.05 0-2.1.06-3.15.16-1.04.15-2.04.3-3 .55l-3.14 17.84c.95.25 2.04.4 3.24.55 1.16.15 2.25.2 3.3.2a11.19 11.19 0 0 0 7.85-2.95c1-.95 1.8-2.1 2.4-3.45.55-1.35.85-2.9.85-4.6 0-1.35-.2-2.5-.6-3.54a7.4 7.4 0 0 0-1.75-2.6 7.56 7.56 0 0 0-2.65-1.6 10.5 10.5 0 0 0-3.35-.55Zm-.8 3.4c.75 0 1.45.1 2.1.26.65.15 1.2.45 1.65.84.5.4.9.9 1.15 1.56.25.6.4 1.34.4 2.3 0 1.2-.15 2.24-.5 3.2a5.79 5.79 0 0 1-3.5 3.85 7.1 7.1 0 0 1-2.8.49c-.45 0-.9 0-1.45-.05-.55-.05-1.05-.1-1.4-.15l2.15-12.1 1.15-.15c.45-.04.8-.04 1.05-.04Z"
></path>
<path
d="M185.8 62.59a20.53 20.53 0 0 1 2.6 5.5 21.16 21.16 0 0 1 .56 8.4c-.1 1.14-.25 2.04-.4 2.69l-7.95 42.33H195l8.44-45.68a23.33 23.33 0 0 1 6.6-3.5c2.4-.85 4.5-1.3 6.25-1.3 1.9 0 3.5.55 4.8 1.65 1.24 1.05 1.84 2.6 1.84 4.75 0 .6-.1 1.5-.3 2.75-.2 1.15-.35 2.2-.5 3.1l-3.6 16.89-.75 4.05c-.24 1.45-.34 2.7-.34 3.75 0 4.05 1.1 7.44 3.34 10.14 2.15 2.7 6 4.3 11.55 4.75l6.35-12.84c-2.15-.35-3.7-1.15-4.65-2.4-1-1.2-1.5-2.9-1.5-5.05 0-.5.05-1.1.15-1.75.05-.65.15-1.2.2-1.6l3.65-17.2c.3-1.44.55-2.9.75-4.34.2-1.4.3-2.8.3-4.15 0-4.95-1.45-8.94-4.35-11.9-2.95-2.94-7.05-4.44-12.3-4.44-3.04 0-5.94.5-8.8 1.5-2.8.95-6.2 2.54-10.14 4.9a17.35 17.35 0 0 0-2.8-6.75l-13.4 5.75ZM276.82 31.55h-14.14l-10.8 58.47c-.45 1.95-.8 4-1.05 6.15-.25 2.1-.4 4.05-.4 5.85 0 5.8 1.1 10.55 3.35 14.24 2.25 3.7 6.05 5.9 11.4 6.6l6.5-13.3a18.96 18.96 0 0 1-2.8-1.64 7.2 7.2 0 0 1-2.1-2.15 8.1 8.1 0 0 1-1.3-3.05c-.25-1.2-.4-2.7-.4-4.45 0-.85.05-1.8.15-2.8l.45-3.2 11.14-60.72ZM246.43 132.56h-3.65l-2.4 13.69a5.7 5.7 0 0 1-4.3 1.95c-.9 0-1.6-.2-2.1-.6-.54-.45-.8-1.15-.8-2.2 0-.2.06-.5.1-.9.06-.35.06-.7.1-1l2-10.94h-3.7l-1.94 10.9-.15 1.34c-.05.45-.05.8-.05 1.15 0 1 .15 1.85.45 2.6a4.55 4.55 0 0 0 3 2.75 7.94 7.94 0 0 0 7.15-1.4c0 .25 0 .55.05.85 0 .25 0 .5.04.75l3.65-.25c-.04-.25-.04-.5-.04-.8-.06-.25-.06-.55-.06-.9 0-.6.06-1.25.1-1.9.05-.7.1-1.35.25-1.95l2.3-13.14ZM276.62 132.56h-3.55l-1.9 11.04c-.05.15-.1.4-.1.75v.85h-.15l-6.4-12.64h-3.34l-3.35 18.74h3.6l2-11.3c.05-.14.05-.4.05-.64v-.86h.14l6.56 12.95 3.2-.3 3.24-18.6Z"
></path>
<path
fill-rule="evenodd"
d="M214.8 134.46c-.7-.7-1.5-1.25-2.45-1.6-.95-.35-2-.55-3.1-.55a9.97 9.97 0 0 0-7.35 3.2 11.5 11.5 0 0 0-3.1 7.9c0 1.24.2 2.34.6 3.4.35 1 .9 1.84 1.6 2.54.65.75 1.5 1.3 2.45 1.7.95.35 2 .55 3.15.55a9.87 9.87 0 0 0 7.3-3.2 10.5 10.5 0 0 0 2.25-3.5c.54-1.35.85-2.84.85-4.45 0-1.25-.2-2.4-.6-3.4a9.1 9.1 0 0 0-1.6-2.6ZM204.3 138c.55-.7 1.2-1.25 1.95-1.7a4.68 4.68 0 0 1 2.5-.64c1.45 0 2.5.45 3.25 1.34.75.86 1.15 2.1 1.15 3.65 0 .95-.15 1.9-.46 2.85a6.75 6.75 0 0 1-3.14 4.1c-.75.4-1.6.6-2.5.6-1.45 0-2.5-.45-3.25-1.3a5.5 5.5 0 0 1-1.15-3.65 8.99 8.99 0 0 1 1.65-5.25Z"
></path>
<path
d="M188.26 132.56h-10.3l-3.35 18.74h3.7l1.25-7.15h6.75l.6-3.4h-6.75l.85-4.8h6.65l.6-3.4Z"
></path>
<path
fill="#98bf00"
d="M127.08 44.9c1.35-10.95-1.4-20.8-8.2-29.5C112.08 6.7 103.2 1.66 92.25.3c-10.95-1.34-20.8 1.41-29.5 8.2-8.04 6.25-12.94 14.3-14.69 24.15-.15.85-.3 1.65-.4 2.5-.1.85-.15 1.65-.2 2.44-.35 4.6.1 9 1.3 13.2a39.3 39.3 0 0 0 7.1 13.84 40.1 40.1 0 0 0 11.75 10.3c3.74 2.15 7.89 3.6 12.44 4.4.8.15 1.6.25 2.45.4l1.35.15A42.3 42.3 0 0 1 89 67.53c-1.55.05-3.15 0-4.75-.15-.1-.05-.15-.05-.2-.05-1.85-.25-3.65-.6-5.3-1.15a26.51 26.51 0 0 1-13.04-9.24 26.5 26.5 0 0 1-5.6-20.24v-.2c.95-7.45 4.4-13.5 10.34-18.15 6-4.65 12.75-6.55 20.3-5.6a26.2 26.2 0 0 1 18.29 10.35c4.65 6 6.55 12.74 5.65 20.3-.25 1.7-.55 3.3-1 4.84a41.3 41.3 0 0 1 13.2-2c.04-.45.14-.9.2-1.35Z"
></path>
<path
fill="#98bf00"
d="M132.33 51.49c-.85-.1-1.65-.2-2.5-.25-4.6-.3-9 .15-13.2 1.3a39.42 39.42 0 0 0-13.84 7.15 38.4 38.4 0 0 0-14.7 24.14c4.36.74 8.36 2 12.05 3.85a26.53 26.53 0 0 1 10.35-18.14 26.59 26.59 0 0 1 20.3-5.66h.14c7.44.96 13.5 4.45 18.14 10.4 4.7 5.95 6.6 12.7 5.65 20.24a26.77 26.77 0 0 1-10.34 18.34 26.42 26.42 0 0 1-20.15 5.6c.85 4.05 1.1 8.3.8 12.7 9.95.65 18.94-2.2 26.99-8.45 8.7-6.8 13.75-15.7 15.1-26.64 1.34-10.94-1.4-20.79-8.2-29.49-6.3-8.05-14.35-12.94-24.14-14.69-.85-.15-1.65-.3-2.45-.4Z"
></path>
<path
d="M128.93 78.73c-3.45-.4-6.5.45-9.25 2.6a11.9 11.9 0 0 0-4.7 8.3c-.45 3.44.4 6.5 2.55 9.24a11.9 11.9 0 0 0 8.35 4.7c3.4.45 6.45-.4 9.2-2.55 2.75-2.15 4.3-4.9 4.74-8.35.4-3.4-.44-6.44-2.6-9.2a12.15 12.15 0 0 0-8.29-4.74Z"
></path>
<path
fill="#98bf00"
d="M12.83 73.63c.95-7.55 4.4-13.7 10.4-18.34a26.12 26.12 0 0 1 20.09-5.6 44.33 44.33 0 0 1-.8-12.7c-9.95-.65-18.95 2.16-27 8.45C6.79 52.24 1.79 61.14.44 72.08c-1.35 10.95 1.35 20.74 8.2 29.49 6.24 8.05 14.3 12.95 24.14 14.7.8.14 1.6.24 2.45.4.85.1 1.65.2 2.5.24 4.6.3 9-.15 13.19-1.3 4.85-1.4 9.5-3.8 13.85-7.14 4.3-3.4 7.7-7.3 10.24-11.7a39.2 39.2 0 0 0 4.45-12.44 44.68 44.68 0 0 1-12.04-3.85c-.25 1.75-.6 3.45-1.1 5.1a26.53 26.53 0 0 1-9.25 13.04 26.59 26.59 0 0 1-20.3 5.65c-.04 0-.1 0-.14-.05a26.46 26.46 0 0 1-18.15-10.35 26.3 26.3 0 0 1-5.64-20.24Z"
></path>
<path
d="M32.47 67.13c-2.75 2.1-4.3 4.9-4.75 8.35a12 12 0 0 0 2.6 9.14 12 12 0 0 0 8.3 4.8 12.55 12.55 0 0 0 13.94-10.9c.45-3.44-.4-6.54-2.55-9.24a11.9 11.9 0 0 0-8.35-4.7c-3.45-.45-6.5.4-9.2 2.55ZM97.3 32.35a12 12 0 0 0-8.35-4.7c-3.45-.45-6.5.4-9.2 2.55A11.84 11.84 0 0 0 75 38.54c-.45 3.4.45 6.45 2.6 9.2a12.1 12.1 0 0 0 8.3 4.75c3.4.35 6.44-.5 9.2-2.6a12.26 12.26 0 0 0 4.74-8.3c.4-3.45-.45-6.54-2.55-9.24Z"
></path>
<path
fill="#98bf00"
d="m85.05 88.43-1.35-.16a42.3 42.3 0 0 1-5.15 12.35c1.55-.1 3.15-.05 4.8.15.05 0 .1 0 .15.05 1.85.2 3.6.55 5.3 1.1a26.63 26.63 0 0 1 13.04 9.3 26.23 26.23 0 0 1 5.6 20.24v.2a26.47 26.47 0 0 1-10.35 18.14 26.52 26.52 0 0 1-20.29 5.6 26.56 26.56 0 0 1-18.3-10.35c-4.7-6-6.59-12.74-5.64-20.29.2-1.7.55-3.3 1.05-4.85a43.3 43.3 0 0 1-13.25 2c-.04.45-.14.9-.2 1.35-1.34 10.95 1.36 20.74 8.2 29.49 6.8 8.7 15.7 13.74 26.64 15.1 10.95 1.34 20.74-1.4 29.49-8.2 8.05-6.3 12.94-14.35 14.7-24.2.14-.8.24-1.6.4-2.44.04-.85.14-1.65.2-2.45.3-4.65-.16-9.05-1.3-13.2a40.16 40.16 0 0 0-7.1-13.84 39.9 39.9 0 0 0-11.7-10.3 38.72 38.72 0 0 0-12.5-4.4c-.8-.14-1.6-.3-2.44-.4Z"
></path>
<path
d="M90 120.41a12.14 12.14 0 0 0-8.35-4.75c-3.45-.4-6.5.45-9.2 2.6a12.14 12.14 0 0 0-4.75 8.3c-.45 3.45.46 6.5 2.6 9.25 2.1 2.75 4.85 4.3 8.3 4.7 3.45.44 6.5-.4 9.25-2.56 2.7-2.14 4.24-4.9 4.7-8.34.4-3.4-.46-6.45-2.55-9.2Z"
></path>
</svg>

After

Width:  |  Height:  |  Size: 9.6 KiB

24
docs/tailwind.config.js Normal file
View file

@ -0,0 +1,24 @@
/* eslint-disable */
module.exports = {
content: ["./src/**/*.md"],
theme: {
extend: {
colors: {
pine: {
50: "#F2FAF9",
100: "#E7F9E4",
200: "#bfe4e1",
300: "#99d4cf",
400: "#4db4aa",
500: "#009486",
600: "#008579",
700: "#006D60",
800: "#00564A",
900: "#003D0B",
},
},
},
},
plugins: [],
};

16
docs/tsconfig.json Normal file
View file

@ -0,0 +1,16 @@
{
"compilerOptions": {
"outDir": "dist",
"target": "esnext",
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true,
"allowJs": true,
"strict": true,
"baseUrl": ".",
"paths": {
"/@theme/*": [".vitepress/theme/*"]
}
},
"include": ["src/**/*", ".vitepress/**/*"]
}

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,13 +3,14 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
namespace Modules\Admin\Controllers;
use AdAures\PodcastPersonsTaxonomy\ReversedTaxonomy;
use App\Entities\Episode;
use App\Entities\Location;
use App\Entities\Person;
@ -25,7 +26,6 @@ use CodeIgniter\HTTP\RedirectResponse;
use Config\Services;
use ErrorException;
use League\HTMLToMarkdown\HtmlConverter;
use Podlibre\PodcastNamespace\ReversedTaxonomy;
class PodcastImportController extends BaseController
{

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
/**
* ISO 3166 country codes
*
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2021 Podlibre
* @copyright 2021 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

View file

@ -3,7 +3,7 @@
declare(strict_types=1);
/**
* @copyright 2020 Podlibre
* @copyright 2020 Ad Aures
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/

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