diff --git a/.cspell/laravel.txt b/.cspell/laravel.txt index d3c29aeb0a..882c42157b 100644 --- a/.cspell/laravel.txt +++ b/.cspell/laravel.txt @@ -14,6 +14,7 @@ mysql ordoesnthave pgsql queueable +roundrobin sasl sslmode sqlite diff --git a/.env.example b/.env.example index a463709bb0..8ad0d4b6f2 100644 --- a/.env.example +++ b/.env.example @@ -33,7 +33,7 @@ MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_ENCRYPTION=null +MAIL_SCHEME=null MAIL_FROM_ADDRESS='support@unit3d.site' MAIL_FROM_NAME='UNIT3D Support' diff --git a/.gitignore b/.gitignore index 6c67c2adbe..1a8e2b4b81 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ /public/storage /public/vendor /storage/backups +/storage/pail /storage/debugbar /storage/gitupdate /storage/*.key @@ -29,6 +30,7 @@ laravel-echo-server.lock # IDEs /.idea +/.nova /.vscode /nbproject /.phpunit.cache diff --git a/app/Helpers/BackupEncryption.php b/app/Helpers/BackupEncryption.php deleted file mode 100644 index 09d2c62e31..0000000000 --- a/app/Helpers/BackupEncryption.php +++ /dev/null @@ -1,50 +0,0 @@ - - * @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 - */ - -namespace App\Helpers; - -use ZipArchive; - -class BackupEncryption -{ - /** - * Default encryption constants. - * - * @var int - */ - final public const ENCRYPTION_DEFAULT = ZipArchive::EM_AES_128; - - /** - * AES-128 encryption constants. - * - * @var int - */ - final public const ENCRYPTION_WINZIP_AES_128 = ZipArchive::EM_AES_128; - - /** - * AES-192 encryption constants. - * - * @var int - */ - final public const ENCRYPTION_WINZIP_AES_192 = ZipArchive::EM_AES_192; - - /** - * AES-256 encryption constants. - * - * @var int - */ - final public const ENCRYPTION_WINZIP_AES_256 = ZipArchive::EM_AES_256; -} diff --git a/app/Helpers/BackupPassword.php b/app/Helpers/BackupPassword.php deleted file mode 100644 index f1cb424b63..0000000000 --- a/app/Helpers/BackupPassword.php +++ /dev/null @@ -1,70 +0,0 @@ - - * @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 - */ - -namespace App\Helpers; - -use Illuminate\Support\Collection; -use ZipArchive; - -class BackupPassword -{ - /** - * Path to .zip-file. - */ - public ?string $path; - - /** - * The chosen password. - */ - protected string $password; - - /** - * Read the .zip, apply password and encryption, then rewrite the file. - */ - public function __construct(string $path) - { - $this->password = config('backup.security.password'); - - // If no password is set, just return the backup-path - if (!$this->password) { - return; - } - - consoleOutput()->info('Applying password and encryption to zip using ZipArchive...'); - - $this->makeZip($path); - - consoleOutput()->info('Successfully applied password and encryption to zip.'); - } - - /** - * Use native PHP ZipArchive. - */ - protected function makeZip(string $path): void - { - $encryption = config('backup.security.encryption'); - - $zipArchive = new ZipArchive(); - - $zipArchive->open($path, ZipArchive::OVERWRITE); - $zipArchive->addFile($path, 'backup.zip'); - $zipArchive->setPassword($this->password); - Collection::times($zipArchive->numFiles, fn ($i) => $zipArchive->setEncryptionIndex($i - 1, $encryption)); - $zipArchive->close(); - - $this->path = $path; - } -} diff --git a/app/Helpers/Markdown.php b/app/Helpers/Markdown.php deleted file mode 100644 index 4a197e0bac..0000000000 --- a/app/Helpers/Markdown.php +++ /dev/null @@ -1,1780 +0,0 @@ - - * @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 - * @credits Emanuil Rusev - */ - -namespace App\Helpers; - -class Markdown -{ - public function text($text) - { - $Elements = $this->textElements($text); - - // convert to markup - $markup = $this->elements($Elements); - - // trim line breaks - return trim((string) $markup, "\n"); - } - - protected function textElements($text) - { - // make sure no definitions are set - $this->DefinitionData = []; - - // standardize line breaks - $text = str_replace(["\r\n", "\r"], "\n", (string) $text); - - // remove surrounding line breaks - $text = trim($text, "\n"); - - // split text into lines - $lines = explode("\n", $text); - - // iterate through lines to identify blocks - return $this->linesElements($lines); - } - - // - // Setters - // - - public function setBreaksEnabled($breaksEnabled) - { - $this->breaksEnabled = $breaksEnabled; - - return $this; - } - - protected $breaksEnabled; - - public function setMarkupEscaped($markupEscaped) - { - $this->markupEscaped = $markupEscaped; - - return $this; - } - - protected $markupEscaped; - - public function setUrlsLinked($urlsLinked) - { - $this->urlsLinked = $urlsLinked; - - return $this; - } - - protected $urlsLinked = true; - - public function setSafeMode($safeMode) - { - $this->safeMode = (bool) $safeMode; - - return $this; - } - - protected $safeMode; - - public function setStrictMode($strictMode) - { - $this->strictMode = (bool) $strictMode; - - return $this; - } - - protected $strictMode; - - protected $safeLinksWhitelist = [ - 'http://', - 'https://', - 'ftp://', - 'ftps://', - 'mailto:', - 'tel:', - 'data:image/png;base64,', - 'data:image/gif;base64,', - 'data:image/jpeg;base64,', - 'irc:', - 'ircs:', - 'git:', - 'ssh:', - 'news:', - 'steam:', - ]; - - // - // Lines - // - - protected $BlockTypes = [ - '#' => ['Header'], - '*' => ['Rule', 'List'], - '+' => ['List'], - '-' => ['SetextHeader', 'Table', 'Rule', 'List'], - '0' => ['List'], - '1' => ['List'], - '2' => ['List'], - '3' => ['List'], - '4' => ['List'], - '5' => ['List'], - '6' => ['List'], - '7' => ['List'], - '8' => ['List'], - '9' => ['List'], - ':' => ['Table'], - '<' => ['Comment', 'Markup'], - '=' => ['SetextHeader'], - '>' => ['Quote'], - '[' => ['Reference'], - '_' => ['Rule'], - '`' => ['FencedCode'], - '|' => ['Table'], - '~' => ['FencedCode'], - ]; - - // ~ - - protected $unmarkedBlockTypes = [ - 'Code', - ]; - - // - // Blocks - // - - protected function lines(array $lines) - { - return $this->elements($this->linesElements($lines)); - } - - protected function linesElements(array $lines) - { - $Elements = []; - $CurrentBlock = null; - - foreach ($lines as $line) { - if (rtrim((string) $line) === '') { - if (isset($CurrentBlock)) { - $CurrentBlock['interrupted'] = ( - isset($CurrentBlock['interrupted']) - ? $CurrentBlock['interrupted'] + 1 : 1 - ); - } - - continue; - } - - while (($beforeTab = strstr((string) $line, "\t", true)) !== false) { - $shortage = 4 - mb_strlen($beforeTab, 'utf-8') % 4; - - $line = $beforeTab - .str_repeat(' ', $shortage) - .substr((string) $line, \strlen($beforeTab) + 1); - } - - $indent = strspn((string) $line, ' '); - - $text = $indent > 0 ? substr((string) $line, $indent) : $line; - - // ~ - - $Line = ['body' => $line, 'indent' => $indent, 'text' => $text]; - - // ~ - - if (isset($CurrentBlock['continuable'])) { - $methodName = 'block'.$CurrentBlock['type'].'Continue'; - $Block = $this->$methodName($Line, $CurrentBlock); - - if (isset($Block)) { - $CurrentBlock = $Block; - - continue; - } - - if ($this->isBlockCompletable($CurrentBlock['type'])) { - $methodName = 'block'.$CurrentBlock['type'].'Complete'; - $CurrentBlock = $this->$methodName($CurrentBlock); - } - } - - // ~ - - $marker = $text[0]; - - // ~ - - $blockTypes = $this->unmarkedBlockTypes; - - if (isset($this->BlockTypes[$marker])) { - foreach ($this->BlockTypes[$marker] as $blockType) { - $blockTypes[] = $blockType; - } - } - - // - // ~ - - foreach ($blockTypes as $blockType) { - $Block = $this->{\sprintf('block%s', $blockType)}($Line, $CurrentBlock); - - if (isset($Block)) { - $Block['type'] = $blockType; - - if (!isset($Block['identified'])) { - if (isset($CurrentBlock)) { - $Elements[] = $this->extractElement($CurrentBlock); - } - - $Block['identified'] = true; - } - - if ($this->isBlockContinuable($blockType)) { - $Block['continuable'] = true; - } - - $CurrentBlock = $Block; - - continue 2; - } - } - - // ~ - - if (isset($CurrentBlock) && $CurrentBlock['type'] === 'Paragraph') { - $Block = $this->paragraphContinue($Line, $CurrentBlock); - } - - if (isset($Block)) { - $CurrentBlock = $Block; - } else { - if (isset($CurrentBlock)) { - $Elements[] = $this->extractElement($CurrentBlock); - } - - $CurrentBlock = $this->paragraph($Line); - - $CurrentBlock['identified'] = true; - } - } - - // ~ - - if (isset($CurrentBlock['continuable']) && $this->isBlockCompletable($CurrentBlock['type'])) { - $methodName = 'block'.$CurrentBlock['type'].'Complete'; - $CurrentBlock = $this->$methodName($CurrentBlock); - } - - // ~ - - if (isset($CurrentBlock)) { - $Elements[] = $this->extractElement($CurrentBlock); - } - - // ~ - - return $Elements; - } - - protected function extractElement(array $Component) - { - if (!isset($Component['element'])) { - if (isset($Component['markup'])) { - $Component['element'] = ['rawHtml' => $Component['markup']]; - } elseif (isset($Component['hidden'])) { - $Component['element'] = []; - } - } - - return $Component['element']; - } - - protected function isBlockContinuable($Type) - { - return method_exists($this, 'block'.$Type.'Continue'); - } - - protected function isBlockCompletable($Type) - { - return method_exists($this, 'block'.$Type.'Complete'); - } - - // - // Code - - protected function blockCode($Line, $Block = null) - { - if (isset($Block) && $Block['type'] === 'Paragraph' && !isset($Block['interrupted'])) { - return; - } - - if ($Line['indent'] >= 4) { - $text = substr((string) $Line['body'], 4); - - return [ - 'element' => [ - 'name' => 'pre', - 'element' => [ - 'name' => 'code', - 'text' => $text, - ], - ], - ]; - } - } - - protected function blockCodeContinue($Line, $Block) - { - if ($Line['indent'] >= 4) { - if (isset($Block['interrupted'])) { - $Block['element']['element']['text'] .= str_repeat("\n", $Block['interrupted']); - - unset($Block['interrupted']); - } - - $Block['element']['element']['text'] .= "\n"; - - $text = substr((string) $Line['body'], 4); - - $Block['element']['element']['text'] .= $text; - - return $Block; - } - } - - protected function blockCodeComplete($Block) - { - return $Block; - } - - // - // Comment - - protected function blockComment($Line) - { - if ($this->markupEscaped || $this->safeMode) { - return; - } - - if (str_starts_with((string) $Line['text'], '')) { - $Block['closed'] = true; - } - - return $Block; - } - } - - protected function blockCommentContinue($Line, array $Block) - { - if (isset($Block['closed'])) { - return; - } - - $Block['element']['rawHtml'] .= "\n".$Line['body']; - - if (str_contains((string) $Line['text'], '-->')) { - $Block['closed'] = true; - } - - return $Block; - } - - // - // Fenced Code - - protected function blockFencedCode($Line) - { - $marker = $Line['text'][0]; - - $openerLength = strspn((string) $Line['text'], (string) $marker); - - if ($openerLength < 3) { - return; - } - - $infostring = trim(substr((string) $Line['text'], $openerLength), "\t "); - - if (str_contains($infostring, '`')) { - return; - } - - $Element = [ - 'name' => 'code', - 'text' => '', - ]; - - if ($infostring !== '') { - /** - * https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes - * Every HTML element may have a class attribute specified. - * The attribute, if specified, must have a value that is a set - * of space-separated tokens representing the various classes - * that the element belongs to. - * [...] - * The space characters, for the purposes of this specification, - * are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), - * U+000A LINE FEED (LF), U+000C FORM FEED (FF), and - * U+000D CARRIAGE RETURN (CR). - */ - $language = substr($infostring, 0, strcspn($infostring, " \t\n\f\r")); - - $Element['attributes'] = ['class' => \sprintf('language-%s', $language)]; - } - - return [ - 'char' => $marker, - 'openerLength' => $openerLength, - 'element' => [ - 'name' => 'pre', - 'element' => $Element, - ], - ]; - } - - protected function blockFencedCodeContinue($Line, $Block) - { - if (isset($Block['complete'])) { - return; - } - - if (isset($Block['interrupted'])) { - $Block['element']['element']['text'] .= str_repeat("\n", $Block['interrupted']); - - unset($Block['interrupted']); - } - - if (($len = strspn((string) $Line['text'], (string) $Block['char'])) >= $Block['openerLength'] && rtrim(substr((string) $Line['text'], $len), ' ') === '' - ) { - $Block['element']['element']['text'] = substr((string) $Block['element']['element']['text'], 1); - - $Block['complete'] = true; - - return $Block; - } - - $Block['element']['element']['text'] .= "\n".$Line['body']; - - return $Block; - } - - protected function blockFencedCodeComplete($Block) - { - return $Block; - } - - // - // Header - - protected function blockHeader($Line) - { - $level = strspn((string) $Line['text'], '#'); - - if ($level > 6) { - return; - } - - $text = trim((string) $Line['text'], '#'); - - if ($this->strictMode && isset($text[0]) && $text[0] !== ' ') { - return; - } - - $text = trim($text, ' '); - - return [ - 'element' => [ - 'name' => 'h'.$level, - 'handler' => [ - 'function' => 'lineElements', - 'argument' => $text, - 'destination' => 'elements', - ], - ], - ]; - } - - // - // List - - protected function blockList($Line, ?array $CurrentBlock = null) - { - [$name, $pattern] = $Line['text'][0] <= '-' ? ['ul', '[*+-]'] : ['ol', '[0-9]{1,9}+[.\)]']; - - if (preg_match('/^('.$pattern.'([ ]++|$))(.*+)/', (string) $Line['text'], $matches)) { - $contentIndent = \strlen((string) $matches[2]); - - if ($contentIndent >= 5) { - $contentIndent--; - $matches[1] = substr($matches[1], 0, -$contentIndent); - $matches[3] = str_repeat(' ', $contentIndent).$matches[3]; - } elseif ($contentIndent === 0) { - $matches[1] .= ' '; - } - - $markerWithoutWhitespace = strstr($matches[1], ' ', true); - - $Block = [ - 'indent' => $Line['indent'], - 'pattern' => $pattern, - 'data' => [ - 'type' => $name, - 'marker' => $matches[1], - 'markerType' => ($name === 'ul' ? $markerWithoutWhitespace : substr($markerWithoutWhitespace, -1)), - ], - 'element' => [ - 'name' => $name, - 'elements' => [], - ], - ]; - $Block['data']['markerTypeRegex'] = preg_quote($Block['data']['markerType'], '/'); - - if ($name === 'ol') { - $listStart = ltrim(strstr($matches[1], (string) $Block['data']['markerType'], true), '0') ?: '0'; - - if ($listStart !== '1') { - if ( - isset($CurrentBlock) && $CurrentBlock['type'] === 'Paragraph' && !isset($CurrentBlock['interrupted']) - ) { - return; - } - - $Block['element']['attributes'] = ['start' => $listStart]; - } - } - - $Block['li'] = [ - 'name' => 'li', - 'handler' => [ - 'function' => 'li', - 'argument' => empty($matches[3]) ? [] : [$matches[3]], - 'destination' => 'elements', - ], - ]; - - $Block['element']['elements'][] = &$Block['li']; - - return $Block; - } - } - - protected function blockListContinue($Line, array $Block) - { - $matches = []; - - if (isset($Block['interrupted']) && empty($Block['li']['handler']['argument'])) { - return; - } - - $requiredIndent = ($Block['indent'] + \strlen((string) $Block['data']['marker'])); - - if ($Line['indent'] < $requiredIndent && ($Block['data']['type'] === 'ol' && preg_match('/^[0-9]++'.$Block['data']['markerTypeRegex'].'(?:[ ]++(.*)|$)/', (string) $Line['text'], $matches) || $Block['data']['type'] === 'ul' && preg_match('/^'.$Block['data']['markerTypeRegex'].'(?:[ ]++(.*)|$)/', (string) $Line['text'], $matches))) { - if (isset($Block['interrupted'])) { - $Block['li']['handler']['argument'][] = ''; - - $Block['loose'] = true; - - unset($Block['interrupted']); - } - - unset($Block['li']); - - $text = $matches[1] ?? ''; - - $Block['indent'] = $Line['indent']; - - $Block['li'] = [ - 'name' => 'li', - 'handler' => [ - 'function' => 'li', - 'argument' => [$text], - 'destination' => 'elements', - ], - ]; - - $Block['element']['elements'][] = &$Block['li']; - - return $Block; - } - - if ($Line['indent'] < $requiredIndent && $this->blockList($Line) - ) { - return; - } - - if ($Line['text'][0] === '[' && $this->blockReference($Line)) { - return $Block; - } - - if ($Line['indent'] >= $requiredIndent) { - if (isset($Block['interrupted'])) { - $Block['li']['handler']['argument'][] = ''; - - $Block['loose'] = true; - - unset($Block['interrupted']); - } - - $text = substr((string) $Line['body'], $requiredIndent); - - $Block['li']['handler']['argument'][] = $text; - - return $Block; - } - - if (!isset($Block['interrupted'])) { - $text = preg_replace('/^[ ]{0,'.$requiredIndent.'}+/', '', (string) $Line['body']); - - $Block['li']['handler']['argument'][] = $text; - - return $Block; - } - } - - protected function blockListComplete(array $Block) - { - if (isset($Block['loose'])) { - foreach ($Block['element']['elements'] as &$li) { - if (end($li['handler']['argument']) !== '') { - $li['handler']['argument'][] = ''; - } - } - } - - return $Block; - } - - // - // Quote - - protected function blockQuote($Line) - { - if (preg_match('#^>[ ]?+(.*+)#', (string) $Line['text'], $matches)) { - return [ - 'element' => [ - 'name' => 'blockquote', - 'handler' => [ - 'function' => 'linesElements', - 'argument' => (array) $matches[1], - 'destination' => 'elements', - ], - ], - ]; - } - } - - protected function blockQuoteContinue($Line, array $Block) - { - if (isset($Block['interrupted'])) { - return; - } - - if ($Line['text'][0] === '>' && preg_match('#^>[ ]?+(.*+)#', (string) $Line['text'], $matches)) { - $Block['element']['handler']['argument'][] = $matches[1]; - - return $Block; - } - - if (!isset($Block['interrupted'])) { - $Block['element']['handler']['argument'][] = $Line['text']; - - return $Block; - } - } - - // - // Rule - - protected function blockRule($Line) - { - $marker = $Line['text'][0]; - - if (substr_count((string) $Line['text'], (string) $marker) >= 3 && rtrim((string) $Line['text'], \sprintf(' %s', $marker)) === '') { - return [ - 'element' => [ - 'name' => 'hr', - ], - ]; - } - } - - // - // Setext - - protected function blockSetextHeader($Line, ?array $Block = null) - { - if (!isset($Block) || $Block['type'] !== 'Paragraph' || isset($Block['interrupted'])) { - return; - } - - if ($Line['indent'] < 4 && rtrim(rtrim((string) $Line['text'], ' '), $Line['text'][0]) === '') { - $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; - - return $Block; - } - } - - // - // Markup - - protected function blockMarkup($Line) - { - if ($this->markupEscaped || $this->safeMode) { - return; - } - - if (preg_match('/^<[\/]?+(\w*)(?:[ ]*+'.$this->regexHtmlAttribute.')*+[ ]*+(\/)?>/', (string) $Line['text'], $matches)) { - $element = strtolower($matches[1]); - - if (\in_array($element, $this->textLevelElements)) { - return; - } - - return [ - 'name' => $matches[1], - 'element' => [ - 'rawHtml' => $Line['text'], - 'autobreak' => true, - ], - ]; - } - } - - protected function blockMarkupContinue($Line, array $Block) - { - if (isset($Block['closed']) || isset($Block['interrupted'])) { - return; - } - - $Block['element']['rawHtml'] .= "\n".$Line['body']; - - return $Block; - } - - // - // Reference - - protected function blockReference($Line) - { - if (str_contains((string) $Line['text'], ']') && preg_match('#^\[(.+?)\]:[ ]*+?(?:[ ]+["\'(](.+)["\')])?[ ]*+$#', (string) $Line['text'], $matches) - ) { - $id = strtolower($matches[1]); - - $Data = [ - 'url' => $matches[2], - 'title' => $matches[3] ?? null, - ]; - - $this->DefinitionData['Reference'][$id] = $Data; - - return [ - 'element' => [], - ]; - } - } - - // - // Table - - protected function blockTable($Line, ?array $Block = null) - { - if (!isset($Block) || $Block['type'] !== 'Paragraph' || isset($Block['interrupted'])) { - return; - } - - if ( - (!str_contains((string) $Block['element']['handler']['argument'], '|') && !str_contains((string) $Line['text'], '|') && !str_contains( - (string) $Line['text'], - ':' - )) || str_contains((string) $Block['element']['handler']['argument'], "\n") - ) { - return; - } - - if (rtrim((string) $Line['text'], ' -:|') !== '') { - return; - } - - $alignments = []; - - $divider = $Line['text']; - - $divider = trim((string) $divider); - $divider = trim($divider, '|'); - - $dividerCells = explode('|', $divider); - - foreach ($dividerCells as $dividerCell) { - $dividerCell = trim($dividerCell); - - if ($dividerCell === '') { - return; - } - - $alignment = null; - - if ($dividerCell[0] === ':') { - $alignment = 'left'; - } - - if (str_ends_with($dividerCell, ':')) { - $alignment = $alignment === 'left' ? 'center' : 'right'; - } - - $alignments[] = $alignment; - } - - // ~ - - $HeaderElements = []; - - $header = $Block['element']['handler']['argument']; - - $header = trim((string) $header); - $header = trim($header, '|'); - - $headerCells = explode('|', $header); - - if (\count($headerCells) !== \count($alignments)) { - return; - } - - foreach ($headerCells as $index => $headerCell) { - $headerCell = trim($headerCell); - - $HeaderElement = [ - 'name' => 'th', - 'handler' => [ - 'function' => 'lineElements', - 'argument' => $headerCell, - 'destination' => 'elements', - ], - ]; - - if (isset($alignments[$index])) { - $alignment = $alignments[$index]; - - $HeaderElement['attributes'] = [ - 'style' => \sprintf('text-align: %s;', $alignment), - ]; - } - - $HeaderElements[] = $HeaderElement; - } - - // ~ - - $Block = [ - 'alignments' => $alignments, - 'identified' => true, - 'element' => [ - 'name' => 'table', - 'elements' => [], - ], - ]; - - $Block['element']['elements'][] = [ - 'name' => 'thead', - ]; - - $Block['element']['elements'][] = [ - 'name' => 'tbody', - 'elements' => [], - ]; - - $Block['element']['elements'][0]['elements'][] = [ - 'name' => 'tr', - 'elements' => $HeaderElements, - ]; - - return $Block; - } - - protected function blockTableContinue($Line, array $Block) - { - if (isset($Block['interrupted'])) { - return; - } - - if ((is_countable($Block['alignments']) ? \count($Block['alignments']) : 0) === 1 || $Line['text'][0] === '|' || strpos((string) $Line['text'], '|')) { - $Elements = []; - - $row = $Line['text']; - - $row = trim((string) $row); - $row = trim($row, '|'); - - preg_match_all('#(?:(\\\[|])|[^|`]|`[^`]++`|`)++#', $row, $matches); - - $cells = \array_slice($matches[0], 0, is_countable($Block['alignments']) ? \count($Block['alignments']) : 0); - - foreach ($cells as $index => $cell) { - $cell = trim((string) $cell); - - $Element = [ - 'name' => 'td', - 'handler' => [ - 'function' => 'lineElements', - 'argument' => $cell, - 'destination' => 'elements', - ], - ]; - - if (isset($Block['alignments'][$index])) { - $Element['attributes'] = [ - 'style' => 'text-align: '.$Block['alignments'][$index].';', - ]; - } - - $Elements[] = $Element; - } - - $Element = [ - 'name' => 'tr', - 'elements' => $Elements, - ]; - - $Block['element']['elements'][1]['elements'][] = $Element; - - return $Block; - } - } - - // - // ~ - // - - protected function paragraph($Line) - { - return [ - 'type' => 'Paragraph', - 'element' => [ - 'name' => 'p', - 'handler' => [ - 'function' => 'lineElements', - 'argument' => $Line['text'], - 'destination' => 'elements', - ], - ], - ]; - } - - protected function paragraphContinue($Line, array $Block) - { - if (isset($Block['interrupted'])) { - return; - } - - $Block['element']['handler']['argument'] .= "\n".$Line['text']; - - return $Block; - } - - // - // Inline Elements - // - - protected $InlineTypes = [ - '!' => ['Image'], - '&' => ['SpecialCharacter'], - '*' => ['Emphasis'], - ':' => ['Url'], - '<' => ['UrlTag', 'EmailTag', 'Markup'], - '[' => ['Link'], - '_' => ['Emphasis'], - '`' => ['Code'], - '~' => ['Strikethrough'], - '\\' => ['EscapeSequence'], - ]; - - // ~ - - protected $inlineMarkerList = '!*_&[:<`~\\'; - - // - // ~ - // - - public function line($text, $nonNestables = []) - { - return $this->elements($this->lineElements($text, $nonNestables)); - } - - protected function lineElements($text, $nonNestables = []) - { - // standardize line breaks - $text = str_replace(["\r\n", "\r"], "\n", (string) $text); - - $Elements = []; - - $nonNestables = ( - empty($nonNestables) - ? [] - : array_combine($nonNestables, $nonNestables) - ); - - // $excerpt is based on the first occurrence of a marker - - while ($excerpt = strpbrk($text, (string) $this->inlineMarkerList)) { - $marker = $excerpt[0]; - - $markerPosition = \strlen((string) $text) - \strlen($excerpt); - - $Excerpt = ['text' => $excerpt, 'context' => $text]; - - foreach ($this->InlineTypes[$marker] as $inlineType) { - // check to see if the current inline type is nestable in the current context - - if (isset($nonNestables[$inlineType])) { - continue; - } - - $Inline = $this->{\sprintf('inline%s', $inlineType)}($Excerpt); - - if (!isset($Inline)) { - continue; - } - - // makes sure that the inline belongs to "our" marker - - if (isset($Inline['position']) && $Inline['position'] > $markerPosition) { - continue; - } - - // sets a default inline position - - if (!isset($Inline['position'])) { - $Inline['position'] = $markerPosition; - } - - // cause the new element to 'inherit' our non nestables - - $Inline['element']['nonNestables'] = isset($Inline['element']['nonNestables']) - ? array_merge($Inline['element']['nonNestables'], $nonNestables) - : $nonNestables; - - // the text that comes before the inline - $unmarkedText = substr($text, 0, $Inline['position']); - - // compile the unmarked text - $InlineText = $this->inlineText($unmarkedText); - $Elements[] = $InlineText['element']; - - // compile the inline - $Elements[] = $this->extractElement($Inline); - - // remove the examined text - $text = substr($text, $Inline['position'] + $Inline['extent']); - - continue 2; - } - - // the marker does not belong to an inline - - $unmarkedText = substr($text, 0, $markerPosition + 1); - - $InlineText = $this->inlineText($unmarkedText); - $Elements[] = $InlineText['element']; - - $text = substr($text, $markerPosition + 1); - } - - $InlineText = $this->inlineText($text); - $Elements[] = $InlineText['element']; - - foreach ($Elements as &$Element) { - if (!isset($Element['autobreak'])) { - $Element['autobreak'] = false; - } - } - - return $Elements; - } - - // - // ~ - // - - protected function inlineText($text) - { - $Inline = [ - 'extent' => \strlen((string) $text), - 'element' => [], - ]; - - $Inline['element']['elements'] = self::pregReplaceElements( - $this->breaksEnabled ? '/[ ]*+\n/' : '/(?:[ ]*+\\\\|[ ]{2,}+)\n/', - [ - ['name' => 'br'], - ['text' => "\n"], - ], - $text - ); - - return $Inline; - } - - protected function inlineCode($Excerpt) - { - $marker = $Excerpt['text'][0]; - - if (preg_match('/^(['.$marker.']++)[ ]*+(.+?)[ ]*+(? \strlen((string) $matches[0]), - 'element' => [ - 'name' => 'code', - 'text' => $text, - ], - ]; - } - } - - protected function inlineEmailTag($Excerpt) - { - $hostnameLabel = '[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?'; - - $commonMarkEmail = '[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]++@' - .$hostnameLabel.'(?:\.'.$hostnameLabel.')*'; - - if (str_contains((string) $Excerpt['text'], '>') && preg_match(\sprintf('/^<((mailto:)?%s)>/i', $commonMarkEmail), (string) $Excerpt['text'], $matches) - ) { - $url = $matches[1]; - - if (!isset($matches[2])) { - $url = \sprintf('mailto:%s', $url); - } - - return [ - 'extent' => \strlen((string) $matches[0]), - 'element' => [ - 'name' => 'a', - 'text' => $matches[1], - 'attributes' => [ - 'href' => $url, - ], - ], - ]; - } - } - - protected function inlineEmphasis($Excerpt) - { - if (!isset($Excerpt['text'][1])) { - return; - } - - $marker = $Excerpt['text'][0]; - - if ($Excerpt['text'][1] === $marker && preg_match($this->StrongRegex[$marker], (string) $Excerpt['text'], $matches)) { - $emphasis = 'strong'; - } elseif (preg_match($this->EmRegex[$marker], (string) $Excerpt['text'], $matches)) { - $emphasis = 'em'; - } else { - return; - } - - return [ - 'extent' => \strlen((string) $matches[0]), - 'element' => [ - 'name' => $emphasis, - 'handler' => [ - 'function' => 'lineElements', - 'argument' => $matches[1], - 'destination' => 'elements', - ], - ], - ]; - } - - protected function inlineEscapeSequence($Excerpt) - { - if (isset($Excerpt['text'][1]) && \in_array($Excerpt['text'][1], $this->specialCharacters)) { - return [ - 'element' => ['rawHtml' => $Excerpt['text'][1]], - 'extent' => 2, - ]; - } - } - - protected function inlineImage($Excerpt) - { - if (!isset($Excerpt['text'][1]) || $Excerpt['text'][1] !== '[') { - return; - } - - $Excerpt['text'] = substr((string) $Excerpt['text'], 1); - - $Link = $this->inlineLink($Excerpt); - - if ($Link === null) { - return; - } - - $Inline = [ - 'extent' => $Link['extent'] + 1, - 'element' => [ - 'name' => 'img', - 'attributes' => [ - 'src' => $Link['element']['attributes']['href'], - 'alt' => $Link['element']['handler']['argument'], - ], - 'autobreak' => true, - ], - ]; - - $Inline['element']['attributes'] += $Link['element']['attributes']; - - unset($Inline['element']['attributes']['href']); - - return $Inline; - } - - protected function inlineLink($Excerpt) - { - $Element = [ - 'name' => 'a', - 'handler' => [ - 'function' => 'lineElements', - 'argument' => null, - 'destination' => 'elements', - ], - 'nonNestables' => ['Url', 'Link'], - 'attributes' => [ - 'href' => null, - 'title' => null, - ], - ]; - - $extent = 0; - - $remainder = $Excerpt['text']; - - if (preg_match('#\[((?:[^][]++|(?R))*+)\]#', (string) $remainder, $matches)) { - $Element['handler']['argument'] = $matches[1]; - - $extent += \strlen((string) $matches[0]); - - $remainder = substr((string) $remainder, $extent); - } else { - return; - } - - if (preg_match('#^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*+"|\'[^\']*+\'))?\s*+[)]#', $remainder, $matches)) { - $Element['attributes']['href'] = $matches[1]; - - if (isset($matches[2])) { - $Element['attributes']['title'] = substr($matches[2], 1, -1); - } - - $extent += \strlen((string) $matches[0]); - } else { - if (preg_match('#^\s*\[(.*?)\]#', $remainder, $matches)) { - $definition = $matches[1] != '' ? $matches[1] : $Element['handler']['argument']; - $definition = strtolower($definition); - - $extent += \strlen((string) $matches[0]); - } else { - $definition = strtolower($Element['handler']['argument']); - } - - if (!isset($this->DefinitionData['Reference'][$definition])) { - return; - } - - $Definition = $this->DefinitionData['Reference'][$definition]; - - $Element['attributes']['href'] = $Definition['url']; - $Element['attributes']['title'] = $Definition['title']; - } - - return [ - 'extent' => $extent, - 'element' => $Element, - ]; - } - - protected function inlineMarkup($Excerpt) - { - if ($this->markupEscaped || $this->safeMode || !str_contains((string) $Excerpt['text'], '>')) { - return; - } - - if ($Excerpt['text'][1] === '/' && preg_match('#^<\/\w[\w-]*+[ ]*+>#s', (string) $Excerpt['text'], $matches)) { - return [ - 'element' => ['rawHtml' => $matches[0]], - 'extent' => \strlen((string) $matches[0]), - ]; - } - - if ($Excerpt['text'][1] === '!' && preg_match('#^#s', (string) $Excerpt['text'], $matches)) { - return [ - 'element' => ['rawHtml' => $matches[0]], - 'extent' => \strlen((string) $matches[0]), - ]; - } - - if ($Excerpt['text'][1] !== ' ' && preg_match('/^<\w[\w-]*+(?:[ ]*+'.$this->regexHtmlAttribute.')*+[ ]*+\/?>/s', (string) $Excerpt['text'], $matches)) { - return [ - 'element' => ['rawHtml' => $matches[0]], - 'extent' => \strlen((string) $matches[0]), - ]; - } - } - - protected function inlineSpecialCharacter($Excerpt) - { - if (substr((string) $Excerpt['text'], 1, 1) !== ' ' && str_contains((string) $Excerpt['text'], ';') && preg_match('/^&(#?+[0-9a-zA-Z]++);/', (string) $Excerpt['text'], $matches) - ) { - return [ - 'element' => ['rawHtml' => '&'.$matches[1].';'], - 'extent' => \strlen((string) $matches[0]), - ]; - } - } - - protected function inlineStrikethrough($Excerpt) - { - if (!isset($Excerpt['text'][1])) { - return; - } - - if ($Excerpt['text'][1] === '~' && preg_match('#^~~(?=\S)(.+?)(?<=\S)~~#', (string) $Excerpt['text'], $matches)) { - return [ - 'extent' => \strlen((string) $matches[0]), - 'element' => [ - 'name' => 'del', - 'handler' => [ - 'function' => 'lineElements', - 'argument' => $matches[1], - 'destination' => 'elements', - ], - ], - ]; - } - } - - protected function inlineUrl($Excerpt) - { - if ($this->urlsLinked !== true || !isset($Excerpt['text'][2]) || $Excerpt['text'][2] !== '/') { - return; - } - - if (str_contains((string) $Excerpt['context'], 'http') && preg_match('#\bhttps?+:[\/]{2}[^\s<]+\b\/*+#ui', (string) $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE) - ) { - $url = $matches[0][0]; - - return [ - 'extent' => \strlen((string) $matches[0][0]), - 'position' => $matches[0][1], - 'element' => [ - 'name' => 'a', - 'text' => $url, - 'attributes' => [ - 'href' => $url, - ], - ], - ]; - } - } - - protected function inlineUrlTag($Excerpt) - { - if (str_contains((string) $Excerpt['text'], '>') && preg_match('#^<(\w++:\/{2}[^ >]++)>#i', (string) $Excerpt['text'], $matches)) { - $url = $matches[1]; - - return [ - 'extent' => \strlen((string) $matches[0]), - 'element' => [ - 'name' => 'a', - 'text' => $url, - 'attributes' => [ - 'href' => $url, - ], - ], - ]; - } - } - - // ~ - - protected function unmarkedText($text) - { - $Inline = $this->inlineText($text); - - return $this->element($Inline['element']); - } - - // - // Handlers - // - - protected function handle(array $Element) - { - if (isset($Element['handler'])) { - if (!isset($Element['nonNestables'])) { - $Element['nonNestables'] = []; - } - - if (\is_string($Element['handler'])) { - $function = $Element['handler']; - $argument = $Element['text']; - unset($Element['text']); - $destination = 'rawHtml'; - } else { - $function = $Element['handler']['function']; - $argument = $Element['handler']['argument']; - $destination = $Element['handler']['destination']; - } - - $Element[$destination] = $this->{$function}($argument, $Element['nonNestables']); - - if ($destination === 'handler') { - $Element = $this->handle($Element); - } - - unset($Element['handler']); - } - - return $Element; - } - - protected function handleElementRecursive(array $Element) - { - return $this->elementApplyRecursive(fn (array $Element) => $this->handle($Element), $Element); - } - - protected function handleElementsRecursive(array $Elements) - { - return $this->elementsApplyRecursive(fn (array $Element) => $this->handle($Element), $Elements); - } - - protected function elementApplyRecursive($closure, array $Element) - { - $Element = $closure($Element); - - if (isset($Element['elements'])) { - $Element['elements'] = $this->elementsApplyRecursive($closure, $Element['elements']); - } elseif (isset($Element['element'])) { - $Element['element'] = $this->elementApplyRecursive($closure, $Element['element']); - } - - return $Element; - } - - protected function elementApplyRecursiveDepthFirst($closure, array $Element) - { - if (isset($Element['elements'])) { - $Element['elements'] = $this->elementsApplyRecursiveDepthFirst($closure, $Element['elements']); - } elseif (isset($Element['element'])) { - $Element['element'] = $this->elementsApplyRecursiveDepthFirst($closure, $Element['element']); - } - - return $closure($Element); - } - - protected function elementsApplyRecursive($closure, array $Elements) - { - foreach ($Elements as &$Element) { - $Element = $this->elementApplyRecursive($closure, $Element); - } - - return $Elements; - } - - protected function elementsApplyRecursiveDepthFirst($closure, array $Elements) - { - foreach ($Elements as &$Element) { - $Element = $this->elementApplyRecursiveDepthFirst($closure, $Element); - } - - return $Elements; - } - - protected function element(array $Element) - { - if ($this->safeMode) { - $Element = $this->sanitiseElement($Element); - } - - // identity map if element has no handler - $Element = $this->handle($Element); - - $hasName = isset($Element['name']); - - $markup = ''; - - if ($hasName) { - $markup .= '<'.$Element['name']; - - if (isset($Element['attributes'])) { - foreach ($Element['attributes'] as $name => $value) { - if ($value === null) { - continue; - } - - $markup .= \sprintf(' %s="', $name).self::escape($value).'"'; - } - } - } - - $permitRawHtml = false; - - if (isset($Element['text'])) { - $text = $Element['text']; - } - // very strongly consider an alternative if you're writing an - // extension - elseif (isset($Element['rawHtml'])) { - $text = $Element['rawHtml']; - - $allowRawHtmlInSafeMode = isset($Element['allowRawHtmlInSafeMode']) && $Element['allowRawHtmlInSafeMode']; - $permitRawHtml = !$this->safeMode || $allowRawHtmlInSafeMode; - } - - $hasContent = isset($text) || isset($Element['element']) || isset($Element['elements']); - - if ($hasContent) { - $markup .= $hasName ? '>' : ''; - - if (isset($Element['elements'])) { - $markup .= $this->elements($Element['elements']); - } elseif (isset($Element['element'])) { - $markup .= $this->element($Element['element']); - } elseif (!$permitRawHtml) { - $markup .= self::escape($text, true); - } else { - $markup .= $text; - } - - $markup .= $hasName ? '' : ''; - } elseif ($hasName) { - $markup .= ' />'; - } - - return $markup; - } - - protected function elements(array $Elements) - { - $markup = ''; - - $autoBreak = true; - - foreach ($Elements as $Element) { - if (empty($Element)) { - continue; - } - - $autoBreakNext = ( - $Element['autobreak'] ?? isset($Element['name']) - ); - // (autobreak === false) covers both sides of an element - $autoBreak = $autoBreak ? $autoBreakNext : $autoBreak; - - $markup .= ($autoBreak ? "\n" : '').$this->element($Element); - $autoBreak = $autoBreakNext; - } - - return $markup.($autoBreak ? "\n" : ''); - } - - // ~ - - protected function li($lines) - { - $Elements = $this->linesElements($lines); - - if (isset($Elements[0], $Elements[0]['name']) && !\in_array('', $lines) && $Elements[0]['name'] === 'p' - ) { - unset($Elements[0]['name']); - } - - return $Elements; - } - - // - // AST Convenience - // - - /** - * Replace occurrences $regexp with $Elements in $text. Return an array of - * elements representing the replacement. - */ - protected static function pregReplaceElements($regexp, $Elements, $text): array - { - $newElements = []; - - while (preg_match($regexp, (string) $text, $matches, PREG_OFFSET_CAPTURE)) { - $offset = $matches[0][1]; - $before = substr((string) $text, 0, $offset); - $after = substr((string) $text, $offset + \strlen((string) $matches[0][0])); - - $newElements[] = ['text' => $before]; - - foreach ($Elements as $Element) { - $newElements[] = $Element; - } - - $text = $after; - } - - $newElements[] = ['text' => $text]; - - return $newElements; - } - - // - // Deprecated Methods - // - - public function parse($text) - { - return $this->text($text); - } - - protected function sanitiseElement(array $Element) - { - static $goodAttribute = '/^[a-zA-Z0-9][a-zA-Z0-9-_]*+$/'; - static $safeUrlNameToAtt = [ - 'a' => 'href', - 'img' => 'src', - ]; - - if (!isset($Element['name'])) { - unset($Element['attributes']); - - return $Element; - } - - if (isset($safeUrlNameToAtt[$Element['name']])) { - $Element = $this->filterUnsafeUrlInAttribute($Element, $safeUrlNameToAtt[$Element['name']]); - } - - if (!empty($Element['attributes'])) { - foreach (array_keys($Element['attributes']) as $att) { - // filter out badly parsed attribute - if (!preg_match($goodAttribute, (string) $att)) { - unset($Element['attributes'][$att]); - } - // dump onevent attribute - elseif (self::striAtStart($att, 'on')) { - unset($Element['attributes'][$att]); - } - } - } - - return $Element; - } - - protected function filterUnsafeUrlInAttribute(array $Element, $attribute) - { - foreach ($this->safeLinksWhitelist as $safeLinkWhitelist) { - if (self::striAtStart($Element['attributes'][$attribute], $safeLinkWhitelist)) { - return $Element; - } - } - - $Element['attributes'][$attribute] = str_replace(':', '%3A', (string) $Element['attributes'][$attribute]); - - return $Element; - } - - // - // Static Methods - // - - protected static function escape($text, $allowQuotes = false) - { - return htmlspecialchars((string) $text, $allowQuotes ? ENT_NOQUOTES : ENT_QUOTES, 'UTF-8'); - } - - protected static function striAtStart($string, $needle) - { - $len = \strlen((string) $needle); - - if ($len > \strlen((string) $string)) { - return false; - } - - return stripos((string) $string, strtolower((string) $needle)) === 0; - } - - public static function instance($name = 'default') - { - if (isset(self::$instances[$name])) { - return self::$instances[$name]; - } - - $static = new static(); - - self::$instances[$name] = $static; - - return $static; - } - - private static array $instances = []; - - // - // Fields - // - - protected $DefinitionData; - - // - // Read-Only - - protected $specialCharacters = [ - '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', '~', - ]; - - protected $StrongRegex = [ - '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*+[*])+?)[*]{2}(?![*])/s', - '_' => '/^__((?:\\\\_|[^_]|_[^_]*+_)+?)__(?!_)/us', - ]; - - protected $EmRegex = [ - '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', - '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', - ]; - - protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*+(?:\s*+=\s*+(?:[^"\'=<>`\s]+|"[^"]*+"|\'[^\']*+\'))?+'; - - protected $voidElements = [ - 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', - ]; - - protected $textLevelElements = [ - 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', - 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', - 'i', 'rp', 'del', 'code', 'strike', 'marquee', - 'q', 'rt', 'ins', 'font', 'strong', - 's', 'tt', 'kbd', 'mark', - 'u', 'xm', 'sub', 'nobr', - 'sup', 'ruby', - 'var', 'span', - 'wbr', 'time', - ]; -} diff --git a/app/Helpers/MarkdownExtra.php b/app/Helpers/MarkdownExtra.php deleted file mode 100644 index 9684031eae..0000000000 --- a/app/Helpers/MarkdownExtra.php +++ /dev/null @@ -1,612 +0,0 @@ - - * @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 - * @credits Emanuil Rusev - */ - -namespace App\Helpers; - -use DOMDocument; -use DOMElement; - -/** - * @deprecated Use \GrahamCampbell\Markdown\Facades\Markdown instead - */ -class MarkdownExtra extends Markdown -{ - public function __construct() - { - $this->BlockTypes[':'][] = 'DefinitionList'; - $this->BlockTypes['*'][] = 'Abbreviation'; - - // identify footnote definitions before reference definitions - array_unshift($this->BlockTypes['['], 'Footnote'); - - // identify footnote markers before before links - array_unshift($this->InlineTypes['['], 'FootnoteMarker'); - } - - public function text($text) - { - $Elements = $this->textElements($text); - - // convert to markup - $markup = $this->elements($Elements); - - // trim line breaks - $markup = trim((string) $markup, "\n"); - - // merge consecutive dl elements - - $markup = preg_replace('#<\/dl>\s+
\s+#', '', $markup); - - // add footnotes - - if (isset($this->DefinitionData['Footnote'])) { - $Element = $this->buildFootnoteElement(); - - $markup .= "\n".$this->element($Element); - } - - return $markup; - } - - // - // Blocks - // - - // - // Abbreviation - - protected function blockAbbreviation($Line) - { - if (preg_match('#^\*\[(.+?)\]:[ ]*(.+?)[ ]*$#', (string) $Line['text'], $matches)) { - $this->DefinitionData['Abbreviation'][$matches[1]] = $matches[2]; - - return [ - 'hidden' => true, - ]; - } - } - - // - // Footnote - - protected function blockFootnote($Line) - { - if (preg_match('#^\[\^(.+?)\]:[ ]?(.*)$#', (string) $Line['text'], $matches)) { - return [ - 'label' => $matches[1], - 'text' => $matches[2], - 'hidden' => true, - ]; - } - } - - protected function blockFootnoteContinue($Line, $Block) - { - if ($Line['text'][0] === '[' && preg_match('#^\[\^(.+?)\]:#', (string) $Line['text'])) { - return; - } - - if (isset($Block['interrupted'])) { - if ($Line['indent'] >= 4) { - $Block['text'] .= "\n\n".$Line['text']; - - return $Block; - } - } else { - $Block['text'] .= "\n".$Line['text']; - - return $Block; - } - } - - protected function blockFootnoteComplete($Block) - { - $this->DefinitionData['Footnote'][$Block['label']] = [ - 'text' => $Block['text'], - 'count' => null, - 'number' => null, - ]; - - return $Block; - } - - // - // Definition List - - protected function blockDefinitionList($Line, $Block) - { - if (!isset($Block) || $Block['type'] !== 'Paragraph') { - return; - } - - $Element = [ - 'name' => 'dl', - 'elements' => [], - ]; - - $terms = explode("\n", (string) $Block['element']['handler']['argument']); - - foreach ($terms as $term) { - $Element['elements'][] = [ - 'name' => 'dt', - 'handler' => [ - 'function' => 'lineElements', - 'argument' => $term, - 'destination' => 'elements', - ], - ]; - } - - $Block['element'] = $Element; - - return $this->addDdElement($Line, $Block); - } - - protected function blockDefinitionListContinue($Line, array $Block) - { - if ($Line['text'][0] === ':') { - return $this->addDdElement($Line, $Block); - } - - if (isset($Block['interrupted']) && $Line['indent'] === 0) { - return; - } - - if (isset($Block['interrupted'])) { - $Block['dd']['handler']['function'] = 'textElements'; - $Block['dd']['handler']['argument'] .= "\n\n"; - - $Block['dd']['handler']['destination'] = 'elements'; - - unset($Block['interrupted']); - } - - $text = substr((string) $Line['body'], min($Line['indent'], 4)); - - $Block['dd']['handler']['argument'] .= "\n".$text; - - return $Block; - } - - // - // Header - - protected function blockHeader($Line) - { - $Block = parent::blockHeader($Line); - - if ($Block !== null && preg_match('/[ #]*{('.$this->regexAttribute.'+)}[ ]*$/', (string) $Block['element']['handler']['argument'], $matches, PREG_OFFSET_CAPTURE)) { - $attributeString = $matches[1][0]; - - $Block['element']['attributes'] = $this->parseAttributeData($attributeString); - - $Block['element']['handler']['argument'] = substr((string) $Block['element']['handler']['argument'], 0, $matches[0][1]); - } - - return $Block; - } - - // - // Markup - - protected function blockMarkup($Line) - { - if ($this->markupEscaped || $this->safeMode) { - return; - } - - if (preg_match('/^<(\w[\w-]*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', (string) $Line['text'], $matches)) { - $element = strtolower($matches[1]); - - if (\in_array($element, $this->textLevelElements)) { - return; - } - - $Block = [ - 'name' => $matches[1], - 'depth' => 0, - 'element' => [ - 'rawHtml' => $Line['text'], - 'autobreak' => true, - ], - ]; - - $length = \strlen((string) $matches[0]); - $remainder = substr((string) $Line['text'], $length); - - if (trim($remainder) === '') { - if (isset($matches[2]) || \in_array($matches[1], $this->voidElements)) { - $Block['closed'] = true; - $Block['void'] = true; - } - } else { - if (isset($matches[2]) || \in_array($matches[1], $this->voidElements)) { - return; - } - - if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) { - $Block['closed'] = true; - } - } - - return $Block; - } - } - - protected function blockMarkupContinue($Line, array $Block) - { - if (isset($Block['closed'])) { - return; - } - - if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', (string) $Line['text'])) { // open - $Block['depth']++; - } - - if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', (string) $Line['text'], $matches)) { // close - if ($Block['depth'] > 0) { - $Block['depth']--; - } else { - $Block['closed'] = true; - } - } - - if (isset($Block['interrupted'])) { - $Block['element']['rawHtml'] .= "\n"; - unset($Block['interrupted']); - } - - $Block['element']['rawHtml'] .= "\n".$Line['body']; - - return $Block; - } - - protected function blockMarkupComplete($Block) - { - if (!isset($Block['void'])) { - $Block['element']['rawHtml'] = $this->processTag($Block['element']['rawHtml']); - } - - return $Block; - } - - // - // Setext - - protected function blockSetextHeader($Line, ?array $Block = null) - { - $Block = parent::blockSetextHeader($Line, $Block); - - if ($Block !== null && preg_match('/[ ]*{('.$this->regexAttribute.'+)}[ ]*$/', (string) $Block['element']['handler']['argument'], $matches, PREG_OFFSET_CAPTURE)) { - $attributeString = $matches[1][0]; - - $Block['element']['attributes'] = $this->parseAttributeData($attributeString); - - $Block['element']['handler']['argument'] = substr((string) $Block['element']['handler']['argument'], 0, $matches[0][1]); - } - - return $Block; - } - - // - // Inline Elements - // - - // - // Footnote Marker - - protected function inlineFootnoteMarker($Excerpt) - { - if (preg_match('#^\[\^(.+?)\]#', (string) $Excerpt['text'], $matches)) { - $name = $matches[1]; - - if (!isset($this->DefinitionData['Footnote'][$name])) { - return; - } - - $this->DefinitionData['Footnote'][$name]['count']++; - - if (!isset($this->DefinitionData['Footnote'][$name]['number'])) { - $this->DefinitionData['Footnote'][$name]['number'] = ++$this->footnoteCount; // » & - } - - $Element = [ - 'name' => 'sup', - 'attributes' => ['id' => 'fnref'.$this->DefinitionData['Footnote'][$name]['count'].':'.$name], - 'element' => [ - 'name' => 'a', - 'attributes' => ['href' => '#fn:'.$name, 'class' => 'footnote-ref'], - 'text' => $this->DefinitionData['Footnote'][$name]['number'], - ], - ]; - - return [ - 'extent' => \strlen((string) $matches[0]), - 'element' => $Element, - ]; - } - } - - private int $footnoteCount = 0; - - // - // Link - - protected function inlineLink($Excerpt) - { - $Link = parent::inlineLink($Excerpt); - - $remainder = $Link !== null ? substr((string) $Excerpt['text'], $Link['extent']) : ''; - - if (preg_match('/^[ ]*{('.$this->regexAttribute.'+)}/', $remainder, $matches)) { - $Link['element']['attributes'] += $this->parseAttributeData($matches[1]); - - $Link['extent'] += \strlen((string) $matches[0]); - } - - return $Link; - } - - // - // ~ - // - - private $currentAbreviation; - - private $currentMeaning; - - protected function insertAbreviation(array $Element) - { - if (isset($Element['text'])) { - $Element['elements'] = self::pregReplaceElements( - '/\b'.preg_quote((string) $this->currentAbreviation, '/').'\b/', - [ - [ - 'name' => 'abbr', - 'attributes' => [ - 'title' => $this->currentMeaning, - ], - 'text' => $this->currentAbreviation, - ], - ], - $Element['text'] - ); - - unset($Element['text']); - } - - return $Element; - } - - protected function inlineText($text) - { - $Inline = parent::inlineText($text); - - if (isset($this->DefinitionData['Abbreviation'])) { - foreach ($this->DefinitionData['Abbreviation'] as $abbreviation => $meaning) { - $this->currentAbreviation = $abbreviation; - $this->currentMeaning = $meaning; - - $Inline['element'] = $this->elementApplyRecursiveDepthFirst( - fn (array $Element) => $this->insertAbreviation($Element), - $Inline['element'] - ); - } - } - - return $Inline; - } - - // - // Util Methods - // - - protected function addDdElement(array $Line, array $Block) - { - $text = substr((string) $Line['text'], 1); - $text = trim($text); - - unset($Block['dd']); - - $Block['dd'] = [ - 'name' => 'dd', - 'handler' => [ - 'function' => 'lineElements', - 'argument' => $text, - 'destination' => 'elements', - ], - ]; - - if (isset($Block['interrupted'])) { - $Block['dd']['handler']['function'] = 'textElements'; - - unset($Block['interrupted']); - } - - $Block['element']['elements'][] = &$Block['dd']; - - return $Block; - } - - protected function buildFootnoteElement() - { - $Element = [ - 'name' => 'div', - 'attributes' => ['class' => 'footnotes'], - 'elements' => [ - ['name' => 'hr'], - [ - 'name' => 'ol', - 'elements' => [], - ], - ], - ]; - - uasort($this->DefinitionData['Footnote'], 'self::sortFootnotes'); - - foreach ($this->DefinitionData['Footnote'] as $definitionId => $DefinitionData) { - if (!isset($DefinitionData['number'])) { - continue; - } - - $text = $DefinitionData['text']; - - $textElements = $this->textElements($text); - - $numbers = range(1, $DefinitionData['count']); - - $backLinkElements = []; - - foreach ($numbers as $number) { - $backLinkElements[] = ['text' => ' ']; - $backLinkElements[] = [ - 'name' => 'a', - 'attributes' => [ - 'href' => \sprintf('#fnref%s:%s', $number, $definitionId), - 'rev' => 'footnote', - 'class' => 'footnote-backref', - ], - 'rawHtml' => '↩', - 'allowRawHtmlInSafeMode' => true, - 'autobreak' => false, - ]; - } - - unset($backLinkElements[0]); - - $n = (is_countable($textElements) ? \count($textElements) : 0) - 1; - - if ($textElements[$n]['name'] === 'p') { - $backLinkElements = [...[ - [ - 'rawHtml' => ' ', - 'allowRawHtmlInSafeMode' => true, - ], - ], ...$backLinkElements]; - - unset($textElements[$n]['name']); - - $textElements[$n] = [ - 'name' => 'p', - 'elements' => [...[$textElements[$n]], ...$backLinkElements], - ]; - } else { - $textElements[] = [ - 'name' => 'p', - 'elements' => $backLinkElements, - ]; - } - - $Element['elements'][1]['elements'][] = [ - 'name' => 'li', - 'attributes' => ['id' => 'fn:'.$definitionId], - 'elements' => array_merge( - $textElements - ), - ]; - } - - return $Element; - } - - // ~ - - protected function parseAttributeData($attributeString) - { - $Data = []; - - $attributes = preg_split('#[ ]+#', (string) $attributeString, -1, PREG_SPLIT_NO_EMPTY); - - foreach ($attributes as $attribute) { - if ($attribute[0] === '#') { - $Data['id'] = substr($attribute, 1); - } else { // "." - $classes[] = substr($attribute, 1); - } - } - - if (isset($classes)) { - $Data['class'] = implode(' ', $classes); - } - - return $Data; - } - - // ~ - - protected function processTag($elementMarkup) // recursive - { - // http://stackoverflow.com/q/1148928/200145 - libxml_use_internal_errors(true); - - $DOMDocument = new DOMDocument('1.0', 'utf-8'); - - $DOMDocument->loadHTML(''.$elementMarkup); - - // http://stackoverflow.com/q/11309194/200145 - foreach ($DOMDocument->childNodes as $item) { - if ($item->nodeType == XML_PI_NODE) { - $DOMDocument->removeChild($item); - } - } - - $DOMDocument->removeChild($DOMDocument->doctype); - $DOMDocument->replaceChild($DOMDocument->firstChild->firstChild->firstChild, $DOMDocument->firstChild); - - $elementText = ''; - - if ($DOMDocument->documentElement->getAttribute('markdown') === '1') { - foreach ($DOMDocument->documentElement->childNodes as $Node) { - $elementText .= $DOMDocument->saveHTML($Node); - } - - $DOMDocument->documentElement->removeAttribute('markdown'); - - $elementText = "\n".$this->text($elementText)."\n"; - } else { - foreach ($DOMDocument->documentElement->childNodes as $Node) { - $nodeMarkup = $DOMDocument->saveHTML($Node); - - if ($Node instanceof DOMElement && !\in_array($Node->nodeName, $this->textLevelElements)) { - $elementText .= $this->processTag($nodeMarkup); - } else { - $elementText .= $nodeMarkup; - } - } - } - - // because we don't want for markup to get encoded - $DOMDocument->documentElement->nodeValue = 'placeholder\x1A'; - - $markup = $DOMDocument->saveHTML($DOMDocument->documentElement); - - return str_replace('placeholder\x1A', $elementText, $markup); - } - - // ~ - - protected function sortFootnotes($A, $B) // callback - { - return $A['number'] - $B['number']; - } - - // - // Fields - // - - protected $regexAttribute = '(?:[#.][-\w]+[ ]*)'; -} diff --git a/app/Helpers/MarkdownHelper.php b/app/Helpers/MarkdownHelper.php new file mode 100644 index 0000000000..23274d54b8 --- /dev/null +++ b/app/Helpers/MarkdownHelper.php @@ -0,0 +1,50 @@ + + * @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 + */ + +namespace App\Helpers; + +use League\CommonMark\Environment\Environment; +use League\CommonMark\Extension\Attributes\AttributesExtension; +use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension; +use League\CommonMark\Extension\DescriptionList\DescriptionListExtension; +use League\CommonMark\Extension\Footnote\FootnoteExtension; +use League\CommonMark\Extension\GithubFlavoredMarkdownExtension; +use League\CommonMark\MarkdownConverter; + +class MarkdownHelper +{ + private MarkdownConverter $converter; + + public function __construct() + { + $environment = new Environment(); + $environment->addExtension(new CommonMarkCoreExtension()); + $environment->addExtension(new AttributesExtension()); + $environment->addExtension(new DescriptionListExtension()); + $environment->addExtension(new FootnoteExtension()); + $environment->addExtension(new GithubFlavoredMarkdownExtension()); + + $this->converter = new MarkdownConverter($environment); + } + + /** + * @throws \League\CommonMark\Exception\CommonMarkException + */ + public function convertToHtml(string $markdown): string + { + return $this->converter->convert($markdown)->getContent(); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index d9e6d830ac..c5401dc279 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -16,12 +16,8 @@ namespace App\Http\Controllers; -use Illuminate\Foundation\Auth\Access\AuthorizesRequests; -use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; abstract class Controller extends BaseController { - use AuthorizesRequests; - use ValidatesRequests; } diff --git a/app/Http/Livewire/BackupPanel.php b/app/Http/Livewire/BackupPanel.php index 8ab441c99c..b6b0a5f272 100644 --- a/app/Http/Livewire/BackupPanel.php +++ b/app/Http/Livewire/BackupPanel.php @@ -26,6 +26,7 @@ use Livewire\Component; use Spatie\Backup\BackupDestination\Backup; use Spatie\Backup\BackupDestination\BackupDestination; +use Spatie\Backup\Config\MonitoredBackupsConfig; use Spatie\Backup\Helpers\Format; use Spatie\Backup\Tasks\Monitor\BackupDestinationStatus; use Spatie\Backup\Tasks\Monitor\BackupDestinationStatusFactory; @@ -45,7 +46,7 @@ class BackupPanel extends Component #[Computed] final public function backupStatuses(): array { - return BackupDestinationStatusFactory::createForMonitorConfig(config('backup.monitor_backups')) + return BackupDestinationStatusFactory::createForMonitorConfig(MonitoredBackupsConfig::fromArray(config('backup.monitor_backups'))) ->map(fn (BackupDestinationStatus $backupDestinationStatus) => [ 'name' => $backupDestinationStatus->backupDestination()->backupName(), 'disk' => $backupDestinationStatus->backupDestination()->diskName(), diff --git a/app/Http/Requests/Staff/StoreDonationGatewayRequest.php b/app/Http/Requests/Staff/StoreDonationGatewayRequest.php index e11253a7b8..5126d8b45b 100644 --- a/app/Http/Requests/Staff/StoreDonationGatewayRequest.php +++ b/app/Http/Requests/Staff/StoreDonationGatewayRequest.php @@ -25,7 +25,7 @@ class StoreDonationGatewayRequest extends FormRequest * * @return bool */ - public function authorize() + public function authorize(): bool { return $this->user()->group->is_owner; } diff --git a/app/Http/Requests/Staff/UpdateDonationGatewayRequest.php b/app/Http/Requests/Staff/UpdateDonationGatewayRequest.php index fa285a6cb4..fa72c51645 100644 --- a/app/Http/Requests/Staff/UpdateDonationGatewayRequest.php +++ b/app/Http/Requests/Staff/UpdateDonationGatewayRequest.php @@ -25,7 +25,7 @@ class UpdateDonationGatewayRequest extends FormRequest * * @return bool */ - public function authorize() + public function authorize(): bool { return $this->user()->group->is_owner; } diff --git a/app/Listeners/PasswordProtectBackup.php b/app/Listeners/PasswordProtectBackup.php deleted file mode 100644 index ff2043b1fd..0000000000 --- a/app/Listeners/PasswordProtectBackup.php +++ /dev/null @@ -1,31 +0,0 @@ - - * @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 - */ - -namespace App\Listeners; - -use App\Helpers\BackupPassword; -use Spatie\Backup\Events\BackupZipWasCreated; - -class PasswordProtectBackup -{ - /** - * Handle the event. - */ - public function handle(BackupZipWasCreated $backupZipWasCreated): ?string - { - return (new BackupPassword($backupZipWasCreated->pathToZip))->path; - } -} diff --git a/app/Models/Application.php b/app/Models/Application.php index f40b9ebe90..b821cf9198 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -16,6 +16,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Attributes\ScopedBy; use App\Models\Scopes\ApprovedScope; use App\Traits\Auditable; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -35,6 +36,7 @@ * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at */ +#[ScopedBy([ApprovedScope::class])] class Application extends Model { use Auditable; @@ -65,11 +67,6 @@ protected function casts(): array */ protected $guarded = ['id', 'created_at', 'updated_at']; - protected static function booted(): void - { - static::addGlobalScope(new ApprovedScope()); - } - /** * Belongs To A User. * diff --git a/app/Models/Page.php b/app/Models/Page.php index 04e316f3e2..c429f530de 100644 --- a/app/Models/Page.php +++ b/app/Models/Page.php @@ -17,8 +17,8 @@ namespace App\Models; use App\Helpers\Bbcode; +use App\Helpers\MarkdownHelper; use App\Traits\Auditable; -use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -55,9 +55,11 @@ public function setContentAttribute(?string $value): void /** * Parse Content And Return Valid HTML. + * + * @throws \League\CommonMark\Exception\CommonMarkException */ public function getContentHtml(): string { - return Markdown::convert(htmlspecialchars_decode((new Bbcode())->parse($this->content, false)))->getContent(); + return new MarkdownHelper()->convertToHtml(htmlspecialchars_decode(new Bbcode()->parse($this->content, false))); } } diff --git a/app/Models/Subtitle.php b/app/Models/Subtitle.php index a5746af5bc..2090f79402 100644 --- a/app/Models/Subtitle.php +++ b/app/Models/Subtitle.php @@ -16,6 +16,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Attributes\ScopedBy; use Illuminate\Database\Eloquent\Factories\HasFactory; use App\Helpers\StringHelper; use App\Models\Scopes\ApprovedScope; @@ -43,6 +44,7 @@ * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at */ +#[ScopedBy([ApprovedScope::class])] class Subtitle extends Model { use Auditable; @@ -67,11 +69,6 @@ protected function casts(): array ]; } - protected static function booted(): void - { - static::addGlobalScope(new ApprovedScope()); - } - /** * Belongs To A User. * diff --git a/app/Models/Torrent.php b/app/Models/Torrent.php index c56c6689cc..9ad06d8d92 100644 --- a/app/Models/Torrent.php +++ b/app/Models/Torrent.php @@ -16,6 +16,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Attributes\ScopedBy; use App\Helpers\StringHelper; use App\Models\Scopes\ApprovedScope; use App\Notifications\NewComment; @@ -80,6 +81,7 @@ * @property int|null $balance * @property int|null $balance_offset */ +#[ScopedBy([ApprovedScope::class])] class Torrent extends Model { use Auditable; @@ -475,11 +477,6 @@ protected function casts(): array ) AS json_keywords SQL; - protected static function booted(): void - { - static::addGlobalScope(new ApprovedScope()); - } - /** * Belongs To A User. * diff --git a/app/Models/User.php b/app/Models/User.php index 7ff6082107..b17cede7ae 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -16,6 +16,8 @@ namespace App\Models; +use App\Observers\UserObserver; +use Illuminate\Database\Eloquent\Attributes\ObservedBy; use App\Helpers\StringHelper; use App\Traits\UsersOnlineTrait; use Assada\Achievements\Achiever; @@ -74,6 +76,7 @@ * @property int $own_flushes * @property string|null $email_verified_at */ +#[ObservedBy([UserObserver::class])] class User extends Authenticatable implements MustVerifyEmail { use Achiever; diff --git a/app/Models/Wiki.php b/app/Models/Wiki.php index 6fcb0424ab..f9de3e1034 100644 --- a/app/Models/Wiki.php +++ b/app/Models/Wiki.php @@ -17,8 +17,8 @@ namespace App\Models; use App\Helpers\Bbcode; +use App\Helpers\MarkdownHelper; use App\Traits\Auditable; -use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Database\Eloquent\Model; /** @@ -49,9 +49,11 @@ public function category(): \Illuminate\Database\Eloquent\Relations\BelongsTo /** * Parse Content And Return Valid HTML. + * + * @throws \League\CommonMark\Exception\CommonMarkException */ public function getContentHtml(): string { - return Markdown::convert(htmlspecialchars_decode((new Bbcode())->parse($this->content, false)))->getContent(); + return new MarkdownHelper()->convertToHtml(htmlspecialchars_decode(new Bbcode()->parse($this->content, false))); } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 28e71d3a39..0cc1639660 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -19,8 +19,6 @@ use App\Helpers\ByteUnits; use App\Helpers\HiddenCaptcha; use App\Interfaces\ByteUnitsInterface; -use App\Models\User; -use App\Observers\UserObserver; use App\View\Composers\FooterComposer; use App\View\Composers\TopNavComposer; use Illuminate\Support\Facades\Blade; @@ -51,9 +49,6 @@ public function register(): void */ public function boot(): void { - // User Observer For Cache - User::observe(UserObserver::class); - // Hidden Captcha Blade::directive('hiddencaptcha', fn ($mustBeEmptyField = '_username') => \sprintf('', $mustBeEmptyField)); diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index aedc1ec5b5..2ecc631563 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -32,13 +32,11 @@ use App\Listeners\NotifyUserTicketWasAssigned; use App\Listeners\NotifyUserTicketWasClosed; use App\Listeners\NotifyUserTicketWasCreated; -use App\Listeners\PasswordProtectBackup; use App\Listeners\RegisteredListener; use Assada\Achievements\Event\Unlocked; use Illuminate\Auth\Events\Login; use Illuminate\Auth\Events\Registered; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; -use Spatie\Backup\Events\BackupZipWasCreated; class EventServiceProvider extends ServiceProvider { @@ -62,11 +60,6 @@ class EventServiceProvider extends ServiceProvider AchievementUnlocked::class, ], - // Backups System - BackupZipWasCreated::class => [ - PasswordProtectBackup::class, - ], - // Ticket System TicketCreated::class => [ NotifyUserTicketWasCreated::class, diff --git a/bun.lockb b/bun.lockb index c2a0bff279..98cb8d5039 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/composer.json b/composer.json index 22a6df2cc4..3116aa12b3 100644 --- a/composer.json +++ b/composer.json @@ -14,54 +14,51 @@ "ext-libxml": "*", "ext-zend-opcache": "*", "ext-zip": "*", - "assada/laravel-achievements": "^2.7", - "bjeavons/zxcvbn-php": "^1.4.1", + "assada/laravel-achievements": "^v2.7.0", + "bjeavons/zxcvbn-php": "^1.4.2", "doctrine/dbal": "^3.9.4", "gabrielelana/byte-units": "^0.5.0", - "graham-campbell/markdown": "^15.2", - "guzzlehttp/guzzle": "^7.9.2", - "hdvinnie/laravel-joypixel-emojis": "^v3.0.0", - "hdvinnie/laravel-security-headers": "^v3.0.0", + "hdvinnie/laravel-joypixel-emojis": "^v3.0.1", + "hdvinnie/laravel-security-headers": "^v3.0.1", "intervention/image": "^2.7.2", "joypixels/assets": "^v7.0.1", - "laravel/fortify": "1.20.0", - "laravel/framework": "^11.44.0", - "laravel/octane": "^2.6.0", - "laravel/scout": "^10.12.0", - "laravel/tinker": "^2.10.0", - "livewire/livewire": "^3.5.18", - "marcreichel/igdb-laravel": "^4.3.0", - "meilisearch/meilisearch-php": "^1.12.0", - "nesbot/carbon": "^2.73.0", + "laravel/fortify": "^v1.25.4", + "laravel/framework": "^v12.0.1", + "laravel/scout": "^v10.13.1", + "laravel/tinker": "^v2.10.1", + "league/commonmark": "^2.6", + "livewire/livewire": "^v3.6.0", + "marcreichel/igdb-laravel": "^5.2.0", + "meilisearch/meilisearch-php": "^v1.13.0", + "nesbot/carbon": "^3.8.6", "paragonie/constant_time_encoding": "^2.7.0", - "resend/resend-laravel": "^0.14.0", - "spatie/laravel-backup": "^8.8.2", - "spatie/laravel-cookie-consent": "^3.3.2", - "spatie/laravel-image-optimizer": "^1.8.0", - "spatie/ssl-certificate": "^2.6.8", - "symfony/dom-crawler": "^6.4.16", + "spatie/laravel-backup": "^9.2.7", + "spatie/laravel-cookie-consent": "^3.3.3", + "spatie/laravel-image-optimizer": "^1.8.2", + "spatie/ssl-certificate": "^2.6.9", + "symfony/dom-crawler": "^7.2.4", "theodorejb/polycast": "dev-master", - "vstelmakh/url-highlight": "^3.1.1" + "vstelmakh/url-highlight": "^v3.1.1" }, "require-dev": { - "barryvdh/laravel-debugbar": "^3.14.10", - "brianium/paratest": "^7.7", - "calebdw/larastan": "^3.1.7", - "calebdw/larastan-livewire": "^2.1.0", - "fakerphp/faker": "^1.24.1", - "jasonmccreary/laravel-test-assertions": "^2.4.1", - "laravel/pint": "v1.20.0", - "laravel/sail": "^1.40.0", + "barryvdh/laravel-debugbar": "^v3.15.2", + "brianium/paratest": "^v7.7.0", + "calebdw/larastan": "^v3.1.7", + "calebdw/larastan-livewire": "^v2.1.0", + "fakerphp/faker": "^v1.24.1", + "jasonmccreary/laravel-test-assertions": "^v2.6.0", + "laravel/pint": "^v1.21.0", + "laravel/sail": "^v1.41.0", "mockery/mockery": "^1.6.12", - "nunomaduro/collision": "^8.5.0", - "pestphp/pest": "^3.7.2", - "pestphp/pest-plugin-laravel": "^3.0", - "pestphp/pest-plugin-livewire": "^3.0", + "nunomaduro/collision": "^v8.6.1", + "pestphp/pest": "^3.7.4", + "pestphp/pest-plugin-laravel": "^v3.1.0", + "pestphp/pest-plugin-livewire": "^v3.0.0", "phpstan/phpstan": "^2.1.6", "phpunit/phpunit": "^11.5.3", - "ryoluo/sail-ssl": "^1.3.2", - "spatie/laravel-ignition": "^2.9.0", - "tomasvotruba/bladestan": "^0.11.0" + "ryoluo/sail-ssl": "^1.4.0", + "spatie/laravel-ignition": "^2.9.1", + "tomasvotruba/bladestan": "^0.11.1" }, "config": { "preferred-install": "dist", diff --git a/composer.lock b/composer.lock index 482a8660c9..22c66d530e 100644 --- a/composer.lock +++ b/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": "d5718fedbde475afdca6974c6c99b28e", + "content-hash": "93e6a9f9b0fcd920800b29c3392dfad8", "packages": [ { "name": "assada/laravel-achievements", @@ -67,28 +67,28 @@ }, { "name": "bacon/bacon-qr-code", - "version": "2.0.8", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", - "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f9cc1f52b5a463062251d666761178dbdb6b544f", + "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f", "shasum": "" }, "require": { "dasprid/enum": "^1.0.3", "ext-iconv": "*", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "phly/keep-a-changelog": "^2.1", - "phpunit/phpunit": "^7 | ^8 | ^9", - "spatie/phpunit-snapshot-assertions": "^4.2.9", - "squizlabs/php_codesniffer": "^3.4" + "phly/keep-a-changelog": "^2.12", + "phpunit/phpunit": "^10.5.11 || 11.0.4", + "spatie/phpunit-snapshot-assertions": "^5.1.5", + "squizlabs/php_codesniffer": "^3.9" }, "suggest": { "ext-imagick": "to generate QR code images" @@ -115,22 +115,22 @@ "homepage": "https://github.com/Bacon/BaconQrCode", "support": { "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + "source": "https://github.com/Bacon/BaconQrCode/tree/v3.0.1" }, - "time": "2022-12-07T17:46:57+00:00" + "time": "2024-10-01T13:55:55+00:00" }, { "name": "bjeavons/zxcvbn-php", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/bjeavons/zxcvbn-php.git", - "reference": "603e015f2c81118a8f42930140311d125eba6f8a" + "reference": "426f664501a0747beb8f3ee17ac30c7dd6327ffa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bjeavons/zxcvbn-php/zipball/603e015f2c81118a8f42930140311d125eba6f8a", - "reference": "603e015f2c81118a8f42930140311d125eba6f8a", + "url": "https://api.github.com/repos/bjeavons/zxcvbn-php/zipball/426f664501a0747beb8f3ee17ac30c7dd6327ffa", + "reference": "426f664501a0747beb8f3ee17ac30c7dd6327ffa", "shasum": "" }, "require": { @@ -171,22 +171,22 @@ ], "support": { "issues": "https://github.com/bjeavons/zxcvbn-php/issues", - "source": "https://github.com/bjeavons/zxcvbn-php/tree/1.4.1" + "source": "https://github.com/bjeavons/zxcvbn-php/tree/1.4.2" }, - "time": "2024-11-21T22:10:41+00:00" + "time": "2025-02-24T16:47:20+00:00" }, { "name": "brick/math", - "version": "0.12.1", + "version": "0.12.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", "shasum": "" }, "require": { @@ -195,7 +195,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^10.1", - "vimeo/psalm": "5.16.0" + "vimeo/psalm": "6.8.8" }, "type": "library", "autoload": { @@ -225,7 +225,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.1" + "source": "https://github.com/brick/math/tree/0.12.3" }, "funding": [ { @@ -233,7 +233,7 @@ "type": "github" } ], - "time": "2023-11-29T23:19:16+00:00" + "time": "2025-02-28T13:11:00+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -1196,86 +1196,6 @@ }, "time": "2018-01-11T10:40:03+00:00" }, - { - "name": "graham-campbell/markdown", - "version": "v15.2.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-Markdown.git", - "reference": "d594fc197b9068de5e234a890be361807a1ab34f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/d594fc197b9068de5e234a890be361807a1ab34f", - "reference": "d594fc197b9068de5e234a890be361807a1ab34f", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.75 || ^9.0 || ^10.0 || ^11.0", - "illuminate/filesystem": "^8.75 || ^9.0 || ^10.0 || ^11.0", - "illuminate/support": "^8.75 || ^9.0 || ^10.0 || ^11.0", - "illuminate/view": "^8.75 || ^9.0 || ^10.0 || ^11.0", - "league/commonmark": "^2.4.2", - "php": "^7.4.15 || ^8.0.2" - }, - "require-dev": { - "graham-campbell/analyzer": "^4.1", - "graham-campbell/testbench": "^6.1", - "mockery/mockery": "^1.6.6", - "phpunit/phpunit": "^9.6.17 || ^10.5.13" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "GrahamCampbell\\Markdown\\MarkdownServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "GrahamCampbell\\Markdown\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Markdown Is A CommonMark Wrapper For Laravel", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Laravel Markdown", - "Laravel-Markdown", - "common mark", - "commonmark", - "framework", - "laravel", - "markdown" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Laravel-Markdown/issues", - "source": "https://github.com/GrahamCampbell/Laravel-Markdown/tree/v15.2.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/markdown", - "type": "tidelift" - } - ], - "time": "2024-03-17T23:07:39+00:00" - }, { "name": "graham-campbell/result-type", "version": "v1.1.3", @@ -1665,16 +1585,16 @@ }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", "shasum": "" }, "require": { @@ -1731,7 +1651,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" }, "funding": [ { @@ -1747,24 +1667,24 @@ "type": "tidelift" } ], - "time": "2023-12-03T19:50:20+00:00" + "time": "2025-02-03T10:55:03+00:00" }, { "name": "hdvinnie/laravel-joypixel-emojis", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/HDVinnie/laravel-joypixel-emojis.git", - "reference": "a2aed4f268e79f3819b4ca597a2603decccfdf8a" + "reference": "f0dcdd07676c758e28bb51b531c3d6ca635ea00a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/HDVinnie/laravel-joypixel-emojis/zipball/a2aed4f268e79f3819b4ca597a2603decccfdf8a", - "reference": "a2aed4f268e79f3819b4ca597a2603decccfdf8a", + "url": "https://api.github.com/repos/HDVinnie/laravel-joypixel-emojis/zipball/f0dcdd07676c758e28bb51b531c3d6ca635ea00a", + "reference": "f0dcdd07676c758e28bb51b531c3d6ca635ea00a", "shasum": "" }, "require": { - "illuminate/support": "^6|^7|^8|^9|^10|^11", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "joypixels/emoji-toolkit": "^6", "php": "^7.4|^8.0" }, @@ -1810,32 +1730,32 @@ ], "support": { "issues": "https://github.com/HDVinnie/laravel-joypixel-emojis/issues", - "source": "https://github.com/HDVinnie/laravel-joypixel-emojis/tree/v3.0.0" + "source": "https://github.com/HDVinnie/laravel-joypixel-emojis/tree/v3.0.1" }, - "time": "2024-03-13T15:40:34+00:00" + "time": "2025-02-28T02:52:12+00:00" }, { "name": "hdvinnie/laravel-security-headers", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/HDVinnie/laravel-security-headers.git", - "reference": "bee72132e19197a0528de673b0e72fb3d11374f9" + "reference": "ad45476b5e7ebff24f0537b061c1806ee54b5fb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/HDVinnie/laravel-security-headers/zipball/bee72132e19197a0528de673b0e72fb3d11374f9", - "reference": "bee72132e19197a0528de673b0e72fb3d11374f9", + "url": "https://api.github.com/repos/HDVinnie/laravel-security-headers/zipball/ad45476b5e7ebff24f0537b061c1806ee54b5fb9", + "reference": "ad45476b5e7ebff24f0537b061c1806ee54b5fb9", "shasum": "" }, "require": { - "illuminate/support": "^6|^7|^8|^9|^10|^11", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.4|^8.0" }, "require-dev": { "ext-json": "*", "ext-xdebug": "*", - "orchestra/testbench": "^3.1|^4.0|^5.0|^6.0|^7.0|^8.0" + "orchestra/testbench": "^3.1|^4.0|^5.0|^6.0|^7.0|^8.0|^9.0|^10.0" }, "suggest": { "friendsofphp/php-cs-fixer": "Coding style fixer", @@ -1887,9 +1807,9 @@ ], "support": { "issues": "https://github.com/HDVinnie/laravel-security-headers/issues", - "source": "https://github.com/HDVinnie/laravel-security-headers/tree/v3.0.0" + "source": "https://github.com/HDVinnie/laravel-security-headers/tree/v3.0.1" }, - "time": "2024-03-13T15:44:35+00:00" + "time": "2025-02-28T02:47:50+00:00" }, { "name": "intervention/image", @@ -2064,120 +1984,33 @@ }, "time": "2021-07-08T22:11:29+00:00" }, - { - "name": "laminas/laminas-diactoros", - "version": "3.5.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "143a16306602ce56b8b092a7914fef03c37f9ed2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/143a16306602ce56b8b092a7914fef03c37f9ed2", - "reference": "143a16306602ce56b8b092a7914fef03c37f9ed2", - "shasum": "" - }, - "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/http-factory": "^1.1", - "psr/http-message": "^1.1 || ^2.0" - }, - "conflict": { - "amphp/amp": "<2.6.4" - }, - "provide": { - "psr/http-factory-implementation": "^1.0", - "psr/http-message-implementation": "^1.1 || ^2.0" - }, - "require-dev": { - "ext-curl": "*", - "ext-dom": "*", - "ext-gd": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^2.2.0", - "laminas/laminas-coding-standard": "~2.5.0", - "php-http/psr7-integration-tests": "^1.4.0", - "phpunit/phpunit": "^10.5.36", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\Diactoros", - "config-provider": "Laminas\\Diactoros\\ConfigProvider" - } - }, - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" - ], - "psr-4": { - "Laminas\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-17", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-diactoros/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-diactoros/issues", - "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", - "source": "https://github.com/laminas/laminas-diactoros" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2024-10-14T11:59:49+00:00" - }, { "name": "laravel/fortify", - "version": "v1.20.0", + "version": "v1.25.4", "source": { "type": "git", "url": "https://github.com/laravel/fortify.git", - "reference": "587a55f906ae4f8448a19019a4b2ee7002d5c001" + "reference": "f185600e2d3a861834ad00ee3b7863f26ac25d3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/fortify/zipball/587a55f906ae4f8448a19019a4b2ee7002d5c001", - "reference": "587a55f906ae4f8448a19019a4b2ee7002d5c001", + "url": "https://api.github.com/repos/laravel/fortify/zipball/f185600e2d3a861834ad00ee3b7863f26ac25d3f", + "reference": "f185600e2d3a861834ad00ee3b7863f26ac25d3f", "shasum": "" }, "require": { - "bacon/bacon-qr-code": "^2.0", + "bacon/bacon-qr-code": "^3.0", "ext-json": "*", - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "php": "^8.1", - "pragmarx/google2fa": "^8.0" + "pragmarx/google2fa": "^8.0", + "symfony/console": "^6.0|^7.0" }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^8.16|^9.0", + "orchestra/testbench": "^8.16|^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.4" + "phpunit/phpunit": "^10.4|^11.3" }, "type": "library", "extra": { @@ -2214,24 +2047,24 @@ "issues": "https://github.com/laravel/fortify/issues", "source": "https://github.com/laravel/fortify" }, - "time": "2024-01-15T20:07:11+00:00" + "time": "2025-01-26T19:34:46+00:00" }, { "name": "laravel/framework", - "version": "v11.44.0", + "version": "v12.0.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e9a33da34815ac1ed46c7e4c477a775f4592f0a7" + "reference": "d99e2385a6d4324782d52f4423891966425641be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e9a33da34815ac1ed46c7e4c477a775f4592f0a7", - "reference": "e9a33da34815ac1ed46c7e4c477a775f4592f0a7", + "url": "https://api.github.com/repos/laravel/framework/zipball/d99e2385a6d4324782d52f4423891966425641be", + "reference": "d99e2385a6d4324782d52f4423891966425641be", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "brick/math": "^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", @@ -2246,32 +2079,32 @@ "fruitcake/php-cors": "^1.3", "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", + "laravel/prompts": "^0.3.0", "laravel/serializable-closure": "^1.3|^2.0", "league/commonmark": "^2.6", "league/flysystem": "^3.25.1", "league/flysystem-local": "^3.25.1", "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.6|^3.8.4", + "nesbot/carbon": "^3.8.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.3", - "symfony/error-handler": "^7.0.3", - "symfony/finder": "^7.0.3", + "symfony/console": "^7.2.0", + "symfony/error-handler": "^7.2.0", + "symfony/finder": "^7.2.0", "symfony/http-foundation": "^7.2.0", - "symfony/http-kernel": "^7.0.3", - "symfony/mailer": "^7.0.3", - "symfony/mime": "^7.0.3", + "symfony/http-kernel": "^7.2.0", + "symfony/mailer": "^7.2.0", + "symfony/mime": "^7.2.0", "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", + "symfony/process": "^7.2.0", + "symfony/routing": "^7.2.0", + "symfony/uid": "^7.2.0", + "symfony/var-dumper": "^7.2.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.6.1", "voku/portable-ascii": "^2.0.2" @@ -2335,17 +2168,17 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.9.4", + "orchestra/testbench-core": "^10.0", "pda/pheanstalk": "^5.0.6", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^10.5.35|^11.3.6|^12.0.1", + "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", "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" + "symfony/cache": "^7.2.0", + "symfony/http-client": "^7.2.0", + "symfony/psr-http-message-bridge": "^7.2.0", + "symfony/translation": "^7.2.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", @@ -2371,22 +2204,22 @@ "mockery/mockery": "Required to use mocking (^1.6).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.3.6|^12.0.1).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", "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).", - "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)." + "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "11.x-dev" + "dev-master": "12.x-dev" } }, "autoload": { @@ -2429,110 +2262,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-02-24T13:08:54+00:00" - }, - { - "name": "laravel/octane", - "version": "v2.6.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/octane.git", - "reference": "b8b11ef25600baa835d364e724f2e948dc1eb88b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/octane/zipball/b8b11ef25600baa835d364e724f2e948dc1eb88b", - "reference": "b8b11ef25600baa835d364e724f2e948dc1eb88b", - "shasum": "" - }, - "require": { - "laminas/laminas-diactoros": "^3.0", - "laravel/framework": "^10.10.1|^11.0", - "laravel/prompts": "^0.1.24|^0.2.0|^0.3.0", - "laravel/serializable-closure": "^1.3|^2.0", - "nesbot/carbon": "^2.66.0|^3.0", - "php": "^8.1.0", - "symfony/console": "^6.0|^7.0", - "symfony/psr-http-message-bridge": "^2.2.0|^6.4|^7.0" - }, - "conflict": { - "spiral/roadrunner": "<2023.1.0", - "spiral/roadrunner-cli": "<2.6.0", - "spiral/roadrunner-http": "<3.3.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.6.1", - "inertiajs/inertia-laravel": "^0.6.9|^1.0", - "laravel/scout": "^10.2.1", - "laravel/socialite": "^5.6.1", - "livewire/livewire": "^2.12.3|^3.0", - "mockery/mockery": "^1.5.1", - "nunomaduro/collision": "^6.4.0|^7.5.2|^8.0", - "orchestra/testbench": "^8.21|^9.0", - "phpstan/phpstan": "^1.10.15", - "phpunit/phpunit": "^10.4", - "spiral/roadrunner-cli": "^2.6.0", - "spiral/roadrunner-http": "^3.3.0" - }, - "bin": [ - "bin/roadrunner-worker", - "bin/swoole-server" - ], - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Octane": "Laravel\\Octane\\Facades\\Octane" - }, - "providers": [ - "Laravel\\Octane\\OctaneServiceProvider" - ] - }, - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Octane\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Supercharge your Laravel application's performance.", - "keywords": [ - "frankenphp", - "laravel", - "octane", - "roadrunner", - "swoole" - ], - "support": { - "issues": "https://github.com/laravel/octane/issues", - "source": "https://github.com/laravel/octane" - }, - "time": "2024-11-25T21:47:18+00:00" + "time": "2025-02-24T13:31:23+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.3", + "version": "v0.3.5", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea" + "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", - "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", + "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", + "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", "shasum": "" }, "require": { @@ -2546,7 +2289,7 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { - "illuminate/collections": "^10.0|^11.0", + "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", @@ -2576,32 +2319,32 @@ "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.3" + "source": "https://github.com/laravel/prompts/tree/v0.3.5" }, - "time": "2024-12-30T15:53:31+00:00" + "time": "2025-02-11T13:34:40+00:00" }, { "name": "laravel/scout", - "version": "v10.12.0", + "version": "v10.13.1", "source": { "type": "git", "url": "https://github.com/laravel/scout.git", - "reference": "0002cee68236e298b10122cf9e01c17f4a88948d" + "reference": "577535cd93474e4c915e7469cbfa597c41aef8e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/scout/zipball/0002cee68236e298b10122cf9e01c17f4a88948d", - "reference": "0002cee68236e298b10122cf9e01c17f4a88948d", + "url": "https://api.github.com/repos/laravel/scout/zipball/577535cd93474e4c915e7469cbfa597c41aef8e2", + "reference": "577535cd93474e4c915e7469cbfa597c41aef8e2", "shasum": "" }, "require": { - "illuminate/bus": "^9.0|^10.0|^11.0", - "illuminate/contracts": "^9.0|^10.0|^11.0", - "illuminate/database": "^9.0|^10.0|^11.0", - "illuminate/http": "^9.0|^10.0|^11.0", - "illuminate/pagination": "^9.0|^10.0|^11.0", - "illuminate/queue": "^9.0|^10.0|^11.0", - "illuminate/support": "^9.0|^10.0|^11.0", + "illuminate/bus": "^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.0|^10.0|^11.0|^12.0", + "illuminate/database": "^9.0|^10.0|^11.0|^12.0", + "illuminate/http": "^9.0|^10.0|^11.0|^12.0", + "illuminate/pagination": "^9.0|^10.0|^11.0|^12.0", + "illuminate/queue": "^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^9.0|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0" }, @@ -2612,7 +2355,7 @@ "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", + "orchestra/testbench": "^7.31|^8.11|^9.0|^10.0", "php-http/guzzle7-adapter": "^1.0", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.3|^10.4", @@ -2659,29 +2402,29 @@ "issues": "https://github.com/laravel/scout/issues", "source": "https://github.com/laravel/scout" }, - "time": "2025-01-14T15:53:41+00:00" + "time": "2025-02-18T18:39:33+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.1", + "version": "v2.0.3", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8" + "reference": "f379c13663245f7aa4512a7869f62eb14095f23f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/613b2d4998f85564d40497e05e89cb6d9bd1cbe8", - "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f379c13663245f7aa4512a7869f62eb14095f23f", + "reference": "f379c13663245f7aa4512a7869f62eb14095f23f", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36", + "pestphp/pest": "^2.36|^3.0", "phpstan/phpstan": "^2.0", "symfony/var-dumper": "^6.2.0|^7.0.0" }, @@ -2720,26 +2463,26 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-12-16T15:26:28+00:00" + "time": "2025-02-11T15:03:05+00:00" }, { "name": "laravel/tinker", - "version": "v2.10.0", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.11.1|^0.12.0", "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" @@ -2747,10 +2490,10 @@ "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." }, "type": "library", "extra": { @@ -2784,9 +2527,9 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.1" }, - "time": "2024-09-23T13:32:56+00:00" + "time": "2025-01-27T14:24:01+00:00" }, { "name": "league/commonmark", @@ -3341,23 +3084,23 @@ }, { "name": "livewire/livewire", - "version": "v3.5.18", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "62f0fa6b340a467c25baa590a567d9a134b357da" + "reference": "4c66b569cb729ba9b2f4a3c4e79f50fd8f2b71d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/62f0fa6b340a467c25baa590a567d9a134b357da", - "reference": "62f0fa6b340a467c25baa590a567d9a134b357da", + "url": "https://api.github.com/repos/livewire/livewire/zipball/4c66b569cb729ba9b2f4a3c4e79f50fd8f2b71d1", + "reference": "4c66b569cb729ba9b2f4a3c4e79f50fd8f2b71d1", "shasum": "" }, "require": { - "illuminate/database": "^10.0|^11.0", - "illuminate/routing": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "illuminate/validation": "^10.0|^11.0", + "illuminate/database": "^10.0|^11.0|^12.0", + "illuminate/routing": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "illuminate/validation": "^10.0|^11.0|^12.0", "laravel/prompts": "^0.1.24|^0.2|^0.3", "league/mime-type-detection": "^1.9", "php": "^8.1", @@ -3366,11 +3109,11 @@ }, "require-dev": { "calebporzio/sushi": "^2.1", - "laravel/framework": "^10.15.0|^11.0", + "laravel/framework": "^10.15.0|^11.0|^12.0", "mockery/mockery": "^1.3.1", - "orchestra/testbench": "^8.21.0|^9.0", - "orchestra/testbench-dusk": "^8.24|^9.1", - "phpunit/phpunit": "^10.4", + "orchestra/testbench": "^8.21.0|^9.0|^10.0", + "orchestra/testbench-dusk": "^8.24|^9.1|^10.0", + "phpunit/phpunit": "^10.4|^11.5", "psy/psysh": "^0.11.22|^0.12" }, "type": "library", @@ -3405,7 +3148,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.5.18" + "source": "https://github.com/livewire/livewire/tree/v3.6.0" }, "funding": [ { @@ -3413,37 +3156,37 @@ "type": "github" } ], - "time": "2024-12-23T15:05:02+00:00" + "time": "2025-02-26T00:57:32+00:00" }, { "name": "marcreichel/igdb-laravel", - "version": "4.3.0", + "version": "5.2.0", "source": { "type": "git", "url": "https://github.com/marcreichel/igdb-laravel.git", - "reference": "46c385e2d9c754e8cac35f09f356ea1a5007af18" + "reference": "fe760947ad0f59b0351924617774b04113fc8f05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/marcreichel/igdb-laravel/zipball/46c385e2d9c754e8cac35f09f356ea1a5007af18", - "reference": "46c385e2d9c754e8cac35f09f356ea1a5007af18", + "url": "https://api.github.com/repos/marcreichel/igdb-laravel/zipball/fe760947ad0f59b0351924617774b04113fc8f05", + "reference": "fe760947ad0f59b0351924617774b04113fc8f05", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/guzzle": "~6.0|~7.0", - "illuminate/support": "^9.0|^10.0|^11.0", + "illuminate/support": "^11.0|^12.0", "nesbot/carbon": "^2.53.1|^3.0", - "php": "^8.1" + "php": "^8.2" }, "require-dev": { - "larastan/larastan": "^2.9.2", + "larastan/larastan": "^3.0.2", "laravel/pint": "^1.13", - "nunomaduro/collision": "^5.3|^6.1|^7.0|^8.0", - "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", - "pestphp/pest": "^2", - "pestphp/pest-plugin-type-coverage": "^2.8.3", - "phpunit/phpunit": "^9.5.4 || ^10.0.0", + "nunomaduro/collision": "^8.0", + "orchestra/testbench": "^9.0|^10.0", + "pestphp/pest": "^3.7.4", + "pestphp/pest-plugin-type-coverage": "^3.2.3", + "rector/rector": "^2.0.7", "roave/security-advisories": "dev-latest" }, "type": "library", @@ -3480,9 +3223,9 @@ ], "support": { "issues": "https://github.com/marcreichel/igdb-laravel/issues", - "source": "https://github.com/marcreichel/igdb-laravel/tree/4.3.0" + "source": "https://github.com/marcreichel/igdb-laravel/tree/5.2.0" }, - "time": "2024-07-01T09:48:24+00:00" + "time": "2025-02-28T07:53:39+00:00" }, { "name": "masterminds/html5", @@ -3553,16 +3296,16 @@ }, { "name": "meilisearch/meilisearch-php", - "version": "v1.12.0", + "version": "v1.13.0", "source": { "type": "git", "url": "https://github.com/meilisearch/meilisearch-php.git", - "reference": "78879c29cb2eb1c9e3cf09707b87d8a369a4579d" + "reference": "16a3c31ddbe8eaec3aa1e1da3bada906d57dfc66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/78879c29cb2eb1c9e3cf09707b87d8a369a4579d", - "reference": "78879c29cb2eb1c9e3cf09707b87d8a369a4579d", + "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/16a3c31ddbe8eaec3aa1e1da3bada906d57dfc66", + "reference": "16a3c31ddbe8eaec3aa1e1da3bada906d57dfc66", "shasum": "" }, "require": { @@ -3614,9 +3357,9 @@ ], "support": { "issues": "https://github.com/meilisearch/meilisearch-php/issues", - "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.12.0" + "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.13.0" }, - "time": "2024-12-23T11:46:42+00:00" + "time": "2025-02-17T12:48:45+00:00" }, { "name": "monolog/monolog", @@ -3723,42 +3466,41 @@ }, { "name": "nesbot/carbon", - "version": "2.73.0", + "version": "3.8.6", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" + "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", - "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ff2f20cf83bd4d503720632ce8a426dc747bf7fd", + "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd", "shasum": "" }, "require": { - "carbonphp/carbon-doctrine-types": "*", + "carbonphp/carbon-doctrine-types": "<100.0", "ext-json": "*", - "php": "^7.1.8 || ^8.0", + "php": "^8.1", "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", - "doctrine/orm": "^2.7 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "<6", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" }, "bin": [ "bin/carbon" @@ -3809,8 +3551,8 @@ ], "support": { "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" }, "funding": [ { @@ -3826,7 +3568,7 @@ "type": "tidelift" } ], - "time": "2025-01-08T20:10:23+00:00" + "time": "2025-02-20T17:33:38+00:00" }, { "name": "nette/schema", @@ -4980,16 +4722,16 @@ }, { "name": "ramsey/collection", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", + "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", "shasum": "" }, "require": { @@ -4997,25 +4739,22 @@ }, "require-dev": { "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", "extra": { @@ -5053,19 +4792,9 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/ramsey/collection/tree/2.1.0" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" + "time": "2025-03-02T04:48:29+00:00" }, { "name": "ramsey/uuid", @@ -5159,144 +4888,18 @@ ], "time": "2024-04-27T21:32:50+00:00" }, - { - "name": "resend/resend-laravel", - "version": "v0.14.0", - "source": { - "type": "git", - "url": "https://github.com/resend/resend-laravel.git", - "reference": "74a5a00efc17935918b6f20f2eb4553ecad3b164" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/resend/resend-laravel/zipball/74a5a00efc17935918b6f20f2eb4553ecad3b164", - "reference": "74a5a00efc17935918b6f20f2eb4553ecad3b164", - "shasum": "" - }, - "require": { - "illuminate/http": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "php": "^8.1", - "resend/resend-php": "^0.12.0", - "symfony/mailer": "^6.2|^7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.14", - "mockery/mockery": "^1.5", - "orchestra/testbench": "^8.17|^9.0", - "pestphp/pest": "^2.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Resend\\Laravel\\ResendServiceProvider" - ] - }, - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Resend\\Laravel\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Resend and contributors", - "homepage": "https://github.com/resend/resend-laravel/contributors" - } - ], - "description": "Resend for Laravel", - "homepage": "https://resend.com/", - "keywords": [ - "api", - "client", - "laravel", - "php", - "resend", - "sdk" - ], - "support": { - "issues": "https://github.com/resend/resend-laravel/issues", - "source": "https://github.com/resend/resend-laravel/tree/v0.14.0" - }, - "time": "2024-07-18T21:55:31+00:00" - }, - { - "name": "resend/resend-php", - "version": "v0.12.0", - "source": { - "type": "git", - "url": "https://github.com/resend/resend-php.git", - "reference": "37fb79bb8160ce2de521bf37484ba59e89236521" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/resend/resend-php/zipball/37fb79bb8160ce2de521bf37484ba59e89236521", - "reference": "37fb79bb8160ce2de521bf37484ba59e89236521", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^7.5", - "php": "^8.1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.13", - "mockery/mockery": "^1.6", - "pestphp/pest": "^2.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Resend.php" - ], - "psr-4": { - "Resend\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Resend and contributors", - "homepage": "https://github.com/resend/resend-php/contributors" - } - ], - "description": "Resend PHP library.", - "homepage": "https://resend.com/", - "keywords": [ - "api", - "client", - "php", - "resend", - "sdk" - ], - "support": { - "issues": "https://github.com/resend/resend-php/issues", - "source": "https://github.com/resend/resend-php/tree/v0.12.0" - }, - "time": "2024-03-04T03:16:28+00:00" - }, { "name": "spatie/db-dumper", - "version": "3.7.1", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/spatie/db-dumper.git", - "reference": "55d4d6710e1ab18c1e7ce2b22b8ad4bea2a30016" + "reference": "91e1fd4dc000aefc9753cda2da37069fc996baee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/db-dumper/zipball/55d4d6710e1ab18c1e7ce2b22b8ad4bea2a30016", - "reference": "55d4d6710e1ab18c1e7ce2b22b8ad4bea2a30016", + "url": "https://api.github.com/repos/spatie/db-dumper/zipball/91e1fd4dc000aefc9753cda2da37069fc996baee", + "reference": "91e1fd4dc000aefc9753cda2da37069fc996baee", "shasum": "" }, "require": { @@ -5334,7 +4937,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/db-dumper/tree/3.7.1" + "source": "https://github.com/spatie/db-dumper/tree/3.8.0" }, "funding": [ { @@ -5346,7 +4949,7 @@ "type": "github" } ], - "time": "2024-11-18T14:54:31+00:00" + "time": "2025-02-14T15:04:22+00:00" }, { "name": "spatie/image-optimizer", @@ -5405,29 +5008,29 @@ }, { "name": "spatie/laravel-backup", - "version": "8.8.2", + "version": "9.2.9", "source": { "type": "git", "url": "https://github.com/spatie/laravel-backup.git", - "reference": "5b672713283703a74c629ccd67b1d77eb57e24b9" + "reference": "997c781a38bc701ab7623954b2e0438680caa0bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/5b672713283703a74c629ccd67b1d77eb57e24b9", - "reference": "5b672713283703a74c629ccd67b1d77eb57e24b9", + "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/997c781a38bc701ab7623954b2e0438680caa0bf", + "reference": "997c781a38bc701ab7623954b2e0438680caa0bf", "shasum": "" }, "require": { "ext-zip": "^1.14.0", - "illuminate/console": "^10.10.0|^11.0", - "illuminate/contracts": "^10.10.0|^11.0", - "illuminate/events": "^10.10.0|^11.0", - "illuminate/filesystem": "^10.10.0|^11.0", - "illuminate/notifications": "^10.10.0|^11.0", - "illuminate/support": "^10.10.0|^11.0", + "illuminate/console": "^10.10.0|^11.0|^12.0", + "illuminate/contracts": "^10.10.0|^11.0|^12.0", + "illuminate/events": "^10.10.0|^11.0|^12.0", + "illuminate/filesystem": "^10.10.0|^11.0|^12.0", + "illuminate/notifications": "^10.10.0|^11.0|^12.0", + "illuminate/support": "^10.10.0|^11.0|^12.0", "league/flysystem": "^3.0", - "php": "^8.1", - "spatie/db-dumper": "^3.0", + "php": "^8.2", + "spatie/db-dumper": "^3.7", "spatie/laravel-package-tools": "^1.6.2", "spatie/laravel-signal-aware-command": "^1.2|^2.0", "spatie/temporary-directory": "^2.0", @@ -5437,15 +5040,16 @@ "require-dev": { "composer-runtime-api": "^2.0", "ext-pcntl": "*", - "larastan/larastan": "^2.7.0", + "larastan/larastan": "^2.7.0|^3.0", "laravel/slack-notification-channel": "^2.5|^3.0", "league/flysystem-aws-s3-v3": "^2.0|^3.0", "mockery/mockery": "^1.4", - "orchestra/testbench": "^8.0|^9.0", - "pestphp/pest": "^1.20|^2.0", + "orchestra/testbench": "^8.0|^9.0|^10.0", + "pestphp/pest": "^1.20|^2.0|^3.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.1" + "phpstan/phpstan-phpunit": "^1.1", + "rector/rector": "^1.1" }, "suggest": { "laravel/slack-notification-channel": "Required for sending notifications via Slack" @@ -5488,7 +5092,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-backup/issues", - "source": "https://github.com/spatie/laravel-backup/tree/8.8.2" + "source": "https://github.com/spatie/laravel-backup/tree/9.2.9" }, "funding": [ { @@ -5500,33 +5104,33 @@ "type": "other" } ], - "time": "2024-08-07T11:07:52+00:00" + "time": "2025-03-03T12:10:03+00:00" }, { "name": "spatie/laravel-cookie-consent", - "version": "3.3.2", + "version": "3.3.3", "source": { "type": "git", "url": "https://github.com/spatie/laravel-cookie-consent.git", - "reference": "b03970a5e24f49fa9bc83a3de9cd8d6f825fc1f4" + "reference": "fa375d4c9cae8745137ec3249e1b8e35d911963a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-cookie-consent/zipball/b03970a5e24f49fa9bc83a3de9cd8d6f825fc1f4", - "reference": "b03970a5e24f49fa9bc83a3de9cd8d6f825fc1f4", + "url": "https://api.github.com/repos/spatie/laravel-cookie-consent/zipball/fa375d4c9cae8745137ec3249e1b8e35d911963a", + "reference": "fa375d4c9cae8745137ec3249e1b8e35d911963a", "shasum": "" }, "require": { - "illuminate/cookie": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "illuminate/view": "^10.0|^11.0", + "illuminate/cookie": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "illuminate/view": "^10.0|^11.0|^12.0", "php": "^8.2", "spatie/laravel-package-tools": "^1.9" }, "require-dev": { "fakerphp/faker": "^1.9", - "orchestra/testbench": "^8.0|^9.0", - "pestphp/pest": "^2.34" + "orchestra/testbench": "^8.0|^9.0|^10.0", + "pestphp/pest": "^2.34|^3.7" }, "type": "library", "extra": { @@ -5570,7 +5174,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-cookie-consent/tree/3.3.2" + "source": "https://github.com/spatie/laravel-cookie-consent/tree/3.3.3" }, "funding": [ { @@ -5578,30 +5182,30 @@ "type": "custom" } ], - "time": "2024-08-07T11:06:59+00:00" + "time": "2025-02-21T13:11:14+00:00" }, { "name": "spatie/laravel-image-optimizer", - "version": "1.8.0", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-image-optimizer.git", - "reference": "024752cba691fee3cd1800000b6aa3da3b8b2474" + "reference": "6681a48097009bba1800f0215190816df22fe116" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-image-optimizer/zipball/024752cba691fee3cd1800000b6aa3da3b8b2474", - "reference": "024752cba691fee3cd1800000b6aa3da3b8b2474", + "url": "https://api.github.com/repos/spatie/laravel-image-optimizer/zipball/6681a48097009bba1800f0215190816df22fe116", + "reference": "6681a48097009bba1800f0215190816df22fe116", "shasum": "" }, "require": { - "laravel/framework": "^8.0|^9.0|^10.0|^11.0", + "laravel/framework": "^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^8.0", "spatie/image-optimizer": "^1.2.0" }, "require-dev": { - "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.4|^10.5" + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0", + "phpunit/phpunit": "^9.4|^10.5|^11.5.3" }, "type": "library", "extra": { @@ -5638,7 +5242,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-image-optimizer/tree/1.8.0" + "source": "https://github.com/spatie/laravel-image-optimizer/tree/1.8.2" }, "funding": [ { @@ -5646,31 +5250,31 @@ "type": "custom" } ], - "time": "2024-02-29T10:55:08+00:00" + "time": "2025-02-21T14:01:59+00:00" }, { "name": "spatie/laravel-package-tools", - "version": "1.18.0", + "version": "1.19.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "8332205b90d17164913244f4a8e13ab7e6761d29" + "reference": "1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/8332205b90d17164913244f4a8e13ab7e6761d29", - "reference": "8332205b90d17164913244f4a8e13ab7e6761d29", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa", + "reference": "1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa", "shasum": "" }, "require": { - "illuminate/contracts": "^9.28|^10.0|^11.0", + "illuminate/contracts": "^9.28|^10.0|^11.0|^12.0", "php": "^8.0" }, "require-dev": { "mockery/mockery": "^1.5", - "orchestra/testbench": "^7.7|^8.0|^9.0", - "pestphp/pest": "^1.22|^2", - "phpunit/phpunit": "^9.5.24|^10.5", + "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0", + "pestphp/pest": "^1.23|^2.1|^3.1", + "phpunit/phpunit": "^9.5.24|^10.5|^11.5", "spatie/pest-plugin-test-time": "^1.1|^2.2" }, "type": "library", @@ -5698,7 +5302,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.18.0" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.19.0" }, "funding": [ { @@ -5706,24 +5310,24 @@ "type": "github" } ], - "time": "2024-12-30T13:13:39+00:00" + "time": "2025-02-06T14:58:20+00:00" }, { "name": "spatie/laravel-signal-aware-command", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-signal-aware-command.git", - "reference": "49a5e671c3a3fd992187a777d01385fc6a84759d" + "reference": "8e8a226ed7fb45302294878ef339e75ffa9a878d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-signal-aware-command/zipball/49a5e671c3a3fd992187a777d01385fc6a84759d", - "reference": "49a5e671c3a3fd992187a777d01385fc6a84759d", + "url": "https://api.github.com/repos/spatie/laravel-signal-aware-command/zipball/8e8a226ed7fb45302294878ef339e75ffa9a878d", + "reference": "8e8a226ed7fb45302294878ef339e75ffa9a878d", "shasum": "" }, "require": { - "illuminate/contracts": "^11.0", + "illuminate/contracts": "^11.0|^12.0", "php": "^8.2", "spatie/laravel-package-tools": "^1.4.3", "symfony/console": "^7.0" @@ -5732,8 +5336,8 @@ "brianium/paratest": "^6.2|^7.0", "ext-pcntl": "*", "nunomaduro/collision": "^5.3|^6.0|^7.0|^8.0", - "orchestra/testbench": "^9.0", - "pestphp/pest-plugin-laravel": "^1.3|^2.0", + "orchestra/testbench": "^9.0|^10.0", + "pestphp/pest-plugin-laravel": "^1.3|^2.0|^3.0", "phpunit/phpunit": "^9.5|^10|^11", "spatie/laravel-ray": "^1.17" }, @@ -5773,7 +5377,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-signal-aware-command/issues", - "source": "https://github.com/spatie/laravel-signal-aware-command/tree/2.0.0" + "source": "https://github.com/spatie/laravel-signal-aware-command/tree/2.1.0" }, "funding": [ { @@ -5781,7 +5385,7 @@ "type": "github" } ], - "time": "2024-02-05T13:37:25+00:00" + "time": "2025-02-14T09:55:51+00:00" }, { "name": "spatie/macroable", @@ -5835,16 +5439,16 @@ }, { "name": "spatie/ssl-certificate", - "version": "2.6.8", + "version": "2.6.9", "source": { "type": "git", "url": "https://github.com/spatie/ssl-certificate.git", - "reference": "47f35ef3836cadd2a1314a8a0d3d0b3c1a5e8f6e" + "reference": "ce70b62643e338a4e5a9bcc85a84f3485a5a9f2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ssl-certificate/zipball/47f35ef3836cadd2a1314a8a0d3d0b3c1a5e8f6e", - "reference": "47f35ef3836cadd2a1314a8a0d3d0b3c1a5e8f6e", + "url": "https://api.github.com/repos/spatie/ssl-certificate/zipball/ce70b62643e338a4e5a9bcc85a84f3485a5a9f2c", + "reference": "ce70b62643e338a4e5a9bcc85a84f3485a5a9f2c", "shasum": "" }, "require": { @@ -5887,7 +5491,8 @@ "ssl-certificate" ], "support": { - "source": "https://github.com/spatie/ssl-certificate/tree/2.6.8" + "issues": "https://github.com/spatie/ssl-certificate/issues", + "source": "https://github.com/spatie/ssl-certificate/tree/2.6.9" }, "funding": [ { @@ -5899,7 +5504,7 @@ "type": "other" } ], - "time": "2024-09-20T13:11:59+00:00" + "time": "2025-01-31T15:06:47+00:00" }, { "name": "spatie/temporary-directory", @@ -5939,28 +5544,102 @@ "role": "Developer" } ], - "description": "Easily create, use and destroy temporary directories", - "homepage": "https://github.com/spatie/temporary-directory", + "description": "Easily create, use and destroy temporary directories", + "homepage": "https://github.com/spatie/temporary-directory", + "keywords": [ + "php", + "spatie", + "temporary-directory" + ], + "support": { + "issues": "https://github.com/spatie/temporary-directory/issues", + "source": "https://github.com/spatie/temporary-directory/tree/2.3.0" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-01-13T13:04:43+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", "keywords": [ - "php", - "spatie", - "temporary-directory" + "clock", + "psr20", + "time" ], "support": { - "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/2.3.0" + "source": "https://github.com/symfony/clock/tree/v7.2.0" }, "funding": [ { - "url": "https://spatie.be/open-source/support-us", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/spatie", + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2025-01-13T13:04:43+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/console", @@ -6189,26 +5868,26 @@ }, { "name": "symfony/dom-crawler", - "version": "v6.4.16", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "4304e6ad5c894a9c72831ad459f627bfd35d766d" + "reference": "19cc7b08efe9ad1ab1b56e0948e8d02e15ed3ef7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4304e6ad5c894a9c72831ad459f627bfd35d766d", - "reference": "4304e6ad5c894a9c72831ad459f627bfd35d766d", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/19cc7b08efe9ad1ab1b56e0948e8d02e15ed3ef7", + "reference": "19cc7b08efe9ad1ab1b56e0948e8d02e15ed3ef7", "shasum": "" }, "require": { "masterminds/html5": "^2.6", - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0|^7.0" + "symfony/css-selector": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6236,7 +5915,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.16" + "source": "https://github.com/symfony/dom-crawler/tree/v7.2.4" }, "funding": [ { @@ -6252,20 +5931,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T15:06:22+00:00" + "time": "2025-02-17T15:53:07+00:00" }, { "name": "symfony/error-handler", - "version": "v7.2.1", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "6150b89186573046167796fa5f3f76601d5145f8" + "reference": "aabf79938aa795350c07ce6464dd1985607d95d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/6150b89186573046167796fa5f3f76601d5145f8", - "reference": "6150b89186573046167796fa5f3f76601d5145f8", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/aabf79938aa795350c07ce6464dd1985607d95d5", + "reference": "aabf79938aa795350c07ce6464dd1985607d95d5", "shasum": "" }, "require": { @@ -6311,7 +5990,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.2.1" + "source": "https://github.com/symfony/error-handler/tree/v7.2.4" }, "funding": [ { @@ -6327,7 +6006,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:50:44+00:00" + "time": "2025-02-02T20:27:07+00:00" }, { "name": "symfony/event-dispatcher", @@ -6551,16 +6230,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.2.2", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588" + "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62d1a43796ca3fea3f83a8470dfe63a4af3bc588", - "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee1b504b8926198be89d05e5b6fc4c3810c090f0", + "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0", "shasum": "" }, "require": { @@ -6609,7 +6288,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.2.2" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.3" }, "funding": [ { @@ -6625,20 +6304,20 @@ "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.2.2", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306" + "reference": "9f1103734c5789798fefb90e91de4586039003ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3c432966bd8c7ec7429663105f5a02d7e75b4306", - "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f1103734c5789798fefb90e91de4586039003ed", + "reference": "9f1103734c5789798fefb90e91de4586039003ed", "shasum": "" }, "require": { @@ -6723,7 +6402,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.2.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.4" }, "funding": [ { @@ -6739,20 +6418,20 @@ "type": "tidelift" } ], - "time": "2024-12-31T14:59:40+00:00" + "time": "2025-02-26T11:01:22+00:00" }, { "name": "symfony/mailer", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3", + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3", "shasum": "" }, "require": { @@ -6803,7 +6482,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.2.0" + "source": "https://github.com/symfony/mailer/tree/v7.2.3" }, "funding": [ { @@ -6819,20 +6498,20 @@ "type": "tidelift" } ], - "time": "2024-11-25T15:21:05+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/mime", - "version": "v7.2.1", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283" + "reference": "87ca22046b78c3feaff04b337f33b38510fd686b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7f9617fcf15cb61be30f8b252695ed5e2bfac283", - "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283", + "url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b", + "reference": "87ca22046b78c3feaff04b337f33b38510fd686b", "shasum": "" }, "require": { @@ -6887,7 +6566,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.2.1" + "source": "https://github.com/symfony/mime/tree/v7.2.4" }, "funding": [ { @@ -6903,7 +6582,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:50:44+00:00" + "time": "2025-02-19T08:51:20+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7608,16 +7287,16 @@ }, { "name": "symfony/process", - "version": "v7.2.0", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" + "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "url": "https://api.github.com/repos/symfony/process/zipball/d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", + "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", "shasum": "" }, "require": { @@ -7649,90 +7328,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.2.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-11-06T14:24:19+00:00" - }, - { - "name": "symfony/psr-http-message-bridge", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/http-message": "^1.0|^2.0", - "symfony/http-foundation": "^6.4|^7.0" - }, - "conflict": { - "php-http/discovery": "<1.15", - "symfony/http-kernel": "<6.4" - }, - "require-dev": { - "nyholm/psr7": "^1.1", - "php-http/discovery": "^1.15", - "psr/log": "^1.1.4|^2|^3", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0" - }, - "type": "symfony-bridge", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\PsrHttpMessage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "PSR HTTP message bridge", - "homepage": "https://symfony.com", - "keywords": [ - "http", - "http-message", - "psr-17", - "psr-7" - ], - "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.2.0" + "source": "https://github.com/symfony/process/tree/v7.2.4" }, "funding": [ { @@ -7748,20 +7344,20 @@ "type": "tidelift" } ], - "time": "2024-09-26T08:57:56+00:00" + "time": "2025-02-05T08:33:46+00:00" }, { "name": "symfony/routing", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", "shasum": "" }, "require": { @@ -7813,7 +7409,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.2.0" + "source": "https://github.com/symfony/routing/tree/v7.2.3" }, "funding": [ { @@ -7829,7 +7425,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T11:08:51+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/service-contracts", @@ -8003,33 +7599,33 @@ }, { "name": "symfony/translation", - "version": "v6.4.13", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", - "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" @@ -8037,17 +7633,17 @@ "require-dev": { "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -8078,7 +7674,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.13" + "source": "https://github.com/symfony/translation/tree/v7.2.4" }, "funding": [ { @@ -8094,7 +7690,7 @@ "type": "tidelift" } ], - "time": "2024-09-27T18:14:25+00:00" + "time": "2025-02-13T10:27:23+00:00" }, { "name": "symfony/translation-contracts", @@ -8250,16 +7846,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", "shasum": "" }, "require": { @@ -8313,7 +7909,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" }, "funding": [ { @@ -8329,7 +7925,7 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:48:14+00:00" + "time": "2025-01-17T11:39:41+00:00" }, { "name": "theodorejb/polycast", @@ -8714,30 +8310,33 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.14.10", + "version": "v3.15.2", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "56b9bd235e3fe62e250124804009ce5bab97cc63" + "reference": "0bc1e1361e7fffc2be156f46ad1fba6927c01729" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/56b9bd235e3fe62e250124804009ce5bab97cc63", - "reference": "56b9bd235e3fe62e250124804009ce5bab97cc63", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/0bc1e1361e7fffc2be156f46ad1fba6927c01729", + "reference": "0bc1e1361e7fffc2be156f46ad1fba6927c01729", "shasum": "" }, "require": { - "illuminate/routing": "^9|^10|^11", - "illuminate/session": "^9|^10|^11", - "illuminate/support": "^9|^10|^11", - "maximebf/debugbar": "~1.23.0", - "php": "^8.0", + "illuminate/routing": "^9|^10|^11|^12", + "illuminate/session": "^9|^10|^11|^12", + "illuminate/support": "^9|^10|^11|^12", + "php": "^8.1", + "php-debugbar/php-debugbar": "~2.1.1", "symfony/finder": "^6|^7" }, + "conflict": { + "maximebf/debugbar": "*" + }, "require-dev": { "mockery/mockery": "^1.3.3", - "orchestra/testbench-dusk": "^5|^6|^7|^8|^9", - "phpunit/phpunit": "^9.6|^10.5", + "orchestra/testbench-dusk": "^7|^8|^9|^10", + "phpunit/phpunit": "^9.5.10|^10|^11", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", @@ -8751,7 +8350,7 @@ ] }, "branch-alias": { - "dev-master": "3.14-dev" + "dev-master": "3.15-dev" } }, "autoload": { @@ -8776,13 +8375,14 @@ "keywords": [ "debug", "debugbar", + "dev", "laravel", "profiler", "webprofiler" ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.14.10" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.15.2" }, "funding": [ { @@ -8794,7 +8394,7 @@ "type": "github" } ], - "time": "2024-12-23T10:10:42+00:00" + "time": "2025-02-25T15:25:22+00:00" }, { "name": "brianium/paratest", @@ -9179,16 +8779,16 @@ }, { "name": "filp/whoops", - "version": "2.16.0", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + "reference": "075bc0c26631110584175de6523ab3f1652eb28e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e", + "reference": "075bc0c26631110584175de6523ab3f1652eb28e", "shasum": "" }, "require": { @@ -9238,7 +8838,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.16.0" + "source": "https://github.com/filp/whoops/tree/2.17.0" }, "funding": [ { @@ -9246,7 +8846,7 @@ "type": "github" } ], - "time": "2024-09-25T12:00:00+00:00" + "time": "2025-01-25T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9301,20 +8901,20 @@ }, { "name": "jasonmccreary/laravel-test-assertions", - "version": "v2.4.1", + "version": "v2.6.0", "source": { "type": "git", "url": "https://github.com/jasonmccreary/laravel-test-assertions.git", - "reference": "e60bc8c737e535e55ac85eacf61718616bf0e2d6" + "reference": "f87707d4520246c8628dce4d5c23f6d72fd5f8d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jasonmccreary/laravel-test-assertions/zipball/e60bc8c737e535e55ac85eacf61718616bf0e2d6", - "reference": "e60bc8c737e535e55ac85eacf61718616bf0e2d6", + "url": "https://api.github.com/repos/jasonmccreary/laravel-test-assertions/zipball/f87707d4520246c8628dce4d5c23f6d72fd5f8d9", + "reference": "f87707d4520246c8628dce4d5c23f6d72fd5f8d9", "shasum": "" }, "require": { - "illuminate/testing": "^10.0|^11.0", + "illuminate/testing": "^11.0|^12.0", "mockery/mockery": "^1.4.4", "php": "^8.1", "phpunit/phpunit": "^10.1|^11.0" @@ -9345,9 +8945,9 @@ "description": "A set of helpful assertions when testing Laravel applications.", "support": { "issues": "https://github.com/jasonmccreary/laravel-test-assertions/issues", - "source": "https://github.com/jasonmccreary/laravel-test-assertions/tree/v2.4.1" + "source": "https://github.com/jasonmccreary/laravel-test-assertions/tree/v2.6.0" }, - "time": "2024-06-10T14:00:38+00:00" + "time": "2025-02-13T01:16:32+00:00" }, { "name": "jean85/pretty-package-versions", @@ -9503,16 +9103,16 @@ }, { "name": "laravel/pint", - "version": "v1.20.0", + "version": "v1.21.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b" + "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/53072e8ea22213a7ed168a8a15b96fbb8b82d44b", - "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b", + "url": "https://api.github.com/repos/laravel/pint/zipball/531fa0871fbde719c51b12afa3a443b8f4e4b425", + "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425", "shasum": "" }, "require": { @@ -9520,15 +9120,15 @@ "ext-mbstring": "*", "ext-tokenizer": "*", "ext-xml": "*", - "php": "^8.1.0" + "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.66.0", - "illuminate/view": "^10.48.25", - "larastan/larastan": "^2.9.12", - "laravel-zero/framework": "^10.48.25", + "friendsofphp/php-cs-fixer": "^3.68.5", + "illuminate/view": "^11.42.0", + "larastan/larastan": "^3.0.4", + "laravel-zero/framework": "^11.36.1", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.17.0", + "nunomaduro/termwind": "^2.3", "pestphp/pest": "^2.36.0" }, "bin": [ @@ -9565,32 +9165,32 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-01-14T16:20:53+00:00" + "time": "2025-02-18T03:18:57+00:00" }, { "name": "laravel/sail", - "version": "v1.40.0", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "237e70656d8eface4839de51d101284bd5d0cf71" + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/237e70656d8eface4839de51d101284bd5d0cf71", - "reference": "237e70656d8eface4839de51d101284bd5d0cf71", + "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", "shasum": "" }, "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0", - "illuminate/support": "^9.52.16|^10.0|^11.0", + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0", "symfony/yaml": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10" }, "bin": [ @@ -9628,75 +9228,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2025-01-13T16:57:11+00:00" - }, - { - "name": "maximebf/debugbar", - "version": "v1.23.5", - "source": { - "type": "git", - "url": "https://github.com/php-debugbar/php-debugbar.git", - "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/eeabd61a1f19ba5dcd5ac4585a477130ee03ce25", - "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25", - "shasum": "" - }, - "require": { - "php": "^7.2|^8", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4|^5|^6|^7" - }, - "require-dev": { - "dbrekelmans/bdi": "^1", - "phpunit/phpunit": "^8|^9", - "symfony/panther": "^1|^2.1", - "twig/twig": "^1.38|^2.7|^3.0" - }, - "suggest": { - "kriswallsmith/assetic": "The best way to manage assets", - "monolog/monolog": "Log using Monolog", - "predis/predis": "Redis storage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.23-dev" - } - }, - "autoload": { - "psr-4": { - "DebugBar\\": "src/DebugBar/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Maxime Bouroumeau-Fuseau", - "email": "maxime.bouroumeau@gmail.com", - "homepage": "http://maximebf.com" - }, - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - } - ], - "description": "Debug bar in the browser for php application", - "homepage": "https://github.com/maximebf/php-debugbar", - "keywords": [ - "debug", - "debugbar" - ], - "support": { - "issues": "https://github.com/php-debugbar/php-debugbar/issues", - "source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.5" - }, - "time": "2024-12-15T19:20:42+00:00" + "time": "2025-01-24T15:45:36+00:00" }, { "name": "mockery/mockery", @@ -9783,16 +9315,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.1", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { @@ -9831,7 +9363,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -9839,41 +9371,41 @@ "type": "tidelift" } ], - "time": "2024-11-08T17:47:46+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "nunomaduro/collision", - "version": "v8.5.0", + "version": "v8.6.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + "reference": "86f003c132143d5a2ab214e19933946409e0cae7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/86f003c132143d5a2ab214e19933946409e0cae7", + "reference": "86f003c132143d5a2ab214e19933946409e0cae7", "shasum": "" }, "require": { "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^2.1.0", + "nunomaduro/termwind": "^2.3.0", "php": "^8.2.0", - "symfony/console": "^7.1.5" + "symfony/console": "^7.2.1" }, "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" + "laravel/framework": "<11.39.1 || >=13.0.0", + "phpunit/phpunit": "<11.5.3 || >=12.0.0" }, "require-dev": { - "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.28.0", - "laravel/pint": "^1.18.1", - "laravel/sail": "^1.36.0", - "laravel/sanctum": "^4.0.3", + "larastan/larastan": "^2.9.12", + "laravel/framework": "^11.39.1", + "laravel/pint": "^1.20.0", + "laravel/sail": "^1.40.0", + "laravel/sanctum": "^4.0.7", "laravel/tinker": "^2.10.0", - "orchestra/testbench-core": "^9.5.3", - "pestphp/pest": "^2.36.0 || ^3.4.0", + "orchestra/testbench-core": "^9.9.2", + "pestphp/pest": "^3.7.3", "sebastian/environment": "^6.1.0 || ^7.2.0" }, "type": "library", @@ -9911,6 +9443,7 @@ "cli", "command-line", "console", + "dev", "error", "handling", "laravel", @@ -9936,25 +9469,25 @@ "type": "patreon" } ], - "time": "2024-10-15T16:06:32+00:00" + "time": "2025-01-23T13:41:43+00:00" }, { "name": "pestphp/pest", - "version": "v3.7.2", + "version": "v3.7.4", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b" + "reference": "4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b", - "reference": "709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b", + "url": "https://api.github.com/repos/pestphp/pest/zipball/4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b", + "reference": "4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b", "shasum": "" }, "require": { "brianium/paratest": "^7.7.0", - "nunomaduro/collision": "^8.5.0", + "nunomaduro/collision": "^8.6.1", "nunomaduro/termwind": "^2.3.0", "pestphp/pest-plugin": "^3.0.0", "pestphp/pest-plugin-arch": "^3.0.0", @@ -10036,7 +9569,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v3.7.2" + "source": "https://github.com/pestphp/pest/tree/v3.7.4" }, "funding": [ { @@ -10048,7 +9581,7 @@ "type": "github" } ], - "time": "2025-01-19T17:35:09+00:00" + "time": "2025-01-23T14:03:29+00:00" }, { "name": "pestphp/pest-plugin", @@ -10192,27 +9725,27 @@ }, { "name": "pestphp/pest-plugin-laravel", - "version": "v3.0.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest-plugin-laravel.git", - "reference": "7dd98c0c3b3542970ec21fce80ec5c88916ac469" + "reference": "1c4e994476375c72aa7aebaaa97aa98f5d5378cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/7dd98c0c3b3542970ec21fce80ec5c88916ac469", - "reference": "7dd98c0c3b3542970ec21fce80ec5c88916ac469", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/1c4e994476375c72aa7aebaaa97aa98f5d5378cd", + "reference": "1c4e994476375c72aa7aebaaa97aa98f5d5378cd", "shasum": "" }, "require": { - "laravel/framework": "^11.22.0", - "pestphp/pest": "^3.0.0", + "laravel/framework": "^11.39.1|^12.0.0", + "pestphp/pest": "^3.7.4", "php": "^8.2.0" }, "require-dev": { - "laravel/dusk": "^8.2.5", - "orchestra/testbench": "^9.4.0", - "pestphp/pest-dev-tools": "^3.0.0" + "laravel/dusk": "^8.2.13|dev-develop", + "orchestra/testbench": "^9.9.0|^10.0.0", + "pestphp/pest-dev-tools": "^3.3.0" }, "type": "library", "extra": { @@ -10250,7 +9783,7 @@ "unit" ], "support": { - "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v3.0.0" + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v3.1.0" }, "funding": [ { @@ -10262,7 +9795,7 @@ "type": "github" } ], - "time": "2024-09-08T23:32:52+00:00" + "time": "2025-01-24T13:22:39+00:00" }, { "name": "pestphp/pest-plugin-livewire", @@ -10520,6 +10053,76 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "php-debugbar/php-debugbar", + "version": "v2.1.6", + "source": { + "type": "git", + "url": "https://github.com/php-debugbar/php-debugbar.git", + "reference": "16fa68da5617220594aa5e33fa9de415f94784a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/16fa68da5617220594aa5e33fa9de415f94784a0", + "reference": "16fa68da5617220594aa5e33fa9de415f94784a0", + "shasum": "" + }, + "require": { + "php": "^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4|^5|^6|^7" + }, + "require-dev": { + "dbrekelmans/bdi": "^1", + "phpunit/phpunit": "^8|^9", + "symfony/panther": "^1|^2.1", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/php-debugbar/php-debugbar", + "keywords": [ + "debug", + "debug bar", + "debugbar", + "dev" + ], + "support": { + "issues": "https://github.com/php-debugbar/php-debugbar/issues", + "source": "https://github.com/php-debugbar/php-debugbar/tree/v2.1.6" + }, + "time": "2025-02-21T17:47:03+00:00" + }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -10697,16 +10300,16 @@ }, { "name": "phpmyadmin/sql-parser", - "version": "5.10.3", + "version": "5.11.0", "source": { "type": "git", "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "5346664973d10cf1abff20837fb1183f3c11a055" + "reference": "07044bc8c13abd542756c3fd34dc66a5d6dee8e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/5346664973d10cf1abff20837fb1183f3c11a055", - "reference": "5346664973d10cf1abff20837fb1183f3c11a055", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/07044bc8c13abd542756c3fd34dc66a5d6dee8e4", + "reference": "07044bc8c13abd542756c3fd34dc66a5d6dee8e4", "shasum": "" }, "require": { @@ -10721,9 +10324,11 @@ "phpbench/phpbench": "^1.1", "phpmyadmin/coding-standard": "^3.0", "phpmyadmin/motranslator": "^4.0 || ^5.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.9.12", - "phpstan/phpstan-phpunit": "^1.3.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^1.12", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan-strict-rules": "^1.6", "phpunit/phpunit": "^8.5 || ^9.6", "psalm/plugin-phpunit": "^0.16.1", "vimeo/psalm": "^4.11", @@ -10780,20 +10385,20 @@ "type": "other" } ], - "time": "2025-01-19T04:14:02+00:00" + "time": "2025-02-22T20:00:59+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", - "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", "shasum": "" }, "require": { @@ -10825,9 +10430,9 @@ "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/2.0.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" }, - "time": "2024-10-13T11:29:49+00:00" + "time": "2025-02-19T13:28:12+00:00" }, { "name": "phpstan/phpstan", @@ -10889,23 +10494,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "11.0.8", + "version": "11.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "418c59fd080954f8c4aa5631d9502ecda2387118" + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118", - "reference": "418c59fd080954f8c4aa5631d9502ecda2387118", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.3.1", + "nikic/php-parser": "^5.4.0", "php": ">=8.2", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-text-template": "^4.0.1", @@ -10917,7 +10522,7 @@ "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^11.5.0" + "phpunit/phpunit": "^11.5.2" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10955,7 +10560,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/11.0.8" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" }, "funding": [ { @@ -10963,7 +10568,7 @@ "type": "github" } ], - "time": "2024-12-11T12:34:27+00:00" + "time": "2025-02-25T13:26:39+00:00" }, { "name": "phpunit/php-file-iterator", @@ -11313,28 +10918,28 @@ }, { "name": "ryoluo/sail-ssl", - "version": "v1.3.2", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/ryoluo/sail-ssl.git", - "reference": "afc8cbdbc27a41bbb32a835df02e38a9f937f2bc" + "reference": "0db9b67df79e245d9c22aa3aced3b2564a3213b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ryoluo/sail-ssl/zipball/afc8cbdbc27a41bbb32a835df02e38a9f937f2bc", - "reference": "afc8cbdbc27a41bbb32a835df02e38a9f937f2bc", + "url": "https://api.github.com/repos/ryoluo/sail-ssl/zipball/0db9b67df79e245d9c22aa3aced3b2564a3213b8", + "reference": "0db9b67df79e245d9c22aa3aced3b2564a3213b8", "shasum": "" }, "require": { - "illuminate/console": "^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "php": "^7.3|^8.0|^8.1|^8.2|^8.3" + "illuminate/console": ">=8.0", + "illuminate/contracts": ">=8.0", + "illuminate/support": ">=8.0", + "php": "^7.3|^8.0" }, "require-dev": { "laravel/sail": "^1.14", - "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.5|^10.0" + "orchestra/testbench": ">=6.0", + "phpunit/phpunit": ">=9.5" }, "type": "library", "extra": { @@ -11371,7 +10976,7 @@ "issues": "https://github.com/ryoluo/sail-ssl/issues", "source": "https://github.com/ryoluo/sail-ssl" }, - "time": "2024-03-15T18:32:51+00:00" + "time": "2025-02-27T13:54:30+00:00" }, { "name": "sebastian/cli-parser", @@ -12364,30 +11969,30 @@ }, { "name": "spatie/error-solutions", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/spatie/error-solutions.git", - "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541" + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/d239a65235a1eb128dfa0a4e4c4ef032ea11b541", - "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", "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", + "illuminate/broadcasting": "^10.0|^11.0|^12.0", + "illuminate/cache": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "livewire/livewire": "^2.11|^3.5.20", "openai-php/client": "^0.10.1", - "orchestra/testbench": "^7.0|8.22.3|^9.0", - "pestphp/pest": "^2.20", - "phpstan/phpstan": "^1.11", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "phpstan/phpstan": "^2.1", "psr/simple-cache": "^3.0", "psr/simple-cache-implementation": "^3.0", "spatie/ray": "^1.28", @@ -12426,7 +12031,7 @@ ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.2" + "source": "https://github.com/spatie/error-solutions/tree/1.1.3" }, "funding": [ { @@ -12434,24 +12039,24 @@ "type": "github" } ], - "time": "2024-12-11T09:51:56+00:00" + "time": "2025-02-14T12:29:50+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.10.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272" + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", - "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f", + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^8.0", "spatie/backtrace": "^1.6.1", "symfony/http-foundation": "^5.2|^6.0|^7.0", @@ -12495,7 +12100,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.10.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.10.1" }, "funding": [ { @@ -12503,20 +12108,20 @@ "type": "github" } ], - "time": "2024-12-02T14:30:06+00:00" + "time": "2025-02-14T13:42:06+00:00" }, { "name": "spatie/ignition", - "version": "1.15.0", + "version": "1.15.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" + "reference": "31f314153020aee5af3537e507fef892ffbf8c85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85", + "reference": "31f314153020aee5af3537e507fef892ffbf8c85", "shasum": "" }, "require": { @@ -12529,7 +12134,7 @@ "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0", + "illuminate/cache": "^9.52|^10.0|^11.0|^12.0", "mockery/mockery": "^1.4", "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", @@ -12586,27 +12191,27 @@ "type": "github" } ], - "time": "2024-06-12T14:55:22+00:00" + "time": "2025-02-21T14:31:39+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.9.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "62042df15314b829d0f26e02108f559018e2aad0" + "reference": "1baee07216d6748ebd3a65ba97381b051838707a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/62042df15314b829d0f26e02108f559018e2aad0", - "reference": "62042df15314b829d0f26e02108f559018e2aad0", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", + "reference": "1baee07216d6748ebd3a65ba97381b051838707a", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "php": "^8.1", "spatie/ignition": "^1.15", "symfony/console": "^6.2.3|^7.0", @@ -12615,12 +12220,12 @@ "require-dev": { "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", + "openai-php/client": "^0.8.1|^0.10", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.34|^3.7", "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.16", + "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", + "phpstan/phpstan-phpunit": "^1.3.16|^2.0", "vlucas/phpdotenv": "^5.5" }, "suggest": { @@ -12677,7 +12282,7 @@ "type": "github" } ], - "time": "2024-12-02T08:43:31+00:00" + "time": "2025-02-20T13:13:55+00:00" }, { "name": "staabm/side-effects-detector", @@ -12733,16 +12338,16 @@ }, { "name": "symfony/yaml", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22" + "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec", + "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec", "shasum": "" }, "require": { @@ -12785,7 +12390,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.0" + "source": "https://github.com/symfony/yaml/tree/v7.2.3" }, "funding": [ { @@ -12801,7 +12406,7 @@ "type": "tidelift" } ], - "time": "2024-10-23T06:56:12+00:00" + "time": "2025-01-07T12:55:42+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", @@ -12914,35 +12519,35 @@ }, { "name": "tomasvotruba/bladestan", - "version": "0.11.0", + "version": "0.11.1", "source": { "type": "git", "url": "https://github.com/bladestan/bladestan.git", - "reference": "7009ce3d224806ea60496f49d12844f803385648" + "reference": "175ec1e530279780991823fa8cd913d6520105e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bladestan/bladestan/zipball/7009ce3d224806ea60496f49d12844f803385648", - "reference": "7009ce3d224806ea60496f49d12844f803385648", + "url": "https://api.github.com/repos/bladestan/bladestan/zipball/175ec1e530279780991823fa8cd913d6520105e0", + "reference": "175ec1e530279780991823fa8cd913d6520105e0", "shasum": "" }, "require": { - "illuminate/contracts": "^11.15", - "illuminate/filesystem": "^11.15", - "illuminate/mail": "^11.15", - "illuminate/notifications": "^11.15", - "illuminate/view": "^11.15", + "illuminate/contracts": "^11.15|^12.0", + "illuminate/filesystem": "^11.15|^12.0", + "illuminate/mail": "^11.15|^12.0", + "illuminate/notifications": "^11.15|^12.0", + "illuminate/view": "^11.15|^12.0", "larastan/larastan": "^3.0", "livewire/livewire": "^3.3.5", "php": "^8.2", "phpstan/phpstan": "^2.0.1" }, "require-dev": { - "orchestra/testbench": "^9.9", + "orchestra/testbench": "^9.9|^10.0", "phpunit/phpunit": "^11.3.6", "rector/rector": "^2.0", "symplify/easy-coding-standard": "^12.1.1", - "tomasvotruba/class-leak": "^0.2.6" + "tomasvotruba/class-leak": "^2.0" }, "type": "phpstan-extension", "extra": { @@ -12968,7 +12573,7 @@ ], "support": { "issues": "https://github.com/bladestan/bladestan/issues", - "source": "https://github.com/bladestan/bladestan/tree/0.11.0" + "source": "https://github.com/bladestan/bladestan/tree/0.11.1" }, "funding": [ { @@ -12980,7 +12585,7 @@ "type": "github" } ], - "time": "2025-02-19T17:24:24+00:00" + "time": "2025-02-27T20:48:38+00:00" } ], "aliases": [], diff --git a/config/auth.php b/config/auth.php index 00a5cd2aa3..8b7cd69719 100644 --- a/config/auth.php +++ b/config/auth.php @@ -100,7 +100,7 @@ 'passwords' => [ 'users' => [ 'provider' => 'users', - 'table' => 'password_resets', + 'table' => 'password_reset_tokens', 'expire' => 60, 'throttle' => 60, ], diff --git a/config/backup.php b/config/backup.php index 94b1491a67..828a44c616 100644 --- a/config/backup.php +++ b/config/backup.php @@ -1,33 +1,14 @@ - * @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 - */ return [ - /* - |-------------------------------------------------------------------------- - | Backup Manager - |-------------------------------------------------------------------------- - | - | Backup Manager configuration settings - | - */ 'backup' => [ /* * The name of this application. You can use this name to monitor * the backups. */ - 'name' => 'UNIT3D', + 'name' => env('APP_NAME', 'unit3d-backup'), 'source' => [ 'files' => [ @@ -116,7 +97,54 @@ */ 'database_dump_compressor' => null, + /* + * If specified, the database dumped file name will contain a timestamp (e.g.: 'Y-m-d-H-i-s'). + */ + 'database_dump_file_timestamp_format' => null, + + /* + * The base of the dump filename, either 'database' or 'connection' + * + * If 'database' (default), the dumped filename will contain the database name. + * If 'connection', the dumped filename will contain the connection name. + */ + 'database_dump_filename_base' => 'database', + + /* + * The file extension used for the database dump files. + * + * If not specified, the file extension will be .archive for MongoDB and .sql for all other databases + * The file extension should be specified without a leading . + */ + 'database_dump_file_extension' => '', + 'destination' => [ + /* + * The compression algorithm to be used for creating the zip archive. + * + * If backing up only database, you may choose gzip compression for db dump and no compression at zip. + * + * Some common algorithms are listed below: + * ZipArchive::CM_STORE (no compression at all; set 0 as compression level) + * ZipArchive::CM_DEFAULT + * ZipArchive::CM_DEFLATE + * ZipArchive::CM_BZIP2 + * ZipArchive::CM_XZ + * + * For more check https://www.php.net/manual/zip.constants.php and confirm it's supported by your system. + */ + 'compression_method' => ZipArchive::CM_DEFAULT, + + /* + * The compression level corresponding to the used algorithm; an integer between 0 and 9. + * + * Check supported levels for the chosen algorithm, usually 1 means the fastest and weakest compression, + * while 9 the slowest and strongest one. + * + * Setting of 0 for some algorithms may switch to the strongest compression. + */ + 'compression_level' => 9, + /* * The filename prefix used for the backup zip file. */ @@ -134,6 +162,32 @@ * The directory where the temporary files will be stored. */ 'temporary_directory' => storage_path('app/backup-temp'), + + /* + * The password to be used for archive encryption. + * Set to `null` to disable encryption. + */ + 'password' => env('APP_KEY'), + + /* + * The encryption algorithm to be used for archive encryption. + * You can set it to `null` or `false` to disable encryption. + * + * When set to 'default', we'll use ZipArchive::EM_AES_256 if it is + * available on your system. + */ + 'encryption' => 'default', + + /* + * The number of attempts, in case the backup command encounters an exception + */ + 'tries' => 1, + + /* + * The number of seconds to wait before attempting a new backup if the previous try failed + * Set to `0` for none + */ + 'retry_delay' => 0, ], /* @@ -141,7 +195,7 @@ * For Slack you need to install laravel/slack-notification-channel. * * You can also use your own notification classes, just make sure the class is named after one of - * the `Spatie\Backup\Events` classes. + * the `Spatie\Backup\Notifications\Notifications` classes. */ 'notifications' => [ 'notifications' => [ @@ -180,6 +234,20 @@ 'icon' => null, ], + + 'discord' => [ + 'webhook_url' => '', + + /* + * If this is an empty string, the name field on the webhook will be used. + */ + 'username' => '', + + /* + * If this is an empty string, the avatar on the webhook will be used. + */ + 'avatar_url' => '', + ], ], /* @@ -189,7 +257,7 @@ */ 'monitor_backups' => [ [ - 'name' => 'UNIT3D', + 'name' => env('APP_NAME', 'unit3d-backup'), 'disks' => ['backups'], 'health_checks' => [ Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1, @@ -228,35 +296,48 @@ 'keep_all_backups_for_days' => 7, /* - * The number of days for which daily backups must be kept. + * After the "keep_all_backups_for_days" period is over, the most recent backup + * of that day will be kept. Older backups within the same day will be removed. + * If you create backups only once a day, no backups will be removed yet. */ 'keep_daily_backups_for_days' => 16, /* - * The number of weeks for which one weekly backup must be kept. + * After the "keep_daily_backups_for_days" period is over, the most recent backup + * of that week will be kept. Older backups within the same week will be removed. + * If you create backups only once a week, no backups will be removed yet. */ 'keep_weekly_backups_for_weeks' => 8, /* - * The number of months for which one monthly backup must be kept. + * After the "keep_weekly_backups_for_weeks" period is over, the most recent backup + * of that month will be kept. Older backups within the same month will be removed. */ 'keep_monthly_backups_for_months' => 4, /* - * The number of years for which one yearly backup must be kept. + * After the "keep_monthly_backups_for_months" period is over, the most recent backup + * of that year will be kept. Older backups within the same year will be removed. */ 'keep_yearly_backups_for_years' => 2, /* * After cleaning up the backups remove the oldest backup until * this amount of megabytes has been reached. + * Set null for unlimited size. */ 'delete_oldest_backups_when_using_more_megabytes_than' => 5000, ], - ], - 'security' => [ - 'password' => env('APP_KEY'), - 'encryption' => App\Helpers\BackupEncryption::ENCRYPTION_DEFAULT, + /* + * The number of attempts, in case the cleanup command encounters an exception + */ + 'tries' => 1, + + /* + * The number of seconds to wait before attempting a new cleanup if the previous try failed + * Set to `0` for none + */ + 'retry_delay' => 0, ], ]; diff --git a/config/broadcasting.php b/config/broadcasting.php index 7b398452cc..685f92ff77 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -12,7 +12,7 @@ | framework when an event needs to be broadcast. You may set this to | any of the connections defined in the "connections" array below. | - | Supported: "pusher", "ably", "redis", "log", "null" + | Supported: "reverb", "pusher", "ably", "redis", "log", "null" | */ @@ -24,20 +24,35 @@ |-------------------------------------------------------------------------- | | Here you may define all of the broadcast connections that will be used - | to broadcast events to other systems or over websockets. Samples of + | to broadcast events to other systems or over WebSockets. Samples of | each available type of connection are provided inside this array. | */ 'connections' => [ + 'reverb' => [ + 'driver' => 'reverb', + 'key' => env('REVERB_APP_KEY'), + 'secret' => env('REVERB_APP_SECRET'), + 'app_id' => env('REVERB_APP_ID'), + 'options' => [ + 'host' => env('REVERB_HOST'), + 'port' => env('REVERB_PORT', 443), + 'scheme' => env('REVERB_SCHEME', 'https'), + 'useTLS' => env('REVERB_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ - 'cluster' => env('PUSHER_APP_CLUSTER'), - + 'cluster' => env('PUSHER_APP_CLUSTER'), 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', 'port' => env('PUSHER_PORT', 443), 'scheme' => env('PUSHER_SCHEME', 'https'), diff --git a/config/cache.php b/config/cache.php index ade153c9e5..76ec27eff5 100644 --- a/config/cache.php +++ b/config/cache.php @@ -10,13 +10,13 @@ | Default Cache Store |-------------------------------------------------------------------------- | - | This option controls the default cache connection that gets used while - | using this caching library. This connection is used when another is - | not explicitly specified when executing a given caching function. + | This option controls the default cache store that will be used by the + | framework. This connection is utilized if another isn't explicitly + | specified when running a cache operation inside the application. | */ - 'default' => env('CACHE_STORE', 'file'), + 'default' => env('CACHE_STORE', 'database'), /* |-------------------------------------------------------------------------- @@ -27,8 +27,8 @@ | well as their drivers. You may even define multiple stores for the | same cache driver to group types of items stored in your caches. | - | Supported drivers: "apc", "array", "database", "file", - | "memcached", "redis", "dynamodb", "octane", "null" + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "octane", "null" | */ @@ -44,14 +44,16 @@ 'database' => [ 'driver' => 'database', - 'table' => 'cache', - 'connection' => null, - 'lock_connection' => null, + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), ], 'file' => [ - 'driver' => 'file', - 'path' => storage_path('framework/cache/data'), + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), ], 'memcached' => [ @@ -75,8 +77,8 @@ 'redis' => [ 'driver' => 'redis', - 'connection' => 'cache', - 'lock_connection' => 'default', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), ], 'dynamodb' => [ @@ -98,8 +100,8 @@ | Cache Key Prefix |-------------------------------------------------------------------------- | - | When utilizing the APC, database, memcached, Redis, or DynamoDB cache - | stores there might be other applications using the same cache. For + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For | that reason, you may prefix every cache key to avoid collisions. | */ diff --git a/config/database.php b/config/database.php index f354bfe4f5..2baf268bc4 100644 --- a/config/database.php +++ b/config/database.php @@ -2,6 +2,8 @@ declare(strict_types=1); +use Illuminate\Support\Str; + return [ /* |-------------------------------------------------------------------------- @@ -9,8 +11,9 @@ |-------------------------------------------------------------------------- | | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. + | to use as your default connection for database operations. This is + | the connection which will be utilized unless another connection + | is explicitly specified when you execute a query / statement. | */ @@ -21,14 +24,9 @@ | Database Connections |-------------------------------------------------------------------------- | - | Here are each of the database connections setup for your application. - | Of course, examples of configuring each database platform that is - | supported by Laravel is shown below to make development simple. - | - | - | All database work in Laravel is done through the PHP PDO facilities - | so make sure you have the driver for your particular database of - | choice installed on your machine before you begin development. + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. | */ @@ -39,6 +37,9 @@ 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, ], 'mysql' => [ @@ -46,12 +47,12 @@ 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, @@ -95,10 +96,10 @@ 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, 'search_path' => 'public', @@ -107,13 +108,13 @@ 'sqlsrv' => [ 'driver' => 'sqlsrv', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, // 'encrypt' => env('DB_ENCRYPT', 'yes'), @@ -128,7 +129,7 @@ | | This table keeps track of all the migrations that have already run for | your application. Using this information, we can determine which of - | the migrations on disk haven't actually been run in the database. + | the migrations on disk haven't actually been run on the database. | */ @@ -144,13 +145,19 @@ | | Redis is an open source, fast, and advanced key-value store that also | provides a richer body of commands than a typical key-value system - | such as APC or Memcached. Laravel makes it easy to dig right in. + | such as Memcached. You may define your connection settings here. | */ 'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + 'persistent' => env('REDIS_PERSISTENT', false), + ], + 'default' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), diff --git a/config/filesystems.php b/config/filesystems.php index faae1d87cb..153063178d 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -10,7 +10,7 @@ | | Here you may specify the default filesystem disk that should be used | by the framework. The "local" disk, as well as a variety of cloud - | based disks are available to your application. Just store away! + | based disks are available to your application for file storage. | */ @@ -21,11 +21,11 @@ | Filesystem Disks |-------------------------------------------------------------------------- | - | Here you may configure as many filesystem "disks" as you wish, and you - | may even configure multiple disks of the same driver. Defaults have - | been set up for each driver as an example of the required values. + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. | - | Supported Drivers: "local", "ftp", "sftp", "s3" + | Supported drivers: "local", "ftp", "sftp", "s3" | */ @@ -33,7 +33,9 @@ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), + 'serve' => true, 'throw' => false, + 'report' => false, ], 'public' => [ @@ -42,6 +44,7 @@ 'url' => env('APP_URL').'/storage', 'visibility' => 'public', 'throw' => false, + 'report' => false, ], 's3' => [ @@ -54,6 +57,7 @@ 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false, + 'report' => false, ], 'ftp' => [ @@ -86,11 +90,6 @@ // 'timeout' => 30, ], - 'backups' => [ - 'driver' => 'local', - 'root' => storage_path('backups'), - ], - // UNIT3D Custom Disks (Alphabetical Order) 'article-images' => [ 'driver' => 'local', @@ -102,14 +101,9 @@ 'root' => storage_path('app/files/attachments/files'), ], - 'user-avatars' => [ - 'driver' => 'local', - 'root' => storage_path('app/images/users/avatars'), - ], - - 'user-icons' => [ + 'backups' => [ 'driver' => 'local', - 'root' => storage_path('app/images/users/icons'), + 'root' => storage_path('backups'), ], 'category-images' => [ @@ -122,6 +116,16 @@ 'root' => storage_path('app/images/playlists/images'), ], + 'user-avatars' => [ + 'driver' => 'local', + 'root' => storage_path('app/images/users/avatars'), + ], + + 'user-icons' => [ + 'driver' => 'local', + 'root' => storage_path('app/images/users/icons'), + ], + 'subtitle-files' => [ 'driver' => 'local', 'root' => storage_path('app/files/subtitles/files'), diff --git a/config/hashing.php b/config/hashing.php index ffd6b9caad..479df48844 100644 --- a/config/hashing.php +++ b/config/hashing.php @@ -1,17 +1,6 @@ - * @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 - */ return [ /* @@ -27,7 +16,7 @@ | */ - 'driver' => 'bcrypt', + 'driver' => env('HASH_DRIVER', 'bcrypt'), /* |-------------------------------------------------------------------------- @@ -41,7 +30,9 @@ */ 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), + 'rounds' => env('BCRYPT_ROUNDS', 12), + 'verify' => env('HASH_VERIFY', true), + 'limit' => env('BCRYPT_LIMIT', null), ], /* @@ -56,8 +47,22 @@ */ 'argon' => [ - 'memory' => 8192, - 'threads' => 2, - 'time' => 2, + 'memory' => env('ARGON_MEMORY', 65536), + 'threads' => env('ARGON_THREADS', 1), + 'time' => env('ARGON_TIME', 4), + 'verify' => env('HASH_VERIFY', true), ], + + /* + |-------------------------------------------------------------------------- + | Rehash On Login + |-------------------------------------------------------------------------- + | + | Setting this option to true will tell Laravel to automatically rehash + | the user's password during login if the configured work factor for + | the algorithm has changed, allowing graceful upgrades of hashes. + | + */ + + 'rehash_on_login' => true, ]; diff --git a/config/logging.php b/config/logging.php index 61d4fc05e2..a71ee4b12e 100644 --- a/config/logging.php +++ b/config/logging.php @@ -5,6 +5,7 @@ use Monolog\Handler\NullHandler; use Monolog\Handler\StreamHandler; use Monolog\Handler\SyslogUdpHandler; +use Monolog\Processor\PsrLogMessageProcessor; return [ /* @@ -12,9 +13,9 @@ | Default Log Channel |-------------------------------------------------------------------------- | - | This option defines the default log channel that gets used when writing - | messages to the logs. The name specified in this option should match - | one of the channels defined in the "channels" configuration array. + | This option defines the default log channel that is utilized to write + | messages to your logs. The value provided here should match one of + | the channels present in the list of "channels" configured below. | */ @@ -33,7 +34,7 @@ 'deprecations' => [ 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), - 'trace' => false, + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), ], /* @@ -41,42 +42,44 @@ | Log Channels |-------------------------------------------------------------------------- | - | Here you may configure the log channels for your application. Out of - | the box, Laravel uses the Monolog PHP logging library. This gives - | you a variety of powerful log handlers / formatters to utilize. + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. | - | Available Drivers: "single", "daily", "slack", "syslog", - | "errorlog", "monolog", - | "custom", "stack" + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" | */ 'channels' => [ 'stack' => [ 'driver' => 'stack', - 'channels' => ['single'], + 'channels' => explode(',', env('LOG_STACK', 'single')), 'ignore_exceptions' => false, ], 'single' => [ - 'driver' => 'single', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('LOG_LEVEL', 'debug'), + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, ], 'daily' => [ - 'driver' => 'daily', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('LOG_LEVEL', 'debug'), - 'days' => 14, + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, ], 'slack' => [ - 'driver' => 'slack', - 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => 'Laravel Log', - 'emoji' => ':boom:', - 'level' => env('LOG_LEVEL', 'critical'), + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, ], 'papertrail' => [ @@ -88,6 +91,7 @@ 'port' => env('PAPERTRAIL_PORT'), 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), ], + 'processors' => [PsrLogMessageProcessor::class], ], 'stderr' => [ @@ -98,16 +102,20 @@ 'with' => [ 'stream' => 'php://stderr', ], + 'processors' => [PsrLogMessageProcessor::class], ], 'syslog' => [ - 'driver' => 'syslog', - 'level' => env('LOG_LEVEL', 'debug'), + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, ], 'errorlog' => [ - 'driver' => 'errorlog', - 'level' => env('LOG_LEVEL', 'debug'), + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, ], 'null' => [ diff --git a/config/mail.php b/config/mail.php index 1221ba1b6d..9be4c9c11e 100644 --- a/config/mail.php +++ b/config/mail.php @@ -8,13 +8,14 @@ | Default Mailer |-------------------------------------------------------------------------- | - | This option controls the default mailer that is used to send any email - | messages sent by your application. Alternative mailers may be setup - | and used as needed; however, this mailer will be used by default. + | This option controls the default mailer that is used to send all email + | messages unless another mailer is explicitly specified when sending + | the message. All additional mailers can be configured within the + | "mailers" array. Examples of each type of mailer are provided. | */ - 'default' => env('MAIL_MAILER', 'smtp'), + 'default' => env('MAIL_MAILER', 'log'), /* |-------------------------------------------------------------------------- @@ -25,45 +26,45 @@ | their respective settings. Several examples have been configured for | you and you are free to add your own as your application requires. | - | Laravel supports a variety of mail "transport" drivers to be used while - | sending an e-mail. You will specify which one you are using for your - | mailers below. You are free to add additional mailers as required. + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. | - | Supported: "smtp", "sendmail", "mailgun", "ses", - | "postmark", "log", "array", "failover" + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" | */ 'mailers' => [ 'smtp' => [ 'transport' => 'smtp', - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - 'port' => env('MAIL_PORT', 587), - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, - 'local_domain' => env('MAIL_EHLO_DOMAIN'), + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)), ], 'ses' => [ 'transport' => 'ses', ], - 'mailgun' => [ - 'transport' => 'mailgun', - // 'client' => [ - // 'timeout' => 5, - // ], - ], - 'postmark' => [ 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), // 'client' => [ // 'timeout' => 5, // ], ], + 'resend' => [ + 'transport' => 'resend', + ], + 'sendmail' => [ 'transport' => 'sendmail', 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), @@ -85,6 +86,14 @@ 'log', ], ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + ], ], /* @@ -92,9 +101,9 @@ | Global "From" Address |-------------------------------------------------------------------------- | - | You may wish for all e-mails sent by your application to be sent from - | the same address. Here, you may specify a name and address that is - | used globally for all e-mails that are sent by your application. + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. | */ @@ -102,23 +111,4 @@ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], - - /* - |-------------------------------------------------------------------------- - | Markdown Mail Settings - |-------------------------------------------------------------------------- - | - | If you are using Markdown based email rendering, you may configure your - | theme and component paths here, allowing you to customize the design - | of the emails. Or, you may simply stick with the Laravel defaults! - | - */ - - 'markdown' => [ - 'theme' => 'default', - - 'paths' => [ - resource_path('views/vendor/mail'), - ], - ], ]; diff --git a/config/queue.php b/config/queue.php index ecfa8d885e..02e4e1d749 100644 --- a/config/queue.php +++ b/config/queue.php @@ -40,6 +40,7 @@ 'queue' => 'default', 'retry_after' => 90, 'after_commit' => false, + 'connection' => env('DB_QUEUE_CONNECTION'), ], 'beanstalkd' => [ diff --git a/config/services.php b/config/services.php index aa86dc8e23..e407b62eb9 100644 --- a/config/services.php +++ b/config/services.php @@ -15,13 +15,6 @@ | */ - 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), - 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), - 'scheme' => 'https', - ], - 'postmark' => [ 'token' => env('POSTMARK_TOKEN'), ], @@ -31,4 +24,15 @@ 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], + + 'resend' => [ + 'key' => env('RESEND_KEY'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], ]; diff --git a/database/factories/ApplicationFactory.php b/database/factories/ApplicationFactory.php index f0929ea883..7b7ca6fe9d 100644 --- a/database/factories/ApplicationFactory.php +++ b/database/factories/ApplicationFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class ApplicationFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Application::class; - /** * Define the model's default state. */ diff --git a/database/factories/ApplicationImageProofFactory.php b/database/factories/ApplicationImageProofFactory.php index 8fb38ca466..22f53479aa 100644 --- a/database/factories/ApplicationImageProofFactory.php +++ b/database/factories/ApplicationImageProofFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class ApplicationImageProofFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = ApplicationImageProof::class; - /** * Define the model's default state. */ diff --git a/database/factories/ApplicationUrlProofFactory.php b/database/factories/ApplicationUrlProofFactory.php index 44282bc621..8d3ddb5a9f 100644 --- a/database/factories/ApplicationUrlProofFactory.php +++ b/database/factories/ApplicationUrlProofFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class ApplicationUrlProofFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = ApplicationUrlProof::class; - /** * Define the model's default state. */ diff --git a/database/factories/ArticleFactory.php b/database/factories/ArticleFactory.php index 7b29c5912d..cd7d8ec04b 100644 --- a/database/factories/ArticleFactory.php +++ b/database/factories/ArticleFactory.php @@ -23,11 +23,6 @@ /** @extends Factory
*/ class ArticleFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Article::class; - /** * Define the model's default state. */ diff --git a/database/factories/AuditFactory.php b/database/factories/AuditFactory.php index 1b4ec7b312..6fa33eae20 100644 --- a/database/factories/AuditFactory.php +++ b/database/factories/AuditFactory.php @@ -24,11 +24,6 @@ /** @extends Factory */ class AuditFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Audit::class; - /** * Define the model's default state. * diff --git a/database/factories/BanFactory.php b/database/factories/BanFactory.php index ecd4a18f5c..ecbd588d83 100644 --- a/database/factories/BanFactory.php +++ b/database/factories/BanFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class BanFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Ban::class; - /** * Define the model's default state. */ diff --git a/database/factories/BlacklistClientFactory.php b/database/factories/BlacklistClientFactory.php index 437514f83c..fcbfee5613 100644 --- a/database/factories/BlacklistClientFactory.php +++ b/database/factories/BlacklistClientFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class BlacklistClientFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = BlacklistClient::class; - /** * Define the model's default state. */ diff --git a/database/factories/BlockedIpFactory.php b/database/factories/BlockedIpFactory.php index e579989529..55b153ace5 100644 --- a/database/factories/BlockedIpFactory.php +++ b/database/factories/BlockedIpFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class BlockedIpFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = BlockedIp::class; - /** * Define the model's default state. */ diff --git a/database/factories/BonExchangeFactory.php b/database/factories/BonExchangeFactory.php index 5c7e576c14..48e626fae3 100644 --- a/database/factories/BonExchangeFactory.php +++ b/database/factories/BonExchangeFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class BonExchangeFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = BonExchange::class; - /** * Define the model's default state. */ diff --git a/database/factories/BonTransactionsFactory.php b/database/factories/BonTransactionsFactory.php index a2cf27dd24..bdd348b273 100644 --- a/database/factories/BonTransactionsFactory.php +++ b/database/factories/BonTransactionsFactory.php @@ -24,11 +24,6 @@ /** @extends Factory */ class BonTransactionsFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = BonTransactions::class; - /** * Define the model's default state. */ diff --git a/database/factories/BookmarkFactory.php b/database/factories/BookmarkFactory.php index 518a9338aa..858d963e1b 100644 --- a/database/factories/BookmarkFactory.php +++ b/database/factories/BookmarkFactory.php @@ -24,11 +24,6 @@ /** @extends Factory */ class BookmarkFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Bookmark::class; - /** * Define the model's default state. */ diff --git a/database/factories/BotFactory.php b/database/factories/BotFactory.php index 0eb776d9e9..8acd063737 100644 --- a/database/factories/BotFactory.php +++ b/database/factories/BotFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class BotFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Bot::class; - /** * Define the model's default state. */ diff --git a/database/factories/CategoryFactory.php b/database/factories/CategoryFactory.php index 5df2a0f319..352c922355 100644 --- a/database/factories/CategoryFactory.php +++ b/database/factories/CategoryFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class CategoryFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Category::class; - /** * Define the model's default state. */ diff --git a/database/factories/ChatStatusFactory.php b/database/factories/ChatStatusFactory.php index f6867e13f2..3ef4ee4631 100644 --- a/database/factories/ChatStatusFactory.php +++ b/database/factories/ChatStatusFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class ChatStatusFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = ChatStatus::class; - /** * Define the model's default state. */ diff --git a/database/factories/ChatroomFactory.php b/database/factories/ChatroomFactory.php index 9b362e92bb..f4b2f3dbd1 100644 --- a/database/factories/ChatroomFactory.php +++ b/database/factories/ChatroomFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class ChatroomFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Chatroom::class; - /** * Define the model's default state. */ diff --git a/database/factories/CollectionFactory.php b/database/factories/CollectionFactory.php index 6d0b4b3bb5..bd932da23e 100644 --- a/database/factories/CollectionFactory.php +++ b/database/factories/CollectionFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class CollectionFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Collection::class; - /** * Define the model's default state. */ diff --git a/database/factories/CommentFactory.php b/database/factories/CommentFactory.php index 59648b88fe..7d9d65886d 100644 --- a/database/factories/CommentFactory.php +++ b/database/factories/CommentFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class CommentFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Comment::class; - /** * Define the model's default state. */ diff --git a/database/factories/CompanyFactory.php b/database/factories/CompanyFactory.php index 3aa2d453fc..f37a191e28 100644 --- a/database/factories/CompanyFactory.php +++ b/database/factories/CompanyFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class CompanyFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Company::class; - /** * Define the model's default state. */ diff --git a/database/factories/ConversationFactory.php b/database/factories/ConversationFactory.php index 8dc79fba68..261c4deb04 100644 --- a/database/factories/ConversationFactory.php +++ b/database/factories/ConversationFactory.php @@ -22,18 +22,13 @@ /** @extends Factory */ class ConversationFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Conversation::class; - /** * Define the model's default state. */ public function definition(): array { return [ - 'subject' => $this->faker->text, + 'subject' => $this->faker->text(), 'created_at' => $this->faker->optional()->dateTime(), 'updated_at' => $this->faker->optional()->dateTime(), ]; diff --git a/database/factories/CreditFactory.php b/database/factories/CreditFactory.php index 2967279914..f9a1022c16 100644 --- a/database/factories/CreditFactory.php +++ b/database/factories/CreditFactory.php @@ -26,11 +26,6 @@ /** @extends Factory */ class CreditFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Credit::class; - /** * Define the model's default state. */ diff --git a/database/factories/DistributorFactory.php b/database/factories/DistributorFactory.php index 3daf6e4631..a0204e3cc4 100644 --- a/database/factories/DistributorFactory.php +++ b/database/factories/DistributorFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class DistributorFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Distributor::class; - /** * Define the model's default state. */ diff --git a/database/factories/DonationGatewayFactory.php b/database/factories/DonationGatewayFactory.php index f477272682..5e6b1a7aed 100644 --- a/database/factories/DonationGatewayFactory.php +++ b/database/factories/DonationGatewayFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class DonationGatewayFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = DonationGateway::class; - /** * Define the model's default state. */ diff --git a/database/factories/DonationPackageFactory.php b/database/factories/DonationPackageFactory.php index a6641e615c..972cafd527 100644 --- a/database/factories/DonationPackageFactory.php +++ b/database/factories/DonationPackageFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class DonationPackageFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = DonationPackage::class; - /** * Define the model's default state. */ diff --git a/database/factories/EpisodeFactory.php b/database/factories/EpisodeFactory.php index aca627277b..e3d7e70808 100644 --- a/database/factories/EpisodeFactory.php +++ b/database/factories/EpisodeFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class EpisodeFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Episode::class; - /** * Define the model's default state. */ diff --git a/database/factories/FailedLoginAttemptFactory.php b/database/factories/FailedLoginAttemptFactory.php index 8b74c373b9..bd11092081 100644 --- a/database/factories/FailedLoginAttemptFactory.php +++ b/database/factories/FailedLoginAttemptFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class FailedLoginAttemptFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = FailedLoginAttempt::class; - /** * Define the model's default state. */ diff --git a/database/factories/FeaturedTorrentFactory.php b/database/factories/FeaturedTorrentFactory.php index d4f01dbbce..f757719659 100644 --- a/database/factories/FeaturedTorrentFactory.php +++ b/database/factories/FeaturedTorrentFactory.php @@ -24,11 +24,6 @@ /** @extends Factory */ class FeaturedTorrentFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = FeaturedTorrent::class; - /** * Define the model's default state. */ diff --git a/database/factories/ForumCategoryFactory.php b/database/factories/ForumCategoryFactory.php index 263f74adf8..c86a2203e7 100644 --- a/database/factories/ForumCategoryFactory.php +++ b/database/factories/ForumCategoryFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class ForumCategoryFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = ForumCategory::class; - /** * Define the model's default state. */ diff --git a/database/factories/ForumFactory.php b/database/factories/ForumFactory.php index cb2e0ab18b..c046eadcfc 100644 --- a/database/factories/ForumFactory.php +++ b/database/factories/ForumFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class ForumFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Forum::class; - /** * Define the model's default state. */ @@ -40,7 +35,7 @@ public function definition(): array 'last_topic_id' => null, 'last_post_id' => null, 'last_post_user_id' => null, - 'last_post_created_at' => $this->faker->dateTime, + 'last_post_created_at' => $this->faker->dateTime(), 'name' => $this->faker->name(), 'slug' => $this->faker->slug(), 'description' => $this->faker->text(), diff --git a/database/factories/ForumPermissionFactory.php b/database/factories/ForumPermissionFactory.php index 82325cb13f..cad2c96c71 100644 --- a/database/factories/ForumPermissionFactory.php +++ b/database/factories/ForumPermissionFactory.php @@ -24,11 +24,6 @@ /** @extends Factory */ class ForumPermissionFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = ForumPermission::class; - /** * Define the model's default state. */ diff --git a/database/factories/FreeleechTokenFactory.php b/database/factories/FreeleechTokenFactory.php index 7ae90f4345..9adb045dcb 100644 --- a/database/factories/FreeleechTokenFactory.php +++ b/database/factories/FreeleechTokenFactory.php @@ -24,11 +24,6 @@ /** @extends Factory */ class FreeleechTokenFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = FreeleechToken::class; - /** * Define the model's default state. */ diff --git a/database/factories/GenreFactory.php b/database/factories/GenreFactory.php index 37664f8514..4b248e099a 100644 --- a/database/factories/GenreFactory.php +++ b/database/factories/GenreFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class GenreFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Genre::class; - /** * Define the model's default state. */ diff --git a/database/factories/GitUpdateFactory.php b/database/factories/GitUpdateFactory.php index e828dcdb62..428fb7537a 100644 --- a/database/factories/GitUpdateFactory.php +++ b/database/factories/GitUpdateFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class GitUpdateFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = GitUpdate::class; - /** * Define the model's default state. */ diff --git a/database/factories/GroupFactory.php b/database/factories/GroupFactory.php index 1d85c5c8fa..123944c486 100644 --- a/database/factories/GroupFactory.php +++ b/database/factories/GroupFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class GroupFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Group::class; - /** * Define the model's default state. */ diff --git a/database/factories/GuestStarFactory.php b/database/factories/GuestStarFactory.php index 93f7c65eb7..bf2ff5ce34 100644 --- a/database/factories/GuestStarFactory.php +++ b/database/factories/GuestStarFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class GuestStarFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = GuestStar::class; - /** * Define the model's default state. */ diff --git a/database/factories/HistoryFactory.php b/database/factories/HistoryFactory.php index 70cf19d506..904cc77f13 100644 --- a/database/factories/HistoryFactory.php +++ b/database/factories/HistoryFactory.php @@ -24,11 +24,6 @@ /** @extends Factory */ class HistoryFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = History::class; - /** * Define the model's default state. */ diff --git a/database/factories/InternalFactory.php b/database/factories/InternalFactory.php index 33bb3355f2..1a67a16078 100644 --- a/database/factories/InternalFactory.php +++ b/database/factories/InternalFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class InternalFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Internal::class; - /** * Define the model's default state. */ diff --git a/database/factories/InviteFactory.php b/database/factories/InviteFactory.php index e68f748f59..9b424bfb20 100644 --- a/database/factories/InviteFactory.php +++ b/database/factories/InviteFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class InviteFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Invite::class; - /** * Define the model's default state. */ diff --git a/database/factories/KeywordFactory.php b/database/factories/KeywordFactory.php index 0228834986..f90986ec6e 100644 --- a/database/factories/KeywordFactory.php +++ b/database/factories/KeywordFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class KeywordFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Keyword::class; - /** * Define the model's default state. */ diff --git a/database/factories/LikeFactory.php b/database/factories/LikeFactory.php index c854e70cb4..63ba7e9879 100644 --- a/database/factories/LikeFactory.php +++ b/database/factories/LikeFactory.php @@ -24,11 +24,6 @@ /** @extends Factory */ class LikeFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Like::class; - /** * Define the model's default state. */ diff --git a/database/factories/MediaLanguageFactory.php b/database/factories/MediaLanguageFactory.php index 5d09fa07ba..d57620fe15 100644 --- a/database/factories/MediaLanguageFactory.php +++ b/database/factories/MediaLanguageFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class MediaLanguageFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = MediaLanguage::class; - /** * Define the model's default state. */ diff --git a/database/factories/MessageFactory.php b/database/factories/MessageFactory.php index 24814ef339..146e193429 100644 --- a/database/factories/MessageFactory.php +++ b/database/factories/MessageFactory.php @@ -25,11 +25,6 @@ /** @extends Factory */ class MessageFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Message::class; - /** * Define the model's default state. */ diff --git a/database/factories/MovieFactory.php b/database/factories/MovieFactory.php index 475f3bae3f..77c424be08 100644 --- a/database/factories/MovieFactory.php +++ b/database/factories/MovieFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class MovieFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Movie::class; - /** * Define the model's default state. */ diff --git a/database/factories/NetworkFactory.php b/database/factories/NetworkFactory.php index f3ebee2e2c..73bbc67293 100644 --- a/database/factories/NetworkFactory.php +++ b/database/factories/NetworkFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class NetworkFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Network::class; - /** * Define the model's default state. */ diff --git a/database/factories/NoteFactory.php b/database/factories/NoteFactory.php index ce5c7a041e..e50e562ff0 100644 --- a/database/factories/NoteFactory.php +++ b/database/factories/NoteFactory.php @@ -23,11 +23,6 @@ /** @extends Factory */ class NoteFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Note::class; - /** * Define the model's default state. */ diff --git a/database/factories/NotificationFactory.php b/database/factories/NotificationFactory.php index 74725b6de7..05d3eae53c 100644 --- a/database/factories/NotificationFactory.php +++ b/database/factories/NotificationFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class NotificationFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Notification::class; - /** * Define the model's default state. */ diff --git a/database/factories/OccupationFactory.php b/database/factories/OccupationFactory.php index 40acf77f4e..3620ba7563 100644 --- a/database/factories/OccupationFactory.php +++ b/database/factories/OccupationFactory.php @@ -22,11 +22,6 @@ /** @extends Factory */ class OccupationFactory extends Factory { - /** - * The name of the factory's corresponding model. - */ - protected $model = Occupation::class; - /** * Define the model's default state. */ diff --git a/database/factories/OptionFactory.php b/database/factories/OptionFactory.php index b05b71879f..2f4baa8fbb 100644 --- a/database/factories/OptionFactory.php +++ b/database/factories/OptionFactory.php @@ -23,11 +23,6 @@ /** @extends Factory