diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index a650cb2df5..3976443d60 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -5,23 +5,28 @@ updates: directory: / schedule: interval: monthly + labels: [dependencies] - package-ecosystem: composer directory: /sourcecode/hub schedule: interval: weekly + labels: [dependencies] - package-ecosystem: npm directory: /sourcecode/hub schedule: interval: weekly + labels: [dependencies] - package-ecosystem: composer directory: /sourcecode/apis/contentauthor schedule: interval: weekly + labels: [dependencies] - package-ecosystem: npm directory: /sourcecode/apis/contentauthor schedule: interval: weekly + labels: [dependencies] diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 0000000000..b17880ca1c --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,58 @@ +'Component: Content Author': + - changed-files: + - any-glob-to-any-file: + - .github/workflows/contentauthor.yaml + - localSetup/projects/nginx/templates/ca.conf.template + - sourcecode/apis/contentauthor/** + +'Component: Hub': + - changed-files: + - any-glob-to-any-file: + - .github/workflows/hub.yaml + - localSetup/projects/nginx/templates/hub.conf.template + - sourcecode/hub/** + +dependencies: + - changed-files: + - any-glob-to-any-file: + - '**/composer.json' + - '**/composer.lock' + - '**/package.json' + - '**/package-lock.json' + - '**/yarn.lock' + +documentation: + - changed-files: + - any-glob-to-any-file: + - docs/** + - '**/*.md' + - '**/*.mdx' + +'Edlib 2': + - base-branch: edlib2 + +github_actions: + - changed-files: + - any-glob-to-any-file: + - .github/actions/** + - .github/workflows/** + +language: + - changed-files: + - any-glob-to-any-file: + - sourcecode/apis/contentauthor/resources/lang/** + - sourcecode/apis/contentauthor/resources/assets/react/language/** + - sourcecode/hub/lang/** + +composer: + - changed-files: + - any-glob-to-any-file: + - '**/composer.json' + - '**/composer.lock' + +npm: + - changed-files: + - any-glob-to-any-file: + - '**/package.json' + - '**/package-lock.json' + - '**/yarn.lock' diff --git a/.github/workflows/contentauthor.yaml b/.github/workflows/contentauthor.yaml index a68c341ef3..40aea49af1 100644 --- a/.github/workflows/contentauthor.yaml +++ b/.github/workflows/contentauthor.yaml @@ -51,7 +51,7 @@ jobs: - name: Set up PHP uses: shivammathur/setup-php@v2 with: - php-version: 8.2 + php-version: 8.3 - name: Manage php-cs-fixer cache uses: actions/cache@v4 @@ -95,7 +95,7 @@ jobs: - name: Set up PHP uses: shivammathur/setup-php@v2 with: - php-version: 8.2 + php-version: 8.3 extensions: sockets, zip coverage: pcov diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000000..05f396cacd --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,49 @@ +name: Documentation + +on: + push: + branches: + - master + paths: + - "docs/**" + - ".github/workflows/docs.yaml" + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: ./docs + + permissions: + contents: read + pages: write + id-token: write + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 16 + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Build + run: yarn build + + - name: Upload pages artifact + uses: actions/upload-pages-artifact@v2 + with: + path: ./docs/build + + - name: Deploy + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml new file mode 100644 index 0000000000..2c46b464e9 --- /dev/null +++ b/.github/workflows/labeler.yml @@ -0,0 +1,15 @@ +name: Pull Request Labeler + +on: + - pull_request_target + +jobs: + labeler: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v5 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/docker-compose.yml b/docker-compose.yml index 478d2684a9..23b42b2fa2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -36,6 +36,8 @@ services: hub-vite: image: node:18-alpine command: [sh, -c, 'npm ci && npm run dev'] + environment: + - SCARF_ANALYTICS=false volumes: - npm_cache:/root/.npm - ./sourcecode/hub:/srv/www/hub diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 4614e81305..ca2f86cc47 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -107,14 +107,6 @@ module.exports = { label: 'Contributing', to: '/docs/developers/contributing', }, - { - label: 'API documentation', - to: '/docs/developers/api-documentation/introduction', - }, - { - label: 'Plugins', - to: '/docs/developers/plugins', - }, ], }, { diff --git a/sourcecode/apis/contentauthor/.env.example b/sourcecode/apis/contentauthor/.env.example index c131c8cd7a..cb91259257 100644 --- a/sourcecode/apis/contentauthor/.env.example +++ b/sourcecode/apis/contentauthor/.env.example @@ -26,10 +26,18 @@ FILESYSTEM_DRIVER=local QUEUE_DRIVER=sync -#H5P_VIDEO_URL=https://videoapi-test.cerpusdev.net -#H5P_VIDEO_ADAPTER_KEY=contentauthortest -#H5P_VIDEO_ADAPTER_SECRET= -#H5P_VIDEO_ADAPTER_DELETEVIDEO=true +#H5P_VIDEO_ADAPTER=ndla +#NDLA_H5P_VIDEO_URL=https://cms.api.brightcove.com +#NDLA_H5P_VIDEO_AUTH_URL=https://oauth.brightcove.com/v4/access_token +#NDLA_H5P_VIDEO_ADAPTER_KEY= +#NDLA_H5P_VIDEO_ADAPTER_SECRET= +#NDLA_H5P_VIDEO_ACCOUNT_ID= + +#H5P_IMAGE_ADAPTER=ndla +#NDLA_H5P_IMAGE_URL=https://api.ndla.no + +#H5P_AUDIO_ADAPTER=ndla +#NDLA_H5P_AUDIO_URL=https://api.ndla.no H5P_SINGLE_CONTENT_UPGRADE=true H5P_NDLA_CUSTOM_CSS=false diff --git a/sourcecode/apis/contentauthor/Dockerfile b/sourcecode/apis/contentauthor/Dockerfile index bb09e38db0..ab16979a8b 100644 --- a/sourcecode/apis/contentauthor/Dockerfile +++ b/sourcecode/apis/contentauthor/Dockerfile @@ -1,4 +1,4 @@ -FROM php:8.2-fpm-alpine AS base +FROM php:8.3-fpm-alpine AS base RUN apk add --no-cache \ git \ @@ -6,7 +6,7 @@ RUN apk add --no-cache \ COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ -RUN IPE_GD_WITHOUTAVIF=1 install-php-extensions \ +RUN install-php-extensions \ bcmath \ gettext \ igbinary \ @@ -15,7 +15,6 @@ RUN IPE_GD_WITHOUTAVIF=1 install-php-extensions \ pcntl \ pdo_mysql \ redis \ - sockets \ xmlrpc \ zip @@ -106,7 +105,7 @@ RUN set -eux; \ chown -R www-data:www-data . -FROM prod as test +FROM prod AS test COPY phpunit.xml . COPY tests tests diff --git a/sourcecode/apis/contentauthor/app/Article.php b/sourcecode/apis/contentauthor/app/Article.php index 89061b2eb7..5c552938ec 100644 --- a/sourcecode/apis/contentauthor/app/Article.php +++ b/sourcecode/apis/contentauthor/app/Article.php @@ -77,7 +77,7 @@ public function render(): string } /** - * @return HasMany + * @return HasMany */ public function collaborators(): HasMany { @@ -85,7 +85,7 @@ public function collaborators(): HasMany } /** - * @return HasMany + * @return HasMany */ public function files(): HasMany { @@ -103,7 +103,7 @@ public function givesScore(): int } /** - * @return BelongsTo + * @return BelongsTo */ public function parent(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/Content.php b/sourcecode/apis/contentauthor/app/Content.php index 6bdc9a7a13..40d1d639b4 100644 --- a/sourcecode/apis/contentauthor/app/Content.php +++ b/sourcecode/apis/contentauthor/app/Content.php @@ -20,7 +20,6 @@ use Illuminate\Support\Facades\Session; use function htmlspecialchars_decode; - use function property_exists; use const ENT_HTML5; @@ -119,7 +118,7 @@ public function isOwner($currentUserId): bool abstract public function getContentType(bool $withSubType = false); /** - * @return HasOne + * @return HasOne */ public function ndlaMapper(): HasOne { @@ -132,7 +131,7 @@ public function isCopyable(): bool } /** - * @return HasMany + * @return HasMany */ public function locks(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/Events/LinkWasSaved.php b/sourcecode/apis/contentauthor/app/Events/LinkWasSaved.php deleted file mode 100644 index 6cb1674598..0000000000 --- a/sourcecode/apis/contentauthor/app/Events/LinkWasSaved.php +++ /dev/null @@ -1,25 +0,0 @@ -link = $link; - $this->reason = $reason; - } -} diff --git a/sourcecode/apis/contentauthor/app/Exceptions/GameTypeNotFoundException.php b/sourcecode/apis/contentauthor/app/Exceptions/GameTypeNotFoundException.php new file mode 100644 index 0000000000..318e5a10dc --- /dev/null +++ b/sourcecode/apis/contentauthor/app/Exceptions/GameTypeNotFoundException.php @@ -0,0 +1,11 @@ + + * @return BelongsTo */ public function article(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/Game.php b/sourcecode/apis/contentauthor/app/Game.php index e4343e4165..92b753047f 100644 --- a/sourcecode/apis/contentauthor/app/Game.php +++ b/sourcecode/apis/contentauthor/app/Game.php @@ -2,9 +2,12 @@ namespace App; +use App\Exceptions\GameTypeNotFoundException; +use App\Libraries\Games\Contracts\GameTypeContract; use App\Libraries\Games\GameHandler; use App\Libraries\Versioning\VersionableObject; use App\Traits\Collaboratable; +use Exception; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Concerns\HasUuids; @@ -36,8 +39,9 @@ class Game extends Content implements VersionableObject use HasUuids; public string $editRouteName = 'game.edit'; + /** - * @throws \Exception + * @throws GameTypeNotFoundException */ protected function getRequestContent(Request $request) { @@ -64,7 +68,7 @@ public function getISO6393Language(): string } /** - * @return BelongsTo + * @return BelongsTo */ public function gameType(): BelongsTo { @@ -77,15 +81,15 @@ public function getGameSettingsAttribute(string $gameSettings): Object } /** - * @throws \Exception + * @throws GameTypeNotFoundException */ - public function getGameTypeHandler(): Libraries\Games\Contracts\GameTypeContract + public function getGameTypeHandler(): GameTypeContract { return GameHandler::makeGameTypeFromId($this->gametype); } /** - * @throws \Exception + * @throws Exception */ public function makeCopy(string|null $owner = null): Game { @@ -94,7 +98,7 @@ public function makeCopy(string|null $owner = null): Game $game->owner = $owner; } if ($game->save() !== true) { - throw new \Exception(trans('game.could-not-make-copy-of-game', ["title" => $this->title])); + throw new Exception(trans('game.could-not-make-copy-of-game', ["title" => $this->title])); } return $game; @@ -142,4 +146,14 @@ protected function getTags(): array 'h5p:' . $this->getMachineName(), ]; } + + public function getMaxScore(): int|null + { + try { + $handler = $this->getGameTypeHandler(); + return $handler->getMaxScore(); + } catch (GameTypeNotFoundException) { + return null; + } + } } diff --git a/sourcecode/apis/contentauthor/app/Gametype.php b/sourcecode/apis/contentauthor/app/Gametype.php index be9152bead..711c231944 100644 --- a/sourcecode/apis/contentauthor/app/Gametype.php +++ b/sourcecode/apis/contentauthor/app/Gametype.php @@ -58,7 +58,7 @@ class Gametype extends Model ]; /** - * @return HasMany + * @return HasMany */ public function games(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/H5PContent.php b/sourcecode/apis/contentauthor/app/H5PContent.php index fc23f4c912..c551e95b74 100644 --- a/sourcecode/apis/contentauthor/app/H5PContent.php +++ b/sourcecode/apis/contentauthor/app/H5PContent.php @@ -69,7 +69,7 @@ class H5PContent extends Content implements VersionableObject ]; /** - * @return HasMany + * @return HasMany */ public function collaborators(): HasMany { @@ -77,7 +77,7 @@ public function collaborators(): HasMany } /** - * @return BelongsTo + * @return BelongsTo */ public function library(): BelongsTo { @@ -85,7 +85,7 @@ public function library(): BelongsTo } /** - * @return HasMany + * @return HasMany */ public function contentUserData(): HasMany { @@ -93,7 +93,7 @@ public function contentUserData(): HasMany } /** - * @return HasMany + * @return HasMany */ public function contentLibraries(): HasMany { @@ -101,7 +101,7 @@ public function contentLibraries(): HasMany } /** - * @return HasOne + * @return HasOne */ public function metadata(): HasOne { @@ -200,7 +200,7 @@ public function makeCopy($owner = null): self } /** - * @return HasMany + * @return HasMany */ public function contentVideos(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/H5PContentsMetadata.php b/sourcecode/apis/contentauthor/app/H5PContentsMetadata.php index fecbe502e7..6b32943863 100644 --- a/sourcecode/apis/contentauthor/app/H5PContentsMetadata.php +++ b/sourcecode/apis/contentauthor/app/H5PContentsMetadata.php @@ -21,7 +21,7 @@ class H5PContentsMetadata extends Model protected $table = 'h5p_contents_metadata'; /** - * @return BelongsTo + * @return BelongsTo */ public function content(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/H5PContentsUserData.php b/sourcecode/apis/contentauthor/app/H5PContentsUserData.php index 90b86e611c..3bc78bdb46 100644 --- a/sourcecode/apis/contentauthor/app/H5PContentsUserData.php +++ b/sourcecode/apis/contentauthor/app/H5PContentsUserData.php @@ -15,7 +15,7 @@ class H5PContentsUserData extends Model protected $table = "h5p_contents_user_data"; /** - * @return BelongsTo + * @return BelongsTo */ public function content(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/H5PContentsVideo.php b/sourcecode/apis/contentauthor/app/H5PContentsVideo.php index 59d9dc6438..9ad109824e 100644 --- a/sourcecode/apis/contentauthor/app/H5PContentsVideo.php +++ b/sourcecode/apis/contentauthor/app/H5PContentsVideo.php @@ -19,7 +19,7 @@ class H5PContentsVideo extends Model ]; /** - * @return BelongsTo + * @return BelongsTo */ public function content(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/H5PLibrariesHubCache.php b/sourcecode/apis/contentauthor/app/H5PLibrariesHubCache.php index e40ae7f795..09135d0c38 100644 --- a/sourcecode/apis/contentauthor/app/H5PLibrariesHubCache.php +++ b/sourcecode/apis/contentauthor/app/H5PLibrariesHubCache.php @@ -39,7 +39,7 @@ public function getUpdatedAtAttribute($value) } /** - * @return HasMany + * @return HasMany */ public function libraries(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/H5PLibrary.php b/sourcecode/apis/contentauthor/app/H5PLibrary.php index 469cbeddd6..fe75903601 100644 --- a/sourcecode/apis/contentauthor/app/H5PLibrary.php +++ b/sourcecode/apis/contentauthor/app/H5PLibrary.php @@ -80,7 +80,7 @@ public function getMachineNameAttribute() } /** - * @return HasOne + * @return HasOne */ public function capability(): HasOne { @@ -88,7 +88,7 @@ public function capability(): HasOne } /** - * @return HasOne + * @return HasOne */ public function description(): HasOne { @@ -96,7 +96,7 @@ public function description(): HasOne } /** - * @return HasMany + * @return HasMany */ public function contents(): HasMany { @@ -109,7 +109,7 @@ public function contentsWithNoScore() } /** - * @return HasMany + * @return HasMany */ public function languages(): HasMany { @@ -117,7 +117,7 @@ public function languages(): HasMany } /** - * @return HasMany + * @return HasMany */ public function libraries(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/H5PLibraryCapability.php b/sourcecode/apis/contentauthor/app/H5PLibraryCapability.php index 870e092d95..8ad0f78b08 100644 --- a/sourcecode/apis/contentauthor/app/H5PLibraryCapability.php +++ b/sourcecode/apis/contentauthor/app/H5PLibraryCapability.php @@ -17,7 +17,7 @@ class H5PLibraryCapability extends Model protected $appends = ['title', 'description']; /** - * @return BelongsTo + * @return BelongsTo */ public function library(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/H5PLibraryLanguage.php b/sourcecode/apis/contentauthor/app/H5PLibraryLanguage.php index 1f5c8315fd..2128ec9036 100644 --- a/sourcecode/apis/contentauthor/app/H5PLibraryLanguage.php +++ b/sourcecode/apis/contentauthor/app/H5PLibraryLanguage.php @@ -27,7 +27,7 @@ class H5PLibraryLanguage extends Model public $timestamps = false; /** - * @return BelongsTo + * @return BelongsTo */ public function library(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/H5PLibraryLibrary.php b/sourcecode/apis/contentauthor/app/H5PLibraryLibrary.php index e69fbf01a8..cacbc5640f 100644 --- a/sourcecode/apis/contentauthor/app/H5PLibraryLibrary.php +++ b/sourcecode/apis/contentauthor/app/H5PLibraryLibrary.php @@ -20,7 +20,7 @@ class H5PLibraryLibrary extends Model public $timestamps = false; /** - * @return BelongsTo + * @return BelongsTo */ public function library(): BelongsTo { @@ -28,7 +28,7 @@ public function library(): BelongsTo } /** - * @return HasOne + * @return HasOne */ public function requiredLibrary(): HasOne { diff --git a/sourcecode/apis/contentauthor/app/Http/Controllers/API/Transformers/QuestionTransformer.php b/sourcecode/apis/contentauthor/app/Http/Controllers/API/Transformers/QuestionTransformer.php index 43dafe0f5c..4b40105eea 100644 --- a/sourcecode/apis/contentauthor/app/Http/Controllers/API/Transformers/QuestionTransformer.php +++ b/sourcecode/apis/contentauthor/app/Http/Controllers/API/Transformers/QuestionTransformer.php @@ -1,4 +1,5 @@ orderBy('updated_at', 'DESC') ->orderBy('id', 'DESC') ->limit($pageSize) - ->offset($pageSize * ($page-1)) + ->offset($pageSize * ($page - 1)) ->get() ->map(function (H5PContent $row) use (&$latestCount) { try { diff --git a/sourcecode/apis/contentauthor/app/Http/Controllers/H5PController.php b/sourcecode/apis/contentauthor/app/Http/Controllers/H5PController.php index c95a238a80..59fb85415f 100644 --- a/sourcecode/apis/contentauthor/app/Http/Controllers/H5PController.php +++ b/sourcecode/apis/contentauthor/app/Http/Controllers/H5PController.php @@ -28,8 +28,6 @@ use App\Libraries\H5P\H5PProgress; use App\Libraries\H5P\H5PViewConfig; use App\Libraries\H5P\Interfaces\H5PAdapterInterface; -use App\Libraries\H5P\Interfaces\H5PAudioInterface; -use App\Libraries\H5P\Interfaces\H5PImageAdapterInterface; use App\Libraries\H5P\Interfaces\H5PVideoInterface; use App\Libraries\H5P\Interfaces\TranslationServiceInterface; use App\Libraries\H5P\LtiToH5PLanguage; @@ -97,7 +95,7 @@ public function show($id): View ->setEmbedResizeCode($ltiRequest?->getEmbedResizeCode() ?? '') ->setResourceLinkTitle($ltiRequest?->getResourceLinkTitle()) ->loadContent($id) - ->setAlterParameterSettings(H5PAlterParametersSettingsDataObject::create(['useImageWidth' => $h5pContent->library->includeImageWidth()])); + ->setAlterParameterSettings(new H5PAlterParametersSettingsDataObject(useImageWidth: $h5pContent->library->includeImageWidth())); $h5pView = $this->h5p->createView($viewConfig); $content = $viewConfig->getContent(); @@ -251,7 +249,7 @@ public function edit(Request $request, int $id): View 'metadata' => $content['metadata'], ]); - $params = $adapter->alterParameters($params, H5PAlterParametersSettingsDataObject::create(['useImageWidth' => false])); + $params = $adapter->alterParameters($params, new H5PAlterParametersSettingsDataObject(useImageWidth: false)); $library = $h5pContent->library; $settings = []; @@ -684,27 +682,6 @@ public function downloadContent(H5PContent $h5p, H5PExport $export, H5PCore $cor return response(trans('h5p-editor.could-not-find-content'), 404); } - public function browseImages(Request $request) - { - /** @var H5PImageAdapterInterface $imageAdapter */ - $imageAdapter = app(H5PImageAdapterInterface::class); - return $imageAdapter->findImages([ - 'page' => $request->get('page'), - 'searchString' => $request->get('searchstring'), - 'language' => $request->get('language'), - 'fallback' => 'true', - ]); - } - - public function getImage(Request $request, $imageId) - { - /** @var H5PImageAdapterInterface $imageAdapter */ - $imageAdapter = app(H5PImageAdapterInterface::class); - return $imageAdapter->getImage($imageId, [ - 'language' => $request->get('language'), - ]); - } - public function browseVideos(Request $request) { /** @var H5PVideoInterface $videodapter */ @@ -736,23 +713,4 @@ public function getInfo(H5PContent $h5p, H5PInfo $h5PInfo) $information = $h5PInfo->getInformation($h5p); return response()->json($information); } - - public function browseAudios(Request $request) - { - /** @var H5PAudioInterface $audioAdapter */ - $audioAdapter = app(H5PAudioInterface::class); - return $audioAdapter->findAudio([ - 'query' => $request->get('query'), - 'fallback' => 'true', - ]); - } - - public function getAudio(Request $request, $audioId) - { - /** @var H5PAudioInterface $audioAdapter */ - $audioAdapter = app(H5PAudioInterface::class); - return $audioAdapter->getAudio($audioId, [ - 'language' => $request->get('language'), - ]); - } } diff --git a/sourcecode/apis/contentauthor/app/Http/Controllers/HealthController.php b/sourcecode/apis/contentauthor/app/Http/Controllers/HealthController.php index bc9d47654f..d51adfd2dd 100644 --- a/sourcecode/apis/contentauthor/app/Http/Controllers/HealthController.php +++ b/sourcecode/apis/contentauthor/app/Http/Controllers/HealthController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers; -use Doctrine\DBAL\Driver\PDOConnection; use Illuminate\Http\Response; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; @@ -20,9 +19,6 @@ public function index() return response('cache test failed', Response::HTTP_INTERNAL_SERVER_ERROR); } - /** - * @var PDOConnection $connection - */ $connection = DB::connection()->getPdo(); $query = $connection->query("SELECT '1'"); diff --git a/sourcecode/apis/contentauthor/app/Http/Controllers/LinkController.php b/sourcecode/apis/contentauthor/app/Http/Controllers/LinkController.php index 6de16d2eb0..e33d185ca3 100644 --- a/sourcecode/apis/contentauthor/app/Http/Controllers/LinkController.php +++ b/sourcecode/apis/contentauthor/app/Http/Controllers/LinkController.php @@ -2,175 +2,23 @@ namespace App\Http\Controllers; -use App\ContentVersion; -use App\Events\LinkWasSaved; -use App\Http\Libraries\License; -use App\Http\Requests\LinksRequest; -use App\Libraries\H5P\Interfaces\H5PAdapterInterface; use App\Link; use App\Lti\Lti; -use App\Traits\ReturnToCore; -use Carbon\Carbon; -use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Http\Response; -use Illuminate\Support\Facades\Session; use Illuminate\View\View; class LinkController extends Controller { - use ReturnToCore; - public function __construct(private readonly Lti $lti) { - $this->middleware('core.return', ['only' => ['create', 'edit']]); - $this->middleware('core.locale', ['only' => ['create', 'edit', 'store', 'update']]); - } - - public function create(Request $request) - { - /** @var H5PAdapterInterface $adapter */ - $adapter = app(H5PAdapterInterface::class); - $ltiRequest = $this->lti->getRequest($request); - - $licenses = License::getLicenses($ltiRequest); - $license = License::getDefaultLicense($ltiRequest); - - $emails = ''; - $link = new Link(); - $redirectToken = $request->get('redirectToken'); - $userPublishEnabled = $adapter->isUserPublishEnabled(); - $canPublish = true; - $isPublished = false; - $canList = true; - - return view('link.create')->with(compact('licenses', 'license', 'emails', 'link', 'redirectToken', 'userPublishEnabled', 'canPublish', 'isPublished', 'canList')); - } - - /** - * Store a newly created resource in storage. - */ - public function store(LinksRequest $request): JsonResponse - { - $inputs = $request->all(); - $metadata = json_decode($inputs['linkMetadata']); - - $link = new Link(); - $link->link_type = $inputs['linkType']; - $link->link_url = $inputs['linkUrl']; - $link->owner_id = Session::get('authId'); - $link->link_text = !empty($inputs['linkText']) ? $inputs['linkText'] : null; - $link->title = $metadata->title; - $link->metadata = !empty($inputs['linkMetadata']) ? $inputs['linkMetadata'] : null; - $link->is_published = $link::isUserPublishEnabled() ? $request->input('isPublished', 1) : 1; - $link->license = $inputs['license'] ?? ''; - $link->save(); - - event(new LinkWasSaved($link, ContentVersion::PURPOSE_CREATE)); - - $url = $this->getRedirectToCoreUrl($link->toLtiContent(), $request->get('redirectToken')); - - return response()->json(['url' => $url], Response::HTTP_CREATED); - } - - public function edit(Request $request, $id) - { - $link = Link::findOrFail($id); - /** @var H5PAdapterInterface $adapter */ - $adapter = app(H5PAdapterInterface::class); - - $isOwner = $link->isOwner(Session::get('authId', 'qawsed')); - - if (!$link->shouldCreateFork(Session::get('authId', false))) { - $locked = $link->hasLock(); - if ($locked) { // Article is locked, add some info to the response - $now = Carbon::now(); - $expires = Carbon::createFromTimestamp($locked->updated_at->timestamp)->addHour(); - $lockHeadline = trans('lock.article-is-locked'); - $lockMessage = trans( - 'lock.article-will-expire', - [ - 'expires' => $expires->diffInMinutes($now), - 'editor' => $locked->getEditor(), - ] - ); - $editUrl = route('link.edit', $id); - $pollUrl = route('lock.status', $id); - - return view('content-lock.locked')->with(compact('lockHeadline', 'lockMessage', 'editUrl', 'pollUrl')); - } else { - $link->lock(); - } - } - - $emails = ""; //$this->getCollaboratorsEmails($link); - $ltiRequest = $this->lti->getRequest($request); - $licenses = License::getLicenses($ltiRequest); - $license = $link->license; - $redirectToken = $request->get('redirectToken'); - $userPublish = $adapter->isUserPublishEnabled(); - $canPublish = $link->canPublish($request); - $isPublished = $link->is_published; - $canList = $link->canList($request); - - return view('link.edit')->with(compact('link', 'isOwner', 'emails', 'license', 'licenses', 'id', 'redirectToken', 'userPublish', 'canPublish', 'canList', 'isPublished')); - } - - public function update(LinksRequest $request, $id) - { - $link = new Link(); - $oldLink = $link::findOrFail($id); - - $inputs = $request->all(); - - $oldLicense = $oldLink->getContentLicense(); - $reason = $oldLink->shouldCreateFork(Session::get('authId', false)) ? ContentVersion::PURPOSE_COPY : ContentVersion::PURPOSE_UPDATE; - - if ($reason === ContentVersion::PURPOSE_COPY && !$request->input("license", false)) { - $request->merge(["license" => $oldLicense]); - } - - // If you are a collaborator, use the old license - if ($oldLink->isCollaborator()) { - $request->merge(["license" => $oldLicense]); - } - - $link = $oldLink; - if ($oldLink->requestShouldBecomeNewVersion($request)) { - switch ($reason) { - case ContentVersion::PURPOSE_UPDATE: - $link = $oldLink->makeCopy(); - break; - case ContentVersion::PURPOSE_COPY: - $link = $oldLink->makeCopy(Session::get('authId')); - break; - } - } - - $metadata = json_decode($inputs['linkMetadata']); - $link->link_url = $inputs['linkUrl']; - $link->link_text = !empty($inputs['linkText']) ? $inputs['linkText'] : null; - $link->title = $metadata->title; - $link->metadata = !empty($inputs['linkMetadata']) ? $inputs['linkMetadata'] : null; - $link->is_published = $link::isUserPublishEnabled() ? $request->input('isPublished', 1) : 1; - $link->license = $inputs['license'] ?? $oldLink->license; - - $link->save(); - - event(new LinkWasSaved($link, $reason)); - - $url = $this->getRedirectToCoreUrl($link->toLtiContent(), $request->get('redirectToken')); - - return response()->json(['url' => $url], Response::HTTP_OK); } /** * Display the specified resource. */ - public function show($id): View + public function show(Request $request, $id): View { - $customCSS = $this->lti->getRequest(request())?->getLaunchPresentationCssUrl(); - /** @var Link $link */ + $customCSS = $this->lti->getRequest($request)?->getLaunchPresentationCssUrl(); $link = Link::findOrFail($id); $metadata = !is_null($link->metadata) ? json_decode($link->metadata) : null; diff --git a/sourcecode/apis/contentauthor/app/Http/Controllers/NdlaContentController.php b/sourcecode/apis/contentauthor/app/Http/Controllers/NdlaContentController.php new file mode 100644 index 0000000000..fdc0ddb0e7 --- /dev/null +++ b/sourcecode/apis/contentauthor/app/Http/Controllers/NdlaContentController.php @@ -0,0 +1,80 @@ + $request->input('query.query'), + 'fallback' => $request->input('query.fallback', 'true'), + 'page-size' => $request->input('query.pageSize'), + 'language' => $request->input('query.language'), + ]; + + $request = $this->audioClient->get('/audio-api/v1/audio', [ + 'query' => $query, + ]); + $audios = $request->getBody()->getContents(); + + return response($audios, 200, ['Content-Type' => 'application/json']); + } + + public function getAudio($audioId, Request $request): Response + { + $request = $this->audioClient->get('/audio-api/v1/audio/' . $audioId, [ + 'query' => [ + 'language' => $request->input('language'), + ], + ]); + $audio = $request->getBody()->getContents(); + + return response($audio, 200, ['Content-Type' => 'application/json']); + } + + public function browseImages(Request $request): Response + { + $request = $this->imageClient->request('GET', '/image-api/v3/images', [ + 'query' => [ + 'page' => $request->input('page', 1), + 'query' => $request->input('searchString'), + 'language' => $request->input('language'), + 'fallback' => $request->input('fallback'), + ] + ]); + + $images = $request->getBody()->getContents(); + + return response($images, 200, ['Content-Type' => 'application/json']); + } + + public function getImage($imageId, Request $request): Response + { + $language = $request->input('language'); + + $request = $this->imageClient->request('GET', '/image-api/v3/images/' . $imageId, [ + 'query' => [ + 'language' => $language, + ], + ]); + $image = $request->getBody()->getContents(); + + return response($image, 200, ['Content-Type' => 'application/json']); + } +} diff --git a/sourcecode/apis/contentauthor/app/Http/Requests/LinksRequest.php b/sourcecode/apis/contentauthor/app/Http/Requests/LinksRequest.php deleted file mode 100644 index f0034d3cf6..0000000000 --- a/sourcecode/apis/contentauthor/app/Http/Requests/LinksRequest.php +++ /dev/null @@ -1,32 +0,0 @@ - 'required', - 'linkUrl' => 'required_if:linkType,external_link', - 'linkMetadata' => 'json', - ]; - } -} diff --git a/sourcecode/apis/contentauthor/app/Libraries/Games/GameHandler.php b/sourcecode/apis/contentauthor/app/Libraries/Games/GameHandler.php index 1b95b46fee..5285d57fd7 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/Games/GameHandler.php +++ b/sourcecode/apis/contentauthor/app/Libraries/Games/GameHandler.php @@ -4,12 +4,12 @@ use App\ContentVersion; use App\Events\GameWasSaved; +use App\Exceptions\GameTypeNotFoundException; use App\Game; use App\Gametype; use App\Libraries\DataObjects\ResourceMetadataDataObject; use App\Libraries\Games\Contracts\GameTypeContract; use App\Libraries\Games\Millionaire\Millionaire; -use Exception; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Session; @@ -41,28 +41,28 @@ public function store(array $values, GameTypeContract $gametype): Game } /** - * @throws Exception + * @throws GameTypeNotFoundException */ public static function getGameTypeInstance(string $type): GameTypeContract { return match ($type) { 'millionaire', Millionaire::$machineName => app(Millionaire::class), - default => throw new Exception(trans('game.could-not-find-the-gametype', ["gametype" => $type])), + default => throw new GameTypeNotFoundException(trans('game.could-not-find-the-gametype', ["gametype" => $type])), }; } /** - * @throws Exception + * @throws GameTypeNotFoundException */ public static function makeGameTypeFromId($gametypeId): GameTypeContract { - $gametypes = Gametype::findOrFail($gametypeId)->get(); + $gametypes = Gametype::find($gametypeId); - if ($gametypes->isEmpty()) { - throw new Exception(trans('game.gametype-not-found')); + if ($gametypes === null) { + throw new GameTypeNotFoundException(trans('game.gametype-not-found')); } - return self::getGameTypeInstance($gametypes->first()->name); + return self::getGameTypeInstance($gametypes->name); } public function update(Game $game, Request $request): Game diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Adapters/CerpusH5PAdapter.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Adapters/CerpusH5PAdapter.php index 88abb3e3a0..ea1f14882d 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Adapters/CerpusH5PAdapter.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Adapters/CerpusH5PAdapter.php @@ -4,24 +4,41 @@ use App\Libraries\H5P\Dataobjects\H5PAlterParametersSettingsDataObject; use App\Libraries\H5P\Interfaces\H5PAdapterInterface; +use App\Libraries\H5P\Interfaces\H5PAudioInterface; +use App\Libraries\H5P\Interfaces\H5PImageInterface; +use App\Libraries\H5P\Interfaces\H5PVideoInterface; use App\Libraries\H5P\Traits\H5PCommonAdapterTrait; use Cerpus\QuestionBankClient\QuestionBankClient; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\DB; +use function array_unique; +use function json_decode; + +use const JSON_THROW_ON_ERROR; + class CerpusH5PAdapter implements H5PAdapterInterface { use H5PCommonAdapterTrait; - /** - * Alter parameters before added to the H5PIntegrationObject - * - * @param string $parameters - * @return string - */ - public function alterParameters($parameters, H5PAlterParametersSettingsDataObject $settings = null) - { - return QuestionBankClient::convertMathToInlineDisplay($parameters); + public function __construct( + private readonly H5PAudioInterface $audioAdapter, + private readonly H5PImageInterface $imageAdapter, + private readonly H5PVideoInterface $videoAdapter, + ) { + } + + public function alterParameters( + string $parameters, + H5PAlterParametersSettingsDataObject $settings = new H5PAlterParametersSettingsDataObject(), + ): string { + if ($parameters === '') { + return ''; + } + + $parameters = QuestionBankClient::convertMathToInlineDisplay($parameters); + + return $this->traverseParameters(collect(json_decode($parameters, flags: JSON_THROW_ON_ERROR)), $settings)->toJson(); } public function getEditorExtraTags($field): array @@ -29,50 +46,55 @@ public function getEditorExtraTags($field): array return self::getCoreExtraTags(); } - public function getEditorCss(): array { - return []; + return array_unique([ + ...$this->audioAdapter->getEditorCss(), + ...$this->imageAdapter->getEditorCss(), + ...$this->videoAdapter->getEditorCss(), + ]); } - public function getEditorSettings(): array { return []; } - public function getCustomEditorScripts(): array { - return ['/js/videos/streamps.js', '/js/videos/brightcove.js']; + return array_unique([ + ...$this->audioAdapter->getEditorScripts(), + ...$this->imageAdapter->getEditorScripts(), + ...$this->videoAdapter->getEditorScripts(), + ]); } - public function getCustomViewScripts(): array { $scripts = []; - $libraries = $this->config->h5pCore->loadContentDependencies($this->config->id, "preloaded"); - if ($this->hasVideoLibrary($libraries, 1, 3) === true) { - $scripts[] = '/js/videos/streamps.js'; - } - - if ($this->hasCerpusVideoLibrary($libraries, 1, 0) === true) { - $scripts[] = '/js/videos/brightcove.js'; - } if (config('h5p.include-mathjax') === true) { $scripts[] = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS-MML_SVG'; } - return $scripts; + + return array_unique([ + ...$scripts, + ...$this->audioAdapter->getViewScripts(), + ...$this->imageAdapter->getViewScripts(), + ...$this->videoAdapter->getViewScripts(), + ]); } public function getCustomViewCss(): array { - return []; + return array_unique([ + ...$this->audioAdapter->getViewCss(), + ...$this->imageAdapter->getViewCss(), + ...$this->videoAdapter->getViewCss(), + ]); } - public function alterLibrarySemantics(&$semantics, $machineName, $majorVersion, $minorVersion) { $this->alterPackageSemantics($semantics, $machineName); @@ -147,11 +169,6 @@ public function isUserPublishEnabled(): bool return is_null($isEnabled) || filter_var($isEnabled, FILTER_VALIDATE_BOOLEAN); } - public function getExternalProviders(): array - { - return []; - } - public function useMaxScore(): bool { return true; @@ -169,12 +186,20 @@ public function enableEverybodyIsCollaborators(): bool public function getConfigJs(): array { - return []; + return array_unique([ + ...$this->audioAdapter->getConfigJs(), + ...$this->imageAdapter->getConfigJs(), + ...$this->videoAdapter->getConfigJs(), + ]); } public function getCustomEditorStyles(): array { - return []; + return array_unique([ + ...$this->audioAdapter->getEditorCss(), + ...$this->imageAdapter->getEditorCss(), + ...$this->videoAdapter->getEditorCss(), + ]); } public function getAdapterName(): string diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Adapters/NDLAH5PAdapter.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Adapters/NDLAH5PAdapter.php index 4b9ced0daf..2f49a0ef59 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Adapters/NDLAH5PAdapter.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Adapters/NDLAH5PAdapter.php @@ -3,42 +3,39 @@ namespace App\Libraries\H5P\Adapters; use App\H5POption; -use App\Libraries\H5P\Audio\NDLAAudioBrowser; use App\Libraries\H5P\Dataobjects\H5PAlterParametersSettingsDataObject; -use App\Libraries\H5P\File\NDLATextTrack; -use App\Libraries\H5P\Image\NDLAContentBrowser; use App\Libraries\H5P\Interfaces\H5PAdapterInterface; -use App\Libraries\H5P\Interfaces\H5PImageAdapterInterface; +use App\Libraries\H5P\Interfaces\H5PAudioInterface; +use App\Libraries\H5P\Interfaces\H5PImageInterface; +use App\Libraries\H5P\Interfaces\H5PVideoInterface; use App\Libraries\H5P\Traits\H5PCommonAdapterTrait; -use App\Libraries\H5P\Video\NDLAVideoAdapter; use Carbon\Carbon; -use Illuminate\Support\Collection; - -use Illuminate\Support\Facades\Session; +use function array_unique; use function Cerpus\Helper\Helpers\profile as config; +use const JSON_THROW_ON_ERROR; + class NDLAH5PAdapter implements H5PAdapterInterface { use H5PCommonAdapterTrait; - /** @var H5PImageAdapterInterface */ - private $imageBrowser; + public function __construct( + private readonly H5PAudioInterface $audioAdapter, + private readonly H5PImageInterface $imageAdapter, + private readonly H5PVideoInterface $videoAdapter, + ) { + } - /** @var H5PAlterParametersSettingsDataObject */ - private $parameterSettings; + public function alterParameters( + string $parameters, + H5PAlterParametersSettingsDataObject $settings = new H5PAlterParametersSettingsDataObject(), + ): string { + if ($parameters === '') { + return ''; + } - /** - * Alter parameters before added to the H5PIntegrationObject - * - * @param string $parameters - * @return string - */ - public function alterParameters($parameters, H5PAlterParametersSettingsDataObject $settings = null) - { - $this->imageBrowser = resolve(NDLAContentBrowser::class); - $this->parameterSettings = $settings ?? resolve(H5PAlterParametersSettingsDataObject::class); - return $this->traverseParameters(collect(json_decode($parameters)))->toJson(); + return $this->traverseParameters(collect(json_decode($parameters, flags: JSON_THROW_ON_ERROR)), $settings)->toJson(); } public function getEditorExtraTags($field): array @@ -138,16 +135,16 @@ private function addAdditionalFontSizes($field) public function getEditorCss(): array { - $css = [(string) mix('css/ndlah5p-editor.css')]; $css[] = '/js/cropperjs/cropper.min.css'; if (config('h5p.include-custom-css') === true) { $css[] = (string) mix('css/ndlah5p-edit.css'); } - $isAdmin = Session::get('isAdmin'); - if (!$isAdmin) { - $css[] = '/css/ndlah5p-youtube.css'; - } - return $css; + return array_unique([ + ...$this->audioAdapter->getEditorCss(), + ...$this->imageAdapter->getEditorCss(), + ...$this->videoAdapter->getEditorCss(), + ...$css, + ]); } @@ -162,38 +159,34 @@ public function getEditorSettings(): array public function getCustomEditorScripts(): array { $js[] = "/js/h5p/wiris/h5peditor-html-wiris-addon.js"; - $js[] = (string) mix("js/ndla-contentbrowser.js"); - $js[] = "/js/videos/brightcove.js"; $js[] = (string) mix('js/h5peditor-image-popup.js'); $js[] = (string) mix('js/h5peditor-custom.js'); - $isAdmin = Session::get('isAdmin'); - if (!$isAdmin) { - $js[] = '/js/h5p/ndlah5p-youtube.js'; - } - return $js; + + return array_unique([ + ...$js, + ...$this->audioAdapter->getEditorScripts(), + ...$this->imageAdapter->getEditorScripts(), + ...$this->videoAdapter->getEditorScripts(), + ]); } public function getCustomEditorStyles(): array { - return []; + return $this->videoAdapter->getEditorCss(); } - public function getCustomViewScripts(): array { - $scripts = [ + return [ '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS-MML_SVG', '/js/h5p/wiris/view.js', (string) mix('js/h5peditor-custom.js'), + ...$this->audioAdapter->getViewScripts(), + ...$this->imageAdapter->getViewScripts(), + ...$this->videoAdapter->getViewScripts(), ]; - $libraries = $this->config->h5pCore->loadContentDependencies($this->config->id, "preloaded"); - if ($this->hasVideoLibrary($libraries, 1, 3) === true) { - $scripts[] = '/js/videos/brightcove.js'; - } - return $scripts; } - public function getCustomViewCss(): array { $css = []; @@ -207,7 +200,12 @@ public function getCustomViewCss(): array } } $css[] = (string) mix('css/ndlah5p-iframe.css'); - return $css; + return array_unique([ + ...$css, + ...$this->audioAdapter->getViewCss(), + ...$this->imageAdapter->getViewCss(), + ...$this->videoAdapter->getViewCss(), + ]); } /** @@ -256,16 +254,8 @@ public function overrideAdapterSettings() 'feature.export_h5p_on_save', 'export_h5p_with_local_files', 'h5p.video.enable', - 'h5p.video.url', - 'h5p.video.key', - 'h5p.video.secret', - 'h5p.video.accountId', - 'h5p.video.authUrl', 'h5p.video.deleteVideoSourceAfterConvertToStream', 'h5p.video.pingDelay', - 'h5p.image.authDomain', - 'h5p.image.url', - 'h5p.audio.url', 'h5p.H5P_DragQuestion', 'h5p.H5P_Dialogcards', 'h5p.isHubEnabled', @@ -322,44 +312,15 @@ public function isUserPublishEnabled(): bool return filter_var(config("feature.enableUserPublish"), FILTER_VALIDATE_BOOLEAN); } - public function getExternalProviders(): array - { - return [ - resolve(NDLAContentBrowser::class), - resolve(NDLAVideoAdapter::class), - resolve(NDLAAudioBrowser::class), - resolve(NDLATextTrack::class), - ]; - } - public function useMaxScore(): bool { return false; } - private function traverseParameters(Collection $values): Collection - { - return $values->map(function ($value) { - if ($this->isImageTarget($value)) { - $value = $this->imageBrowser->alterImageProperties($value, $this->parameterSettings->useImageWidth); - } - if ((bool)(array)$value && (is_array($value) || is_object($value))) { - return $this->traverseParameters(collect($value)); - } - - return $value; - }); - } - - private function isImageTarget($value): bool - { - return is_object($value) && !empty($value->mime) && !empty($value->path) && $this->imageBrowser->isTargetType($value->mime, $value->path); - } - public function addTrackingScripts(): ?string { return null; -// return << // //TRACKINGDOC; @@ -372,9 +333,11 @@ public function enableEverybodyIsCollaborators(): bool public function getConfigJs(): array { - return [ - (string) mix('js/react-contentbrowser.js') - ]; + return array_unique([ + ...$this->audioAdapter->getConfigJs(), + ...$this->imageAdapter->getConfigJs(), + ...$this->videoAdapter->getConfigJs(), + ]); } public function getAdapterName(): string diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/AjaxRequest.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/AjaxRequest.php index dc080e6d53..65b5a8ea23 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/AjaxRequest.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/AjaxRequest.php @@ -4,8 +4,9 @@ use App\H5PLibrary; use App\Libraries\ContentAuthorStorage; +use App\Libraries\H5P\Image\NdlaImageAdapter; use App\Libraries\H5P\Interfaces\CerpusStorageInterface; -use App\Libraries\H5P\Interfaces\H5PImageAdapterInterface; +use App\Libraries\H5P\Interfaces\H5PImageInterface; use H5PContentValidator; use H5PCore; use H5peditor; @@ -19,6 +20,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Storage; +use LogicException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException; @@ -329,8 +331,11 @@ private function imageManipulation(Request $request): string { $imageId = $request->get('imageId'); - /** @var H5PImageAdapterInterface $imageAdapter */ - $imageAdapter = app(H5PImageAdapterInterface::class); - return $imageAdapter->getImageUrlFromId($imageId, $request->all(), false); + $imageAdapter = app(H5PImageInterface::class); + if ($imageAdapter instanceof NdlaImageAdapter) { + return $imageAdapter->getImageUrlFromId($imageId, $request->all(), false); + } + + throw new LogicException('not implemented'); } } diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NDLAAudioBrowser.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NDLAAudioBrowser.php deleted file mode 100644 index cb7a761262..0000000000 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NDLAAudioBrowser.php +++ /dev/null @@ -1,129 +0,0 @@ -buildSearchQuery($filterParameters['query']) : null; - if (!empty($filterParameters['fallback'])) { - $searchString['fallback'] = $filterParameters['fallback']; - } - - $request = $this->client->get(self::FIND_AUDIOS_URL, [ - 'query' => $searchString - ]); - $audios = $request->getBody()->getContents(); - - return \response()->json(json_decode($audios)); - } - - public function getAudio($audioId, array $params = []) - { - $language = !empty($params['language']) ? $params['language'] : null; - $request = $this->client->get(sprintf(self::GET_AUDIO_URL, $audioId), [ - 'query' => [ - 'language' => $language, - ], - ]); - $audio = $request->getBody()->getContents(); - - return \response()->json(json_decode($audio)); - } - - private function buildSearchQuery($queryObject): ?array - { - if (empty($queryObject)) { - return null; - } - if (empty($queryObject['query'])) { - unset($queryObject['query']); - } - if (!empty($queryObject['pageSize'])) { - $queryObject['page-size'] = $queryObject['pageSize']; - unset($queryObject['pageSize']); - } - if (empty($queryObject['language'])) { - unset($queryObject['language']); - } - - return $queryObject; - } - - public function isTargetType($mimeType, $pathToFile): bool - { - return $this->isAudioMime($mimeType) && $this->isSameDomain($pathToFile); - } - - private function isSameDomain($pathToFile) - { - $url = config('h5p.audio.url') ?: config('h5p.image.url'); - return strpos($pathToFile, $url) === 0; - } - - private function isAudioMime($mime) - { - return !empty($mime) && strpos($mime, $this->getType() .'/') === 0; - } - - /** - * @return array - * @throws Exception - */ - public function storeContent($values, $content) - { - $source = $values['path']; - $tempFile = tempnam(sys_get_temp_dir(), 'h5p-'); - $this->client->get($source, [ - 'sink' => $tempFile - ]); - $file = new File($tempFile); - $extension = $file->guessExtension(); - $fileName = md5($source); - $filePath = sprintf(ContentStorageSettings::CONTENT_FULL_PATH, $content['id'], $this->getType(), $fileName, $extension); - - if (!$this->storage->storeContentOnDisk($filePath, fopen($tempFile, "r"))) { - throw new Exception("Could not store file on disk"); - } - unlink($tempFile); - - return [ - 'path' => sprintf(ContentStorageSettings::CONTENT_LOCAL_PATH, $this->getType(), $fileName, $extension), - 'mime' => $values['mime'], - ]; - } - - public function getType(): string - { - return "audio"; - } - - public static function getClientDetailsUrl(): ?string - { - $url = config('h5p.audio.url') ?: config('h5p.image.url'); - if ($url !== null) { - return $url . self::GET_AUDIO_DETAILS_CLIENT; - } - - return null; - } -} diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NdlaAudioAdapter.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NdlaAudioAdapter.php new file mode 100644 index 0000000000..0a232bea4c --- /dev/null +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NdlaAudioAdapter.php @@ -0,0 +1,96 @@ +isAudioMime($mimeType) && $this->isSameDomain($pathToFile); + } + + private function isSameDomain($pathToFile): bool + { + $url = config('h5p.audio.url') ?: config('h5p.image.url'); + return str_starts_with($pathToFile, $url); + } + + private function isAudioMime($mime): bool + { + return !empty($mime) && str_starts_with($mime, $this->getType() . '/'); + } + + public function storeContent($values, $content): array + { + $source = $values['path']; + $tempFile = tempnam(sys_get_temp_dir(), 'h5p-'); + $this->client->get($source, [ + 'sink' => $tempFile + ]); + $file = new File($tempFile); + $extension = $file->guessExtension(); + $fileName = md5($source); + $filePath = sprintf(ContentStorageSettings::CONTENT_FULL_PATH, $content['id'], $this->getType(), $fileName, $extension); + + if (!$this->storage->storeContentOnDisk($filePath, fopen($tempFile, "r"))) { + throw new Exception("Could not store file on disk"); + } + unlink($tempFile); + + return [ + 'path' => sprintf(ContentStorageSettings::CONTENT_LOCAL_PATH, $this->getType(), $fileName, $extension), + 'mime' => $values['mime'], + ]; + } + + public function getType(): string + { + return "audio"; + } + + public function getClientDetailsUrl(): string + { + return rtrim($this->url, '/') . '/audio-api/v1/audio'; + } + + public function getViewCss(): array + { + return []; + } + + public function getViewScripts(): array + { + return []; + } + + public function getEditorCss(): array + { + return []; + } + + public function getEditorScripts(): array + { + return [ + (string) mix('js/ndla-audio.js'), + ]; + } + + public function getConfigJs(): array + { + return []; + } +} diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NdlaAudioClient.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NdlaAudioClient.php new file mode 100644 index 0000000000..986586ef90 --- /dev/null +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NdlaAudioClient.php @@ -0,0 +1,32 @@ +client = new Client($config); + } + + public function request(string $method, $uri, array $options = []): ResponseInterface + { + return $this->client->request($method, $uri, $options); + } + + public function requestAsync(string $method, $uri, array $options = []): PromiseInterface + { + return $this->client->requestAsync($method, $uri, $options); + } +} diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NullAudioAdapter.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NullAudioAdapter.php new file mode 100644 index 0000000000..76f3184f09 --- /dev/null +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Audio/NullAudioAdapter.php @@ -0,0 +1,35 @@ +adapter->setConfig($this); - $url = UrlHelper::getCurrentBaseUrl(); + $url = request()->getSchemeAndHttpHost() . request()->getBasePath(); $locale = Session::get('locale', config('app.fallback_locale')); $this->config = [ diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PCreateConfig.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PCreateConfig.php index 66b7504171..dce7d2ae79 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PCreateConfig.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PCreateConfig.php @@ -4,9 +4,11 @@ namespace App\Libraries\H5P; +use App\Libraries\H5P\Audio\NdlaAudioAdapter; +use App\Libraries\H5P\Image\NdlaImageAdapter; use App\Libraries\H5P\Interfaces\H5PAdapterInterface; use App\Libraries\H5P\Interfaces\H5PAudioInterface; -use App\Libraries\H5P\Interfaces\H5PImageAdapterInterface; +use App\Libraries\H5P\Interfaces\H5PImageInterface; class H5PCreateConfig extends H5PConfigAbstract { @@ -58,13 +60,13 @@ protected function addInheritorConfig(): void $this->config['editor'] = (object) $this->editorConfig; - $imageBrowser = app(H5PImageAdapterInterface::class); - if ($imageBrowser) { - $this->config['imageBrowserDetailsUrl'] = $imageBrowser::getClientDetailsUrl(); + $imageBrowser = app(H5PImageInterface::class); + if ($imageBrowser instanceof NdlaImageAdapter) { + $this->config['imageBrowserDetailsUrl'] = $imageBrowser->getClientDetailsUrl(); } $audioBrowser = app(H5PAudioInterface::class); - if ($audioBrowser) { - $this->config['audioBrowserDetailsUrl'] = $audioBrowser::getClientDetailsUrl(); + if ($audioBrowser instanceof NdlaAudioAdapter) { + $this->config['audioBrowserDetailsUrl'] = $audioBrowser->getClientDetailsUrl(); } } } diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PEditConfig.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PEditConfig.php index 695820e657..db908c2cfb 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PEditConfig.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PEditConfig.php @@ -4,9 +4,11 @@ namespace App\Libraries\H5P; +use App\Libraries\H5P\Audio\NdlaAudioAdapter; +use App\Libraries\H5P\Image\NdlaImageAdapter; use App\Libraries\H5P\Interfaces\H5PAdapterInterface; use App\Libraries\H5P\Interfaces\H5PAudioInterface; -use App\Libraries\H5P\Interfaces\H5PImageAdapterInterface; +use App\Libraries\H5P\Interfaces\H5PImageInterface; use App\Traits\H5PBehaviorSettings; class H5PEditConfig extends H5PConfigAbstract @@ -68,13 +70,13 @@ protected function addInheritorConfig(): void $this->config['editor'] = (object) $this->editorConfig; - $imageBrowser = app(H5PImageAdapterInterface::class); - if ($imageBrowser) { - $this->config['imageBrowserDetailsUrl'] = $imageBrowser::getClientDetailsUrl(); + $imageBrowser = app(H5PImageInterface::class); + if ($imageBrowser instanceof NdlaImageAdapter) { + $this->config['imageBrowserDetailsUrl'] = $imageBrowser->getClientDetailsUrl(); } $audioBrowser = app(H5PAudioInterface::class); - if ($audioBrowser) { - $this->config['audioBrowserDetailsUrl'] = $audioBrowser::getClientDetailsUrl(); + if ($audioBrowser instanceof NdlaAudioAdapter) { + $this->config['audioBrowserDetailsUrl'] = $audioBrowser->getClientDetailsUrl(); } } } diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PExport.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PExport.php index e212c435d9..7670cc01bb 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PExport.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PExport.php @@ -3,7 +3,6 @@ namespace App\Libraries\H5P; use App\H5PContent; -use App\Libraries\H5P\Interfaces\H5PAdapterInterface; use App\Libraries\H5P\Interfaces\H5PExternalProviderInterface; use H5PContentValidator; use H5PCore; @@ -20,17 +19,14 @@ readonly class H5PExport { /** - * @var array + * @param array $externalProviders */ - private array $externalProviders; - public function __construct( private H5PDefaultExport $export, - H5PAdapterInterface $adapter, private H5PContentValidator $validator, private bool $convertMediaToLocal, + private array $externalProviders, ) { - $this->externalProviders = $adapter->getExternalProviders(); } /** @@ -97,7 +93,11 @@ private function traverseParameters(Collection $parameters, H5PContent $content) private function applyExternalProviderHandling(array $values, H5PContent $content): array { $externalProvider = collect($this->externalProviders) - ->first(fn ($provider) => $provider->isTargetType($values['mime'], $values['path'])); + ->first( + fn ($provider) => + $provider instanceof H5PExternalProviderInterface && + $provider->isTargetType($values['mime'], $values['path']) + ); if ($externalProvider instanceof H5PExternalProviderInterface) { $fileDetails = $externalProvider->storeContent($values, $content); diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PImport.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PImport.php index 9137bc6d46..cf94e46803 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PImport.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PImport.php @@ -19,8 +19,6 @@ public function __construct(\H5PEditorAjax $editorAjax) } /** - * @param bool $isDraft - * @param bool $isPrivate * @return H5PImportDataObject|bool * @throws \Exception */ diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PInfo.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PInfo.php index a04afabdf4..8c2b8f7ba5 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PInfo.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PInfo.php @@ -16,8 +16,8 @@ public function getInformation(H5PContent $content): array 'name' => $content->library->name, 'majorVersion' => $content->library->major_version, 'minorVersion' => $content->library->minor_version, - 'latestMajorVersion' =>$libraryInfo->major_version, - 'latestMinorVersion' =>$libraryInfo->minor_version, + 'latestMajorVersion' => $libraryInfo->major_version, + 'latestMinorVersion' => $libraryInfo->minor_version, 'upgradable' => $content->library->isUpgradable(), ], 'published' => $content['is_published'], diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PViewConfig.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PViewConfig.php index b79b5f7ed3..a02869946f 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PViewConfig.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PViewConfig.php @@ -7,7 +7,6 @@ use App\Exceptions\UnknownH5PPackageException; use App\Libraries\H5P\Dataobjects\H5PAlterParametersSettingsDataObject; use App\Libraries\H5P\Helper\H5PPackageProvider; -use App\Libraries\H5P\Helper\UrlHelper; use App\Libraries\H5P\Interfaces\ContentTypeInterface; use App\Libraries\H5P\Interfaces\H5PAdapterInterface; use App\SessionKeys; @@ -17,6 +16,7 @@ use Illuminate\Support\Str; use function htmlspecialchars; +use function request; use function sprintf; use function url; @@ -45,7 +45,7 @@ public function __construct(H5PAdapterInterface $adapter, H5PCore $h5pCore) 'exportUrl' => '', 'embedCode' => '', 'resizeCode' => '', - 'url' => UrlHelper::getCurrentFullUrl(), + 'url' => request()->getSchemeAndHttpHost() . request()->getBasePath(), 'title' => '', 'metadata' => [], 'displayOptions' => [], @@ -214,7 +214,7 @@ private function behaviorSettings(): false|string { $parameters = $this->adapter->alterParameters( $this->filterParams ?? '', - $this->alterParametersSettings + $this->alterParametersSettings ?? new H5PAlterParametersSettingsDataObject(), ); if (!is_null($this->behaviorSettings)) { diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Helper/UrlHelper.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Helper/UrlHelper.php deleted file mode 100644 index ef459d7bae..0000000000 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Helper/UrlHelper.php +++ /dev/null @@ -1,28 +0,0 @@ -url(); - $path = request()->path(); - $theBaseUrl = str_replace($path, '', $url); - if (substr($theBaseUrl, -1) === '/') { - $theBaseUrl = substr($theBaseUrl, 0, strlen($theBaseUrl) - 1); - } - return $theBaseUrl; - } - - public static function getCurrentFullUrl() - { - return request()->url(); - } -} diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NDLAContentBrowser.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NdlaImageAdapter.php similarity index 57% rename from sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NDLAContentBrowser.php rename to sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NdlaImageAdapter.php index 916b12c752..ca9f5d11c6 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NDLAContentBrowser.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NdlaImageAdapter.php @@ -3,14 +3,14 @@ namespace App\Libraries\H5P\Image; use App\Libraries\DataObjects\ContentStorageSettings; +use App\Libraries\H5P\Dataobjects\H5PAlterParametersSettingsDataObject; use App\Libraries\H5P\Interfaces\CerpusStorageInterface; use App\Libraries\H5P\Interfaces\H5PExternalProviderInterface; -use App\Libraries\H5P\Interfaces\H5PImageAdapterInterface; +use App\Libraries\H5P\Interfaces\H5PImageInterface; use Exception; -use GuzzleHttp\Client; use Illuminate\Http\File; -class NDLAContentBrowser implements H5PImageAdapterInterface, H5PExternalProviderInterface +final class NdlaImageAdapter implements H5PImageInterface, H5PExternalProviderInterface { private $mappings = [ 'startX' => 'cropStartX', @@ -21,47 +21,12 @@ class NDLAContentBrowser implements H5PImageAdapterInterface, H5PExternalProvide 'height' => 'height', ]; - public const FIND_IMAGES_URL = '/image-api/v3/images'; - public const GET_IMAGE_URL = '/image-api/v3/images/%s'; - public const GET_IMAGE_ID = '/image-api/raw/id/%s'; - public const GET_IMAGE_NAME = '/image-api/raw/%s'; - public const GET_IMAGE_DETAILS_CLIENT = '/image-api/v3/images'; - public function __construct( - private readonly Client $client, + private readonly NdlaImageClient $client, private readonly CerpusStorageInterface $storage, ) { } - public function findImages($filterParameters) - { - $request = $this->client->get(self::FIND_IMAGES_URL, [ - 'query' => [ - 'page' => !empty($filterParameters['page']) ? $filterParameters['page'] : 1, - 'query' => !empty($filterParameters['searchString']) ? $filterParameters['searchString'] : null, - 'language' => !empty($filterParameters['language']) ? $filterParameters['language'] : null, - 'fallback' => !empty($filterParameters['fallback']) ? $filterParameters['fallback'] : null, - ] - ]); - $images = $request->getBody()->getContents(); - - return \response()->json(json_decode($images)); - } - - public function getImage($imageId, array $params = []) - { - $language = !empty($params['language']) ? $params['language'] : null; - - $request = $this->client->get(sprintf(self::GET_IMAGE_URL, $imageId), [ - 'query' => [ - 'language' => $language, - ], - ]); - $image = $request->getBody()->getContents(); - - return \response()->json(json_decode($image)); - } - public function mapParams($params, $originalKeys = false) { $mappings = !$originalKeys ? $this->mappings : array_flip($this->mappings); @@ -79,18 +44,18 @@ public function mapParams($params, $originalKeys = false) public function getImageUrlFromId($imageId, array $parameters, bool $useOriginalKeys): string { $imageParams = $this->mapParams($parameters, $useOriginalKeys); - return $this->getImageUrl(sprintf(self::GET_IMAGE_ID, $imageId), $imageParams); + return $this->getImageUrl('/image-api/raw/id/' . $imageId, $imageParams); } - public function getImageUrlFromName($imageName, array $parameters, bool $useOriginalKeys): string + private function getImageUrlFromName($imageName, array $parameters, bool $useOriginalKeys): string { $imageParams = $this->mapParams($parameters, $useOriginalKeys); - return $this->getImageUrl(sprintf(self::GET_IMAGE_NAME, $imageName), $imageParams); + return $this->getImageUrl('/image-api/raw/' . $imageName, $imageParams); } private function getImageUrl($path, $requestParameters) { - return config('h5p.image.url') . $path . "?" . http_build_query($requestParameters); + return config('ndla.image.url') . $path . "?" . http_build_query($requestParameters); } public function isTargetType($mimeType, $pathToFile): bool @@ -98,14 +63,14 @@ public function isTargetType($mimeType, $pathToFile): bool return $this->isImageMime($mimeType) && $this->isSameDomain($pathToFile); } - private function isSameDomain($pathToFile) + private function isSameDomain($pathToFile): bool { - return strpos($pathToFile, config('h5p.image.url')) === 0; + return str_starts_with($pathToFile, config('h5p.image.url')); } - private function isImageMime($mime) + private function isImageMime($mime): bool { - return !empty($mime) && strpos($mime, 'image/') === 0; + return !empty($mime) && str_starts_with($mime, 'image/'); } /** @@ -140,7 +105,7 @@ public function getType(): string return "image"; } - public function alterImageProperties($imageProperties, bool $includeWidthQuery): object + public function alterImageProperties($imageProperties, H5PAlterParametersSettingsDataObject $settings): object { if (empty($imageProperties->path)) { return $imageProperties; @@ -149,16 +114,16 @@ public function alterImageProperties($imageProperties, bool $includeWidthQuery): $imageProperties->path = html_entity_decode($imageProperties->path); $url = parse_url($imageProperties->path); $query = [ - 'width' => config('h5p.image.properties.width'), + 'width' => config('ndla.image.properties.width'), ]; if (!empty($url['query'])) { parse_str($url['query'], $existingQuery); $query = array_merge($query, $existingQuery); } - if (!$includeWidthQuery) { + if (!$settings->useImageWidth) { unset($query['width']); } - if (!empty($imageProperties->externalId) && strpos($imageProperties->path, "/" . $imageProperties->externalId . "?") !== false) { + if (!empty($imageProperties->externalId) && str_contains($imageProperties->path, "/" . $imageProperties->externalId . "?")) { $imageProperties->path = $this->getImageUrlFromId($imageProperties->externalId, $query, true); } else { $imageProperties->path = $this->getImageUrlFromName(basename($url['path']), $query, true); @@ -168,11 +133,38 @@ public function alterImageProperties($imageProperties, bool $includeWidthQuery): public static function getClientDetailsUrl(): ?string { - $url = config('h5p.image.url'); + $url = config('ndla.image.url'); if ($url !== null) { - return $url . self::GET_IMAGE_DETAILS_CLIENT; + return $url . '/image-api/v3/images'; } return null; } + + public function getViewCss(): array + { + return []; + } + + public function getViewScripts(): array + { + return []; + } + + public function getEditorCss(): array + { + return []; + } + + public function getEditorScripts(): array + { + return [ + (string) mix('js/ndla-image.js'), + ]; + } + + public function getConfigJs(): array + { + return []; + } } diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NdlaImageClient.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NdlaImageClient.php new file mode 100644 index 0000000000..89c8b0f826 --- /dev/null +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NdlaImageClient.php @@ -0,0 +1,32 @@ +client = new Client($config); + } + + public function request(string $method, $uri, array $options = []): ResponseInterface + { + return $this->client->request($method, $uri, $options); + } + + public function requestAsync(string $method, $uri, array $options = []): PromiseInterface + { + return $this->client->requestAsync($method, $uri, $options); + } +} diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NullImageAdapter.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NullImageAdapter.php new file mode 100644 index 0000000000..47c15814b7 --- /dev/null +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Image/NullImageAdapter.php @@ -0,0 +1,41 @@ + - */ - public function getExternalProviders(): array; - public function useMaxScore(): bool; public function addTrackingScripts(): ?string; diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Interfaces/H5PAudioInterface.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Interfaces/H5PAudioInterface.php index 3f5f08de65..f573313254 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Interfaces/H5PAudioInterface.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Interfaces/H5PAudioInterface.php @@ -1,10 +1,9 @@ name = $this->getDisplayName(); $user->mail = $this->email; $config = new stdClass(); - $config->baseUrl = UrlHelper::getCurrentBaseUrl(); + $config->baseUrl = request()->getSchemeAndHttpHost() . request()->getBasePath(); $config->url = $this->fileStorage->getDisplayPath(false); $config->postUserStatistics = !empty($this->userId); $config->ajaxPath = '/ajax?action='; diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Traits/FileUploadTrait.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Traits/FileUploadTrait.php index 8afedb3c3b..df96edef15 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Traits/FileUploadTrait.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Traits/FileUploadTrait.php @@ -2,7 +2,7 @@ namespace App\Libraries\H5P\Traits; -use Illuminate\Filesystem\Filesystem; +use Illuminate\Contracts\Filesystem\Filesystem; use Illuminate\Support\Facades\Log; use Exception; use App\H5PFile; diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Traits/H5PCommonAdapterTrait.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Traits/H5PCommonAdapterTrait.php index 67e3168dfa..9484ab4e46 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Traits/H5PCommonAdapterTrait.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Traits/H5PCommonAdapterTrait.php @@ -3,39 +3,22 @@ namespace App\Libraries\H5P\Traits; use App\Exceptions\UnknownH5PPackageException; +use App\Libraries\H5P\Dataobjects\H5PAlterParametersSettingsDataObject; use App\Libraries\H5P\Helper\H5PPackageProvider; use App\Libraries\H5P\Interfaces\ConfigInterface; +use App\Libraries\H5P\Interfaces\H5PExternalProviderInterface; use App\Libraries\H5P\Packages\H5PBase; use App\Libraries\HTMLPurify\Config\MathMLConfig; +use Illuminate\Support\Collection; + +use function collect; +use function is_array; +use function is_object; trait H5PCommonAdapterTrait { protected $config; - public function hasVideoLibrary(array $scripts, int $minimumMajorVersion = 1, int $minimumMinorVersion = 1) - { - return collect($scripts) - ->filter(function ($library) use ($minimumMajorVersion, $minimumMinorVersion) { - if ($library['machineName'] === 'H5P.Video') { - return intval($library['majorVersion']) >= $minimumMajorVersion && intval($library['minorVersion']) >= $minimumMinorVersion; - } - return false; - }) - ->isNotEmpty(); - } - - public function hasCerpusVideoLibrary(array $scripts, int $minimumMajorVersion = 1, int $minimumMinorVersion = 0) - { - return collect($scripts) - ->filter(function ($library) use ($minimumMajorVersion, $minimumMinorVersion) { - if ($library['machineName'] === 'H5P.CerpusVideo') { - return intval($library['majorVersion']) >= $minimumMajorVersion && intval($library['minorVersion']) >= $minimumMinorVersion; - } - return false; - }) - ->isNotEmpty(); - } - public function alterPackageSemantics(&$semantics, $machineName) { try { @@ -48,6 +31,29 @@ public function alterPackageSemantics(&$semantics, $machineName) } } + private function traverseParameters(Collection $values, H5PAlterParametersSettingsDataObject $settings): Collection + { + return $values->map(function ($value) use ($settings) { + if ($this->isImageTarget($value)) { + $value = $this->imageAdapter->alterImageProperties($value, $settings); + } + if ((bool)(array)$value && (is_array($value) || is_object($value))) { + return $this->traverseParameters(collect($value), $settings); + } + + return $value; + }); + } + + private function isImageTarget($value): bool + { + if (!$this->imageAdapter instanceof H5PExternalProviderInterface) { + return false; + } + + return is_object($value) && !empty($value->mime) && !empty($value->path) && $this->imageAdapter->isTargetType($value->mime, $value->path); + } + public static function getAllAdapters() { return [ diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Video/NDLAVideoAdapter.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Video/NDLAVideoAdapter.php index f8d23892fb..1e3db5fd92 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Video/NDLAVideoAdapter.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Video/NDLAVideoAdapter.php @@ -11,8 +11,12 @@ use GuzzleHttp\Client; use GuzzleHttp\Utils as GuzzleUtils; use Illuminate\Http\File; +use Illuminate\Support\Facades\Session; use InvalidArgumentException; +use function asset; +use function mix; + class NDLAVideoAdapter implements H5PVideoInterface, H5PExternalProviderInterface { public const GET_VIDEOS = '/v1/accounts/%s/videos'; @@ -180,4 +184,43 @@ public function getType(): string { return "video"; } + + public function getViewCss(): array + { + return []; + } + + public function getViewScripts(): array + { + return [ + asset('js/videos/brightcove.js'), + ]; + } + + public function getEditorCss(): array + { + $css = [ + (string) mix('css/ndlah5p-editor.css'), + ]; + + $isAdmin = Session::get('isAdmin'); + if (!$isAdmin) { + $css[] = asset('css/ndlah5p-youtube.css'); + } + + return $css; + } + + public function getEditorScripts(): array + { + return [ + (string) mix("js/ndla-video.js"), + asset('js/videos/brightcove.js'), + ]; + } + + public function getConfigJs(): array + { + return []; + } } diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/Video/NullVideoAdapter.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/Video/NullVideoAdapter.php index b6003f99cc..ed66e56159 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/Video/NullVideoAdapter.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/Video/NullVideoAdapter.php @@ -60,4 +60,29 @@ public function downloadVideo($videoId) { throw new BadMethodCallException('not implemented'); } + + public function getViewCss(): array + { + return []; + } + + public function getViewScripts(): array + { + return []; + } + + public function getEditorCss(): array + { + return []; + } + + public function getEditorScripts(): array + { + return []; + } + + public function getConfigJs(): array + { + return []; + } } diff --git a/sourcecode/apis/contentauthor/app/LibraryDescription.php b/sourcecode/apis/contentauthor/app/LibraryDescription.php index 3d5f9e915e..708f4a5150 100644 --- a/sourcecode/apis/contentauthor/app/LibraryDescription.php +++ b/sourcecode/apis/contentauthor/app/LibraryDescription.php @@ -10,7 +10,7 @@ class LibraryDescription extends Model protected $appends = ['capability_id']; /** - * @return BelongsTo + * @return BelongsTo */ public function library(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/Link.php b/sourcecode/apis/contentauthor/app/Link.php index 12f5b76ad1..6722934881 100644 --- a/sourcecode/apis/contentauthor/app/Link.php +++ b/sourcecode/apis/contentauthor/app/Link.php @@ -20,7 +20,7 @@ * @property string $owner_id * @property int $deleted_at * @property string $link_text - * @property string $metadata + * @property ?string $metadata * * @property Collection $collaborators * @@ -32,7 +32,7 @@ class Link extends Content implements VersionableObject use HasFactory; use HasUuids; - public string $editRouteName = 'link.edit'; + public string $editRouteName = 'link.edit'; // note: doesn't work anymore public function givesScore(): int { @@ -40,7 +40,7 @@ public function givesScore(): int } /** - * @return HasMany + * @return HasMany */ public function collaborators(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/Listeners/Link/HandleVersioning.php b/sourcecode/apis/contentauthor/app/Listeners/Link/HandleVersioning.php deleted file mode 100644 index 27225e66fa..0000000000 --- a/sourcecode/apis/contentauthor/app/Listeners/Link/HandleVersioning.php +++ /dev/null @@ -1,23 +0,0 @@ -link = $event->link->fresh(); - - $this->handleSave($this->link, $event->reason); - } - - public function getParentVersionId() - { - return $this->link->version_id; - } -} diff --git a/sourcecode/apis/contentauthor/app/NdlaArticleId.php b/sourcecode/apis/contentauthor/app/NdlaArticleId.php index 9710bdbe72..d75b4d9d5a 100644 --- a/sourcecode/apis/contentauthor/app/NdlaArticleId.php +++ b/sourcecode/apis/contentauthor/app/NdlaArticleId.php @@ -20,7 +20,7 @@ public function setJsonAttribute($value): void } /** - * @return HasMany + * @return HasMany */ public function messages(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/NdlaArticleImportStatus.php b/sourcecode/apis/contentauthor/app/NdlaArticleImportStatus.php index f28ccb073a..96547dcd53 100644 --- a/sourcecode/apis/contentauthor/app/NdlaArticleImportStatus.php +++ b/sourcecode/apis/contentauthor/app/NdlaArticleImportStatus.php @@ -39,7 +39,7 @@ public static function mostRecentStatuses() } /** - * @return BelongsTo + * @return BelongsTo */ public function ndlaArticle(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/NdlaIdMapper.php b/sourcecode/apis/contentauthor/app/NdlaIdMapper.php index 7d41b0392e..b7bb4b846d 100644 --- a/sourcecode/apis/contentauthor/app/NdlaIdMapper.php +++ b/sourcecode/apis/contentauthor/app/NdlaIdMapper.php @@ -99,7 +99,7 @@ public function scopeH5P(Builder $query): void } /** - * @return BelongsTo + * @return BelongsTo */ public function h5pContents(): BelongsTo { diff --git a/sourcecode/apis/contentauthor/app/Providers/EventServiceProvider.php b/sourcecode/apis/contentauthor/app/Providers/EventServiceProvider.php index 00c3d40c86..e3e5a6feab 100644 --- a/sourcecode/apis/contentauthor/app/Providers/EventServiceProvider.php +++ b/sourcecode/apis/contentauthor/app/Providers/EventServiceProvider.php @@ -30,10 +30,6 @@ class EventServiceProvider extends ServiceProvider HandleExport::class, ], - \App\Events\LinkWasSaved::class => [ - \App\Listeners\Link\HandleVersioning::class, - ], - \App\Events\VideoSourceChanged::class => [ \App\Listeners\H5P\HandleVideoSource::class, ], diff --git a/sourcecode/apis/contentauthor/app/Providers/H5PServiceProvider.php b/sourcecode/apis/contentauthor/app/Providers/H5PServiceProvider.php index 2aa5364bcf..e0cd023557 100644 --- a/sourcecode/apis/contentauthor/app/Providers/H5PServiceProvider.php +++ b/sourcecode/apis/contentauthor/app/Providers/H5PServiceProvider.php @@ -5,17 +5,21 @@ use App\Console\Libraries\CliH5pFramework; use App\Libraries\H5P\Adapters\CerpusH5PAdapter; use App\Libraries\H5P\Adapters\NDLAH5PAdapter; -use App\Libraries\H5P\Audio\NDLAAudioBrowser; +use App\Libraries\H5P\Audio\NdlaAudioAdapter; +use App\Libraries\H5P\Audio\NdlaAudioClient; +use App\Libraries\H5P\Audio\NullAudioAdapter; use App\Libraries\H5P\EditorAjax; use App\Libraries\H5P\EditorStorage; use App\Libraries\H5P\Framework; use App\Libraries\H5P\H5PLibraryAdmin; use App\Libraries\H5P\H5pPresave; -use App\Libraries\H5P\Image\NDLAContentBrowser; +use App\Libraries\H5P\Image\NdlaImageAdapter; +use App\Libraries\H5P\Image\NdlaImageClient; +use App\Libraries\H5P\Image\NullImageAdapter; use App\Libraries\H5P\Interfaces\CerpusStorageInterface; use App\Libraries\H5P\Interfaces\H5PAdapterInterface; use App\Libraries\H5P\Interfaces\H5PAudioInterface; -use App\Libraries\H5P\Interfaces\H5PImageAdapterInterface; +use App\Libraries\H5P\Interfaces\H5PImageInterface; use App\Libraries\H5P\Interfaces\H5PVideoInterface; use App\Libraries\H5P\Interfaces\TranslationServiceInterface; use App\Libraries\H5P\Storage\H5PCerpusStorage; @@ -61,6 +65,8 @@ public function provides() return [ H5PFileStorage::class, H5PAdapterInterface::class, + H5PAudioInterface::class, + H5PImageInterface::class, H5PVideoInterface::class, H5PLibraryAdmin::class, H5peditorStorage::class, @@ -79,57 +85,45 @@ public function register() ->needs(Cloud::class) ->give(fn () => Storage::disk('h5p-presave')); - $this->app->bind(H5PVideoInterface::class, function () { - $adapter = $this->app->make(H5PAdapterInterface::class)->getAdapterName(); - - return match (strtolower($adapter)) { - 'ndla' => $this->app->make(NDLAVideoAdapter::class), - default => $this->app->make(NullVideoAdapter::class), - }; + $this->app->bind(H5PVideoInterface::class, match (config('h5p.video.adapter')) { + 'ndla' => NDLAVideoAdapter::class, + default => NullVideoAdapter::class, }); $this->app->when(NDLAVideoAdapter::class) ->needs(Client::class) ->give(fn () => Oauth2Client::getClient(OauthSetup::create([ - 'authUrl' => config('h5p.video.authUrl'), - 'coreUrl' => config('h5p.video.url'), - 'key' => config('h5p.video.key'), - 'secret' => config('h5p.video.secret'), + 'authUrl' => config('ndla.video.authUrl'), + 'coreUrl' => config('ndla.video.url'), + 'key' => config('ndla.video.key'), + 'secret' => config('ndla.video.secret'), ]))); $this->app->when(NDLAVideoAdapter::class) ->needs('$accountId') - ->giveConfig('h5p.video.accountId'); + ->giveConfig('ndla.video.accountId'); - $this->app->when(NDLAContentBrowser::class) - ->needs(Client::class) - ->give(fn () => new Client([ - 'base_uri' => config('h5p.image.url'), - ])); + $this->app->bind(H5PImageInterface::class, match (config('h5p.image.adapter')) { + 'ndla' => NdlaImageAdapter::class, + default => NullImageAdapter::class, + }); - $this->app->bind(H5PImageAdapterInterface::class, function () { - $adapter = $this->app->make(H5PAdapterInterface::class); + $this->app->bind(NdlaImageClient::class, fn () => new NdlaImageClient([ + 'base_uri' => config('ndla.image.url'), + ])); - return match (strtolower($adapter->getAdapterName())) { - 'ndla' => $this->app->make(NDLAContentBrowser::class), - default => null, - }; + $this->app->bind(H5PAudioInterface::class, match (config('h5p.audio.adapter')) { + 'ndla' => NdlaAudioAdapter::class, + default => NullAudioAdapter::class, }); - $this->app->when(NDLAAudioBrowser::class) - ->needs(Client::class) - ->give(fn () => new Client([ - 'base_uri' => config('h5p.audio.url') ?: config('h5p.image.url'), - ])); + $this->app->when(NdlaAudioAdapter::class) + ->needs('$url') + ->giveConfig('ndla.audio.url'); - $this->app->bind(H5PAudioInterface::class, function () { - $adapter = $this->app->make(H5PAdapterInterface::class); - - return match (strtolower($adapter->getAdapterName())) { - 'ndla' => $this->app->make(NDLAAudioBrowser::class), - default => null, // none supported at the moment - }; - }); + $this->app->bind(NdlaAudioClient::class, fn () => new NdlaAudioClient([ + 'base_uri' => config('ndla.image.url'), + ])); $this->app->bind(H5PCerpusStorage::class); $this->app->bind(H5PFileStorage::class, H5PCerpusStorage::class); @@ -169,15 +163,10 @@ public function register() $this->app->bind(H5PAdapterInterface::class, function () { $adapterTarget = strtolower(Session::get('adapterMode', config('h5p.h5pAdapter'))); - switch ($adapterTarget) { - case 'ndla': - $adapter = new NDLAH5PAdapter(); - break; - case 'cerpus': - default: - $adapter = new CerpusH5PAdapter(); - break; - } + $adapter = match ($adapterTarget) { + 'ndla' => $this->app->make(NDLAH5PAdapter::class), + default => $this->app->make(CerpusH5PAdapter::class), + }; if (Session::has('adapterMode')) { $adapter->overrideAdapterSettings(); } @@ -221,6 +210,16 @@ public function register() ->needs('$convertMediaToLocal') ->giveConfig('feature.export_h5p_with_local_files'); + $this->app->tag([ + H5PAudioInterface::class, + H5PImageInterface::class, + H5PVideoInterface::class, + ], 'external-providers'); + + $this->app->when(\App\Libraries\H5P\H5PExport::class) + ->needs('$externalProviders') + ->giveTagged('external-providers'); + $this->app->bind(H5PExport::class, function ($app) { /** @var App $app */ return new H5PExport($app->make(H5PFrameworkInterface::class), $app->make(H5PCore::class)); diff --git a/sourcecode/apis/contentauthor/app/QuestionSet.php b/sourcecode/apis/contentauthor/app/QuestionSet.php index 12faa007a8..9efef44d92 100644 --- a/sourcecode/apis/contentauthor/app/QuestionSet.php +++ b/sourcecode/apis/contentauthor/app/QuestionSet.php @@ -37,7 +37,7 @@ class QuestionSet extends Content public string $editRouteName = 'questionset.edit'; /** - * @return HasMany + * @return HasMany */ public function questions(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/QuestionSetQuestion.php b/sourcecode/apis/contentauthor/app/QuestionSetQuestion.php index 9561aa03e8..23ee5f2f8b 100644 --- a/sourcecode/apis/contentauthor/app/QuestionSetQuestion.php +++ b/sourcecode/apis/contentauthor/app/QuestionSetQuestion.php @@ -26,7 +26,7 @@ class QuestionSetQuestion extends Model use HasUuids; /** - * @return BelongsTo + * @return BelongsTo */ public function questionset(): BelongsTo { @@ -42,7 +42,7 @@ public function scopeOrdered(Builder $query): void } /** - * @return HasMany + * @return HasMany */ public function answers(): HasMany { diff --git a/sourcecode/apis/contentauthor/app/Traits/HasLanguage.php b/sourcecode/apis/contentauthor/app/Traits/HasLanguage.php index 5ca4ca5cbc..f2347d9fc1 100644 --- a/sourcecode/apis/contentauthor/app/Traits/HasLanguage.php +++ b/sourcecode/apis/contentauthor/app/Traits/HasLanguage.php @@ -12,7 +12,7 @@ trait HasLanguage { /** - * @return HasOne + * @return HasOne */ public function language(): HasOne { diff --git a/sourcecode/apis/contentauthor/app/Transformers/QuestionSetsQuestionAnswerTransformer.php b/sourcecode/apis/contentauthor/app/Transformers/QuestionSetsQuestionAnswerTransformer.php index 7a37144cd1..92f9ea5072 100644 --- a/sourcecode/apis/contentauthor/app/Transformers/QuestionSetsQuestionAnswerTransformer.php +++ b/sourcecode/apis/contentauthor/app/Transformers/QuestionSetsQuestionAnswerTransformer.php @@ -27,7 +27,7 @@ public function transform(QuestionSetQuestionAnswer $answer): array 'imageObject' => $answer->image, 'imageUrl' => \ImageService::getHostingUrl($answer->image), 'order' => $answer->order, - 'correct' =>(bool)$answer->correct, + 'correct' => (bool)$answer->correct, //'links' => $this->links($answer) ]; } diff --git a/sourcecode/apis/contentauthor/composer.json b/sourcecode/apis/contentauthor/composer.json index 5c66f638c4..a3428ce299 100644 --- a/sourcecode/apis/contentauthor/composer.json +++ b/sourcecode/apis/contentauthor/composer.json @@ -7,49 +7,47 @@ "license": "GPL-3.0-only", "type": "project", "require": { - "php": "8.2.*", + "php": "8.3.*", "ext-dom": "*", "ext-iconv": "*", "ext-json": "*", "ext-libxml": "*", "ext-pdo": "*", "ext-zip": "*", - "cerpus/cerpushelper": "^2.2", + "cerpus/cerpushelper": "^2.3", "cerpus/edlib-resource-kit": "^0.8.x-dev", "cerpus/edlib-resource-kit-laravel": "^0.8.x-dev", - "cerpus/imageservice-client": "^2.2.1", - "cerpus/questionbank-client": "^2.3.3", + "cerpus/imageservice-client": "^2.3", + "cerpus/questionbank-client": "^2.4", "ckeditor/ckeditor": "^4.22.1", "daniel-km/simple-iso-639-3": "^0.1.3", - "doctrine/dbal": "^2.13.9", "embed/embed": "^3.4.18", - "firebase/php-jwt": "^6.10.1", - "guzzlehttp/guzzle": "^7.8.1", + "firebase/php-jwt": "^6.10.2", + "guzzlehttp/guzzle": "^7.9.2", "h5p/h5p-core": "dev-master#f3579c0d28205bf34490ee151c07d43a2ffc3507", "h5p/h5p-editor": "dev-master#e442a251a6eda93043c637f5bf19beb60e92191b", - "laravel/framework": "^9.52.16", - "laravel/tinker": "^2.9", - "laravelcollective/html": "^6.4.1", - "league/flysystem-aws-s3-v3": "^3.28", - "league/flysystem-ziparchive": "^3.28", + "laravel/framework": "^11", + "laravel/tinker": "^2.10", + "league/flysystem-aws-s3-v3": "^3.29", + "league/flysystem-ziparchive": "^3.29", "league/fractal": "^0.20.1", - "league/mime-type-detection": "^1.15", + "league/mime-type-detection": "^1.16", "masterminds/html5": "^2.9", "matthiasmullie/minify": "^1.3.73", "predis/predis": "^1.1.10", "ramsey/uuid": "^4.7.6", - "spatie/laravel-ignition": "^1.6.4", - "symfony/cache": "^6.4.7", + "spatie/laravel-ignition": "^2.9", + "symfony/cache": "^6.4.16", "xemlock/htmlpurifier-html5": "^0.1.11" }, "require-dev": { - "barryvdh/laravel-ide-helper": "^2.15.1", + "barryvdh/laravel-ide-helper": "^3.2", "ekino/phpstan-banned-code": "^1.0", - "fakerphp/faker": "^1.23.1", - "mockery/mockery": "^1.6.12", - "larastan/larastan": "^v2.9.7", - "phpstan/phpstan": "^1.11.2", - "phpunit/phpunit": "^9.6.19", + "fakerphp/faker": "^1.24.1", + "larastan/larastan": "^2.9", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.12.11", + "phpunit/phpunit": "^11.5", "symfony/css-selector": "^4.4.44" }, "conflict": { diff --git a/sourcecode/apis/contentauthor/composer.lock b/sourcecode/apis/contentauthor/composer.lock index c4b39519a9..24bceb4e12 100644 --- a/sourcecode/apis/contentauthor/composer.lock +++ b/sourcecode/apis/contentauthor/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b7725c127c9af6b0485e4f2df93d891b", + "content-hash": "16eb54bdea6795376ad92505dac66d04", "packages": [ { "name": "auth0/auth0-php", - "version": "8.11.1", + "version": "8.13.0", "source": { "type": "git", "url": "https://github.com/auth0/auth0-PHP.git", - "reference": "5d132ad4b3b95c5d5d342d09088d469568bfa627" + "reference": "3acf0f4d847f355eada5ac3f3336b175238c8ef1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/auth0/auth0-PHP/zipball/5d132ad4b3b95c5d5d342d09088d469568bfa627", - "reference": "5d132ad4b3b95c5d5d342d09088d469568bfa627", + "url": "https://api.github.com/repos/auth0/auth0-PHP/zipball/3acf0f4d847f355eada5ac3f3336b175238c8ef1", + "reference": "3acf0f4d847f355eada5ac3f3336b175238c8ef1", "shasum": "" }, "require": { @@ -32,19 +32,19 @@ "psr/http-message-implementation": "^1" }, "require-dev": { - "ergebnis/composer-normalize": "^2", - "friendsofphp/php-cs-fixer": "^3", - "mockery/mockery": "^1", - "pestphp/pest": "^2", - "phpstan/phpstan": "^1", - "phpstan/phpstan-strict-rules": "^1", - "psr-mock/http": "^1", - "rector/rector": "0.17.6", - "spatie/ray": "^1", + "ergebnis/composer-normalize": "~2.43.0", + "friendsofphp/php-cs-fixer": "~3.59.0", + "mockery/mockery": "~1.6.0", + "pestphp/pest": "~2.34.0", + "phpstan/phpstan": "~1.11.0", + "phpstan/phpstan-strict-rules": "~1.6.0", + "psr-mock/http": "~1.0.0", + "rector/rector": "~0.17.0", + "spatie/ray": "~1.41.0", "symfony/cache": "^4 || ^5 || ^6", "symfony/event-dispatcher": "^4 || ^5 || ^6", - "vimeo/psalm": "^5", - "wikimedia/composer-merge-plugin": "^2" + "vimeo/psalm": "~5.25.0", + "wikimedia/composer-merge-plugin": "~2.1.0" }, "suggest": { "psr/cache-implementation": "(PSR-6 Cache) Improve performance by avoiding making redundant network requests.", @@ -101,22 +101,22 @@ ], "support": { "issues": "https://github.com/auth0/auth0-PHP/issues", - "source": "https://github.com/auth0/auth0-PHP/tree/8.11.1" + "source": "https://github.com/auth0/auth0-PHP/tree/8.13.0" }, - "time": "2024-01-11T15:28:10+00:00" + "time": "2024-11-15T11:08:53+00:00" }, { "name": "aws/aws-crt-php", - "version": "v1.2.5", + "version": "v1.2.7", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b" + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", - "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", "shasum": "" }, "require": { @@ -155,22 +155,22 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.5" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" }, - "time": "2024-04-19T21:30:56+00:00" + "time": "2024-10-18T22:15:13+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.308.5", + "version": "3.334.1", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "81386b0d0fd18ae8015f279247f714c5d5acb696" + "reference": "3938b3467f64a30fed7ee1762a6785f808a5ae4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/81386b0d0fd18ae8015f279247f714c5d5acb696", - "reference": "81386b0d0fd18ae8015f279247f714c5d5acb696", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3938b3467f64a30fed7ee1762a6785f808a5ae4d", + "reference": "3938b3467f64a30fed7ee1762a6785f808a5ae4d", "shasum": "" }, "require": { @@ -199,8 +199,8 @@ "nette/neon": "^2.3", "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", "sebastian/comparator": "^1.2.3 || ^4.0", "yoast/phpunit-polyfills": "^1.0" }, @@ -223,7 +223,10 @@ ], "psr-4": { "Aws\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/data/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -250,31 +253,31 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.308.5" + "source": "https://github.com/aws/aws-sdk-php/tree/3.334.1" }, - "time": "2024-05-29T18:08:33+00:00" + "time": "2024-12-05T01:17:41+00:00" }, { "name": "brick/math", - "version": "0.11.0", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -294,12 +297,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { @@ -307,30 +315,30 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2023-11-29T23:19:16+00:00" }, { "name": "carbonphp/carbon-doctrine-types", - "version": "1.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "3c430083d0b41ceed84ecccf9dac613241d7305d" + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/3c430083d0b41ceed84ecccf9dac613241d7305d", - "reference": "3c430083d0b41ceed84ecccf9dac613241d7305d", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", "shasum": "" }, "require": { - "php": "^7.1.8 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/dbal": ">=3.7.0" + "doctrine/dbal": "<4.0.0 || >=5.0.0" }, "require-dev": { - "doctrine/dbal": ">=2.0.0", + "doctrine/dbal": "^4.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0", "phpunit/phpunit": "^10.3" }, @@ -360,7 +368,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/1.0.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" }, "funding": [ { @@ -376,7 +384,7 @@ "type": "tidelift" } ], - "time": "2023-10-01T12:35:29+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { "name": "cerpus/cerpusauthlib-core", @@ -425,27 +433,27 @@ }, { "name": "cerpus/cerpushelper", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/cerpus/php-cerpushelper.git", - "reference": "1b0e1a177237160fecfd9065265a783d43f27149" + "reference": "03ca456a1e02148a298338e0e8bf56d9e0da3ea4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cerpus/php-cerpushelper/zipball/1b0e1a177237160fecfd9065265a783d43f27149", - "reference": "1b0e1a177237160fecfd9065265a783d43f27149", + "url": "https://api.github.com/repos/cerpus/php-cerpushelper/zipball/03ca456a1e02148a298338e0e8bf56d9e0da3ea4", + "reference": "03ca456a1e02148a298338e0e8bf56d9e0da3ea4", "shasum": "" }, "require": { "auth0/auth0-php": "^8.4", "cerpus/cerpusauthlib-core": "^0.0", "ext-json": "*", - "guzzlehttp/guzzle": "^6.0|^7.0", + "guzzlehttp/guzzle": "^7.0", "guzzlehttp/oauth-subscriber": "^0.6.0", - "illuminate/support": "^8.0|^9.0|^10.0", + "illuminate/support": "^9.0|^10.0|^11.0", "kamermans/guzzle-oauth2-subscriber": "^1.0", - "php": "^8.0" + "php": "^8.2" }, "require-dev": { "fakerphp/faker": "^1.16", @@ -478,9 +486,9 @@ "description": "Base package for common components", "support": { "issues": "https://github.com/cerpus/php-cerpushelper/issues", - "source": "https://github.com/cerpus/php-cerpushelper/tree/v2.2.0" + "source": "https://github.com/cerpus/php-cerpushelper/tree/v2.3.0" }, - "time": "2023-03-15T09:34:04+00:00" + "time": "2024-12-06T11:39:03+00:00" }, { "name": "cerpus/edlib-resource-kit", @@ -488,16 +496,16 @@ "source": { "type": "git", "url": "https://github.com/cerpus/php-edlib-resource-kit.git", - "reference": "78d60abe30a1afd50df8eb002517ee531b2f7ab7" + "reference": "af41490a0c70c69491616eab8382ae3dc01be55d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cerpus/php-edlib-resource-kit/zipball/78d60abe30a1afd50df8eb002517ee531b2f7ab7", - "reference": "78d60abe30a1afd50df8eb002517ee531b2f7ab7", + "url": "https://api.github.com/repos/cerpus/php-edlib-resource-kit/zipball/af41490a0c70c69491616eab8382ae3dc01be55d", + "reference": "af41490a0c70c69491616eab8382ae3dc01be55d", "shasum": "" }, "require": { - "php": "8.2.*|8.3.*", + "php": "8.2.*|8.3.*|8.4.*", "psr/clock": "^1.0", "psr/clock-implementation": "^1.0", "psr/simple-cache": "^1.0|^2.0|^3.0", @@ -540,7 +548,7 @@ "issues": "https://github.com/cerpus/Edlib/issues", "source": "https://github.com/cerpus/php-edlib-resource-kit/tree/master" }, - "time": "2024-10-16T08:59:45+00:00" + "time": "2024-11-21T12:26:48+00:00" }, { "name": "cerpus/edlib-resource-kit-laravel", @@ -548,24 +556,23 @@ "source": { "type": "git", "url": "https://github.com/cerpus/php-edlib-resource-kit-laravel.git", - "reference": "f703402c6a12820c5f9b5833ed5dd6e9fa21641c" + "reference": "2edef4fc70e12c79cd007c7d5fdcfdbc6413ded0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cerpus/php-edlib-resource-kit-laravel/zipball/f703402c6a12820c5f9b5833ed5dd6e9fa21641c", - "reference": "f703402c6a12820c5f9b5833ed5dd6e9fa21641c", + "url": "https://api.github.com/repos/cerpus/php-edlib-resource-kit-laravel/zipball/2edef4fc70e12c79cd007c7d5fdcfdbc6413ded0", + "reference": "2edef4fc70e12c79cd007c7d5fdcfdbc6413ded0", "shasum": "" }, "require": { "cerpus/edlib-resource-kit": "^0.8", "illuminate/support": "^9.0|^10.0|^11.0", - "php": "8.2.*|8.3.*" + "php": "8.2.*|8.3.*|8.4.*" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "guzzlehttp/guzzle": "^7.0", "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", "symfony/clock": "^6.3|^7.0" }, @@ -603,28 +610,28 @@ "issues": "https://github.com/cerpus/Edlib/issues", "source": "https://github.com/cerpus/php-edlib-resource-kit-laravel/tree/master" }, - "time": "2024-10-16T09:11:47+00:00" + "time": "2024-11-21T12:39:48+00:00" }, { "name": "cerpus/imageservice-client", - "version": "v2.2.1", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/cerpus/php-imageservice-client.git", - "reference": "f323dd2a644f7cb9f087d67b90ecabb443ebedbd" + "reference": "92961fb995e5b13a61c0bf74f5610333e3210d53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cerpus/php-imageservice-client/zipball/f323dd2a644f7cb9f087d67b90ecabb443ebedbd", - "reference": "f323dd2a644f7cb9f087d67b90ecabb443ebedbd", + "url": "https://api.github.com/repos/cerpus/php-imageservice-client/zipball/92961fb995e5b13a61c0bf74f5610333e3210d53", + "reference": "92961fb995e5b13a61c0bf74f5610333e3210d53", "shasum": "" }, "require": { "cerpus/cerpushelper": "^1.6 || ^2.0", "ext-json": "*", - "illuminate/support": "^8.0||^9.0||^10.0", + "illuminate/support": "^9.0||^10.0||^11.0", "nesbot/carbon": "^2.0", - "php": "^7.4 || ^8.0" + "php": "^8.2" }, "require-dev": { "fakerphp/faker": "^1.17", @@ -655,29 +662,29 @@ "description": "Client to handle communication with the Cerpus ImageService", "support": { "issues": "https://github.com/cerpus/php-imageservice-client/issues", - "source": "https://github.com/cerpus/php-imageservice-client/tree/v2.2.1" + "source": "https://github.com/cerpus/php-imageservice-client/tree/v2.3.0" }, - "time": "2023-04-18T11:57:34+00:00" + "time": "2024-12-06T11:53:51+00:00" }, { "name": "cerpus/questionbank-client", - "version": "2.3.3", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/cerpus/php-questionbank-client.git", - "reference": "5344dbef1ee5ee5d02bbc0c884473b774e58622c" + "reference": "0efa14537016cd9a97fce06303765917495c4a4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cerpus/php-questionbank-client/zipball/5344dbef1ee5ee5d02bbc0c884473b774e58622c", - "reference": "5344dbef1ee5ee5d02bbc0c884473b774e58622c", + "url": "https://api.github.com/repos/cerpus/php-questionbank-client/zipball/0efa14537016cd9a97fce06303765917495c4a4d", + "reference": "0efa14537016cd9a97fce06303765917495c4a4d", "shasum": "" }, "require": { "cerpus/cerpushelper": "^2.0", "ext-json": "*", - "guzzlehttp/guzzle": "^6.0|^7.0", - "illuminate/support": "^8.0|^9.0|^10.0", + "guzzlehttp/guzzle": "^7.0", + "illuminate/support": "^9.0|^10.0|^11.0", "php": "^7.4 || ^8.0" }, "require-dev": { @@ -716,9 +723,9 @@ "description": "Client to talk do the Cerpus Questionbank Service", "support": { "issues": "https://github.com/cerpus/php-questionbank-client/issues", - "source": "https://github.com/cerpus/php-questionbank-client/tree/2.3.3" + "source": "https://github.com/cerpus/php-questionbank-client/tree/v2.4.0" }, - "time": "2023-09-08T11:02:21+00:00" + "time": "2024-12-06T11:44:59+00:00" }, { "name": "ckeditor/ckeditor", @@ -770,16 +777,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.0", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99" + "reference": "bc0593537a463e55cadf45fd938d23b75095b7e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/0c5ccfcfea312b5c5a190a21ac5cef93f74baf99", - "reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/bc0593537a463e55cadf45fd938d23b75095b7e1", + "reference": "bc0593537a463e55cadf45fd938d23b75095b7e1", "shasum": "" }, "require": { @@ -789,8 +796,8 @@ }, "require-dev": { "phpstan/phpstan": "^1.10", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", + "phpunit/phpunit": "^8 || ^9", + "psr/log": "^1.0 || ^2.0 || ^3.0", "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", @@ -826,7 +833,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.0" + "source": "https://github.com/composer/ca-bundle/tree/1.5.4" }, "funding": [ { @@ -842,28 +849,28 @@ "type": "tidelift" } ], - "time": "2024-03-15T14:00:32+00:00" + "time": "2024-11-27T15:35:25+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -907,7 +914,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -923,7 +930,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "daniel-km/simple-iso-639-3", @@ -964,16 +971,16 @@ }, { "name": "dflydev/dot-access-data", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", "shasum": "" }, "require": { @@ -1033,350 +1040,9 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" - }, - "time": "2022-10-27T11:44:00+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, - { - "name": "doctrine/dbal", - "version": "2.13.9", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8", - "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.0|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.1 || ^8" - }, - "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.4.6", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.16", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.2", - "symfony/cache": "^4.4", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.22.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlanywhere", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.9" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2022-05-02T20:28:55+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" }, - "time": "2024-01-30T19:34:25+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-10-12T20:51:15+00:00" + "time": "2024-07-08T12:26:09+00:00" }, { "name": "doctrine/inflector", @@ -1548,16 +1214,16 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.3", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + "reference": "8c784d071debd117328803d86b2097615b457500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", "shasum": "" }, "require": { @@ -1570,10 +1236,14 @@ "require-dev": { "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -1597,7 +1267,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" }, "funding": [ { @@ -1605,7 +1275,7 @@ "type": "github" } ], - "time": "2023-08-10T19:36:49+00:00" + "time": "2024-10-09T13:47:03+00:00" }, { "name": "egulias/email-validator", @@ -1749,20 +1419,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.17.0", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1804,22 +1474,22 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" }, - "time": "2023-11-17T15:01:25+00:00" + "time": "2024-11-01T03:51:45+00:00" }, { "name": "firebase/php-jwt", - "version": "v6.10.1", + "version": "v6.10.2", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b", + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b", "shasum": "" }, "require": { @@ -1867,9 +1537,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.2" }, - "time": "2024-05-18T18:05:11+00:00" + "time": "2024-11-24T11:22:49+00:00" }, { "name": "fruitcake/php-cors", @@ -1944,24 +1614,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.2", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2" + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { @@ -1990,7 +1660,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, "funding": [ { @@ -2002,26 +1672,26 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:16:48+00:00" + "time": "2024-07-20T21:45:45+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -2032,9 +1702,9 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -2112,7 +1782,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -2128,7 +1798,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/oauth-subscriber", @@ -2191,16 +1861,16 @@ }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { @@ -2208,7 +1878,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -2254,7 +1924,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.2" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -2270,20 +1940,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -2298,8 +1968,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2370,7 +2040,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -2386,7 +2056,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "guzzlehttp/uri-template", @@ -2534,7 +2204,7 @@ "issues": "https://github.com/h5p/h5p-php-library/issues", "source": "https://github.com/h5p/h5p-php-library/tree/master" }, - "time": "2024-08-19T12:13:28+00:00" + "time": "2024-11-14T11:32:39+00:00" }, { "name": "h5p/h5p-editor", @@ -2596,7 +2266,7 @@ "issues": "https://github.com/h5p/h5p-editor-php-library/issues", "source": "https://github.com/h5p/h5p-editor-php-library/tree/master" }, - "time": "2024-07-31T13:33:05+00:00" + "time": "2024-12-05T09:21:10+00:00" }, { "name": "kamermans/guzzle-oauth2-subscriber", @@ -2647,22 +2317,23 @@ }, { "name": "laravel/framework", - "version": "v9.52.16", + "version": "v11.34.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "082345d76fc6a55b649572efe10b11b03e279d24" + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/082345d76fc6a55b649572efe10b11b03e279d24", - "reference": "082345d76fc6a55b649572efe10b11b03e279d24", + "url": "https://api.github.com/repos/laravel/framework/zipball/865da6d73dd353f07a7bcbd778c55966a620121f", + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", + "dragonmantank/cron-expression": "^3.4", "egulias/email-validator": "^3.2.1|^4.0", "ext-ctype": "*", "ext-filter": "*", @@ -2671,39 +2342,45 @@ "ext-openssl": "*", "ext-session": "*", "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.2", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", - "laravel/serializable-closure": "^1.2.2", + "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.62.1", - "nunomaduro/termwind": "^1.13", - "php": "^8.0.2", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.72.2|^3.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^6.0.9", - "symfony/error-handler": "^6.0", - "symfony/finder": "^6.0", - "symfony/http-foundation": "^6.0", - "symfony/http-kernel": "^6.0", - "symfony/mailer": "^6.0", - "symfony/mime": "^6.0", - "symfony/process": "^6.0", - "symfony/routing": "^6.0", - "symfony/uid": "^6.0", - "symfony/var-dumper": "^6.0", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "symfony/http-foundation": "^7.0.3", + "symfony/http-kernel": "^7.0.3", + "symfony/mailer": "^7.0.3", + "symfony/mime": "^7.0.3", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.0.3", + "symfony/routing": "^7.0.3", + "symfony/uid": "^7.0.3", + "symfony/var-dumper": "^7.0.3", "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" }, "conflict": { + "mockery/mockery": "1.6.8", "tightenco/collect": "<5.5.33" }, "provide": { "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { @@ -2712,6 +2389,7 @@ "illuminate/bus": "self.version", "illuminate/cache": "self.version", "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", "illuminate/conditionable": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", @@ -2730,6 +2408,7 @@ "illuminate/notifications": "self.version", "illuminate/pagination": "self.version", "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", "illuminate/queue": "self.version", "illuminate/redis": "self.version", "illuminate/routing": "self.version", @@ -2738,35 +2417,38 @@ "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "illuminate/view": "self.version", + "spatie/once": "*" }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^2.13.3|^3.1.4", + "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.24", - "pda/pheanstalk": "^4.0", - "phpstan/phpdoc-parser": "^1.15", - "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^9.5.8", - "predis/predis": "^1.1.9|^2.0.2", - "symfony/cache": "^6.0", - "symfony/http-client": "^6.0" + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^9.6", + "pda/pheanstalk": "^5.0.6", + "phpstan/phpstan": "^1.11.5", + "phpunit/phpunit": "^10.5.35|^11.3.6", + "predis/predis": "^2.3", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0.3", + "symfony/http-client": "^7.0.3", + "symfony/psr-http-message-bridge": "^7.0.3", + "symfony/translation": "^7.0.3" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -2775,41 +2457,44 @@ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", + "predis/predis": "Required to use the predis connector (^2.3).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "11.x-dev" } }, "autoload": { "files": [ "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { @@ -2841,35 +2526,95 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-10-03T13:02:30+00:00" + "time": "2024-11-27T15:43:57+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.2" + }, + "time": "2024-11-12T14:59:47+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.3", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" + "reference": "0d8d3d8086984996df86596a86dea60398093a81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", - "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/0d8d3d8086984996df86596a86dea60398093a81", + "reference": "0d8d3d8086984996df86596a86dea60398093a81", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^8.1" }, "require-dev": { - "nesbot/carbon": "^2.61", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11" + "illuminate/support": "^10.0|^11.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -2901,20 +2646,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-11-08T14:08:06+00:00" + "time": "2024-11-19T01:38:44+00:00" }, { "name": "laravel/tinker", - "version": "v2.9.0", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", "shasum": "" }, "require": { @@ -2965,95 +2710,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.9.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.0" }, - "time": "2024-01-04T16:10:04+00:00" - }, - { - "name": "laravelcollective/html", - "version": "v6.4.1", - "source": { - "type": "git", - "url": "https://github.com/LaravelCollective/html.git", - "reference": "64ddfdcaeeb8d332bd98bef442bef81e39c3910b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/64ddfdcaeeb8d332bd98bef442bef81e39c3910b", - "reference": "64ddfdcaeeb8d332bd98bef442bef81e39c3910b", - "shasum": "" - }, - "require": { - "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/routing": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/session": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/view": "^6.0|^7.0|^8.0|^9.0|^10.0", - "php": ">=7.2.5" - }, - "require-dev": { - "illuminate/database": "^6.0|^7.0|^8.0|^9.0|^10.0", - "mockery/mockery": "~1.0", - "phpunit/phpunit": "~8.5|^9.5.10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.x-dev" - }, - "laravel": { - "providers": [ - "Collective\\Html\\HtmlServiceProvider" - ], - "aliases": { - "Form": "Collective\\Html\\FormFacade", - "Html": "Collective\\Html\\HtmlFacade" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Collective\\Html\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adam Engebretson", - "email": "adam@laravelcollective.com" - }, - { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - } - ], - "description": "HTML and Form Builders for the Laravel Framework", - "homepage": "https://laravelcollective.com", - "support": { - "issues": "https://github.com/LaravelCollective/html/issues", - "source": "https://github.com/LaravelCollective/html" - }, - "abandoned": "spatie/laravel-html", - "time": "2023-04-25T02:46:11+00:00" + "time": "2024-09-23T13:32:56+00:00" }, { "name": "league/commonmark", - "version": "2.4.2", + "version": "2.5.3", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" + "reference": "b650144166dfa7703e62a22e493b853b58d874b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", - "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", + "reference": "b650144166dfa7703e62a22e493b853b58d874b0", "shasum": "" }, "require": { @@ -3066,8 +2738,8 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.3", - "commonmark/commonmark.js": "0.30.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", "erusev/parsedown": "^1.0", @@ -3089,7 +2761,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.6-dev" } }, "autoload": { @@ -3146,7 +2818,7 @@ "type": "tidelift" } ], - "time": "2024-02-02T11:59:32+00:00" + "time": "2024-08-16T11:46:16+00:00" }, { "name": "league/config", @@ -3232,16 +2904,16 @@ }, { "name": "league/flysystem", - "version": "3.28.0", + "version": "3.29.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", "shasum": "" }, "require": { @@ -3309,22 +2981,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" }, - "time": "2024-05-22T10:09:12+00:00" + "time": "2024-10-08T08:58:34+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "22071ef1604bc776f5ff2468ac27a752514665c8" + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/22071ef1604bc776f5ff2468ac27a752514665c8", - "reference": "22071ef1604bc776f5ff2468ac27a752514665c8", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", "shasum": "" }, "require": { @@ -3364,22 +3036,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" }, - "time": "2024-05-06T20:05:52+00:00" + "time": "2024-08-17T13:10:48+00:00" }, { "name": "league/flysystem-local", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", "shasum": "" }, "require": { @@ -3413,22 +3085,22 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" }, - "time": "2024-05-06T20:05:52+00:00" + "time": "2024-08-09T21:24:39+00:00" }, { "name": "league/flysystem-ziparchive", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-ziparchive.git", - "reference": "6b7f0448b4c6c1720d73ed905adb7020f61bdd14" + "reference": "7f1a2c5655be4c6e0d45574153bb5753c8afa4b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-ziparchive/zipball/6b7f0448b4c6c1720d73ed905adb7020f61bdd14", - "reference": "6b7f0448b4c6c1720d73ed905adb7020f61bdd14", + "url": "https://api.github.com/repos/thephpleague/flysystem-ziparchive/zipball/7f1a2c5655be4c6e0d45574153bb5753c8afa4b7", + "reference": "7f1a2c5655be4c6e0d45574153bb5753c8afa4b7", "shasum": "" }, "require": { @@ -3462,9 +3134,9 @@ "zip" ], "support": { - "source": "https://github.com/thephpleague/flysystem-ziparchive/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem-ziparchive/tree/3.29.0" }, - "time": "2024-05-06T20:05:52+00:00" + "time": "2024-08-09T21:24:39+00:00" }, { "name": "league/fractal", @@ -3538,16 +3210,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.15.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", - "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", "shasum": "" }, "require": { @@ -3578,7 +3250,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" }, "funding": [ { @@ -3590,7 +3262,7 @@ "type": "tidelift" } ], - "time": "2024-01-28T23:22:08+00:00" + "time": "2024-09-21T08:32:55+00:00" }, { "name": "masterminds/html5", @@ -3785,42 +3457,43 @@ }, { "name": "monolog/monolog", - "version": "2.9.3", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215" + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.38 || ^9.6.19", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -3843,7 +3516,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -3871,7 +3544,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.3" + "source": "https://github.com/Seldaek/monolog/tree/3.8.1" }, "funding": [ { @@ -3883,20 +3556,20 @@ "type": "tidelift" } ], - "time": "2024-04-12T20:52:51+00:00" + "time": "2024-12-05T17:15:07+00:00" }, { "name": "mtdowling/jmespath.php", - "version": "2.7.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b" + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/bbb69a935c2cbb0c03d7f481a238027430f6440b", - "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", "shasum": "" }, "require": { @@ -3913,7 +3586,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -3947,22 +3620,22 @@ ], "support": { "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.7.0" + "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" }, - "time": "2023-08-25T10:54:48+00:00" + "time": "2024-09-04T18:46:31+00:00" }, { "name": "nesbot/carbon", - "version": "2.72.3", + "version": "2.72.5", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83" + "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83", - "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", + "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", "shasum": "" }, "require": { @@ -3996,8 +3669,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" }, "laravel": { "providers": [ @@ -4056,28 +3729,28 @@ "type": "tidelift" } ], - "time": "2024-01-25T10:35:09+00:00" + "time": "2024-06-03T19:18:41+00:00" }, { "name": "nette/schema", - "version": "v1.3.0", + "version": "v1.3.2", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.3" + "php": "8.1 - 8.4" }, "require-dev": { - "nette/tester": "^2.4", + "nette/tester": "^2.5.2", "phpstan/phpstan-nette": "^1.0", "tracy/tracy": "^2.8" }, @@ -4116,26 +3789,26 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.0" + "source": "https://github.com/nette/schema/tree/v1.3.2" }, - "time": "2023-12-11T11:54:22+00:00" + "time": "2024-10-06T23:10:23+00:00" }, { "name": "nette/utils", - "version": "v4.0.4", + "version": "v4.0.5", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", - "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", "shasum": "" }, "require": { - "php": ">=8.0 <8.4" + "php": "8.0 - 8.4" }, "conflict": { "nette/finder": "<3", @@ -4202,22 +3875,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.4" + "source": "https://github.com/nette/utils/tree/v4.0.5" }, - "time": "2024-01-17T16:50:36+00:00" + "time": "2024-08-07T15:39:19+00:00" }, { "name": "nikic/php-parser", - "version": "v5.0.2", + "version": "v5.3.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", "shasum": "" }, "require": { @@ -4228,7 +3901,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -4260,39 +3933,37 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" }, - "time": "2024-03-05T20:51:40+00:00" + "time": "2024-10-08T18:51:32+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.15.1", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" + "php": "^8.2", + "symfony/console": "^7.1.8" }, "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0", + "phpstan/phpstan": "^1.12.11", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^7.1.8", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4301,6 +3972,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -4332,7 +4006,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" }, "funding": [ { @@ -4348,20 +4022,20 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2024-11-21T10:39:51+00:00" }, { "name": "php-http/discovery", - "version": "1.19.4", + "version": "1.20.0", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "0700efda8d7526335132360167315fdab3aeb599" + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599", - "reference": "0700efda8d7526335132360167315fdab3aeb599", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", "shasum": "" }, "require": { @@ -4425,22 +4099,22 @@ ], "support": { "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.19.4" + "source": "https://github.com/php-http/discovery/tree/1.20.0" }, - "time": "2024-03-29T13:00:05+00:00" + "time": "2024-10-02T11:20:13+00:00" }, { "name": "php-http/multipart-stream-builder", - "version": "1.3.0", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/php-http/multipart-stream-builder.git", - "reference": "f5938fd135d9fa442cc297dc98481805acfe2b6a" + "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/f5938fd135d9fa442cc297dc98481805acfe2b6a", - "reference": "f5938fd135d9fa442cc297dc98481805acfe2b6a", + "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/10086e6de6f53489cca5ecc45b6f468604d3460e", + "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e", "shasum": "" }, "require": { @@ -4481,22 +4155,22 @@ ], "support": { "issues": "https://github.com/php-http/multipart-stream-builder/issues", - "source": "https://github.com/php-http/multipart-stream-builder/tree/1.3.0" + "source": "https://github.com/php-http/multipart-stream-builder/tree/1.4.2" }, - "time": "2023-04-28T14:10:22+00:00" + "time": "2024-09-04T13:22:54+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.2", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { @@ -4504,13 +4178,13 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "1.9-dev" @@ -4546,7 +4220,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -4558,7 +4232,7 @@ "type": "tidelift" } ], - "time": "2023-11-12T21:59:55+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "predis/predis", @@ -4628,40 +4302,40 @@ }, { "name": "psr-discovery/all", - "version": "1.0.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/all.git", - "reference": "e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b" + "reference": "840bc0cde7d56e9296606f7a6f0cfc8301fda57d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/all/zipball/e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b", - "reference": "e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b", + "url": "https://api.github.com/repos/psr-discovery/all/zipball/840bc0cde7d56e9296606f7a6f0cfc8301fda57d", + "reference": "840bc0cde7d56e9296606f7a6f0cfc8301fda57d", "shasum": "" }, "require": { - "php": "^8.1", - "psr-discovery/cache-implementations": "^1.0", - "psr-discovery/container-implementations": "^1.0", - "psr-discovery/event-dispatcher-implementations": "^1.0", - "psr-discovery/http-client-implementations": "^1.0", - "psr-discovery/http-factory-implementations": "^1.0", - "psr-discovery/log-implementations": "^1.0" + "php": "^8.2", + "psr-discovery/cache-implementations": "^1", + "psr-discovery/container-implementations": "^1", + "psr-discovery/event-dispatcher-implementations": "^1", + "psr-discovery/http-client-implementations": "^1", + "psr-discovery/http-factory-implementations": "^1", + "psr-discovery/log-implementations": "^1" }, "type": "metapackage", "extra": { "merge-plugin": { - "ignore-duplicates": false, "include": [ "composer.local.json" ], + "recurse": true, + "replace": true, "merge-dev": true, "merge-extra": false, - "merge-extra-deep": false, "merge-scripts": false, - "recurse": true, - "replace": true + "merge-extra-deep": false, + "ignore-duplicates": false } }, "autoload": { @@ -4693,26 +4367,26 @@ "psr-6" ], "support": { - "source": "https://github.com/psr-discovery/all/tree/1.0.1" + "source": "https://github.com/psr-discovery/all/tree/1.2.0" }, - "time": "2024-03-04T21:20:17+00:00" + "time": "2024-12-05T17:59:32+00:00" }, { "name": "psr-discovery/cache-implementations", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/cache-implementations.git", - "reference": "ebede0af34a7fd3c5564809e659ee69c0ab85ff6" + "reference": "ba247db9da1289b5880bf1b28c4280c16370ea3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/cache-implementations/zipball/ebede0af34a7fd3c5564809e659ee69c0ab85ff6", - "reference": "ebede0af34a7fd3c5564809e659ee69c0ab85ff6", + "url": "https://api.github.com/repos/psr-discovery/cache-implementations/zipball/ba247db9da1289b5880bf1b28c4280c16370ea3e", + "reference": "ba247db9da1289b5880bf1b28c4280c16370ea3e", "shasum": "" }, "require": { - "php": "^8.1", + "php": "^8.2", "psr-discovery/discovery": "^1.0", "psr/cache": "^1.0 | ^2.0 | ^3.0" }, @@ -4729,16 +4403,16 @@ "type": "library", "extra": { "merge-plugin": { - "ignore-duplicates": false, "include": [ "composer.local.json" ], + "recurse": true, + "replace": true, "merge-dev": true, "merge-extra": false, - "merge-extra-deep": false, "merge-scripts": false, - "recurse": true, - "replace": true + "merge-extra-deep": false, + "ignore-duplicates": false } }, "autoload": { @@ -4768,26 +4442,26 @@ ], "support": { "issues": "https://github.com/psr-discovery/cache-implementations/issues", - "source": "https://github.com/psr-discovery/cache-implementations/tree/1.1.1" + "source": "https://github.com/psr-discovery/cache-implementations/tree/1.2.0" }, - "time": "2024-03-04T21:22:36+00:00" + "time": "2024-12-05T17:55:07+00:00" }, { "name": "psr-discovery/container-implementations", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/container-implementations.git", - "reference": "728a452b32b0bb60c4bac43b18db2e3105bb8d7e" + "reference": "451bb93b473f194a2984c3e7ae0b162e44c55ba1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/container-implementations/zipball/728a452b32b0bb60c4bac43b18db2e3105bb8d7e", - "reference": "728a452b32b0bb60c4bac43b18db2e3105bb8d7e", + "url": "https://api.github.com/repos/psr-discovery/container-implementations/zipball/451bb93b473f194a2984c3e7ae0b162e44c55ba1", + "reference": "451bb93b473f194a2984c3e7ae0b162e44c55ba1", "shasum": "" }, "require": { - "php": "^8.1", + "php": "^8.2", "psr-discovery/discovery": "^1.0", "psr/container": "^1.0 | ^2.0" }, @@ -4804,16 +4478,16 @@ "type": "library", "extra": { "merge-plugin": { - "ignore-duplicates": false, "include": [ "composer.local.json" ], + "recurse": true, + "replace": true, "merge-dev": true, "merge-extra": false, - "merge-extra-deep": false, "merge-scripts": false, - "recurse": true, - "replace": true + "merge-extra-deep": false, + "ignore-duplicates": false } }, "autoload": { @@ -4841,27 +4515,27 @@ ], "support": { "issues": "https://github.com/psr-discovery/container-implementations/issues", - "source": "https://github.com/psr-discovery/container-implementations/tree/1.1.1" + "source": "https://github.com/psr-discovery/container-implementations/tree/1.2.0" }, - "time": "2024-03-04T21:24:05+00:00" + "time": "2024-12-05T17:42:15+00:00" }, { "name": "psr-discovery/discovery", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/discovery.git", - "reference": "9fb31dca2030accd9d3de21fb8806478e9df5b2b" + "reference": "636f67406eadd33a66a7e65b9f0e26abfd7614ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/discovery/zipball/9fb31dca2030accd9d3de21fb8806478e9df5b2b", - "reference": "9fb31dca2030accd9d3de21fb8806478e9df5b2b", + "url": "https://api.github.com/repos/psr-discovery/discovery/zipball/636f67406eadd33a66a7e65b9f0e26abfd7614ac", + "reference": "636f67406eadd33a66a7e65b9f0e26abfd7614ac", "shasum": "" }, "require": { "composer/semver": "^3.0", - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.14", @@ -4876,16 +4550,16 @@ "type": "library", "extra": { "merge-plugin": { - "ignore-duplicates": false, "include": [ "composer.local.json" ], + "recurse": true, + "replace": true, "merge-dev": true, "merge-extra": false, - "merge-extra-deep": false, "merge-scripts": false, - "recurse": true, - "replace": true + "merge-extra-deep": false, + "ignore-duplicates": false } }, "autoload": { @@ -4918,26 +4592,26 @@ ], "support": { "issues": "https://github.com/psr-discovery/discovery/issues", - "source": "https://github.com/psr-discovery/discovery/tree/1.1.1" + "source": "https://github.com/psr-discovery/discovery/tree/1.2.0" }, - "time": "2024-03-04T21:26:05+00:00" + "time": "2024-12-05T16:59:22+00:00" }, { "name": "psr-discovery/event-dispatcher-implementations", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/event-dispatcher-implementations.git", - "reference": "9033bb984613703e4c4f795ef0657184dc1c70eb" + "reference": "8ccb36eca9c7a685d91316d1f64cff6253e38825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/event-dispatcher-implementations/zipball/9033bb984613703e4c4f795ef0657184dc1c70eb", - "reference": "9033bb984613703e4c4f795ef0657184dc1c70eb", + "url": "https://api.github.com/repos/psr-discovery/event-dispatcher-implementations/zipball/8ccb36eca9c7a685d91316d1f64cff6253e38825", + "reference": "8ccb36eca9c7a685d91316d1f64cff6253e38825", "shasum": "" }, "require": { - "php": "^8.1", + "php": "^8.2", "psr-discovery/discovery": "^1.0", "psr/event-dispatcher": "^1.0" }, @@ -4954,16 +4628,16 @@ "type": "library", "extra": { "merge-plugin": { - "ignore-duplicates": false, "include": [ "composer.local.json" ], + "recurse": true, + "replace": true, "merge-dev": true, "merge-extra": false, - "merge-extra-deep": false, "merge-scripts": false, - "recurse": true, - "replace": true + "merge-extra-deep": false, + "ignore-duplicates": false } }, "autoload": { @@ -4991,26 +4665,26 @@ ], "support": { "issues": "https://github.com/psr-discovery/event-dispatcher-implementations/issues", - "source": "https://github.com/psr-discovery/event-dispatcher-implementations/tree/1.1.1" + "source": "https://github.com/psr-discovery/event-dispatcher-implementations/tree/1.2.0" }, - "time": "2024-03-04T21:27:10+00:00" + "time": "2024-12-05T17:29:26+00:00" }, { "name": "psr-discovery/http-client-implementations", - "version": "1.2.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/http-client-implementations.git", - "reference": "a05c54087d13504d8e48c27395fbab638fb0a114" + "reference": "3999d98e4fcbf099efeda07df82c59134f932ad8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/http-client-implementations/zipball/a05c54087d13504d8e48c27395fbab638fb0a114", - "reference": "a05c54087d13504d8e48c27395fbab638fb0a114", + "url": "https://api.github.com/repos/psr-discovery/http-client-implementations/zipball/3999d98e4fcbf099efeda07df82c59134f932ad8", + "reference": "3999d98e4fcbf099efeda07df82c59134f932ad8", "shasum": "" }, "require": { - "php": "^8.1", + "php": "^8.2", "psr-discovery/discovery": "^1.0", "psr/http-client": "^1.0" }, @@ -5027,16 +4701,16 @@ "type": "library", "extra": { "merge-plugin": { - "ignore-duplicates": false, "include": [ "composer.local.json" ], + "recurse": true, + "replace": true, "merge-dev": true, "merge-extra": false, - "merge-extra-deep": false, "merge-scripts": false, - "recurse": true, - "replace": true + "merge-extra-deep": false, + "ignore-duplicates": false } }, "autoload": { @@ -5064,26 +4738,26 @@ ], "support": { "issues": "https://github.com/psr-discovery/http-client-implementations/issues", - "source": "https://github.com/psr-discovery/http-client-implementations/tree/1.2.0" + "source": "https://github.com/psr-discovery/http-client-implementations/tree/1.4.0" }, - "time": "2024-03-16T05:29:47+00:00" + "time": "2024-12-05T18:08:01+00:00" }, { "name": "psr-discovery/http-factory-implementations", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/http-factory-implementations.git", - "reference": "4ee07ae795b794e61578db32b5422a780b01b833" + "reference": "3979e3d9a95bedd91c13e1de12c6e99a74c449d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/http-factory-implementations/zipball/4ee07ae795b794e61578db32b5422a780b01b833", - "reference": "4ee07ae795b794e61578db32b5422a780b01b833", + "url": "https://api.github.com/repos/psr-discovery/http-factory-implementations/zipball/3979e3d9a95bedd91c13e1de12c6e99a74c449d3", + "reference": "3979e3d9a95bedd91c13e1de12c6e99a74c449d3", "shasum": "" }, "require": { - "php": "^8.1", + "php": "^8.2", "psr-discovery/discovery": "^1.1", "psr/http-factory": "^1.0" }, @@ -5100,16 +4774,16 @@ "type": "library", "extra": { "merge-plugin": { - "ignore-duplicates": false, "include": [ "composer.local.json" ], + "recurse": true, + "replace": true, "merge-dev": true, "merge-extra": false, - "merge-extra-deep": false, "merge-scripts": false, - "recurse": true, - "replace": true + "merge-extra-deep": false, + "ignore-duplicates": false } }, "autoload": { @@ -5137,26 +4811,26 @@ ], "support": { "issues": "https://github.com/psr-discovery/http-factory-implementations/issues", - "source": "https://github.com/psr-discovery/http-factory-implementations/tree/1.1.1" + "source": "https://github.com/psr-discovery/http-factory-implementations/tree/1.2.0" }, - "time": "2024-03-04T21:31:16+00:00" + "time": "2024-12-05T17:18:21+00:00" }, { "name": "psr-discovery/log-implementations", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/log-implementations.git", - "reference": "384894384663fa5e1b2186112fb8ffe3f81a0b22" + "reference": "8cc55fcaa6b7481244e491a005263459fdfc6cba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/log-implementations/zipball/384894384663fa5e1b2186112fb8ffe3f81a0b22", - "reference": "384894384663fa5e1b2186112fb8ffe3f81a0b22", + "url": "https://api.github.com/repos/psr-discovery/log-implementations/zipball/8cc55fcaa6b7481244e491a005263459fdfc6cba", + "reference": "8cc55fcaa6b7481244e491a005263459fdfc6cba", "shasum": "" }, "require": { - "php": "^8.1", + "php": "^8.2", "psr-discovery/discovery": "^1.0", "psr/log": "^1.0 | ^2.0 | ^3.0" }, @@ -5173,16 +4847,16 @@ "type": "library", "extra": { "merge-plugin": { - "ignore-duplicates": false, "include": [ "composer.local.json" ], + "recurse": true, + "replace": true, "merge-dev": true, "merge-extra": false, - "merge-extra-deep": false, "merge-scripts": false, - "recurse": true, - "replace": true + "merge-extra-deep": false, + "ignore-duplicates": false } }, "autoload": { @@ -5212,9 +4886,9 @@ ], "support": { "issues": "https://github.com/psr-discovery/log-implementations/issues", - "source": "https://github.com/psr-discovery/log-implementations/tree/1.0.1" + "source": "https://github.com/psr-discovery/log-implementations/tree/1.1.0" }, - "time": "2024-03-04T21:32:27+00:00" + "time": "2024-12-05T17:06:04+00:00" }, { "name": "psr/cache", @@ -5578,16 +5252,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -5622,9 +5296,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "psr/simple-cache", @@ -5679,16 +5353,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.3", + "version": "v0.12.5", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73" + "reference": "36a03ff27986682c22985e56aabaf840dd173cb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", - "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/36a03ff27986682c22985e56aabaf840dd173cb5", + "reference": "36a03ff27986682c22985e56aabaf840dd173cb5", "shasum": "" }, "require": { @@ -5715,12 +5389,12 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, "bamarni-bin": { "bin-links": false, "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -5752,9 +5426,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.3" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.5" }, - "time": "2024-04-02T15:57:53+00:00" + "time": "2024-11-29T06:14:30+00:00" }, { "name": "ralouphie/getallheaders", @@ -5983,27 +5657,27 @@ }, { "name": "spatie/backtrace", - "version": "1.6.1", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23" + "reference": "0f2477c520e3729de58e061b8192f161c99f770b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/8373b9d51638292e3bfd736a9c19a654111b4a23", - "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b", + "reference": "0f2477c520e3729de58e061b8192f161c99f770b", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^7.3 || ^8.0" }, "require-dev": { "ext-json": "*", - "laravel/serializable-closure": "^1.3", - "phpunit/phpunit": "^9.3", - "spatie/phpunit-snapshot-assertions": "^4.2", - "symfony/var-dumper": "^5.1" + "laravel/serializable-closure": "^1.3 || ^2.0", + "phpunit/phpunit": "^9.3 || ^11.4.3", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", + "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" }, "type": "library", "autoload": { @@ -6030,7 +5704,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.6.1" + "source": "https://github.com/spatie/backtrace/tree/1.7.1" }, "funding": [ { @@ -6042,26 +5716,100 @@ "type": "other" } ], - "time": "2024-04-24T13:22:11+00:00" + "time": "2024-12-02T13:28:15+00:00" + }, + { + "name": "spatie/error-solutions", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/error-solutions.git", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "illuminate/broadcasting": "^10.0|^11.0", + "illuminate/cache": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "livewire/livewire": "^2.11|^3.3.5", + "openai-php/client": "^0.10.1", + "orchestra/testbench": "^7.0|8.22.3|^9.0", + "pestphp/pest": "^2.20", + "phpstan/phpstan": "^1.11", + "psr/simple-cache": "^3.0", + "psr/simple-cache-implementation": "^3.0", + "spatie/ray": "^1.28", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "legacy/ignition", + "Spatie\\ErrorSolutions\\": "src", + "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "This is my package error-solutions", + "homepage": "https://github.com/spatie/error-solutions", + "keywords": [ + "error-solutions", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/error-solutions/issues", + "source": "https://github.com/spatie/error-solutions/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/Spatie", + "type": "github" + } + ], + "time": "2024-07-25T11:06:04+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.6.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "220a7c8745e9fa427d54099f47147c4b97fe6462" + "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/220a7c8745e9fa427d54099f47147c4b97fe6462", - "reference": "220a7c8745e9fa427d54099f47147c4b97fe6462", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", "shasum": "" }, "require": { "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", "php": "^8.0", - "spatie/backtrace": "^1.5.2", + "spatie/backtrace": "^1.6.1", "symfony/http-foundation": "^5.2|^6.0|^7.0", "symfony/mime": "^5.2|^6.0|^7.0", "symfony/process": "^5.2|^6.0|^7.0", @@ -6073,7 +5821,7 @@ "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" + "spatie/pest-plugin-snapshots": "^1.0|^2.0" }, "type": "library", "extra": { @@ -6103,7 +5851,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.6.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.10.0" }, "funding": [ { @@ -6111,28 +5859,28 @@ "type": "github" } ], - "time": "2024-05-22T09:45:39+00:00" + "time": "2024-12-02T14:30:06+00:00" }, { "name": "spatie/ignition", - "version": "1.14.2", + "version": "1.15.0", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "5e11c11f675bb5251f061491a493e04a1a571532" + "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/5e11c11f675bb5251f061491a493e04a1a571532", - "reference": "5e11c11f675bb5251f061491a493e04a1a571532", + "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", "php": "^8.0", - "spatie/backtrace": "^1.5.3", - "spatie/flare-client-php": "^1.4.0", + "spatie/error-solutions": "^1.0", + "spatie/flare-client-php": "^1.7", "symfony/console": "^5.4|^6.0|^7.0", "symfony/var-dumper": "^5.4|^6.0|^7.0" }, @@ -6194,55 +5942,56 @@ "type": "github" } ], - "time": "2024-05-29T08:10:20+00:00" + "time": "2024-06-12T14:55:22+00:00" }, { "name": "spatie/laravel-ignition", - "version": "1.6.4", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc" + "reference": "62042df15314b829d0f26e02108f559018e2aad0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", - "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/62042df15314b829d0f26e02108f559018e2aad0", + "reference": "62042df15314b829d0f26e02108f559018e2aad0", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^8.77|^9.27", - "monolog/monolog": "^2.3", - "php": "^8.0", - "spatie/flare-client-php": "^1.0.1", - "spatie/ignition": "^1.4.1", - "symfony/console": "^5.0|^6.0", - "symfony/var-dumper": "^5.0|^6.0" + "illuminate/support": "^10.0|^11.0", + "php": "^8.1", + "spatie/ignition": "^1.15", + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" }, "require-dev": { - "filp/whoops": "^2.14", - "livewire/livewire": "^2.8|dev-develop", - "mockery/mockery": "^1.4", - "nunomaduro/larastan": "^1.0", - "orchestra/testbench": "^6.23|^7.0", - "pestphp/pest": "^1.20", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/laravel-ray": "^1.27" + "livewire/livewire": "^2.11|^3.3.5", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.8.1", + "orchestra/testbench": "8.22.3|^9.0", + "pestphp/pest": "^2.34", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.16", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" }, "type": "library", "extra": { "laravel": { - "providers": [ - "Spatie\\LaravelIgnition\\IgnitionServiceProvider" - ], "aliases": { "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" - } + }, + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ] } }, "autoload": { @@ -6284,20 +6033,20 @@ "type": "github" } ], - "time": "2023-01-03T19:28:04+00:00" + "time": "2024-12-02T08:43:31+00:00" }, { "name": "symfony/cache", - "version": "v6.4.7", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "b9e9b93c9817ec6c789c7943f5e54b57a041c16a" + "reference": "70d60e9a3603108563010f8592dff15a6f15dfae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/b9e9b93c9817ec6c789c7943f5e54b57a041c16a", - "reference": "b9e9b93c9817ec6c789c7943f5e54b57a041c16a", + "url": "https://api.github.com/repos/symfony/cache/zipball/70d60e9a3603108563010f8592dff15a6f15dfae", + "reference": "70d60e9a3603108563010f8592dff15a6f15dfae", "shasum": "" }, "require": { @@ -6364,7 +6113,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.7" + "source": "https://github.com/symfony/cache/tree/v6.4.16" }, "funding": [ { @@ -6380,20 +6129,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-20T10:10:54+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", "shasum": "" }, "require": { @@ -6440,7 +6189,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" }, "funding": [ { @@ -6456,51 +6205,50 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/console", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f" + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a170e64ae10d00ba89e2acbb590dc2e54da8ad8f", - "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f", + "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6534,7 +6282,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.7" + "source": "https://github.com/symfony/console/tree/v7.2.0" }, "funding": [ { @@ -6550,7 +6298,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/css-selector", @@ -6620,16 +6368,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -6667,7 +6415,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -6683,26 +6431,26 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "667a072466c6a53827ed7b119af93806b884cbb3" + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/667a072466c6a53827ed7b119af93806b884cbb3", - "reference": "667a072466c6a53827ed7b119af93806b884cbb3", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/672b3dd1ef8b87119b446d67c58c106c43f965fe", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "conflict": { "symfony/deprecation-contracts": "<2.5", @@ -6711,7 +6459,7 @@ "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/serializer": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -6742,7 +6490,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.7" + "source": "https://github.com/symfony/error-handler/tree/v7.2.0" }, "funding": [ { @@ -6758,20 +6506,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-05T15:35:02+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.0.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "db2a7fab994d67d92356bb39c367db115d9d30f9" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/db2a7fab994d67d92356bb39c367db115d9d30f9", - "reference": "db2a7fab994d67d92356bb39c367db115d9d30f9", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -6822,7 +6570,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.7" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -6838,20 +6586,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -6898,7 +6646,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -6914,27 +6662,27 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/finder", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "511c48990be17358c23bf45c5d71ab85d40fb764" + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/511c48990be17358c23bf45c5d71ab85d40fb764", - "reference": "511c48990be17358c23bf45c5d71ab85d40fb764", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6962,7 +6710,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.7" + "source": "https://github.com/symfony/finder/tree/v7.2.0" }, "funding": [ { @@ -6978,40 +6726,41 @@ "type": "tidelift" } ], - "time": "2024-04-23T10:36:43+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759" + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b4db6b833035477cb70e18d0ae33cb7c2b521759", - "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e88a66c3997859532bc2ddd6dd8f35aba2711744", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7039,7 +6788,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.7" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.0" }, "funding": [ { @@ -7055,77 +6804,77 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-13T18:58:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "b7b5e6cdef670a0c82d015a966ffc7e855861a98" + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b7b5e6cdef670a0c82d015a966ffc7e855861a98", - "reference": "b7b5e6cdef670a0c82d015a966ffc7e855861a98", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", + "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -7153,7 +6902,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.7" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.0" }, "funding": [ { @@ -7169,43 +6918,43 @@ "type": "tidelift" } ], - "time": "2024-04-29T11:24:44+00:00" + "time": "2024-11-29T08:42:40+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "2c446d4e446995bed983c0b5bb9ff837e8de7dbd" + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/2c446d4e446995bed983c0b5bb9ff837e8de7dbd", - "reference": "2c446d4e446995bed983c0b5bb9ff837e8de7dbd", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^7.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.2|^7.0", - "symfony/twig-bridge": "^6.2|^7.0" + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7233,7 +6982,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.7" + "source": "https://github.com/symfony/mailer/tree/v7.2.0" }, "funding": [ { @@ -7249,25 +6998,24 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-25T15:21:05+00:00" }, { "name": "symfony/mime", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "decadcf3865918ecfcbfa90968553994ce935a5e" + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/decadcf3865918ecfcbfa90968553994ce935a5e", - "reference": "decadcf3865918ecfcbfa90968553994ce935a5e", + "url": "https://api.github.com/repos/symfony/mime/zipball/cc84a4b81f62158c3846ac7ff10f696aae2b524d", + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -7275,18 +7023,18 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.4|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3.2|^7.0" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -7318,7 +7066,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.7" + "source": "https://github.com/symfony/mime/tree/v7.2.0" }, "funding": [ { @@ -7334,24 +7082,24 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-23T09:19:39+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -7397,7 +7145,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -7413,24 +7161,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -7475,7 +7223,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -7491,26 +7239,25 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -7559,7 +7306,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -7575,24 +7322,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -7611,90 +7358,9 @@ "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7710,17 +7376,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "intl", + "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -7736,24 +7403,30 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.29.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { @@ -7767,7 +7440,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7784,16 +7457,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -7809,24 +7483,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -7873,7 +7547,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -7889,25 +7563,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.2" }, "type": "library", "extra": { @@ -7950,7 +7623,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -7966,24 +7639,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", - "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" @@ -8029,7 +7702,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, "funding": [ { @@ -8045,24 +7718,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "cdb1c81c145fd5aa9b0038bab694035020943381" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/cdb1c81c145fd5aa9b0038bab694035020943381", - "reference": "cdb1c81c145fd5aa9b0038bab694035020943381", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -8090,7 +7763,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.7" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -8106,40 +7779,38 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/routing", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "276e06398f71fa2a973264d94f28150f93cfb907" + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/276e06398f71fa2a973264d94f28150f93cfb907", - "reference": "276e06398f71fa2a973264d94f28150f93cfb907", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -8173,7 +7844,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.7" + "source": "https://github.com/symfony/routing/tree/v7.2.0" }, "funding": [ { @@ -8189,20 +7860,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-25T11:08:51+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -8256,7 +7927,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -8272,20 +7943,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.0.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/e405b5424dc2528e02e31ba26b83a79fd4eb8f63", - "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { @@ -8299,6 +7970,7 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { + "symfony/emoji": "^7.1", "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", @@ -8342,7 +8014,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.7" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -8358,20 +8030,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation", - "version": "v6.4.7", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7495687c58bfd88b7883823747b0656d90679123" + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7495687c58bfd88b7883823747b0656d90679123", - "reference": "7495687c58bfd88b7883823747b0656d90679123", + "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", "shasum": "" }, "require": { @@ -8437,7 +8109,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.7" + "source": "https://github.com/symfony/translation/tree/v6.4.13" }, "funding": [ { @@ -8453,20 +8125,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-09-27T18:14:25+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -8515,7 +8187,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -8531,28 +8203,28 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "a66efcb71d8bc3a207d9d78e0bd67f3321510355" + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/a66efcb71d8bc3a207d9d78e0bd67f3321510355", - "reference": "a66efcb71d8bc3a207d9d78e0bd67f3321510355", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -8589,7 +8261,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.7" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -8605,38 +8277,36 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7a9cd977cd1c5fed3694bee52990866432af07d7" + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7a9cd977cd1c5fed3694bee52990866432af07d7", - "reference": "7a9cd977cd1c5fed3694bee52990866432af07d7", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -8674,7 +8344,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.7" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" }, "funding": [ { @@ -8690,20 +8360,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-11-08T15:48:14+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.0.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "cdecc0022e40e90340ba1a59a3d5ccf069777078" + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/cdecc0022e40e90340ba1a59a3d5ccf069777078", - "reference": "cdecc0022e40e90340ba1a59a3d5ccf069777078", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1a6a89f95a46af0f142874c9d650a6358d13070d", + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d", "shasum": "" }, "require": { @@ -8750,7 +8420,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.7" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.0" }, "funding": [ { @@ -8766,7 +8436,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-10-18T07:58:17+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -8823,23 +8493,23 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.6.0", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.2", + "graham-campbell/result-type": "^1.1.3", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2", + "phpoption/phpoption": "^1.9.3", "symfony/polyfill-ctype": "^1.24", "symfony/polyfill-mbstring": "^1.24", "symfony/polyfill-php80": "^1.24" @@ -8856,7 +8526,7 @@ "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "5.6-dev" @@ -8891,7 +8561,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" }, "funding": [ { @@ -8903,20 +8573,20 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:43:29+00:00" + "time": "2024-07-20T21:52:34+00:00" }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -8941,7 +8611,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -8953,7 +8623,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -8977,7 +8647,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "webmozart/assert", @@ -9096,48 +8766,48 @@ "packages-dev": [ { "name": "barryvdh/laravel-ide-helper", - "version": "v2.15.1", + "version": "v3.2.2", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "77831852bb7bc54f287246d32eb91274eaf87f8b" + "reference": "07e3bd8796f3d1414801a03d3783f9d3ec9efc08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/77831852bb7bc54f287246d32eb91274eaf87f8b", - "reference": "77831852bb7bc54f287246d32eb91274eaf87f8b", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/07e3bd8796f3d1414801a03d3783f9d3ec9efc08", + "reference": "07e3bd8796f3d1414801a03d3783f9d3ec9efc08", "shasum": "" }, "require": { - "barryvdh/reflection-docblock": "^2.0.6", + "barryvdh/reflection-docblock": "^2.1.2", "composer/class-map-generator": "^1.0", - "doctrine/dbal": "^2.6 || ^3.1.4", "ext-json": "*", - "illuminate/console": "^9 || ^10", - "illuminate/filesystem": "^9 || ^10", - "illuminate/support": "^9 || ^10", + "illuminate/console": "^11.15", + "illuminate/database": "^11.15", + "illuminate/filesystem": "^11.15", + "illuminate/support": "^11.15", "nikic/php-parser": "^4.18 || ^5", - "php": "^8.0", + "php": "^8.2", "phpdocumentor/type-resolver": "^1.1.0" }, "require-dev": { "ext-pdo_sqlite": "*", "friendsofphp/php-cs-fixer": "^3", - "illuminate/config": "^9 || ^10", - "illuminate/view": "^9 || ^10", + "illuminate/config": "^11.15", + "illuminate/view": "^11.15", "mockery/mockery": "^1.4", - "orchestra/testbench": "^7 || ^8", - "phpunit/phpunit": "^9", - "spatie/phpunit-snapshot-assertions": "^4", + "orchestra/testbench": "^9.2", + "phpunit/phpunit": "^10.5", + "spatie/phpunit-snapshot-assertions": "^4 || ^5", "vimeo/psalm": "^5.4" }, "suggest": { - "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10)." + "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10|^11)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.15-dev" + "dev-master": "3.2-dev" }, "laravel": { "providers": [ @@ -9174,7 +8844,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.15.1" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.2.2" }, "funding": [ { @@ -9186,20 +8856,20 @@ "type": "github" } ], - "time": "2024-02-15T14:23:20+00:00" + "time": "2024-10-29T14:00:16+00:00" }, { "name": "barryvdh/reflection-docblock", - "version": "v2.1.1", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/barryvdh/ReflectionDocBlock.git", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597" + "reference": "c6fad15f7c878be21650c51e1f841bca7e49752e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/e6811e927f0ecc37cc4deaa6627033150343e597", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597", + "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/c6fad15f7c878be21650c51e1f841bca7e49752e", + "reference": "c6fad15f7c878be21650c51e1f841bca7e49752e", "shasum": "" }, "require": { @@ -9236,22 +8906,22 @@ } ], "support": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.1" + "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.3" }, - "time": "2023-06-14T05:06:27+00:00" + "time": "2024-10-23T11:41:03+00:00" }, { "name": "composer/class-map-generator", - "version": "1.1.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "8286a62d243312ed99b3eee20d5005c961adb311" + "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/8286a62d243312ed99b3eee20d5005c961adb311", - "reference": "8286a62d243312ed99b3eee20d5005c961adb311", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", + "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", "shasum": "" }, "require": { @@ -9260,12 +8930,12 @@ "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" }, "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6" }, "type": "library", "extra": { @@ -9295,7 +8965,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.1.1" + "source": "https://github.com/composer/class-map-generator/tree/1.5.0" }, "funding": [ { @@ -9311,34 +8981,42 @@ "type": "tidelift" } ], - "time": "2024-03-15T12:53:41+00:00" + "time": "2024-11-25T16:11:06+00:00" }, { "name": "composer/pcre", - "version": "3.1.4", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "04229f163664973f68f38f6f73d917799168ef24" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", - "reference": "04229f163664973f68f38f6f73d917799168ef24", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -9366,7 +9044,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.4" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -9382,77 +9060,54 @@ "type": "tidelift" } ], - "time": "2024-05-27T13:40:54+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { - "name": "doctrine/instantiator", - "version": "2.0.0", + "name": "doctrine/deprecations", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "ekino/phpstan-banned-code", @@ -9482,13 +9137,13 @@ }, "type": "phpstan-extension", "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, "phpstan": { "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-master": "1.0-dev" } }, "autoload": { @@ -9521,16 +9176,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.23.1", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { @@ -9578,9 +9233,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2024-01-02T13:46:09+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9635,36 +9290,39 @@ }, { "name": "larastan/larastan", - "version": "v2.9.7", + "version": "v2.9.12", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "5c805f636095cc2e0b659e3954775cf8f1dad1bb" + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/5c805f636095cc2e0b659e3954775cf8f1dad1bb", - "reference": "5c805f636095cc2e0b659e3954775cf8f1dad1bb", + "url": "https://api.github.com/repos/larastan/larastan/zipball/19012b39fbe4dede43dbe0c126d9681827a5e908", + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.16", "php": "^8.0.2", "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^1.11.1" + "phpstan/phpstan": "^1.12.11" }, "require-dev": { "doctrine/coding-standard": "^12.0", + "laravel/framework": "^9.52.16 || ^10.28.0 || ^11.16", + "mockery/mockery": "^1.5.1", "nikic/php-parser": "^4.19.1", "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", - "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3", + "orchestra/testbench-core": "^7.33.0 || ^8.13.0 || ^9.0.9", + "phpstan/phpstan-deprecation-rules": "^1.2", "phpunit/phpunit": "^9.6.13 || ^10.5.16" }, "suggest": { @@ -9672,13 +9330,13 @@ }, "type": "phpstan-extension", "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - }, "phpstan": { "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-master": "2.0-dev" } }, "autoload": { @@ -9700,7 +9358,7 @@ "email": "enunomaduro@gmail.com" } ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", "keywords": [ "PHPStan", "code analyse", @@ -9713,27 +9371,15 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.7" + "source": "https://github.com/larastan/larastan/tree/v2.9.12" }, "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, { "url": "https://github.com/canvural", "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2024-05-27T18:33:26+00:00" + "time": "2024-11-26T23:09:02+00:00" }, { "name": "mockery/mockery", @@ -9820,16 +9466,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -9837,11 +9483,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -9867,7 +9514,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -9875,7 +9522,7 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "phar-io/manifest", @@ -10050,23 +9697,23 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.8.2", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -10102,22 +9749,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2024-02-23T11:10:43+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpmyadmin/sql-parser", - "version": "5.9.0", + "version": "5.10.2", "source": { "type": "git", "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "011fa18a4e55591fac6545a821921dd1d61c6984" + "reference": "72afbce7e4b421593b60d2eb7281e37a50734df8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984", - "reference": "011fa18a4e55591fac6545a821921dd1d61c6984", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/72afbce7e4b421593b60d2eb7281e37a50734df8", + "reference": "72afbce7e4b421593b60d2eb7281e37a50734df8", "shasum": "" }, "require": { @@ -10135,8 +9782,7 @@ "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.9.12", "phpstan/phpstan-phpunit": "^1.3.3", - "phpunit/php-code-coverage": "*", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpunit/phpunit": "^8.5 || ^9.6", "psalm/plugin-phpunit": "^0.16.1", "vimeo/psalm": "^4.11", "zumba/json-serializer": "~3.0.2" @@ -10192,34 +9838,34 @@ "type": "other" } ], - "time": "2024-01-20T20:34:02+00:00" + "time": "2024-12-05T15:04:09+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.29.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc" + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc", - "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^5.3.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", "symfony/process": "^5.2" }, "type": "library", @@ -10237,22 +9883,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0" }, - "time": "2024-05-06T12:04:23+00:00" + "time": "2024-10-13T11:29:49+00:00" }, { "name": "phpstan/phpstan", - "version": "1.11.2", + "version": "1.12.12", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "0d5d4294a70deb7547db655c47685d680e39cfec" + "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0d5d4294a70deb7547db655c47685d680e39cfec", - "reference": "0d5d4294a70deb7547db655c47685d680e39cfec", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", + "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", "shasum": "" }, "require": { @@ -10297,39 +9943,39 @@ "type": "github" } ], - "time": "2024-05-24T13:23:04+00:00" + "time": "2024-11-28T22:13:23+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "11.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f7f08030e8811582cc459871d28d6f5a1a4d35ca", + "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "nikic/php-parser": "^5.3.1", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.4.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10338,7 +9984,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -10367,7 +10013,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.7" }, "funding": [ { @@ -10375,32 +10021,32 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-10-09T06:21:38+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10427,7 +10073,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" }, "funding": [ { @@ -10435,28 +10082,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2024-08-27T05:02:59+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -10464,7 +10111,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10490,7 +10137,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" }, "funding": [ { @@ -10498,32 +10146,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2024-07-03T05:07:44+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10549,7 +10197,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, "funding": [ { @@ -10557,32 +10206,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2024-07-03T05:08:43+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -10608,7 +10257,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" }, "funding": [ { @@ -10616,54 +10266,52 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2024-07-03T05:09:35+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.19", + "version": "11.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" + "reference": "0569902506a6c0878930b87ea79ec3b50ea563f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0569902506a6c0878930b87ea79ec3b50ea563f7", + "reference": "0569902506a6c0878930b87ea79ec3b50ea563f7", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" + "myclabs/deep-copy": "^1.12.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.7", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.1", + "sebastian/comparator": "^6.2.1", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.0", + "sebastian/exporter": "^6.3.0", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.0", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -10671,7 +10319,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -10703,7 +10351,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.0" }, "funding": [ { @@ -10719,32 +10367,32 @@ "type": "tidelift" } ], - "time": "2024-04-05T04:35:58+00:00" + "time": "2024-12-06T05:57:38+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.2", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10767,7 +10415,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, "funding": [ { @@ -10775,32 +10424,32 @@ "type": "github" } ], - "time": "2024-03-02T06:27:43+00:00" + "time": "2024-07-03T04:41:36+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "6bb7d09d6623567178cf54126afa9c2310114268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6bb7d09d6623567178cf54126afa9c2310114268", + "reference": "6bb7d09d6623567178cf54126afa9c2310114268", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10823,7 +10472,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.1" }, "funding": [ { @@ -10831,32 +10481,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2024-07-03T04:44:28+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10878,7 +10528,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" }, "funding": [ { @@ -10886,34 +10537,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2024-07-03T04:45:54+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "6.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "43d129d6a0f81c78bee378b46688293eb7ea3739" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/43d129d6a0f81c78bee378b46688293eb7ea3739", + "reference": "43d129d6a0f81c78bee378b46688293eb7ea3739", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.2-dev" } }, "autoload": { @@ -10952,7 +10605,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.2.1" }, "funding": [ { @@ -10960,33 +10614,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2024-10-31T05:30:08+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.3", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11009,7 +10663,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, "funding": [ { @@ -11017,33 +10672,33 @@ "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2024-07-03T04:49:50+00:00" }, { "name": "sebastian/diff", - "version": "4.0.6", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3", + "phpunit/phpunit": "^11.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -11075,7 +10730,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -11083,27 +10739,27 @@ "type": "github" } ], - "time": "2024-03-02T06:30:58+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "7.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-posix": "*" @@ -11111,7 +10767,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "7.2-dev" } }, "autoload": { @@ -11130,7 +10786,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -11138,7 +10794,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" }, "funding": [ { @@ -11146,34 +10803,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-07-03T04:54:44+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.6", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -11215,7 +10872,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" }, "funding": [ { @@ -11223,38 +10881,35 @@ "type": "github" } ], - "time": "2024-03-02T06:33:00+00:00" + "time": "2024-12-05T09:17:50+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.7", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11273,13 +10928,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { @@ -11287,33 +10943,33 @@ "type": "github" } ], - "time": "2024-03-02T06:35:11+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -11336,7 +10992,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { @@ -11344,34 +11001,34 @@ "type": "github" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -11393,7 +11050,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" }, "funding": [ { @@ -11401,32 +11059,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11448,7 +11106,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" }, "funding": [ { @@ -11456,32 +11115,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -11511,7 +11170,8 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" }, "funding": [ { @@ -11519,32 +11179,32 @@ "type": "github" } ], - "time": "2023-02-03T06:07:39+00:00" + "time": "2024-07-03T05:10:34+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.4", + "name": "sebastian/type", + "version": "5.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac", + "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -11559,13 +11219,16 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.0" }, "funding": [ { @@ -11573,32 +11236,29 @@ "type": "github" } ], - "time": "2024-03-14T16:00:52+00:00" + "time": "2024-09-17T13:12:04+00:00" }, { - "name": "sebastian/type", - "version": "3.2.1", + "name": "sebastian/version", + "version": "5.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11617,11 +11277,12 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" }, "funding": [ { @@ -11629,60 +11290,59 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2024-10-09T05:16:32+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" }, + "type": "library", "autoload": { "classmap": [ - "src/" + "lib/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/staabm", "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2024-10-20T05:08:20+00:00" }, { "name": "theseer/tokenizer", @@ -11746,7 +11406,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "8.2.*", + "php": "8.3.*", "ext-dom": "*", "ext-iconv": "*", "ext-json": "*", @@ -11754,6 +11414,6 @@ "ext-pdo": "*", "ext-zip": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/sourcecode/apis/contentauthor/config/app.php b/sourcecode/apis/contentauthor/config/app.php index 4d282eafbc..f1df4d5610 100644 --- a/sourcecode/apis/contentauthor/config/app.php +++ b/sourcecode/apis/contentauthor/config/app.php @@ -140,8 +140,6 @@ App\Providers\H5PServiceProvider::class, - Collective\Html\HtmlServiceProvider::class, - Cerpus\QuestionBankClient\Providers\QuestionBankClientServiceProvider::class, Cerpus\ImageServiceClient\Providers\ImageServiceClientServiceProvider::class, @@ -193,8 +191,6 @@ 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, - 'Form' => Collective\Html\FormFacade::class, - 'HTML' => Collective\Html\HtmlFacade::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'QuestionBank' => \Cerpus\QuestionBankClient\QuestionBankClient::class, 'ImageService' => \Cerpus\ImageServiceClient\ImageServiceClient::class, diff --git a/sourcecode/apis/contentauthor/config/database.php b/sourcecode/apis/contentauthor/config/database.php index 2f644b8b91..5de98f3b23 100644 --- a/sourcecode/apis/contentauthor/config/database.php +++ b/sourcecode/apis/contentauthor/config/database.php @@ -4,18 +4,6 @@ return [ - /* - |-------------------------------------------------------------------------- - | PDO Fetch Style - |-------------------------------------------------------------------------- - | - | By default, database results will be returned as instances of the PHP - | stdClass object; however, you may desire to retrieve records in an - | array format for simplicity. Here you can tweak the fetch style. - | - */ - 'fetch' => PDO::FETCH_CLASS, - /* |-------------------------------------------------------------------------- | Default Database Connection Name @@ -51,6 +39,9 @@ 'database' => env('DB_DATABASE', storage_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => true, + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, ], 'mysql' => [ diff --git a/sourcecode/apis/contentauthor/config/h5p.php b/sourcecode/apis/contentauthor/config/h5p.php index 2310cff478..6e5e29a3a9 100644 --- a/sourcecode/apis/contentauthor/config/h5p.php +++ b/sourcecode/apis/contentauthor/config/h5p.php @@ -11,15 +11,17 @@ 'publicPath' => '', 'path' => env("UPLOAD_STORAGE_PATH_H5P", public_path() . '/h5pstorage'), ], + 'audio' => [ + 'adapter' => env('H5P_AUDIO_ADAPTER'), + ], + 'image' => [ + 'adapter' => env('H5P_IMAGE_ADAPTER'), + ], 'video' => [ + 'adapter' => env('H5P_VIDEO_ADAPTER'), 'enable' => env("H5P_VIDEO_STREAM_ENABLED", true), - 'url' => env("H5P_VIDEO_URL"), - 'key' => env("H5P_VIDEO_ADAPTER_KEY"), - 'secret' => env("H5P_VIDEO_ADAPTER_SECRET"), 'deleteVideoSourceAfterConvertToStream' => (bool)env("H5P_VIDEO_ADAPTER_DELETEVIDEO", true), 'pingDelay' => env("H5P_VIDEO_DELAY", 10), - 'accountId' => env("H5P_VIDEO_ACCOUNT_ID"), - 'authUrl' => env("H5P_VIDEO_AUTH_URL"), ], 'singleContentUpgrade' => env('H5P_SINGLE_CONTENT_UPGRADE', true), 'developmentMode' => env('H5P_DEVELOPMENT_MODE', false), @@ -30,15 +32,6 @@ 'crossOriginRegexp' => env('H5P_CROSSORIGIN_REGEXP', '/.+/'), 'overrideDisableSetting' => env("H5P_OVERRIDE_DISABLE_SETTING", false), 'h5pAdapter' => env('H5P_ADAPTER', 'cerpus'), - 'image' => [ - 'url' => env("H5P_IMAGE_URL"), - 'properties' => [ - 'width' => env("H5P_IMAGE_PROPERTIES_WIDTH", 2500), - ] - ], - 'audio' => [ - 'url' => env("H5P_AUDIO_URL"), - ], 'saveFrequency' => env('H5P_SAVE_FREQUENCY', 15), 'include-custom-css' => env("H5P_INCLUDE_CUSTOM_CSS", false), "default-resource-language" => env("H5P_DEFAULT_RESOURCE_LANGUAGE", "eng"), diff --git a/sourcecode/apis/contentauthor/config/ndla-mode.php b/sourcecode/apis/contentauthor/config/ndla-mode.php index 1d3127217b..e035857fd3 100644 --- a/sourcecode/apis/contentauthor/config/ndla-mode.php +++ b/sourcecode/apis/contentauthor/config/ndla-mode.php @@ -31,21 +31,10 @@ 'crossOriginRegexp' => env('NDLA_H5P_CROSSORIGIN_REGEXP', '/.*/'), 'overrideDisableSetting' => env("NDLA_H5P_OVERRIDE_DISABLE_SETTING", false), 'h5pAdapter' => 'ndla', - 'image' => [ - 'url' => env("NDLA_H5P_IMAGE_URL"), - ], - 'audio' => [ - 'url' => env("NDLA_H5P_AUDIO_URL"), - ], 'video' => [ 'enable' => env("NDLA_H5P_VIDEO_STREAM_ENABLED", true), - 'url' => env("NDLA_H5P_VIDEO_URL"), - 'key' => env("NDLA_H5P_VIDEO_ADAPTER_KEY"), - 'secret' => env("NDLA_H5P_VIDEO_ADAPTER_SECRET"), 'deleteVideoSourceAfterConvertToStream' => (bool)env("NDLA_H5P_VIDEO_ADAPTER_DELETEVIDEO", false), 'pingDelay' => env("NDLA_H5P_VIDEO_DELAY", 10), - 'accountId' => env("NDLA_H5P_VIDEO_ACCOUNT_ID"), - 'authUrl' => env("NDLA_H5P_VIDEO_AUTH_URL"), ], 'saveFrequency' => env('NDLA_H5P_SAVE_FREQUENCY', false), ] diff --git a/sourcecode/apis/contentauthor/config/ndla.php b/sourcecode/apis/contentauthor/config/ndla.php index c18dfe740c..388051e042 100644 --- a/sourcecode/apis/contentauthor/config/ndla.php +++ b/sourcecode/apis/contentauthor/config/ndla.php @@ -4,5 +4,25 @@ 'userId' => env('IMPORT_USERID', env('NDLA_IMPORT_USERID', 'fake-import-id')), 'export' => [ 'collaborators' => env('NDLA_EXPORT_COLLABORATORS', ""), - ] + ], + + 'video' => [ + 'url' => env('NDLA_H5P_VIDEO_URL'), + 'key' => env("NDLA_H5P_VIDEO_ADAPTER_KEY"), + 'secret' => env("NDLA_H5P_VIDEO_ADAPTER_SECRET"), + 'accountId' => env("NDLA_H5P_VIDEO_ACCOUNT_ID"), + 'authUrl' => env("NDLA_H5P_VIDEO_AUTH_URL"), + ], + + 'image' => [ + 'url' => env('NDLA_H5P_IMAGE_URL'), + 'properties' => [ + 'width' => env('NDLA_H5P_IMAGE_PROPERTIES_WIDTH', 2500), + ], + ], + + 'audio' => [ + 'url' => env('NDLA_H5P_AUDIO_URL'), + ], + ]; diff --git a/sourcecode/apis/contentauthor/database/migrations/2016_02_25_154000_increase_text_license.php b/sourcecode/apis/contentauthor/database/migrations/2016_02_25_154000_increase_text_license.php index 823e7d951b..6e0f98af63 100644 --- a/sourcecode/apis/contentauthor/database/migrations/2016_02_25_154000_increase_text_license.php +++ b/sourcecode/apis/contentauthor/database/migrations/2016_02_25_154000_increase_text_license.php @@ -7,14 +7,14 @@ class IncreaseTextLicense extends Migration public function up() { Schema::table('h5p_contents', function ($table) { - $table->string('license', 255)->change(); + $table->string('license', 255)->nullable()->change(); }); } public function down() { Schema::table('h5p_contents', function ($table) { - $table->string('license', 7)->change(); + $table->string('license', 7)->nullable()->change(); }); } } diff --git a/sourcecode/apis/contentauthor/database/migrations/2016_04_19_073909_ChangeAdminPassword.php b/sourcecode/apis/contentauthor/database/migrations/2016_04_19_073909_ChangeAdminPassword.php index dacf8e1ed6..cd90ad96e1 100644 --- a/sourcecode/apis/contentauthor/database/migrations/2016_04_19_073909_ChangeAdminPassword.php +++ b/sourcecode/apis/contentauthor/database/migrations/2016_04_19_073909_ChangeAdminPassword.php @@ -11,7 +11,7 @@ class ChangeAdminPassword extends Migration */ public function up() { -// DB::statement('UPDATE administrators SET password="'.$this->createPassword().'" WHERE id=1'); + // DB::statement('UPDATE administrators SET password="'.$this->createPassword().'" WHERE id=1'); } /** diff --git a/sourcecode/apis/contentauthor/database/migrations/2019_07_19_062140_add_support_for_three_letter_language_codes.php b/sourcecode/apis/contentauthor/database/migrations/2019_07_19_062140_add_support_for_three_letter_language_codes.php index 0b001752ab..6c32b66f93 100644 --- a/sourcecode/apis/contentauthor/database/migrations/2019_07_19_062140_add_support_for_three_letter_language_codes.php +++ b/sourcecode/apis/contentauthor/database/migrations/2019_07_19_062140_add_support_for_three_letter_language_codes.php @@ -18,7 +18,7 @@ public function up() }); Schema::table('ndla_id_mappers', function (Blueprint $table) { - $table->string('language_code', 3)->change(); + $table->string('language_code', 3)->nullable()->default(null)->change(); }); } @@ -34,7 +34,7 @@ public function down() }); Schema::table('ndla_id_mappers', function (Blueprint $table) { - $table->string('language_code', 2)->change(); + $table->string('language_code', 2)->nullable()->default(null)->change(); }); } } diff --git a/sourcecode/apis/contentauthor/database/migrations/2020_12_07_133958_set_admin_password.php b/sourcecode/apis/contentauthor/database/migrations/2020_12_07_133958_set_admin_password.php index ab00e152e4..60980a12e5 100644 --- a/sourcecode/apis/contentauthor/database/migrations/2020_12_07_133958_set_admin_password.php +++ b/sourcecode/apis/contentauthor/database/migrations/2020_12_07_133958_set_admin_password.php @@ -11,7 +11,7 @@ class SetAdminPassword extends Migration */ public function up() { -// DB::statement('UPDATE administrators SET password="'.$this->createPassword().'" WHERE username="admin"'); + // DB::statement('UPDATE administrators SET password="'.$this->createPassword().'" WHERE username="admin"'); } /** diff --git a/sourcecode/apis/contentauthor/phpstan-baseline.neon b/sourcecode/apis/contentauthor/phpstan-baseline.neon index 06d5dc7b4d..37c0c4ab75 100644 --- a/sourcecode/apis/contentauthor/phpstan-baseline.neon +++ b/sourcecode/apis/contentauthor/phpstan-baseline.neon @@ -30,21 +30,6 @@ parameters: count: 2 path: app/Content.php - - - message: "#^Right side of && is always true\\.$#" - count: 1 - path: app/Content.php - - - - message: "#^Ternary operator condition is always true\\.$#" - count: 1 - path: app/Content.php - - - - message: "#^Unreachable statement \\- code above always terminates\\.$#" - count: 1 - path: app/Content.php - - message: "#^Access to an undefined property App\\\\Events\\\\ArticleWasCopied\\:\\:\\$article\\.$#" count: 1 @@ -85,11 +70,6 @@ parameters: count: 1 path: app/H5PCollaborator.php - - - message: "#^Call to function is_null\\(\\) with App\\\\H5PContentsMetadata will always evaluate to false\\.$#" - count: 1 - path: app/H5PContent.php - - message: "#^Called 'Model\\:\\:make\\(\\)' which performs unnecessary work, use 'new Model\\(\\)'\\.$#" count: 2 @@ -100,26 +80,11 @@ parameters: count: 1 path: app/H5PContent.php - - - message: "#^Call to function is_null\\(\\) with League\\\\Fractal\\\\Manager will always evaluate to false\\.$#" - count: 1 - path: app/Http/Controllers/API/LinkInfoController.php - - message: "#^Method App\\\\Http\\\\Controllers\\\\API\\\\LinkInfoController\\:\\:buildResourceResponse\\(\\) should return Illuminate\\\\Http\\\\Response but returns Illuminate\\\\Http\\\\JsonResponse\\.$#" count: 1 path: app/Http/Controllers/API/LinkInfoController.php - - - message: "#^Left side of && is always true\\.$#" - count: 1 - path: app/Http/Controllers/API/LockStatusController.php - - - - message: "#^Call to function is_null\\(\\) with League\\\\Fractal\\\\Manager will always evaluate to false\\.$#" - count: 1 - path: app/Http/Controllers/API/QuestionsetController.php - - message: "#^Method App\\\\Http\\\\Controllers\\\\API\\\\QuestionsetController\\:\\:buildResourceResponse\\(\\) should return Illuminate\\\\Http\\\\Response but returns Illuminate\\\\Http\\\\JsonResponse\\.$#" count: 1 @@ -170,11 +135,6 @@ parameters: count: 1 path: app/Http/Controllers/Admin/ImportExportSettingsController.php - - - message: "#^Expression on left side of \\?\\? is not nullable\\.$#" - count: 1 - path: app/Http/Controllers/Admin/LocksController.php - - message: "#^Function collect invoked with 2 parameters, 0\\-1 required\\.$#" count: 1 @@ -205,26 +165,6 @@ parameters: count: 1 path: app/Http/Controllers/H5PController.php - - - message: "#^Variable \\$library in empty\\(\\) always exists and is not falsy\\.$#" - count: 1 - path: app/Http/Controllers/H5PController.php - - - - message: "#^Negated boolean expression is always false\\.$#" - count: 1 - path: app/Http/Controllers/HealthController.php - - - - message: "#^Call to function is_null\\(\\) with string will always evaluate to false\\.$#" - count: 1 - path: app/Http/Controllers/LinkController.php - - - - message: "#^Call to function is_null\\(\\) with League\\\\Fractal\\\\Manager will always evaluate to false\\.$#" - count: 1 - path: app/Http/Controllers/QuestionSetController.php - - message: "#^Method App\\\\Http\\\\Controllers\\\\QuestionSetController\\:\\:buildResourceResponse\\(\\) should return Illuminate\\\\Http\\\\Response but returns Illuminate\\\\Http\\\\JsonResponse\\.$#" count: 1 @@ -275,31 +215,11 @@ parameters: count: 1 path: app/Http/Requests/H5PStorageRequest.php - - - message: "#^Call to function is_null\\(\\) with App\\\\H5PFile will always evaluate to false\\.$#" - count: 1 - path: app/Jobs/H5PFileUpload.php - - - - message: "#^Property App\\\\Jobs\\\\H5PFileUpload\\:\\:\\$filesystem \\(Illuminate\\\\Filesystem\\\\Filesystem\\) does not accept Illuminate\\\\Filesystem\\\\FilesystemAdapter\\.$#" - count: 1 - path: app/Jobs/H5PFileUpload.php - - - - message: "#^Property App\\\\Jobs\\\\H5PFilesUpload\\:\\:\\$filesystem \\(Illuminate\\\\Filesystem\\\\Filesystem\\) does not accept Illuminate\\\\Filesystem\\\\FilesystemAdapter\\.$#" - count: 2 - path: app/Jobs/H5PFilesUpload.php - - message: "#^Method App\\\\Libraries\\\\DataObjects\\\\Attribution\\:\\:getOrigin\\(\\) should return null but returns string\\.$#" count: 1 path: app/Libraries/DataObjects/Attribution.php - - - message: "#^Call to function is_null\\(\\) with League\\\\Fractal\\\\Manager will always evaluate to false\\.$#" - count: 1 - path: app/Libraries/Games/GameBase.php - - message: "#^Method App\\\\Libraries\\\\Games\\\\GameBase\\:\\:buildResourceResponse\\(\\) should return Illuminate\\\\Http\\\\Response but returns Illuminate\\\\Http\\\\JsonResponse\\.$#" count: 1 @@ -315,11 +235,6 @@ parameters: count: 1 path: app/Libraries/H5P/Adapters/NDLAH5PAdapter.php - - - message: "#^Call to an undefined method App\\\\Libraries\\\\H5P\\\\Interfaces\\\\H5PImageAdapterInterface\\:\\:isTargetType\\(\\)\\.$#" - count: 1 - path: app/Libraries/H5P/Adapters/NDLAH5PAdapter.php - - message: "#^Access to an undefined property App\\\\H5PLibrary\\:\\:\\$majorVersion\\.$#" count: 1 @@ -340,11 +255,6 @@ parameters: count: 1 path: app/Libraries/H5P/AdminConfig.php - - - message: "#^Call to function is_string\\(\\) with array will always evaluate to false\\.$#" - count: 2 - path: app/Libraries/H5P/AjaxRequest.php - - message: "#^Cannot access property \\$css on array\\.$#" count: 2 @@ -395,11 +305,6 @@ parameters: count: 1 path: app/Libraries/H5P/EditorStorage.php - - - message: "#^Strict comparison using \\=\\=\\= between int and '1' will always evaluate to false\\.$#" - count: 2 - path: app/Libraries/H5P/EditorStorage.php - - message: "#^Access to an undefined property App\\\\H5PLibrary\\:\\:\\$count\\.$#" count: 1 @@ -471,16 +376,6 @@ parameters: count: 1 path: app/Libraries/H5P/Framework.php - - - message: "#^Left side of && is always true\\.$#" - count: 1 - path: app/Libraries/H5P/H5PCopyright.php - - - - message: "#^Ternary operator condition is always true\\.$#" - count: 1 - path: app/Libraries/H5P/H5PCopyright.php - - message: "#^Method Illuminate\\\\Support\\\\Collection\\<\\(int\\|string\\),mixed\\>\\:\\:put\\(\\) invoked with 1 parameter, 2 required\\.$#" count: 1 @@ -576,11 +471,6 @@ parameters: count: 1 path: app/Libraries/H5P/Packages/CoursePresentation.php - - - message: "#^Call to function is_null\\(\\) with App\\\\Libraries\\\\H5P\\\\Interfaces\\\\PackageInterface will always evaluate to false\\.$#" - count: 1 - path: app/Libraries/H5P/Packages/CoursePresentation.php - - message: "#^Offset 'package' on array\\{package\\: App\\\\Libraries\\\\H5P\\\\Interfaces\\\\PackageInterface, index\\: \\(int\\|string\\)\\} on left side of \\?\\? always exists and is not nullable\\.$#" count: 1 @@ -641,11 +531,6 @@ parameters: count: 1 path: app/Libraries/H5P/Storage/H5PCerpusStorage.php - - - message: "#^Strict comparison using \\=\\=\\= between string and null will always evaluate to false\\.$#" - count: 1 - path: app/Libraries/H5P/Storage/H5PCerpusStorage.php - - message: "#^Variable \\$filePath might not be defined\\.$#" count: 1 diff --git a/sourcecode/apis/contentauthor/phpstan.neon.dist b/sourcecode/apis/contentauthor/phpstan.neon.dist index 854e8aa194..aeba4737ca 100644 --- a/sourcecode/apis/contentauthor/phpstan.neon.dist +++ b/sourcecode/apis/contentauthor/phpstan.neon.dist @@ -14,6 +14,7 @@ parameters: - resources/lang - routes - tests + treatPhpDocTypesAsCertain: false stubFiles: - stubs/h5p-core/H5PCore.stub - stubs/h5p-core/H5PExport.stub diff --git a/sourcecode/apis/contentauthor/phpunit.xml b/sourcecode/apis/contentauthor/phpunit.xml index 5b17488afa..fe9df275f6 100644 --- a/sourcecode/apis/contentauthor/phpunit.xml +++ b/sourcecode/apis/contentauthor/phpunit.xml @@ -1,33 +1,23 @@ - + displayDetailsOnPhpunitDeprecations="true" + cacheDirectory=".phpunit.cache"> + - app + app - + + - - ./tests/ - - ./tests/Integration + ./tests/Integration - ./tests/Unit + ./tests/Unit @@ -56,5 +46,8 @@ + + + diff --git a/sourcecode/apis/contentauthor/public/js/videos/streamps.js b/sourcecode/apis/contentauthor/public/js/videos/streamps.js deleted file mode 100644 index 071e249def..0000000000 --- a/sourcecode/apis/contentauthor/public/js/videos/streamps.js +++ /dev/null @@ -1,289 +0,0 @@ -/** @namespace H5P */ -H5P.VideoStreamps = (function ($) { - - function Streamps(sources, options, l10n) { - var self = this; - - var player; - - var videoId = getId(sources[0].path); - var id = 'h5p-streamps-' + videoId; - - var $wrapper = $('
'); - var placeholderUrl = [sources[0].path]; - if (!options || options.controls === false) { - placeholderUrl.push('&hidecontrolbar=1') - } - var $placeholder = $('').appendTo($wrapper); - - var create = function () { - if (!$placeholder.is(':visible') || player !== undefined) { - return; - } - - if (typeof StreampsPlayer === "undefined") { - loadAPI(create); - return; - } - - var width = $wrapper.width(); - if (width < 200) { - width = 200; - } - - player = new StreampsPlayer(id); - player.events = { - play: function() { - self.trigger('stateChange', H5P.Video.PLAYING); - }, - pause: function() { - self.trigger('stateChange', H5P.Video.PAUSED); - }, - end: function() { - self.trigger('stateChange', H5P.Video.ENDED); - }, - ready: function() { - self.trigger('ready'); - self.trigger('loaded'); - } - } - } - - self.appendTo = function ($container) { - $container.addClass('h5p-streamps').append($wrapper); - create(); - }; - - /** -          * Start the video. -          * -          * @public -          */ - self.play = function () { - if (!player || !player.controls.play) { - self.on('ready', self.play); - return; - } - player.controls.play(); - }; - - - /** -          * Pause the video. -          * -          * @public -          */ - self.pause = function () { - self.off('ready', self.play); - if (!player || !player.controls.pause) { - return; - } - player.controls.pause(); - }; - - /** -          * Seek video to given time. -          * -          * @public -          * @param {Number} time -          */ - self.seek = function (time) { - if (!player || !player.controls.seek) { - return; - } - player.controls.seek(parseInt(time)); - }; - - /** - * Get elapsed time since video beginning. - * - * @public - * @returns {Number} - */ - self.getCurrentTime = function () { - if (!player || !player.getPlayerOffsetFloat) { - return; - } - return player.getPlayerOffsetFloat(); - }; - - self.pressToPlay = navigator.userAgent.match(/iPad/i) ? true : false; - - /** - * Get total video duration time. - * - * @public - * @returns {Number} - */ - self.getDuration = function () { - if (!player || !player.getVideoDuration) { - return; - } - - return player.getVideoDuration() || 0; - }; - - - /** - * Get percentage of video that is buffered. - * - * @public - * @returns {Number} Between 0 and 100 - */ - self.getBuffered = function () { - if (!player || !player.getBufferedOffset) { - return; - } - var buffered = player.getBufferedOffset() / self.getDuration() * 100; - return buffered <= 100 ? buffered : 100; - }; - - /** - * Turn off video sound. - * - * @public - */ - self.mute = function () { - if (!player || !player.controls.mute) { - return; - } - - player.controls.mute(); - }; - - /** - * Turn on video sound. - * - * @public - */ - self.unMute = function () { - if (!player || !player.controls.unmute) { - return; - } - - player.controls.unmute(); - }; - - /** - * Check if video sound is turned on or off. - * - * @public - * @returns {Boolean} - */ - self.isMuted = function () { - if (!player || !player.isMuted) { - return; - } - - return player.isMuted(); - }; - - /** - * Return the video sound level. - * - * @public - * @returns {Number} Between 0 and 100. - */ - self.getVolume = function () { - if (!player || !player.getVolume) { - return; - } - - return player.getVolume(); - }; - - /** - * Set video sound level. - * - * @public - * @param {Number} level Between 0 and 100. - */ - self.setVolume = function (level) { - if (!player || !player.controls.volume) { - return; - } - - player.controls.volume(level); - }; - - // Respond to resize events by setting the YT player size. - self.on('resize', function () { - if (!$wrapper.is(':visible')) { - return; - } - - if (!player) { - // Player isn't created yet. Try again. - create(); - return; - } - - // Use as much space as possible - $wrapper.css({ - width: '100%', - height: '100%' - }); - - var width = $wrapper[0].clientWidth; - var height = options.fit ? $wrapper[0].clientHeight : (width * (9 / 16)); - - // Set size - $wrapper.css({ - width: width + 'px', - height: height + 'px' - }); - - $placeholder.attr({ - width: width, - height: height - }); - }); - } - - Streamps.canPlay = function (sources) { - return sources[0].mime === 'video/Streamps' && getId(sources[0].path) !== null; - } - - /** - * Load the IFrame Player API asynchronously. - */ - var loadAPI = function (loaded) { - if (typeof SDKLoaded !== "undefined") { - // Someone else is loading, hook in - var original = SDKLoaded; - SDKLoaded = function () { - loaded(); - original(); - }; - } - else { - // Load the API our self - var tag = document.createElement('script'); - tag.src = "https://videoapi.streamps.net/playerSdk/v1/sdk.js"; - var firstScriptTag = document.getElementsByTagName('script')[0]; - firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); - Streamps.loaderInterval = setInterval(function () { - if (typeof StreampsPlayer !== "undefined") { - clearInterval(Streamps.loaderInterval); - SDKLoaded(Streamps.id); - } - }, 50); - SDKLoaded = loaded; - } - }; - - var SDKLoaded; - - var getId = function (url) { - var matches = url.match(/(?:[^\/]+\/video\/[^\/]+\/)([A-Za-z0-9_-]+)\?appid=[^&]+&signexpiry=[^&]+&signature=[^&]+/i); - if (matches && matches[1]) { - return matches[1]; - } - } - - return Streamps; -})(H5P.jQuery); - -// Register video handler -H5P.videoHandlers = H5P.videoHandlers || []; -H5P.videoHandlers.push(H5P.VideoStreamps); diff --git a/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-audio.js b/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-audio.js new file mode 100644 index 0000000000..7f67312539 --- /dev/null +++ b/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-audio.js @@ -0,0 +1,4 @@ +import { AudioBrowser } from '../js/ndla.js'; + +window.originalAudioWidget = window.H5PEditor.widgets.audio; +window.H5PEditor.widgets.audio = AudioBrowser; diff --git a/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-contentbrowser.js b/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-contentbrowser.js deleted file mode 100644 index 41be58b282..0000000000 --- a/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-contentbrowser.js +++ /dev/null @@ -1 +0,0 @@ -import '../../../public/js/h5p/ndla-contentbrowser'; diff --git a/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-image.js b/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-image.js new file mode 100644 index 0000000000..4816e44cc1 --- /dev/null +++ b/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-image.js @@ -0,0 +1,4 @@ +import { ImageBrowser } from '../js/ndla.js'; + +window.originalImageWidget = window.H5PEditor.widgets.image; +window.H5PEditor.widgets.image = ImageBrowser; diff --git a/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-video.js b/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-video.js new file mode 100644 index 0000000000..fb57b634e9 --- /dev/null +++ b/sourcecode/apis/contentauthor/resources/assets/entrypoints/ndla-video.js @@ -0,0 +1,4 @@ +import { VideoBrowser } from '../js/ndla.js'; + +window.originalVideoWidget = window.H5PEditor.widgets.video; +window.H5PEditor.widgets.video = VideoBrowser; diff --git a/sourcecode/apis/contentauthor/resources/assets/entrypoints/react-contentbrowser.js b/sourcecode/apis/contentauthor/resources/assets/entrypoints/react-contentbrowser.js deleted file mode 100644 index d7d44a1c9f..0000000000 --- a/sourcecode/apis/contentauthor/resources/assets/entrypoints/react-contentbrowser.js +++ /dev/null @@ -1 +0,0 @@ -import '../react/contentBrowser'; diff --git a/sourcecode/apis/contentauthor/public/js/h5p/ndla-contentbrowser.js b/sourcecode/apis/contentauthor/resources/assets/js/ndla.js similarity index 96% rename from sourcecode/apis/contentauthor/public/js/h5p/ndla-contentbrowser.js rename to sourcecode/apis/contentauthor/resources/assets/js/ndla.js index 8621184665..f2d4060b4a 100644 --- a/sourcecode/apis/contentauthor/public/js/h5p/ndla-contentbrowser.js +++ b/sourcecode/apis/contentauthor/resources/assets/js/ndla.js @@ -1,11 +1,10 @@ +import { initAudioBrowser, initImageBrowser, initVideoBrowser } from '../react/contentBrowser'; import { getLicenseByNBTitle } from '@ndla/licenses'; -const $ = H5P.jQuery; +const $ = window.H5P.jQuery; /** * Content browser editor widget module. - * - * @param {jQuery} $ */ class ContentBrowserBase { @@ -219,7 +218,7 @@ class AudioBrowser extends ContentBrowserBase { constructor(parent, field, params, setValue) { super(parent, field, params); this.cbContent = params && params[0] && params[0].externalId; - this.widget = new originalAudioWidget(parent, field, this.params, this.setValue(setValue)); + this.widget = new window.originalAudioWidget(parent, field, this.params, this.setValue(setValue)); originalAudioWidget.providers = originalAudioWidget.providers.concat(this.providers); this.changes = this.widget.changes; } @@ -298,7 +297,7 @@ class AudioBrowser extends ContentBrowserBase { init() { const promise = this.syncLicense(); - parent.initAudioBrowser(this.cbContainer.get(0), { + initAudioBrowser(this.cbContainer.get(0), { onSelectCallback: values => { promise.finally(() => { this.setCopyright(values); @@ -319,7 +318,7 @@ class ImageBrowser extends ContentBrowserBase { constructor(parent, field, params, setValue) { super(parent, field, params); this.cbContent = params && params.externalId; - this.widget = new originalImageWidget(parent, field, params, this.setValue(setValue)); + this.widget = new window.originalImageWidget(parent, field, params, this.setValue(setValue)); this.changes = this.widget.changes; } @@ -450,7 +449,7 @@ class ImageBrowser extends ContentBrowserBase { init() { const promise = this.syncLicense(); - parent.initImageBrowser(this.cbContainer.get(0), { + initImageBrowser(this.cbContainer.get(0), { onSelectCallback: values => { promise.finally(() => { this.copyrightHandler.reset(); @@ -482,7 +481,7 @@ class VideoBrowser extends ContentBrowserBase { constructor(parent, field, params, setValue) { super(parent, field, params); this.cbContent = params && params[0] && params[0].mime === 'video/Brightcove'; - this.widget = new originalVideoWidget(parent, field, params, this.setValue(setValue)); + this.widget = new window.originalVideoWidget(parent, field, params, this.setValue(setValue)); originalVideoWidget.providers = originalVideoWidget.providers.concat(this.providers); this.changes = this.widget.changes; } @@ -569,7 +568,7 @@ class VideoBrowser extends ContentBrowserBase { init() { const promise = this.syncLicense(); - parent.initVideoBrowser(this.cbContainer.get(0), { + initVideoBrowser(this.cbContainer.get(0), { onSelectCallback: values => { promise.finally(() => { this.copyrightHandler.reset(); @@ -737,9 +736,8 @@ class CopyrightDataObject { authors = []; } -const originalAudioWidget = H5PEditor.widgets.audio; -const originalImageWidget = H5PEditor.widgets.image; -const originalVideoWidget = H5PEditor.widgets.video; -H5PEditor.widgets.audio = AudioBrowser; -H5PEditor.widgets.video = VideoBrowser; -H5PEditor.widgets.image = ImageBrowser; +export { + AudioBrowser, + ImageBrowser, + VideoBrowser, +}; diff --git a/sourcecode/apis/contentauthor/resources/assets/react/contentBrowser.js b/sourcecode/apis/contentauthor/resources/assets/react/contentBrowser.js index f3d9d74415..de43f7aef3 100644 --- a/sourcecode/apis/contentauthor/resources/assets/react/contentBrowser.js +++ b/sourcecode/apis/contentauthor/resources/assets/react/contentBrowser.js @@ -83,6 +83,8 @@ function initAudioBrowser(element, settings) { })(); } -window.initImageBrowser = initImageBrowser; -window.initVideoBrowser = initVideoBrowser; -window.initAudioBrowser = initAudioBrowser; +export { + initAudioBrowser, + initImageBrowser, + initVideoBrowser, +}; diff --git a/sourcecode/apis/contentauthor/resources/lang/de/link.php b/sourcecode/apis/contentauthor/resources/lang/de/link.php deleted file mode 100644 index b3d9bbc7f3..0000000000 --- a/sourcecode/apis/contentauthor/resources/lang/de/link.php +++ /dev/null @@ -1 +0,0 @@ - "Create link", - "edit-link" => "Edit link", - "header" => "Use files from the web", -]; diff --git a/sourcecode/apis/contentauthor/resources/lang/ko/link.php b/sourcecode/apis/contentauthor/resources/lang/ko/link.php deleted file mode 100644 index b687d0cdbd..0000000000 --- a/sourcecode/apis/contentauthor/resources/lang/ko/link.php +++ /dev/null @@ -1,7 +0,0 @@ - "링크 만들기", - "edit-link" => "링크 편집", - "header" => "웹에서의 파일 사용하기", -]; diff --git a/sourcecode/apis/contentauthor/resources/lang/nb/link.php b/sourcecode/apis/contentauthor/resources/lang/nb/link.php deleted file mode 100644 index b4c3408b49..0000000000 --- a/sourcecode/apis/contentauthor/resources/lang/nb/link.php +++ /dev/null @@ -1,7 +0,0 @@ - "Opprett lenke", - "edit-link" => "Redigere lenke", - "header" => "Bruk filer fra internett", -]; diff --git a/sourcecode/apis/contentauthor/resources/lang/nn/link.php b/sourcecode/apis/contentauthor/resources/lang/nn/link.php deleted file mode 100644 index 5d7acd71e4..0000000000 --- a/sourcecode/apis/contentauthor/resources/lang/nn/link.php +++ /dev/null @@ -1,6 +0,0 @@ - "Opprett ei lenkje", - 'edit-link' => "Rediger lenkje", - 'header' => "Anvend filar frå Internett", -]; diff --git a/sourcecode/apis/contentauthor/resources/lang/sv/link.php b/sourcecode/apis/contentauthor/resources/lang/sv/link.php deleted file mode 100644 index d0bd5d68a8..0000000000 --- a/sourcecode/apis/contentauthor/resources/lang/sv/link.php +++ /dev/null @@ -1,7 +0,0 @@ - "Skapa länk", - "edit-link" => "Redigera länk", - "header" => "Använd filer från webben", -]; diff --git a/sourcecode/apis/contentauthor/resources/views/admin/libraries.blade.php b/sourcecode/apis/contentauthor/resources/views/admin/libraries.blade.php index ac4027d59f..30a6cf5404 100644 --- a/sourcecode/apis/contentauthor/resources/views/admin/libraries.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/admin/libraries.blade.php @@ -40,7 +40,11 @@ {{ $library['title'] }} {{ $library['numContent'] }} {{ $library['numLibraryDependencies'] }} - {!! !empty($library['upgradeUrl']) ? HTML::link($library['upgradeUrl'], '', ['class'=>"fa fa-rocket"]) : '' !!} + + @if (!empty($library['upgradeUrl'])) + + @endif + @if ($library['numLibraryDependencies'] < 1 && $library['numContent'] < 1) diff --git a/sourcecode/apis/contentauthor/resources/views/games/millionaire/show.blade.php b/sourcecode/apis/contentauthor/resources/views/games/millionaire/show.blade.php index 577a763db0..8185e4ae72 100644 --- a/sourcecode/apis/contentauthor/resources/views/games/millionaire/show.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/games/millionaire/show.blade.php @@ -20,6 +20,16 @@ @foreach( $scripts as $js) diff --git a/sourcecode/apis/contentauthor/resources/views/h5p/create.blade.php b/sourcecode/apis/contentauthor/resources/views/h5p/create.blade.php index c78ec69557..b042b0208a 100755 --- a/sourcecode/apis/contentauthor/resources/views/h5p/create.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/h5p/create.blade.php @@ -6,7 +6,7 @@ window.CKEDITOR_BASEPATH = '/js/ckeditor/'; @foreach( $configJs as $js) - {!! HTML::script($js) !!} + @endforeach @endpush @push('js') @@ -14,14 +14,14 @@ {!! $config !!} @foreach( $jsScript as $js) - {!! HTML::script($js) !!} + @endforeach @endpush @push('css') @if(isset($styles)) @foreach( $styles as $css) - {!! HTML::style($css) !!} + @endforeach @endif @endpush diff --git a/sourcecode/apis/contentauthor/resources/views/h5p/edit.blade.php b/sourcecode/apis/contentauthor/resources/views/h5p/edit.blade.php index 04e5b558c8..54bc176021 100644 --- a/sourcecode/apis/contentauthor/resources/views/h5p/edit.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/h5p/edit.blade.php @@ -5,7 +5,7 @@ window.CKEDITOR_BASEPATH = '/js/ckeditor/'; @foreach( $configJs as $js) - {!! HTML::script($js) !!} + @endforeach @endpush @@ -15,14 +15,14 @@ {!! $config !!} {!! $adminConfig !!} @foreach( $jsScript as $js) - {!! HTML::script($js) !!} + @endforeach @endpush @push('css') @if(isset($styles)) @foreach( $styles as $css) - {!! HTML::style($css) !!} + @endforeach @endif @endpush diff --git a/sourcecode/apis/contentauthor/resources/views/h5p/show.blade.php b/sourcecode/apis/contentauthor/resources/views/h5p/show.blade.php index 78868cd6f8..e3c74fa1e3 100644 --- a/sourcecode/apis/contentauthor/resources/views/h5p/show.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/h5p/show.blade.php @@ -13,7 +13,7 @@ @endif @foreach( $styles as $css) - {!! HTML::style($css) !!} + @endforeach @foreach( $jsScripts as $js) - {!! HTML::script($js) !!} + @endforeach - {!! HTML::script('js/listener.js') !!} + -@endpush - -@push('css') - -@endpush diff --git a/sourcecode/apis/contentauthor/resources/views/link/edit.blade.php b/sourcecode/apis/contentauthor/resources/views/link/edit.blade.php deleted file mode 100644 index f49083364b..0000000000 --- a/sourcecode/apis/contentauthor/resources/views/link/edit.blade.php +++ /dev/null @@ -1,42 +0,0 @@ -@extends('layouts.resource', ['formSurroundsMainContent' => true]) - -@section('title', trans('link.link')) -@section('header', trans('link.header')) -@section('headerInfo', trans('link.edit-link')) - -@section('form_open') - {!! Form::open(['route' => ['link.update', $link->id], 'method' => 'put', 'id' => 'content-form']) !!} - {!! Form::hidden("redirectToken", $redirectToken) !!} -@endsection - -@section("content") - @if (isset($errors) && count($errors) > 0) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -@endsection - -@push("js") - - @include('fragments.js.edit-unlock', ['content' => $link]) -@endpush - -@push('css') - -@endpush diff --git a/sourcecode/apis/contentauthor/resources/views/link/show.blade.php b/sourcecode/apis/contentauthor/resources/views/link/show.blade.php index 6bea9567f3..5be713877a 100644 --- a/sourcecode/apis/contentauthor/resources/views/link/show.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/link/show.blade.php @@ -24,4 +24,4 @@ @else {{$link->link_url }} @endif -@endsection \ No newline at end of file +@endsection diff --git a/sourcecode/apis/contentauthor/routes/admin.php b/sourcecode/apis/contentauthor/routes/admin.php index 7c5afb6473..3ab194296a 100644 --- a/sourcecode/apis/contentauthor/routes/admin.php +++ b/sourcecode/apis/contentauthor/routes/admin.php @@ -1,4 +1,5 @@ name('content-download')->middleware(['adaptermode']); Route::get('content/upgrade/library', [H5PController::class, 'contentUpgradeLibrary'])->name('content-upgrade-library'); @@ -47,10 +48,8 @@ Route::post('/h5p/{id}', [H5PController::class, 'show'])->middleware(['core.behavior-settings:view', 'lti.redirect-to-editor'])->name('h5p.ltishow'); Route::post('/h5p/{id}/edit', [H5PController::class, 'edit'])->middleware(['core.behavior-settings:editor'])->name('h5p.ltiedit'); - Route::resource('/link', LinkController::class, ['except' => ['index', 'destroy']]); - Route::post('/link/create', [LinkController::class, 'create']); + Route::resource('/link', LinkController::class, ['only' => ['show']]); Route::post('/link/{id}', [LinkController::class, 'show'])->middleware(['lti.redirect-to-editor']); - Route::post('/link/{id}/edit', [LinkController::class, 'edit']); Route::resource('/article', ArticleController::class, ['except' => ['index', 'destroy']]); Route::post('/article/create', [ArticleController::class, 'create'])->middleware(['core.behavior-settings:editor']); @@ -72,7 +71,6 @@ // references to these exist in external systems, so these cannot be removed. Route::post('/lti-content/create/article', [ArticleController::class, 'create']); Route::post('/lti-content/create/game', [GameController::class, 'create']); - Route::post('/lti-content/create/link', [LinkController::class, 'create']); Route::post('/lti-content/create/questionset', [QuestionSetController::class, 'create']); Route::post('/lti-content/create/h5p', [H5PController::class, 'create']); Route::post('/lti-content/create', [H5PController::class, 'create']); diff --git a/sourcecode/apis/contentauthor/tests/CreatesApplication.php b/sourcecode/apis/contentauthor/tests/CreatesApplication.php deleted file mode 100644 index 0fa0508a8f..0000000000 --- a/sourcecode/apis/contentauthor/tests/CreatesApplication.php +++ /dev/null @@ -1,24 +0,0 @@ -make(Kernel::class)->bootstrap(); - - Hash::setRounds(4); - - return $app; - } -} diff --git a/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleFileVersionerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleFileVersionerTest.php index e926da367e..5070d247bf 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleFileVersionerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleFileVersionerTest.php @@ -44,16 +44,6 @@ public function setUpOriginal() $this->originalArticle->files()->save($file); } - public function tearDown(): void - { - // Remove directories - $disk = Storage::disk(); - $directories = $disk->directories('/'); - collect($directories)->each(function ($directory) use ($disk) { - $disk->deleteDirectory($directory); - }); - } - public function testSetup() { $this->setUpOriginal(); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleLockTest.php b/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleLockTest.php index 2b955f6be8..1fce269966 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleLockTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleLockTest.php @@ -8,7 +8,9 @@ use App\Events\ArticleWasSaved; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; +use Illuminate\Support\Facades\Event; use Illuminate\Support\Str; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ArticleLockTest extends TestCase @@ -30,12 +32,10 @@ public function testArticleHasLockWhenUserEdits() $this->assertDatabaseHas('content_locks', ['content_id' => $article->id, 'email' => $authEmail, 'name' => $authName]); } - /** - * @test - */ + #[Test] public function LockIsRemovedOnSave() { - $this->expectsEvents(ArticleWasSaved::class); + Event::fake(); $authId = Str::uuid(); $authName = $this->faker->name; @@ -58,11 +58,10 @@ public function LockIsRemovedOnSave() ]); $this->assertDatabaseMissing('content_locks', ['content_id' => $article->id]); + Event::assertDispatched(ArticleWasSaved::class); } - /** - * @test - */ + #[Test] public function CanOnlyHaveOneLock() { $authId = Str::uuid(); @@ -91,7 +90,7 @@ public function CanOnlyHaveOneLock() $this->assertCount(1, ContentLock::all()); } - /** @test */ + #[Test] public function forkArticle_thenSuccess() { $authId = Str::uuid(); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleTest.php b/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleTest.php index 36d9461f80..2d732266d1 100755 --- a/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleTest.php @@ -62,10 +62,8 @@ public function testRendersArticleWithBrokenHtml(): void public function testCreateArticle() { + Event::fake(); $this->withoutMiddleware(VerifyCsrfToken::class); - $this->expectsEvents([ - ArticleWasSaved::class, - ]); $authId = Str::uuid(); $testAdapter = $this->createStub(H5PAdapterInterface::class); @@ -79,7 +77,9 @@ public function testCreateArticle() 'content' => "Content", 'license' => 'PRIVATE', ]); + $this->assertDatabaseHas('articles', ['title' => 'Title', 'content' => 'Content', 'is_published' => 1]); + Event::assertDispatched(ArticleWasSaved::class); } public function testCreateArticleWithMathContent() diff --git a/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleVersioningTest.php b/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleVersioningTest.php index bac10e1c47..bd545666e5 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleVersioningTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Article/ArticleVersioningTest.php @@ -14,6 +14,7 @@ use Illuminate\Http\Response; use Illuminate\Support\Facades\Config; use Illuminate\Support\Str; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class ArticleVersioningTest extends TestCase @@ -123,9 +124,7 @@ public function testVersioningTriggers() $this->assertFalse($originalArticle->requestShouldBecomeNewVersion($request)); } - /** - * @dataProvider provider_testVersioning - */ + #[DataProvider('provider_testVersioning')] public function testVersioning(bool $useLinearVersioning) { Config::set('feature.linear-versioning', $useLinearVersioning); @@ -147,7 +146,9 @@ public function testVersioning(bool $useLinearVersioning) $article->version_id = $version->id; $article->save(); - $article->collaborators()->save(ArticleCollaborator::factory()->create(['email' => $collaborator->email])); + $article->collaborators()->save( + ArticleCollaborator::factory()->make(['email' => $collaborator->email]) + ); $article->fresh(); @@ -252,7 +253,7 @@ public function testVersioning(bool $useLinearVersioning) $this->assertDatabaseCount('content_versions', 4); } - public function provider_testVersioning(): Generator + public static function provider_testVersioning(): Generator { yield 'linear_versioning' => [true]; yield 'non-linear_versioning' => [false]; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Content/ContentTest.php b/sourcecode/apis/contentauthor/tests/Integration/Content/ContentTest.php index c93e7ccb05..c81a2df039 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Content/ContentTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Content/ContentTest.php @@ -9,6 +9,7 @@ use App\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Collection; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ContentTest extends TestCase @@ -20,7 +21,7 @@ public function setUp(): void parent::setUp(); } - /** @test */ + #[Test] public function test_ArticleIsCollaborator() { $user = User::factory()->make(); @@ -41,7 +42,6 @@ public function test_H5PIsCollaborator() { $user = User::factory()->make(); $h5p = H5PContent::factory()->create(['user_id' => $user->auth_id]); - /** @var Collection $collaborators */ $collaborators = H5PCollaborator::factory()->count(3)->make(); $h5p->collaborators()->saveMany($collaborators); $h5p = $h5p->fresh(); diff --git a/sourcecode/apis/contentauthor/tests/Integration/H5PLibrariesHubCacheTest.php b/sourcecode/apis/contentauthor/tests/Integration/H5PLibrariesHubCacheTest.php index d72ec0cc4d..fc0bd0acff 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/H5PLibrariesHubCacheTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/H5PLibrariesHubCacheTest.php @@ -3,13 +3,12 @@ namespace Tests\Integration; use App\H5PLibrariesHubCache; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class H5PLibrariesHubCacheTest extends TestCase { - /** - * @dataProvider provider_LibraryString - */ + #[DataProvider('provider_LibraryString')] public function test_getLibraryString($isFolder, $usePatch, $expected): void { $lib = new H5PLibrariesHubCache([ @@ -22,7 +21,7 @@ public function test_getLibraryString($isFolder, $usePatch, $expected): void $this->assertSame($expected, $lib->getLibraryString($isFolder)); } - public function provider_LibraryString(): \Generator + public static function provider_LibraryString(): \Generator { yield [true, false, 'H5P.Foobar-1.2']; yield [true, true, 'H5P.Foobar-1.2']; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/API/ContentTypeControllerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/API/ContentTypeControllerTest.php index 182f6ce423..a7e7f1acd2 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/API/ContentTypeControllerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/API/ContentTypeControllerTest.php @@ -10,6 +10,7 @@ use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Http\Response; +use PHPUnit\Framework\Attributes\Test; use Tests\Seeds\TestH5PSeeder; use Tests\TestCase; @@ -25,9 +26,7 @@ public function setUp(): void $this->seed(TestH5PSeeder::class); } - /** - * @test - */ + #[Test] public function ContentTypeController_validRequest_thenSuccess() { $authId = $this->faker->uuid; @@ -79,9 +78,7 @@ public function ContentTypeController_validRequest_thenSuccess() ]); } - /** - * @test - */ + #[Test] public function ContentTypeConrollerJSON_invalidData_thenFailure() { $this->postJson("api/v1/contenttypes/questionsets") @@ -97,9 +94,7 @@ public function ContentTypeConrollerJSON_invalidData_thenFailure() ]); } - /** - * @test - */ + #[Test] public function ContentTypeConrollerPOST_invalidData_thenFailure() { $this->post("api/v1/contenttypes/questionsets") diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/API/Handler/ContentTypeHandlerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/API/Handler/ContentTypeHandlerTest.php index 3ef42f1236..9ab2c3dd4e 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/API/Handler/ContentTypeHandlerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/API/Handler/ContentTypeHandlerTest.php @@ -11,6 +11,7 @@ use App\Libraries\H5P\Packages\MultiChoice; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; +use PHPUnit\Framework\Attributes\Test; use Tests\Seeds\TestH5PSeeder; use Tests\TestCase; @@ -26,10 +27,9 @@ public function setUp(): void } /** - * @test - * * Uses a manually created array for values to test older structures */ + #[Test] public function createNewQuestionSetFromArray_validData_thenSuccess() { $handler = new ContentTypeHandler(); @@ -100,10 +100,9 @@ public function createNewQuestionSetFromArray_validData_thenSuccess() } /** - * @test - * * Uses a manually created array for values to test older structures */ + #[Test] public function createNewQuestionSetFromArrayWithUserPublish_validData_thenSuccess() { $testAdapter = $this->createStub(H5PAdapterInterface::class); @@ -181,9 +180,7 @@ public function createNewQuestionSetFromArrayWithUserPublish_validData_thenSucce ]); } - /** - * @test - */ + #[Test] public function createNewQuestionSetFromClient_validData_thenSuccess() { $handler = new ContentTypeHandler(); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/Admin/AdminControllerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/Admin/AdminControllerTest.php index 90abff4189..839ad0763b 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/Admin/AdminControllerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/Admin/AdminControllerTest.php @@ -14,6 +14,7 @@ use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Support\Facades\Storage; use Illuminate\View\View; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class AdminControllerTest extends TestCase @@ -113,7 +114,7 @@ public function test_updateMaxScore(): void ]); } - /** @dataProvider provider_index */ + #[DataProvider('provider_index')] public function test_index(int $lockCount): void { ContentLock::factory($lockCount)->create(); @@ -124,7 +125,7 @@ public function test_index(int $lockCount): void $this->assertEquals($lockCount, $data['editLockCount']); } - public function provider_index(): Generator + public static function provider_index(): Generator { yield [0]; yield [3]; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/Admin/AdminH5PDetailsControllerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/Admin/AdminH5PDetailsControllerTest.php index 17acde76af..2d4dbca705 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/Admin/AdminH5PDetailsControllerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/Admin/AdminH5PDetailsControllerTest.php @@ -10,6 +10,7 @@ use App\Http\Controllers\Admin\AdminH5PDetailsController; use App\Libraries\ContentAuthorStorage; use App\Libraries\H5P\Framework; +use Exception; use Generator; use Illuminate\Auth\GenericUser; use Illuminate\Filesystem\FilesystemAdapter; @@ -21,6 +22,7 @@ use Illuminate\Support\Collection; use Illuminate\Support\Facades\Storage; use Illuminate\View\View; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class AdminH5PDetailsControllerTest extends TestCase @@ -95,11 +97,19 @@ public function test_checkLibrary(): void $framework = $this->createMock(Framework::class); $this->instance(Framework::class, $framework); + $invokedCount = $this->exactly(2); $framework - ->expects($this->exactly(2)) + ->expects($invokedCount) ->method('getMessages') - ->withConsecutive(['info'], ['error']) - ->willReturn([]); + ->willReturnCallback(function ($params) use ($invokedCount) { + match ($invokedCount->numberOfInvocations()) { + 1 => $this->assertSame('info', $params), + 2 => $this->assertSame('error', $params), + default => throw new Exception('Mocked function "getMessages" called too many times'), + }; + + return []; + }); $validator = $this->createMock(\H5PValidator::class); $this->instance(\H5PValidator::class, $validator); @@ -471,9 +481,7 @@ public function test_libraryTranslationUpdate_UnkownCode(): void $this->assertContains('No rows was updated', $data['messages']); } - /** - * @dataProvider provider_libraryTranslationUpdate_File - */ + #[DataProvider('provider_libraryTranslationUpdate_File')] public function test_libraryTranslationUpdate_FileError(string $fileContents, ?string $expectedMessage): void { Storage::fake(); @@ -532,7 +540,7 @@ public function test_libraryTranslationUpdate_FileError(string $fileContents, ?s } } - public function provider_libraryTranslationUpdate_File(): Generator + public static function provider_libraryTranslationUpdate_File(): Generator { yield 'valid file' => ['{"data":"Upload translation"}', null]; yield 'empty file' => ['', 'Content was empty']; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/ArticleControllerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/ArticleControllerTest.php index c1372fb41f..d463657d7d 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/ArticleControllerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/ArticleControllerTest.php @@ -10,6 +10,7 @@ use Cerpus\EdlibResourceKit\Oauth1\SignerInterface; use Faker\Provider\Uuid; use Illuminate\Foundation\Testing\RefreshDatabase; +use Illuminate\Support\Facades\Event; use Illuminate\View\View; use Tests\TestCase; @@ -49,14 +50,11 @@ public function testCreate(): void public function testStore(): void { + Event::fake(); $this->withSession([ 'authId' => Uuid::uuid(), ]); - $this->expectsEvents([ - ArticleWasSaved::class, - ]); - $response = $this->post(route('article.store'), [ 'title' => 'An article', 'content' => 'Something', @@ -78,5 +76,7 @@ public function testStore(): void $response->assertJson([ 'url' => route('article.edit', $article->id), ]); + + Event::assertDispatched(ArticleWasSaved::class); } } diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/H5PControllerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/H5PControllerTest.php index 7f3e1945d3..e97eacbae2 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/H5PControllerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/H5PControllerTest.php @@ -27,6 +27,7 @@ use Illuminate\Support\Str; use Illuminate\View\View; use LogicException; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class H5PControllerTest extends TestCase @@ -34,7 +35,7 @@ class H5PControllerTest extends TestCase use RefreshDatabase; use WithFaker; - /** @dataProvider provider_testCreate */ + #[DataProvider('provider_testCreate')] public function testCreate(string $adapterMode, ?string $contentType): void { $this->session([ @@ -103,16 +104,9 @@ public function testCreate(string $adapterMode, ?string $contentType): void $this->assertNull($state['libraryid']); $this->assertSame('nob', $state['language_iso_639_3']); $this->assertEquals(config('license.default-license'), $state['license']); - - // Adapter specific - if ($adapterMode === 'ndla') { - $this->assertContains('/js/react-contentbrowser.js', $result['configJs']); - } elseif ($adapterMode === 'cerpus') { - $this->assertSame([], $data['configJs']); - } } - public function provider_testCreate(): Generator + public static function provider_testCreate(): Generator { yield 'cerpus-withoutContentType' => ['cerpus', null]; yield 'ndla-withoutContentType' => ['ndla', null]; @@ -120,7 +114,7 @@ public function provider_testCreate(): Generator yield 'ndla-withContentType' => ['ndla', 'H5P.Toolbar 1.2']; } - /** @dataProvider provider_adapterMode */ + #[DataProvider('provider_adapterMode')] public function testEdit(string $adapterMode): void { Session::put('adapterMode', $adapterMode); @@ -214,18 +208,9 @@ public function testEdit(string $adapterMode): void $this->assertNotEmpty($state['parameters']); $this->assertNotEmpty($state['redirectToken']); $this->assertNotEmpty($state['title']); - - // Adapter specific - if ($adapterMode === 'ndla') { - $this->assertContains('/js/react-contentbrowser.js', $result['configJs']); - } elseif ($adapterMode === 'cerpus') { - $this->assertSame([], $data['configJs']); - } } - /** - * @dataProvider invalidRequestsProvider - */ + #[DataProvider('invalidRequestsProvider')] public function testStoreRequiresParameters(array $jsonData, array $errorFields): void { $this @@ -235,9 +220,7 @@ public function testStoreRequiresParameters(array $jsonData, array $errorFields) ->assertJsonValidationErrors($errorFields); } - /** - * @dataProvider invalidRequestsProvider - */ + #[DataProvider('invalidRequestsProvider')] public function testUpdateRequiresParameters(array $jsonData, array $errorFields): void { $content = H5PContent::factory()->create(); @@ -252,7 +235,7 @@ public function testUpdateRequiresParameters(array $jsonData, array $errorFields ->assertJsonValidationErrors($errorFields); } - public function invalidRequestsProvider(): iterable + public static function invalidRequestsProvider(): iterable { yield [[], ['title', 'parameters', 'library']]; yield [[ @@ -265,7 +248,7 @@ public function invalidRequestsProvider(): iterable yield [['language_iso_639_3' => 'eeee'], ['language_iso_639_3']]; } - /** @dataProvider provider_adapterMode */ + #[DataProvider('provider_adapterMode')] public function testShow(string $adapterMode): void { $this->app->singleton(H5PAdapterInterface::class, match ($adapterMode) { @@ -361,38 +344,37 @@ public function testShow(string $adapterMode): void $this->assertStringContainsString('Here be CSS content', Storage::get($assetCss)); $config = json_decode(substr($result['config'], 25, -9), flags: JSON_THROW_ON_ERROR); - $this->assertObjectHasAttribute('baseUrl', $config); - $this->assertObjectHasAttribute('url', $config); + $this->assertObjectHasProperty('baseUrl', $config); + $this->assertObjectHasProperty('url', $config); if (config('h5p.saveFrequency') === false) { - $this->assertObjectNotHasAttribute('user', $config); + $this->assertObjectNotHasProperty('user', $config); } else { - $this->assertObjectHasAttribute('user', $config); + $this->assertObjectHasProperty('user', $config); } - $this->assertObjectHasAttribute('tokens', $config); - $this->assertObjectHasAttribute('siteUrl', $config); - $this->assertObjectHasAttribute('l10n', $config); - $this->assertObjectHasAttribute('loadedJs', $config); - $this->assertObjectHasAttribute('loadedCss', $config); - $this->assertObjectHasAttribute('pluginCacheBuster', $config); - $this->assertObjectHasAttribute('libraryUrl', $config); + $this->assertObjectHasProperty('tokens', $config); + $this->assertObjectHasProperty('siteUrl', $config); + $this->assertObjectHasProperty('l10n', $config); + $this->assertObjectHasProperty('loadedJs', $config); + $this->assertObjectHasProperty('loadedCss', $config); + $this->assertObjectHasProperty('pluginCacheBuster', $config); + $this->assertObjectHasProperty('libraryUrl', $config); $this->assertEquals('/ajax?action=', $config->ajaxPath); $this->assertTrue($config->canGiveScore); $this->assertStringEndsWith("/s/resources/$resourceId", $config->documentUrl); $contents = $config->contents->{"cid-$content->id"}; $this->assertEquals('H5P.Foobar 1.18', $contents->library); - $this->assertObjectHasAttribute('jsonContent', $contents); - $this->assertObjectHasAttribute('exportUrl', $contents); - $this->assertObjectHasAttribute('embedCode', $contents); - $this->assertObjectHasAttribute('resizeCode', $contents); - $this->assertObjectHasAttribute('displayOptions', $contents); - $this->assertObjectHasAttribute('contentUserData', $contents); + $this->assertObjectHasProperty('jsonContent', $contents); + $this->assertObjectHasProperty('exportUrl', $contents); + $this->assertObjectHasProperty('embedCode', $contents); + $this->assertObjectHasProperty('resizeCode', $contents); + $this->assertObjectHasProperty('displayOptions', $contents); + $this->assertObjectHasProperty('contentUserData', $contents); $this->assertStringContainsString("/s/resources/$resourceId", $contents->embedCode); $this->assertStringContainsString('Some resource title', $contents->embedCode); // Adapter specific $this->assertContains('//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS-MML_SVG', $result['jsScripts']); - $this->assertContains('/js/videos/brightcove.js', $result['jsScripts']); if ($adapterMode === "ndla") { $this->assertContains('/js/h5p/wiris/view.js', $result['jsScripts']); @@ -400,12 +382,10 @@ public function testShow(string $adapterMode): void $this->assertContains('/css/ndlah5p-iframe-legacy.css?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $result['styles']); $this->assertContains('/css/ndlah5p-iframe.css?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $result['styles']); - } elseif ($adapterMode === "cerpus") { - $this->assertContains('/js/videos/streamps.js', $result['jsScripts']); } } - public function provider_adapterMode(): Generator + public static function provider_adapterMode(): Generator { yield 'cerpus' => ['cerpus']; yield 'ndla' => ['ndla']; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/LinkControllerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/LinkControllerTest.php index aae86629a6..94f0477cfb 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/LinkControllerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/LinkControllerTest.php @@ -2,14 +2,13 @@ namespace Tests\Integration\Http\Controllers; -use App\Events\LinkWasSaved; -use App\Http\Controllers\LinkController; use App\Http\Libraries\License; use App\Link; -use Faker\Provider\Uuid; +use Cerpus\EdlibResourceKit\Oauth1\CredentialStoreInterface; +use Cerpus\EdlibResourceKit\Oauth1\Request as Oauth1Request; +use Cerpus\EdlibResourceKit\Oauth1\SignerInterface; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; -use Illuminate\Http\Request; use Illuminate\View\View; use Tests\TestCase; @@ -18,28 +17,7 @@ class LinkControllerTest extends TestCase use RefreshDatabase; use WithFaker; - public function testCreate(): void - { - $this->session([ - 'authId' => Uuid::uuid(), - ]); - $request = Request::create('', parameters: [ - 'redirectToken' => 'UniqueToken', - ]); - $linkController = app(LinkController::class); - - $response = $linkController->create($request); - $this->assertNotEmpty($response); - $this->assertInstanceOf(View::class, $response); - - $data = $response->getData(); - - $this->assertCount(10, $data['licenses']); - $this->assertEquals(License::LICENSE_EDLIB, $data['license']); - $this->assertFalse($data['isPublished']); - } - - public function testEdit(): void + public function test_doShow(): void { $userId = $this->faker->uuid; $this->session([ @@ -50,101 +28,26 @@ public function testEdit(): void 'owner_id' => $userId, ]); - $request = Request::create('', parameters: [ + $request = new Oauth1Request('POST', url('/link/' . $link->getId()), [ 'lti_version' => 'LTI-1p0', 'lti_message_type' => 'basic-lti-launch-request', 'resource_link_id' => 'random_link_9364f20a-a9b5-411a-8f60-8a4050f85d91', - 'launch_presentation_return_url' => "https://api.edlib.test/lti/v2/editors/contentauthor/return", 'ext_user_id' => "1", + 'launch_presentation_return_url' => "https://api.edlib.test/lti/v2/editors/contentauthor/return", 'launch_presentation_locale' => "nb", + 'launch_presentation_css_url' => 'my-styles.css', ]); + $request = $this->app->make(SignerInterface::class)->sign( + $request, + $this->app->make(CredentialStoreInterface::class), + ); - $linkController = app(LinkController::class); - $result = $linkController->edit($request, $link->getId()); - - $this->assertNotEmpty($result); - $this->assertInstanceOf(View::class, $result); - $data = $result->getData(); - $this->assertArrayHasKey('licenses', $data); - $this->assertCount(10, $data['licenses']); - $this->assertArrayHasKey('license', $data); - $this->assertEquals(License::LICENSE_BY_NC_ND, $data['license']); - } - - public function testStore(): void - { - $this->withSession([ - 'authId' => Uuid::uuid(), - ]); - - $this->expectsEvents([ - LinkWasSaved::class, - ]); - - $response = $this->post(route('link.store'), [ - 'linkType' => 'external_link', - 'linkUrl' => $this->faker->url, - 'linkText' => 'The link', - 'linkMetadata' => json_encode(['title' => 'Another title']), - 'license' => License::LICENSE_BY_NC, - ]) - ->assertCreated(); - - $this->assertDatabaseHas('links', [ - 'title' => 'Another title', - 'link_text' => 'The link', - 'license' => License::LICENSE_BY_NC, - ]); - - /** @var Link $article */ - $article = Link::where('license', License::LICENSE_BY_NC)->first(); - $response->assertJson([ - 'url' => route('link.edit', $article->id), - ]); - } - - public function testUpdate(): void - { - $userId = $this->faker->uuid; - $this->session([ - 'authId' => $userId, - ]); - - $this->expectsEvents([ - LinkWasSaved::class, - ]); - - $link = Link::factory()->create([ - 'link_type' => 'external_link', - 'link_url' => 'https://nowhere.not', - 'link_text' => 'The link', - 'title' => 'No title', - 'metadata' => json_encode(['title' => 'No title']), - 'license' => License::LICENSE_BY_NC, - 'owner_id' => $userId, - ]); - - $response = $this->call('patch', '/link/' . $link->getId(), [ - 'linkType' => 'external_link', - 'linkUrl' => 'https://somewhere.not', - 'linkText' => 'Different link', - 'linkMetadata' => json_encode(['title' => 'Another title']), - 'license' => License::LICENSE_BY_NC_SA, - ]) + $result = $this->post('link/' . $link->getId(), $request->toArray()) ->assertOk(); - $this->assertDatabaseHas('links', [ - 'title' => 'Another title', - 'link_text' => 'Different link', - 'link_url' => 'https://somewhere.not', - 'license' => License::LICENSE_BY_NC_SA, - ]); - - /** @var Link $newLink */ - $newLink = Link::where('title', 'Another title')->first(); - - $response->assertJson([ - 'url' => route("link.edit", ['link' => $newLink->getId()]), - ]); + $this->assertNotEmpty($result); + $this->assertInstanceOf(View::class, $result->getOriginalContent()); + $data = $result->getOriginalContent()->getData(); + $this->assertSame('my-styles.css', $data['customCSS']); } } diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/QuestionSetControllerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/QuestionSetControllerTest.php index a11abbbc26..ec803e0cf9 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/QuestionSetControllerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Controllers/QuestionSetControllerTest.php @@ -24,6 +24,7 @@ use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Http\Request; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Event; use Illuminate\Support\Str; use Illuminate\View\View; use Symfony\Component\HttpFoundation\Response; @@ -76,9 +77,7 @@ public function testCreateQuestionSet(): void public function testCreatePresentation(): void { - $this->doesntExpectEvents([ - QuestionsetWasSaved::class, - ]); + Event::fake(); $userId = $this->faker->uuid; $gameType = Gametype::factory()->create([ @@ -126,6 +125,7 @@ public function testCreatePresentation(): void $this->assertObjectHasProperty('questionSet', $game->game_settings); $this->assertObjectHasProperty('questions', $game->game_settings->questionSet); $this->assertCount(15, $game->game_settings->questionSet->questions); + Event::assertNotDispatched(QuestionsetWasSaved::class); } public function testEdit(): void @@ -180,7 +180,7 @@ public function testEdit(): void public function testUpdate() { - $this->expectsEvents(QuestionsetWasSaved::class); + Event::fake(); /** @var Collection $questionsets */ $questionsets = QuestionSet::factory()->count(3) @@ -335,11 +335,13 @@ public function testUpdate() 'id' => $answer->id, 'answer_text' => "Updated answer" ]); + + Event::assertDispatched(QuestionsetWasSaved::class); } public function testUpdateWithMath() { - $this->expectsEvents(QuestionsetWasSaved::class); + Event::fake(); /** @var Collection $questionsets */ $questionsets = QuestionSet::factory()->count(3) @@ -500,11 +502,12 @@ public function testUpdateWithMath() 'id' => $answer->id, 'answer_text' => "Updated answer" ]); + Event::assertDispatched(QuestionsetWasSaved::class); } public function testUpdateFullRequest() { - $this->expectsEvents(QuestionsetWasSaved::class); + Event::fake(); $testAdapter = $this->createStub(H5PAdapterInterface::class); $testAdapter->method('isUserPublishEnabled')->willReturn(false); @@ -572,11 +575,12 @@ public function testUpdateFullRequest() "is_published" => 1, 'license' => 'BY', ]); + Event::assertDispatched(QuestionsetWasSaved::class); } public function testUpdateFullRequestWithDraftEnabled() { - $this->expectsEvents(QuestionsetWasSaved::class); + Event::fake(); $testAdapter = $this->createStub(H5PAdapterInterface::class); $testAdapter->method('isUserPublishEnabled')->willReturn(true); @@ -680,5 +684,6 @@ public function testUpdateFullRequestWithDraftEnabled() "is_published" => 0, ]); $this->assertCount(1, QuestionSet::all()); + Event::assertDispatched(QuestionsetWasSaved::class); } } diff --git a/sourcecode/apis/contentauthor/tests/Integration/Http/Libraries/LicenseTest.php b/sourcecode/apis/contentauthor/tests/Integration/Http/Libraries/LicenseTest.php index 8c097c384d..77b821a8f4 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Http/Libraries/LicenseTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Http/Libraries/LicenseTest.php @@ -4,25 +4,26 @@ use App\Http\Libraries\License; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class LicenseTest extends TestCase { use RefreshDatabase; - /** @dataProvider licenseProvider */ + #[DataProvider('licenseProvider')] public function testIsLicenseSupported($data): void { $this->assertSame($data['isSupported'], License::isLicenseSupported($data['license'])); } - /** @dataProvider licenseProvider */ + #[DataProvider('licenseProvider')] public function testIsContentCopyable($data): void { $this->assertSame($data['isCopyable'], License::isContentCopyable($data['license'])); } - public function licenseProvider(): array + public static function licenseProvider(): array { return [ 'PRIVATE' => [[ diff --git a/sourcecode/apis/contentauthor/tests/Integration/Jobs/PingVideoApiTest.php b/sourcecode/apis/contentauthor/tests/Integration/Jobs/PingVideoApiTest.php index 42464a4e84..c074494ef6 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Jobs/PingVideoApiTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Jobs/PingVideoApiTest.php @@ -13,6 +13,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Support\Facades\Storage; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use Tests\Helpers\VersionedH5PTrait; use Tests\Seeds\TestH5PSeeder; @@ -49,9 +50,7 @@ private function createVideo($contentId, $filename): void $this->disk->assertExists($newFile); } - /** - * @test - */ + #[Test] public function adapterNotReady_throwException() { $adapter = $this->createMock(H5PVideoInterface::class); @@ -64,9 +63,7 @@ public function adapterNotReady_throwException() $this->assertFalse($job->handle($adapter)); } - /** - * @test - */ + #[Test] public function adapterReady_noChildren_thensuccess() { $this->seed(TestH5PSeeder::class); @@ -106,7 +103,7 @@ public function adapterReady_noChildren_thensuccess() /** @var H5PContentsVideo $contentVideo */ $contentVideo = $h5pContent->contentVideos()->first(); ContentVersion::factory()->create([ - 'id' =>$h5pContent->version_id, + 'id' => $h5pContent->version_id, 'content_id' => $h5pContent->id, ]); @@ -127,9 +124,7 @@ public function adapterReady_noChildren_thensuccess() $this->disk->assertMissing('content/' . $h5pContent->id . '/' . $videoSource); } - /** - * @test - */ + #[Test] public function adapterReady_noVideo_thenFail() { $streamUrl = 'http://www.stream.url'; @@ -143,9 +138,7 @@ public function adapterReady_noVideo_thenFail() $this->assertFalse($job->handle($adapter)); } - /** - * @test - */ + #[Test] public function adapterReady_oneChild_thenSuccess() { $this->seed(TestH5PSeeder::class); @@ -243,9 +236,7 @@ private function createVideoData(H5PContent $content, $videoSource): H5PContent return $content; } - /** - * @test - */ + #[Test] public function adapterReady_withGrandchildren_thenSuccess() { $this->seed(TestH5PSeeder::class); @@ -343,9 +334,7 @@ public function adapterReady_withGrandchildren_thenSuccess() $this->disk->assertMissing('content/' . $h5pContentGrandchild->id . '/' . $videoSource); } - /** - * @test - */ + #[Test] public function adapterReady_withGrandchildrenAndDifferentSource_thenSuccess() { $this->seed(TestH5PSeeder::class); @@ -444,9 +433,7 @@ public function adapterReady_withGrandchildrenAndDifferentSource_thenSuccess() $this->assertEquals(1, $job->processedChildren); } - /** - * @test - */ + #[Test] public function adapterReady_noVideoFilesInJson_thensuccess() { $this->seed(TestH5PSeeder::class); @@ -495,9 +482,7 @@ public function adapterReady_noVideoFilesInJson_thensuccess() $this->disk->assertMissing('content/' . $h5pContent->id . '/' . $videoSource); } - /** - * @test - */ + #[Test] public function adapterReady_noLocalFiles_thensuccess() { $this->seed(TestH5PSeeder::class); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/Games/GameHandlerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/Games/GameHandlerTest.php new file mode 100644 index 0000000000..2e9b69593f --- /dev/null +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/Games/GameHandlerTest.php @@ -0,0 +1,46 @@ +assertInstanceOf(Millionaire::class, GameHandler::getGameTypeInstance('millionaire')); + $this->assertInstanceOf(Millionaire::class, GameHandler::getGameTypeInstance(Millionaire::$machineName)); + } + + public function testGameTypeInstance_failes(): void + { + $this->expectException(GameTypeNotFoundException::class); + + GameHandler::getGameTypeInstance('unknown'); + } + + public function testGameTypeFromId_success(): void + { + $gt = Gametype::factory()->create([ + 'name' => Millionaire::$machineName, + ]); + + $this->assertInstanceOf(Millionaire::class, GameHandler::makeGameTypeFromId($gt->id)); + } + + public function testGameTypeFromId_fail(): void + { + $this->expectException(GameTypeNotFoundException::class); + + GameHandler::makeGameTypeFromId($this->faker->uuid); + } +} diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/API/H5PImportControllerTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/API/H5PImportControllerTest.php index 2867d183a2..d757e9a82a 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/API/H5PImportControllerTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/API/H5PImportControllerTest.php @@ -28,9 +28,11 @@ function is_uploaded_file($filename) use Illuminate\Http\Testing\File; use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Storage; + use PHPUnit\Framework\Attributes\BackupGlobals; + use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; -use function base_path; + use function base_path; use function fopen; class H5PImportControllerTest extends TestCase @@ -66,10 +68,8 @@ private function setupAdapter($isUserPublishEnabled, $isPublic) app()->instance(H5PAdapterInterface::class, $testAdapter); } - /** - * @test - * @backupGlobals enabled - */ + #[BackupGlobals(true)] + #[Test] public function importH5P() { $this->_setUp(); @@ -138,10 +138,8 @@ public function importH5P() }); } - /** - * @test - * @backupGlobals enabled - */ + #[BackupGlobals(true)] + #[Test] public function importH5PWithImage() { $this->_setUp(); @@ -204,10 +202,8 @@ public function importH5PWithImage() $this->assertEquals($machineName, $responseData['h5pType']); } - /** - * @test - * @backupGlobals enabled - */ + #[BackupGlobals(true)] + #[Test] public function importH5PWithMetadata() { $this->_setUp(); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/AjaxRequestTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/AjaxRequestTest.php index 85c31a3919..d1d0ca23de 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/AjaxRequestTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/AjaxRequestTest.php @@ -6,8 +6,10 @@ use App\H5PLibrary; use App\H5PLibraryCapability; use App\Libraries\H5P\AjaxRequest; +use Exception; use Generator; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\DataProvider; use Storage; use Tests\TestCase; @@ -24,17 +26,32 @@ public function test_libraryRebuild(): void $this->assertDatabaseEmpty('h5p_libraries_libraries'); + $invokedCount = $this->exactly(4); $validator = $this->createMock(\H5PValidator::class); $this->instance(\H5PValidator::class, $validator); $validator - ->expects($this->exactly(4)) + ->expects($invokedCount) ->method('getLibraryData') - ->withConsecutive(['H5P.Foobar-1.2'], ['player-3.14'], ['H5P.Dynamic-2.42.3'], ['FontOk-1.3']) - ->willReturnOnConsecutiveCalls([ - 'preloadedDependencies' => [$preLib->getLibraryH5PFriendly()], - 'dynamicDependencies' => [$dynLib->getLibraryH5PFriendly()], - 'editorDependencies' => [$edLib->getLibraryH5PFriendly()], - ], [], [], []); + ->willReturnCallback(function ($params) use ($invokedCount, $preLib, $dynLib, $edLib) { + if ($invokedCount->numberOfInvocations() === 1) { + $this->assertSame('H5P.Foobar-1.2', $params); + return [ + 'preloadedDependencies' => [$preLib->getLibraryH5PFriendly()], + 'dynamicDependencies' => [$dynLib->getLibraryH5PFriendly()], + 'editorDependencies' => [$edLib->getLibraryH5PFriendly()], + ]; + } elseif ($invokedCount->numberOfInvocations() === 2) { + $this->assertSame('player-3.14', $params); + } elseif ($invokedCount->numberOfInvocations() === 3) { + $this->assertSame('H5P.Dynamic-2.42.3', $params); + } elseif ($invokedCount->numberOfInvocations() === 4) { + $this->assertSame('FontOk-1.3', $params); + } else { + throw new Exception('Mocked function "getLibraryData" called too many times'); + } + + return []; + }); $this ->withSession(['isAdmin' => true]) @@ -62,7 +79,7 @@ public function test_libraryRebuild(): void ]); } - /** @dataProvider provider_contentTypeCache_icon */ + #[DataProvider('provider_contentTypeCache_icon')] public function test_contentTypeCache_icon(array $libraryData, string $iconPath): void { Storage::fake('test'); @@ -105,7 +122,7 @@ public function test_contentTypeCache_icon(array $libraryData, string $iconPath) } } - public function provider_contentTypeCache_icon(): Generator + public static function provider_contentTypeCache_icon(): Generator { yield 'No patch with icon' => [ [ @@ -140,7 +157,7 @@ public function provider_contentTypeCache_icon(): Generator ]; } - /** @dataProvider provider_contentTypeCache_LocalAndCache */ + #[DataProvider('provider_contentTypeCache_LocalAndCache')] public function test_contentTypeCache_localAndCache(bool $usePatchVersion): void { Storage::fake('test'); @@ -220,7 +237,7 @@ public function test_contentTypeCache_localAndCache(bool $usePatchVersion): void $this->assertArrayNotHasKey('license', $libData); } - public function provider_contentTypeCache_localAndCache(): Generator + public static function provider_contentTypeCache_localAndCache(): Generator { yield 'no patch version' => [false]; yield 'patch version' => [true]; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/CRUTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/CRUTest.php index 0d4b2e64a9..9646dd773d 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/CRUTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/CRUTest.php @@ -17,6 +17,9 @@ use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Http\Response; use Illuminate\Support\Facades\Config; +use Illuminate\Support\Facades\Event; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use Tests\Helpers\MockH5PAdapterInterface; use Tests\Helpers\TestHelpers; use Tests\Seeds\TestH5PSeeder; @@ -33,7 +36,7 @@ class CRUTest extends TestCase public const testContentDirectory = "content"; public const testEditorDirectory = "editor"; - /** @test */ + #[Test] public function test_environment() { $this->assertEquals('/tmp', env('TEST_FS_ROOT')); @@ -46,10 +49,8 @@ public function test_environment() $this->assertFileDoesNotExist($dest, "File $dest still exist"); } - /** - * @test - * @dataProvider provider_create_and_update_h5p_using_web_request - */ + #[DataProvider('provider_create_and_update_h5p_using_web_request')] + #[Test] public function create_and_update_h5p_using_web_request(bool $useLinearVersioning) { Config::set('feature.linear-versioning', $useLinearVersioning); @@ -242,7 +243,7 @@ public function create_and_update_h5p_using_web_request(bool $useLinearVersionin ]); } - public function provider_create_and_update_h5p_using_web_request(): Generator + public static function provider_create_and_update_h5p_using_web_request(): Generator { yield 'linear_versioning' => [true]; yield 'non-linear_versioning' => [false]; @@ -288,14 +289,10 @@ private function getEditorDirectory(): string return $this->getTempDirectory() . '/' . self::testEditorDirectory; } - /** - * @test - */ + #[Test] public function upgradeContentNoExtraChanges_validParams_thenSuccess() { - $this->expectsEvents([ - H5PWasSaved::class, - ]); + Event::fake(); $this->seed(TestH5PSeeder::class); $owner = User::factory()->make(); @@ -332,16 +329,13 @@ public function upgradeContentNoExtraChanges_validParams_thenSuccess() $this->assertCount(2, $all); $this->assertEquals(39, $all->first()->library_id); $this->assertEquals(90, $all->last()->library_id); + Event::assertDispatched(H5PWasSaved::class); } - /** - * @test - */ + #[Test] public function upgradeContentExtraChanges_validParams_thenSuccess() { - $this->expectsEvents( - H5PWasSaved::class, - ); + Event::fake(); $this->seed(TestH5PSeeder::class); $owner = User::factory()->make(); @@ -385,16 +379,13 @@ public function upgradeContentExtraChanges_validParams_thenSuccess() $this->assertEquals("Title", $second->title); $this->assertEquals(90, $second->library_id); $this->assertJsonStringEqualsJsonString('{"simpleTest":"SimpleTest","original":false,"upgraded":"Hell yess!"}', $second->parameters); + Event::assertDispatched(H5PWasSaved::class); } - /** - * @test - */ + #[Test] public function enabledUserPublishActionAndLTISupport() { - $this->expectsEvents([ - H5PWasSaved::class, - ]); + Event::fake(); $this->seed(TestH5PSeeder::class); $owner = User::factory()->make(); @@ -465,11 +456,10 @@ public function enabledUserPublishActionAndLTISupport() ->assertStatus(Response::HTTP_CREATED); $this->assertDatabaseHas('h5p_contents', ['id' => 1, 'title' => 'New resource', 'is_published' => 0]); $this->assertDatabaseHas('h5p_contents', ['id' => 2, 'title' => 'New resource 2', 'is_published' => 1]); + Event::assertDispatched(H5PWasSaved::class); } - /** - * @test - */ + #[Test] public function enabledUserPublishActionAndLTISupport_invalidPublishFlag_thenFails() { $owner = User::factory()->make(); @@ -504,9 +494,7 @@ public function enabledUserPublishActionAndLTISupport_invalidPublishFlag_thenFai ->assertStatus(Response::HTTP_UNPROCESSABLE_ENTITY); } - /** - * @test - */ + #[Test] public function disabledUserPublishAction_invalidPublishFlag_thenFails() { $owner = User::factory()->make(); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/FrameworkTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/FrameworkTest.php index 141244b5ca..c54e6831f1 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/FrameworkTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/FrameworkTest.php @@ -19,6 +19,7 @@ use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Support\Facades\Storage; use PDO; +use PHPUnit\Framework\Attributes\DataProvider; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Tests\TestCase; @@ -154,7 +155,7 @@ public function testLoadLibrary(): void $this->assertSame($editDep->patch_version_in_folder_name, $library['editorDependencies'][0]['patchVersionInFolderName']); } - /** @dataProvider provider_usePatch */ + #[DataProvider('provider_usePatch')] public function test_deleteLibrary($usePatch): void { $disk = Storage::fake(); @@ -180,7 +181,7 @@ public function test_deleteLibrary($usePatch): void $this->assertFalse($tmpDisk->exists($path)); } - /** @dataProvider provider_usePatch */ + #[DataProvider('provider_usePatch')] public function test_loadContent($usePatch): void { $h5pLibrary = H5PLibrary::factory()->create(['patch_version_in_folder_name' => $usePatch]); @@ -194,13 +195,13 @@ public function test_loadContent($usePatch): void $this->assertSame($h5pLibrary->getLibraryString(), $content['libraryFullVersionName']); } - public function provider_usePatch(): Generator + public static function provider_usePatch(): Generator { yield [false]; yield [true]; } - /** @dataProvider provider_isPatchedLibrary */ + #[DataProvider('provider_isPatchedLibrary')] public function test_isPatchedLibrary(int $patchVersion, bool $expected) { $library = H5PLibrary::factory()->create(); @@ -213,7 +214,7 @@ public function test_isPatchedLibrary(int $patchVersion, bool $expected) ])); } - public function provider_isPatchedLibrary(): Generator + public static function provider_isPatchedLibrary(): Generator { yield 'same patch' => [3, false]; yield 'older patch' => [2, false]; @@ -262,7 +263,7 @@ public function test_insertContent(): void $this->assertSame($input['metadata']['license'], $content->metadata->license); } - /** @dataProvider provider_isContentSlugAvailable */ + #[DataProvider('provider_isContentSlugAvailable')] public function test_isContentSlugAvailable(string $slug, bool $expected): void { H5PContent::factory()->create([ @@ -272,7 +273,7 @@ public function test_isContentSlugAvailable(string $slug, bool $expected): void $this->assertSame($expected, $this->framework->isContentSlugAvailable($slug)); } - public function provider_isContentSlugAvailable(): Generator + public static function provider_isContentSlugAvailable(): Generator { yield 'unavailable' => ['taken', false]; yield 'available' => ['available', true]; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PCopyrightTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PCopyrightTest.php index 75694716b0..1673876226 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PCopyrightTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PCopyrightTest.php @@ -11,6 +11,7 @@ use H5PCore; use Illuminate\Foundation\Testing\RefreshDatabase; use JsonException; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class H5PCopyrightTest extends TestCase @@ -29,9 +30,7 @@ public function testThrowsJsonExceptionOnInvalidData() $h5pCopyright->getCopyrights($h5pContent); } - /** - * @test - */ + #[Test] public function noImage_useCopyright() { $h5pContent = H5PContent::factory()->create([ @@ -45,9 +44,7 @@ public function noImage_useCopyright() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function noImage_useMetadata() { $h5pContent = H5PContent::factory()->create([ @@ -61,9 +58,7 @@ public function noImage_useMetadata() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function imageNoLicense_useCopyright() { $h5pContent = H5PContent::factory()->create([ @@ -77,9 +72,7 @@ public function imageNoLicense_useCopyright() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function imageNoLicense_useMetadata() { $h5pContent = H5PContent::factory()->create([ @@ -93,9 +86,7 @@ public function imageNoLicense_useMetadata() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function imageWithLicense_useCopyright() { $h5pContent = H5PContent::factory()->create([ @@ -123,9 +114,7 @@ public function imageWithLicense_useCopyright() } - /** - * @test - */ + #[Test] public function imageWithLicense_useMetadata() { $h5pContent = H5PContent::factory()->create([ @@ -154,9 +143,7 @@ public function imageWithLicense_useMetadata() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function imageAndText_withLicense_useCopyrightAndMetadata() { $h5pContent = H5PContent::factory()->create([ @@ -203,9 +190,7 @@ public function imageAndText_withLicense_useCopyrightAndMetadata() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function video_useCopyright() { $h5pContent = H5PContent::factory()->create([ @@ -227,9 +212,7 @@ public function video_useCopyright() } - /** - * @test - */ + #[Test] public function video_withTitleAuthorAndLicense_useCopyright() { $h5pContent = H5PContent::factory()->create([ @@ -254,9 +237,7 @@ public function video_withTitleAuthorAndLicense_useCopyright() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function video_withAllInfoSet_useCopyrights() { $h5pContent = H5PContent::factory()->create([ @@ -285,9 +266,7 @@ public function video_withAllInfoSet_useCopyrights() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function video_withAllInfoSet_useMetadata() { $h5pContent = H5PContent::factory()->create([ @@ -317,9 +296,7 @@ public function video_withAllInfoSet_useMetadata() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function noMedia_withContentMetadata() { $h5pContentMetadata = H5PContentsMetadata::factory()->create([ @@ -351,9 +328,7 @@ public function noMedia_withContentMetadata() ], $actualCopyright); } - /** - * @test - */ + #[Test] public function noMedia_withAuthorAsNull_useMetadata() { $h5pContentMetadata = H5PContentsMetadata::factory()->create([ @@ -385,9 +360,7 @@ public function noMedia_withAuthorAsNull_useMetadata() ], $actualCopyright); } - /** - * @test - */ + #[Test] public function media_withContentMetadata() { $h5pContentMetadata = H5PContentsMetadata::factory()->create([ @@ -428,9 +401,7 @@ public function media_withContentMetadata() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function noMedia_withLibrary() { $h5pLibrary = H5PLibrary::factory()->create([ @@ -456,9 +427,7 @@ public function noMedia_withLibrary() ], $actualCopyright); } - /** - * @test - */ + #[Test] public function cerpusImageWithLicense_useMetadata() { $h5pContentMetadata = H5PContentsMetadata::factory()->create([ @@ -495,9 +464,7 @@ public function cerpusImageWithLicense_useMetadata() ], $h5pCopyright->getCopyrights($h5pContent)); } - /** - * @test - */ + #[Test] public function cerpusVideoWithLicense_useMetadata() { $h5pContentMetadata = H5PContentsMetadata::factory()->create([ diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PCreateConfigTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PCreateConfigTest.php index f142af2be6..5704967a11 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PCreateConfigTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PCreateConfigTest.php @@ -7,13 +7,14 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Session; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class H5PCreateConfigTest extends TestCase { use RefreshDatabase; - /** @dataProvider provider_adapterMode */ + #[DataProvider('provider_adapterMode')] public function test_getConfig(string $adapterMode): void { Config::set('ndla-mode.h5p.audio.url', 'https://audio.url'); @@ -25,33 +26,33 @@ public function test_getConfig(string $adapterMode): void $data = $config->getConfig(); // Check that the common attributes are present - $this->assertObjectHasAttribute('baseUrl', $data); - $this->assertObjectHasAttribute('url', $data); - $this->assertObjectHasAttribute('postUserStatistics', $data); - $this->assertObjectHasAttribute('ajaxPath', $data); + $this->assertObjectHasProperty('baseUrl', $data); + $this->assertObjectHasProperty('url', $data); + $this->assertObjectHasProperty('postUserStatistics', $data); + $this->assertObjectHasProperty('ajaxPath', $data); if (config('h5p.saveFrequency') === false) { - $this->assertObjectNotHasAttribute('user', $data); + $this->assertObjectNotHasProperty('user', $data); } else { - $this->assertObjectHasAttribute('user', $data); + $this->assertObjectHasProperty('user', $data); } - $this->assertObjectHasAttribute('canGiveScore', $data); - $this->assertObjectHasAttribute('hubIsEnabled', $data); - $this->assertObjectHasAttribute('ajax', $data); - $this->assertObjectHasAttribute('tokens', $data); - $this->assertObjectHasAttribute('saveFreq', $data); - $this->assertObjectHasAttribute('siteUrl', $data); - $this->assertObjectHasAttribute('l10n', $data); - $this->assertObjectHasAttribute('baseUrl', $data); - $this->assertObjectHasAttribute('loadedJs', $data); - $this->assertObjectHasAttribute('loadedCss', $data); - $this->assertObjectHasAttribute('core', $data); - $this->assertObjectHasAttribute('contents', $data); - $this->assertObjectHasAttribute('crossorigin', $data); - $this->assertObjectHasAttribute('crossoriginRegex', $data); - $this->assertObjectHasAttribute('locale', $data); - $this->assertObjectHasAttribute('localeConverted', $data); - $this->assertObjectHasAttribute('pluginCacheBuster', $data); - $this->assertObjectHasAttribute('libraryUrl', $data); + $this->assertObjectHasProperty('canGiveScore', $data); + $this->assertObjectHasProperty('hubIsEnabled', $data); + $this->assertObjectHasProperty('ajax', $data); + $this->assertObjectHasProperty('tokens', $data); + $this->assertObjectHasProperty('saveFreq', $data); + $this->assertObjectHasProperty('siteUrl', $data); + $this->assertObjectHasProperty('l10n', $data); + $this->assertObjectHasProperty('baseUrl', $data); + $this->assertObjectHasProperty('loadedJs', $data); + $this->assertObjectHasProperty('loadedCss', $data); + $this->assertObjectHasProperty('core', $data); + $this->assertObjectHasProperty('contents', $data); + $this->assertObjectHasProperty('crossorigin', $data); + $this->assertObjectHasProperty('crossoriginRegex', $data); + $this->assertObjectHasProperty('locale', $data); + $this->assertObjectHasProperty('localeConverted', $data); + $this->assertObjectHasProperty('pluginCacheBuster', $data); + $this->assertObjectHasProperty('libraryUrl', $data); // Attributes altered or set $this->assertSame('/api/progress?action=h5p_preview&c=1', $data->ajax['contentUserData']); @@ -76,30 +77,18 @@ public function test_getConfig(string $adapterMode): void // Adapter specific if ($adapterMode === 'ndla') { - $this->assertContains('/css/ndlah5p-editor.css', $data->editor->assets->css); $this->assertContains('/js/cropperjs/cropper.min.css', $data->editor->assets->css); - $this->assertContains('/css/ndlah5p-youtube.css', $data->editor->assets->css); - $this->assertContains('/js/h5p/wiris/h5peditor-html-wiris-addon.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertContains('/js/ndla-contentbrowser.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertContains('/js/videos/brightcove.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); $this->assertContains('/js/h5peditor-image-popup.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); $this->assertContains('/js/h5peditor-custom.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertContains('/js/h5p/ndlah5p-youtube.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); $this->assertSame('https://www.wiris.net/client/plugins/ckeditor/plugin.js', $data->editor->wirisPath); - $this->assertSame('https://audio.url/audio-api/v1/audio', $data->audioBrowserDetailsUrl); - $this->assertSame('https://ndla-image.url/image-api/v3/images', $data->imageBrowserDetailsUrl); } elseif ($adapterMode === 'cerpus') { - $this->assertContains('/js/videos/streamps.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertContains('/js/videos/brightcove.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertObjectNotHasAttribute('wirisPath', $data->editor); - $this->assertObjectNotHasAttribute('audioBrowserDetailsUrl', $data); - $this->assertObjectNotHasAttribute('imageBrowserDetailsUrl', $data); + $this->assertObjectNotHasProperty('wirisPath', $data->editor); } } - public function provider_adapterMode(): \Generator + public static function provider_adapterMode(): \Generator { yield 'cerpusMode' => ['cerpus']; yield 'ndlaMode' => ['ndla']; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PEditConfigTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PEditConfigTest.php index 6e712349c3..ac4fd9536a 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PEditConfigTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PEditConfigTest.php @@ -10,13 +10,14 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Session; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class H5PEditConfigTest extends TestCase { use RefreshDatabase; - /** @dataProvider provider_adapterMode */ + #[DataProvider('provider_adapterMode')] public function test_getConfig(string $adapterMode): void { Config::set('ndla-mode.h5p.audio.url', 'https://audio.url'); @@ -28,33 +29,33 @@ public function test_getConfig(string $adapterMode): void $data = $config->getConfig(); // Check that the common attributes are present - $this->assertObjectHasAttribute('baseUrl', $data); - $this->assertObjectHasAttribute('url', $data); - $this->assertObjectHasAttribute('postUserStatistics', $data); - $this->assertObjectHasAttribute('ajaxPath', $data); + $this->assertObjectHasProperty('baseUrl', $data); + $this->assertObjectHasProperty('url', $data); + $this->assertObjectHasProperty('postUserStatistics', $data); + $this->assertObjectHasProperty('ajaxPath', $data); if (config('h5p.saveFrequency') === false) { - $this->assertObjectNotHasAttribute('user', $data); + $this->assertObjectNotHasProperty('user', $data); } else { - $this->assertObjectHasAttribute('user', $data); + $this->assertObjectHasProperty('user', $data); } - $this->assertObjectHasAttribute('canGiveScore', $data); - $this->assertObjectHasAttribute('hubIsEnabled', $data); - $this->assertObjectHasAttribute('ajax', $data); - $this->assertObjectHasAttribute('tokens', $data); - $this->assertObjectHasAttribute('saveFreq', $data); - $this->assertObjectHasAttribute('siteUrl', $data); - $this->assertObjectHasAttribute('l10n', $data); - $this->assertObjectHasAttribute('baseUrl', $data); - $this->assertObjectHasAttribute('loadedJs', $data); - $this->assertObjectHasAttribute('loadedCss', $data); - $this->assertObjectHasAttribute('core', $data); - $this->assertObjectHasAttribute('contents', $data); - $this->assertObjectHasAttribute('crossorigin', $data); - $this->assertObjectHasAttribute('crossoriginRegex', $data); - $this->assertObjectHasAttribute('locale', $data); - $this->assertObjectHasAttribute('localeConverted', $data); - $this->assertObjectHasAttribute('pluginCacheBuster', $data); - $this->assertObjectHasAttribute('libraryUrl', $data); + $this->assertObjectHasProperty('canGiveScore', $data); + $this->assertObjectHasProperty('hubIsEnabled', $data); + $this->assertObjectHasProperty('ajax', $data); + $this->assertObjectHasProperty('tokens', $data); + $this->assertObjectHasProperty('saveFreq', $data); + $this->assertObjectHasProperty('siteUrl', $data); + $this->assertObjectHasProperty('l10n', $data); + $this->assertObjectHasProperty('baseUrl', $data); + $this->assertObjectHasProperty('loadedJs', $data); + $this->assertObjectHasProperty('loadedCss', $data); + $this->assertObjectHasProperty('core', $data); + $this->assertObjectHasProperty('contents', $data); + $this->assertObjectHasProperty('crossorigin', $data); + $this->assertObjectHasProperty('crossoriginRegex', $data); + $this->assertObjectHasProperty('locale', $data); + $this->assertObjectHasProperty('localeConverted', $data); + $this->assertObjectHasProperty('pluginCacheBuster', $data); + $this->assertObjectHasProperty('libraryUrl', $data); // Attributes altered or set $this->assertSame('/api/progress?action=h5p_preview&c=1', $data->ajax['contentUserData']); @@ -78,30 +79,18 @@ public function test_getConfig(string $adapterMode): void // Adapter specific if ($adapterMode === 'ndla') { - $this->assertContains('/css/ndlah5p-editor.css', $data->editor->assets->css); $this->assertContains('/js/cropperjs/cropper.min.css', $data->editor->assets->css); - $this->assertContains('/css/ndlah5p-youtube.css', $data->editor->assets->css); - $this->assertContains('/js/h5p/wiris/h5peditor-html-wiris-addon.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertContains('/js/ndla-contentbrowser.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertContains('/js/videos/brightcove.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); $this->assertContains('/js/h5peditor-image-popup.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); $this->assertContains('/js/h5peditor-custom.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertContains('/js/h5p/ndlah5p-youtube.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); $this->assertSame('https://www.wiris.net/client/plugins/ckeditor/plugin.js', $data->editor->wirisPath); - $this->assertSame('https://audio.url/audio-api/v1/audio', $data->audioBrowserDetailsUrl); - $this->assertSame('https://ndla-image.url/image-api/v3/images', $data->imageBrowserDetailsUrl); } elseif ($adapterMode === 'cerpus') { - $this->assertContains('/js/videos/streamps.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertContains('/js/videos/brightcove.js?ver=' . H5PConfigAbstract::CACHE_BUSTER_STRING, $data->editor->assets->js); - $this->assertObjectNotHasAttribute('wirisPath', $data->editor); - $this->assertObjectNotHasAttribute('audioBrowserDetailsUrl', $data); - $this->assertObjectNotHasAttribute('imageBrowserDetailsUrl', $data); + $this->assertObjectNotHasProperty('wirisPath', $data->editor); } } - public function provider_adapterMode(): \Generator + public static function provider_adapterMode(): \Generator { yield 'cerpus' => ['cerpus']; yield 'ndla' => ['ndla']; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PExportTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PExportTest.php index 27380ecd7d..4a9fc43fd1 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PExportTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PExportTest.php @@ -6,12 +6,12 @@ use App\H5PLibrary; use App\Libraries\DataObjects\ContentStorageSettings; use App\Libraries\H5P\H5PExport; -use App\Libraries\H5P\Interfaces\H5PExternalProviderInterface; use Exception; -use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Support\Facades\Storage; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use Tests\Helpers\MockH5PAdapterInterface; use Tests\Seeds\TestH5PSeeder; use Tests\TestCase; @@ -19,7 +19,6 @@ class H5PExportTest extends TestCase { - use DatabaseMigrations; use RefreshDatabase; use WithFaker; use MockH5PAdapterInterface; @@ -45,15 +44,14 @@ protected function tearDown(): void } /** - * @test * @throws Exception - * @dataProvider provider_noMultimedia */ + #[DataProvider('provider_noMultimedia')] + #[Test] public function noMultimedia(bool $usePatchFolder) { $this->setupH5PAdapter([ 'alterLibrarySemantics' => null, - 'getExternalProviders' => [], ]); $this->seed(TestH5PSeeder::class); @@ -72,7 +70,7 @@ public function noMultimedia(bool $usePatchFolder) 'library_id' => 284, ]); - config('feature.export_h5p_with_local_files', false); + config(['feature.export_h5p_with_local_files' => false]); $export = resolve(H5PExport::class); $this->assertTrue($export->generateExport($h5p)); $exportName = sprintf("%s-%s.", $h5p->slug, $h5p->id); @@ -87,21 +85,20 @@ public function noMultimedia(bool $usePatchFolder) $zipArchive->close(); } - public function provider_noMultimedia(): \Generator + public static function provider_noMultimedia(): \Generator { yield 'minorFolder' => [false]; yield 'patchFolder' => [true]; } /** - * @test * @throws Exception */ + #[Test] public function withLocalImage() { $this->setupH5PAdapter([ 'alterLibrarySemantics' => null, - 'getExternalProviders' => [], ]); $this->seed(TestH5PSeeder::class); @@ -111,7 +108,7 @@ public function withLocalImage() 'library_id' => 284, ]); - config('feature.export_h5p_with_local_files', false); + config(['feature.export_h5p_with_local_files' => false]); $export = resolve(H5PExport::class); $this->assertTrue($export->generateExport($h5p)); $exportName = sprintf("%s-%s.", $h5p->slug, $h5p->id); @@ -129,309 +126,4 @@ public function withLocalImage() $contentDecoded = json_decode($contentJson); $this->assertEquals('images/file-5f6ca98160e6c.jpg', $contentDecoded->media->params->file->path); } - - /** - * @test - * @throws Exception - */ - public function withRemoteImage_noLocalConvert() - { - $this->setupH5PAdapter([ - 'alterLibrarySemantics' => null, - 'getExternalProviders' => [], - ]); - - $imageUrl = $this->faker->imageUrl(); - - $this->seed(TestH5PSeeder::class); - $params = '{"media":{"params":{"contentName":"Image","file":{"path":"' . $imageUrl . '","mime":"image\/jpeg","copyright":{"license":"U"},"width":196,"height":358}},"library":"H5P.Image 1.1","metadata":{"contentType":"Image","license":"U","title":"Untitled Image","authors":[],"changes":[],"extraTitle":"Untitled Image"},"subContentId":"ca86c100-d25c-4e19-ac6b-f50f843da292"},"text":"Fill in the missing words","overallFeedback":[{"from":0,"to":100}],"showSolutions":"Show solution","tryAgain":"Retry","checkAnswer":"Check","notFilledOut":"Please fill in all blanks to view solution","answerIsCorrect":"':ans' is correct","answerIsWrong":"':ans' is wrong","answeredCorrectly":"Answered correctly","answeredIncorrectly":"Answered incorrectly","solutionLabel":"Correct answer:","inputLabel":"Blank input @num of @total","inputHasTipLabel":"Tip available","tipLabel":"Tip","behaviour":{"enableRetry":true,"enableSolutionsButton":true,"enableCheckButton":true,"autoCheck":false,"caseSensitive":true,"showSolutionsRequiresInput":true,"separateLines":false,"disableImageZooming":false,"confirmCheckDialog":false,"confirmRetryDialog":false,"acceptSpellingErrors":false},"scoreBarLabel":"You got :num out of :total points","confirmCheck":{"header":"Finish ?","body":"Are you sure you wish to finish ?","cancelLabel":"Cancel","confirmLabel":"Finish"},"confirmRetry":{"header":"Retry ?","body":"Are you sure you wish to retry ?","cancelLabel":"Cancel","confirmLabel":"Confirm"},"questions":["

Not all *superheros* wear capes!<\/p>\n"]}'; - $h5p = H5PContent::factory()->create([ - 'parameters' => $params, - 'library_id' => 284, - ]); - - config('feature.export_h5p_with_local_files', false); - $export = resolve(H5PExport::class); - $this->assertTrue($export->generateExport($h5p)); - $exportName = sprintf("%s-%s.", $h5p->slug, $h5p->id); - $exportPath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "h5p"); - $archivePath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "zip"); - - $this->assertFileExists($this->exportDisk->path($exportPath)); - $this->exportDisk->move($exportPath, $archivePath); - $zipArchive = new ZipArchive(); - $this->assertTrue($zipArchive->open($this->exportDisk->path($archivePath))); - $contentJson = $zipArchive->getFromName('content/content.json'); - $zipArchive->extractTo($this->exportDisk->path(sprintf(ContentStorageSettings::EXPORT_PATH, $exportName))); - $this->assertJson($contentJson); - $zipArchive->close(); - $contentDecoded = json_decode($contentJson); - $this->assertEquals($imageUrl, $contentDecoded->media->params->file->path); - } - - /** - * @test - * @throws Exception - */ - public function withRemoteImage_storeLocally() - { - $imageUrl = $this->faker->imageUrl(); - - $this->seed(TestH5PSeeder::class); - $params = '{"media":{"params":{"contentName":"Image","file":{"path":"' . $imageUrl . '","mime":"image\/jpeg","copyright":{"license":"U"},"width":196,"height":358}},"library":"H5P.Image 1.1","metadata":{"contentType":"Image","license":"U","title":"Untitled Image","authors":[],"changes":[],"extraTitle":"Untitled Image"},"subContentId":"ca86c100-d25c-4e19-ac6b-f50f843da292"},"text":"Fill in the missing words","overallFeedback":[{"from":0,"to":100}],"showSolutions":"Show solution","tryAgain":"Retry","checkAnswer":"Check","notFilledOut":"Please fill in all blanks to view solution","answerIsCorrect":"':ans' is correct","answerIsWrong":"':ans' is wrong","answeredCorrectly":"Answered correctly","answeredIncorrectly":"Answered incorrectly","solutionLabel":"Correct answer:","inputLabel":"Blank input @num of @total","inputHasTipLabel":"Tip available","tipLabel":"Tip","behaviour":{"enableRetry":true,"enableSolutionsButton":true,"enableCheckButton":true,"autoCheck":false,"caseSensitive":true,"showSolutionsRequiresInput":true,"separateLines":false,"disableImageZooming":false,"confirmCheckDialog":false,"confirmRetryDialog":false,"acceptSpellingErrors":false},"scoreBarLabel":"You got :num out of :total points","confirmCheck":{"header":"Finish ?","body":"Are you sure you wish to finish ?","cancelLabel":"Cancel","confirmLabel":"Finish"},"confirmRetry":{"header":"Retry ?","body":"Are you sure you wish to retry ?","cancelLabel":"Cancel","confirmLabel":"Confirm"},"questions":["

Not all *superheros* wear capes!<\/p>\n"]}'; - $h5p = H5PContent::factory()->create([ - 'parameters' => $params, - 'library_id' => 284, - ]); - - $this->exportDisk->makeDirectory('temp'); - $this->setupH5PAdapter([ - 'alterLibrarySemantics' => null, - 'getExternalProviders' => function () use ($h5p) { - $imageProvider1 = $this->getMockBuilder(H5PExternalProviderInterface::class)->getMock(); - $imageProvider1->method('isTargetType')->willReturn(false); - $imageProvider1->method('getType')->willReturn("image"); - - $imageProvider2 = $this->getMockBuilder(H5PExternalProviderInterface::class)->getMock(); - $imageProvider2->method('isTargetType')->willReturn(true); - $imageProvider2->method('getType')->willReturn("image"); - $imageProvider2->method('storeContent')->willReturnCallback(function () use ($h5p) { - $imageDirectory = sprintf(ContentStorageSettings::CONTENT_FULL_PATH, $h5p->id, "image", "tree", 'jpg'); - $this->exportDisk->makeDirectory(dirname($imageDirectory)); - $this->exportDisk->put($imageDirectory, $this->testDisk->readStream('files/tree.jpg')); - return [ - 'path' => "images/tree.jpg", - 'mime' => "image/jpeg" - ]; - }); - - return [$imageProvider1, $imageProvider2]; - }, - ]); - - config('feature.export_h5p_with_local_files', true); - $export = resolve(H5PExport::class); - $this->assertTrue($export->generateExport($h5p)); - $exportName = sprintf("%s-%s.", $h5p->slug, $h5p->id); - $exportPath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "h5p"); - $archivePath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "zip"); - - $this->assertFileExists($this->exportDisk->path($exportPath)); - $this->assertFileExists($this->exportDisk->path($exportPath)); - $this->exportDisk->move($exportPath, $archivePath); - $zipArchive = new ZipArchive(); - $this->assertTrue($zipArchive->open($this->exportDisk->path($archivePath))); - $contentJson = $zipArchive->getFromName('content/content.json'); - $zipArchive->extractTo($this->exportDisk->path(sprintf(ContentStorageSettings::EXPORT_PATH, $exportName))); - $this->assertEquals(83, $zipArchive->locateName("content/images/tree.jpg")); - $this->assertJson($contentJson); - $zipArchive->close(); - $contentDecoded = json_decode($contentJson); - $this->assertEquals("images/tree.jpg", $contentDecoded->media->params->file->path); - } - - /** - * @test - * @throws Exception - */ - public function withRemoteVideo_storeLocally() - { - $this->seed(TestH5PSeeder::class); - $params = '{"interactiveVideo":{"video":{"startScreenOptions":{"title":"Interactive Video","hideStartTitle":false,"copyright":""},"textTracks":[{"label":"Subtitles","kind":"subtitles","srcLang":"en"}],"files":[{"path":"https://bc/12456","mime":"video/BrightCove","copyright":{"license":"U"}}]},"assets":{"interactions":[]},"summary":{"task":{"library":"H5P.Summary 1.8","params":{"intro":"Choose the correct statement.","summaries":[{"subContentId":"2363644d-ab92-4f93-8d11-0d6e916bd83d","tip":""}],"overallFeedback":[{"from":0,"to":100}],"solvedLabel":"Progress:","scoreLabel":"Wrong answers:","resultLabel":"Your result","labelCorrect":"Correct.","labelIncorrect":"Incorrect! Please try again.","labelCorrectAnswers":"Correct answers.","tipButtonLabel":"Show tip","scoreBarLabel":"You got :num out of :total points","progressText":"Progress :num of :total"},"subContentId":"211f821f-67f9-4717-a7a4-362c4d507545","metadata":{"contentType":"Summary","license":"U","title":"Untitled Summary"}},"displayAt":3}},"override":{"autoplay":false,"loop":false,"showBookmarksmenuOnLoad":false,"showRewind10":false,"preventSkipping":false,"deactivateSound":false},"l10n":{"interaction":"Interaction","play":"Play","pause":"Pause","mute":"Mute","unmute":"Unmute","quality":"Video Quality","captions":"Captions","close":"Close","fullscreen":"Fullscreen","exitFullscreen":"Exit Fullscreen","summary":"Summary","bookmarks":"Bookmarks","defaultAdaptivitySeekLabel":"Continue","continueWithVideo":"Continue with video","playbackRate":"Playback Rate","rewind10":"Rewind 10 Seconds","navDisabled":"Navigation is disabled","sndDisabled":"Sound is disabled","requiresCompletionWarning":"You need to answer all the questions correctly before continuing.","back":"Back","hours":"Hours","minutes":"Minutes","seconds":"Seconds","currentTime":"Current time:","totalTime":"Total time:","navigationHotkeyInstructions":"Use key k for starting and stopping video at any time","singleInteractionAnnouncement":"Interaction appeared:","multipleInteractionsAnnouncement":"Multiple interactions appeared.","videoPausedAnnouncement":"Video is paused","content":"Content"}}'; - $h5p = H5PContent::factory()->create([ - 'parameters' => $params, - 'library_id' => 202, - ]); - - $this->exportDisk->makeDirectory('temp'); - $this->setupH5PAdapter([ - 'alterLibrarySemantics' => null, - 'getExternalProviders' => function () use ($h5p) { - $imageProvider = $this->getMockBuilder(H5PExternalProviderInterface::class)->getMock(); - $imageProvider->method('isTargetType')->willReturn(false); - $imageProvider->method('getType')->willReturn("image"); - - $videoProvider = $this->getMockBuilder(H5PExternalProviderInterface::class)->getMock(); - $videoProvider->method('isTargetType')->willReturn(true); - $videoProvider->method('getType')->willReturn("video"); - $videoProvider->method('storeContent')->willReturnCallback(function () use ($h5p) { - $this->exportDisk->put("content/{$h5p->id}/videos/sampleVideo.mp4", $this->testDisk->readStream("files/sample.mp4")); - return [ - 'path' => "videos/sampleVideo.mp4", - 'mime' => "video/mp4" - ]; - }); - - return [$imageProvider, $videoProvider]; - }, - ]); - - config('feature.export_h5p_with_local_files', false); - $export = resolve(H5PExport::class); - $this->assertTrue($export->generateExport($h5p)); - $exportName = sprintf("%s-%s.", $h5p->slug, $h5p->id); - $exportPath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "h5p"); - $archivePath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "zip"); - - $this->assertFileExists($this->exportDisk->path($exportPath)); - $this->exportDisk->move($exportPath, $archivePath); - $zipArchive = new ZipArchive(); - $this->assertTrue($zipArchive->open($this->exportDisk->path($archivePath))); - $contentJson = $zipArchive->getFromName('content/content.json'); - $zipArchive->extractTo($this->exportDisk->path(sprintf(ContentStorageSettings::EXPORT_PATH, $exportName))); - $this->assertEquals(99, $zipArchive->locateName("content/videos/sampleVideo.mp4")); - $this->assertJson($contentJson); - $zipArchive->close(); - $contentDecoded = json_decode($contentJson); - $this->assertEquals("videos/sampleVideo.mp4", $contentDecoded->interactiveVideo->video->files[0]->path); - } - - - /** - * @test - * @throws Exception - */ - public function withRemoteVideoAndImage_storeLocally() - { - $imageUrl = $this->faker->imageUrl(); - - $this->seed(TestH5PSeeder::class); - $params = '{"interactiveVideo":{"video":{"startScreenOptions":{"title":"Interactive Video","hideStartTitle":false,"copyright":""},"textTracks":[{"label":"Subtitles","kind":"subtitles","srcLang":"en"}],"files":[{"path":"https://bc/ref:12456","mime":"video/BrightCove","copyright":{"license":"U"}}]},"assets":{"interactions":[{"x":5.230125523012552,"y":13.011152416356877,"width":14.986376021798364,"height":10,"duration":{"from":0,"to":10},"libraryTitle":"Image","action":{"library":"H5P.Image 1.0","params":{"contentName":"Image","file":{"path":"' . $imageUrl . '","mime":"image/jpeg","copyright":{"license":"U"},"width":1100,"height":734},"alt":"test"},"subContentId":"b0bd1110-ada3-4afe-9be9-1a822ea9643d","metadata":{"contentType":"Image","license":"U"}},"visuals":{"backgroundColor":"rgba(0,0,0,0)","boxShadow":true},"pause":false,"displayType":"poster","buttonOnMobile":false,"goto":{"url":{"protocol":"http://"},"visualize":false,"type":""},"label":""}]},"summary":{"task":{"library":"H5P.Summary 1.8","params":{"intro":"Choose the correct statement.","summaries":[{"subContentId":"2363644d-ab92-4f93-8d11-0d6e916bd83d","tip":""}],"overallFeedback":[{"from":0,"to":100}],"solvedLabel":"Progress:","scoreLabel":"Wrong answers:","resultLabel":"Your result","labelCorrect":"Correct.","labelIncorrect":"Incorrect! Please try again.","labelCorrectAnswers":"Correct answers.","tipButtonLabel":"Show tip","scoreBarLabel":"You got :num out of :total points","progressText":"Progress :num of :total"},"subContentId":"211f821f-67f9-4717-a7a4-362c4d507545","metadata":{"contentType":"Summary","license":"U","title":"Untitled Summary"}},"displayAt":3}},"override":{"autoplay":false,"loop":false,"showBookmarksmenuOnLoad":false,"showRewind10":false,"preventSkipping":false,"deactivateSound":false},"l10n":{"interaction":"Interaction","play":"Play","pause":"Pause","mute":"Mute","unmute":"Unmute","quality":"Video Quality","captions":"Captions","close":"Close","fullscreen":"Fullscreen","exitFullscreen":"Exit Fullscreen","summary":"Summary","bookmarks":"Bookmarks","defaultAdaptivitySeekLabel":"Continue","continueWithVideo":"Continue with video","playbackRate":"Playback Rate","rewind10":"Rewind 10 Seconds","navDisabled":"Navigation is disabled","sndDisabled":"Sound is disabled","requiresCompletionWarning":"You need to answer all the questions correctly before continuing.","back":"Back","hours":"Hours","minutes":"Minutes","seconds":"Seconds","currentTime":"Current time:","totalTime":"Total time:","navigationHotkeyInstructions":"Use key k for starting and stopping video at any time","singleInteractionAnnouncement":"Interaction appeared:","multipleInteractionsAnnouncement":"Multiple interactions appeared.","videoPausedAnnouncement":"Video is paused","content":"Content"}}'; - $h5p = H5PContent::factory()->create([ - 'parameters' => $params, - 'library_id' => 202, - ]); - - $this->exportDisk->makeDirectory('temp'); - $this->setupH5PAdapter([ - 'alterLibrarySemantics' => null, - 'getExternalProviders' => function () use ($h5p, $imageUrl) { - $imageProvider = $this->getMockBuilder(H5PExternalProviderInterface::class)->getMock(); - $imageProvider - ->expects($this->exactly(2)) - ->method('isTargetType') - ->withConsecutive( - [$this->equalTo('video/BrightCove'), $this->equalTo('https://bc/ref:12456')], - [$this->equalTo('image/jpeg'), $this->equalTo($imageUrl)] - ) - ->willReturnOnConsecutiveCalls(false, true); - $imageProvider->method('getType')->willReturn("image"); - $imageProvider->method('storeContent')->willReturnCallback(function () use ($h5p) { - $imageDirectory = sprintf(ContentStorageSettings::CONTENT_FULL_PATH, $h5p->id, "image", "tree", 'jpg'); - $this->exportDisk->makeDirectory(dirname($imageDirectory)); - $this->exportDisk->put($imageDirectory, $this->testDisk->readStream('files/tree.jpg')); - return [ - 'path' => "images/tree.jpg", - 'mime' => "image/jpeg" - ]; - }); - - $videoProvider = $this->getMockBuilder(H5PExternalProviderInterface::class)->getMock(); - $videoProvider->method('isTargetType')->willReturn(true); - $videoProvider->method('getType')->willReturn("video"); - $videoProvider->method('storeContent')->willReturnCallback(function () use ($h5p) { - $this->exportDisk->put("content/{$h5p->id}/videos/sampleVideo.mp4", $this->testDisk->readStream("files/sample.mp4")); - return [ - 'path' => "videos/sampleVideo.mp4", - 'mime' => "video/mp4" - ]; - }); - - return [$imageProvider, $videoProvider]; - }, - ]); - - $export = resolve(H5PExport::class); - $this->assertTrue($export->generateExport($h5p)); - $exportName = sprintf("%s-%s.", $h5p->slug, $h5p->id); - $exportPath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "h5p"); - $archivePath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "zip"); - - $this->assertFileExists($this->exportDisk->path($exportPath)); - $this->exportDisk->move($exportPath, $archivePath); - $zipArchive = new ZipArchive(); - $this->assertTrue($zipArchive->open($this->exportDisk->path($archivePath))); - $contentJson = $zipArchive->getFromName('content/content.json'); - $zipArchive->extractTo($this->exportDisk->path(sprintf(ContentStorageSettings::EXPORT_PATH, $exportName))); - $this->assertEquals(100, $zipArchive->locateName("content/videos/sampleVideo.mp4")); - $this->assertEquals(99, $zipArchive->locateName("content/images/tree.jpg")); - $this->assertJson($contentJson); - $zipArchive->close(); - $contentDecoded = json_decode($contentJson); - $this->assertEquals("videos/sampleVideo.mp4", $contentDecoded->interactiveVideo->video->files[0]->path); - $this->assertEquals("images/tree.jpg", $contentDecoded->interactiveVideo->assets->interactions[0]->action->params->file->path); - } - - /** - * @test - * @throws Exception - */ - public function withRemoteCaptions_storeLocally() - { - $this->seed(TestH5PSeeder::class); - $params = '{"interactiveVideo":{"video":{"startScreenOptions":{"title":"Interactive Video","hideStartTitle":false,"copyright":""},"textTracks":[{"kind":"captions","label":"Nynorsk","srcLang":"nn","track":{"externalId":"87ada56a-5670-4b43-96e3-4aef54284197","path":"https:\/\/urltocaptions/text.vtt","mime":"text\/webvtt","copyright":{"license":"U"}}}],"files":[{"path":"https://bc/12456","mime":"video/BrightCove","copyright":{"license":"U"}}]},"assets":{"interactions":[]},"summary":{"task":{"library":"H5P.Summary 1.8","params":{"intro":"Choose the correct statement.","summaries":[{"subContentId":"2363644d-ab92-4f93-8d11-0d6e916bd83d","tip":""}],"overallFeedback":[{"from":0,"to":100}],"solvedLabel":"Progress:","scoreLabel":"Wrong answers:","resultLabel":"Your result","labelCorrect":"Correct.","labelIncorrect":"Incorrect! Please try again.","labelCorrectAnswers":"Correct answers.","tipButtonLabel":"Show tip","scoreBarLabel":"You got :num out of :total points","progressText":"Progress :num of :total"},"subContentId":"211f821f-67f9-4717-a7a4-362c4d507545","metadata":{"contentType":"Summary","license":"U","title":"Untitled Summary"}},"displayAt":3}},"override":{"autoplay":false,"loop":false,"showBookmarksmenuOnLoad":false,"showRewind10":false,"preventSkipping":false,"deactivateSound":false},"l10n":{"interaction":"Interaction","play":"Play","pause":"Pause","mute":"Mute","unmute":"Unmute","quality":"Video Quality","captions":"Captions","close":"Close","fullscreen":"Fullscreen","exitFullscreen":"Exit Fullscreen","summary":"Summary","bookmarks":"Bookmarks","defaultAdaptivitySeekLabel":"Continue","continueWithVideo":"Continue with video","playbackRate":"Playback Rate","rewind10":"Rewind 10 Seconds","navDisabled":"Navigation is disabled","sndDisabled":"Sound is disabled","requiresCompletionWarning":"You need to answer all the questions correctly before continuing.","back":"Back","hours":"Hours","minutes":"Minutes","seconds":"Seconds","currentTime":"Current time:","totalTime":"Total time:","navigationHotkeyInstructions":"Use key k for starting and stopping video at any time","singleInteractionAnnouncement":"Interaction appeared:","multipleInteractionsAnnouncement":"Multiple interactions appeared.","videoPausedAnnouncement":"Video is paused","content":"Content"}}'; - $h5p = H5PContent::factory()->create([ - 'parameters' => $params, - 'library_id' => 202, - ]); - - $this->exportDisk->makeDirectory('temp'); - $this->setupH5PAdapter([ - 'alterLibrarySemantics' => null, - 'getExternalProviders' => function () use ($h5p) { - $textTrackProvider = $this->getMockBuilder(H5PExternalProviderInterface::class)->getMock(); - $textTrackProvider - ->expects($this->exactly(2)) - ->method('isTargetType') - ->withConsecutive( - [$this->equalTo('text/webvtt'), $this->equalTo('https://urltocaptions/text.vtt')], - [$this->equalTo('video/BrightCove'), $this->equalTo('https://bc/12456')] - ) - ->willReturnOnConsecutiveCalls(true, false); - - $textTrackProvider->method('isTargetType')->willReturn(true); - $textTrackProvider->method('getType')->willReturn("file"); - $textTrackProvider->method('storeContent')->willReturnCallback(function () use ($h5p) { - $this->exportDisk->put("content/{$h5p->id}/files/videoCaption.vtt", 'This is a caption file, though not correctly formatted'); - return [ - 'path' => "files/videoCaption.vtt", - 'mime' => "text/webvtt" - ]; - }); - - $videoProvider = $this->getMockBuilder(H5PExternalProviderInterface::class)->getMock(); - $videoProvider->method('isTargetType')->willReturn(true); - $videoProvider->method('getType')->willReturn("video"); - $videoProvider->method('storeContent')->willReturnCallback(function () use ($h5p) { - $this->exportDisk->put("content/{$h5p->id}/videos/sampleVideo.mp4", $this->testDisk->readStream("files/sample.mp4")); - return [ - 'path' => "videos/sampleVideo.mp4", - 'mime' => "video/mp4" - ]; - }); - - return [$textTrackProvider, $videoProvider]; - }, - ]); - - $export = resolve(H5PExport::class); - $this->assertTrue($export->generateExport($h5p)); - $exportName = sprintf("%s-%s.", $h5p->slug, $h5p->id); - $exportPath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "h5p"); - $archivePath = sprintf(ContentStorageSettings::EXPORT_PATH, $exportName . "zip"); - - $this->assertFileExists($this->exportDisk->path($exportPath)); - $this->exportDisk->move($exportPath, $archivePath); - $zipArchive = new ZipArchive(); - $this->assertTrue($zipArchive->open($this->exportDisk->path($archivePath))); - $contentJson = $zipArchive->getFromName('content/content.json'); - $zipArchive->extractTo($this->exportDisk->path(sprintf(ContentStorageSettings::EXPORT_PATH, $exportName))); - $this->assertEquals(99, $zipArchive->locateName("content/files/videoCaption.vtt")); - $this->assertEquals(100, $zipArchive->locateName("content/videos/sampleVideo.mp4")); - $this->assertJson($contentJson); - $zipArchive->close(); - $contentDecoded = json_decode($contentJson); - $this->assertEquals("videos/sampleVideo.mp4", $contentDecoded->interactiveVideo->video->files[0]->path); - $this->assertEquals("files/videoCaption.vtt", $contentDecoded->interactiveVideo->video->textTracks[0]->track->path); - } } diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PViewConfigTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PViewConfigTest.php index e9e692cfde..6e4cb700f5 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PViewConfigTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/H5PViewConfigTest.php @@ -14,6 +14,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Support\Facades\Session; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class H5PViewConfigTest extends TestCase @@ -21,7 +22,7 @@ class H5PViewConfigTest extends TestCase use RefreshDatabase; use WithFaker; - /** @dataProvider provider_adapterMode */ + #[DataProvider('provider_adapterMode')] public function test_getConfig(string $adapterMode): void { Session::put('adapterMode', $adapterMode); @@ -30,33 +31,33 @@ public function test_getConfig(string $adapterMode): void $data = $config->getConfig(); // Check that the common attributes are present - $this->assertObjectHasAttribute('baseUrl', $data); - $this->assertObjectHasAttribute('url', $data); - $this->assertObjectHasAttribute('postUserStatistics', $data); - $this->assertObjectHasAttribute('ajaxPath', $data); + $this->assertObjectHasProperty('baseUrl', $data); + $this->assertObjectHasProperty('url', $data); + $this->assertObjectHasProperty('postUserStatistics', $data); + $this->assertObjectHasProperty('ajaxPath', $data); if (config('h5p.saveFrequency') === false) { - $this->assertObjectNotHasAttribute('user', $data); + $this->assertObjectNotHasProperty('user', $data); } else { - $this->assertObjectHasAttribute('user', $data); + $this->assertObjectHasProperty('user', $data); } - $this->assertObjectHasAttribute('canGiveScore', $data); - $this->assertObjectHasAttribute('hubIsEnabled', $data); - $this->assertObjectHasAttribute('ajax', $data); - $this->assertObjectHasAttribute('tokens', $data); - $this->assertObjectHasAttribute('saveFreq', $data); - $this->assertObjectHasAttribute('siteUrl', $data); - $this->assertObjectHasAttribute('l10n', $data); - $this->assertObjectHasAttribute('baseUrl', $data); - $this->assertObjectHasAttribute('loadedJs', $data); - $this->assertObjectHasAttribute('loadedCss', $data); - $this->assertObjectHasAttribute('core', $data); - $this->assertObjectHasAttribute('contents', $data); - $this->assertObjectHasAttribute('crossorigin', $data); - $this->assertObjectHasAttribute('crossoriginRegex', $data); - $this->assertObjectHasAttribute('locale', $data); - $this->assertObjectHasAttribute('localeConverted', $data); - $this->assertObjectHasAttribute('pluginCacheBuster', $data); - $this->assertObjectHasAttribute('libraryUrl', $data); + $this->assertObjectHasProperty('canGiveScore', $data); + $this->assertObjectHasProperty('hubIsEnabled', $data); + $this->assertObjectHasProperty('ajax', $data); + $this->assertObjectHasProperty('tokens', $data); + $this->assertObjectHasProperty('saveFreq', $data); + $this->assertObjectHasProperty('siteUrl', $data); + $this->assertObjectHasProperty('l10n', $data); + $this->assertObjectHasProperty('baseUrl', $data); + $this->assertObjectHasProperty('loadedJs', $data); + $this->assertObjectHasProperty('loadedCss', $data); + $this->assertObjectHasProperty('core', $data); + $this->assertObjectHasProperty('contents', $data); + $this->assertObjectHasProperty('crossorigin', $data); + $this->assertObjectHasProperty('crossoriginRegex', $data); + $this->assertObjectHasProperty('locale', $data); + $this->assertObjectHasProperty('localeConverted', $data); + $this->assertObjectHasProperty('pluginCacheBuster', $data); + $this->assertObjectHasProperty('libraryUrl', $data); // Attributes altered or set $this->assertSame('', $data->documentUrl); @@ -65,13 +66,13 @@ public function test_getConfig(string $adapterMode): void $this->assertSame('/api/progress?action=h5p_setFinished', $data->ajax['setFinished']); } - public function provider_adapterMode(): Generator + public static function provider_adapterMode(): Generator { yield 'cerpus' => ['cerpus']; yield 'ndla' => ['ndla']; } - /** @dataProvider provider_setPreview */ + #[DataProvider('provider_setPreview')] public function test_setPreview(bool $preview, string $contentUserData, string $setFinished): void { $data = app(H5PViewConfig::class) @@ -83,7 +84,7 @@ public function test_setPreview(bool $preview, string $contentUserData, string $ $this->assertSame($setFinished, $data->ajax['setFinished']); } - public function provider_setPreview(): Generator + public static function provider_setPreview(): Generator { yield [ false, @@ -97,7 +98,7 @@ public function provider_setPreview(): Generator ]; } - /** @dataProvider provider_adapterMode */ + #[DataProvider('provider_adapterMode')] public function test_loadContent(string $adapterMode): void { Session::put('adapterMode', $adapterMode); @@ -134,7 +135,7 @@ public function test_loadContent(string $adapterMode): void $this->assertDatabaseHas('h5p_contents_libraries', ['content_id' => 1, 'library_id' => $dependency->id, 'dependency_type' => 'preloaded']); $this->assertTrue($data->postUserStatistics); - $this->assertObjectHasAttribute('cid-' . $content->id, $data->contents); + $this->assertObjectHasProperty('cid-' . $content->id, $data->contents); $this->assertSame( "/api/progress?action=h5p_contents_user_data&content_id=:contentId&data_type=:dataType&sub_content_id=:subContentId&context=$context", $data->ajax['contentUserData'] @@ -152,9 +153,9 @@ public function test_loadContent(string $adapterMode): void $this->assertSame(config('h5p.saveFrequency'), $data->saveFreq); if (config('h5p.saveFrequency') === false) { - $this->assertObjectNotHasAttribute('user', $data); + $this->assertObjectNotHasProperty('user', $data); } else { - $this->assertObjectHasAttribute('user', $data); + $this->assertObjectHasProperty('user', $data); } $this->assertSame('Emily Quackfaster', $contentData->metadata['authors'][0]->name); @@ -178,12 +179,12 @@ public function test_setAlterParameterSettings(): void $content = H5PContent::factory()->create([ 'library_id' => $library->id, 'disable' => 2, - 'filtered' => 'here be filtered data', + 'filtered' => '{"here be":"filtered data"}', ]); $data = app(H5PViewConfig::class) ->loadContent($content->id) - ->setAlterParameterSettings(H5PAlterParametersSettingsDataObject::create(['useImageWidth' => $content->library->includeImageWidth()])) + ->setAlterParameterSettings(new H5PAlterParametersSettingsDataObject(useImageWidth: $content->library->includeImageWidth())) ->getConfig(); $this->assertSame($content->filtered, $data->contents->{"cid-$content->id"}->jsonContent); @@ -204,7 +205,7 @@ public function test_behaviorSettings(): void $data = app(H5PViewConfig::class) ->loadContent($content->id) - ->setAlterParameterSettings(H5PAlterParametersSettingsDataObject::create(['useImageWidth' => $content->library->includeImageWidth()])) + ->setAlterParameterSettings(new H5PAlterParametersSettingsDataObject(useImageWidth: $content->library->includeImageWidth())) ->getConfig(); $this->assertSame($content->filtered, $data->contents->{"cid-$content->id"}->jsonContent); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/ColumnTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/ColumnTest.php index bd03479479..f62dbd0853 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/ColumnTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/ColumnTest.php @@ -4,6 +4,7 @@ use App\Libraries\H5P\Packages\Column; use Illuminate\Foundation\Testing\WithFaker; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ColumnTest extends TestCase @@ -14,9 +15,7 @@ class ColumnTest extends TestCase 'columnWithOneVideoOneTextAndOneCollage' => '{"content":[{"content":{"params":{"visuals":{"fit":true,"controls":true},"playback":{"autoplay":false,"loop":false},"l10n":{"name":"Video","loading":"Video player loading...","noPlayers":"Found no video players that supports the given video format.","noSources":"Video is missing sources.","aborted":"Media playback has been aborted.","networkFailure":"Network failure.","cannotDecode":"Unable to decode media.","formatNotSupported":"Video format not supported.","mediaEncrypted":"Media encrypted.","unknownError":"Unknown error.","invalidYtId":"Invalid YouTube ID.","unknownYtId":"Unable to find video with the given YouTube ID.","restrictedYt":"The owner of this video does not allow it to be embedded."},"sources":[{"path":"videos/myVideo.mp4#tmp","mime":"video/mp4","copyright":{"license":"U"}}]},"library":"H5P.Video 1.3","subContentId":"6472809a-8eff-4987-ab9f-1079d9fe8a95"},"useSeparator":"auto"},{"content":{"params":{"text":"

Se opp!

\n"},"library":"H5P.AdvancedText 1.1","subContentId":"a5cd804e-ca65-419d-8c16-a7415821c4fa"},"useSeparator":"auto"},{"content":{"params":{"collage":{"template":"1","options":{"heightRatio":0.75,"spacing":0.5,"frame":true},"clips":[{"image":{"width":3000,"height":3000,"mime":"image/jpeg","path":"images/collageClip-5a3a5071b44dc.jpg#tmp"},"scale":1,"offset":{"top":0,"left":0}}]}},"library":"H5P.Collage 0.3","subContentId":"15c91b99-5cfe-4ce4-b7a0-519844ef9613"},"useSeparator":"auto"}]}', ]; - /** - * @test - */ + #[Test] public function alterSource_thenSuccess() { $columnSemantics = $this->structures['columnWithOneVideoOneTextAndOneCollage']; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/CoursePresentationTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/CoursePresentationTest.php index 72e73f05d7..13b750a276 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/CoursePresentationTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/CoursePresentationTest.php @@ -4,6 +4,7 @@ use App\Libraries\H5P\Packages\CoursePresentation; use Illuminate\Foundation\Testing\WithFaker; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class CoursePresentationTest extends TestCase @@ -16,9 +17,7 @@ class CoursePresentationTest extends TestCase 'oneSlidesWithEmptyAction' => '{"presentation":{"slides":[{"elements":[{"x":1.0893246187363834,"y":2.150537634408602,"width":78.21350762527233,"height":70.53763440860214,"action":"not an object","alwaysDisplayComments":false,"backgroundOpacity":0,"displayAsButton":false,"invisible":false,"solution":""}],"keywords":[],"slideBackgroundSelector":{}}]}}', ]; - /** - * @test - */ + #[Test] public function alterSource() { $coursePresentationSemantics = $this->structure['twoSlidesWithThreeElements']; @@ -57,9 +56,7 @@ public function alterSource() $this->assertEquals($coursePresentation->getPackageStructure(), $coursePresentationSemanticsObject); } - /** - * @test - */ + #[Test] public function emptyAction() { $coursePresentationSemantics = $this->structure['oneSlidesWithEmptyAction']; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/DragQuestionTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/DragQuestionTest.php index cabae02f68..481cdc2bc9 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/DragQuestionTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/DragQuestionTest.php @@ -5,6 +5,7 @@ use App\H5PLibrary; use App\Libraries\H5P\Packages\DragQuestion; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\Seeds\TestH5PSeeder; use Tests\TestCase; @@ -12,9 +13,7 @@ class DragQuestionTest extends TestCase { use RefreshDatabase; - /** - * @test - */ + #[Test] public function alterSemantics() { $this->seed(TestH5PSeeder::class); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/InteractiveVideoTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/InteractiveVideoTest.php index 2fa39a90f7..766c9ebef7 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/InteractiveVideoTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/InteractiveVideoTest.php @@ -3,6 +3,7 @@ namespace Tests\Integration\Libraries\H5P\Package; use App\Libraries\H5P\Packages\InteractiveVideo; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class InteractiveVideoTest extends TestCase @@ -13,9 +14,7 @@ class InteractiveVideoTest extends TestCase 'interactiveWithNoVideo' => '{"interactiveVideo":{"video":{"startScreenOptions":{"title":"Interactive Video","hideStartTitle":false,"copyright":""},"textTracks":[{"label":"Subtitles","kind":"subtitles","srcLang":"en"}]},"assets":{"interactions":[],"bookmarks":[]},"summary":{"task":{"library":"H5P.Summary 1.8","params":{"intro":"Choose the correct statement.","summaries":[{"subContentId":"2715e2a9-93cb-467a-a807-82d0623e93aa","tip":""}],"overallFeedback":[{"from":0,"to":100}],"solvedLabel":"Progress:","scoreLabel":"Wrong answers:","resultLabel":"Your result","labelCorrect":"Correct.","labelIncorrect":"Incorrect! Please try again.","labelCorrectAnswers":"Correct answers."},"subContentId":"6d04aa0d-5317-442b-8981-bd8cb4bc195e"},"displayAt":3}},"override":{"autoplay":false,"loop":false,"showBookmarksmenuOnLoad":false,"showRewind10":false,"preventSkipping":false,"deactivateSound":false},"l10n":{"interaction":"Interaction","play":"Play","pause":"Pause","mute":"Mute","unmute":"Unmute","quality":"Video Quality","captions":"Captions","close":"Close","fullscreen":"Fullscreen","exitFullscreen":"Exit Fullscreen","summary":"Summary","bookmarks":"Bookmarks","defaultAdaptivitySeekLabel":"Continue","continueWithVideo":"Continue with video","playbackRate":"Playback Rate","rewind10":"Rewind 10 Seconds","navDisabled":"Navigation is disabled","sndDisabled":"Sound is disabled","requiresCompletionWarning":"You need to answer all the questions correctly before continuing.","back":"Back","hours":"Hours","minutes":"Minutes","seconds":"Seconds","currentTime":"Current time:","totalTime":"Total time:","navigationHotkeyInstructions":"Use key k for starting and stopping video at any time","singleInteractionAnnouncement":"Interaction appeared:","multipleInteractionsAnnouncement":"Multiple interactions appeared.","videoPausedAnnouncement":"Video is paused"}}', ]; - /** - * @test - */ + #[Test] public function validateStructure() { $interactiveVideo = new InteractiveVideo("InvalidJson"); @@ -39,9 +38,7 @@ public function validateStructure() $this->assertTrue($interactiveVideo->validate()); } - /** - * @test - */ + #[Test] public function getQuestions() { $interactiveVideo = new InteractiveVideo(json_encode([ @@ -61,9 +58,7 @@ public function getQuestions() $this->assertEquals("Hvorfor Kiss eller AC/DC?", $compontentElements[0]['elements'][0]['question']); } - /** - * @test - */ + #[Test] public function alterSources() { $interactiveVideo = new InteractiveVideo(self::$elements['interactiveWithOneVideo']); @@ -78,9 +73,7 @@ public function alterSources() $this->assertJsonStringEqualsJsonString(json_encode($existingStructure), json_encode($structure)); } - /** - * @test - */ + #[Test] public function alterSourcesWithNoVideos() { $interactiveVideo = new InteractiveVideo(self::$elements['interactiveWithNoVideo']); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/MultiChoiceTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/MultiChoiceTest.php index 4a7415c37c..7d0c25e796 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/MultiChoiceTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/MultiChoiceTest.php @@ -3,6 +3,7 @@ namespace Tests\Integration\Libraries\H5P\Package; use App\Libraries\H5P\Packages\MultiChoice; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class MultiChoiceTest extends TestCase @@ -12,9 +13,7 @@ class MultiChoiceTest extends TestCase 'oneQuestionWithThreeAnswersAndOneImage' => '{"media":{"params":{"contentName":"Image","file":{"path":"path/to/image#tmp","mime":"image/jpeg","copyright":{"license":"U"},"width":1244,"height":709},"alt":"Norge"},"library":"H5P.Image 1.0","subContentId":"96732b0d-98fb-4d42-a6a8-b9f13192529d"},"answers":[{"correct":true,"tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""},"text":"Kong Harald"},{"correct":false,"tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""},"text":"Kong Olav"},{"correct":false,"tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""},"text":"Kong Haalpm"},{"correct":false,"tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""},"text":"Dronning Sonja"}],"UI":{"checkAnswerButton":"Check","showSolutionButton":"Show solution","tryAgainButton":"Retry","tipsLabel":"Show tip","scoreBarLabel":"Score","tipAvailable":"Tip available","feedbackAvailable":"Feedback available","readFeedback":"Read feedback","wrongAnswer":"Wrong answer","correctAnswer":"Correct answer","feedback":"You got @score of @total points","shouldCheck":"Should have been checked","shouldNotCheck":"Should not have been checked","noInput":"Please answer before viewing the solution"},"behaviour":{"enableRetry":true,"enableSolutionsButton":true,"type":"auto","singlePoint":false,"randomAnswers":true,"showSolutionsRequiresInput":true,"disableImageZooming":false,"confirmCheckDialog":false,"confirmRetryDialog":false,"autoCheck":false,"passPercentage":100},"confirmCheck":{"header":"Finish ?","body":"Are you sure you wish to finish ?","cancelLabel":"Cancel","confirmLabel":"Finish"},"confirmRetry":{"header":"Retry ?","body":"Are you sure you wish to retry ?","cancelLabel":"Cancel","confirmLabel":"Confirm"},"question":"Hvem er regent i Norge?"}', ]; - /** - * @test - */ + #[Test] public function getPackageSemantics() { $structure = json_decode('{"media":{"params":{}},"answers":[],"UI":{"checkAnswerButton":"Check","showSolutionButton":"Show solution","tryAgainButton":"Retry","tipsLabel":"Show tip","scoreBarLabel":"Score","tipAvailable":"Tip available","feedbackAvailable":"Feedback available","readFeedback":"Read feedback","wrongAnswer":"Wrong answer","correctAnswer":"Correct answer","feedback":"You got @score of @total points","shouldCheck":"Should have been checked","shouldNotCheck":"Should not have been checked","noInput":"Please answer before viewing the solution"},"behaviour":{"enableRetry":true,"enableSolutionsButton":true,"type":"auto","singlePoint":false,"randomAnswers":true,"showSolutionsRequiresInput":true,"disableImageZooming":false,"confirmCheckDialog":false,"confirmRetryDialog":false,"autoCheck":false,"passPercentage":100,"showScorePoints":true},"confirmCheck":{"header":"Finish ?","body":"Are you sure you wish to finish ?","cancelLabel":"Cancel","confirmLabel":"Finish"},"confirmRetry":{"header":"Retry ?","body":"Are you sure you wish to retry ?","cancelLabel":"Cancel","confirmLabel":"Confirm"},"question":""}'); @@ -24,21 +23,19 @@ public function getPackageSemantics() $this->assertEquals(JSON_ERROR_NONE, json_last_error()); $this->assertIsObject($generatedStructure); - $this->assertObjectHasAttribute("media", $generatedStructure); - $this->assertObjectHasAttribute("answers", $generatedStructure); - $this->assertObjectHasAttribute("UI", $generatedStructure); - $this->assertObjectHasAttribute("behaviour", $generatedStructure); - $this->assertObjectHasAttribute("confirmCheck", $generatedStructure); - $this->assertObjectHasAttribute("confirmRetry", $generatedStructure); - $this->assertObjectHasAttribute("question", $generatedStructure); + $this->assertObjectHasProperty("media", $generatedStructure); + $this->assertObjectHasProperty("answers", $generatedStructure); + $this->assertObjectHasProperty("UI", $generatedStructure); + $this->assertObjectHasProperty("behaviour", $generatedStructure); + $this->assertObjectHasProperty("confirmCheck", $generatedStructure); + $this->assertObjectHasProperty("confirmRetry", $generatedStructure); + $this->assertObjectHasProperty("question", $generatedStructure); $this->assertCount(7, array_keys((array)$generatedStructure)); $this->assertEquals((array)$structure, (array)$generatedStructure); } - /** - * @test - */ + #[Test] public function populateSemantics() { $multiChoice = new MultiChoice(); @@ -70,9 +67,7 @@ public function populateSemantics() $this->assertEquals($this->parameters['onequestionwiththreeanswers'], json_encode($semantics)); } - /** - * @test - */ + #[Test] public function populateSemanticsWithImage() { $this->markTestIncomplete(); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/OpenEndedQuestionTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/OpenEndedQuestionTest.php index daaab5c713..183592dbf2 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/OpenEndedQuestionTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/OpenEndedQuestionTest.php @@ -4,15 +4,14 @@ use App\Libraries\H5P\Packages\OpenEndedQuestion; use Illuminate\Foundation\Testing\WithFaker; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class OpenEndedQuestionTest extends TestCase { use WithFaker; - /** - * @test - */ + #[Test] public function validateStructure() { $openEndedQuesiton = new OpenEndedQuestion(''); @@ -38,9 +37,7 @@ public function validateStructure() $this->assertTrue($openEndedQuesiton->validate()); } - /** - * @test - */ + #[Test] public function getElements() { $params['params'] = [ diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/QuestionSetTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/QuestionSetTest.php index 1d2e43a0c1..0f169a23ad 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/QuestionSetTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/QuestionSetTest.php @@ -3,13 +3,12 @@ namespace Tests\Integration\Libraries\H5P\Package; use App\Libraries\H5P\Packages\QuestionSet; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class QuestionSetTest extends TestCase { - /** - * @test - */ + #[Test] public function getPackageSemantics() { $structure = json_decode('{"introPage":{"showIntroPage":false,"startButtonText":"Start Quiz","introduction":""},"progressType":"dots","passPercentage":50,"questions":[{"params":{}}],"texts":{"prevButton":"Previous question","nextButton":"Next question","finishButton":"Finish","textualProgress":"Question: @current of @total questions","jumpToQuestion":"Question %d of %total","questionLabel":"Question","readSpeakerProgress":"Question @current of @total","unansweredText":"Unanswered","answeredText":"Answered","currentQuestionText":"Current question"},"disableBackwardsNavigation":false,"randomQuestions":false,"endGame":{"showResultPage":true,"noResultMessage":"Finished","message":"Your result:","scoreString":"You got @score of @total points","successGreeting":"Congratulations!","successComment":"You did very well!","failGreeting":"You did not pass this time.","failComment":"Have another try!","solutionButtonText":"Show solution","retryButtonText":"Retry","finishButtonText":"Finish","showAnimations":false,"skippable":false,"skipButtonText":"Skip video"},"override":{}}'); @@ -19,15 +18,15 @@ public function getPackageSemantics() $this->assertEquals(JSON_ERROR_NONE, json_last_error()); $this->assertIsObject($generatedStructure); - $this->assertObjectHasAttribute("introPage", $generatedStructure); - $this->assertObjectHasAttribute("progressType", $generatedStructure); - $this->assertObjectHasAttribute("passPercentage", $generatedStructure); - $this->assertObjectHasAttribute("questions", $generatedStructure); - $this->assertObjectHasAttribute("texts", $generatedStructure); - $this->assertObjectHasAttribute("disableBackwardsNavigation", $generatedStructure); - $this->assertObjectHasAttribute("randomQuestions", $generatedStructure); - $this->assertObjectHasAttribute("endGame", $generatedStructure); - $this->assertObjectHasAttribute("override", $generatedStructure); + $this->assertObjectHasProperty("introPage", $generatedStructure); + $this->assertObjectHasProperty("progressType", $generatedStructure); + $this->assertObjectHasProperty("passPercentage", $generatedStructure); + $this->assertObjectHasProperty("questions", $generatedStructure); + $this->assertObjectHasProperty("texts", $generatedStructure); + $this->assertObjectHasProperty("disableBackwardsNavigation", $generatedStructure); + $this->assertObjectHasProperty("randomQuestions", $generatedStructure); + $this->assertObjectHasProperty("endGame", $generatedStructure); + $this->assertObjectHasProperty("override", $generatedStructure); $this->assertCount(9, array_keys((array)$generatedStructure)); $this->assertEquals((array)$structure, (array)$generatedStructure); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/QuestionnaireTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/QuestionnaireTest.php index 395b1faeee..f79aa8e340 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/QuestionnaireTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/QuestionnaireTest.php @@ -3,6 +3,7 @@ namespace Tests\Integration\Libraries\H5P\Package; use App\Libraries\H5P\Packages\Questionnaire; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class QuestionnaireTest extends TestCase @@ -12,9 +13,7 @@ class QuestionnaireTest extends TestCase 'oneText' => '{"questionnaireElements":[{"library":{"params":{"placeholderText":"Skriv din ærlige mening her.","inputRows":"3","question":"Hva er ditt syn på fiske?"},"library":"H5P.OpenEndedQuestion 1.0","subContentId":"5f1cab82-66cf-4df5-897d-a26ad3346eee"},"requiredField":false}],"successScreenOptions":{"enableSuccessScreen":false,"successScreenImage":{"params":{"contentName":"Image"},"library":"H5P.Image 1.0","subContentId":"de165056-273c-4b8c-a9ed-4ee240d70136"},"successMessage":"Du er nå ferdig med spørreskjemaet."},"uiElements":{"buttonLabels":{"prevLabel":"Forrige","continueLabel":"Fortsett","nextLabel":"Neste","submitLabel":"Send inn"},"accessibility":{"requiredTextExitLabel":"Lukk feilmelding","progressBarText":"Spørsmål %current av %max"},"requiredMessage":"Dette spørsmålet krever et svar","requiredText":"nødvendig","submitScreenTitle":"Du er nå ferdig med å svare på spørsmålene.","submitScreenSubtitle":"Trykk under for å sende inn dine svar"}}', ]; - /** - * @test - */ + #[Test] public function validateStructure() { $questionnaire = new Questionnaire("InvalidJson"); @@ -36,9 +35,7 @@ public function validateStructure() $this->assertTrue($questionnaire->validate()); } - /** - * @test - */ + #[Test] public function getQuestions() { $questionnaire = new Questionnaire(json_encode([ diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/SimpleMultiChoiceTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/SimpleMultiChoiceTest.php index d7d5b00e18..2d43e8dbba 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/SimpleMultiChoiceTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/SimpleMultiChoiceTest.php @@ -4,15 +4,14 @@ use App\Libraries\H5P\Packages\SimpleMultiChoice; use Illuminate\Foundation\Testing\WithFaker; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class SimpleMultiChoiceTest extends TestCase { use WithFaker; - /** - * @test - */ + #[Test] public function validate() { $simpleMultiChoice = new SimpleMultiChoice(''); @@ -35,9 +34,7 @@ public function validate() $this->assertTrue($simpleMultiChoice->validate()); } - /** - * @test - */ + #[Test] public function getElements() { $alternatives = [ diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/VideoTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/VideoTest.php index bdb429f4bb..a5717720fc 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/VideoTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Package/VideoTest.php @@ -4,15 +4,14 @@ use App\Libraries\H5P\Packages\Video; use Illuminate\Foundation\Testing\WithFaker; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class VideoTest extends TestCase { use WithFaker; - /** - * @test - */ + #[Test] public function alterSource_thenSuccess() { $orginalFile = 'videos/sources-originalFile'; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Storage/H5pCerpusStorageTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Storage/H5pCerpusStorageTest.php index 2fa0347ded..d5e8f628b7 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Storage/H5pCerpusStorageTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/Storage/H5pCerpusStorageTest.php @@ -8,6 +8,7 @@ use App\Libraries\H5P\Video\NullVideoAdapter; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Storage; +use PHPUnit\Framework\Attributes\DataProvider; use Psr\Log\NullLogger; use Tests\TestCase; @@ -15,7 +16,7 @@ class H5pCerpusStorageTest extends TestCase { use RefreshDatabase; - /** @dataProvider provide_test_getUpdateScript */ + #[DataProvider('provide_test_getUpdateScript')] public function test_getUpgradeScript(array $libConfig): void { $disk = Storage::fake(); @@ -37,7 +38,7 @@ public function test_getUpgradeScript(array $libConfig): void $this->assertStringContainsString($file, $path); } - public function provide_test_getUpdateScript(): \Generator + public static function provide_test_getUpdateScript(): \Generator { yield 'withoutPatch' => [[ 'name' => 'H5P.Blanks', diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/h5pTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/h5pTest.php index 8579b237ea..f0195c3d71 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/h5pTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/H5P/h5pTest.php @@ -9,6 +9,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; +use PHPUnit\Framework\Attributes\Test; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use Tests\Helpers\TestHelpers; @@ -102,9 +103,7 @@ private function createUploadedFiles($files) } } - /** - * @test - */ + #[Test] public function createWithOutVersioningContent() { $request = Request::create('', parameters: [ @@ -125,7 +124,7 @@ public function createWithOutVersioningContent() $this->assertFileExists("{$this->getContentDirectory()}/{$content['id']}/images/image-5805bff7c5330.jpg"); $this->assertJson($content['params'], "Params not set correct"); $contentParamsDecoded = json_decode($content['params']); - $this->assertObjectHasAttribute("cards", $contentParamsDecoded); + $this->assertObjectHasProperty("cards", $contentParamsDecoded); $this->assertNotEmpty($contentParamsDecoded->cards); $this->assertEquals("Hvor er ørreten?", $contentParamsDecoded->cards[0]->text); $this->assertEquals("Her!", $contentParamsDecoded->cards[0]->answer); @@ -149,7 +148,7 @@ public function createWithOutVersioningContent() $this->assertEquals("Updated Test Title", $updatedContent['title']); $this->assertEquals("createContentUserId", $updatedContent['user_id']); $contentParamsDecoded = json_decode($updatedContent['params']); - $this->assertObjectHasAttribute("cards", $contentParamsDecoded); + $this->assertObjectHasProperty("cards", $contentParamsDecoded); $this->assertNotEmpty($contentParamsDecoded->cards); $this->assertEquals("Kan du se hvor ørreten er?", $contentParamsDecoded->cards[0]->text); $this->assertEquals("Her!", $contentParamsDecoded->cards[0]->answer); @@ -164,9 +163,7 @@ public function createWithOutVersioningContent() $this->assertDatabaseHas("h5p_contents_metadata", ["id" => 1, 'content_id' => 1, 'license' => "BY"]); } - /** - * @test - */ + #[Test] public function createWithVersioningContent() { $request = Request::create('', parameters: [ @@ -187,7 +184,7 @@ public function createWithVersioningContent() $this->assertFileExists("{$this->getContentDirectory()}/{$content['id']}/images/image-5805bff7c5330.jpg"); $this->assertJson($content['params'], "Params not set correct"); $contentParamsDecoded = json_decode($content['params']); - $this->assertObjectHasAttribute("cards", $contentParamsDecoded); + $this->assertObjectHasProperty("cards", $contentParamsDecoded); $this->assertNotEmpty($contentParamsDecoded->cards); $this->assertEquals("Hvor er ørreten?", $contentParamsDecoded->cards[0]->text); $this->assertEquals("Her!", $contentParamsDecoded->cards[0]->answer); @@ -210,7 +207,7 @@ public function createWithVersioningContent() $this->assertEquals("Updated Test Title", $updatedContent['title']); $this->assertEquals("createContentUserId", $updatedContent['user_id']); $contentParamsDecoded = json_decode($updatedContent['params']); - $this->assertObjectHasAttribute("cards", $contentParamsDecoded); + $this->assertObjectHasProperty("cards", $contentParamsDecoded); $this->assertNotEmpty($contentParamsDecoded->cards); $this->assertEquals("Kan du se hvor ørreten er?", $contentParamsDecoded->cards[0]->text); $this->assertEquals("Her!", $contentParamsDecoded->cards[0]->answer); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Libraries/QuestionSetConverterTest.php b/sourcecode/apis/contentauthor/tests/Integration/Libraries/QuestionSetConverterTest.php index c9d078a377..71d27e977b 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Libraries/QuestionSetConverterTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Libraries/QuestionSetConverterTest.php @@ -14,6 +14,7 @@ use App\QuestionSetQuestionAnswer; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; +use Illuminate\Support\Facades\Event; use Tests\TestCase; class QuestionSetConverterTest extends TestCase @@ -23,7 +24,7 @@ class QuestionSetConverterTest extends TestCase public function testCreateMillionaireGameFromQuestionSet(): void { - $this->expectsEvents([GameWasSaved::class]); + Event::fake(); $questionSet = QuestionSet::factory()->create([ 'is_published' => false, @@ -75,11 +76,12 @@ public function testCreateMillionaireGameFromQuestionSet(): void $this->assertSame($a1->correct, $convertedCard->answers[0]->isCorrect); $this->assertSame($a2->answer_text, $convertedCard->answers[1]->answer); $this->assertSame($a2->correct, $convertedCard->answers[1]->isCorrect); + Event::assertDispatched(GameWasSaved::class); } public function testCreateMillionaireGameFromArray(): void { - $this->expectsEvents([GameWasSaved::class]); + Event::fake(); $questionSet = [ 'owner' => $this->faker->uuid, @@ -145,5 +147,6 @@ public function testCreateMillionaireGameFromArray(): void $this->assertSame($inputCard['answers'][0]['isCorrect'], $convertedCard->answers[0]->isCorrect); $this->assertSame($inputCard['answers'][1]['answerText'], $convertedCard->answers[1]->answer); $this->assertSame($inputCard['answers'][1]['isCorrect'], $convertedCard->answers[1]->isCorrect); + Event::assertDispatched(GameWasSaved::class); } } diff --git a/sourcecode/apis/contentauthor/tests/Integration/Listeners/Link/HandleVersioningTest.php b/sourcecode/apis/contentauthor/tests/Integration/Listeners/Link/HandleVersioningTest.php deleted file mode 100644 index aeb9ca9cab..0000000000 --- a/sourcecode/apis/contentauthor/tests/Integration/Listeners/Link/HandleVersioningTest.php +++ /dev/null @@ -1,68 +0,0 @@ -create(); - $event = new LinkWasSaved($link, ContentVersion::PURPOSE_CREATE); - (new HandleVersioning())->handle($event); - - $link->refresh(); - $this->assertNotNull($link->version_id); - - $this->assertDatabaseCount('content_versions', 1); - $this->assertDatabaseHas('content_versions', [ - 'id' => $link->version_id, - 'content_id' => $link->id, - 'content_type' => Content::TYPE_LINK, - 'parent_id' => null, - 'version_purpose' => ContentVersion::PURPOSE_CREATE, - ]); - } - - public function testHandle_newVersion(): void - { - $link = Link::factory()->create([ - 'version_id' => $this->faker->uuid, - ]); - $parentVersion = ContentVersion::factory()->create([ - 'id' => $link->version_id, - 'content_id' => $link->id, - 'content_type' => Content::TYPE_LINK, - 'version_purpose' => ContentVersion::PURPOSE_CREATE, - 'parent_id' => null, - ]); - $event = new LinkWasSaved($link, ContentVersion::PURPOSE_UPDATE); - (new HandleVersioning())->handle($event); - - $link->refresh(); - $this->assertNotNull($link->version_id); - $this->assertNotSame($link->version_id, $parentVersion->id); - - $this->assertDatabaseCount('content_versions', 2); - $this->assertDatabaseHas('content_versions', [ - 'id' => $link->version_id, - 'content_id' => $link->id, - 'content_type' => Content::TYPE_LINK, - 'parent_id' => $parentVersion->id, - 'version_purpose' => ContentVersion::PURPOSE_UPDATE, - ]); - } -} diff --git a/sourcecode/apis/contentauthor/tests/Integration/Models/ContentAttributionTest.php b/sourcecode/apis/contentauthor/tests/Integration/Models/ContentAttributionTest.php index d533d44111..7a76cb0bab 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Models/ContentAttributionTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Models/ContentAttributionTest.php @@ -24,8 +24,8 @@ public function testModelWorks() $this->assertInstanceOf(Attribution::class, $attribution); - $this->assertObjectHasAttribute('origin', $attribution); - $this->assertObjectHasAttribute('originators', $attribution); + $this->assertObjectHasProperty('origin', $attribution); + $this->assertObjectHasProperty('originators', $attribution); $this->assertNull($attribution->getOrigin()); $this->assertEmpty($attribution->getOriginators()); diff --git a/sourcecode/apis/contentauthor/tests/Integration/Models/ContentLanguageTest.php b/sourcecode/apis/contentauthor/tests/Integration/Models/ContentLanguageTest.php index 4f14da6a08..d9e759cb03 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Models/ContentLanguageTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Models/ContentLanguageTest.php @@ -5,11 +5,12 @@ use App\ContentLanguage; use Exception; use Generator; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class ContentLanguageTest extends TestCase { - /** @dataProvider codeProvider */ + #[DataProvider('codeProvider')] public function testLanguageCodeWillFailIfLanguageIsNotTwoOrThreeCharacter(string $code) { $this->expectException(Exception::class); @@ -19,7 +20,7 @@ public function testLanguageCodeWillFailIfLanguageIsNotTwoOrThreeCharacter(strin $contentLanguage->language_code = $code; } - /** @dataProvider codeProvider */ + #[DataProvider('codeProvider')] public function testLanguageCodeWillFailIfLanguageIsNotTwoOrThreeCharactersMassAssignment(string $code) { $this->expectException(Exception::class); @@ -30,7 +31,7 @@ public function testLanguageCodeWillFailIfLanguageIsNotTwoOrThreeCharactersMassA ]); } - public function codeProvider(): Generator + public static function codeProvider(): Generator { yield['e']; yield['engl']; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Models/ContentVersionTest.php b/sourcecode/apis/contentauthor/tests/Integration/Models/ContentVersionTest.php index 0e9a153e3b..c957a8e1e9 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Models/ContentVersionTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Models/ContentVersionTest.php @@ -12,6 +12,7 @@ use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class ContentVersionTest extends TestCase @@ -141,7 +142,7 @@ public function test_latestLeaf_nonExisting(): void ContentVersion::latestLeaf('123'); } - /** @dataProvider providerLinearVersioning */ + #[DataProvider('providerLinearVersioning')] public function testLinearVersioning(bool $parentLinear, bool $newLinear): void { $v1 = ContentVersion::factory()->create([ @@ -170,7 +171,7 @@ public function testLinearVersioning(bool $parentLinear, bool $newLinear): void $this->assertSame($v2->id, $v3->parent_id); } - public function providerLinearVersioning(): Generator + public static function providerLinearVersioning(): Generator { yield 'linear' => [true, true]; yield 'nonLinearParent' => [false, true]; @@ -352,7 +353,7 @@ public function test_findLatestLeaf_linear_multiple(): void $this->assertSame($child_TRANSLATION_UPDATE->id, $child_TRANSLATION->latestLeafVersion()->id); } - /** @dataProvider provider_isLeaf */ + #[DataProvider('provider_isLeaf')] public function test_isLeaf(string $purpose, bool $parentLeaf, bool $childLeaf): void { $first = ContentVersion::factory()->create(); @@ -365,7 +366,7 @@ public function test_isLeaf(string $purpose, bool $parentLeaf, bool $childLeaf): $this->assertSame($childLeaf, $second->isLeaf()); } - public function provider_isLeaf(): Generator + public static function provider_isLeaf(): Generator { // Parent is no longer a leaf node yield 'update' => [ContentVersion::PURPOSE_UPDATE, false, true]; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Models/H5PContentRequestShouldBecomeNewVersionTest.php b/sourcecode/apis/contentauthor/tests/Integration/Models/H5PContentRequestShouldBecomeNewVersionTest.php index a1e4819aec..cc85a0582a 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Models/H5PContentRequestShouldBecomeNewVersionTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Models/H5PContentRequestShouldBecomeNewVersionTest.php @@ -8,11 +8,10 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Http\Request; +use PHPUnit\Framework\Attributes\CoversMethod; use Tests\TestCase; -/** - * @covers \App\H5PContent::requestShouldBecomeNewVersion - */ +#[CoversMethod(H5PContent::class, 'requestShouldBecomeNewVersion')] class H5PContentRequestShouldBecomeNewVersionTest extends TestCase { use RefreshDatabase; diff --git a/sourcecode/apis/contentauthor/tests/Integration/Models/H5PLibraryTest.php b/sourcecode/apis/contentauthor/tests/Integration/Models/H5PLibraryTest.php index 310c8087ee..cc5b8ad555 100644 --- a/sourcecode/apis/contentauthor/tests/Integration/Models/H5PLibraryTest.php +++ b/sourcecode/apis/contentauthor/tests/Integration/Models/H5PLibraryTest.php @@ -5,15 +5,14 @@ use App\H5PLibrary; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Collection; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class H5PLibraryTest extends TestCase { use RefreshDatabase; - /** - * @dataProvider provider_getLibraryString - */ + #[DataProvider('provider_getLibraryString')] public function test_getLibraryString($usePatch, $hasPatch, $expected): void { $lib = H5PLibrary::factory()->make([ @@ -23,7 +22,7 @@ public function test_getLibraryString($usePatch, $hasPatch, $expected): void $this->assertSame($expected, $lib->getLibraryString($usePatch)); } - public function provider_getLibraryString(): \Generator + public static function provider_getLibraryString(): \Generator { yield 0 => [null, false, 'H5P.Foobar 1.2']; yield 1 => [null, true, 'H5P.Foobar 1.2.3']; @@ -33,9 +32,7 @@ public function provider_getLibraryString(): \Generator yield 5 => [false, true, 'H5P.Foobar 1.2']; } - /** - * @dataProvider provider_getFolderName - */ + #[DataProvider('provider_getFolderName')] public function test_getFolderName($usePatch, $hasPatch, $expected): void { $lib = H5PLibrary::factory()->make([ @@ -45,7 +42,7 @@ public function test_getFolderName($usePatch, $hasPatch, $expected): void $this->assertSame($expected, $lib->getFolderName($usePatch)); } - public function provider_getFolderName(): \Generator + public static function provider_getFolderName(): \Generator { yield 0 => [null, false, 'H5P.Foobar-1.2']; yield 1 => [null, true, 'H5P.Foobar-1.2.3']; @@ -55,13 +52,13 @@ public function provider_getFolderName(): \Generator yield 5 => [false, true, 'H5P.Foobar-1.2']; } - /** @dataProvider provider_libraryToFolderName */ + #[DataProvider('provider_libraryToFolderName')] public function test_libraryToFolderName($data, $usePatch, $expected): void { $this->assertSame($expected, H5PLibrary::libraryToFolderName($data, $usePatch)); } - public function provider_libraryToFolderName(): \Generator + public static function provider_libraryToFolderName(): \Generator { yield 0 => [['name' => 'H5P.Foobar', 'majorVersion' => 2, 'minorVersion' => 1, 'patchVersion' => 4, 'patchVersionInFolderName' => true], false, 'H5P.Foobar-2.1']; yield 1 => [['name' => 'H5P.Foobar', 'majorVersion' => 2, 'minorVersion' => 1, 'patchVersion' => 4, 'patchVersionInFolderName' => false], true, 'H5P.Foobar-2.1.4']; @@ -72,27 +69,27 @@ public function provider_libraryToFolderName(): \Generator yield 6 => [['name' => 'H5P.Foobar', 'majorVersion' => 2, 'minorVersion' => 1, 'patchVersionInFolderName' => true], false, 'H5P.Foobar-2.1']; } - /** @dataProvider provider_libraryToFolderNameExceptions */ + #[DataProvider('provider_libraryToFolderNameExceptions')] public function test_libraryToFolderNameExceptions($data, $usePatch): void { $this->expectException(\InvalidArgumentException::class); H5PLibrary::libraryToFolderName($data, $usePatch); } - public function provider_libraryToFolderNameExceptions(): \Generator + public static function provider_libraryToFolderNameExceptions(): \Generator { yield 0 => [['name' => 'H5P.Foobar', 'majorVersion' => 2, 'minorVersion' => 1, 'patchVersionInFolderName' => true], true]; yield 1 => [['name' => 'H5P.Foobar', 'majorVersion' => 2, 'minorVersion' => 1, 'patchVersionInFolderName' => false], true]; yield 2 => [['name' => 'H5P.Foobar', 'majorVersion' => 2, 'minorVersion' => 1, 'patchVersionInFolderName' => true], null]; } - /** @dataProvider provider_libraryToString */ + #[DataProvider('provider_libraryToString')] public function test_libraryToString($data, $usePatch, $expected): void { $this->assertSame($expected, H5PLibrary::libraryToString($data, $usePatch)); } - public function provider_libraryToString(): \Generator + public static function provider_libraryToString(): \Generator { yield 0 => [['name' => 'H5P.Foobar', 'majorVersion' => 2, 'minorVersion' => 1, 'patchVersion' => 4, 'patchVersionInFolderName' => true], null, 'H5P.Foobar 2.1.4']; yield 1 => [['name' => 'H5P.Foobar', 'majorVersion' => 2, 'minorVersion' => 1, 'patchVersion' => 4, 'patchVersionInFolderName' => false], null, 'H5P.Foobar 2.1']; diff --git a/sourcecode/apis/contentauthor/tests/TestCase.php b/sourcecode/apis/contentauthor/tests/TestCase.php index 3fbfbb1463..6fa996e2b2 100644 --- a/sourcecode/apis/contentauthor/tests/TestCase.php +++ b/sourcecode/apis/contentauthor/tests/TestCase.php @@ -8,8 +8,6 @@ abstract class TestCase extends BaseTestCase { - use CreatesApplication; - private static Mix $fakeMix; protected function setUp(): void diff --git a/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/ContentType/BaseH5PContentTest.php b/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/ContentType/BaseH5PContentTest.php index 101be7c2ba..5eea4ba808 100644 --- a/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/ContentType/BaseH5PContentTest.php +++ b/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/ContentType/BaseH5PContentTest.php @@ -5,6 +5,7 @@ namespace Tests\Unit\Libraries\H5P\ContentType; use App\Libraries\H5P\ContentType\BaseH5PContent; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -19,7 +20,7 @@ public function setUp(): void $this->abstractClass = $this->getMockForAbstractClass(BaseH5PContent::class); } - /** @dataProvider provider_id */ + #[DataProvider('provider_id')] public function test_id(string $id, bool $useHash, string $expected): void { $response = $this->abstractClass->setId($id, $useHash); @@ -27,7 +28,7 @@ public function test_id(string $id, bool $useHash, string $expected): void $this->assertSame($expected, $response->getId()); } - public function provider_id(): \Generator + public static function provider_id(): \Generator { yield 'noHash' => ['42', false, '-42']; yield 'hash' => ['42', true, '-' . md5('42')]; @@ -37,13 +38,13 @@ public function test_getImportJson(): void { $response = $this->abstractClass->getImportJson(); - $this->assertObjectHasAttribute('h5p_lib', $response); - $this->assertObjectHasAttribute('h5p_content_data', $response); - $this->assertObjectHasAttribute('title', $response); - $this->assertObjectHasAttribute('content_type', $response); - $this->assertObjectHasAttribute('nodeId', $response); - $this->assertObjectHasAttribute('license', $response); - $this->assertObjectHasAttribute('license', $response->license); + $this->assertObjectHasProperty('h5p_lib', $response); + $this->assertObjectHasProperty('h5p_content_data', $response); + $this->assertObjectHasProperty('title', $response); + $this->assertObjectHasProperty('content_type', $response); + $this->assertObjectHasProperty('nodeId', $response); + $this->assertObjectHasProperty('license', $response); + $this->assertObjectHasProperty('license', $response->license); $this->assertIsObject($response->h5p_content_data); $this->assertSame('h5p_content', $response->content_type); diff --git a/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/H5pPresaveTest.php b/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/H5pPresaveTest.php index 0613193fce..7df43f8d29 100644 --- a/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/H5pPresaveTest.php +++ b/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/H5pPresaveTest.php @@ -10,6 +10,7 @@ use InvalidArgumentException; use League\Flysystem\Filesystem; use League\Flysystem\Local\LocalFilesystemAdapter; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class H5pPresaveTest extends TestCase @@ -45,9 +46,7 @@ public function testGetScriptUrl(): void ); } - /** - * @dataProvider getBadLibraries - */ + #[DataProvider('getBadLibraries')] public function testCannotGetUrlOfNonExistentScript(string $library): void { $this->expectException(InvalidArgumentException::class); @@ -63,9 +62,7 @@ public function testGetScriptContents(): void ); } - /** - * @dataProvider getBadLibraries - */ + #[DataProvider('getBadLibraries')] public function testCannotGetContentsOfNonExistentScripts(string $library): void { $this->expectException(InvalidArgumentException::class); @@ -73,7 +70,7 @@ public function testCannotGetContentsOfNonExistentScripts(string $library): void $this->presave->getScriptContents($library); } - public function getBadLibraries(): Generator + public static function getBadLibraries(): Generator { yield 'non-existent script directory' => ['H5P.Bar']; yield 'existing directory, but no presave.js' => ['BadLibrary']; diff --git a/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/LtiToH5PLanguageTest.php b/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/LtiToH5PLanguageTest.php index 1e7341d07c..fc4d66b2e9 100644 --- a/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/LtiToH5PLanguageTest.php +++ b/sourcecode/apis/contentauthor/tests/Unit/Libraries/H5P/LtiToH5PLanguageTest.php @@ -4,17 +4,18 @@ use App\Libraries\H5P\LtiToH5PLanguage; use Generator; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; class LtiToH5PLanguageTest extends TestCase { - /** @dataProvider dataset */ + #[DataProvider('dataset')] public function testConvert($expected, $input = null, $default = null): void { $this->assertEquals($expected, LtiToH5PLanguage::convert($input, $default)); } - public function dataset(): Generator + public static function dataset(): Generator { yield 'nb-nb' => ['nb', 'nb-no']; yield 'nn' => ['nn', 'nn']; diff --git a/sourcecode/apis/contentauthor/tests/Unit/Traits/H5PBehaviorSettingsTest.php b/sourcecode/apis/contentauthor/tests/Unit/Traits/H5PBehaviorSettingsTest.php index c96ddf06df..b496307942 100644 --- a/sourcecode/apis/contentauthor/tests/Unit/Traits/H5PBehaviorSettingsTest.php +++ b/sourcecode/apis/contentauthor/tests/Unit/Traits/H5PBehaviorSettingsTest.php @@ -6,15 +6,14 @@ use App\Libraries\H5P\Packages\CoursePresentation; use App\Libraries\H5P\Packages\MultiChoice; use App\Traits\H5PBehaviorSettings; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; class H5PBehaviorSettingsTest extends TestCase { use H5PBehaviorSettings; - /** - * @test - */ + #[Test] public function disableRetry_validStructures() { $behaviorSettings = BehaviorSettingsDataObject::create(false); @@ -33,9 +32,7 @@ public function disableRetry_validStructures() $this->assertTrue($this->packageStructure->behaviour->enableRetry); } - /** - * @test - */ + #[Test] public function disableRetry_invalidStructures() { $behaviorSettings = BehaviorSettingsDataObject::create(false); @@ -46,9 +43,7 @@ public function disableRetry_invalidStructures() $this->assertJsonStringEqualsJsonString('{"missingBehavior":true}', $this->getPackageStructure(true)); } - /** - * @test - */ + #[Test] public function showSummary_validStructures() { $behaviorSettings = BehaviorSettingsDataObject::create(); diff --git a/sourcecode/apis/contentauthor/tests/bootstrap.php b/sourcecode/apis/contentauthor/tests/bootstrap.php deleted file mode 100644 index e5cb08f30e..0000000000 --- a/sourcecode/apis/contentauthor/tests/bootstrap.php +++ /dev/null @@ -1,19 +0,0 @@ -createApplication(); - -Artisan::call('config:clear'); -Artisan::call('route:clear'); diff --git a/sourcecode/apis/contentauthor/tools/php-cs-fixer/composer.lock b/sourcecode/apis/contentauthor/tools/php-cs-fixer/composer.lock index 3281658f4f..f19193a414 100644 --- a/sourcecode/apis/contentauthor/tools/php-cs-fixer/composer.lock +++ b/sourcecode/apis/contentauthor/tools/php-cs-fixer/composer.lock @@ -6,32 +6,104 @@ ], "content-hash": "503353d1e78bf66bc9372de4d8c41dda", "packages": [ + { + "name": "clue/ndjson-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\NDJson\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", + "keywords": [ + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" + ], + "support": { + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-12-23T10:58:28+00:00" + }, { "name": "composer/pcre", - "version": "3.1.0", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -59,7 +131,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -75,28 +147,28 @@ "type": "tidelift" } ], - "time": "2022-11-17T09:50:14+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -138,9 +210,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -156,20 +228,20 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -180,7 +252,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -204,9 +276,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -222,43 +294,32 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { - "name": "doctrine/annotations", - "version": "2.0.1", + "name": "evenement/evenement", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", "shasum": "" }, "require": { - "doctrine/lexer": "^2 || ^3", - "ext-tokenizer": "*", - "php": "^7.2 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" + "php": ">=7.0" }, "require-dev": { - "doctrine/cache": "^2.0", - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + "phpunit/phpunit": "^9 || ^6" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + "Evenement\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -267,67 +328,53 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "description": "Événement is a very simple event dispatching library for PHP", "keywords": [ - "annotations", - "docblock", - "parser" + "event-dispatcher", + "event-emitter" ], "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" }, - "time": "2023-02-02T22:02:53+00:00" + "time": "2023-08-08T05:53:35+00:00" }, { - "name": "doctrine/lexer", - "version": "3.0.0", + "name": "fidry/cpu-core-counter", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" + "Fidry\\CpuCoreCounter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -336,96 +383,80 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "description": "Tiny utility to get the number of CPU cores.", "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" + "CPU", + "core" ], "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" + "url": "https://github.com/theofidry", + "type": "github" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2024-08-06T10:04:20+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.15.1", + "version": "v3.65.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "d48755372a113bddb99f749e34805d83f3acfe04" + "reference": "79d4f3e77b250a7d8043d76c6af8f0695e8a469f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d48755372a113bddb99f749e34805d83f3acfe04", - "reference": "d48755372a113bddb99f749e34805d83f3acfe04", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/79d4f3e77b250a7d8043d76c6af8f0695e8a469f", + "reference": "79d4f3e77b250a7d8043d76c6af8f0695e8a469f", "shasum": "" }, "require": { - "composer/semver": "^3.3", + "clue/ndjson-react": "^1.0", + "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^2", - "doctrine/lexer": "^2 || ^3", + "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.2", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" + "react/child-process": "^0.6.5", + "react/event-loop": "^1.0", + "react/promise": "^2.0 || ^3.0", + "react/socket": "^1.0", + "react/stream": "^1.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.28", + "symfony/polyfill-php80": "^1.28", + "symfony/polyfill-php81": "^1.28", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", + "facile-it/paraunit": "^1.3.1 || ^2.4", + "infection/infection": "^0.29.8", + "justinrainbow/json-schema": "^5.3 || ^6.0", + "keradus/cli-executor": "^2.1", + "mikey179/vfsstream": "^1.6.12", + "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", + "phpunit/phpunit": "^9.6.21 || ^10.5.38 || ^11.4.3", + "symfony/var-dumper": "^5.4.47 || ^6.4.15 || ^7.1.8", + "symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.1.6" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -438,7 +469,10 @@ "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -463,7 +497,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.15.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.65.0" }, "funding": [ { @@ -471,56 +505,7 @@ "type": "github" } ], - "time": "2023-03-13T23:26:30+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" + "time": "2024-11-25T00:39:24+00:00" }, { "name": "psr/container", @@ -627,16 +612,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -671,35 +656,565 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "react/cache", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2022-11-30T15:59:55+00:00" + }, + { + "name": "react/child-process", + "version": "v0.6.5", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", + "react/socket": "^1.8", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.5" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-09-16T13:41:56+00:00" + }, + { + "name": "react/dns", + "version": "v1.13.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.13.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-13T14:18:03+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-13T13:48:05+00:00" + }, + { + "name": "react/promise", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-05-24T10:39:05+00:00" + }, + { + "name": "react/socket", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "support": { + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.16.0" }, - "time": "2021-07-14T16:46:02+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-07-26T10:38:09+00:00" + }, + { + "name": "react/stream", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" }, { "name": "sebastian/diff", - "version": "5.0.0", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "70dd1b20bc198da394ad542e988381b44e64e39f" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/70dd1b20bc198da394ad542e988381b44e64e39f", - "reference": "70dd1b20bc198da394ad542e988381b44e64e39f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", + "phpunit/phpunit": "^11.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -731,7 +1246,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -739,53 +1255,50 @@ "type": "github" } ], - "time": "2023-02-03T07:00:31+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "symfony/console", - "version": "v6.2.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45" + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45", - "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -814,12 +1327,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.7" + "source": "https://github.com/symfony/console/tree/v7.2.0" }, "funding": [ { @@ -835,20 +1348,20 @@ "type": "tidelift" } ], - "time": "2023-02-25T17:00:03+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.1", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -857,7 +1370,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -886,7 +1399,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -902,28 +1415,29 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:25:55+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.2.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "404b307de426c1c488e5afad64403e5f145e82a5" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/404b307de426c1c488e5afad64403e5f145e82a5", - "reference": "404b307de426c1c488e5afad64403e5f145e82a5", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -931,17 +1445,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -969,7 +1479,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.7" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -985,33 +1495,30 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.1", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -1048,7 +1555,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -1064,27 +1571,30 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/filesystem", - "version": "v6.2.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "82b6c62b959f642d000456f08c6d219d749215b3" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", - "reference": "82b6c62b959f642d000456f08c6d219d749215b3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -1111,7 +1621,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.7" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -1127,27 +1637,27 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/finder", - "version": "v6.2.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -1175,7 +1685,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.7" + "source": "https://github.com/symfony/finder/tree/v7.2.0" }, "funding": [ { @@ -1191,25 +1701,25 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.2.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", - "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -1242,7 +1752,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.2.7" + "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" }, "funding": [ { @@ -1258,24 +1768,24 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2024-11-20T11:17:29+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1285,9 +1795,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1324,7 +1831,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -1340,33 +1847,30 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1405,7 +1909,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -1421,33 +1925,30 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1489,7 +1990,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -1505,24 +2006,24 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -1532,9 +2033,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1572,7 +2070,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -1588,30 +2086,27 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1655,7 +2150,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -1671,30 +2166,27 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.27.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1734,7 +2226,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -1750,24 +2242,24 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v6.2.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/680e8a2ea6b3f87aecc07a6a65a203ae573d1902", - "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -1795,7 +2287,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.2.7" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -1811,36 +2303,34 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.2.1", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -1880,7 +2370,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -1896,25 +2386,25 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.2.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" + "reference": "696f418b0d722a4225e1c3d95489d262971ca924" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", - "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/696f418b0d722a4225e1c3d95489d262971ca924", + "reference": "696f418b0d722a4225e1c3d95489d262971ca924", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/service-contracts": "^1|^2|^3" + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -1942,7 +2432,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.2.7" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.0" }, "funding": [ { @@ -1958,38 +2448,39 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/string", - "version": "v6.2.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "67b8c1eec78296b85dc1c7d9743830160218993d" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d", - "reference": "67b8c1eec78296b85dc1c7d9743830160218993d", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": "<2.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2028,7 +2519,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.7" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -2044,16 +2535,16 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2024-11-13T13:31:26+00:00" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform": {}, + "platform-dev": {}, + "plugin-api-version": "2.6.0" } diff --git a/sourcecode/apis/contentauthor/webpack.mix.js b/sourcecode/apis/contentauthor/webpack.mix.js index 2b5f737b99..8b857a6a08 100644 --- a/sourcecode/apis/contentauthor/webpack.mix.js +++ b/sourcecode/apis/contentauthor/webpack.mix.js @@ -30,13 +30,14 @@ mix .sass('resources/assets/entrypoints/link.scss', 'css/link.css') .js('resources/assets/entrypoints/maxscore.js', 'js/maxscore.js') .js('resources/assets/entrypoints/metadata.js', 'js/metadata.js') - .js('resources/assets/entrypoints/ndla-contentbrowser.js', 'js/ndla-contentbrowser.js') .sass('resources/assets/entrypoints/ndlah5p-edit.scss', 'css/ndlah5p-edit.css') .sass('resources/assets/entrypoints/ndlah5p-editor.scss', 'css/ndlah5p-editor.css') .sass('resources/assets/entrypoints/ndlah5p-iframe.scss', 'css/ndlah5p-iframe.css') .sass('resources/assets/entrypoints/ndlah5p-iframe-legacy.scss', 'css/ndlah5p-iframe-legacy.css') + .js('resources/assets/entrypoints/ndla-audio.js', 'js/ndla-audio.js') + .js('resources/assets/entrypoints/ndla-image.js', 'js/ndla-image.js') + .js('resources/assets/entrypoints/ndla-video.js', 'js/ndla-video.js') .js('resources/assets/entrypoints/react-article.js', 'js/react-article.js') - .js('resources/assets/entrypoints/react-contentbrowser.js', 'js/react-contentbrowser.js') .js('resources/assets/entrypoints/react-h5p.js', 'js/react-h5p.js') .js('resources/assets/entrypoints/react-questionset.js', 'js/react-questionset.js') .webpackConfig({ diff --git a/sourcecode/hub/Dockerfile b/sourcecode/hub/Dockerfile index 0ced5f73d3..90089a4a14 100644 --- a/sourcecode/hub/Dockerfile +++ b/sourcecode/hub/Dockerfile @@ -141,4 +141,5 @@ FROM nginx:1-alpine AS web ENV PHP_FPM_HOST "localhost:9000" COPY --from=prod /app/public /app/public +COPY docker/nginx/server_tokens.conf /etc/nginx/conf.d/ COPY docker/nginx/default.conf.template /etc/nginx/templates/ diff --git a/sourcecode/hub/app/Console/Commands/AddLtiTool.php b/sourcecode/hub/app/Console/Commands/AddLtiTool.php index fb53daebec..fd85312349 100644 --- a/sourcecode/hub/app/Console/Commands/AddLtiTool.php +++ b/sourcecode/hub/app/Console/Commands/AddLtiTool.php @@ -16,6 +16,7 @@ class AddLtiTool extends Command edlib:add-lti-tool {name : The name of the tool} {url : The URL to which LTI Deep Linking requests will be sent} + {--slug=} The URL slug of the tool {--send-name} Send the name of the user to the tool upon launch {--send-email} Send the email address of the user to the tool upon launch {--edlib-editable} The tool accepts edit requests via an Edlib-specific mechanism @@ -35,6 +36,10 @@ public function handle(): void $tool->send_email = $this->option('send-email'); $tool->proxy_launch = true; + if ($this->option('slug')) { + $tool->slug = $this->option('slug'); + } + if ($this->option('edlib-editable')) { $tool->edit_mode = LtiToolEditMode::DeepLinkingRequestToContentUrl; } diff --git a/sourcecode/hub/app/Http/Controllers/NdlaLegacy/SwaggerController.php b/sourcecode/hub/app/Http/Controllers/NdlaLegacy/SwaggerController.php new file mode 100644 index 0000000000..9a6469c05c --- /dev/null +++ b/sourcecode/hub/app/Http/Controllers/NdlaLegacy/SwaggerController.php @@ -0,0 +1,35 @@ +view('ndla-legacy.swagger'); + } + + public function redirect(): RedirectResponse + { + return redirect()->route('ndla-legacy.swagger', status: Response::HTTP_PERMANENTLY_REDIRECT); + } + + public function schema(): BinaryFileResponse + { + return response()->file(resource_path('schema/ndla-openapi.json'), [ + 'Content-Type' => 'application/json', + ]); + } +} diff --git a/sourcecode/hub/app/Http/Requests/ContentFilter.php b/sourcecode/hub/app/Http/Requests/ContentFilter.php index e07e9794be..0dd367633d 100644 --- a/sourcecode/hub/app/Http/Requests/ContentFilter.php +++ b/sourcecode/hub/app/Http/Requests/ContentFilter.php @@ -6,7 +6,6 @@ use App\DataObjects\ContentDisplayItem; use App\Models\Content; -use App\Models\ContentVersion; use App\Support\SessionScope; use Illuminate\Contracts\Validation\Validator; use Illuminate\Foundation\Http\FormRequest; @@ -16,6 +15,7 @@ use Illuminate\Validation\Rule; use Laravel\Scout\Builder; use Override; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use function abort; use function trans; @@ -278,16 +278,16 @@ private function detectChanges(): void /** * @param Builder $builder - * @return LengthAwarePaginator + * @return LengthAwarePaginator */ public function paginateWithModel(Builder $builder, bool $forUser = false, bool $showDrafts = false): LengthAwarePaginator { - /** @var LengthAwarePaginator $paginator */ $paginator = $builder->paginateRaw(); + assert($paginator instanceof LengthAwarePaginator); return $paginator->setCollection( $this->attachModel( - $paginator->getCollection(), + $paginator->getCollection()['hits'], $forUser, $showDrafts ) @@ -300,17 +300,16 @@ public function paginateWithModel(Builder $builder, bool $forUser = false, bool */ public function getWithModel(Builder $builder, int $limit, bool $forUser = false, bool $showDrafts = false): Collection { - return $this->attachModel(new Collection($builder->take($limit)->raw()), $forUser, $showDrafts); + return $this->attachModel($builder->take($limit)->raw()['hits'], $forUser, $showDrafts); } /** - * @param Collection $items + * @param array $hits * @return Collection */ - private function attachModel(Collection $items, bool $forUser, bool $showDrafts): Collection + private function attachModel(array $hits, bool $forUser, bool $showDrafts): Collection { - /** @var Collection> $hits */ - $hits = new Collection($items->get('hits')); + $hits = new Collection($hits); $eagerLoad = ['users']; if ($showDrafts) { @@ -318,15 +317,18 @@ private function attachModel(Collection $items, bool $forUser, bool $showDrafts) } else { $eagerLoad[] = 'latestPublishedVersion'; } - /** @var Collection $models */ + $models = Content::whereIn('id', $hits->pluck('id')) ->with($eagerLoad) ->withCount(['views']) - ->get(); + ->get() + ->keyBy('id'); return $hits->map(function (array $item) use ($models, $forUser, $showDrafts) { - $model = $models->firstWhere('id', $item['id']); - $version = $showDrafts ? $model->latestVersion : $model->latestPublishedVersion; + $model = $models[$item['id']] + ?? throw new NotFoundHttpException(); + $version = ($showDrafts ? $model->latestVersion : $model->latestPublishedVersion) + ?? throw new NotFoundHttpException(); $canUse = Gate::allows('use', [$model, $version]); $canEdit = Gate::allows('edit', $model); diff --git a/sourcecode/hub/app/Http/Requests/StoreLtiToolExtraRequest.php b/sourcecode/hub/app/Http/Requests/StoreLtiToolExtraRequest.php index ea51aed913..fd55232881 100644 --- a/sourcecode/hub/app/Http/Requests/StoreLtiToolExtraRequest.php +++ b/sourcecode/hub/app/Http/Requests/StoreLtiToolExtraRequest.php @@ -8,6 +8,15 @@ class StoreLtiToolExtraRequest extends FormRequest { + public function prepareForValidation(): void + { + $parameters = $this->getInputSource(); + + if (!$parameters->get('slug')) { + $parameters->remove('slug'); + } + } + /** * @return array */ @@ -17,6 +26,7 @@ public function rules(): array 'name' => ['required', 'string', 'max:100'], 'lti_launch_url' => ['required', 'url'], 'admin' => ['sometimes', 'boolean'], + 'slug' => ['sometimes', 'string', 'max:50', 'regex:/^[a-z0-9-_]+$/'], ]; } } diff --git a/sourcecode/hub/app/Http/Requests/StoreLtiToolRequest.php b/sourcecode/hub/app/Http/Requests/StoreLtiToolRequest.php index b84bec26b0..3cae7ba81f 100644 --- a/sourcecode/hub/app/Http/Requests/StoreLtiToolRequest.php +++ b/sourcecode/hub/app/Http/Requests/StoreLtiToolRequest.php @@ -10,6 +10,15 @@ class StoreLtiToolRequest extends FormRequest { + public function prepareForValidation(): void + { + $parameters = $this->getInputSource(); + + if (!$parameters->get('slug')) { + $parameters->remove('slug'); + } + } + /** * @return mixed[] */ @@ -24,6 +33,7 @@ public function rules(): array 'send_name' => ['boolean'], 'send_email' => ['boolean'], 'proxy_launch' => ['boolean'], + 'slug' => ['sometimes', 'string', 'max:50', 'regex:/^[a-z0-9-_]+$/'], ]; } } diff --git a/sourcecode/hub/app/Models/Content.php b/sourcecode/hub/app/Models/Content.php index 3a74feb0ff..f8d72093a0 100644 --- a/sourcecode/hub/app/Models/Content.php +++ b/sourcecode/hub/app/Models/Content.php @@ -128,7 +128,7 @@ public function createCopyBelongingTo(User $user, ContentVersion|null $version = } /** - * @return HasOne + * @return HasOne */ public function latestVersion(): HasOne { @@ -138,7 +138,7 @@ public function latestVersion(): HasOne } /** - * @return HasOne + * @return HasOne */ public function latestDraftVersion(): HasOne { @@ -151,7 +151,7 @@ public function latestDraftVersion(): HasOne } /** - * @return HasOne + * @return HasOne */ public function latestPublishedVersion(): HasOne { @@ -164,7 +164,7 @@ public function latestPublishedVersion(): HasOne } /** - * @return HasMany + * @return HasMany */ public function versions(): HasMany { @@ -212,7 +212,7 @@ public function createVersionFromLinkItem( } /** - * @return BelongsToMany + * @return BelongsToMany */ public function tags(): BelongsToMany { @@ -240,7 +240,7 @@ public function scopeOfTag(Builder $query, string|array $tag): void } /** - * @return HasMany + * @return HasMany */ public function views(): HasMany { @@ -278,7 +278,7 @@ public function trackView( } /** - * @return BelongsToMany + * @return BelongsToMany */ public function users(): BelongsToMany { @@ -289,7 +289,7 @@ public function users(): BelongsToMany } /** - * @return BelongsToMany + * @return BelongsToMany */ public function contexts(): BelongsToMany { diff --git a/sourcecode/hub/app/Models/ContentVersion.php b/sourcecode/hub/app/Models/ContentVersion.php index 40ed99f570..0f2fbdce06 100755 --- a/sourcecode/hub/app/Models/ContentVersion.php +++ b/sourcecode/hub/app/Models/ContentVersion.php @@ -188,7 +188,7 @@ public function getUseUrl(): string } /** - * @return BelongsTo + * @return BelongsTo */ public function editedBy(): BelongsTo { @@ -196,7 +196,7 @@ public function editedBy(): BelongsTo } /** - * @return BelongsTo + * @return BelongsTo */ public function content(): BelongsTo { @@ -204,7 +204,7 @@ public function content(): BelongsTo } /** - * @return BelongsTo + * @return BelongsTo */ public function icon(): BelongsTo { @@ -212,7 +212,7 @@ public function icon(): BelongsTo } /** - * @return BelongsTo + * @return BelongsTo */ public function previousVersion(): BelongsTo { @@ -220,7 +220,7 @@ public function previousVersion(): BelongsTo } /** - * @return BelongsTo + * @return BelongsTo */ public function tool(): BelongsTo { @@ -228,7 +228,7 @@ public function tool(): BelongsTo } /** - * @return BelongsToMany + * @return BelongsToMany */ public function tags(): BelongsToMany { diff --git a/sourcecode/hub/app/Models/ContentView.php b/sourcecode/hub/app/Models/ContentView.php index a430da447e..7208c05f08 100644 --- a/sourcecode/hub/app/Models/ContentView.php +++ b/sourcecode/hub/app/Models/ContentView.php @@ -24,7 +24,7 @@ class ContentView extends Model ]; /** - * @return BelongsTo + * @return BelongsTo */ public function content(): BelongsTo { @@ -32,7 +32,7 @@ public function content(): BelongsTo } /** - * @return BelongsTo + * @return BelongsTo */ public function ltiPlatform(): BelongsTo { diff --git a/sourcecode/hub/app/Models/LtiTool.php b/sourcecode/hub/app/Models/LtiTool.php index 0856466db3..8247d7cf42 100644 --- a/sourcecode/hub/app/Models/LtiTool.php +++ b/sourcecode/hub/app/Models/LtiTool.php @@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; +use LogicException; use function assert; @@ -56,10 +57,18 @@ class LtiTool extends Model 'send_email', 'proxy_launch', 'edit_mode', + 'slug', ]; + public static function booted(): void + { + static::creating(function (self $tool) { + $tool->slug ??= $tool->id ?? throw new LogicException('expected an ID'); + }); + } + /** - * @return HasMany + * @return HasMany */ public function contentVersions(): HasMany { @@ -67,7 +76,7 @@ public function contentVersions(): HasMany } /** - * @return HasMany + * @return HasMany */ public function extras(): HasMany { diff --git a/sourcecode/hub/app/Models/LtiToolExtra.php b/sourcecode/hub/app/Models/LtiToolExtra.php index 3d11014c2e..5d54c8cce9 100644 --- a/sourcecode/hub/app/Models/LtiToolExtra.php +++ b/sourcecode/hub/app/Models/LtiToolExtra.php @@ -10,6 +10,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use LogicException; class LtiToolExtra extends Model { @@ -35,10 +36,18 @@ class LtiToolExtra extends Model 'name', 'lti_launch_url', 'admin', + 'slug', ]; + public static function booted(): void + { + static::creating(function (self $tool) { + $tool->slug ??= $tool->id ?? throw new LogicException('expected an ID'); + }); + } + /** - * @return BelongsTo + * @return BelongsTo */ public function tool(): BelongsTo { diff --git a/sourcecode/hub/app/Models/Upload.php b/sourcecode/hub/app/Models/Upload.php index 247d880510..e3f482439b 100644 --- a/sourcecode/hub/app/Models/Upload.php +++ b/sourcecode/hub/app/Models/Upload.php @@ -17,7 +17,7 @@ class Upload extends Model public const UPDATED_AT = null; /** - * @return HasMany + * @return HasMany */ public function contentVersions(): HasMany { diff --git a/sourcecode/hub/composer.json b/sourcecode/hub/composer.json index bac65c8155..d43dbbdbc3 100644 --- a/sourcecode/hub/composer.json +++ b/sourcecode/hub/composer.json @@ -7,35 +7,35 @@ "ext-intl": "*", "cerpus/edlib-resource-kit": "^0.8.x-dev", "cerpus/edlib-resource-kit-laravel": "^0.8.x-dev", - "firebase/php-jwt": "^6.10.1", + "firebase/php-jwt": "^6.10.2", "guzzlehttp/guzzle": "^7.9.2", "http-interop/http-factory-guzzle": "^1.2", - "laravel/framework": "^11.27.2", - "laravel/scout": "^10.11.4", + "laravel/framework": "^11.34.2", + "laravel/scout": "^10.11.8", "laravel/socialite": "^5.16", "laravel/tinker": "^2.10", - "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-aws-s3-v3": "^3.29", "league/flysystem-path-prefixing": "^3.28.0", "league/fractal": "^0.20.1", - "meilisearch/meilisearch-php": "^1.10.1", - "predis/predis": "^2.2.2", + "meilisearch/meilisearch-php": "^1.11.0", + "predis/predis": "^2.3.0", "psr/clock": "^1.0", "socialiteproviders/auth0": "^4.2", - "socialiteproviders/manager": "^4.6.0", + "socialiteproviders/manager": "^4.7.0", "spatie/laravel-fractal": "^6.2.1", - "symfony/cache": "^7.1.5" + "symfony/cache": "^7.1.9" }, "require-dev": { - "barryvdh/laravel-ide-helper": "^3.1", + "barryvdh/laravel-ide-helper": "^3.2.2", "cache/array-adapter": "^1.2", - "fakerphp/faker": "^1.23.1", - "larastan/larastan": "^2.9.8", - "laravel/dusk": "^8.2.8", - "laravel/telescope": "^5.2.2", + "fakerphp/faker": "^1.24.1", + "larastan/larastan": "^2.9.12", + "laravel/dusk": "^8.2.12", + "laravel/telescope": "^5.2.6", "mockery/mockery": "^1.6.12", - "nunomaduro/collision": "^8.4.0", - "phpstan/phpstan": "^1.12.6", - "phpunit/phpunit": "^11.4.1", + "nunomaduro/collision": "^8.5.0", + "phpstan/phpstan": "^1.12.11", + "phpunit/phpunit": "^11.4.4", "spatie/laravel-ignition": "^2.8" }, "autoload": { diff --git a/sourcecode/hub/composer.lock b/sourcecode/hub/composer.lock index bdd9b7820d..5f27fc7f36 100644 --- a/sourcecode/hub/composer.lock +++ b/sourcecode/hub/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6adb22aa8bffb44c822916d5236c610a", + "content-hash": "3a3652c6d8d46fffea5a2ad02680b0b4", "packages": [ { "name": "aws/aws-crt-php", @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.325.2", + "version": "3.331.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "9e354a5e0cd1d563ec85245e3000e98e16a44fce" + "reference": "0f8b3f63ba7b296afedcb3e6a43ce140831b9400" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/9e354a5e0cd1d563ec85245e3000e98e16a44fce", - "reference": "9e354a5e0cd1d563ec85245e3000e98e16a44fce", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/0f8b3f63ba7b296afedcb3e6a43ce140831b9400", + "reference": "0f8b3f63ba7b296afedcb3e6a43ce140831b9400", "shasum": "" }, "require": { @@ -100,8 +100,8 @@ "nette/neon": "^2.3", "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", "sebastian/comparator": "^1.2.3 || ^4.0", "yoast/phpunit-polyfills": "^1.0" }, @@ -154,9 +154,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.325.2" + "source": "https://github.com/aws/aws-sdk-php/tree/3.331.0" }, - "time": "2024-11-01T18:08:38+00:00" + "time": "2024-11-27T19:12:58+00:00" }, { "name": "brick/math", @@ -293,16 +293,16 @@ "source": { "type": "git", "url": "https://github.com/cerpus/php-edlib-resource-kit.git", - "reference": "78d60abe30a1afd50df8eb002517ee531b2f7ab7" + "reference": "af41490a0c70c69491616eab8382ae3dc01be55d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cerpus/php-edlib-resource-kit/zipball/78d60abe30a1afd50df8eb002517ee531b2f7ab7", - "reference": "78d60abe30a1afd50df8eb002517ee531b2f7ab7", + "url": "https://api.github.com/repos/cerpus/php-edlib-resource-kit/zipball/af41490a0c70c69491616eab8382ae3dc01be55d", + "reference": "af41490a0c70c69491616eab8382ae3dc01be55d", "shasum": "" }, "require": { - "php": "8.2.*|8.3.*", + "php": "8.2.*|8.3.*|8.4.*", "psr/clock": "^1.0", "psr/clock-implementation": "^1.0", "psr/simple-cache": "^1.0|^2.0|^3.0", @@ -345,7 +345,7 @@ "issues": "https://github.com/cerpus/Edlib/issues", "source": "https://github.com/cerpus/php-edlib-resource-kit/tree/master" }, - "time": "2024-10-16T08:59:45+00:00" + "time": "2024-11-21T12:26:48+00:00" }, { "name": "cerpus/edlib-resource-kit-laravel", @@ -353,24 +353,23 @@ "source": { "type": "git", "url": "https://github.com/cerpus/php-edlib-resource-kit-laravel.git", - "reference": "f703402c6a12820c5f9b5833ed5dd6e9fa21641c" + "reference": "2edef4fc70e12c79cd007c7d5fdcfdbc6413ded0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cerpus/php-edlib-resource-kit-laravel/zipball/f703402c6a12820c5f9b5833ed5dd6e9fa21641c", - "reference": "f703402c6a12820c5f9b5833ed5dd6e9fa21641c", + "url": "https://api.github.com/repos/cerpus/php-edlib-resource-kit-laravel/zipball/2edef4fc70e12c79cd007c7d5fdcfdbc6413ded0", + "reference": "2edef4fc70e12c79cd007c7d5fdcfdbc6413ded0", "shasum": "" }, "require": { "cerpus/edlib-resource-kit": "^0.8", "illuminate/support": "^9.0|^10.0|^11.0", - "php": "8.2.*|8.3.*" + "php": "8.2.*|8.3.*|8.4.*" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "guzzlehttp/guzzle": "^7.0", "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", "symfony/clock": "^6.3|^7.0" }, @@ -408,7 +407,7 @@ "issues": "https://github.com/cerpus/Edlib/issues", "source": "https://github.com/cerpus/php-edlib-resource-kit-laravel/tree/master" }, - "time": "2024-10-16T09:11:47+00:00" + "time": "2024-11-21T12:39:48+00:00" }, { "name": "dflydev/dot-access-data", @@ -787,16 +786,16 @@ }, { "name": "firebase/php-jwt", - "version": "v6.10.1", + "version": "v6.10.2", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b", + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b", "shasum": "" }, "require": { @@ -844,9 +843,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.2" }, - "time": "2024-05-18T18:05:11+00:00" + "time": "2024-11-24T11:22:49+00:00" }, { "name": "fruitcake/php-cors", @@ -1109,16 +1108,16 @@ }, { "name": "guzzlehttp/promises", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { @@ -1172,7 +1171,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.3" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -1188,7 +1187,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T10:29:17+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", @@ -1452,23 +1451,23 @@ }, { "name": "laravel/framework", - "version": "v11.27.2", + "version": "v11.34.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "a51d1f2b771c542324a3d9b76a98b1bbc75c0ee9" + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/a51d1f2b771c542324a3d9b76a98b1bbc75c0ee9", - "reference": "a51d1f2b771c542324a3d9b76a98b1bbc75c0ee9", + "url": "https://api.github.com/repos/laravel/framework/zipball/865da6d73dd353f07a7bcbd778c55966a620121f", + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f", "shasum": "" }, "require": { "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", + "dragonmantank/cron-expression": "^3.4", "egulias/email-validator": "^3.2.1|^4.0", "ext-ctype": "*", "ext-filter": "*", @@ -1478,35 +1477,36 @@ "ext-session": "*", "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", - "laravel/serializable-closure": "^1.3", + "laravel/serializable-closure": "^1.3|^2.0", "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.0", + "nesbot/carbon": "^2.72.2|^3.4", "nunomaduro/termwind": "^2.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.0", - "symfony/error-handler": "^7.0", - "symfony/finder": "^7.0", - "symfony/http-foundation": "^7.0", - "symfony/http-kernel": "^7.0", - "symfony/mailer": "^7.0", - "symfony/mime": "^7.0", - "symfony/polyfill-php83": "^1.28", - "symfony/process": "^7.0", - "symfony/routing": "^7.0", - "symfony/uid": "^7.0", - "symfony/var-dumper": "^7.0", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "symfony/http-foundation": "^7.0.3", + "symfony/http-kernel": "^7.0.3", + "symfony/mailer": "^7.0.3", + "symfony/mime": "^7.0.3", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.0.3", + "symfony/routing": "^7.0.3", + "symfony/uid": "^7.0.3", + "symfony/var-dumper": "^7.0.3", "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" }, "conflict": { "mockery/mockery": "1.6.8", @@ -1556,29 +1556,32 @@ }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", + "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", - "fakerphp/faker": "^1.23", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.6", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.5", - "pda/pheanstalk": "^5.0", + "orchestra/testbench-core": "^9.6", + "pda/pheanstalk": "^5.0.6", "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5|^11.0", - "predis/predis": "^2.0.2", + "phpunit/phpunit": "^10.5.35|^11.3.6", + "predis/predis": "^2.3", "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0", - "symfony/http-client": "^7.0", - "symfony/psr-http-message-bridge": "^7.0" + "symfony/cache": "^7.0.3", + "symfony/http-client": "^7.0.3", + "symfony/psr-http-message-bridge": "^7.0.3", + "symfony/translation": "^7.0.3" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", @@ -1592,16 +1595,16 @@ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", - "predis/predis": "Required to use the predis connector (^2.0.2).", + "predis/predis": "Required to use the predis connector (^2.3).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", @@ -1657,20 +1660,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-10-09T04:17:35+00:00" + "time": "2024-11-27T15:43:57+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.0", + "version": "v0.3.2", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "ea57a2261093986721d4a5f4f9524d76f21f9fa0" + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/ea57a2261093986721d4a5f4f9524d76f21f9fa0", - "reference": "ea57a2261093986721d4a5f4f9524d76f21f9fa0", + "url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f", "shasum": "" }, "require": { @@ -1686,7 +1689,7 @@ "require-dev": { "illuminate/collections": "^10.0|^11.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3", + "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", "phpstan/phpstan-mockery": "^1.1" }, @@ -1714,22 +1717,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.0" + "source": "https://github.com/laravel/prompts/tree/v0.3.2" }, - "time": "2024-09-30T14:27:51+00:00" + "time": "2024-11-12T14:59:47+00:00" }, { "name": "laravel/scout", - "version": "v10.11.4", + "version": "v10.11.8", "source": { "type": "git", "url": "https://github.com/laravel/scout.git", - "reference": "f9cf4f79163e3c5f13f81369d4992d66e6700502" + "reference": "2effc8c8df14c718de51ceaf0911cefcdb96883b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/scout/zipball/f9cf4f79163e3c5f13f81369d4992d66e6700502", - "reference": "f9cf4f79163e3c5f13f81369d4992d66e6700502", + "url": "https://api.github.com/repos/laravel/scout/zipball/2effc8c8df14c718de51ceaf0911cefcdb96883b", + "reference": "2effc8c8df14c718de51ceaf0911cefcdb96883b", "shasum": "" }, "require": { @@ -1743,8 +1746,11 @@ "php": "^8.0", "symfony/console": "^6.0|^7.0" }, + "conflict": { + "algolia/algoliasearch-client-php": "<3.2.0|>=5.0.0" + }, "require-dev": { - "algolia/algoliasearch-client-php": "^3.2", + "algolia/algoliasearch-client-php": "^3.2|^4.0", "meilisearch/meilisearch-php": "^1.0", "mockery/mockery": "^1.0", "orchestra/testbench": "^7.31|^8.11|^9.0", @@ -1794,36 +1800,36 @@ "issues": "https://github.com/laravel/scout/issues", "source": "https://github.com/laravel/scout" }, - "time": "2024-10-01T14:39:33+00:00" + "time": "2024-11-26T15:30:32+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.5", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c" + "reference": "0d8d3d8086984996df86596a86dea60398093a81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", - "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/0d8d3d8086984996df86596a86dea60398093a81", + "reference": "0d8d3d8086984996df86596a86dea60398093a81", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^8.1" }, "require-dev": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.61|^3.0", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + "illuminate/support": "^10.0|^11.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -1855,7 +1861,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-09-23T13:33:08+00:00" + "time": "2024-11-19T01:38:44+00:00" }, { "name": "laravel/socialite", @@ -2620,16 +2626,16 @@ }, { "name": "meilisearch/meilisearch-php", - "version": "v1.10.1", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/meilisearch/meilisearch-php.git", - "reference": "e3d8a74fdb0c65ecdef6ef9e89c110810c5c1aa0" + "reference": "4dd127cb87848f7a7b28e83bb355b4b86d329867" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/e3d8a74fdb0c65ecdef6ef9e89c110810c5c1aa0", - "reference": "e3d8a74fdb0c65ecdef6ef9e89c110810c5c1aa0", + "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/4dd127cb87848f7a7b28e83bb355b4b86d329867", + "reference": "4dd127cb87848f7a7b28e83bb355b4b86d329867", "shasum": "" }, "require": { @@ -2681,22 +2687,22 @@ ], "support": { "issues": "https://github.com/meilisearch/meilisearch-php/issues", - "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.10.1" + "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.11.0" }, - "time": "2024-09-15T22:50:45+00:00" + "time": "2024-10-28T14:04:37+00:00" }, { "name": "monolog/monolog", - "version": "3.7.0", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", "shasum": "" }, "require": { @@ -2716,12 +2722,14 @@ "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -2772,7 +2780,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.0" }, "funding": [ { @@ -2784,7 +2792,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:40:51+00:00" + "time": "2024-11-12T13:57:08+00:00" }, { "name": "mtdowling/jmespath.php", @@ -2854,20 +2862,20 @@ }, { "name": "nesbot/carbon", - "version": "3.8.0", + "version": "3.8.2", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f" + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbd3eef89af8ba66a3aa7952b5439168fbcc529f", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", "shasum": "" }, "require": { - "carbonphp/carbon-doctrine-types": "*", + "carbonphp/carbon-doctrine-types": "<100.0", "ext-json": "*", "php": "^8.1", "psr/clock": "^1.0", @@ -2956,7 +2964,7 @@ "type": "tidelift" } ], - "time": "2024-08-19T06:22:39+00:00" + "time": "2024-11-07T17:46:48+00:00" }, { "name": "nette/schema", @@ -3166,32 +3174,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.1.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a" + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e5f21eade88689536c0cdad4c3cd75f3ed26e01a", - "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.0.4" + "symfony/console": "^7.1.8" }, "require-dev": { - "ergebnis/phpstan-rules": "^2.2.0", - "illuminate/console": "^11.1.1", - "laravel/pint": "^1.15.0", - "mockery/mockery": "^1.6.11", - "pestphp/pest": "^2.34.6", - "phpstan/phpstan": "^1.10.66", - "phpstan/phpstan-strict-rules": "^1.5.2", - "symfony/var-dumper": "^7.0.4", + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0", + "phpstan/phpstan": "^1.12.11", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^7.1.8", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -3234,7 +3241,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.1.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" }, "funding": [ { @@ -3250,7 +3257,7 @@ "type": "github" } ], - "time": "2024-09-05T15:25:50+00:00" + "time": "2024-11-21T10:39:51+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -3635,16 +3642,16 @@ }, { "name": "predis/predis", - "version": "v2.2.2", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/predis/predis.git", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1" + "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", + "url": "https://api.github.com/repos/predis/predis/zipball/bac46bfdb78cd6e9c7926c697012aae740cb9ec9", + "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9", "shasum": "" }, "require": { @@ -3653,7 +3660,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.3", "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ~9.4.4" + "phpunit/phpunit": "^8.0 || ^9.4" }, "suggest": { "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" @@ -3684,7 +3691,7 @@ ], "support": { "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.2.2" + "source": "https://github.com/predis/predis/tree/v2.3.0" }, "funding": [ { @@ -3692,7 +3699,7 @@ "type": "github" } ], - "time": "2023-09-13T16:42:03+00:00" + "time": "2024-11-21T20:00:02+00:00" }, { "name": "psr/cache", @@ -4511,16 +4518,16 @@ }, { "name": "socialiteproviders/manager", - "version": "v4.6.0", + "version": "v4.7.0", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Manager.git", - "reference": "dea5190981c31b89e52259da9ab1ca4e2b258b21" + "reference": "ab0691b82cec77efd90154c78f1854903455c82f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/dea5190981c31b89e52259da9ab1ca4e2b258b21", - "reference": "dea5190981c31b89e52259da9ab1ca4e2b258b21", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/ab0691b82cec77efd90154c78f1854903455c82f", + "reference": "ab0691b82cec77efd90154c78f1854903455c82f", "shasum": "" }, "require": { @@ -4581,7 +4588,7 @@ "issues": "https://github.com/socialiteproviders/manager/issues", "source": "https://github.com/socialiteproviders/manager" }, - "time": "2024-05-04T07:57:39+00:00" + "time": "2024-11-10T01:56:18+00:00" }, { "name": "spatie/fractalistic", @@ -4727,16 +4734,16 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.16.5", + "version": "1.16.6", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2" + "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/c7413972cf22ffdff97b68499c22baa04eddb6a2", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", + "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", "shasum": "" }, "require": { @@ -4775,7 +4782,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.5" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.6" }, "funding": [ { @@ -4783,20 +4790,20 @@ "type": "github" } ], - "time": "2024-08-27T18:56:10+00:00" + "time": "2024-11-18T15:02:02+00:00" }, { "name": "symfony/cache", - "version": "v7.1.6", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "567ef6de47fdcba56eb6c0b344b857d1fce1cce0" + "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/567ef6de47fdcba56eb6c0b344b857d1fce1cce0", - "reference": "567ef6de47fdcba56eb6c0b344b857d1fce1cce0", + "url": "https://api.github.com/repos/symfony/cache/zipball/18e0ba45a50032aa53dfebf830ec2980bb131591", + "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591", "shasum": "" }, "require": { @@ -4864,7 +4871,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.6" + "source": "https://github.com/symfony/cache/tree/v7.1.9" }, "funding": [ { @@ -4880,20 +4887,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:39:55+00:00" + "time": "2024-11-20T10:42:04+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.5.3", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463" + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463", - "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e", + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e", "shasum": "" }, "require": { @@ -4943,7 +4950,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.5.3" + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.4" }, "funding": [ { @@ -4959,20 +4966,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/clock", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" + "reference": "97bebc53548684c17ed696bc8af016880f0f098d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", - "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", + "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d", + "reference": "97bebc53548684c17ed696bc8af016880f0f098d", "shasum": "" }, "require": { @@ -5017,7 +5024,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.1.1" + "source": "https://github.com/symfony/clock/tree/v7.1.6" }, "funding": [ { @@ -5033,20 +5040,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/console", - "version": "v7.1.5", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" + "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", - "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", "shasum": "" }, "require": { @@ -5110,7 +5117,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.5" + "source": "https://github.com/symfony/console/tree/v7.1.8" }, "funding": [ { @@ -5126,20 +5133,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2024-11-06T14:23:19+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" + "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", "shasum": "" }, "require": { @@ -5175,7 +5182,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.1" + "source": "https://github.com/symfony/css-selector/tree/v7.1.6" }, "funding": [ { @@ -5191,20 +5198,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -5242,7 +5249,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -5258,20 +5265,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.3", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c" + "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", + "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", "shasum": "" }, "require": { @@ -5317,7 +5324,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.3" + "source": "https://github.com/symfony/error-handler/tree/v7.1.7" }, "funding": [ { @@ -5333,20 +5340,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T13:02:51+00:00" + "time": "2024-11-05T15:34:55+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + "reference": "87254c78dd50721cfd015b62277a8281c5589702" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", + "reference": "87254c78dd50721cfd015b62277a8281c5589702", "shasum": "" }, "require": { @@ -5397,7 +5404,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" }, "funding": [ { @@ -5413,20 +5420,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -5473,7 +5480,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -5489,20 +5496,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/finder", - "version": "v7.1.4", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" + "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", + "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", + "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", "shasum": "" }, "require": { @@ -5537,7 +5544,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.4" + "source": "https://github.com/symfony/finder/tree/v7.1.6" }, "funding": [ { @@ -5553,20 +5560,20 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:28:19+00:00" + "time": "2024-10-01T08:31:23+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.5", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" + "reference": "82765842fb599c7ed839b650214680c7ee5779be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", - "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/82765842fb599c7ed839b650214680c7ee5779be", + "reference": "82765842fb599c7ed839b650214680c7ee5779be", "shasum": "" }, "require": { @@ -5576,12 +5583,12 @@ }, "conflict": { "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^6.4|^7.0", "symfony/expression-language": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -5614,7 +5621,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.5" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.9" }, "funding": [ { @@ -5630,20 +5637,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2024-11-13T18:58:36+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.5", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b" + "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/44204d96150a9df1fc57601ec933d23fefc2d65b", - "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/649d0e23c571344ef1153d4ffb2564f534b85a45", + "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45", "shasum": "" }, "require": { @@ -5728,7 +5735,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.5" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.9" }, "funding": [ { @@ -5744,20 +5751,20 @@ "type": "tidelift" } ], - "time": "2024-09-21T06:09:21+00:00" + "time": "2024-11-27T12:55:11+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.5", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" + "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", - "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", + "url": "https://api.github.com/repos/symfony/mailer/zipball/69c9948451fb3a6a4d47dc8261d1794734e76cdd", + "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd", "shasum": "" }, "require": { @@ -5808,7 +5815,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.5" + "source": "https://github.com/symfony/mailer/tree/v7.1.6" }, "funding": [ { @@ -5824,20 +5831,20 @@ "type": "tidelift" } ], - "time": "2024-09-08T12:32:26+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/mime", - "version": "v7.1.5", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" + "reference": "caa1e521edb2650b8470918dfe51708c237f0598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", - "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", + "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", + "reference": "caa1e521edb2650b8470918dfe51708c237f0598", "shasum": "" }, "require": { @@ -5892,7 +5899,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.5" + "source": "https://github.com/symfony/mime/tree/v7.1.6" }, "funding": [ { @@ -5908,7 +5915,7 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2024-10-25T15:11:02+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6548,16 +6555,16 @@ }, { "name": "symfony/process", - "version": "v7.1.5", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5c03ee6369281177f07f7c68252a280beccba847" + "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", - "reference": "5c03ee6369281177f07f7c68252a280beccba847", + "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", + "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", "shasum": "" }, "require": { @@ -6589,7 +6596,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.5" + "source": "https://github.com/symfony/process/tree/v7.1.8" }, "funding": [ { @@ -6605,20 +6612,20 @@ "type": "tidelift" } ], - "time": "2024-09-19T21:48:23+00:00" + "time": "2024-11-06T14:23:19+00:00" }, { "name": "symfony/routing", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" + "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "url": "https://api.github.com/repos/symfony/routing/zipball/a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", + "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", "shasum": "" }, "require": { @@ -6670,7 +6677,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.4" + "source": "https://github.com/symfony/routing/tree/v7.1.9" }, "funding": [ { @@ -6686,20 +6693,20 @@ "type": "tidelift" } ], - "time": "2024-08-29T08:16:25+00:00" + "time": "2024-11-13T16:12:35+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -6753,7 +6760,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -6769,20 +6776,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.1.5", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" + "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", - "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", + "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", + "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", "shasum": "" }, "require": { @@ -6840,7 +6847,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.5" + "source": "https://github.com/symfony/string/tree/v7.1.8" }, "funding": [ { @@ -6856,20 +6863,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2024-11-13T13:31:21+00:00" }, { "name": "symfony/translation", - "version": "v7.1.5", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea" + "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/235535e3f84f3dfbdbde0208ede6ca75c3a489ea", - "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea", + "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", "shasum": "" }, "require": { @@ -6934,7 +6941,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.5" + "source": "https://github.com/symfony/translation/tree/v7.1.6" }, "funding": [ { @@ -6950,20 +6957,20 @@ "type": "tidelift" } ], - "time": "2024-09-16T06:30:38+00:00" + "time": "2024-09-28T12:35:13+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -7012,7 +7019,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -7028,20 +7035,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v7.1.5", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "8c7bb8acb933964055215d89f9a9871df0239317" + "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/8c7bb8acb933964055215d89f9a9871df0239317", - "reference": "8c7bb8acb933964055215d89f9a9871df0239317", + "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", + "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", "shasum": "" }, "require": { @@ -7086,7 +7093,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.5" + "source": "https://github.com/symfony/uid/tree/v7.1.6" }, "funding": [ { @@ -7102,20 +7109,20 @@ "type": "tidelift" } ], - "time": "2024-09-17T09:16:35+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.5", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "e20e03889539fd4e4211e14d2179226c513c010d" + "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e20e03889539fd4e4211e14d2179226c513c010d", - "reference": "e20e03889539fd4e4211e14d2179226c513c010d", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", "shasum": "" }, "require": { @@ -7169,7 +7176,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.5" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" }, "funding": [ { @@ -7185,7 +7192,7 @@ "type": "tidelift" } ], - "time": "2024-09-16T10:07:02+00:00" + "time": "2024-11-08T15:46:42+00:00" }, { "name": "symfony/var-exporter", @@ -7402,16 +7409,16 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -7436,7 +7443,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -7448,7 +7455,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -7472,7 +7479,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "webmozart/assert", @@ -7536,37 +7543,37 @@ "packages-dev": [ { "name": "barryvdh/laravel-ide-helper", - "version": "v3.1.0", + "version": "v3.2.2", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "591e7d665fbab8a3b682e451641706341573eb80" + "reference": "07e3bd8796f3d1414801a03d3783f9d3ec9efc08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/591e7d665fbab8a3b682e451641706341573eb80", - "reference": "591e7d665fbab8a3b682e451641706341573eb80", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/07e3bd8796f3d1414801a03d3783f9d3ec9efc08", + "reference": "07e3bd8796f3d1414801a03d3783f9d3ec9efc08", "shasum": "" }, "require": { - "barryvdh/reflection-docblock": "^2.1.1", + "barryvdh/reflection-docblock": "^2.1.2", "composer/class-map-generator": "^1.0", "ext-json": "*", - "illuminate/console": "^10 || ^11", - "illuminate/database": "^10.38 || ^11", - "illuminate/filesystem": "^10 || ^11", - "illuminate/support": "^10 || ^11", + "illuminate/console": "^11.15", + "illuminate/database": "^11.15", + "illuminate/filesystem": "^11.15", + "illuminate/support": "^11.15", "nikic/php-parser": "^4.18 || ^5", - "php": "^8.1", + "php": "^8.2", "phpdocumentor/type-resolver": "^1.1.0" }, "require-dev": { "ext-pdo_sqlite": "*", "friendsofphp/php-cs-fixer": "^3", - "illuminate/config": "^9 || ^10 || ^11", - "illuminate/view": "^9 || ^10 || ^11", + "illuminate/config": "^11.15", + "illuminate/view": "^11.15", "mockery/mockery": "^1.4", - "orchestra/testbench": "^8 || ^9", + "orchestra/testbench": "^9.2", "phpunit/phpunit": "^10.5", "spatie/phpunit-snapshot-assertions": "^4 || ^5", "vimeo/psalm": "^5.4" @@ -7577,7 +7584,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" }, "laravel": { "providers": [ @@ -7614,7 +7621,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.1.0" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.2.2" }, "funding": [ { @@ -7626,20 +7633,20 @@ "type": "github" } ], - "time": "2024-07-12T14:20:51+00:00" + "time": "2024-10-29T14:00:16+00:00" }, { "name": "barryvdh/reflection-docblock", - "version": "v2.1.1", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/barryvdh/ReflectionDocBlock.git", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597" + "reference": "c6fad15f7c878be21650c51e1f841bca7e49752e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/e6811e927f0ecc37cc4deaa6627033150343e597", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597", + "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/c6fad15f7c878be21650c51e1f841bca7e49752e", + "reference": "c6fad15f7c878be21650c51e1f841bca7e49752e", "shasum": "" }, "require": { @@ -7676,9 +7683,9 @@ } ], "support": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.1" + "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.3" }, - "time": "2023-06-14T05:06:27+00:00" + "time": "2024-10-23T11:41:03+00:00" }, { "name": "cache/adapter-common", @@ -7942,16 +7949,16 @@ }, { "name": "composer/class-map-generator", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "98bbf6780e56e0fd2404fe4b82eb665a0f93b783" + "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/98bbf6780e56e0fd2404fe4b82eb665a0f93b783", - "reference": "98bbf6780e56e0fd2404fe4b82eb665a0f93b783", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", + "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", "shasum": "" }, "require": { @@ -7960,10 +7967,10 @@ "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" }, "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", "phpunit/phpunit": "^8", "symfony/filesystem": "^5.4 || ^6" }, @@ -7995,7 +8002,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.4.0" + "source": "https://github.com/composer/class-map-generator/tree/1.5.0" }, "funding": [ { @@ -8011,20 +8018,20 @@ "type": "tidelift" } ], - "time": "2024-10-03T18:14:00+00:00" + "time": "2024-11-25T16:11:06+00:00" }, { "name": "composer/pcre", - "version": "3.3.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { @@ -8034,8 +8041,8 @@ "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "phpstan/phpstan": "^1.11.10", - "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", "phpunit/phpunit": "^8 || ^9" }, "type": "library", @@ -8074,7 +8081,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.1" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -8090,7 +8097,7 @@ "type": "tidelift" } ], - "time": "2024-08-27T18:44:43+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "doctrine/deprecations", @@ -8141,16 +8148,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.23.1", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { @@ -8198,9 +8205,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2024-01-02T13:46:09+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "filp/whoops", @@ -8326,36 +8333,39 @@ }, { "name": "larastan/larastan", - "version": "v2.9.8", + "version": "v2.9.12", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7" + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/340badd89b0eb5bddbc503a4829c08cf9a2819d7", - "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7", + "url": "https://api.github.com/repos/larastan/larastan/zipball/19012b39fbe4dede43dbe0c126d9681827a5e908", + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.16", "php": "^8.0.2", "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^1.11.2" + "phpstan/phpstan": "^1.12.11" }, "require-dev": { "doctrine/coding-standard": "^12.0", + "laravel/framework": "^9.52.16 || ^10.28.0 || ^11.16", + "mockery/mockery": "^1.5.1", "nikic/php-parser": "^4.19.1", "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", - "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3", + "orchestra/testbench-core": "^7.33.0 || ^8.13.0 || ^9.0.9", + "phpstan/phpstan-deprecation-rules": "^1.2", "phpunit/phpunit": "^9.6.13 || ^10.5.16" }, "suggest": { @@ -8363,13 +8373,13 @@ }, "type": "phpstan-extension", "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - }, "phpstan": { "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-master": "2.0-dev" } }, "autoload": { @@ -8391,7 +8401,7 @@ "email": "enunomaduro@gmail.com" } ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", "keywords": [ "PHPStan", "code analyse", @@ -8404,40 +8414,28 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.8" + "source": "https://github.com/larastan/larastan/tree/v2.9.12" }, "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, { "url": "https://github.com/canvural", "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2024-07-06T17:46:02+00:00" + "time": "2024-11-26T23:09:02+00:00" }, { "name": "laravel/dusk", - "version": "v8.2.8", + "version": "v8.2.12", "source": { "type": "git", "url": "https://github.com/laravel/dusk.git", - "reference": "5bff1e8dd87ec653a2202475377152e5d14fde40" + "reference": "a399aa31c1c9cef793ad747403017e56df77396c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/dusk/zipball/5bff1e8dd87ec653a2202475377152e5d14fde40", - "reference": "5bff1e8dd87ec653a2202475377152e5d14fde40", + "url": "https://api.github.com/repos/laravel/dusk/zipball/a399aa31c1c9cef793ad747403017e56df77396c", + "reference": "a399aa31c1c9cef793ad747403017e56df77396c", "shasum": "" }, "require": { @@ -8447,7 +8445,7 @@ "illuminate/console": "^10.0|^11.0", "illuminate/support": "^10.0|^11.0", "php": "^8.1", - "php-webdriver/webdriver": "^1.9.0", + "php-webdriver/webdriver": "^1.15.2", "symfony/console": "^6.2|^7.0", "symfony/finder": "^6.2|^7.0", "symfony/process": "^6.2|^7.0", @@ -8494,22 +8492,22 @@ ], "support": { "issues": "https://github.com/laravel/dusk/issues", - "source": "https://github.com/laravel/dusk/tree/v8.2.8" + "source": "https://github.com/laravel/dusk/tree/v8.2.12" }, - "time": "2024-10-04T14:02:20+00:00" + "time": "2024-11-21T17:37:39+00:00" }, { "name": "laravel/telescope", - "version": "v5.2.2", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/laravel/telescope.git", - "reference": "daaf95dee9fab2dd80f59b5f6611c6c0eff44878" + "reference": "7ee46fbea8e3b01108575c8edf7377abddfe8bb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/telescope/zipball/daaf95dee9fab2dd80f59b5f6611c6c0eff44878", - "reference": "daaf95dee9fab2dd80f59b5f6611c6c0eff44878", + "url": "https://api.github.com/repos/laravel/telescope/zipball/7ee46fbea8e3b01108575c8edf7377abddfe8bb9", + "reference": "7ee46fbea8e3b01108575c8edf7377abddfe8bb9", "shasum": "" }, "require": { @@ -8563,9 +8561,9 @@ ], "support": { "issues": "https://github.com/laravel/telescope/issues", - "source": "https://github.com/laravel/telescope/tree/v5.2.2" + "source": "https://github.com/laravel/telescope/tree/v5.2.6" }, - "time": "2024-08-26T12:40:52+00:00" + "time": "2024-11-25T20:34:58+00:00" }, { "name": "mockery/mockery", @@ -8652,16 +8650,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -8700,7 +8698,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -8708,27 +8706,27 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "nunomaduro/collision", - "version": "v8.4.0", + "version": "v8.5.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a" + "reference": "f5c101b929c958e849a633283adff296ed5f38f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/e7d1aa8ed753f63fa816932bbc89678238843b4a", - "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5", "shasum": "" }, "require": { - "filp/whoops": "^2.15.4", - "nunomaduro/termwind": "^2.0.1", + "filp/whoops": "^2.16.0", + "nunomaduro/termwind": "^2.1.0", "php": "^8.2.0", - "symfony/console": "^7.1.3" + "symfony/console": "^7.1.5" }, "conflict": { "laravel/framework": "<11.0.0 || >=12.0.0", @@ -8736,14 +8734,14 @@ }, "require-dev": { "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.19.0", - "laravel/pint": "^1.17.1", - "laravel/sail": "^1.31.0", - "laravel/sanctum": "^4.0.2", - "laravel/tinker": "^2.9.0", - "orchestra/testbench-core": "^9.2.3", - "pestphp/pest": "^2.35.0 || ^3.0.0", - "sebastian/environment": "^6.1.0 || ^7.0.0" + "laravel/framework": "^11.28.0", + "laravel/pint": "^1.18.1", + "laravel/sail": "^1.36.0", + "laravel/sanctum": "^4.0.3", + "laravel/tinker": "^2.10.0", + "orchestra/testbench-core": "^9.5.3", + "pestphp/pest": "^2.36.0 || ^3.4.0", + "sebastian/environment": "^6.1.0 || ^7.2.0" }, "type": "library", "extra": { @@ -8805,7 +8803,7 @@ "type": "patreon" } ], - "time": "2024-08-03T15:32:23+00:00" + "time": "2024-10-15T16:06:32+00:00" }, { "name": "phar-io/manifest", @@ -8927,16 +8925,16 @@ }, { "name": "php-webdriver/webdriver", - "version": "1.15.1", + "version": "1.15.2", "source": { "type": "git", "url": "https://github.com/php-webdriver/php-webdriver.git", - "reference": "cd52d9342c5aa738c2e75a67e47a1b6df97154e8" + "reference": "998e499b786805568deaf8cbf06f4044f05d91bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/cd52d9342c5aa738c2e75a67e47a1b6df97154e8", - "reference": "cd52d9342c5aa738c2e75a67e47a1b6df97154e8", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/998e499b786805568deaf8cbf06f4044f05d91bf", + "reference": "998e499b786805568deaf8cbf06f4044f05d91bf", "shasum": "" }, "require": { @@ -8958,7 +8956,7 @@ "php-parallel-lint/php-parallel-lint": "^1.2", "phpunit/phpunit": "^9.3", "squizlabs/php_codesniffer": "^3.5", - "symfony/var-dumper": "^5.0 || ^6.0" + "symfony/var-dumper": "^5.0 || ^6.0 || ^7.0" }, "suggest": { "ext-SimpleXML": "For Firefox profile creation" @@ -8987,9 +8985,9 @@ ], "support": { "issues": "https://github.com/php-webdriver/php-webdriver/issues", - "source": "https://github.com/php-webdriver/php-webdriver/tree/1.15.1" + "source": "https://github.com/php-webdriver/php-webdriver/tree/1.15.2" }, - "time": "2023-10-20T12:21:20+00:00" + "time": "2024-11-21T15:12:59+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -9046,23 +9044,23 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.8.2", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -9098,22 +9096,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2024-02-23T11:10:43+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpmyadmin/sql-parser", - "version": "5.10.0", + "version": "5.10.1", "source": { "type": "git", "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "91d980ab76c3f152481e367f62b921adc38af451" + "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/91d980ab76c3f152481e367f62b921adc38af451", - "reference": "91d980ab76c3f152481e367f62b921adc38af451", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/b14fd66496a22d8dd7f7e2791edd9e8674422f17", + "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17", "shasum": "" }, "require": { @@ -9187,34 +9185,34 @@ "type": "other" } ], - "time": "2024-08-29T20:56:34+00:00" + "time": "2024-11-10T04:10:31+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.32.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", - "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^5.3.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", "symfony/process": "^5.2" }, "type": "library", @@ -9232,22 +9230,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0" }, - "time": "2024-09-26T07:23:32+00:00" + "time": "2024-10-13T11:29:49+00:00" }, { "name": "phpstan/phpstan", - "version": "1.12.6", + "version": "1.12.11", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae" + "reference": "0d1fc20a962a91be578bcfe7cf939e6e1a2ff733" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc4d2f145a88ea7141ae698effd64d9df46527ae", - "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0d1fc20a962a91be578bcfe7cf939e6e1a2ff733", + "reference": "0d1fc20a962a91be578bcfe7cf939e6e1a2ff733", "shasum": "" }, "require": { @@ -9292,7 +9290,7 @@ "type": "github" } ], - "time": "2024-10-06T15:03:59+00:00" + "time": "2024-11-17T14:08:01+00:00" }, { "name": "phpunit/php-code-coverage", @@ -9619,16 +9617,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.4.1", + "version": "11.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "7875627f15f4da7e7f0823d1f323f7295a77334e" + "reference": "f9ba7bd3c9f3ff54ec379d7a1c2e3f13fe0bbde4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7875627f15f4da7e7f0823d1f323f7295a77334e", - "reference": "7875627f15f4da7e7f0823d1f323f7295a77334e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f9ba7bd3c9f3ff54ec379d7a1c2e3f13fe0bbde4", + "reference": "f9ba7bd3c9f3ff54ec379d7a1c2e3f13fe0bbde4", "shasum": "" }, "require": { @@ -9638,25 +9636,25 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.6", + "phpunit/php-code-coverage": "^11.0.7", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.1", - "sebastian/comparator": "^6.1.0", + "sebastian/comparator": "^6.2.1", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.0", "sebastian/exporter": "^6.1.3", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", "sebastian/type": "^5.1.0", - "sebastian/version": "^5.0.1" + "sebastian/version": "^5.0.2" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -9699,7 +9697,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.4.1" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.4.4" }, "funding": [ { @@ -9715,7 +9713,7 @@ "type": "tidelift" } ], - "time": "2024-10-08T15:38:37+00:00" + "time": "2024-11-27T10:44:52+00:00" }, { "name": "sebastian/cli-parser", @@ -9889,16 +9887,16 @@ }, { "name": "sebastian/comparator", - "version": "6.1.0", + "version": "6.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa37b9e2ca618cb051d71b60120952ee8ca8b03d" + "reference": "43d129d6a0f81c78bee378b46688293eb7ea3739" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa37b9e2ca618cb051d71b60120952ee8ca8b03d", - "reference": "fa37b9e2ca618cb051d71b60120952ee8ca8b03d", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/43d129d6a0f81c78bee378b46688293eb7ea3739", + "reference": "43d129d6a0f81c78bee378b46688293eb7ea3739", "shasum": "" }, "require": { @@ -9909,12 +9907,12 @@ "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^11.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "6.2-dev" } }, "autoload": { @@ -9954,7 +9952,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.2.1" }, "funding": [ { @@ -9962,7 +9960,7 @@ "type": "github" } ], - "time": "2024-09-11T15:42:56+00:00" + "time": "2024-10-31T05:30:08+00:00" }, { "name": "sebastian/complexity", @@ -10642,16 +10640,16 @@ }, { "name": "spatie/backtrace", - "version": "1.6.2", + "version": "1.6.3", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9" + "reference": "7c18db2bc667ac84e5d7c18e33f16c38ff2d8838" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/1a9a145b044677ae3424693f7b06479fc8c137a9", - "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/7c18db2bc667ac84e5d7c18e33f16c38ff2d8838", + "reference": "7c18db2bc667ac84e5d7c18e33f16c38ff2d8838", "shasum": "" }, "require": { @@ -10689,7 +10687,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.6.2" + "source": "https://github.com/spatie/backtrace/tree/1.6.3" }, "funding": [ { @@ -10701,7 +10699,7 @@ "type": "other" } ], - "time": "2024-07-22T08:21:24+00:00" + "time": "2024-11-18T14:58:58+00:00" }, { "name": "spatie/error-solutions", diff --git a/sourcecode/hub/config/app.php b/sourcecode/hub/config/app.php index 213fd57731..e97153ed87 100644 --- a/sourcecode/hub/config/app.php +++ b/sourcecode/hub/config/app.php @@ -58,7 +58,7 @@ | */ - 'url' => rtrim(env('APP_URL', 'http://localhost'), '/'), + 'url' => rtrim((string) env('APP_URL', 'http://localhost'), '/'), 'asset_url' => env('ASSET_URL'), diff --git a/sourcecode/hub/config/cache.php b/sourcecode/hub/config/cache.php index c82c508967..7b3bc77d0f 100644 --- a/sourcecode/hub/config/cache.php +++ b/sourcecode/hub/config/cache.php @@ -107,6 +107,6 @@ | */ - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel'), '_').'_cache_'), ]; diff --git a/sourcecode/hub/config/database.php b/sourcecode/hub/config/database.php index 01902d6ac7..aa49d43537 100644 --- a/sourcecode/hub/config/database.php +++ b/sourcecode/hub/config/database.php @@ -127,7 +127,7 @@ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel'), '_').'_database_'), ], 'default' => [ diff --git a/sourcecode/hub/config/filesystems.php b/sourcecode/hub/config/filesystems.php index 9e044c0d4c..74477464b0 100644 --- a/sourcecode/hub/config/filesystems.php +++ b/sourcecode/hub/config/filesystems.php @@ -80,7 +80,10 @@ */ 'links' => [ - public_path('storage') => storage_path('app/public'), + // The destinations must be relative to the source to make the symlinks + // work both inside and outside of containers. + + public_path('storage') => '../storage/app/public', ], ]; diff --git a/sourcecode/hub/config/session.php b/sourcecode/hub/config/session.php index cff8a14363..d9f4da478d 100644 --- a/sourcecode/hub/config/session.php +++ b/sourcecode/hub/config/session.php @@ -130,7 +130,7 @@ 'cookie' => env( 'SESSION_COOKIE', - Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + Str::slug((string) env('APP_NAME', 'laravel'), '_').'_session' ), /* diff --git a/sourcecode/hub/database/factories/LtiToolExtraFactory.php b/sourcecode/hub/database/factories/LtiToolExtraFactory.php index c439392ea2..11010c385c 100644 --- a/sourcecode/hub/database/factories/LtiToolExtraFactory.php +++ b/sourcecode/hub/database/factories/LtiToolExtraFactory.php @@ -20,6 +20,7 @@ public function definition(): array 'lti_tool_id' => LtiTool::factory(), 'lti_launch_url' => $this->faker->url, 'admin' => $this->faker->boolean, + 'slug' => $this->faker->unique()->slug(nbWords: 2), ]; } @@ -27,4 +28,9 @@ public function admin(bool $admin = true): self { return $this->state(['admin' => $admin]); } + + public function slug(string $slug): self + { + return $this->state(['slug' => $slug]); + } } diff --git a/sourcecode/hub/database/factories/LtiToolFactory.php b/sourcecode/hub/database/factories/LtiToolFactory.php index 074a3b4414..a279b97247 100644 --- a/sourcecode/hub/database/factories/LtiToolFactory.php +++ b/sourcecode/hub/database/factories/LtiToolFactory.php @@ -24,9 +24,15 @@ public function definition(): array 'send_name' => $this->faker->boolean, 'send_email' => $this->faker->boolean, 'proxy_launch' => $this->faker->boolean, + 'slug' => $this->faker->unique()->slug(nbWords: 2), ]; } + public function slug(string $slug): self + { + return $this->state(['slug' => $slug]); + } + public function launchUrl(string $launchUrl): self { return $this->state(['creator_launch_url' => $launchUrl]); diff --git a/sourcecode/hub/database/migrations/2024_12_11_080000_add_lti_tool_slug.php b/sourcecode/hub/database/migrations/2024_12_11_080000_add_lti_tool_slug.php new file mode 100644 index 0000000000..f5e56ca2b7 --- /dev/null +++ b/sourcecode/hub/database/migrations/2024_12_11_080000_add_lti_tool_slug.php @@ -0,0 +1,47 @@ +string('slug')->nullable(); + + $table->unique(['slug']); + }); + + Schema::table('lti_tool_extras', function (Blueprint $table) { + $table->string('slug')->nullable(); + + $table->unique(['lti_tool_id', 'slug']); + }); + + DB::update('UPDATE lti_tools SET slug = id'); + DB::update('UPDATE lti_tool_extras SET slug = id'); + + Schema::table('lti_tools', function (Blueprint $table) { + $table->string('slug')->nullable(false)->change(); + }); + + Schema::table('lti_tool_extras', function (Blueprint $table) { + $table->string('slug')->nullable(false)->change(); + }); + } + + public function down(): void + { + Schema::table('lti_tools', function (Blueprint $table) { + $table->dropColumn('slug'); + }); + + Schema::table('lti_tool_extras', function (Blueprint $table) { + $table->dropColumn('slug'); + }); + } +}; diff --git a/sourcecode/hub/docker/nginx/server_tokens.conf b/sourcecode/hub/docker/nginx/server_tokens.conf new file mode 100644 index 0000000000..b3a5f356a8 --- /dev/null +++ b/sourcecode/hub/docker/nginx/server_tokens.conf @@ -0,0 +1 @@ +server_tokens off; diff --git a/sourcecode/hub/docker/php/php-dev.ini b/sourcecode/hub/docker/php/php-dev.ini index ba44f41b50..d45ab6acbe 100644 --- a/sourcecode/hub/docker/php/php-dev.ini +++ b/sourcecode/hub/docker/php/php-dev.ini @@ -1,3 +1,5 @@ +expose_php = on + xdebug.client_host = host.docker.internal xdebug.discover_client_host = on xdebug.idekey = PHPSTORM diff --git a/sourcecode/hub/docker/php/php.ini b/sourcecode/hub/docker/php/php.ini index 21b8f52862..21baed1971 100644 --- a/sourcecode/hub/docker/php/php.ini +++ b/sourcecode/hub/docker/php/php.ini @@ -1 +1 @@ -; left blank so far +expose_php = off diff --git a/sourcecode/hub/lang/en/messages.php b/sourcecode/hub/lang/en/messages.php index 7f6cb18e09..c1f9c477fd 100644 --- a/sourcecode/hub/lang/en/messages.php +++ b/sourcecode/hub/lang/en/messages.php @@ -149,7 +149,7 @@ 'toggle-listing-of-all-versions' => 'Toggle listing of all versions', 'single-sign-on' => 'Single sign-on', 'recent-content' => 'Recent content', - 'about-edlib' => ':site is powered by :edlib, an open source system for managing learning resources, developed by Cerpus.', + 'about-edlib' => ':site is powered by :edlib, an open source system for managing learning resources, developed by Edlib AS.', 'contact-us' => 'Contact us', 'documentation' => 'Documentation', 'facebook' => 'Facebook', @@ -215,6 +215,7 @@ 'lti-platform-authorizes-edit' => 'The platform authorizes edit access', 'lti-platform-authorizes-edit-help' => 'Transfers responsibility for access control of editing from :site to the platform, i.e. :site will accept all valid edit requests from the platform', 'dangerous-lti-platform-settings' => 'These settings are dangerous, and should only be enabled for trusted platforms with email verification.', + 'url-slug' => 'URL slug', 'users' => 'Users', 'contexts' => 'Contexts', 'nothing-to-display' => 'Nothing to display.', diff --git a/sourcecode/hub/lang/nb/messages.php b/sourcecode/hub/lang/nb/messages.php index 6f264e08d7..63ae34dc1b 100644 --- a/sourcecode/hub/lang/nb/messages.php +++ b/sourcecode/hub/lang/nb/messages.php @@ -80,7 +80,7 @@ 'use-content' => 'Bruk innhold', 'edit-content' => 'Rediger innhold', 'delete-content' => 'Slett innhold', - 'delete-content-confirm-text' => 'Innholdet vil bli fjernet fra Edlib. En feilmelding vil vises der innholdet er brukt', + 'delete-content-confirm-text' => 'Innholdet vil bli fjernet fra Edlib og en feilmelding vil vises der innholdet er i bruk', 'num-content-found' => '{0} Ingen innhold funnet|[1,*] :count innhold funnet', 'today' => 'i dag', 'number-of-views' => 'Antall visninger', diff --git a/sourcecode/hub/lang/nn/messages.php b/sourcecode/hub/lang/nn/messages.php index aec452a60a..83aa72b0a1 100644 --- a/sourcecode/hub/lang/nn/messages.php +++ b/sourcecode/hub/lang/nn/messages.php @@ -37,8 +37,9 @@ 'filter-language-all' => 'Alle språk', 'loading' => 'Lastar innhald', 'author' => 'Forfattar', - 'views' => 'Framsyningar', + 'views' => 'Visningar', 'title' => 'Tittel', + 'name' => 'Namn', 'content-type' => 'Type innhald', 'link-to-share' => 'Del denne lenka', 'filter-remove' => 'Fjern filteret', @@ -78,5 +79,24 @@ 'details' => 'Detaljar', 'result-list' => 'Vis resultata som ei liste', 'result-grid' => 'Vis resultata som eit rutenett', - 'about-edlib' => ':site er drive av :edlib, eit system for organisering av læreressursar, basert på open kjeldekode utvikla av Cerpus AS.', + 'about-edlib' => ':site er drive av :edlib, eit system for organisering av læreressursar, basert på open kjeldekode utvikla av Edlib AS.', + 'statistics' => 'Statistikk', + 'preview' => 'Førehandsvisning', + 'number-of-views' => 'Antall visningar', + 'view-detail' => 'Detalj', + 'view-embed' => 'Integrert', + 'view-lti_platform' => 'LTI', + 'view-standalone' => 'Frittståande', + 'view-total' => 'Totalt', + 'chart-no-data' => 'Ingen data', + 'chart-load-error' => 'Lasting feila', + 'debug-mode' => 'Feilsøkingsmodus', + 'debug-mode-form-help' => 'Feilsøkingsmodus vil avsløra tekniske detaljar som kan vera til hjelp under feilsøking eller utvikling av innhaldstypar.', + 'delete' => 'Slett', + 'cancel' => 'Avbryt', + 'go-back' => 'Tilbake', + 'filter' => 'Filter', + 'alert-content-deleted' => 'Innhaldet er sletta.', + 'confirm-delete-content' => 'Er du sikker på at du vil slette innhaldet?', + 'delete-content-confirm-text' => 'Innhaldet vil bli fjerna fra Edlib og ei feilmelding vil visast der innhaldet er i bruk.', ]; diff --git a/sourcecode/hub/package-lock.json b/sourcecode/hub/package-lock.json index 89ef04f7a9..076e0c6990 100644 --- a/sourcecode/hub/package-lock.json +++ b/sourcecode/hub/package-lock.json @@ -7,23 +7,52 @@ "dependencies": { "@fontsource/lato": "^5.1.0", "@popperjs/core": "^2.11.8", - "billboard.js": "^3.14.0", + "billboard.js": "^3.14.2", "bootstrap": "^5.3.3", "bootstrap-icons": "^1.11.3", "choices.js": "^11.0.2", "date-fns": "^4.1.0", - "htmx.org": "^2.0.3" + "htmx.org": "^2.0.3", + "swagger-ui": "^5.18.2" }, "devDependencies": { - "laravel-vite-plugin": "^1.0.5", - "sass": "^1.80.6", - "vite": "^5.4.10", + "laravel-vite-plugin": "^1.0.6", + "sass": "^1.81.0", + "vite": "^5.4.11", "vite-plugin-manifest-sri": "^0.2.0" }, "engines": { "node": "^18" } }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", + "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@braintree/sanitize-url": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.0.4.tgz", + "integrity": "sha512-hPYRrKFoI+nuckPgDJfyYAkybFvheo4usS0Vw0HNAe+fmGBQA5Az37b/yStO284atBoqqdOUhKJ3d9Zw3PQkcQ==" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -703,9 +732,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.4.tgz", - "integrity": "sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", + "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", "cpu": [ "arm" ], @@ -716,9 +745,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.4.tgz", - "integrity": "sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", + "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", "cpu": [ "arm64" ], @@ -729,9 +758,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.4.tgz", - "integrity": "sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", + "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", "cpu": [ "arm64" ], @@ -742,9 +771,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.4.tgz", - "integrity": "sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", "cpu": [ "x64" ], @@ -755,9 +784,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.4.tgz", - "integrity": "sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", + "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", "cpu": [ "arm64" ], @@ -768,9 +797,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.4.tgz", - "integrity": "sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", + "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", "cpu": [ "x64" ], @@ -781,9 +810,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.4.tgz", - "integrity": "sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", + "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", "cpu": [ "arm" ], @@ -794,9 +823,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.4.tgz", - "integrity": "sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", + "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", "cpu": [ "arm" ], @@ -807,9 +836,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.4.tgz", - "integrity": "sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", + "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", "cpu": [ "arm64" ], @@ -820,9 +849,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.4.tgz", - "integrity": "sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", + "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", "cpu": [ "arm64" ], @@ -833,9 +862,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.4.tgz", - "integrity": "sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", + "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", "cpu": [ "ppc64" ], @@ -846,9 +875,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.4.tgz", - "integrity": "sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", + "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", "cpu": [ "riscv64" ], @@ -859,9 +888,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.4.tgz", - "integrity": "sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", + "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", "cpu": [ "s390x" ], @@ -872,9 +901,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.4.tgz", - "integrity": "sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", + "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", "cpu": [ "x64" ], @@ -885,9 +914,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.4.tgz", - "integrity": "sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", + "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", "cpu": [ "x64" ], @@ -898,9 +927,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.4.tgz", - "integrity": "sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", + "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", "cpu": [ "arm64" ], @@ -911,9 +940,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.4.tgz", - "integrity": "sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", + "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", "cpu": [ "ia32" ], @@ -924,9 +953,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.4.tgz", - "integrity": "sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", + "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", "cpu": [ "x64" ], @@ -936,6 +965,483 @@ "win32" ] }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true + }, + "node_modules/@swagger-api/apidom-ast": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-beta.3.tgz", + "integrity": "sha512-JOXGfadL3ucJH+MY9BDT7dJOwFy0jX3XaAY/CWR92EnliEYfaEzZvH08FGnyqyYHcfT8T0DLKna5CWUHaskZuw==", + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "unraw": "^3.0.0" + } + }, + "node_modules/@swagger-api/apidom-core": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-beta.3.tgz", + "integrity": "sha512-oRcv3PgwSAvfxvai0afGt/rC2Kk9Zs2ArLPZ6FnVCv/GSnMsuvIQJc5UH29P9eGFcLJIZpQtEHnU6W+u8u0zAA==", + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "minim": "~0.23.8", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "short-unique-id": "^5.0.2", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-error": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-beta.3.tgz", + "integrity": "sha512-cW1tzehphuxA0uM+1m4/0G1d/WjDQyF+RL9D9t1mfhuVxr8AorgYUgY+bjg0pkLfiSTwjrDiuTbYM+jZwrHx8w==", + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7" + } + }, + "node_modules/@swagger-api/apidom-json-pointer": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-beta.3.tgz", + "integrity": "sha512-r6Gvbj2XDcK1wIULoclHcGYPAVXeUkj5ECRslB/Zle/fOU0Jb8s4mmFARyQE/DT+fQggXn8nUJBda3NWPK4GcA==", + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-ns-api-design-systems": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-beta.3.tgz", + "integrity": "sha512-x+NiLR0xZ0VB8AMJr7ii+6A27AP2CGjLyPQr6JutnifXG+vpkjbgXCPyz2qlmrvuLIkBJIE2lBuyX3+qQXmgCw==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-ns-asyncapi-2": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-beta.3.tgz", + "integrity": "sha512-9E4/kTf/OzV3vgRjZOB+6TRqQX2ljirD+UBQ8QPSJKBUTtq8+F7U9a8Z9AGYrKCQUMgbge5JMYCqHmOmrJKVUA==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-beta.3.tgz", + "integrity": "sha512-Sc/ywYCHFIMwhZX0Yo+OTmHUvszv3JE3xsvpd18nu7rH+jNyA10oUdTMgnRsTNMnL7siVO+32OKQkdLOSKsEHA==", + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^1.0.0-beta.3", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" + } + }, + "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-beta.3.tgz", + "integrity": "sha512-UuGfaJfWzsTCTEyxyKtM86SNdS4EsWB/+j8JWw88h7nFK59YNDmnuXk9PpFyuccpIAHnDq7UJypD3lRvNkJdhQ==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" + } + }, + "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-beta.3.tgz", + "integrity": "sha512-7Snaf8/qZ3Q9xnjEXo2cJ8L4pvDbHA+k/j7rqbY4o3h5EeMy93ClVUwoeJ2y/JWax/V1DWTyYMhq+9dXlcIUYQ==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" + } + }, + "node_modules/@swagger-api/apidom-ns-openapi-2": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-beta.3.tgz", + "integrity": "sha512-eBNUkQdIDE2fWUXdIeRpN9OMxwfxU2WJFMRHst204Doanh8iJVp3Mz/+z9agHJ6Pkqth2XTXA0EDd1QiI37t+g==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-ns-openapi-3-0": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-beta.3.tgz", + "integrity": "sha512-wKMdk5nplkT2PA1sRFZ2WOLmb7xi9++T6UnCeivmV+sy5NtUPpwkJLUWWIlZdZLyiGKmhZQ1gVvhsbyWRoAVPw==", + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-ns-openapi-3-1": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-beta.3.tgz", + "integrity": "sha512-XltfOZNTjrBvrWx1hPU6pHn7lHKKY9jXmiQzojX/jhMjZ6Kp6TLGjMMU3SmEUPU6sTaXKUeO5UUTxe2v6VmqMA==", + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^1.0.0-beta.3", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-json-pointer": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-ns-workflows-1": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-1.0.0-beta.3.tgz", + "integrity": "sha512-+7i8CZAC+TypSYuxTtwXH2qIyQC1ATn8r+1pW4NWCs4F2Yr4K2gGG4ZmOE6ckNa+Q53yyx+Spt7xhLfZDJZp/w==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-beta.3.tgz", + "integrity": "sha512-IpnxjLDVdRaY+ewNW8zbiMzYu5eKifpioFPGDlHc2MoTW6zqo5UKViZKL4MbsncySWBj7+URvTIFYjip3TvkKg==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-beta.3.tgz", + "integrity": "sha512-Pvj+4OMIzKMx77Ulbp/CdWGAQhor88q5BJlY3cuSNd2Oth+mfe6r7NUXWVSpG6H9+9Y6YJdnGOzQ1PHWJPOlqA==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-beta.3.tgz", + "integrity": "sha512-Z8xIy3pirwAapLgZ18BqRVua5rh0NsvQNpx+5Bi5yJD+SD6Syk5OqsgFkqN7T/LmyqpivQiYRgItUBaHXuDnxg==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-beta.3.tgz", + "integrity": "sha512-Xl9MU1+24ZTDuGzy/mKVPlnMSvgA/lS+AoqwMzxLMuiIsTmnQX3gEdiM+pXmK7rg1KV/k0aLwDLKt3e00CPiXQ==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-json": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-beta.3.tgz", + "integrity": "sha512-28zQdF8oeaUmNxZNU0De4JUY9jvxiaN+QCJ1GZN9aQ6NQ/eOAuGg+HRuL8+RrSe4STacdi1FCX46jHcMGQeqfg==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^1.0.0-beta.3", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "tree-sitter": "=0.21.1", + "tree-sitter-json": "=0.24.8", + "web-tree-sitter": "=0.24.3" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-beta.3.tgz", + "integrity": "sha512-ufiQMl89sTGf09qlh/QvFLEUs9FH9ZZV4mjz1xIB127rnNbWg/sSGr0WIcJGKoLrioI9orb+7aqIhmSDw/plmw==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-beta.3.tgz", + "integrity": "sha512-yINlDTIZCywuKRsBeJJDmQLV4+r9FaWDezb4omw6xFQnQZQV1tHgIb549OsV6lT70TabLj+HoMYNLQ9/Bm59Yw==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-beta.3.tgz", + "integrity": "sha512-kBZsyNHtp6w41g9N5c+PF4FqoE8vosxgYJEfhQeQs4qXK7T7d8sfjXwcnWRjqlOM4X8dt5R359h58AfwyEF20w==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-beta.3.tgz", + "integrity": "sha512-K/FRLCuB0UD9Nq/CNqfjkSVfQfzcpA7lJCg6QueZKd0dQJ54dyHFU9AroshutXHTmEjBleoL7V1K3PNh10HiYQ==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-beta.3.tgz", + "integrity": "sha512-EUdpzJnqZqCu2keEyOxlCED/u0oaA05c6dO48XzbdyENONY/etoN5wrEoqxqxOz+1cC+FZWj/cnmsXdFfbJlEg==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-beta.3.tgz", + "integrity": "sha512-2Q9vmrgTQ4cA5WALGyTLp8tF984R9C7QmDOjGf/ngrTIQLyyrQZ0ZDaXL7RHTmT6K9Lg6axMpKquBNiO+Aff6g==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-workflows-json-1": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-1.0.0-beta.3.tgz", + "integrity": "sha512-OsKz09YcfQfTbiNZueTLHBrn7umnMjtuN0ZzuNiBs5txaLS196grpzyTiG+4UJ1zIWvjvZmLZEbQqbKZ9qTw8A==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-workflows-yaml-1": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-1.0.0-beta.3.tgz", + "integrity": "sha512-IifK3T6UtqBkIoHOQe6QRGpFU9LFqmJ5T1JzbWnVX+gazoVE+N9ZkFWQfb9pKCaCfAwPVp+vai6bQ2eUsGh4CA==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-beta.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-beta.3.tgz", + "integrity": "sha512-sSGxnMTNNTqhJBeUOge4Q/5l/7170maoxyrK6J57kRxqkchSAqam73VIBpKa8c/sJ7zhdZI7CZ9aTJe/q7vc7w==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-ast": "^1.0.0-beta.3", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@swagger-api/apidom-error": "^1.0.0-beta.3", + "@tree-sitter-grammars/tree-sitter-yaml": "=0.6.1", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "tree-sitter": "=0.21.1", + "web-tree-sitter": "=0.24.3" + } + }, + "node_modules/@swagger-api/apidom-reference": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-beta.3.tgz", + "integrity": "sha512-MkSW/uKA+iCUeQ5HqICGxXPZI1y5vbXnOZLT+22+ZvaO3+5j7tD2aS9mAF+140VaaE5AkpZE28XC9TaYyjEwDg==", + "dependencies": { + "@babel/runtime-corejs3": "^7.20.7", + "@swagger-api/apidom-core": "^1.0.0-beta.3", + "@types/ramda": "~0.30.0", + "axios": "^1.7.4", + "minimatch": "^7.4.3", + "process": "^0.11.10", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + }, + "optionalDependencies": { + "@swagger-api/apidom-error": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-json-pointer": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-workflows-json-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-workflows-yaml-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.3 <1.0.0-rc.0" + } + }, + "node_modules/@tree-sitter-grammars/tree-sitter-yaml": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@tree-sitter-grammars/tree-sitter-yaml/-/tree-sitter-yaml-0.6.1.tgz", + "integrity": "sha512-FqgUNdtMuPpk5D/9YQvCxTK4tzlUEVq/yNewdcxJbMv0KVt/yDfuuUn5ZvxphftKyOco+1e/6/oNHCKVQ5A83Q==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.8.0" + }, + "peerDependencies": { + "tree-sitter": "^0.21.1" + }, + "peerDependenciesMeta": { + "tree_sitter": { + "optional": true + } + } + }, + "node_modules/@tree-sitter-grammars/tree-sitter-yaml/node_modules/node-addon-api": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.0.tgz", + "integrity": "sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, "node_modules/@types/d3-selection": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", @@ -955,10 +1461,93 @@ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, + "node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/ramda": { + "version": "0.30.2", + "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.30.2.tgz", + "integrity": "sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA==", + "dependencies": { + "types-ramda": "^0.30.1" + } + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "node_modules/apg-lite": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/apg-lite/-/apg-lite-1.0.4.tgz", + "integrity": "sha512-B32zCN3IdHIc99Vy7V9BaYTUzLeRA8YXYY1aQD1/5I2aqIrO0coi4t6hJPqMisidlBxhyME8UexkHt31SlR6Og==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autolinker": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz", + "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==", + "dependencies": { + "tslib": "^2.3.0" + } + }, + "node_modules/axios": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/billboard.js": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/billboard.js/-/billboard.js-3.14.0.tgz", - "integrity": "sha512-A1uNa7oXTSee8vNDZlwgFvGiTWNRe8IZY+DETVhPinBOh35hCk+sSxXKEXB4/r8p8ArTEFXnthu+MDPsKjHPWQ==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/billboard.js/-/billboard.js-3.14.2.tgz", + "integrity": "sha512-PPqqW+zm2qP41AjAU1eegCI2a98k/52N9z1NhXT73uHXlmw4LyqdWVSEx6vFbAjN5hNDYqwsZHF/tRqWZKdhqQ==", "dependencies": { "@types/d3-selection": "^3.0.11", "@types/d3-transition": "^3.0.9", @@ -1010,6 +1599,14 @@ } ] }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -1023,6 +1620,33 @@ "node": ">=8" } }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/choices.js": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/choices.js/-/choices.js-11.0.2.tgz", @@ -1046,6 +1670,31 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -1054,6 +1703,37 @@ "node": ">= 10" } }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js-pure": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", + "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, "node_modules/d3-array": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", @@ -1289,6 +1969,30 @@ "url": "https://github.com/sponsors/kossnocorp" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -1302,6 +2006,19 @@ "node": ">=0.10" } }, + "node_modules/dompurify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" + }, + "node_modules/drange": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", + "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "engines": { + "node": ">=4" + } + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -1340,6 +2057,23 @@ "@esbuild/win32-x64": "0.21.5" } }, + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" + }, + "node_modules/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -1353,6 +2087,46 @@ "node": ">=8" } }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1375,6 +2149,44 @@ "node": ">=10" } }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" + } + }, + "node_modules/highlightjs-vue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz", + "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==" + }, "node_modules/htmx.org": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-2.0.3.tgz", @@ -1391,11 +2203,34 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/immutable": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", - "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", - "dev": true + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internmap": { "version": "2.0.3", @@ -1405,21 +2240,60 @@ "node": ">=12" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.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, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "optional": 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, "optional": true, "dependencies": { "is-extglob": "^2.1.1" @@ -1428,6 +2302,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -1438,10 +2321,31 @@ "node": ">=0.12.0" } }, + "node_modules/js-file-download": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz", + "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==" + }, + "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==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/laravel-vite-plugin": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.5.tgz", - "integrity": "sha512-Zv+to82YLBknDCZ6g3iwOv9wZ7f6EWStb9pjSm7MGe9Mfoy5ynT2ssZbGsMr1udU6rDg9HOoYEVGw5Qf+p9zbw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.6.tgz", + "integrity": "sha512-B34OqmZc/rV1KvSjst8SsUm/LKHsuDusw8jiZCIhlnTHXbXnK89JUM9pTJuk6E/Vc/1DT2gX7qNfhipak1WS8w==", "dev": true, "dependencies": { "picocolors": "^1.0.0", @@ -1457,6 +2361,40 @@ "vite": "^5.0.0" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "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==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -1471,10 +2409,54 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minim": { + "version": "0.23.8", + "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.8.tgz", + "integrity": "sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==", + "dependencies": { + "lodash": "^4.15.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -1489,6 +2471,19 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" + }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -1496,6 +2491,98 @@ "dev": true, "optional": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch-commonjs": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz", + "integrity": "sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/openapi-path-templating": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/openapi-path-templating/-/openapi-path-templating-1.6.0.tgz", + "integrity": "sha512-1atBNwOUrZXthTvlvvX8k8ovFEF3iA8mDidYMkdOtvVdndBhTrspbwGXNOzEUaJhm9iUl4Tf5uQaeTLAJvwPig==", + "dependencies": { + "apg-lite": "^1.0.3" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/openapi-server-url-templating": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/openapi-server-url-templating/-/openapi-server-url-templating-1.1.0.tgz", + "integrity": "sha512-dtyTFKx2xVcO0W8JKaluXIHC9l/MLjHeflBaWjiWNMCHp/TBs9dEjQDbj/VFlHR4omFOKjjmqm1pW1aCAhmPBg==", + "dependencies": { + "apg-lite": "^1.0.3" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -1515,9 +2602,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "funding": [ { @@ -1535,13 +2622,224 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/ramda": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", + "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/ramda-adjunct": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-5.1.0.tgz", + "integrity": "sha512-8qCpl2vZBXEJyNbi4zqcgdfHtcdsWjOGbiNSEnEBrM6Y0OKOT8UxJbIVGm1TIcjaSu2MxaWcgtsNlKlCk7o7qg==", + "engines": { + "node": ">=0.10.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda-adjunct" + }, + "peerDependencies": { + "ramda": ">= 0.30.0" + } + }, + "node_modules/randexp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", + "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-copy-to-clipboard": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", + "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "dependencies": { + "copy-to-clipboard": "^3.3.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^15.3.0 || 16 || 17 || 18" + } + }, + "node_modules/react-debounce-input": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.3.0.tgz", + "integrity": "sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==", + "dependencies": { + "lodash.debounce": "^4", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^15.3.0 || 16 || 17 || 18" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-immutable-proptypes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz", + "integrity": "sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==", + "dependencies": { + "invariant": "^2.2.2" + }, + "peerDependencies": { + "immutable": ">=3.6.2" + } + }, + "node_modules/react-immutable-pure-component": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-immutable-pure-component/-/react-immutable-pure-component-2.2.2.tgz", + "integrity": "sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A==", + "peerDependencies": { + "immutable": ">= 2 || >= 4.0.0-rc", + "react": ">= 16.6", + "react-dom": ">= 16.6" + } + }, + "node_modules/react-inspector": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", + "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-redux": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz", + "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==", + "dependencies": { + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25", + "react": "^18.0", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-syntax-highlighter": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz", + "integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.4.1", + "highlightjs-vue": "^1.0.0", + "lowlight": "^1.17.0", + "prismjs": "^1.27.0", + "refractor": "^3.6.0" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, "node_modules/readdirp": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", @@ -1555,10 +2853,91 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" + }, + "node_modules/refractor": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", + "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", + "dependencies": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.27.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/prismjs": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/remarkable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz", + "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==", + "dependencies": { + "argparse": "^1.0.10", + "autolinker": "^3.11.0" + }, + "bin": { + "remarkable": "bin/remarkable.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/remarkable/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==" + }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/rollup": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.4.tgz", - "integrity": "sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", + "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", "dev": true, "dependencies": { "@types/estree": "1.0.6" @@ -1571,24 +2950,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.4", - "@rollup/rollup-android-arm64": "4.24.4", - "@rollup/rollup-darwin-arm64": "4.24.4", - "@rollup/rollup-darwin-x64": "4.24.4", - "@rollup/rollup-freebsd-arm64": "4.24.4", - "@rollup/rollup-freebsd-x64": "4.24.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.4", - "@rollup/rollup-linux-arm-musleabihf": "4.24.4", - "@rollup/rollup-linux-arm64-gnu": "4.24.4", - "@rollup/rollup-linux-arm64-musl": "4.24.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.4", - "@rollup/rollup-linux-riscv64-gnu": "4.24.4", - "@rollup/rollup-linux-s390x-gnu": "4.24.4", - "@rollup/rollup-linux-x64-gnu": "4.24.4", - "@rollup/rollup-linux-x64-musl": "4.24.4", - "@rollup/rollup-win32-arm64-msvc": "4.24.4", - "@rollup/rollup-win32-ia32-msvc": "4.24.4", - "@rollup/rollup-win32-x64-msvc": "4.24.4", + "@rollup/rollup-android-arm-eabi": "4.27.4", + "@rollup/rollup-android-arm64": "4.27.4", + "@rollup/rollup-darwin-arm64": "4.27.4", + "@rollup/rollup-darwin-x64": "4.27.4", + "@rollup/rollup-freebsd-arm64": "4.27.4", + "@rollup/rollup-freebsd-x64": "4.27.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", + "@rollup/rollup-linux-arm-musleabihf": "4.27.4", + "@rollup/rollup-linux-arm64-gnu": "4.27.4", + "@rollup/rollup-linux-arm64-musl": "4.27.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", + "@rollup/rollup-linux-riscv64-gnu": "4.27.4", + "@rollup/rollup-linux-s390x-gnu": "4.27.4", + "@rollup/rollup-linux-x64-gnu": "4.27.4", + "@rollup/rollup-linux-x64-musl": "4.27.4", + "@rollup/rollup-win32-arm64-msvc": "4.27.4", + "@rollup/rollup-win32-ia32-msvc": "4.27.4", + "@rollup/rollup-win32-x64-msvc": "4.27.4", "fsevents": "~2.3.2" } }, @@ -1597,19 +2976,38 @@ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.80.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.6.tgz", - "integrity": "sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.81.0.tgz", + "integrity": "sha512-Q4fOxRfhmv3sqCLoGfvrC9pRV8btc0UtqL9mN6Yrv6Qi9ScL55CVH1vlPP863ISLEEMNLLuu9P+enCeGHlnzhA==", "dev": true, "dependencies": { "chokidar": "^4.0.0", - "immutable": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -1622,6 +3020,49 @@ "@parcel/watcher": "^2.4.1" } }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/short-unique-id": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.2.0.tgz", + "integrity": "sha512-cMGfwNyfDZ/nzJ2k2M+ClthBIh//GlZl1JEf47Uoa9XR11bz8Pa2T2wQO4bVrRdH48LrIDWJahQziKo3MjhsWg==", + "bin": { + "short-unique-id": "bin/short-unique-id", + "suid": "bin/short-unique-id" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -1631,6 +3072,104 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/swagger-client": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.32.1.tgz", + "integrity": "sha512-vXRjuiUU8QbyniRwv/cOcv2glJS3eLrj3JRmge+R/Kwb+xH9t9SzWAyoalhpAkOlm+NEqpJe9wmbOJbYGR74+g==", + "dependencies": { + "@babel/runtime-corejs3": "^7.22.15", + "@scarf/scarf": "=1.4.0", + "@swagger-api/apidom-core": ">=1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-error": ">=1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-json-pointer": ">=1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-openapi-3-1": ">=1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-reference": ">=1.0.0-beta.3 <1.0.0-rc.0", + "cookie": "~0.7.2", + "deepmerge": "~4.3.0", + "fast-json-patch": "^3.0.0-1", + "js-yaml": "^4.1.0", + "neotraverse": "=0.6.18", + "node-abort-controller": "^3.1.1", + "node-fetch-commonjs": "^3.3.2", + "openapi-path-templating": "^1.5.1", + "openapi-server-url-templating": "^1.0.0", + "ramda": "^0.30.1", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/swagger-ui": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-5.18.2.tgz", + "integrity": "sha512-zu28qHMVaXrL2T02xEnItoKQcS6tikJs6IJpzjoXexqJCqhwYAXOOypnXYMPkVfq9Ige67oPuUQvEGdeid0/Aw==", + "dependencies": { + "@babel/runtime-corejs3": "^7.24.7", + "@braintree/sanitize-url": "=7.0.4", + "@scarf/scarf": "=1.4.0", + "base64-js": "^1.5.1", + "classnames": "^2.5.1", + "css.escape": "1.5.1", + "deep-extend": "0.6.0", + "dompurify": "=3.1.6", + "ieee754": "^1.2.1", + "immutable": "^3.x.x", + "js-file-download": "^0.4.12", + "js-yaml": "=4.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.8.1", + "randexp": "^0.5.3", + "randombytes": "^2.1.0", + "react": ">=16.8.0 <19", + "react-copy-to-clipboard": "5.1.0", + "react-debounce-input": "=3.3.0", + "react-dom": ">=16.8.0 <19", + "react-immutable-proptypes": "2.2.0", + "react-immutable-pure-component": "^2.2.0", + "react-inspector": "^6.0.1", + "react-redux": "^9.1.2", + "react-syntax-highlighter": "^15.5.0", + "redux": "^5.0.1", + "redux-immutable": "^4.0.0", + "remarkable": "^2.0.1", + "reselect": "^5.1.1", + "serialize-error": "^8.1.0", + "sha.js": "^2.4.11", + "swagger-client": "^3.31.0", + "url-parse": "^1.5.10", + "xml": "=1.0.1", + "xml-but-prettier": "^1.0.1", + "zenscroll": "^4.0.2" + } + }, + "node_modules/swagger-ui/node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swagger-ui/node_modules/redux-immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz", + "integrity": "sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==", + "peerDependencies": { + "immutable": "^3.8.1 || ^4.0.0-rc.1" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1644,10 +3183,119 @@ "node": ">=8.0" } }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/tree-sitter": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.1.tgz", + "integrity": "sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.8.0" + } + }, + "node_modules/tree-sitter-json": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.24.8.tgz", + "integrity": "sha512-Tc9ZZYwHyWZ3Tt1VEw7Pa2scu1YO7/d2BCBbKTx5hXwig3UfdQjsOPkPyLpDJOn/m1UBEWYAtSdGAwCSyagBqQ==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^8.2.2", + "node-gyp-build": "^4.8.2" + }, + "peerDependencies": { + "tree-sitter": "^0.21.1" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true + } + } + }, + "node_modules/tree-sitter-json/node_modules/node-addon-api": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.0.tgz", + "integrity": "sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/tree-sitter/node_modules/node-addon-api": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.0.tgz", + "integrity": "sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/ts-mixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + }, + "node_modules/ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/types-ramda": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.30.1.tgz", + "integrity": "sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==", + "dependencies": { + "ts-toolbelt": "^9.6.0" + } + }, + "node_modules/unraw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz", + "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/vite": { - "version": "5.4.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", - "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, "dependencies": { "esbuild": "^0.21.3", @@ -1704,9 +3352,9 @@ } }, "node_modules/vite-plugin-full-reload": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz", - "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", "dev": true, "dependencies": { "picocolors": "^1.0.0", @@ -1718,6 +3366,46 @@ "resolved": "https://registry.npmjs.org/vite-plugin-manifest-sri/-/vite-plugin-manifest-sri-0.2.0.tgz", "integrity": "sha512-Zt5jt19xTIJ91LOuQTCtNG7rTFc5OziAjBz2H5NdCGqaOD1nxrWExLhcKW+W4/q8/jOPCg/n5ncYEQmqCxiGQQ==", "dev": true + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-tree-sitter": { + "version": "0.24.3", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.3.tgz", + "integrity": "sha512-uR9YNewr1S2EzPKE+y39nAwaTyobBaZRG/IsfkB/OT4v0lXtNj5WjtHKgn2h7eOYUWIZh5rK9Px7tI6S9CRKdA==", + "optional": true + }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" + }, + "node_modules/xml-but-prettier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz", + "integrity": "sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==", + "dependencies": { + "repeat-string": "^1.5.2" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/zenscroll": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zenscroll/-/zenscroll-4.0.2.tgz", + "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==" } } } diff --git a/sourcecode/hub/package.json b/sourcecode/hub/package.json index 015d06eda7..873aaaa00f 100644 --- a/sourcecode/hub/package.json +++ b/sourcecode/hub/package.json @@ -6,20 +6,21 @@ "build": "vite build" }, "devDependencies": { - "laravel-vite-plugin": "^1.0.5", - "sass": "^1.80.6", - "vite": "^5.4.10", + "laravel-vite-plugin": "^1.0.6", + "sass": "^1.81.0", + "vite": "^5.4.11", "vite-plugin-manifest-sri": "^0.2.0" }, "dependencies": { "@fontsource/lato": "^5.1.0", "@popperjs/core": "^2.11.8", - "billboard.js": "^3.14.0", + "billboard.js": "^3.14.2", "bootstrap": "^5.3.3", "bootstrap-icons": "^1.11.3", "choices.js": "^11.0.2", "date-fns": "^4.1.0", - "htmx.org": "^2.0.3" + "htmx.org": "^2.0.3", + "swagger-ui": "^5.18.2" }, "engines": { "node": "^18" diff --git a/sourcecode/hub/public/vendor/telescope/app.js b/sourcecode/hub/public/vendor/telescope/app.js index d1c0e7f28d..378d6cf438 100755 --- a/sourcecode/hub/public/vendor/telescope/app.js +++ b/sourcecode/hub/public/vendor/telescope/app.js @@ -1,2 +1,2 @@ /*! For license information please see app.js.LICENSE.txt */ -(()=>{var t,e={2110:(t,e,n)=>{"use strict";var o=Object.freeze({}),p=Array.isArray;function M(t){return null==t}function b(t){return null!=t}function c(t){return!0===t}function r(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function z(t){return"function"==typeof t}function a(t){return null!==t&&"object"==typeof t}var i=Object.prototype.toString;function O(t){return"[object Object]"===i.call(t)}function s(t){return"[object RegExp]"===i.call(t)}function A(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function u(t){return b(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function l(t){return null==t?"":Array.isArray(t)||O(t)&&t.toString===i?JSON.stringify(t,null,2):String(t)}function d(t){var e=parseFloat(t);return isNaN(e)?t:e}function f(t,e){for(var n=Object.create(null),o=t.split(","),p=0;p-1)return t.splice(o,1)}}var v=Object.prototype.hasOwnProperty;function R(t,e){return v.call(t,e)}function m(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var g=/-(\w)/g,L=m((function(t){return t.replace(g,(function(t,e){return e?e.toUpperCase():""}))})),y=m((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),_=/\B([A-Z])/g,N=m((function(t){return t.replace(_,"-$1").toLowerCase()}));var E=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var o=arguments.length;return o?o>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function T(t,e){e=e||0;for(var n=t.length-e,o=new Array(n);n--;)o[n]=t[n+e];return o}function B(t,e){for(var n in e)t[n]=e[n];return t}function C(t){for(var e={},n=0;n0,tt=Z&&Z.indexOf("edge/")>0;Z&&Z.indexOf("android");var et=Z&&/iphone|ipad|ipod|ios/.test(Z);Z&&/chrome\/\d+/.test(Z),Z&&/phantomjs/.test(Z);var nt,ot=Z&&Z.match(/firefox\/(\d+)/),pt={}.watch,Mt=!1;if(K)try{var bt={};Object.defineProperty(bt,"passive",{get:function(){Mt=!0}}),window.addEventListener("test-passive",null,bt)}catch(t){}var ct=function(){return void 0===nt&&(nt=!K&&void 0!==n.g&&(n.g.process&&"server"===n.g.process.env.VUE_ENV)),nt},rt=K&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function zt(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,it="undefined"!=typeof Symbol&&zt(Symbol)&&"undefined"!=typeof Reflect&&zt(Reflect.ownKeys);at="undefined"!=typeof Set&&zt(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var Ot=null;function st(t){void 0===t&&(t=null),t||Ot&&Ot._scope.off(),Ot=t,t&&t._scope.on()}var At=function(){function t(t,e,n,o,p,M,b,c){this.tag=t,this.data=e,this.children=n,this.text=o,this.elm=p,this.ns=void 0,this.context=M,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=b,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),ut=function(t){void 0===t&&(t="");var e=new At;return e.text=t,e.isComment=!0,e};function lt(t){return new At(void 0,void 0,void 0,String(t))}function dt(t){var e=new At(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var ft=0,qt=[],ht=function(){for(var t=0;t0&&(Vt((o=Kt(o,"".concat(e||"","_").concat(n)))[0])&&Vt(a)&&(i[z]=lt(a.text+o[0].text),o.shift()),i.push.apply(i,o)):r(o)?Vt(a)?i[z]=lt(a.text+o):""!==o&&i.push(lt(o)):Vt(o)&&Vt(a)?i[z]=lt(a.text+o.text):(c(t._isVList)&&b(o.tag)&&M(o.key)&&b(e)&&(o.key="__vlist".concat(e,"_").concat(n,"__")),i.push(o)));return i}var Zt=1,Qt=2;function Jt(t,e,n,o,M,i){return(p(n)||r(n))&&(M=o,o=n,n=void 0),c(i)&&(M=Qt),function(t,e,n,o,M){if(b(n)&&b(n.__ob__))return ut();b(n)&&b(n.is)&&(e=n.is);if(!e)return ut();0;p(o)&&z(o[0])&&((n=n||{}).scopedSlots={default:o[0]},o.length=0);M===Qt?o=$t(o):M===Zt&&(o=function(t){for(var e=0;e0,c=e?!!e.$stable:!b,r=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(c&&p&&p!==o&&r===p.$key&&!b&&!p.$hasNormal)return p;for(var z in M={},e)e[z]&&"$"!==z[0]&&(M[z]=he(t,n,z,e[z]))}else M={};for(var a in n)a in M||(M[a]=We(n,a));return e&&Object.isExtensible(e)&&(e._normalized=M),Y(M,"$stable",c),Y(M,"$key",r),Y(M,"$hasNormal",b),M}function he(t,e,n,o){var M=function(){var e=Ot;st(t);var n=arguments.length?o.apply(null,arguments):o({}),M=(n=n&&"object"==typeof n&&!p(n)?[n]:$t(n))&&n[0];return st(e),n&&(!M||1===n.length&&M.isComment&&!fe(M))?void 0:n};return o.proxy&&Object.defineProperty(e,n,{get:M,enumerable:!0,configurable:!0}),M}function We(t,e){return function(){return t[e]}}function ve(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};Y(e,"_v_attr_proxy",!0),Re(e,t.$attrs,o,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||Re(t._listenersProxy={},t.$listeners,o,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||ge(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:E(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Ut(t,e,n)}))}}}function Re(t,e,n,o,p){var M=!1;for(var b in e)b in t?e[b]!==n[b]&&(M=!0):(M=!0,me(t,b,o,p));for(var b in t)b in e||(M=!0,delete t[b]);return M}function me(t,e,n,o){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[o][e]}})}function ge(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var Le,ye=null;function _e(t,e){return(t.__esModule||it&&"Module"===t[Symbol.toStringTag])&&(t=t.default),a(t)?e.extend(t):t}function Ne(t){if(p(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(Ye=function(){return $e.now()})}var Ve=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function Ke(){var t,e;for(Ge=Ye(),Fe=!0,De.sort(Ve),He=0;HeHe&&De[n].id>t.id;)n--;De.splice(n+1,0,t)}else De.push(t);je||(je=!0,ln(Ke))}}var Qe="watcher";"".concat(Qe," callback"),"".concat(Qe," getter"),"".concat(Qe," cleanup");var Je;var tn=function(){function t(t){void 0===t&&(t=!1),this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Je,!t&&Je&&(this.index=(Je.scopes||(Je.scopes=[])).push(this)-1)}return t.prototype.run=function(t){if(this.active){var e=Je;try{return Je=this,t()}finally{Je=e}}else 0},t.prototype.on=function(){Je=this},t.prototype.off=function(){Je=this.parent},t.prototype.stop=function(t){if(this.active){var e=void 0,n=void 0;for(e=0,n=this.effects.length;e-1)if(M&&!R(p,"default"))b=!1;else if(""===b||b===N(t)){var r=eo(String,p.type);(r<0||c-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!s(t)&&t.test(e)}function bo(t,e){var n=t.cache,o=t.keys,p=t._vnode;for(var M in n){var b=n[M];if(b){var c=b.name;c&&!e(c)&&co(n,M,o,p)}}}function co(t,e,n,o){var p=t[e];!p||o&&p.tag===o.tag||p.componentInstance.$destroy(),t[e]=null,W(n,e)}!function(t){t.prototype._init=function(t){var e=this;e._uid=Bn++,e._isVue=!0,e.__v_skip=!0,e._scope=new tn(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),o=e._parentVnode;n.parent=e.parent,n._parentVnode=o;var p=o.componentOptions;n.propsData=p.propsData,n._parentListeners=p.listeners,n._renderChildren=p.children,n._componentTag=p.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Vn(Cn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ce(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,p=n&&n.context;t.$slots=le(e._renderChildren,p),t.$scopedSlots=n?qe(t.$parent,n.data.scopedSlots,t.$slots):o,t._c=function(e,n,o,p){return Jt(t,e,n,o,p,!1)},t.$createElement=function(e,n,o,p){return Jt(t,e,n,o,p,!0)};var M=n&&n.data;wt(t,"$attrs",M&&M.attrs||o,null,!0),wt(t,"$listeners",e._parentListeners||o,null,!0)}(e),Ie(e,"beforeCreate",void 0,!1),function(t){var e=Tn(t.$options.inject,t);e&&(Et(!1),Object.keys(e).forEach((function(n){wt(t,n,e[n])})),Et(!0))}(e),gn(e),function(t){var e=t.$options.provide;if(e){var n=z(e)?e.call(t):e;if(!a(n))return;for(var o=en(t),p=it?Reflect.ownKeys(n):Object.keys(n),M=0;M1?T(n):n;for(var o=T(arguments,1),p='event handler for "'.concat(t,'"'),M=0,b=n.length;MparseInt(this.max)&&co(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)co(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){bo(t,(function(t){return Mo(e,t)}))})),this.$watch("exclude",(function(e){bo(t,(function(t){return!Mo(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Ne(t),n=e&&e.componentOptions;if(n){var o=po(n),p=this.include,M=this.exclude;if(p&&(!o||!Mo(p,o))||M&&o&&Mo(M,o))return e;var b=this.cache,c=this.keys,r=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;b[r]?(e.componentInstance=b[r].componentInstance,W(c,r),c.push(r)):(this.vnodeToCache=e,this.keyToCache=r),e.data.keepAlive=!0}return e||t&&t[0]}},ao={KeepAlive:zo};!function(t){var e={get:function(){return F}};Object.defineProperty(t,"config",e),t.util={warn:Un,extend:B,mergeOptions:Vn,defineReactive:wt},t.set=St,t.delete=Xt,t.nextTick=ln,t.observable=function(t){return Ct(t),t},t.options=Object.create(null),U.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,B(t.options.components,ao),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=T(arguments,1);return n.unshift(this),z(t.install)?t.install.apply(t,n):z(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Vn(this.options,t),this}}(t),oo(t),function(t){U.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&O(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&z(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(no),Object.defineProperty(no.prototype,"$isServer",{get:ct}),Object.defineProperty(no.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(no,"FunctionalRenderContext",{value:wn}),no.version="2.7.14";var io=f("style,class"),Oo=f("input,textarea,option,select,progress"),so=function(t,e,n){return"value"===n&&Oo(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Ao=f("contenteditable,draggable,spellcheck"),uo=f("events,caret,typing,plaintext-only"),lo=function(t,e){return vo(e)||"false"===e?"false":"contenteditable"===t&&uo(e)?e:"true"},fo=f("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),qo="http://www.w3.org/1999/xlink",ho=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Wo=function(t){return ho(t)?t.slice(6,t.length):""},vo=function(t){return null==t||!1===t};function Ro(t){for(var e=t.data,n=t,o=t;b(o.componentInstance);)(o=o.componentInstance._vnode)&&o.data&&(e=mo(o.data,e));for(;b(n=n.parent);)n&&n.data&&(e=mo(e,n.data));return function(t,e){if(b(t)||b(e))return go(t,Lo(e));return""}(e.staticClass,e.class)}function mo(t,e){return{staticClass:go(t.staticClass,e.staticClass),class:b(t.class)?[t.class,e.class]:e.class}}function go(t,e){return t?e?t+" "+e:t:e||""}function Lo(t){return Array.isArray(t)?function(t){for(var e,n="",o=0,p=t.length;o-1?Qo(t,e,n):fo(e)?vo(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Ao(e)?t.setAttribute(e,lo(e,n)):ho(e)?vo(n)?t.removeAttributeNS(qo,Wo(e)):t.setAttributeNS(qo,e,n):Qo(t,e,n)}function Qo(t,e,n){if(vo(n))t.removeAttribute(e);else{if(Q&&!J&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var o=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",o)};t.addEventListener("input",o),t.__ieph=!0}t.setAttribute(e,n)}}var Jo={create:Ko,update:Ko};function tp(t,e){var n=e.elm,o=e.data,p=t.data;if(!(M(o.staticClass)&&M(o.class)&&(M(p)||M(p.staticClass)&&M(p.class)))){var c=Ro(e),r=n._transitionClasses;b(r)&&(c=go(c,Lo(r))),c!==n._prevClass&&(n.setAttribute("class",c),n._prevClass=c)}}var ep,np,op,pp,Mp,bp,cp={create:tp,update:tp},rp=/[\w).+\-_$\]]/;function zp(t){var e,n,o,p,M,b=!1,c=!1,r=!1,z=!1,a=0,i=0,O=0,s=0;for(o=0;o=0&&" "===(u=t.charAt(A));A--);u&&rp.test(u)||(z=!0)}}else void 0===p?(s=o+1,p=t.slice(0,o).trim()):l();function l(){(M||(M=[])).push(t.slice(s,o).trim()),s=o+1}if(void 0===p?p=t.slice(0,o).trim():0!==s&&l(),M)for(o=0;o-1?{exp:t.slice(0,pp),key:'"'+t.slice(pp+1)+'"'}:{exp:t,key:null};np=t,pp=Mp=bp=0;for(;!Lp();)yp(op=gp())?Np(op):91===op&&_p(op);return{exp:t.slice(0,Mp),key:t.slice(Mp+1,bp)}}(t);return null===n.key?"".concat(t,"=").concat(e):"$set(".concat(n.exp,", ").concat(n.key,", ").concat(e,")")}function gp(){return np.charCodeAt(++pp)}function Lp(){return pp>=ep}function yp(t){return 34===t||39===t}function _p(t){var e=1;for(Mp=pp;!Lp();)if(yp(t=gp()))Np(t);else if(91===t&&e++,93===t&&e--,0===e){bp=pp;break}}function Np(t){for(var e=t;!Lp()&&(t=gp())!==e;);}var Ep,Tp="__r",Bp="__c";function Cp(t,e,n){var o=Ep;return function p(){null!==e.apply(null,arguments)&&Xp(t,p,n,o)}}var wp=cn&&!(ot&&Number(ot[1])<=53);function Sp(t,e,n,o){if(wp){var p=Ge,M=e;e=M._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=p||t.timeStamp<=0||t.target.ownerDocument!==document)return M.apply(this,arguments)}}Ep.addEventListener(t,e,Mt?{capture:n,passive:o}:n)}function Xp(t,e,n,o){(o||Ep).removeEventListener(t,e._wrapper||e,n)}function xp(t,e){if(!M(t.data.on)||!M(e.data.on)){var n=e.data.on||{},o=t.data.on||{};Ep=e.elm||t.elm,function(t){if(b(t[Tp])){var e=Q?"change":"input";t[e]=[].concat(t[Tp],t[e]||[]),delete t[Tp]}b(t[Bp])&&(t.change=[].concat(t[Bp],t.change||[]),delete t[Bp])}(n),Ht(n,o,Sp,Xp,Cp,e.context),Ep=void 0}}var kp,Ip={create:xp,update:xp,destroy:function(t){return xp(t,Io)}};function Dp(t,e){if(!M(t.data.domProps)||!M(e.data.domProps)){var n,o,p=e.elm,r=t.data.domProps||{},z=e.data.domProps||{};for(n in(b(z.__ob__)||c(z._v_attr_proxy))&&(z=e.data.domProps=B({},z)),r)n in z||(p[n]="");for(n in z){if(o=z[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),o===r[n])continue;1===p.childNodes.length&&p.removeChild(p.childNodes[0])}if("value"===n&&"PROGRESS"!==p.tagName){p._value=o;var a=M(o)?"":String(o);Pp(p,a)&&(p.value=a)}else if("innerHTML"===n&&No(p.tagName)&&M(p.innerHTML)){(kp=kp||document.createElement("div")).innerHTML="".concat(o,"");for(var i=kp.firstChild;p.firstChild;)p.removeChild(p.firstChild);for(;i.firstChild;)p.appendChild(i.firstChild)}else if(o!==r[n])try{p[n]=o}catch(t){}}}}function Pp(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,o=t._vModifiers;if(b(o)){if(o.number)return d(n)!==d(e);if(o.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Up={create:Dp,update:Dp},jp=m((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var o=t.split(n);o.length>1&&(e[o[0].trim()]=o[1].trim())}})),e}));function Fp(t){var e=Hp(t.style);return t.staticStyle?B(t.staticStyle,e):e}function Hp(t){return Array.isArray(t)?C(t):"string"==typeof t?jp(t):t}var Gp,Yp=/^--/,$p=/\s*!important$/,Vp=function(t,e,n){if(Yp.test(e))t.style.setProperty(e,n);else if($p.test(n))t.style.setProperty(N(e),n.replace($p,""),"important");else{var o=Zp(e);if(Array.isArray(n))for(var p=0,M=n.length;p-1?e.split(tM).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function nM(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(tM).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),o=" "+e+" ";n.indexOf(o)>=0;)n=n.replace(o," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function oM(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&B(e,pM(t.name||"v")),B(e,t),e}return"string"==typeof t?pM(t):void 0}}var pM=m((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),MM=K&&!J,bM="transition",cM="animation",rM="transition",zM="transitionend",aM="animation",iM="animationend";MM&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(rM="WebkitTransition",zM="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(aM="WebkitAnimation",iM="webkitAnimationEnd"));var OM=K?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function sM(t){OM((function(){OM(t)}))}function AM(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),eM(t,e))}function uM(t,e){t._transitionClasses&&W(t._transitionClasses,e),nM(t,e)}function lM(t,e,n){var o=fM(t,e),p=o.type,M=o.timeout,b=o.propCount;if(!p)return n();var c=p===bM?zM:iM,r=0,z=function(){t.removeEventListener(c,a),n()},a=function(e){e.target===t&&++r>=b&&z()};setTimeout((function(){r0&&(n=bM,a=b,i=M.length):e===cM?z>0&&(n=cM,a=z,i=r.length):i=(n=(a=Math.max(b,z))>0?b>z?bM:cM:null)?n===bM?M.length:r.length:0,{type:n,timeout:a,propCount:i,hasTransform:n===bM&&dM.test(o[rM+"Property"])}}function qM(t,e){for(;t.length1}function gM(t,e){!0!==e.data.show&&WM(e)}var LM=function(t){var e,n,o={},z=t.modules,a=t.nodeOps;for(e=0;eA?h(t,M(n[d+1])?null:n[d+1].elm,n,s,d,o):s>d&&v(e,i,A)}(i,u,d,n,z):b(d)?(b(t.text)&&a.setTextContent(i,""),h(i,null,d,0,d.length-1,n)):b(u)?v(u,0,u.length-1):b(t.text)&&a.setTextContent(i,""):t.text!==e.text&&a.setTextContent(i,e.text),b(A)&&b(s=A.hook)&&b(s=s.postpatch)&&s(t,e)}}}function L(t,e,n){if(c(n)&&b(t.parent))t.parent.data.pendingInsert=e;else for(var o=0;o-1,b.selected!==M&&(b.selected=M);else if(x(TM(b),o))return void(t.selectedIndex!==c&&(t.selectedIndex=c));p||(t.selectedIndex=-1)}}function EM(t,e){return e.every((function(e){return!x(e,t)}))}function TM(t){return"_value"in t?t._value:t.value}function BM(t){t.target.composing=!0}function CM(t){t.target.composing&&(t.target.composing=!1,wM(t.target,"input"))}function wM(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function SM(t){return!t.componentInstance||t.data&&t.data.transition?t:SM(t.componentInstance._vnode)}var XM={bind:function(t,e,n){var o=e.value,p=(n=SM(n)).data&&n.data.transition,M=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;o&&p?(n.data.show=!0,WM(n,(function(){t.style.display=M}))):t.style.display=o?M:"none"},update:function(t,e,n){var o=e.value;!o!=!e.oldValue&&((n=SM(n)).data&&n.data.transition?(n.data.show=!0,o?WM(n,(function(){t.style.display=t.__vOriginalDisplay})):vM(n,(function(){t.style.display="none"}))):t.style.display=o?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,o,p){p||(t.style.display=t.__vOriginalDisplay)}},xM={model:yM,show:XM},kM={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function IM(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?IM(Ne(e.children)):t}function DM(t){var e={},n=t.$options;for(var o in n.propsData)e[o]=t[o];var p=n._parentListeners;for(var o in p)e[L(o)]=p[o];return e}function PM(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var UM=function(t){return t.tag||fe(t)},jM=function(t){return"show"===t.name},FM={name:"transition",props:kM,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(UM)).length){0;var o=this.mode;0;var p=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return p;var M=IM(p);if(!M)return p;if(this._leaving)return PM(t,p);var b="__transition-".concat(this._uid,"-");M.key=null==M.key?M.isComment?b+"comment":b+M.tag:r(M.key)?0===String(M.key).indexOf(b)?M.key:b+M.key:M.key;var c=(M.data||(M.data={})).transition=DM(this),z=this._vnode,a=IM(z);if(M.data.directives&&M.data.directives.some(jM)&&(M.data.show=!0),a&&a.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(M,a)&&!fe(a)&&(!a.componentInstance||!a.componentInstance._vnode.isComment)){var i=a.data.transition=B({},c);if("out-in"===o)return this._leaving=!0,Gt(i,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),PM(t,p);if("in-out"===o){if(fe(M))return z;var O,s=function(){O()};Gt(c,"afterEnter",s),Gt(c,"enterCancelled",s),Gt(i,"delayLeave",(function(t){O=t}))}}return p}}},HM=B({tag:String,moveClass:String},kM);delete HM.mode;var GM={props:HM,beforeMount:function(){var t=this,e=this._update;this._update=function(n,o){var p=Se(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,p(),e.call(t,n,o)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),o=this.prevChildren=this.children,p=this.$slots.default||[],M=this.children=[],b=DM(this),c=0;c-1?Bo[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Bo[t]=/HTMLUnknownElement/.test(e.toString())},B(no.options.directives,xM),B(no.options.components,KM),no.prototype.__patch__=K?LM:w,no.prototype.$mount=function(t,e){return function(t,e,n){var o;t.$el=e,t.$options.render||(t.$options.render=ut),Ie(t,"beforeMount"),o=function(){t._update(t._render(),n)},new vn(t,o,w,{before:function(){t._isMounted&&!t._isDestroyed&&Ie(t,"beforeUpdate")}},!0),n=!1;var p=t._preWatchers;if(p)for(var M=0;M\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,rb=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,zb="[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(H.source,"]*"),ab="((?:".concat(zb,"\\:)?").concat(zb,")"),ib=new RegExp("^<".concat(ab)),Ob=/^\s*(\/?)>/,sb=new RegExp("^<\\/".concat(ab,"[^>]*>")),Ab=/^]+>/i,ub=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},hb=/&(?:lt|gt|quot|amp|#39);/g,Wb=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,vb=f("pre,textarea",!0),Rb=function(t,e){return t&&vb(t)&&"\n"===e[0]};function mb(t,e){var n=e?Wb:hb;return t.replace(n,(function(t){return qb[t]}))}function gb(t,e){for(var n,o,p=[],M=e.expectHTML,b=e.isUnaryTag||S,c=e.canBeLeftOpenTag||S,r=0,z=function(){if(n=t,o&&db(o)){var z=0,O=o.toLowerCase(),s=fb[O]||(fb[O]=new RegExp("([\\s\\S]*?)(]*>)","i"));v=t.replace(s,(function(t,n,o){return z=o.length,db(O)||"noscript"===O||(n=n.replace(//g,"$1").replace(//g,"$1")),Rb(O,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""}));r+=t.length-v.length,t=v,i(O,r-z,r)}else{var A=t.indexOf("<");if(0===A){if(ub.test(t)){var u=t.indexOf("--\x3e");if(u>=0)return e.shouldKeepComment&&e.comment&&e.comment(t.substring(4,u),r,r+u+3),a(u+3),"continue"}if(lb.test(t)){var l=t.indexOf("]>");if(l>=0)return a(l+2),"continue"}var d=t.match(Ab);if(d)return a(d[0].length),"continue";var f=t.match(sb);if(f){var q=r;return a(f[0].length),i(f[1],q,r),"continue"}var h=function(){var e=t.match(ib);if(e){var n={tagName:e[1],attrs:[],start:r};a(e[0].length);for(var o=void 0,p=void 0;!(o=t.match(Ob))&&(p=t.match(rb)||t.match(cb));)p.start=r,a(p[0].length),p.end=r,n.attrs.push(p);if(o)return n.unarySlash=o[1],a(o[0].length),n.end=r,n}}();if(h)return function(t){var n=t.tagName,r=t.unarySlash;M&&("p"===o&&bb(n)&&i(o),c(n)&&o===n&&i(n));for(var z=b(n)||!!r,a=t.attrs.length,O=new Array(a),s=0;s=0){for(v=t.slice(A);!(sb.test(v)||ib.test(v)||ub.test(v)||lb.test(v)||(R=v.indexOf("<",1))<0);)A+=R,v=t.slice(A);W=t.substring(0,A)}A<0&&(W=t),W&&a(W.length),e.chars&&W&&e.chars(W,r-W.length,r)}if(t===n)return e.chars&&e.chars(t),"break"};t;){if("break"===z())break}function a(e){r+=e,t=t.substring(e)}function i(t,n,M){var b,c;if(null==n&&(n=r),null==M&&(M=r),t)for(c=t.toLowerCase(),b=p.length-1;b>=0&&p[b].lowerCasedTag!==c;b--);else b=0;if(b>=0){for(var z=p.length-1;z>=b;z--)e.end&&e.end(p[z].tag,n,M);p.length=b,o=b&&p[b-1].tag}else"br"===c?e.start&&e.start(t,[],!0,n,M):"p"===c&&(e.start&&e.start(t,[],!1,n,M),e.end&&e.end(t,n,M))}i()}var Lb,yb,_b,Nb,Eb,Tb,Bb,Cb,wb=/^@|^v-on:/,Sb=/^v-|^@|^:|^#/,Xb=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,xb=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,kb=/^\(|\)$/g,Ib=/^\[.*\]$/,Db=/:(.*)$/,Pb=/^:|^\.|^v-bind:/,Ub=/\.[^.\]]+(?=[^\]]*$)/g,jb=/^v-slot(:|$)|^#/,Fb=/[\r\n]/,Hb=/[ \f\t\r\n]+/g,Gb=m(ob),Yb="_empty_";function $b(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:ec(e),rawAttrsMap:{},parent:n,children:[]}}function Vb(t,e){Lb=e.warn||ip,Tb=e.isPreTag||S,Bb=e.mustUseProp||S,Cb=e.getTagNamespace||S;var n=e.isReservedTag||S;(function(t){return!(!(t.component||t.attrsMap[":is"]||t.attrsMap["v-bind:is"])&&(t.attrsMap.is?n(t.attrsMap.is):n(t.tag)))}),_b=Op(e.modules,"transformNode"),Nb=Op(e.modules,"preTransformNode"),Eb=Op(e.modules,"postTransformNode"),yb=e.delimiters;var o,p,M=[],b=!1!==e.preserveWhitespace,c=e.whitespace,r=!1,z=!1;function a(t){if(i(t),r||t.processed||(t=Kb(t,e)),M.length||t===o||o.if&&(t.elseif||t.else)&&Qb(o,{exp:t.elseif,block:t}),p&&!t.forbidden)if(t.elseif||t.else)b=t,c=function(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}(p.children),c&&c.if&&Qb(c,{exp:b.elseif,block:b});else{if(t.slotScope){var n=t.slotTarget||'"default"';(p.scopedSlots||(p.scopedSlots={}))[n]=t}p.children.push(t),t.parent=p}var b,c;t.children=t.children.filter((function(t){return!t.slotScope})),i(t),t.pre&&(r=!1),Tb(t.tag)&&(z=!1);for(var a=0;ar&&(c.push(M=t.slice(r,p)),b.push(JSON.stringify(M)));var z=zp(o[1].trim());b.push("_s(".concat(z,")")),c.push({"@binding":z}),r=p+o[0].length}return r-1")+("true"===M?":(".concat(e,")"):":_q(".concat(e,",").concat(M,")"))),fp(t,"change","var $$a=".concat(e,",")+"$$el=$event.target,"+"$$c=$$el.checked?(".concat(M,"):(").concat(b,");")+"if(Array.isArray($$a)){"+"var $$v=".concat(o?"_n("+p+")":p,",")+"$$i=_i($$a,$$v);"+"if($$el.checked){$$i<0&&(".concat(mp(e,"$$a.concat([$$v])"),")}")+"else{$$i>-1&&(".concat(mp(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))"),")}")+"}else{".concat(mp(e,"$$c"),"}"),null,!0)}(t,o,p);else if("input"===M&&"radio"===b)!function(t,e,n){var o=n&&n.number,p=qp(t,"value")||"null";p=o?"_n(".concat(p,")"):p,sp(t,"checked","_q(".concat(e,",").concat(p,")")),fp(t,"change",mp(e,p),null,!0)}(t,o,p);else if("input"===M||"textarea"===M)!function(t,e,n){var o=t.attrsMap.type;0;var p=n||{},M=p.lazy,b=p.number,c=p.trim,r=!M&&"range"!==o,z=M?"change":"range"===o?Tp:"input",a="$event.target.value";c&&(a="$event.target.value.trim()");b&&(a="_n(".concat(a,")"));var i=mp(e,a);r&&(i="if($event.target.composing)return;".concat(i));sp(t,"value","(".concat(e,")")),fp(t,z,i,null,!0),(c||b)&&fp(t,"blur","$forceUpdate()")}(t,o,p);else{if(!F.isReservedTag(M))return Rp(t,o,p),!1}return!0},text:function(t,e){e.value&&sp(t,"textContent","_s(".concat(e.value,")"),e)},html:function(t,e){e.value&&sp(t,"innerHTML","_s(".concat(e.value,")"),e)}},ac={expectHTML:!0,modules:bc,directives:zc,isPreTag:function(t){return"pre"===t},isUnaryTag:pb,mustUseProp:so,canBeLeftOpenTag:Mb,isReservedTag:Eo,getTagNamespace:To,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(bc)},ic=m((function(t){return f("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function Oc(t,e){t&&(cc=ic(e.staticKeys||""),rc=e.isReservedTag||S,sc(t),Ac(t,!1))}function sc(t){if(t.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||q(t.tag)||!rc(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(cc)))}(t),1===t.type){if(!rc(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var e=0,n=t.children.length;e|^function(?:\s+[\w$]+)?\s*\(/,lc=/\([^)]*?\);*$/,dc=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,fc={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},qc={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},hc=function(t){return"if(".concat(t,")return null;")},Wc={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:hc("$event.target !== $event.currentTarget"),ctrl:hc("!$event.ctrlKey"),shift:hc("!$event.shiftKey"),alt:hc("!$event.altKey"),meta:hc("!$event.metaKey"),left:hc("'button' in $event && $event.button !== 0"),middle:hc("'button' in $event && $event.button !== 1"),right:hc("'button' in $event && $event.button !== 2")};function vc(t,e){var n=e?"nativeOn:":"on:",o="",p="";for(var M in t){var b=Rc(t[M]);t[M]&&t[M].dynamic?p+="".concat(M,",").concat(b,","):o+='"'.concat(M,'":').concat(b,",")}return o="{".concat(o.slice(0,-1),"}"),p?n+"_d(".concat(o,",[").concat(p.slice(0,-1),"])"):n+o}function Rc(t){if(!t)return"function(){}";if(Array.isArray(t))return"[".concat(t.map((function(t){return Rc(t)})).join(","),"]");var e=dc.test(t.value),n=uc.test(t.value),o=dc.test(t.value.replace(lc,""));if(t.modifiers){var p="",M="",b=[],c=function(e){if(Wc[e])M+=Wc[e],fc[e]&&b.push(e);else if("exact"===e){var n=t.modifiers;M+=hc(["ctrl","shift","alt","meta"].filter((function(t){return!n[t]})).map((function(t){return"$event.".concat(t,"Key")})).join("||"))}else b.push(e)};for(var r in t.modifiers)c(r);b.length&&(p+=function(t){return"if(!$event.type.indexOf('key')&&"+"".concat(t.map(mc).join("&&"),")return null;")}(b)),M&&(p+=M);var z=e?"return ".concat(t.value,".apply(null, arguments)"):n?"return (".concat(t.value,").apply(null, arguments)"):o?"return ".concat(t.value):t.value;return"function($event){".concat(p).concat(z,"}")}return e||n?t.value:"function($event){".concat(o?"return ".concat(t.value):t.value,"}")}function mc(t){var e=parseInt(t,10);if(e)return"$event.keyCode!==".concat(e);var n=fc[t],o=qc[t];return"_k($event.keyCode,"+"".concat(JSON.stringify(t),",")+"".concat(JSON.stringify(n),",")+"$event.key,"+"".concat(JSON.stringify(o))+")"}var gc={on:function(t,e){t.wrapListeners=function(t){return"_g(".concat(t,",").concat(e.value,")")}},bind:function(t,e){t.wrapData=function(n){return"_b(".concat(n,",'").concat(t.tag,"',").concat(e.value,",").concat(e.modifiers&&e.modifiers.prop?"true":"false").concat(e.modifiers&&e.modifiers.sync?",true":"",")")}},cloak:w},Lc=function(t){this.options=t,this.warn=t.warn||ip,this.transforms=Op(t.modules,"transformCode"),this.dataGenFns=Op(t.modules,"genData"),this.directives=B(B({},gc),t.directives);var e=t.isReservedTag||S;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function yc(t,e){var n=new Lc(e),o=t?"script"===t.tag?"null":_c(t,n):'_c("div")';return{render:"with(this){return ".concat(o,"}"),staticRenderFns:n.staticRenderFns}}function _c(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Nc(t,e);if(t.once&&!t.onceProcessed)return Ec(t,e);if(t.for&&!t.forProcessed)return Cc(t,e);if(t.if&&!t.ifProcessed)return Tc(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){var n=t.slotName||'"default"',o=xc(t,e),p="_t(".concat(n).concat(o?",function(){return ".concat(o,"}"):""),M=t.attrs||t.dynamicAttrs?Dc((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:L(t.name),value:t.value,dynamic:t.dynamic}}))):null,b=t.attrsMap["v-bind"];!M&&!b||o||(p+=",null");M&&(p+=",".concat(M));b&&(p+="".concat(M?"":",null",",").concat(b));return p+")"}(t,e);var n=void 0;if(t.component)n=function(t,e,n){var o=e.inlineTemplate?null:xc(e,n,!0);return"_c(".concat(t,",").concat(wc(e,n)).concat(o?",".concat(o):"",")")}(t.component,t,e);else{var o=void 0,p=e.maybeComponent(t);(!t.plain||t.pre&&p)&&(o=wc(t,e));var M=void 0,b=e.options.bindings;p&&b&&!1!==b.__isScriptSetup&&(M=function(t,e){var n=L(e),o=y(n),p=function(p){return t[e]===p?e:t[n]===p?n:t[o]===p?o:void 0},M=p("setup-const")||p("setup-reactive-const");if(M)return M;var b=p("setup-let")||p("setup-ref")||p("setup-maybe-ref");if(b)return b}(b,t.tag)),M||(M="'".concat(t.tag,"'"));var c=t.inlineTemplate?null:xc(t,e,!0);n="_c(".concat(M).concat(o?",".concat(o):"").concat(c?",".concat(c):"",")")}for(var r=0;r>>0}(b)):"",")")}(t,t.scopedSlots,e),",")),t.model&&(n+="model:{value:".concat(t.model.value,",callback:").concat(t.model.callback,",expression:").concat(t.model.expression,"},")),t.inlineTemplate){var M=function(t,e){var n=t.children[0];0;if(n&&1===n.type){var o=yc(n,e.options);return"inlineTemplate:{render:function(){".concat(o.render,"},staticRenderFns:[").concat(o.staticRenderFns.map((function(t){return"function(){".concat(t,"}")})).join(","),"]}")}}(t,e);M&&(n+="".concat(M,","))}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n="_b(".concat(n,',"').concat(t.tag,'",').concat(Dc(t.dynamicAttrs),")")),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function Sc(t){return 1===t.type&&("slot"===t.tag||t.children.some(Sc))}function Xc(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return Tc(t,e,Xc,"null");if(t.for&&!t.forProcessed)return Cc(t,e,Xc);var o=t.slotScope===Yb?"":String(t.slotScope),p="function(".concat(o,"){")+"return ".concat("template"===t.tag?t.if&&n?"(".concat(t.if,")?").concat(xc(t,e)||"undefined",":undefined"):xc(t,e)||"undefined":_c(t,e),"}"),M=o?"":",proxy:true";return"{key:".concat(t.slotTarget||'"default"',",fn:").concat(p).concat(M,"}")}function xc(t,e,n,o,p){var M=t.children;if(M.length){var b=M[0];if(1===M.length&&b.for&&"template"!==b.tag&&"slot"!==b.tag){var c=n?e.maybeComponent(b)?",1":",0":"";return"".concat((o||_c)(b,e)).concat(c)}var r=n?function(t,e){for(var n=0,o=0;o':'
',Hc.innerHTML.indexOf(" ")>0}var Vc=!!K&&$c(!1),Kc=!!K&&$c(!0),Zc=m((function(t){var e=wo(t);return e&&e.innerHTML})),Qc=no.prototype.$mount;no.prototype.$mount=function(t,e){if((t=t&&wo(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var o=n.template;if(o)if("string"==typeof o)"#"===o.charAt(0)&&(o=Zc(o));else{if(!o.nodeType)return this;o=o.innerHTML}else t&&(o=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(o){0;var p=Yc(o,{outputSourceRange:!1,shouldDecodeNewlines:Vc,shouldDecodeNewlinesForHref:Kc,delimiters:n.delimiters,comments:n.comments},this),M=p.render,b=p.staticRenderFns;n.render=M,n.staticRenderFns=b}}return Qc.call(this,t,e)},no.compile=Yc;var Jc=n(6486),tr=n.n(Jc),er=n(8),nr=n.n(er);const or={computed:{Telescope:function(t){function e(){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}((function(){return Telescope}))},methods:{timeAgo:function(t){nr().updateLocale("en",{relativeTime:{future:"in %s",past:"%s ago",s:function(t){return t+"s ago"},ss:"%ds ago",m:"1m ago",mm:"%dm ago",h:"1h ago",hh:"%dh ago",d:"1d ago",dd:"%dd ago",M:"a month ago",MM:"%d months ago",y:"a year ago",yy:"%d years ago"}});var e=nr()().diff(t,"seconds"),n=nr()("2018-01-01").startOf("day").seconds(e);return e>300?nr()(t).fromNow(!0):e<60?n.format("s")+"s ago":n.format("m:ss")+"m ago"},localTime:function(t){return nr()(t).local().format("MMMM Do YYYY, h:mm:ss A")},truncate:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:70;return tr().truncate(t,{length:e,separator:/,? +/})},debouncer:tr().debounce((function(t){return t()}),500),alertError:function(t){this.$root.alert.type="error",this.$root.alert.autoClose=!1,this.$root.alert.message=t},alertSuccess:function(t,e){this.$root.alert.type="success",this.$root.alert.autoClose=e,this.$root.alert.message=t},alertConfirm:function(t,e,n){this.$root.alert.type="confirmation",this.$root.alert.autoClose=!1,this.$root.alert.message=t,this.$root.alert.confirmationProceed=e,this.$root.alert.confirmationCancel=n}}};var pr=n(7066);const Mr=[{path:"/",redirect:"/requests"},{path:"/mail/:id",name:"mail-preview",component:n(7776).Z},{path:"/mail",name:"mail",component:n(4456).Z},{path:"/exceptions/:id",name:"exception-preview",component:n(8882).Z},{path:"/exceptions",name:"exceptions",component:n(5323).Z},{path:"/dumps",name:"dumps",component:n(7208).Z},{path:"/logs/:id",name:"log-preview",component:n(8360).Z},{path:"/logs",name:"logs",component:n(1929).Z},{path:"/notifications/:id",name:"notification-preview",component:n(3590).Z},{path:"/notifications",name:"notifications",component:n(624).Z},{path:"/jobs/:id",name:"job-preview",component:n(4142).Z},{path:"/jobs",name:"jobs",component:n(558).Z},{path:"/batches/:id",name:"batch-preview",component:n(8159).Z},{path:"/batches",name:"batches",component:n(7374).Z},{path:"/events/:id",name:"event-preview",component:n(5701).Z},{path:"/events",name:"events",component:n(8814).Z},{path:"/cache/:id",name:"cache-preview",component:n(2246).Z},{path:"/cache",name:"cache",component:n(896).Z},{path:"/queries/:id",name:"query-preview",component:n(3992).Z},{path:"/queries",name:"queries",component:n(4652).Z},{path:"/models/:id",name:"model-preview",component:n(706).Z},{path:"/models",name:"models",component:n(1556).Z},{path:"/requests/:id",name:"request-preview",component:n(1619).Z},{path:"/requests",name:"requests",component:n(9751).Z},{path:"/commands/:id",name:"command-preview",component:n(1241).Z},{path:"/commands",name:"commands",component:n(7210).Z},{path:"/schedule/:id",name:"schedule-preview",component:n(4622).Z},{path:"/schedule",name:"schedule",component:n(8244).Z},{path:"/redis/:id",name:"redis-preview",component:n(5799).Z},{path:"/redis",name:"redis",component:n(7837).Z},{path:"/monitored-tags",name:"monitored-tags",component:n(5505).Z},{path:"/gates/:id",name:"gate-preview",component:n(6581).Z},{path:"/gates",name:"gates",component:n(4840).Z},{path:"/views/:id",name:"view-preview",component:n(6968).Z},{path:"/views",name:"views",component:n(3395).Z},{path:"/client-requests/:id",name:"client-request-preview",component:n(9101).Z},{path:"/client-requests",name:"client-requests",component:n(2935).Z}];function br(t,e){for(var n in e)t[n]=e[n];return t}var cr=/[!'()*]/g,rr=function(t){return"%"+t.charCodeAt(0).toString(16)},zr=/%2C/g,ar=function(t){return encodeURIComponent(t).replace(cr,rr).replace(zr,",")};function ir(t){try{return decodeURIComponent(t)}catch(t){0}return t}var Or=function(t){return null==t||"object"==typeof t?t:String(t)};function sr(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),o=ir(n.shift()),p=n.length>0?ir(n.join("=")):null;void 0===e[o]?e[o]=p:Array.isArray(e[o])?e[o].push(p):e[o]=[e[o],p]})),e):e}function Ar(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return ar(e);if(Array.isArray(n)){var o=[];return n.forEach((function(t){void 0!==t&&(null===t?o.push(ar(e)):o.push(ar(e)+"="+ar(t)))})),o.join("&")}return ar(e)+"="+ar(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var ur=/\/?$/;function lr(t,e,n,o){var p=o&&o.options.stringifyQuery,M=e.query||{};try{M=dr(M)}catch(t){}var b={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:M,params:e.params||{},fullPath:hr(e,p),matched:t?qr(t):[]};return n&&(b.redirectedFrom=hr(n,p)),Object.freeze(b)}function dr(t){if(Array.isArray(t))return t.map(dr);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=dr(t[n]);return e}return t}var fr=lr(null,{path:"/"});function qr(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function hr(t,e){var n=t.path,o=t.query;void 0===o&&(o={});var p=t.hash;return void 0===p&&(p=""),(n||"/")+(e||Ar)(o)+p}function Wr(t,e,n){return e===fr?t===e:!!e&&(t.path&&e.path?t.path.replace(ur,"")===e.path.replace(ur,"")&&(n||t.hash===e.hash&&vr(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&vr(t.query,e.query)&&vr(t.params,e.params))))}function vr(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),o=Object.keys(e).sort();return n.length===o.length&&n.every((function(n,p){var M=t[n];if(o[p]!==n)return!1;var b=e[n];return null==M||null==b?M===b:"object"==typeof M&&"object"==typeof b?vr(M,b):String(M)===String(b)}))}function Rr(t){for(var e=0;e=0&&(e=t.slice(o),t=t.slice(0,o));var p=t.indexOf("?");return p>=0&&(n=t.slice(p+1),t=t.slice(0,p)),{path:t,query:n,hash:e}}(p.path||""),z=e&&e.path||"/",a=r.path?Lr(r.path,z,n||p.append):z,i=function(t,e,n){void 0===e&&(e={});var o,p=n||sr;try{o=p(t||"")}catch(t){o={}}for(var M in e){var b=e[M];o[M]=Array.isArray(b)?b.map(Or):Or(b)}return o}(r.query,p.query,o&&o.options.parseQuery),O=p.hash||r.hash;return O&&"#"!==O.charAt(0)&&(O="#"+O),{_normalized:!0,path:a,query:i,hash:O}}var $r,Vr=function(){},Kr={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,o=this.$route,p=n.resolve(this.to,o,this.append),M=p.location,b=p.route,c=p.href,r={},z=n.options.linkActiveClass,a=n.options.linkExactActiveClass,i=null==z?"router-link-active":z,O=null==a?"router-link-exact-active":a,s=null==this.activeClass?i:this.activeClass,A=null==this.exactActiveClass?O:this.exactActiveClass,u=b.redirectedFrom?lr(null,Yr(b.redirectedFrom),null,n):b;r[A]=Wr(o,u,this.exactPath),r[s]=this.exact||this.exactPath?r[A]:function(t,e){return 0===t.path.replace(ur,"/").indexOf(e.path.replace(ur,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(o,u);var l=r[A]?this.ariaCurrentValue:null,d=function(t){Zr(t)&&(e.replace?n.replace(M,Vr):n.push(M,Vr))},f={click:Zr};Array.isArray(this.event)?this.event.forEach((function(t){f[t]=d})):f[this.event]=d;var q={class:r},h=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:b,navigate:d,isActive:r[s],isExactActive:r[A]});if(h){if(1===h.length)return h[0];if(h.length>1||!h.length)return 0===h.length?t():t("span",{},h)}if("a"===this.tag)q.on=f,q.attrs={href:c,"aria-current":l};else{var W=Qr(this.$slots.default);if(W){W.isStatic=!1;var v=W.data=br({},W.data);for(var R in v.on=v.on||{},v.on){var m=v.on[R];R in f&&(v.on[R]=Array.isArray(m)?m:[m])}for(var g in f)g in v.on?v.on[g].push(f[g]):v.on[g]=d;var L=W.data.attrs=br({},W.data.attrs);L.href=c,L["aria-current"]=l}else q.on=f}return t(this.tag,q,this.$slots.default)}};function Zr(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function Qr(t){if(t)for(var e,n=0;n-1&&(c.params[O]=n.params[O]);return c.path=Gr(a.path,c.params),r(a,c,b)}if(c.path){c.params={};for(var s=0;s-1}function Ez(t,e){return Nz(t)&&t._isRouter&&(null==e||t.type===e)}function Tz(t,e,n){var o=function(p){p>=t.length?n():t[p]?e(t[p],(function(){o(p+1)})):o(p+1)};o(0)}function Bz(t){return function(e,n,o){var p=!1,M=0,b=null;Cz(t,(function(t,e,n,c){if("function"==typeof t&&void 0===t.cid){p=!0,M++;var r,z=Xz((function(e){var p;((p=e).__esModule||Sz&&"Module"===p[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:$r.extend(e),n.components[c]=e,--M<=0&&o()})),a=Xz((function(t){var e="Failed to resolve async component "+c+": "+t;b||(b=Nz(t)?t:new Error(e),o(b))}));try{r=t(z,a)}catch(t){a(t)}if(r)if("function"==typeof r.then)r.then(z,a);else{var i=r.component;i&&"function"==typeof i.then&&i.then(z,a)}}})),p||o()}}function Cz(t,e){return wz(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function wz(t){return Array.prototype.concat.apply([],t)}var Sz="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Xz(t){var e=!1;return function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];if(!e)return e=!0,t.apply(this,n)}}var xz=function(t,e){this.router=t,this.base=function(t){if(!t)if(Jr){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=fr,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function kz(t,e,n,o){var p=Cz(t,(function(t,o,p,M){var b=function(t,e){"function"!=typeof t&&(t=$r.extend(t));return t.options[e]}(t,e);if(b)return Array.isArray(b)?b.map((function(t){return n(t,o,p,M)})):n(b,o,p,M)}));return wz(o?p.reverse():p)}function Iz(t,e){if(e)return function(){return t.apply(e,arguments)}}xz.prototype.listen=function(t){this.cb=t},xz.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},xz.prototype.onError=function(t){this.errorCbs.push(t)},xz.prototype.transitionTo=function(t,e,n){var o,p=this;try{o=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var M=this.current;this.confirmTransition(o,(function(){p.updateRoute(o),e&&e(o),p.ensureURL(),p.router.afterHooks.forEach((function(t){t&&t(o,M)})),p.ready||(p.ready=!0,p.readyCbs.forEach((function(t){t(o)})))}),(function(t){n&&n(t),t&&!p.ready&&(Ez(t,mz.redirected)&&M===fr||(p.ready=!0,p.readyErrorCbs.forEach((function(e){e(t)}))))}))},xz.prototype.confirmTransition=function(t,e,n){var o=this,p=this.current;this.pending=t;var M,b,c=function(t){!Ez(t)&&Nz(t)&&o.errorCbs.length&&o.errorCbs.forEach((function(e){e(t)})),n&&n(t)},r=t.matched.length-1,z=p.matched.length-1;if(Wr(t,p)&&r===z&&t.matched[r]===p.matched[z])return this.ensureURL(),t.hash&&Oz(this.router,p,t,!1),c(((b=yz(M=p,t,mz.duplicated,'Avoided redundant navigation to current location: "'+M.fullPath+'".')).name="NavigationDuplicated",b));var a=function(t,e){var n,o=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,o=Wz&&n;o&&this.listeners.push(iz());var p=function(){var n=t.current,p=Pz(t.base);t.current===fr&&p===t._startLocation||t.transitionTo(p,(function(t){o&&Oz(e,t,n,!0)}))};window.addEventListener("popstate",p),this.listeners.push((function(){window.removeEventListener("popstate",p)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var o=this,p=this.current;this.transitionTo(t,(function(t){vz(yr(o.base+t.fullPath)),Oz(o.router,t,p,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var o=this,p=this.current;this.transitionTo(t,(function(t){Rz(yr(o.base+t.fullPath)),Oz(o.router,t,p,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Pz(this.base)!==this.current.fullPath){var e=yr(this.base+this.current.fullPath);t?vz(e):Rz(e)}},e.prototype.getCurrentLocation=function(){return Pz(this.base)},e}(xz);function Pz(t){var e=window.location.pathname,n=e.toLowerCase(),o=t.toLowerCase();return!t||n!==o&&0!==n.indexOf(yr(o+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Uz=function(t){function e(e,n,o){t.call(this,e,n),o&&function(t){var e=Pz(t);if(!/^\/#/.test(e))return window.location.replace(yr(t+"/#"+e)),!0}(this.base)||jz()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=Wz&&e;n&&this.listeners.push(iz());var o=function(){var e=t.current;jz()&&t.transitionTo(Fz(),(function(o){n&&Oz(t.router,o,e,!0),Wz||Yz(o.fullPath)}))},p=Wz?"popstate":"hashchange";window.addEventListener(p,o),this.listeners.push((function(){window.removeEventListener(p,o)}))}},e.prototype.push=function(t,e,n){var o=this,p=this.current;this.transitionTo(t,(function(t){Gz(t.fullPath),Oz(o.router,t,p,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var o=this,p=this.current;this.transitionTo(t,(function(t){Yz(t.fullPath),Oz(o.router,t,p,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Fz()!==e&&(t?Gz(e):Yz(e))},e.prototype.getCurrentLocation=function(){return Fz()},e}(xz);function jz(){var t=Fz();return"/"===t.charAt(0)||(Yz("/"+t),!1)}function Fz(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Hz(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Gz(t){Wz?vz(Hz(t)):window.location.hash=t}function Yz(t){Wz?Rz(Hz(t)):window.location.replace(Hz(t))}var $z=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var o=this;this.transitionTo(t,(function(t){o.stack=o.stack.slice(0,o.index+1).concat(t),o.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var o=this;this.transitionTo(t,(function(t){o.stack=o.stack.slice(0,o.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var o=this.stack[n];this.confirmTransition(o,(function(){var t=e.current;e.index=n,e.updateRoute(o),e.router.afterHooks.forEach((function(e){e&&e(o,t)}))}),(function(t){Ez(t,mz.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(xz),Vz=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=oz(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Wz&&!1!==t.fallback,this.fallback&&(e="hash"),Jr||(e="abstract"),this.mode=e,e){case"history":this.history=new Dz(this,t.base);break;case"hash":this.history=new Uz(this,t.base,this.fallback);break;case"abstract":this.history=new $z(this,t.base)}},Kz={currentRoute:{configurable:!0}};Vz.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Kz.currentRoute.get=function(){return this.history&&this.history.current},Vz.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Dz||n instanceof Uz){var o=function(t){n.setupListeners(),function(t){var o=n.current,p=e.options.scrollBehavior;Wz&&p&&"fullPath"in t&&Oz(e,t,o,!1)}(t)};n.transitionTo(n.getCurrentLocation(),o,o)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Vz.prototype.beforeEach=function(t){return Qz(this.beforeHooks,t)},Vz.prototype.beforeResolve=function(t){return Qz(this.resolveHooks,t)},Vz.prototype.afterEach=function(t){return Qz(this.afterHooks,t)},Vz.prototype.onReady=function(t,e){this.history.onReady(t,e)},Vz.prototype.onError=function(t){this.history.onError(t)},Vz.prototype.push=function(t,e,n){var o=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){o.history.push(t,e,n)}));this.history.push(t,e,n)},Vz.prototype.replace=function(t,e,n){var o=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){o.history.replace(t,e,n)}));this.history.replace(t,e,n)},Vz.prototype.go=function(t){this.history.go(t)},Vz.prototype.back=function(){this.go(-1)},Vz.prototype.forward=function(){this.go(1)},Vz.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Vz.prototype.resolve=function(t,e,n){var o=Yr(t,e=e||this.history.current,n,this),p=this.match(o,e),M=p.redirectedFrom||p.fullPath,b=function(t,e,n){var o="hash"===n?"#"+e:e;return t?yr(t+"/"+o):o}(this.history.base,M,this.mode);return{location:o,route:p,href:b,normalizedTo:o,resolved:p}},Vz.prototype.getRoutes=function(){return this.matcher.getRoutes()},Vz.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==fr&&this.history.transitionTo(this.history.getCurrentLocation())},Vz.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==fr&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Vz.prototype,Kz);var Zz=Vz;function Qz(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Vz.install=function t(e){if(!t.installed||$r!==e){t.installed=!0,$r=e;var n=function(t){return void 0!==t},o=function(t,e){var o=t.$options._parentVnode;n(o)&&n(o=o.data)&&n(o=o.registerRouteInstance)&&o(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,o(this,this)},destroyed:function(){o(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",mr),e.component("RouterLink",Kr);var p=e.config.optionMergeStrategies;p.beforeRouteEnter=p.beforeRouteLeave=p.beforeRouteUpdate=p.created}},Vz.version="3.6.5",Vz.isNavigationFailure=Ez,Vz.NavigationFailureType=mz,Vz.START_LOCATION=fr,Jr&&window.Vue&&window.Vue.use(Vz);var Jz=n(4566),ta=n.n(Jz),ea=n(3379),na=n.n(ea),oa=n(1991),pa={insert:"head",singleton:!1};na()(oa.Z,pa);oa.Z.locals;n(3734);var Ma=document.head.querySelector('meta[name="csrf-token"]');Ma&&(pr.Z.defaults.headers.common["X-CSRF-TOKEN"]=Ma.content),no.use(Zz),window.Popper=n(8981).default,nr().tz.setDefault(Telescope.timezone),window.Telescope.basePath="/"+window.Telescope.path;var ba=window.Telescope.basePath+"/";""!==window.Telescope.path&&"/"!==window.Telescope.path||(ba="/",window.Telescope.basePath="");var ca=new Zz({routes:Mr,mode:"history",base:ba});no.component("vue-json-pretty",ta()),no.component("related-entries",n(9932).Z),no.component("index-screen",n(8106).Z),no.component("preview-screen",n(2986).Z),no.component("alert",n(4518).Z),no.component("copy-clipboard",n(7973).Z),no.mixin(or),new no({el:"#telescope",router:ca,data:function(){return{alert:{type:null,autoClose:0,message:"",confirmationProceed:null,confirmationCancel:null},autoLoadsNewEntries:"1"===localStorage.autoLoadsNewEntries,recording:Telescope.recording}},created:function(){window.addEventListener("keydown",this.keydownListener)},destroyed:function(){window.removeEventListener("keydown",this.keydownListener)},methods:{autoLoadNewEntries:function(){this.autoLoadsNewEntries?(this.autoLoadsNewEntries=!1,localStorage.autoLoadsNewEntries=0):(this.autoLoadsNewEntries=!0,localStorage.autoLoadsNewEntries=1)},toggleRecording:function(){pr.Z.post(Telescope.basePath+"/telescope-api/toggle-recording"),window.Telescope.recording=!Telescope.recording,this.recording=!this.recording},clearEntries:function(){(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&!confirm("Are you sure you want to delete all Telescope data?")||pr.Z.delete(Telescope.basePath+"/telescope-api/entries").then((function(t){return location.reload()}))},keydownListener:function(t){t.metaKey&&"k"===t.key&&this.clearEntries(!1)}}})},601:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});const o={methods:{cacheActionTypeClass:function(t){return"hit"===t?"success":"set"===t?"info":"forget"===t?"warning":"missed"===t?"danger":void 0},composerTypeClass:function(t){return"composer"===t?"info":"creator"===t?"success":void 0},gateResultClass:function(t){return"allowed"===t?"success":"denied"===t?"danger":void 0},jobStatusClass:function(t){return"pending"===t?"secondary":"processed"===t?"success":"failed"===t?"danger":void 0},logLevelClass:function(t){return"debug"===t?"success":"info"===t?"info":"notice"===t?"secondary":"warning"===t?"warning":"error"===t||"critical"===t||"alert"===t||"emergency"===t?"danger":void 0},modelActionClass:function(t){return"created"==t?"success":"updated"==t?"info":"retrieved"==t?"secondary":"deleted"==t||"forceDeleted"==t?"danger":void 0},requestStatusClass:function(t){return t?t<300?"success":t<400?"info":t<500?"warning":t>=500?"danger":void 0:"danger"},requestMethodClass:function(t){return"GET"==t||"OPTIONS"==t?"secondary":"POST"==t||"PATCH"==t||"PUT"==t?"info":"DELETE"==t?"danger":void 0}}}},9742:(t,e)=>{"use strict";e.byteLength=function(t){var e=c(t),n=e[0],o=e[1];return 3*(n+o)/4-o},e.toByteArray=function(t){var e,n,M=c(t),b=M[0],r=M[1],z=new p(function(t,e,n){return 3*(e+n)/4-n}(0,b,r)),a=0,i=r>0?b-4:b;for(n=0;n>16&255,z[a++]=e>>8&255,z[a++]=255&e;2===r&&(e=o[t.charCodeAt(n)]<<2|o[t.charCodeAt(n+1)]>>4,z[a++]=255&e);1===r&&(e=o[t.charCodeAt(n)]<<10|o[t.charCodeAt(n+1)]<<4|o[t.charCodeAt(n+2)]>>2,z[a++]=e>>8&255,z[a++]=255&e);return z},e.fromByteArray=function(t){for(var e,o=t.length,p=o%3,M=[],b=16383,c=0,z=o-p;cz?z:c+b));1===p?(e=t[o-1],M.push(n[e>>2]+n[e<<4&63]+"==")):2===p&&(e=(t[o-2]<<8)+t[o-1],M.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return M.join("")};for(var n=[],o=[],p="undefined"!=typeof Uint8Array?Uint8Array:Array,M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",b=0;b<64;++b)n[b]=M[b],o[M.charCodeAt(b)]=b;function c(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function r(t,e,o){for(var p,M,b=[],c=e;c>18&63]+n[M>>12&63]+n[M>>6&63]+n[63&M]);return b.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},3734:function(t,e,n){!function(t,e,n){"use strict";function o(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var p=o(e),M=o(n);function b(t,e){for(var n=0;n=b)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};f.jQueryDetection(),d();var q="alert",h="4.6.2",W="bs.alert",v="."+W,R=".data-api",m=p.default.fn[q],g="alert",L="fade",y="show",_="close"+v,N="closed"+v,E="click"+v+R,T='[data-dismiss="alert"]',B=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){p.default.removeData(this._element,W),this._element=null},e._getRootElement=function(t){var e=f.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=p.default(t).closest("."+g)[0]),n},e._triggerCloseEvent=function(t){var e=p.default.Event(_);return p.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(p.default(t).removeClass(y),p.default(t).hasClass(L)){var n=f.getTransitionDurationFromElement(t);p.default(t).one(f.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){p.default(t).detach().trigger(N).remove()},t._jQueryInterface=function(e){return this.each((function(){var n=p.default(this),o=n.data(W);o||(o=new t(this),n.data(W,o)),"close"===e&&o[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},c(t,null,[{key:"VERSION",get:function(){return h}}]),t}();p.default(document).on(E,T,B._handleDismiss(new B)),p.default.fn[q]=B._jQueryInterface,p.default.fn[q].Constructor=B,p.default.fn[q].noConflict=function(){return p.default.fn[q]=m,B._jQueryInterface};var C="button",w="4.6.2",S="bs.button",X="."+S,x=".data-api",k=p.default.fn[C],I="active",D="btn",P="focus",U="click"+X+x,j="focus"+X+x+" blur"+X+x,F="load"+X+x,H='[data-toggle^="button"]',G='[data-toggle="buttons"]',Y='[data-toggle="button"]',$='[data-toggle="buttons"] .btn',V='input:not([type="hidden"])',K=".active",Z=".btn",Q=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=p.default(this._element).closest(G)[0];if(n){var o=this._element.querySelector(V);if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains(I))t=!1;else{var M=n.querySelector(K);M&&p.default(M).removeClass(I)}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains(I)),this.shouldAvoidTriggerChange||p.default(o).trigger("change")),o.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(I)),t&&p.default(this._element).toggleClass(I))},e.dispose=function(){p.default.removeData(this._element,S),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var o=p.default(this),M=o.data(S);M||(M=new t(this),o.data(S,M)),M.shouldAvoidTriggerChange=n,"toggle"===e&&M[e]()}))},c(t,null,[{key:"VERSION",get:function(){return w}}]),t}();p.default(document).on(U,H,(function(t){var e=t.target,n=e;if(p.default(e).hasClass(D)||(e=p.default(e).closest(Z)[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var o=e.querySelector(V);if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||Q._jQueryInterface.call(p.default(e),"toggle","INPUT"===n.tagName)}})).on(j,H,(function(t){var e=p.default(t.target).closest(Z)[0];p.default(e).toggleClass(P,/^focus(in)?$/.test(t.type))})),p.default(window).on(F,(function(){for(var t=[].slice.call(document.querySelectorAll($)),e=0,n=t.length;e0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide(dt)},e.nextWhenVisible=function(){var t=p.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide(ft)},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(kt)&&(f.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(St);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)p.default(this._element).one(vt,(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var o=t>n?dt:ft;this._slide(o,this._items[t])}},e.dispose=function(){p.default(this._element).off(nt),p.default.removeData(this._element,et),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=r({},Ut,t),f.typeCheckConfig(J,t,jt),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=rt)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&p.default(this._element).on(Rt,(function(e){return t._keydown(e)})),"hover"===this._config.pause&&p.default(this._element).on(mt,(function(e){return t.pause(e)})).on(gt,(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&Ft[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t.touchDeltaX=e.originalEvent.touches&&e.originalEvent.touches.length>1?0:e.originalEvent.touches[0].clientX-t.touchStartX},o=function(e){t._pointerEvent&&Ft[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),ct+t._config.interval))};p.default(this._element.querySelectorAll(xt)).on(Tt,(function(t){return t.preventDefault()})),this._pointerEvent?(p.default(this._element).on(Nt,(function(t){return e(t)})),p.default(this._element).on(Et,(function(t){return o(t)})),this._element.classList.add(lt)):(p.default(this._element).on(Lt,(function(t){return e(t)})),p.default(this._element).on(yt,(function(t){return n(t)})),p.default(this._element).on(_t,(function(t){return o(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case Mt:t.preventDefault(),this.prev();break;case bt:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(Xt)):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n=t===dt,o=t===ft,p=this._getItemIndex(e),M=this._items.length-1;if((o&&0===p||n&&p===M)&&!this._config.wrap)return e;var b=(p+(t===ft?-1:1))%this._items.length;return-1===b?this._items[this._items.length-1]:this._items[b]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(St)),M=p.default.Event(Wt,{relatedTarget:t,direction:e,from:o,to:n});return p.default(this._element).trigger(M),M},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(wt));p.default(e).removeClass(at);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&p.default(n).addClass(at)}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(St);if(t){var e=parseInt(t.getAttribute("data-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}},e._slide=function(t,e){var n,o,M,b=this,c=this._element.querySelector(St),r=this._getItemIndex(c),z=e||c&&this._getItemByDirection(t,c),a=this._getItemIndex(z),i=Boolean(this._interval);if(t===dt?(n=st,o=At,M=qt):(n=Ot,o=ut,M=ht),z&&p.default(z).hasClass(at))this._isSliding=!1;else if(!this._triggerSlideEvent(z,M).isDefaultPrevented()&&c&&z){this._isSliding=!0,i&&this.pause(),this._setActiveIndicatorElement(z),this._activeElement=z;var O=p.default.Event(vt,{relatedTarget:z,direction:M,from:r,to:a});if(p.default(this._element).hasClass(it)){p.default(z).addClass(o),f.reflow(z),p.default(c).addClass(n),p.default(z).addClass(n);var s=f.getTransitionDurationFromElement(c);p.default(c).one(f.TRANSITION_END,(function(){p.default(z).removeClass(n+" "+o).addClass(at),p.default(c).removeClass(at+" "+o+" "+n),b._isSliding=!1,setTimeout((function(){return p.default(b._element).trigger(O)}),0)})).emulateTransitionEnd(s)}else p.default(c).removeClass(at),p.default(z).addClass(at),this._isSliding=!1,p.default(this._element).trigger(O);i&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=p.default(this).data(et),o=r({},Ut,p.default(this).data());"object"==typeof e&&(o=r({},o,e));var M="string"==typeof e?e:o.slide;if(n||(n=new t(this,o),p.default(this).data(et,n)),"number"==typeof e)n.to(e);else if("string"==typeof M){if(void 0===n[M])throw new TypeError('No method named "'+M+'"');n[M]()}else o.interval&&o.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=f.getSelectorFromElement(this);if(n){var o=p.default(n)[0];if(o&&p.default(o).hasClass(zt)){var M=r({},p.default(o).data(),p.default(this).data()),b=this.getAttribute("data-slide-to");b&&(M.interval=!1),t._jQueryInterface.call(p.default(o),M),b&&p.default(o).data(et).to(b),e.preventDefault()}}},c(t,null,[{key:"VERSION",get:function(){return tt}},{key:"Default",get:function(){return Ut}}]),t}();p.default(document).on(Ct,Dt,Ht._dataApiClickHandler),p.default(window).on(Bt,(function(){for(var t=[].slice.call(document.querySelectorAll(Pt)),e=0,n=t.length;e0&&(this._selector=b,this._triggerArray.push(M))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){p.default(this._element).hasClass(Qt)?this.hide():this.show()},e.show=function(){var e,n,o=this;if(!(this._isTransitioning||p.default(this._element).hasClass(Qt)||(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(ze)).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains(Jt)}))).length&&(e=null),e&&(n=p.default(e).not(this._selector).data($t))&&n._isTransitioning))){var M=p.default.Event(pe);if(p.default(this._element).trigger(M),!M.isDefaultPrevented()){e&&(t._jQueryInterface.call(p.default(e).not(this._selector),"hide"),n||p.default(e).data($t,null));var b=this._getDimension();p.default(this._element).removeClass(Jt).addClass(te),this._element.style[b]=0,this._triggerArray.length&&p.default(this._triggerArray).removeClass(ee).attr("aria-expanded",!0),this.setTransitioning(!0);var c=function(){p.default(o._element).removeClass(te).addClass(Jt+" "+Qt),o._element.style[b]="",o.setTransitioning(!1),p.default(o._element).trigger(Me)},r="scroll"+(b[0].toUpperCase()+b.slice(1)),z=f.getTransitionDurationFromElement(this._element);p.default(this._element).one(f.TRANSITION_END,c).emulateTransitionEnd(z),this._element.style[b]=this._element[r]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&p.default(this._element).hasClass(Qt)){var e=p.default.Event(be);if(p.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",f.reflow(this._element),p.default(this._element).addClass(te).removeClass(Jt+" "+Qt);var o=this._triggerArray.length;if(o>0)for(var M=0;M0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t._config.offset(e.offsets,t._element)),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),r({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=p.default(this).data(le);if(n||(n=new t(this,"object"==typeof e?e:null),p.default(this).data(le,n)),"string"==typeof e){if(void 0===n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||e.which!==ge&&("keyup"!==e.type||e.which===ve))for(var n=[].slice.call(document.querySelectorAll(Ue)),o=0,M=n.length;o0&&b--,e.which===me&&bdocument.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add(ln);var o=f.getTransitionDurationFromElement(this._dialog);p.default(this._element).off(f.TRANSITION_END),p.default(this._element).one(f.TRANSITION_END,(function(){t._element.classList.remove(ln),n||p.default(t._element).one(f.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}},e._showElement=function(t){var e=this,n=p.default(this._element).hasClass(An),o=this._dialog?this._dialog.querySelector(En):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),p.default(this._dialog).hasClass(zn)&&o?o.scrollTop=0:this._element.scrollTop=0,n&&f.reflow(this._element),p.default(this._element).addClass(un),this._config.focus&&this._enforceFocus();var M=p.default.Event(Wn,{relatedTarget:t}),b=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,p.default(e._element).trigger(M)};if(n){var c=f.getTransitionDurationFromElement(this._dialog);p.default(this._dialog).one(f.TRANSITION_END,b).emulateTransitionEnd(c)}else b()},e._enforceFocus=function(){var t=this;p.default(document).off(vn).on(vn,(function(e){document!==e.target&&t._element!==e.target&&0===p.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?p.default(this._element).on(gn,(function(e){t._config.keyboard&&e.which===rn?(e.preventDefault(),t.hide()):t._config.keyboard||e.which!==rn||t._triggerBackdropTransition()})):this._isShown||p.default(this._element).off(gn)},e._setResizeEvent=function(){var t=this;this._isShown?p.default(window).on(Rn,(function(e){return t.handleUpdate(e)})):p.default(window).off(Rn)},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){p.default(document.body).removeClass(sn),t._resetAdjustments(),t._resetScrollbar(),p.default(t._element).trigger(qn)}))},e._removeBackdrop=function(){this._backdrop&&(p.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=p.default(this._element).hasClass(An)?An:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=On,n&&this._backdrop.classList.add(n),p.default(this._backdrop).appendTo(document.body),p.default(this._element).on(mn,(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._triggerBackdropTransition():e.hide())})),n&&f.reflow(this._backdrop),p.default(this._backdrop).addClass(un),!t)return;if(!n)return void t();var o=f.getTransitionDurationFromElement(this._backdrop);p.default(this._backdrop).one(f.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){p.default(this._backdrop).removeClass(un);var M=function(){e._removeBackdrop(),t&&t()};if(p.default(this._element).hasClass(An)){var b=f.getTransitionDurationFromElement(this._backdrop);p.default(this._backdrop).one(f.TRANSITION_END,M).emulateTransitionEnd(b)}else M()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:In,popperConfig:null},ao={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},io={HIDE:"hide"+Yn,HIDDEN:"hidden"+Yn,SHOW:"show"+Yn,SHOWN:"shown"+Yn,INSERTED:"inserted"+Yn,CLICK:"click"+Yn,FOCUSIN:"focusin"+Yn,FOCUSOUT:"focusout"+Yn,MOUSEENTER:"mouseenter"+Yn,MOUSELEAVE:"mouseleave"+Yn},Oo=function(){function t(t,e){if(void 0===M.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=p.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),p.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p.default(this.getTipElement()).hasClass(Jn))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),p.default.removeData(this.element,this.constructor.DATA_KEY),p.default(this.element).off(this.constructor.EVENT_KEY),p.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&p.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===p.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=p.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p.default(this.element).trigger(e);var n=f.findShadowRoot(this.element),o=p.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!o)return;var b=this.getTipElement(),c=f.getUID(this.constructor.NAME);b.setAttribute("id",c),this.element.setAttribute("aria-describedby",c),this.setContent(),this.config.animation&&p.default(b).addClass(Qn);var r="function"==typeof this.config.placement?this.config.placement.call(this,b,this.element):this.config.placement,z=this._getAttachment(r);this.addAttachmentClass(z);var a=this._getContainer();p.default(b).data(this.constructor.DATA_KEY,this),p.default.contains(this.element.ownerDocument.documentElement,this.tip)||p.default(b).appendTo(a),p.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new M.default(this.element,b,this._getPopperConfig(z)),p.default(b).addClass(Jn),p.default(b).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&p.default(document.body).children().on("mouseover",null,p.default.noop);var i=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,p.default(t.element).trigger(t.constructor.Event.SHOWN),e===eo&&t._leave(null,t)};if(p.default(this.tip).hasClass(Qn)){var O=f.getTransitionDurationFromElement(this.tip);p.default(this.tip).one(f.TRANSITION_END,i).emulateTransitionEnd(O)}else i()}},e.hide=function(t){var e=this,n=this.getTipElement(),o=p.default.Event(this.constructor.Event.HIDE),M=function(){e._hoverState!==to&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),p.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(p.default(this.element).trigger(o),!o.isDefaultPrevented()){if(p.default(n).removeClass(Jn),"ontouchstart"in document.documentElement&&p.default(document.body).children().off("mouseover",null,p.default.noop),this._activeTrigger[bo]=!1,this._activeTrigger[Mo]=!1,this._activeTrigger[po]=!1,p.default(this.tip).hasClass(Qn)){var b=f.getTransitionDurationFromElement(n);p.default(n).one(f.TRANSITION_END,M).emulateTransitionEnd(b)}else M();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){p.default(this.getTipElement()).addClass(Vn+"-"+t)},e.getTipElement=function(){return this.tip=this.tip||p.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(p.default(t.querySelectorAll(no)),this.getTitle()),p.default(t).removeClass(Qn+" "+Jn)},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=jn(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?p.default(e).parent().is(t)||t.empty().append(e):t.text(p.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return r({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:oo},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t.config.offset(e.offsets,t.element)),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:f.isElement(this.config.container)?p.default(this.config.container):p.default(document).find(this.config.container)},e._getAttachment=function(t){return ro[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)p.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if(e!==co){var n=e===po?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o=e===po?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;p.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},p.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=r({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Mo:po]=!0),p.default(e.getTipElement()).hasClass(Jn)||e._hoverState===to?e._hoverState=to:(clearTimeout(e._timeout),e._hoverState=to,e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){e._hoverState===to&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Mo:po]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=eo,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){e._hoverState===eo&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=p.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Zn.indexOf(t)&&delete e[t]})),"number"==typeof(t=r({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),f.typeCheckConfig(Fn,t,this.constructor.DefaultType),t.sanitize&&(t.template=jn(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=p.default(this.getTipElement()),e=t.attr("class").match(Kn);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(p.default(t).removeClass(Qn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=p.default(this),o=n.data(Gn),M="object"==typeof e&&e;if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,M),n.data(Gn,o)),"string"==typeof e)){if(void 0===o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},c(t,null,[{key:"VERSION",get:function(){return Hn}},{key:"Default",get:function(){return zo}},{key:"NAME",get:function(){return Fn}},{key:"DATA_KEY",get:function(){return Gn}},{key:"Event",get:function(){return io}},{key:"EVENT_KEY",get:function(){return Yn}},{key:"DefaultType",get:function(){return ao}}]),t}();p.default.fn[Fn]=Oo._jQueryInterface,p.default.fn[Fn].Constructor=Oo,p.default.fn[Fn].noConflict=function(){return p.default.fn[Fn]=$n,Oo._jQueryInterface};var so="popover",Ao="4.6.2",uo="bs.popover",lo="."+uo,fo=p.default.fn[so],qo="bs-popover",ho=new RegExp("(^|\\s)"+qo+"\\S+","g"),Wo="fade",vo="show",Ro=".popover-header",mo=".popover-body",go=r({},Oo.Default,{placement:"right",trigger:"click",content:"",template:''}),Lo=r({},Oo.DefaultType,{content:"(string|element|function)"}),yo={HIDE:"hide"+lo,HIDDEN:"hidden"+lo,SHOW:"show"+lo,SHOWN:"shown"+lo,INSERTED:"inserted"+lo,CLICK:"click"+lo,FOCUSIN:"focusin"+lo,FOCUSOUT:"focusout"+lo,MOUSEENTER:"mouseenter"+lo,MOUSELEAVE:"mouseleave"+lo},_o=function(t){function e(){return t.apply(this,arguments)||this}z(e,t);var n=e.prototype;return n.isWithContent=function(){return this.getTitle()||this._getContent()},n.addAttachmentClass=function(t){p.default(this.getTipElement()).addClass(qo+"-"+t)},n.getTipElement=function(){return this.tip=this.tip||p.default(this.config.template)[0],this.tip},n.setContent=function(){var t=p.default(this.getTipElement());this.setElementContent(t.find(Ro),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(mo),e),t.removeClass(Wo+" "+vo)},n._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},n._cleanTipClass=function(){var t=p.default(this.getTipElement()),e=t.attr("class").match(ho);null!==e&&e.length>0&&t.removeClass(e.join(""))},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this).data(uo),o="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new e(this,o),p.default(this).data(uo,n)),"string"==typeof t)){if(void 0===n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},c(e,null,[{key:"VERSION",get:function(){return Ao}},{key:"Default",get:function(){return go}},{key:"NAME",get:function(){return so}},{key:"DATA_KEY",get:function(){return uo}},{key:"Event",get:function(){return yo}},{key:"EVENT_KEY",get:function(){return lo}},{key:"DefaultType",get:function(){return Lo}}]),e}(Oo);p.default.fn[so]=_o._jQueryInterface,p.default.fn[so].Constructor=_o,p.default.fn[so].noConflict=function(){return p.default.fn[so]=fo,_o._jQueryInterface};var No="scrollspy",Eo="4.6.2",To="bs.scrollspy",Bo="."+To,Co=".data-api",wo=p.default.fn[No],So="dropdown-item",Xo="active",xo="activate"+Bo,ko="scroll"+Bo,Io="load"+Bo+Co,Do="offset",Po="position",Uo='[data-spy="scroll"]',jo=".nav, .list-group",Fo=".nav-link",Ho=".nav-item",Go=".list-group-item",Yo=".dropdown",$o=".dropdown-item",Vo=".dropdown-toggle",Ko={offset:10,method:"auto",target:""},Zo={offset:"number",method:"string",target:"(string|element)"},Qo=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+Fo+","+this._config.target+" "+Go+","+this._config.target+" "+$o,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p.default(this._scrollElement).on(ko,(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?Do:Po,n="auto"===this._config.method?e:this._config.method,o=n===Po?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,M=f.getSelectorFromElement(t);if(M&&(e=document.querySelector(M)),e){var b=e.getBoundingClientRect();if(b.width||b.height)return[p.default(e)[n]().top+o,M]}return null})).filter(Boolean).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){p.default.removeData(this._element,To),p.default(this._scrollElement).off(Bo),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=r({},Ko,"object"==typeof t&&t?t:{})).target&&f.isElement(t.target)){var e=p.default(t.target).attr("id");e||(e=f.getUID(No),p.default(t.target).attr("id",e)),t.target="#"+e}return f.typeCheckConfig(No,t,Zo),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var o=this._targets[this._targets.length-1];this._activeTarget!==o&&this._activate(o)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var p=this._offsets.length;p--;)this._activeTarget!==this._targets[p]&&t>=this._offsets[p]&&(void 0===this._offsets[p+1]||t{"use strict";var o=n(9742),p=n(645),M=n(5826);function b(){return r.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function c(t,e){if(b()=b())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+b().toString(16)+" bytes");return 0|t}function A(t,e){if(r.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var o=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return P(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return U(t).length;default:if(o)return P(t).length;e=(""+e).toLowerCase(),o=!0}}function u(t,e,n){var o=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return E(this,e,n);case"utf8":case"utf-8":return L(this,e,n);case"ascii":return _(this,e,n);case"latin1":case"binary":return N(this,e,n);case"base64":return g(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,e,n);default:if(o)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),o=!0}}function l(t,e,n){var o=t[e];t[e]=t[n],t[n]=o}function d(t,e,n,o,p){if(0===t.length)return-1;if("string"==typeof n?(o=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=p?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(p)return-1;n=t.length-1}else if(n<0){if(!p)return-1;n=0}if("string"==typeof e&&(e=r.from(e,o)),r.isBuffer(e))return 0===e.length?-1:f(t,e,n,o,p);if("number"==typeof e)return e&=255,r.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?p?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):f(t,[e],n,o,p);throw new TypeError("val must be string, number or Buffer")}function f(t,e,n,o,p){var M,b=1,c=t.length,r=e.length;if(void 0!==o&&("ucs2"===(o=String(o).toLowerCase())||"ucs-2"===o||"utf16le"===o||"utf-16le"===o)){if(t.length<2||e.length<2)return-1;b=2,c/=2,r/=2,n/=2}function z(t,e){return 1===b?t[e]:t.readUInt16BE(e*b)}if(p){var a=-1;for(M=n;Mc&&(n=c-r),M=n;M>=0;M--){for(var i=!0,O=0;Op&&(o=p):o=p;var M=e.length;if(M%2!=0)throw new TypeError("Invalid hex string");o>M/2&&(o=M/2);for(var b=0;b>8,p=n%256,M.push(p),M.push(o);return M}(e,t.length-n),t,n,o)}function g(t,e,n){return 0===e&&n===t.length?o.fromByteArray(t):o.fromByteArray(t.slice(e,n))}function L(t,e,n){n=Math.min(t.length,n);for(var o=[],p=e;p239?4:z>223?3:z>191?2:1;if(p+i<=n)switch(i){case 1:z<128&&(a=z);break;case 2:128==(192&(M=t[p+1]))&&(r=(31&z)<<6|63&M)>127&&(a=r);break;case 3:M=t[p+1],b=t[p+2],128==(192&M)&&128==(192&b)&&(r=(15&z)<<12|(63&M)<<6|63&b)>2047&&(r<55296||r>57343)&&(a=r);break;case 4:M=t[p+1],b=t[p+2],c=t[p+3],128==(192&M)&&128==(192&b)&&128==(192&c)&&(r=(15&z)<<18|(63&M)<<12|(63&b)<<6|63&c)>65535&&r<1114112&&(a=r)}null===a?(a=65533,i=1):a>65535&&(a-=65536,o.push(a>>>10&1023|55296),a=56320|1023&a),o.push(a),p+=i}return function(t){var e=t.length;if(e<=y)return String.fromCharCode.apply(String,t);var n="",o=0;for(;o0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},r.prototype.compare=function(t,e,n,o,p){if(!r.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===o&&(o=0),void 0===p&&(p=this.length),e<0||n>t.length||o<0||p>this.length)throw new RangeError("out of range index");if(o>=p&&e>=n)return 0;if(o>=p)return-1;if(e>=n)return 1;if(this===t)return 0;for(var M=(p>>>=0)-(o>>>=0),b=(n>>>=0)-(e>>>=0),c=Math.min(M,b),z=this.slice(o,p),a=t.slice(e,n),i=0;ip)&&(n=p),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");o||(o="utf8");for(var M=!1;;)switch(o){case"hex":return q(this,t,e,n);case"utf8":case"utf-8":return h(this,t,e,n);case"ascii":return W(this,t,e,n);case"latin1":case"binary":return v(this,t,e,n);case"base64":return R(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return m(this,t,e,n);default:if(M)throw new TypeError("Unknown encoding: "+o);o=(""+o).toLowerCase(),M=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var y=4096;function _(t,e,n){var o="";n=Math.min(t.length,n);for(var p=e;po)&&(n=o);for(var p="",M=e;Mn)throw new RangeError("Trying to access beyond buffer length")}function C(t,e,n,o,p,M){if(!r.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>p||et.length)throw new RangeError("Index out of range")}function w(t,e,n,o){e<0&&(e=65535+e+1);for(var p=0,M=Math.min(t.length-n,2);p>>8*(o?p:1-p)}function S(t,e,n,o){e<0&&(e=4294967295+e+1);for(var p=0,M=Math.min(t.length-n,4);p>>8*(o?p:3-p)&255}function X(t,e,n,o,p,M){if(n+o>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function x(t,e,n,o,M){return M||X(t,0,n,4),p.write(t,e,n,o,23,4),n+4}function k(t,e,n,o,M){return M||X(t,0,n,8),p.write(t,e,n,o,52,8),n+8}r.prototype.slice=function(t,e){var n,o=this.length;if((t=~~t)<0?(t+=o)<0&&(t=0):t>o&&(t=o),(e=void 0===e?o:~~e)<0?(e+=o)<0&&(e=0):e>o&&(e=o),e0&&(p*=256);)o+=this[t+--e]*p;return o},r.prototype.readUInt8=function(t,e){return e||B(t,1,this.length),this[t]},r.prototype.readUInt16LE=function(t,e){return e||B(t,2,this.length),this[t]|this[t+1]<<8},r.prototype.readUInt16BE=function(t,e){return e||B(t,2,this.length),this[t]<<8|this[t+1]},r.prototype.readUInt32LE=function(t,e){return e||B(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},r.prototype.readUInt32BE=function(t,e){return e||B(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},r.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||B(t,e,this.length);for(var o=this[t],p=1,M=0;++M=(p*=128)&&(o-=Math.pow(2,8*e)),o},r.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||B(t,e,this.length);for(var o=e,p=1,M=this[t+--o];o>0&&(p*=256);)M+=this[t+--o]*p;return M>=(p*=128)&&(M-=Math.pow(2,8*e)),M},r.prototype.readInt8=function(t,e){return e||B(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},r.prototype.readInt16LE=function(t,e){e||B(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},r.prototype.readInt16BE=function(t,e){e||B(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},r.prototype.readInt32LE=function(t,e){return e||B(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},r.prototype.readInt32BE=function(t,e){return e||B(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},r.prototype.readFloatLE=function(t,e){return e||B(t,4,this.length),p.read(this,t,!0,23,4)},r.prototype.readFloatBE=function(t,e){return e||B(t,4,this.length),p.read(this,t,!1,23,4)},r.prototype.readDoubleLE=function(t,e){return e||B(t,8,this.length),p.read(this,t,!0,52,8)},r.prototype.readDoubleBE=function(t,e){return e||B(t,8,this.length),p.read(this,t,!1,52,8)},r.prototype.writeUIntLE=function(t,e,n,o){(t=+t,e|=0,n|=0,o)||C(this,t,e,n,Math.pow(2,8*n)-1,0);var p=1,M=0;for(this[e]=255&t;++M=0&&(M*=256);)this[e+p]=t/M&255;return e+n},r.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,1,255,0),r.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},r.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},r.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},r.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):S(this,t,e,!0),e+4},r.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):S(this,t,e,!1),e+4},r.prototype.writeIntLE=function(t,e,n,o){if(t=+t,e|=0,!o){var p=Math.pow(2,8*n-1);C(this,t,e,n,p-1,-p)}var M=0,b=1,c=0;for(this[e]=255&t;++M>0)-c&255;return e+n},r.prototype.writeIntBE=function(t,e,n,o){if(t=+t,e|=0,!o){var p=Math.pow(2,8*n-1);C(this,t,e,n,p-1,-p)}var M=n-1,b=1,c=0;for(this[e+M]=255&t;--M>=0&&(b*=256);)t<0&&0===c&&0!==this[e+M+1]&&(c=1),this[e+M]=(t/b>>0)-c&255;return e+n},r.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,1,127,-128),r.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},r.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},r.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},r.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,4,2147483647,-2147483648),r.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):S(this,t,e,!0),e+4},r.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),r.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):S(this,t,e,!1),e+4},r.prototype.writeFloatLE=function(t,e,n){return x(this,t,e,!0,n)},r.prototype.writeFloatBE=function(t,e,n){return x(this,t,e,!1,n)},r.prototype.writeDoubleLE=function(t,e,n){return k(this,t,e,!0,n)},r.prototype.writeDoubleBE=function(t,e,n){return k(this,t,e,!1,n)},r.prototype.copy=function(t,e,n,o){if(n||(n=0),o||0===o||(o=this.length),e>=t.length&&(e=t.length),e||(e=0),o>0&&o=this.length)throw new RangeError("sourceStart out of bounds");if(o<0)throw new RangeError("sourceEnd out of bounds");o>this.length&&(o=this.length),t.length-e=0;--p)t[p+e]=this[p+n];else if(M<1e3||!r.TYPED_ARRAY_SUPPORT)for(p=0;p>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(M=e;M55295&&n<57344){if(!p){if(n>56319){(e-=3)>-1&&M.push(239,191,189);continue}if(b+1===o){(e-=3)>-1&&M.push(239,191,189);continue}p=n;continue}if(n<56320){(e-=3)>-1&&M.push(239,191,189),p=n;continue}n=65536+(p-55296<<10|n-56320)}else p&&(e-=3)>-1&&M.push(239,191,189);if(p=null,n<128){if((e-=1)<0)break;M.push(n)}else if(n<2048){if((e-=2)<0)break;M.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;M.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;M.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return M}function U(t){return o.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(I,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function j(t,e,n,o){for(var p=0;p=e.length||p>=t.length);++p)e[p+n]=t[p];return p}},640:(t,e,n)=>{"use strict";var o=n(1742),p={"text/plain":"Text","text/html":"Url",default:"Text"};t.exports=function(t,e){var n,M,b,c,r,z=!1;e||(e={}),e.debug;try{if(M=o(),b=document.createRange(),c=document.getSelection(),(r=document.createElement("span")).textContent=t,r.ariaHidden="true",r.style.all="unset",r.style.position="fixed",r.style.top=0,r.style.clip="rect(0, 0, 0, 0)",r.style.whiteSpace="pre",r.style.webkitUserSelect="text",r.style.MozUserSelect="text",r.style.msUserSelect="text",r.style.userSelect="text",r.addEventListener("copy",(function(n){if(n.stopPropagation(),e.format)if(n.preventDefault(),void 0===n.clipboardData){window.clipboardData.clearData();var o=p[e.format]||p.default;window.clipboardData.setData(o,t)}else n.clipboardData.clearData(),n.clipboardData.setData(e.format,t);e.onCopy&&(n.preventDefault(),e.onCopy(n.clipboardData))})),document.body.appendChild(r),b.selectNodeContents(r),c.addRange(b),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");z=!0}catch(o){try{window.clipboardData.setData(e.format||"text",t),e.onCopy&&e.onCopy(window.clipboardData),z=!0}catch(o){n=function(t){var e=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return t.replace(/#{\s*key\s*}/g,e)}("message"in e?e.message:"Copy to clipboard: #{key}, Enter"),window.prompt(n,t)}}finally{c&&("function"==typeof c.removeRange?c.removeRange(b):c.removeAllRanges()),r&&document.body.removeChild(r),M()}return z}},645:(t,e)=>{e.read=function(t,e,n,o,p){var M,b,c=8*p-o-1,r=(1<>1,a=-7,i=n?p-1:0,O=n?-1:1,s=t[e+i];for(i+=O,M=s&(1<<-a)-1,s>>=-a,a+=c;a>0;M=256*M+t[e+i],i+=O,a-=8);for(b=M&(1<<-a)-1,M>>=-a,a+=o;a>0;b=256*b+t[e+i],i+=O,a-=8);if(0===M)M=1-z;else{if(M===r)return b?NaN:1/0*(s?-1:1);b+=Math.pow(2,o),M-=z}return(s?-1:1)*b*Math.pow(2,M-o)},e.write=function(t,e,n,o,p,M){var b,c,r,z=8*M-p-1,a=(1<>1,O=23===p?Math.pow(2,-24)-Math.pow(2,-77):0,s=o?0:M-1,A=o?1:-1,u=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(c=isNaN(e)?1:0,b=a):(b=Math.floor(Math.log(e)/Math.LN2),e*(r=Math.pow(2,-b))<1&&(b--,r*=2),(e+=b+i>=1?O/r:O*Math.pow(2,1-i))*r>=2&&(b++,r/=2),b+i>=a?(c=0,b=a):b+i>=1?(c=(e*r-1)*Math.pow(2,p),b+=i):(c=e*Math.pow(2,i-1)*Math.pow(2,p),b=0));p>=8;t[n+s]=255&c,s+=A,c/=256,p-=8);for(b=b<0;t[n+s]=255&b,s+=A,b/=256,z-=8);t[n+s-A]|=128*u}},5826:t=>{var e={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==e.call(t)}},9755:function(t,e){var n;!function(e,n){"use strict";"object"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}:n(e)}("undefined"!=typeof window?window:this,(function(o,p){"use strict";var M=[],b=Object.getPrototypeOf,c=M.slice,r=M.flat?function(t){return M.flat.call(t)}:function(t){return M.concat.apply([],t)},z=M.push,a=M.indexOf,i={},O=i.toString,s=i.hasOwnProperty,A=s.toString,u=A.call(Object),l={},d=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType&&"function"!=typeof t.item},f=function(t){return null!=t&&t===t.window},q=o.document,h={type:!0,src:!0,nonce:!0,noModule:!0};function W(t,e,n){var o,p,M=(n=n||q).createElement("script");if(M.text=t,e)for(o in h)(p=e[o]||e.getAttribute&&e.getAttribute(o))&&M.setAttribute(o,p);n.head.appendChild(M).parentNode.removeChild(M)}function v(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?i[O.call(t)]||"object":typeof t}var R="3.7.1",m=/HTML$/i,g=function(t,e){return new g.fn.init(t,e)};function L(t){var e=!!t&&"length"in t&&t.length,n=v(t);return!d(t)&&!f(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function y(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}g.fn=g.prototype={jquery:R,constructor:g,length:0,toArray:function(){return c.call(this)},get:function(t){return null==t?c.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=g.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return g.each(this,t)},map:function(t){return this.pushStack(g.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(c.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(g.grep(this,(function(t,e){return(e+1)%2})))},odd:function(){return this.pushStack(g.grep(this,(function(t,e){return e%2})))},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|"+T+")"+T+"*"),P=new RegExp(T+"|>"),U=new RegExp(x),j=new RegExp("^"+C+"$"),F={ID:new RegExp("^#("+C+")"),CLASS:new RegExp("^\\.("+C+")"),TAG:new RegExp("^("+C+"|[*])"),ATTR:new RegExp("^"+w),PSEUDO:new RegExp("^"+x),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+T+"*(even|odd|(([+-]|)(\\d*)n|)"+T+"*(?:([+-]|)"+T+"*(\\d+)|))"+T+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+T+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+T+"*((?:-\\d)?\\d*)"+T+"*\\)|)(?=[^-]|$)","i")},H=/^(?:input|select|textarea|button)$/i,G=/^h\d$/i,Y=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,V=new RegExp("\\\\[\\da-fA-F]{1,6}"+T+"?|\\\\([^\\r\\n\\f])","g"),K=function(t,e){var n="0x"+t.slice(1)-65536;return e||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},Z=function(){rt()},Q=Ot((function(t){return!0===t.disabled&&y(t,"fieldset")}),{dir:"parentNode",next:"legend"});try{u.apply(M=c.call(S.childNodes),S.childNodes),M[S.childNodes.length].nodeType}catch(t){u={apply:function(t,e){X.apply(t,c.call(e))},call:function(t){X.apply(t,c.call(arguments,1))}}}function J(t,e,n,o){var p,M,b,c,z,a,s,A=e&&e.ownerDocument,f=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==f&&9!==f&&11!==f)return n;if(!o&&(rt(e),e=e||r,i)){if(11!==f&&(z=Y.exec(t)))if(p=z[1]){if(9===f){if(!(b=e.getElementById(p)))return n;if(b.id===p)return u.call(n,b),n}else if(A&&(b=A.getElementById(p))&&J.contains(e,b)&&b.id===p)return u.call(n,b),n}else{if(z[2])return u.apply(n,e.getElementsByTagName(t)),n;if((p=z[3])&&e.getElementsByClassName)return u.apply(n,e.getElementsByClassName(p)),n}if(!(R[t+" "]||O&&O.test(t))){if(s=t,A=e,1===f&&(P.test(t)||D.test(t))){for((A=$.test(t)&&ct(e.parentNode)||e)==e&&l.scope||((c=e.getAttribute("id"))?c=g.escapeSelector(c):e.setAttribute("id",c=d)),M=(a=at(t)).length;M--;)a[M]=(c?"#"+c:":scope")+" "+it(a[M]);s=a.join(",")}try{return u.apply(n,A.querySelectorAll(s)),n}catch(e){R(t,!0)}finally{c===d&&e.removeAttribute("id")}}}return ft(t.replace(B,"$1"),e,n,o)}function tt(){var t=[];return function n(o,p){return t.push(o+" ")>e.cacheLength&&delete n[t.shift()],n[o+" "]=p}}function et(t){return t[d]=!0,t}function nt(t){var e=r.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function ot(t){return function(e){return y(e,"input")&&e.type===t}}function pt(t){return function(e){return(y(e,"input")||y(e,"button"))&&e.type===t}}function Mt(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&Q(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function bt(t){return et((function(e){return e=+e,et((function(n,o){for(var p,M=t([],n.length,e),b=M.length;b--;)n[p=M[b]]&&(n[p]=!(o[p]=n[p]))}))}))}function ct(t){return t&&void 0!==t.getElementsByTagName&&t}function rt(t){var n,o=t?t.ownerDocument||t:S;return o!=r&&9===o.nodeType&&o.documentElement?(z=(r=o).documentElement,i=!g.isXMLDoc(r),A=z.matches||z.webkitMatchesSelector||z.msMatchesSelector,z.msMatchesSelector&&S!=r&&(n=r.defaultView)&&n.top!==n&&n.addEventListener("unload",Z),l.getById=nt((function(t){return z.appendChild(t).id=g.expando,!r.getElementsByName||!r.getElementsByName(g.expando).length})),l.disconnectedMatch=nt((function(t){return A.call(t,"*")})),l.scope=nt((function(){return r.querySelectorAll(":scope")})),l.cssHas=nt((function(){try{return r.querySelector(":has(*,:jqfake)"),!1}catch(t){return!0}})),l.getById?(e.filter.ID=function(t){var e=t.replace(V,K);return function(t){return t.getAttribute("id")===e}},e.find.ID=function(t,e){if(void 0!==e.getElementById&&i){var n=e.getElementById(t);return n?[n]:[]}}):(e.filter.ID=function(t){var e=t.replace(V,K);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},e.find.ID=function(t,e){if(void 0!==e.getElementById&&i){var n,o,p,M=e.getElementById(t);if(M){if((n=M.getAttributeNode("id"))&&n.value===t)return[M];for(p=e.getElementsByName(t),o=0;M=p[o++];)if((n=M.getAttributeNode("id"))&&n.value===t)return[M]}return[]}}),e.find.TAG=function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):e.querySelectorAll(t)},e.find.CLASS=function(t,e){if(void 0!==e.getElementsByClassName&&i)return e.getElementsByClassName(t)},O=[],nt((function(t){var e;z.appendChild(t).innerHTML="",t.querySelectorAll("[selected]").length||O.push("\\["+T+"*(?:value|"+L+")"),t.querySelectorAll("[id~="+d+"-]").length||O.push("~="),t.querySelectorAll("a#"+d+"+*").length||O.push(".#.+[+~]"),t.querySelectorAll(":checked").length||O.push(":checked"),(e=r.createElement("input")).setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),z.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&O.push(":enabled",":disabled"),(e=r.createElement("input")).setAttribute("name",""),t.appendChild(e),t.querySelectorAll("[name='']").length||O.push("\\["+T+"*name"+T+"*="+T+"*(?:''|\"\")")})),l.cssHas||O.push(":has"),O=O.length&&new RegExp(O.join("|")),m=function(t,e){if(t===e)return b=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n||(1&(n=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!l.sortDetached&&e.compareDocumentPosition(t)===n?t===r||t.ownerDocument==S&&J.contains(S,t)?-1:e===r||e.ownerDocument==S&&J.contains(S,e)?1:p?a.call(p,t)-a.call(p,e):0:4&n?-1:1)},r):r}for(t in J.matches=function(t,e){return J(t,null,null,e)},J.matchesSelector=function(t,e){if(rt(t),i&&!R[e+" "]&&(!O||!O.test(e)))try{var n=A.call(t,e);if(n||l.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(t){R(e,!0)}return J(e,r,null,[t]).length>0},J.contains=function(t,e){return(t.ownerDocument||t)!=r&&rt(t),g.contains(t,e)},J.attr=function(t,n){(t.ownerDocument||t)!=r&&rt(t);var o=e.attrHandle[n.toLowerCase()],p=o&&s.call(e.attrHandle,n.toLowerCase())?o(t,n,!i):void 0;return void 0!==p?p:t.getAttribute(n)},J.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},g.uniqueSort=function(t){var e,n=[],o=0,M=0;if(b=!l.sortStable,p=!l.sortStable&&c.call(t,0),N.call(t,m),b){for(;e=t[M++];)e===t[M]&&(o=n.push(M));for(;o--;)E.call(t,n[o],1)}return p=null,t},g.fn.uniqueSort=function(){return this.pushStack(g.uniqueSort(c.apply(this)))},e=g.expr={cacheLength:50,createPseudo:et,match:F,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(V,K),t[3]=(t[3]||t[4]||t[5]||"").replace(V,K),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||J.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&J.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return F.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&U.test(n)&&(e=at(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(V,K).toLowerCase();return"*"===t?function(){return!0}:function(t){return y(t,e)}},CLASS:function(t){var e=h[t+" "];return e||(e=new RegExp("(^|"+T+")"+t+"("+T+"|$)"))&&h(t,(function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")}))},ATTR:function(t,e,n){return function(o){var p=J.attr(o,t);return null==p?"!="===e:!e||(p+="","="===e?p===n:"!="===e?p!==n:"^="===e?n&&0===p.indexOf(n):"*="===e?n&&p.indexOf(n)>-1:"$="===e?n&&p.slice(-n.length)===n:"~="===e?(" "+p.replace(k," ")+" ").indexOf(n)>-1:"|="===e&&(p===n||p.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,o,p){var M="nth"!==t.slice(0,3),b="last"!==t.slice(-4),c="of-type"===e;return 1===o&&0===p?function(t){return!!t.parentNode}:function(e,n,r){var z,a,i,O,s,A=M!==b?"nextSibling":"previousSibling",u=e.parentNode,l=c&&e.nodeName.toLowerCase(),q=!r&&!c,h=!1;if(u){if(M){for(;A;){for(i=e;i=i[A];)if(c?y(i,l):1===i.nodeType)return!1;s=A="only"===t&&!s&&"nextSibling"}return!0}if(s=[b?u.firstChild:u.lastChild],b&&q){for(h=(O=(z=(a=u[d]||(u[d]={}))[t]||[])[0]===f&&z[1])&&z[2],i=O&&u.childNodes[O];i=++O&&i&&i[A]||(h=O=0)||s.pop();)if(1===i.nodeType&&++h&&i===e){a[t]=[f,O,h];break}}else if(q&&(h=O=(z=(a=e[d]||(e[d]={}))[t]||[])[0]===f&&z[1]),!1===h)for(;(i=++O&&i&&i[A]||(h=O=0)||s.pop())&&(!(c?y(i,l):1===i.nodeType)||!++h||(q&&((a=i[d]||(i[d]={}))[t]=[f,h]),i!==e)););return(h-=p)===o||h%o==0&&h/o>=0}}},PSEUDO:function(t,n){var o,p=e.pseudos[t]||e.setFilters[t.toLowerCase()]||J.error("unsupported pseudo: "+t);return p[d]?p(n):p.length>1?(o=[t,t,"",n],e.setFilters.hasOwnProperty(t.toLowerCase())?et((function(t,e){for(var o,M=p(t,n),b=M.length;b--;)t[o=a.call(t,M[b])]=!(e[o]=M[b])})):function(t){return p(t,0,o)}):p}},pseudos:{not:et((function(t){var e=[],n=[],o=dt(t.replace(B,"$1"));return o[d]?et((function(t,e,n,p){for(var M,b=o(t,null,p,[]),c=t.length;c--;)(M=b[c])&&(t[c]=!(e[c]=M))})):function(t,p,M){return e[0]=t,o(e,null,M,n),e[0]=null,!n.pop()}})),has:et((function(t){return function(e){return J(t,e).length>0}})),contains:et((function(t){return t=t.replace(V,K),function(e){return(e.textContent||g.text(e)).indexOf(t)>-1}})),lang:et((function(t){return j.test(t||"")||J.error("unsupported lang: "+t),t=t.replace(V,K).toLowerCase(),function(e){var n;do{if(n=i?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(t){var e=o.location&&o.location.hash;return e&&e.slice(1)===t.id},root:function(t){return t===z},focus:function(t){return t===function(){try{return r.activeElement}catch(t){}}()&&r.hasFocus()&&!!(t.type||t.href||~t.tabIndex)},enabled:Mt(!1),disabled:Mt(!0),checked:function(t){return y(t,"input")&&!!t.checked||y(t,"option")&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!e.pseudos.empty(t)},header:function(t){return G.test(t.nodeName)},input:function(t){return H.test(t.nodeName)},button:function(t){return y(t,"input")&&"button"===t.type||y(t,"button")},text:function(t){var e;return y(t,"input")&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:bt((function(){return[0]})),last:bt((function(t,e){return[e-1]})),eq:bt((function(t,e,n){return[n<0?n+e:n]})),even:bt((function(t,e){for(var n=0;ne?e:n;--o>=0;)t.push(o);return t})),gt:bt((function(t,e,n){for(var o=n<0?n+e:n;++o1?function(e,n,o){for(var p=t.length;p--;)if(!t[p](e,n,o))return!1;return!0}:t[0]}function At(t,e,n,o,p){for(var M,b=[],c=0,r=t.length,z=null!=e;c-1&&(M[z]=!(b[z]=O))}}else s=At(s===b?s.splice(d,s.length):s),p?p(null,b,s,r):u.apply(b,s)}))}function lt(t){for(var o,p,M,b=t.length,c=e.relative[t[0].type],r=c||e.relative[" "],z=c?1:0,i=Ot((function(t){return t===o}),r,!0),O=Ot((function(t){return a.call(o,t)>-1}),r,!0),s=[function(t,e,p){var M=!c&&(p||e!=n)||((o=e).nodeType?i(t,e,p):O(t,e,p));return o=null,M}];z1&&st(s),z>1&&it(t.slice(0,z-1).concat({value:" "===t[z-2].type?"*":""})).replace(B,"$1"),p,z0,M=t.length>0,b=function(b,c,z,a,O){var s,A,l,d=0,q="0",h=b&&[],W=[],v=n,R=b||M&&e.find.TAG("*",O),m=f+=null==v?1:Math.random()||.1,L=R.length;for(O&&(n=c==r||c||O);q!==L&&null!=(s=R[q]);q++){if(M&&s){for(A=0,c||s.ownerDocument==r||(rt(s),z=!i);l=t[A++];)if(l(s,c||r,z)){u.call(a,s);break}O&&(f=m)}p&&((s=!l&&s)&&d--,b&&h.push(s))}if(d+=q,p&&q!==d){for(A=0;l=o[A++];)l(h,W,c,z);if(b){if(d>0)for(;q--;)h[q]||W[q]||(W[q]=_.call(a));W=At(W)}u.apply(a,W),O&&!b&&W.length>0&&d+o.length>1&&g.uniqueSort(a)}return O&&(f=m,n=v),h};return p?et(b):b}(b,M)),c.selector=t}return c}function ft(t,n,o,p){var M,b,c,r,z,a="function"==typeof t&&t,O=!p&&at(t=a.selector||t);if(o=o||[],1===O.length){if((b=O[0]=O[0].slice(0)).length>2&&"ID"===(c=b[0]).type&&9===n.nodeType&&i&&e.relative[b[1].type]){if(!(n=(e.find.ID(c.matches[0].replace(V,K),n)||[])[0]))return o;a&&(n=n.parentNode),t=t.slice(b.shift().value.length)}for(M=F.needsContext.test(t)?0:b.length;M--&&(c=b[M],!e.relative[r=c.type]);)if((z=e.find[r])&&(p=z(c.matches[0].replace(V,K),$.test(b[0].type)&&ct(n.parentNode)||n))){if(b.splice(M,1),!(t=p.length&&it(b)))return u.apply(o,p),o;break}}return(a||dt(t,O))(p,n,!i,o,!n||$.test(t)&&ct(n.parentNode)||n),o}zt.prototype=e.filters=e.pseudos,e.setFilters=new zt,l.sortStable=d.split("").sort(m).join("")===d,rt(),l.sortDetached=nt((function(t){return 1&t.compareDocumentPosition(r.createElement("fieldset"))})),g.find=J,g.expr[":"]=g.expr.pseudos,g.unique=g.uniqueSort,J.compile=dt,J.select=ft,J.setDocument=rt,J.tokenize=at,J.escape=g.escapeSelector,J.getText=g.text,J.isXML=g.isXMLDoc,J.selectors=g.expr,J.support=g.support,J.uniqueSort=g.uniqueSort}();var x=function(t,e,n){for(var o=[],p=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(p&&g(t).is(n))break;o.push(t)}return o},k=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},I=g.expr.match.needsContext,D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function P(t,e,n){return d(e)?g.grep(t,(function(t,o){return!!e.call(t,o,t)!==n})):e.nodeType?g.grep(t,(function(t){return t===e!==n})):"string"!=typeof e?g.grep(t,(function(t){return a.call(e,t)>-1!==n})):g.filter(e,t,n)}g.filter=function(t,e,n){var o=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===o.nodeType?g.find.matchesSelector(o,t)?[o]:[]:g.find.matches(t,g.grep(e,(function(t){return 1===t.nodeType})))},g.fn.extend({find:function(t){var e,n,o=this.length,p=this;if("string"!=typeof t)return this.pushStack(g(t).filter((function(){for(e=0;e1?g.uniqueSort(n):n},filter:function(t){return this.pushStack(P(this,t||[],!1))},not:function(t){return this.pushStack(P(this,t||[],!0))},is:function(t){return!!P(this,"string"==typeof t&&I.test(t)?g(t):t||[],!1).length}});var U,j=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(g.fn.init=function(t,e,n){var o,p;if(!t)return this;if(n=n||U,"string"==typeof t){if(!(o="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:j.exec(t))||!o[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(o[1]){if(e=e instanceof g?e[0]:e,g.merge(this,g.parseHTML(o[1],e&&e.nodeType?e.ownerDocument||e:q,!0)),D.test(o[1])&&g.isPlainObject(e))for(o in e)d(this[o])?this[o](e[o]):this.attr(o,e[o]);return this}return(p=q.getElementById(o[2]))&&(this[0]=p,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):d(t)?void 0!==n.ready?n.ready(t):t(g):g.makeArray(t,this)}).prototype=g.fn,U=g(q);var F=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function G(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}g.fn.extend({has:function(t){var e=g(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&g.find.matchesSelector(n,t))){M.push(n);break}return this.pushStack(M.length>1?g.uniqueSort(M):M)},index:function(t){return t?"string"==typeof t?a.call(g(t),this[0]):a.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(g.uniqueSort(g.merge(this.get(),g(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),g.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return x(t,"parentNode")},parentsUntil:function(t,e,n){return x(t,"parentNode",n)},next:function(t){return G(t,"nextSibling")},prev:function(t){return G(t,"previousSibling")},nextAll:function(t){return x(t,"nextSibling")},prevAll:function(t){return x(t,"previousSibling")},nextUntil:function(t,e,n){return x(t,"nextSibling",n)},prevUntil:function(t,e,n){return x(t,"previousSibling",n)},siblings:function(t){return k((t.parentNode||{}).firstChild,t)},children:function(t){return k(t.firstChild)},contents:function(t){return null!=t.contentDocument&&b(t.contentDocument)?t.contentDocument:(y(t,"template")&&(t=t.content||t),g.merge([],t.childNodes))}},(function(t,e){g.fn[t]=function(n,o){var p=g.map(this,e,n);return"Until"!==t.slice(-5)&&(o=n),o&&"string"==typeof o&&(p=g.filter(o,p)),this.length>1&&(H[t]||g.uniqueSort(p),F.test(t)&&p.reverse()),this.pushStack(p)}}));var Y=/[^\x20\t\r\n\f]+/g;function $(t){return t}function V(t){throw t}function K(t,e,n,o){var p;try{t&&d(p=t.promise)?p.call(t).done(e).fail(n):t&&d(p=t.then)?p.call(t,e,n):e.apply(void 0,[t].slice(o))}catch(t){n.apply(void 0,[t])}}g.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return g.each(t.match(Y)||[],(function(t,n){e[n]=!0})),e}(t):g.extend({},t);var e,n,o,p,M=[],b=[],c=-1,r=function(){for(p=p||t.once,o=e=!0;b.length;c=-1)for(n=b.shift();++c-1;)M.splice(n,1),n<=c&&c--})),this},has:function(t){return t?g.inArray(t,M)>-1:M.length>0},empty:function(){return M&&(M=[]),this},disable:function(){return p=b=[],M=n="",this},disabled:function(){return!M},lock:function(){return p=b=[],n||e||(M=n=""),this},locked:function(){return!!p},fireWith:function(t,n){return p||(n=[t,(n=n||[]).slice?n.slice():n],b.push(n),e||r()),this},fire:function(){return z.fireWith(this,arguments),this},fired:function(){return!!o}};return z},g.extend({Deferred:function(t){var e=[["notify","progress",g.Callbacks("memory"),g.Callbacks("memory"),2],["resolve","done",g.Callbacks("once memory"),g.Callbacks("once memory"),0,"resolved"],["reject","fail",g.Callbacks("once memory"),g.Callbacks("once memory"),1,"rejected"]],n="pending",p={state:function(){return n},always:function(){return M.done(arguments).fail(arguments),this},catch:function(t){return p.then(null,t)},pipe:function(){var t=arguments;return g.Deferred((function(n){g.each(e,(function(e,o){var p=d(t[o[4]])&&t[o[4]];M[o[1]]((function(){var t=p&&p.apply(this,arguments);t&&d(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this,p?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,p){var M=0;function b(t,e,n,p){return function(){var c=this,r=arguments,z=function(){var o,z;if(!(t=M&&(n!==V&&(c=void 0,r=[o]),e.rejectWith(c,r))}};t?a():(g.Deferred.getErrorHook?a.error=g.Deferred.getErrorHook():g.Deferred.getStackHook&&(a.error=g.Deferred.getStackHook()),o.setTimeout(a))}}return g.Deferred((function(o){e[0][3].add(b(0,o,d(p)?p:$,o.notifyWith)),e[1][3].add(b(0,o,d(t)?t:$)),e[2][3].add(b(0,o,d(n)?n:V))})).promise()},promise:function(t){return null!=t?g.extend(t,p):p}},M={};return g.each(e,(function(t,o){var b=o[2],c=o[5];p[o[1]]=b.add,c&&b.add((function(){n=c}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),b.add(o[3].fire),M[o[0]]=function(){return M[o[0]+"With"](this===M?void 0:this,arguments),this},M[o[0]+"With"]=b.fireWith})),p.promise(M),t&&t.call(M,M),M},when:function(t){var e=arguments.length,n=e,o=Array(n),p=c.call(arguments),M=g.Deferred(),b=function(t){return function(n){o[t]=this,p[t]=arguments.length>1?c.call(arguments):n,--e||M.resolveWith(o,p)}};if(e<=1&&(K(t,M.done(b(n)).resolve,M.reject,!e),"pending"===M.state()||d(p[n]&&p[n].then)))return M.then();for(;n--;)K(p[n],b(n),M.reject);return M.promise()}});var Z=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;g.Deferred.exceptionHook=function(t,e){o.console&&o.console.warn&&t&&Z.test(t.name)&&o.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},g.readyException=function(t){o.setTimeout((function(){throw t}))};var Q=g.Deferred();function J(){q.removeEventListener("DOMContentLoaded",J),o.removeEventListener("load",J),g.ready()}g.fn.ready=function(t){return Q.then(t).catch((function(t){g.readyException(t)})),this},g.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--g.readyWait:g.isReady)||(g.isReady=!0,!0!==t&&--g.readyWait>0||Q.resolveWith(q,[g]))}}),g.ready.then=Q.then,"complete"===q.readyState||"loading"!==q.readyState&&!q.documentElement.doScroll?o.setTimeout(g.ready):(q.addEventListener("DOMContentLoaded",J),o.addEventListener("load",J));var tt=function(t,e,n,o,p,M,b){var c=0,r=t.length,z=null==n;if("object"===v(n))for(c in p=!0,n)tt(t,e,c,n[c],!0,M,b);else if(void 0!==o&&(p=!0,d(o)||(b=!0),z&&(b?(e.call(t,o),e=null):(z=e,e=function(t,e,n){return z.call(g(t),n)})),e))for(;c1,null,!0)},removeData:function(t){return this.each((function(){rt.remove(this,t)}))}}),g.extend({queue:function(t,e,n){var o;if(t)return e=(e||"fx")+"queue",o=ct.get(t,e),n&&(!o||Array.isArray(n)?o=ct.access(t,e,g.makeArray(n)):o.push(n)),o||[]},dequeue:function(t,e){e=e||"fx";var n=g.queue(t,e),o=n.length,p=n.shift(),M=g._queueHooks(t,e);"inprogress"===p&&(p=n.shift(),o--),p&&("fx"===e&&n.unshift("inprogress"),delete M.stop,p.call(t,(function(){g.dequeue(t,e)}),M)),!o&&M&&M.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return ct.get(t,n)||ct.access(t,n,{empty:g.Callbacks("once memory").add((function(){ct.remove(t,[e+"queue",n])}))})}}),g.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length\x20\t\r\n\f]*)/i,yt=/^$|^module$|\/(?:java|ecma)script/i;Rt=q.createDocumentFragment().appendChild(q.createElement("div")),(mt=q.createElement("input")).setAttribute("type","radio"),mt.setAttribute("checked","checked"),mt.setAttribute("name","t"),Rt.appendChild(mt),l.checkClone=Rt.cloneNode(!0).cloneNode(!0).lastChild.checked,Rt.innerHTML="",l.noCloneChecked=!!Rt.cloneNode(!0).lastChild.defaultValue,Rt.innerHTML="",l.option=!!Rt.lastChild;var _t={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Nt(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&y(t,e)?g.merge([t],n):n}function Et(t,e){for(var n=0,o=t.length;n",""]);var Tt=/<|&#?\w+;/;function Bt(t,e,n,o,p){for(var M,b,c,r,z,a,i=e.createDocumentFragment(),O=[],s=0,A=t.length;s-1)p&&p.push(M);else if(z=lt(M),b=Nt(i.appendChild(M),"script"),z&&Et(b),n)for(a=0;M=b[a++];)yt.test(M.type||"")&&n.push(M);return i}var Ct=/^([^.]*)(?:\.(.+)|)/;function wt(){return!0}function St(){return!1}function Xt(t,e,n,o,p,M){var b,c;if("object"==typeof e){for(c in"string"!=typeof n&&(o=o||n,n=void 0),e)Xt(t,c,n,o,e[c],M);return t}if(null==o&&null==p?(p=n,o=n=void 0):null==p&&("string"==typeof n?(p=o,o=void 0):(p=o,o=n,n=void 0)),!1===p)p=St;else if(!p)return t;return 1===M&&(b=p,p=function(t){return g().off(t),b.apply(this,arguments)},p.guid=b.guid||(b.guid=g.guid++)),t.each((function(){g.event.add(this,e,p,o,n)}))}function xt(t,e,n){n?(ct.set(t,e,!1),g.event.add(t,e,{namespace:!1,handler:function(t){var n,o=ct.get(this,e);if(1&t.isTrigger&&this[e]){if(o)(g.event.special[e]||{}).delegateType&&t.stopPropagation();else if(o=c.call(arguments),ct.set(this,e,o),this[e](),n=ct.get(this,e),ct.set(this,e,!1),o!==n)return t.stopImmediatePropagation(),t.preventDefault(),n}else o&&(ct.set(this,e,g.event.trigger(o[0],o.slice(1),this)),t.stopPropagation(),t.isImmediatePropagationStopped=wt)}})):void 0===ct.get(t,e)&&g.event.add(t,e,wt)}g.event={global:{},add:function(t,e,n,o,p){var M,b,c,r,z,a,i,O,s,A,u,l=ct.get(t);if(Mt(t))for(n.handler&&(n=(M=n).handler,p=M.selector),p&&g.find.matchesSelector(ut,p),n.guid||(n.guid=g.guid++),(r=l.events)||(r=l.events=Object.create(null)),(b=l.handle)||(b=l.handle=function(e){return void 0!==g&&g.event.triggered!==e.type?g.event.dispatch.apply(t,arguments):void 0}),z=(e=(e||"").match(Y)||[""]).length;z--;)s=u=(c=Ct.exec(e[z])||[])[1],A=(c[2]||"").split(".").sort(),s&&(i=g.event.special[s]||{},s=(p?i.delegateType:i.bindType)||s,i=g.event.special[s]||{},a=g.extend({type:s,origType:u,data:o,handler:n,guid:n.guid,selector:p,needsContext:p&&g.expr.match.needsContext.test(p),namespace:A.join(".")},M),(O=r[s])||((O=r[s]=[]).delegateCount=0,i.setup&&!1!==i.setup.call(t,o,A,b)||t.addEventListener&&t.addEventListener(s,b)),i.add&&(i.add.call(t,a),a.handler.guid||(a.handler.guid=n.guid)),p?O.splice(O.delegateCount++,0,a):O.push(a),g.event.global[s]=!0)},remove:function(t,e,n,o,p){var M,b,c,r,z,a,i,O,s,A,u,l=ct.hasData(t)&&ct.get(t);if(l&&(r=l.events)){for(z=(e=(e||"").match(Y)||[""]).length;z--;)if(s=u=(c=Ct.exec(e[z])||[])[1],A=(c[2]||"").split(".").sort(),s){for(i=g.event.special[s]||{},O=r[s=(o?i.delegateType:i.bindType)||s]||[],c=c[2]&&new RegExp("(^|\\.)"+A.join("\\.(?:.*\\.|)")+"(\\.|$)"),b=M=O.length;M--;)a=O[M],!p&&u!==a.origType||n&&n.guid!==a.guid||c&&!c.test(a.namespace)||o&&o!==a.selector&&("**"!==o||!a.selector)||(O.splice(M,1),a.selector&&O.delegateCount--,i.remove&&i.remove.call(t,a));b&&!O.length&&(i.teardown&&!1!==i.teardown.call(t,A,l.handle)||g.removeEvent(t,s,l.handle),delete r[s])}else for(s in r)g.event.remove(t,s+e[z],n,o,!0);g.isEmptyObject(r)&&ct.remove(t,"handle events")}},dispatch:function(t){var e,n,o,p,M,b,c=new Array(arguments.length),r=g.event.fix(t),z=(ct.get(this,"events")||Object.create(null))[r.type]||[],a=g.event.special[r.type]||{};for(c[0]=r,e=1;e=1))for(;z!==this;z=z.parentNode||this)if(1===z.nodeType&&("click"!==t.type||!0!==z.disabled)){for(M=[],b={},n=0;n-1:g.find(p,this,null,[z]).length),b[p]&&M.push(o);M.length&&c.push({elem:z,handlers:M})}return z=this,r\s*$/g;function Pt(t,e){return y(t,"table")&&y(11!==e.nodeType?e:e.firstChild,"tr")&&g(t).children("tbody")[0]||t}function Ut(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function jt(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function Ft(t,e){var n,o,p,M,b,c;if(1===e.nodeType){if(ct.hasData(t)&&(c=ct.get(t).events))for(p in ct.remove(e,"handle events"),c)for(n=0,o=c[p].length;n1&&"string"==typeof A&&!l.checkClone&&It.test(A))return t.each((function(p){var M=t.eq(p);u&&(e[0]=A.call(this,p,M.html())),Gt(M,e,n,o)}));if(O&&(M=(p=Bt(e,t[0].ownerDocument,!1,t,o)).firstChild,1===p.childNodes.length&&(p=M),M||o)){for(c=(b=g.map(Nt(p,"script"),Ut)).length;i0&&Et(b,!r&&Nt(t,"script")),c},cleanData:function(t){for(var e,n,o,p=g.event.special,M=0;void 0!==(n=t[M]);M++)if(Mt(n)){if(e=n[ct.expando]){if(e.events)for(o in e.events)p[o]?g.event.remove(n,o):g.removeEvent(n,o,e.handle);n[ct.expando]=void 0}n[rt.expando]&&(n[rt.expando]=void 0)}}}),g.fn.extend({detach:function(t){return Yt(this,t,!0)},remove:function(t){return Yt(this,t)},text:function(t){return tt(this,(function(t){return void 0===t?g.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Gt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Pt(this,t).appendChild(t)}))},prepend:function(){return Gt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Pt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Gt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Gt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(g.cleanData(Nt(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return g.clone(this,t,e)}))},html:function(t){return tt(this,(function(t){var e=this[0]||{},n=0,o=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!kt.test(t)&&!_t[(Lt.exec(t)||["",""])[1].toLowerCase()]){t=g.htmlPrefilter(t);try{for(;n=0&&(r+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-M-r-c-.5))||0),r+z}function ae(t,e,n){var o=Kt(t),p=(!l.boxSizingReliable()||n)&&"border-box"===g.css(t,"boxSizing",!1,o),M=p,b=Jt(t,e,o),c="offset"+e[0].toUpperCase()+e.slice(1);if($t.test(b)){if(!n)return b;b="auto"}return(!l.boxSizingReliable()&&p||!l.reliableTrDimensions()&&y(t,"tr")||"auto"===b||!parseFloat(b)&&"inline"===g.css(t,"display",!1,o))&&t.getClientRects().length&&(p="border-box"===g.css(t,"boxSizing",!1,o),(M=c in t)&&(b=t[c])),(b=parseFloat(b)||0)+ze(t,e,n||(p?"border":"content"),M,o,b)+"px"}function ie(t,e,n,o,p){return new ie.prototype.init(t,e,n,o,p)}g.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Jt(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(t,e,n,o){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var p,M,b,c=pt(e),r=Vt.test(e),z=t.style;if(r||(e=pe(c)),b=g.cssHooks[e]||g.cssHooks[c],void 0===n)return b&&"get"in b&&void 0!==(p=b.get(t,!1,o))?p:z[e];"string"===(M=typeof n)&&(p=st.exec(n))&&p[1]&&(n=qt(t,e,p),M="number"),null!=n&&n==n&&("number"!==M||r||(n+=p&&p[3]||(g.cssNumber[c]?"":"px")),l.clearCloneStyle||""!==n||0!==e.indexOf("background")||(z[e]="inherit"),b&&"set"in b&&void 0===(n=b.set(t,n,o))||(r?z.setProperty(e,n):z[e]=n))}},css:function(t,e,n,o){var p,M,b,c=pt(e);return Vt.test(e)||(e=pe(c)),(b=g.cssHooks[e]||g.cssHooks[c])&&"get"in b&&(p=b.get(t,!0,n)),void 0===p&&(p=Jt(t,e,o)),"normal"===p&&e in ce&&(p=ce[e]),""===n||n?(M=parseFloat(p),!0===n||isFinite(M)?M||0:p):p}}),g.each(["height","width"],(function(t,e){g.cssHooks[e]={get:function(t,n,o){if(n)return!Me.test(g.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?ae(t,e,o):Zt(t,be,(function(){return ae(t,e,o)}))},set:function(t,n,o){var p,M=Kt(t),b=!l.scrollboxSize()&&"absolute"===M.position,c=(b||o)&&"border-box"===g.css(t,"boxSizing",!1,M),r=o?ze(t,e,o,c,M):0;return c&&b&&(r-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(M[e])-ze(t,e,"border",!1,M)-.5)),r&&(p=st.exec(n))&&"px"!==(p[3]||"px")&&(t.style[e]=n,n=g.css(t,e)),re(0,n,r)}}})),g.cssHooks.marginLeft=te(l.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Jt(t,"marginLeft"))||t.getBoundingClientRect().left-Zt(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px"})),g.each({margin:"",padding:"",border:"Width"},(function(t,e){g.cssHooks[t+e]={expand:function(n){for(var o=0,p={},M="string"==typeof n?n.split(" "):[n];o<4;o++)p[t+At[o]+e]=M[o]||M[o-2]||M[0];return p}},"margin"!==t&&(g.cssHooks[t+e].set=re)})),g.fn.extend({css:function(t,e){return tt(this,(function(t,e,n){var o,p,M={},b=0;if(Array.isArray(e)){for(o=Kt(t),p=e.length;b1)}}),g.Tween=ie,ie.prototype={constructor:ie,init:function(t,e,n,o,p,M){this.elem=t,this.prop=n,this.easing=p||g.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=o,this.unit=M||(g.cssNumber[n]?"":"px")},cur:function(){var t=ie.propHooks[this.prop];return t&&t.get?t.get(this):ie.propHooks._default.get(this)},run:function(t){var e,n=ie.propHooks[this.prop];return this.options.duration?this.pos=e=g.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):ie.propHooks._default.set(this),this}},ie.prototype.init.prototype=ie.prototype,ie.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=g.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){g.fx.step[t.prop]?g.fx.step[t.prop](t):1!==t.elem.nodeType||!g.cssHooks[t.prop]&&null==t.elem.style[pe(t.prop)]?t.elem[t.prop]=t.now:g.style(t.elem,t.prop,t.now+t.unit)}}},ie.propHooks.scrollTop=ie.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},g.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},g.fx=ie.prototype.init,g.fx.step={};var Oe,se,Ae=/^(?:toggle|show|hide)$/,ue=/queueHooks$/;function le(){se&&(!1===q.hidden&&o.requestAnimationFrame?o.requestAnimationFrame(le):o.setTimeout(le,g.fx.interval),g.fx.tick())}function de(){return o.setTimeout((function(){Oe=void 0})),Oe=Date.now()}function fe(t,e){var n,o=0,p={height:t};for(e=e?1:0;o<4;o+=2-e)p["margin"+(n=At[o])]=p["padding"+n]=t;return e&&(p.opacity=p.width=t),p}function qe(t,e,n){for(var o,p=(he.tweeners[e]||[]).concat(he.tweeners["*"]),M=0,b=p.length;M1)},removeAttr:function(t){return this.each((function(){g.removeAttr(this,t)}))}}),g.extend({attr:function(t,e,n){var o,p,M=t.nodeType;if(3!==M&&8!==M&&2!==M)return void 0===t.getAttribute?g.prop(t,e,n):(1===M&&g.isXMLDoc(t)||(p=g.attrHooks[e.toLowerCase()]||(g.expr.match.bool.test(e)?We:void 0)),void 0!==n?null===n?void g.removeAttr(t,e):p&&"set"in p&&void 0!==(o=p.set(t,n,e))?o:(t.setAttribute(e,n+""),n):p&&"get"in p&&null!==(o=p.get(t,e))?o:null==(o=g.find.attr(t,e))?void 0:o)},attrHooks:{type:{set:function(t,e){if(!l.radioValue&&"radio"===e&&y(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,o=0,p=e&&e.match(Y);if(p&&1===t.nodeType)for(;n=p[o++];)t.removeAttribute(n)}}),We={set:function(t,e,n){return!1===e?g.removeAttr(t,n):t.setAttribute(n,n),n}},g.each(g.expr.match.bool.source.match(/\w+/g),(function(t,e){var n=ve[e]||g.find.attr;ve[e]=function(t,e,o){var p,M,b=e.toLowerCase();return o||(M=ve[b],ve[b]=p,p=null!=n(t,e,o)?b:null,ve[b]=M),p}}));var Re=/^(?:input|select|textarea|button)$/i,me=/^(?:a|area)$/i;function ge(t){return(t.match(Y)||[]).join(" ")}function Le(t){return t.getAttribute&&t.getAttribute("class")||""}function ye(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(Y)||[]}g.fn.extend({prop:function(t,e){return tt(this,g.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[g.propFix[t]||t]}))}}),g.extend({prop:function(t,e,n){var o,p,M=t.nodeType;if(3!==M&&8!==M&&2!==M)return 1===M&&g.isXMLDoc(t)||(e=g.propFix[e]||e,p=g.propHooks[e]),void 0!==n?p&&"set"in p&&void 0!==(o=p.set(t,n,e))?o:t[e]=n:p&&"get"in p&&null!==(o=p.get(t,e))?o:t[e]},propHooks:{tabIndex:{get:function(t){var e=g.find.attr(t,"tabindex");return e?parseInt(e,10):Re.test(t.nodeName)||me.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),l.optSelected||(g.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),g.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){g.propFix[this.toLowerCase()]=this})),g.fn.extend({addClass:function(t){var e,n,o,p,M,b;return d(t)?this.each((function(e){g(this).addClass(t.call(this,e,Le(this)))})):(e=ye(t)).length?this.each((function(){if(o=Le(this),n=1===this.nodeType&&" "+ge(o)+" "){for(M=0;M-1;)n=n.replace(" "+p+" "," ");b=ge(n),o!==b&&this.setAttribute("class",b)}})):this:this.attr("class","")},toggleClass:function(t,e){var n,o,p,M,b=typeof t,c="string"===b||Array.isArray(t);return d(t)?this.each((function(n){g(this).toggleClass(t.call(this,n,Le(this),e),e)})):"boolean"==typeof e&&c?e?this.addClass(t):this.removeClass(t):(n=ye(t),this.each((function(){if(c)for(M=g(this),p=0;p-1)return!0;return!1}});var _e=/\r/g;g.fn.extend({val:function(t){var e,n,o,p=this[0];return arguments.length?(o=d(t),this.each((function(n){var p;1===this.nodeType&&(null==(p=o?t.call(this,n,g(this).val()):t)?p="":"number"==typeof p?p+="":Array.isArray(p)&&(p=g.map(p,(function(t){return null==t?"":t+""}))),(e=g.valHooks[this.type]||g.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,p,"value")||(this.value=p))}))):p?(e=g.valHooks[p.type]||g.valHooks[p.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(p,"value"))?n:"string"==typeof(n=p.value)?n.replace(_e,""):null==n?"":n:void 0}}),g.extend({valHooks:{option:{get:function(t){var e=g.find.attr(t,"value");return null!=e?e:ge(g.text(t))}},select:{get:function(t){var e,n,o,p=t.options,M=t.selectedIndex,b="select-one"===t.type,c=b?null:[],r=b?M+1:p.length;for(o=M<0?r:b?M:0;o-1)&&(n=!0);return n||(t.selectedIndex=-1),M}}}}),g.each(["radio","checkbox"],(function(){g.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=g.inArray(g(t).val(),e)>-1}},l.checkOn||(g.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}));var Ne=o.location,Ee={guid:Date.now()},Te=/\?/;g.parseXML=function(t){var e,n;if(!t||"string"!=typeof t)return null;try{e=(new o.DOMParser).parseFromString(t,"text/xml")}catch(t){}return n=e&&e.getElementsByTagName("parsererror")[0],e&&!n||g.error("Invalid XML: "+(n?g.map(n.childNodes,(function(t){return t.textContent})).join("\n"):t)),e};var Be=/^(?:focusinfocus|focusoutblur)$/,Ce=function(t){t.stopPropagation()};g.extend(g.event,{trigger:function(t,e,n,p){var M,b,c,r,z,a,i,O,A=[n||q],u=s.call(t,"type")?t.type:t,l=s.call(t,"namespace")?t.namespace.split("."):[];if(b=O=c=n=n||q,3!==n.nodeType&&8!==n.nodeType&&!Be.test(u+g.event.triggered)&&(u.indexOf(".")>-1&&(l=u.split("."),u=l.shift(),l.sort()),z=u.indexOf(":")<0&&"on"+u,(t=t[g.expando]?t:new g.Event(u,"object"==typeof t&&t)).isTrigger=p?2:3,t.namespace=l.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+l.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:g.makeArray(e,[t]),i=g.event.special[u]||{},p||!i.trigger||!1!==i.trigger.apply(n,e))){if(!p&&!i.noBubble&&!f(n)){for(r=i.delegateType||u,Be.test(r+u)||(b=b.parentNode);b;b=b.parentNode)A.push(b),c=b;c===(n.ownerDocument||q)&&A.push(c.defaultView||c.parentWindow||o)}for(M=0;(b=A[M++])&&!t.isPropagationStopped();)O=b,t.type=M>1?r:i.bindType||u,(a=(ct.get(b,"events")||Object.create(null))[t.type]&&ct.get(b,"handle"))&&a.apply(b,e),(a=z&&b[z])&&a.apply&&Mt(b)&&(t.result=a.apply(b,e),!1===t.result&&t.preventDefault());return t.type=u,p||t.isDefaultPrevented()||i._default&&!1!==i._default.apply(A.pop(),e)||!Mt(n)||z&&d(n[u])&&!f(n)&&((c=n[z])&&(n[z]=null),g.event.triggered=u,t.isPropagationStopped()&&O.addEventListener(u,Ce),n[u](),t.isPropagationStopped()&&O.removeEventListener(u,Ce),g.event.triggered=void 0,c&&(n[z]=c)),t.result}},simulate:function(t,e,n){var o=g.extend(new g.Event,n,{type:t,isSimulated:!0});g.event.trigger(o,null,e)}}),g.fn.extend({trigger:function(t,e){return this.each((function(){g.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return g.event.trigger(t,e,n,!0)}});var we=/\[\]$/,Se=/\r?\n/g,Xe=/^(?:submit|button|image|reset|file)$/i,xe=/^(?:input|select|textarea|keygen)/i;function ke(t,e,n,o){var p;if(Array.isArray(e))g.each(e,(function(e,p){n||we.test(t)?o(t,p):ke(t+"["+("object"==typeof p&&null!=p?e:"")+"]",p,n,o)}));else if(n||"object"!==v(e))o(t,e);else for(p in e)ke(t+"["+p+"]",e[p],n,o)}g.param=function(t,e){var n,o=[],p=function(t,e){var n=d(e)?e():e;o[o.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!g.isPlainObject(t))g.each(t,(function(){p(this.name,this.value)}));else for(n in t)ke(n,t[n],e,p);return o.join("&")},g.fn.extend({serialize:function(){return g.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=g.prop(this,"elements");return t?g.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!g(this).is(":disabled")&&xe.test(this.nodeName)&&!Xe.test(t)&&(this.checked||!gt.test(t))})).map((function(t,e){var n=g(this).val();return null==n?null:Array.isArray(n)?g.map(n,(function(t){return{name:e.name,value:t.replace(Se,"\r\n")}})):{name:e.name,value:n.replace(Se,"\r\n")}})).get()}});var Ie=/%20/g,De=/#.*$/,Pe=/([?&])_=[^&]*/,Ue=/^(.*?):[ \t]*([^\r\n]*)$/gm,je=/^(?:GET|HEAD)$/,Fe=/^\/\//,He={},Ge={},Ye="*/".concat("*"),$e=q.createElement("a");function Ve(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var o,p=0,M=e.toLowerCase().match(Y)||[];if(d(n))for(;o=M[p++];)"+"===o[0]?(o=o.slice(1)||"*",(t[o]=t[o]||[]).unshift(n)):(t[o]=t[o]||[]).push(n)}}function Ke(t,e,n,o){var p={},M=t===Ge;function b(c){var r;return p[c]=!0,g.each(t[c]||[],(function(t,c){var z=c(e,n,o);return"string"!=typeof z||M||p[z]?M?!(r=z):void 0:(e.dataTypes.unshift(z),b(z),!1)})),r}return b(e.dataTypes[0])||!p["*"]&&b("*")}function Ze(t,e){var n,o,p=g.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((p[n]?t:o||(o={}))[n]=e[n]);return o&&g.extend(!0,t,o),t}$e.href=Ne.href,g.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ne.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ne.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ye,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":g.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Ze(Ze(t,g.ajaxSettings),e):Ze(g.ajaxSettings,t)},ajaxPrefilter:Ve(He),ajaxTransport:Ve(Ge),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,p,M,b,c,r,z,a,i,O,s=g.ajaxSetup({},e),A=s.context||s,u=s.context&&(A.nodeType||A.jquery)?g(A):g.event,l=g.Deferred(),d=g.Callbacks("once memory"),f=s.statusCode||{},h={},W={},v="canceled",R={readyState:0,getResponseHeader:function(t){var e;if(z){if(!b)for(b={};e=Ue.exec(M);)b[e[1].toLowerCase()+" "]=(b[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=b[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return z?M:null},setRequestHeader:function(t,e){return null==z&&(t=W[t.toLowerCase()]=W[t.toLowerCase()]||t,h[t]=e),this},overrideMimeType:function(t){return null==z&&(s.mimeType=t),this},statusCode:function(t){var e;if(t)if(z)R.always(t[R.status]);else for(e in t)f[e]=[f[e],t[e]];return this},abort:function(t){var e=t||v;return n&&n.abort(e),m(0,e),this}};if(l.promise(R),s.url=((t||s.url||Ne.href)+"").replace(Fe,Ne.protocol+"//"),s.type=e.method||e.type||s.method||s.type,s.dataTypes=(s.dataType||"*").toLowerCase().match(Y)||[""],null==s.crossDomain){r=q.createElement("a");try{r.href=s.url,r.href=r.href,s.crossDomain=$e.protocol+"//"+$e.host!=r.protocol+"//"+r.host}catch(t){s.crossDomain=!0}}if(s.data&&s.processData&&"string"!=typeof s.data&&(s.data=g.param(s.data,s.traditional)),Ke(He,s,e,R),z)return R;for(i in(a=g.event&&s.global)&&0==g.active++&&g.event.trigger("ajaxStart"),s.type=s.type.toUpperCase(),s.hasContent=!je.test(s.type),p=s.url.replace(De,""),s.hasContent?s.data&&s.processData&&0===(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&(s.data=s.data.replace(Ie,"+")):(O=s.url.slice(p.length),s.data&&(s.processData||"string"==typeof s.data)&&(p+=(Te.test(p)?"&":"?")+s.data,delete s.data),!1===s.cache&&(p=p.replace(Pe,"$1"),O=(Te.test(p)?"&":"?")+"_="+Ee.guid+++O),s.url=p+O),s.ifModified&&(g.lastModified[p]&&R.setRequestHeader("If-Modified-Since",g.lastModified[p]),g.etag[p]&&R.setRequestHeader("If-None-Match",g.etag[p])),(s.data&&s.hasContent&&!1!==s.contentType||e.contentType)&&R.setRequestHeader("Content-Type",s.contentType),R.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+("*"!==s.dataTypes[0]?", "+Ye+"; q=0.01":""):s.accepts["*"]),s.headers)R.setRequestHeader(i,s.headers[i]);if(s.beforeSend&&(!1===s.beforeSend.call(A,R,s)||z))return R.abort();if(v="abort",d.add(s.complete),R.done(s.success),R.fail(s.error),n=Ke(Ge,s,e,R)){if(R.readyState=1,a&&u.trigger("ajaxSend",[R,s]),z)return R;s.async&&s.timeout>0&&(c=o.setTimeout((function(){R.abort("timeout")}),s.timeout));try{z=!1,n.send(h,m)}catch(t){if(z)throw t;m(-1,t)}}else m(-1,"No Transport");function m(t,e,b,r){var i,O,q,h,W,v=e;z||(z=!0,c&&o.clearTimeout(c),n=void 0,M=r||"",R.readyState=t>0?4:0,i=t>=200&&t<300||304===t,b&&(h=function(t,e,n){for(var o,p,M,b,c=t.contents,r=t.dataTypes;"*"===r[0];)r.shift(),void 0===o&&(o=t.mimeType||e.getResponseHeader("Content-Type"));if(o)for(p in c)if(c[p]&&c[p].test(o)){r.unshift(p);break}if(r[0]in n)M=r[0];else{for(p in n){if(!r[0]||t.converters[p+" "+r[0]]){M=p;break}b||(b=p)}M=M||b}if(M)return M!==r[0]&&r.unshift(M),n[M]}(s,R,b)),!i&&g.inArray("script",s.dataTypes)>-1&&g.inArray("json",s.dataTypes)<0&&(s.converters["text script"]=function(){}),h=function(t,e,n,o){var p,M,b,c,r,z={},a=t.dataTypes.slice();if(a[1])for(b in t.converters)z[b.toLowerCase()]=t.converters[b];for(M=a.shift();M;)if(t.responseFields[M]&&(n[t.responseFields[M]]=e),!r&&o&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),r=M,M=a.shift())if("*"===M)M=r;else if("*"!==r&&r!==M){if(!(b=z[r+" "+M]||z["* "+M]))for(p in z)if((c=p.split(" "))[1]===M&&(b=z[r+" "+c[0]]||z["* "+c[0]])){!0===b?b=z[p]:!0!==z[p]&&(M=c[0],a.unshift(c[1]));break}if(!0!==b)if(b&&t.throws)e=b(e);else try{e=b(e)}catch(t){return{state:"parsererror",error:b?t:"No conversion from "+r+" to "+M}}}return{state:"success",data:e}}(s,h,R,i),i?(s.ifModified&&((W=R.getResponseHeader("Last-Modified"))&&(g.lastModified[p]=W),(W=R.getResponseHeader("etag"))&&(g.etag[p]=W)),204===t||"HEAD"===s.type?v="nocontent":304===t?v="notmodified":(v=h.state,O=h.data,i=!(q=h.error))):(q=v,!t&&v||(v="error",t<0&&(t=0))),R.status=t,R.statusText=(e||v)+"",i?l.resolveWith(A,[O,v,R]):l.rejectWith(A,[R,v,q]),R.statusCode(f),f=void 0,a&&u.trigger(i?"ajaxSuccess":"ajaxError",[R,s,i?O:q]),d.fireWith(A,[R,v]),a&&(u.trigger("ajaxComplete",[R,s]),--g.active||g.event.trigger("ajaxStop")))}return R},getJSON:function(t,e,n){return g.get(t,e,n,"json")},getScript:function(t,e){return g.get(t,void 0,e,"script")}}),g.each(["get","post"],(function(t,e){g[e]=function(t,n,o,p){return d(n)&&(p=p||o,o=n,n=void 0),g.ajax(g.extend({url:t,type:e,dataType:p,data:n,success:o},g.isPlainObject(t)&&t))}})),g.ajaxPrefilter((function(t){var e;for(e in t.headers)"content-type"===e.toLowerCase()&&(t.contentType=t.headers[e]||"")})),g._evalUrl=function(t,e,n){return g.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){g.globalEval(t,e,n)}})},g.fn.extend({wrapAll:function(t){var e;return this[0]&&(d(t)&&(t=t.call(this[0])),e=g(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return d(t)?this.each((function(e){g(this).wrapInner(t.call(this,e))})):this.each((function(){var e=g(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=d(t);return this.each((function(n){g(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not("body").each((function(){g(this).replaceWith(this.childNodes)})),this}}),g.expr.pseudos.hidden=function(t){return!g.expr.pseudos.visible(t)},g.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},g.ajaxSettings.xhr=function(){try{return new o.XMLHttpRequest}catch(t){}};var Qe={0:200,1223:204},Je=g.ajaxSettings.xhr();l.cors=!!Je&&"withCredentials"in Je,l.ajax=Je=!!Je,g.ajaxTransport((function(t){var e,n;if(l.cors||Je&&!t.crossDomain)return{send:function(p,M){var b,c=t.xhr();if(c.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(b in t.xhrFields)c[b]=t.xhrFields[b];for(b in t.mimeType&&c.overrideMimeType&&c.overrideMimeType(t.mimeType),t.crossDomain||p["X-Requested-With"]||(p["X-Requested-With"]="XMLHttpRequest"),p)c.setRequestHeader(b,p[b]);e=function(t){return function(){e&&(e=n=c.onload=c.onerror=c.onabort=c.ontimeout=c.onreadystatechange=null,"abort"===t?c.abort():"error"===t?"number"!=typeof c.status?M(0,"error"):M(c.status,c.statusText):M(Qe[c.status]||c.status,c.statusText,"text"!==(c.responseType||"text")||"string"!=typeof c.responseText?{binary:c.response}:{text:c.responseText},c.getAllResponseHeaders()))}},c.onload=e(),n=c.onerror=c.ontimeout=e("error"),void 0!==c.onabort?c.onabort=n:c.onreadystatechange=function(){4===c.readyState&&o.setTimeout((function(){e&&n()}))},e=e("abort");try{c.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}})),g.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),g.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return g.globalEval(t),t}}}),g.ajaxPrefilter("script",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")})),g.ajaxTransport("script",(function(t){var e,n;if(t.crossDomain||t.scriptAttrs)return{send:function(o,p){e=g("