Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
078942b
feat(contracts): swap Illuminate\Contracts for illuminate/contracts:^…
agissept Sep 18, 2026
1845cf7
feat(support): swap Macroable/Conditionable for illuminate/*:^13 (tas…
agissept Sep 18, 2026
689a0f8
feat(support): swap Collections for illuminate/collections:^13 (task …
agissept Sep 18, 2026
fca00e6
feat(support): swap Reflector for illuminate/reflection:^13 (task 4.1d)
agissept Sep 18, 2026
6942197
refactor(container): sweep bindShared() callers to singleton() (task …
agissept Sep 18, 2026
f1fff79
refactor(container): convert $app->share() bindings to singleton() (t…
agissept Sep 18, 2026
f63ca12
feat(container): swap Illuminate\Container for illuminate/container:^…
agissept Sep 18, 2026
fb9072f
feat(foundation): add bindShared()/share() BC shims to Application (t…
agissept Sep 18, 2026
75997c2
feat(scc1): swap support+http+session+cache+cookie+encryption+events+…
agissept Sep 18, 2026
4b216d1
feat(console): add Application::starting() BC shim (task 4.1, SCC-1 r…
agissept Sep 18, 2026
5106e7f
feat(console): make resolveCommands() resilient to unloadable v13 com…
agissept Sep 18, 2026
c3f03ee
feat(console): shim v13 MigrationGeneratorCommand + Prohibitable so a…
agissept Sep 18, 2026
539c696
feat(console): add Command::configureDefaults() shim so v13 migration…
agissept Sep 18, 2026
46f0fb9
feat(console): alias Contracts\Console\Kernel to artisan for the v13 …
agissept Sep 18, 2026
50ed6fb
feat(foundation): fix redis alias + add v13 contract aliases for SCC-…
agissept Sep 18, 2026
8296158
fix(auth): AuthManager $this->app -> $this->container for v13 Support…
agissept Sep 18, 2026
e96ecc4
fix(console): alias Contracts\Console\Kernel to 'artisan' globally (t…
agissept Sep 18, 2026
b96117e
fix(foundation): guard deferred-provider boot() like the eager loop (…
agissept Sep 18, 2026
7b26384
fix(mail): alias 'mail.manager' to fork mailer for v13 Mail facade (t…
agissept Sep 18, 2026
c294c49
feat(pagination): swap illuminate/pagination to ^13 (task 4.1 tail)
agissept Sep 18, 2026
2eb09ce
fix(foundation): add resourcePath() for v13 ServiceProviders (task 4.…
agissept Sep 18, 2026
35d1009
fix(session): csrf_token()/FormBuilder use v13 Store::token() not get…
agissept Sep 18, 2026
a8ddcfe
fix(testing): Client::filterFiles returns Illuminate UploadedFile in …
agissept Sep 19, 2026
38a6092
feat(view): swap illuminate/view to ^13 (task 4.3)
agissept Sep 22, 2026
208baf5
fix(foundation): add Application::terminating() shim for v13 ViewServ…
agissept Sep 22, 2026
c12c844
fix(foundation): alias Contracts\View\Factory to 'view' for v13 (task…
agissept Sep 22, 2026
67c4872
fix(foundation): register app as global Container::getInstance() (tas…
agissept Sep 22, 2026
684b4b1
fix(foundation): alias Application/Container contracts to 'app' for v…
agissept Sep 22, 2026
55bf0d7
fix(foundation): add getNamespace() shim for v13 ComponentTagCompiler…
agissept Sep 22, 2026
03dee29
feat(console): swap illuminate/console to ^13 (task 4.2)
agissept Sep 23, 2026
a9bb6b1
fix(console): wire artisan boot for v13 Console\Application (task 4.2)
agissept Sep 23, 2026
5bab6f0
fix(console): fork OptimizeCommand drop Process getCommandLine() call…
agissept Sep 23, 2026
8702eb7
fix(foundation): guard deferred-provider boot() for v13 providers (re…
agissept Sep 23, 2026
1d35c43
fix(queue): make console commands v13-console compatible (task 4.2)
agissept Sep 26, 2026
015f5ef
fix(foundation): memoize Artisan console before requiring artisan.php…
agissept Sep 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 22 additions & 15 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,29 @@
"php": ">=8.4.23",
"d11wtq/boris": "~1.0",
"filp/whoops": "~2.11",
"illuminate/bus": "^13",
"illuminate/cache": "^13",
"illuminate/collections": "^13",
"illuminate/conditionable": "^13",
"illuminate/console": "^13",
"illuminate/container": "^13",
"illuminate/contracts": "^13",
"illuminate/cookie": "^13",
"illuminate/database": "^13",
"illuminate/encryption": "^13",
"illuminate/events": "^13",
"illuminate/filesystem": "^13",
"illuminate/http": "^13",
"illuminate/macroable": "^13",
"illuminate/pagination": "^13",
"illuminate/pipeline": "^13",
"illuminate/redis": "^13",
"illuminate/reflection": "^13",
"illuminate/session": "^13",
"illuminate/support": "^13",
"illuminate/view": "^13",
"ircmaxell/password-compat": "~1.0",
"laravel/serializable-closure": "^1.2",
"laravel/serializable-closure": "^2.0.10",
"monolog/monolog": "^3.10",
"nesbot/carbon": "^3.8.4",
"opis/closure": "~3.6",
Expand All @@ -38,31 +59,17 @@
},
"replace": {
"illuminate/auth": "self.version",
"illuminate/cache": "self.version",
"illuminate/config": "self.version",
"illuminate/console": "self.version",
"illuminate/container": "self.version",
"illuminate/cookie": "self.version",
"illuminate/database": "self.version",
"illuminate/encryption": "self.version",
"illuminate/events": "self.version",
"illuminate/exception": "self.version",
"illuminate/filesystem": "self.version",
"illuminate/foundation": "self.version",
"illuminate/hashing": "self.version",
"illuminate/http": "self.version",
"illuminate/html": "self.version",
"illuminate/log": "self.version",
"illuminate/mail": "self.version",
"illuminate/pagination": "self.version",
"illuminate/queue": "self.version",
"illuminate/redis": "self.version",
"illuminate/routing": "self.version",
"illuminate/session": "self.version",
"illuminate/support": "self.version",
"illuminate/translation": "self.version",
"illuminate/validation": "self.version",
"illuminate/view": "self.version",
"illuminate/workbench": "self.version"
},
"require-dev": {
Expand Down
26 changes: 13 additions & 13 deletions src/Illuminate/Auth/AuthManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ protected function createDriver($driver)
// When using the remember me functionality of the authentication services we
// will need to be set the encryption instance of the guard, which allows
// secure, encrypted cookie values to get generated for those cookies.
$guard->setCookieJar($this->app['cookie']);
$guard->setCookieJar($this->container['cookie']);

$guard->setDispatcher($this->app['events']);
$guard->setDispatcher($this->container['events']);

return $guard->setRequest($this->app->refresh('request', $guard, 'setRequest'));
return $guard->setRequest($this->container->refresh('request', $guard, 'setRequest'));
}

/**
Expand All @@ -38,7 +38,7 @@ protected function callCustomCreator($driver)

if ($custom instanceof Guard) return $custom;

return new Guard($custom, $this->app['session.store']);
return new Guard($custom, $this->container['session.store']);
}

/**
Expand All @@ -50,7 +50,7 @@ public function createDatabaseDriver()
{
$provider = $this->createDatabaseProvider();

return new Guard($provider, $this->app['session.store']);
return new Guard($provider, $this->container['session.store']);
}

/**
Expand All @@ -60,14 +60,14 @@ public function createDatabaseDriver()
*/
protected function createDatabaseProvider()
{
$connection = $this->app['db']->connection();
$connection = $this->container['db']->connection();

// When using the basic database user provider, we need to inject the table we
// want to use, since this is not an Eloquent model we will have no way to
// know without telling the provider, so we'll inject the config value.
$table = $this->app['config']['auth.table'];
$table = $this->container['config']['auth.table'];

return new DatabaseUserProvider($connection, $this->app['hash'], $table);
return new DatabaseUserProvider($connection, $this->container['hash'], $table);
}

/**
Expand All @@ -79,7 +79,7 @@ public function createEloquentDriver()
{
$provider = $this->createEloquentProvider();

return new Guard($provider, $this->app['session.store']);
return new Guard($provider, $this->container['session.store']);
}

/**
Expand All @@ -89,9 +89,9 @@ public function createEloquentDriver()
*/
protected function createEloquentProvider()
{
$model = $this->app['config']['auth.model'];
$model = $this->container['config']['auth.model'];

return new EloquentUserProvider($this->app['hash'], $model);
return new EloquentUserProvider($this->container['hash'], $model);
}

/**
Expand All @@ -101,7 +101,7 @@ protected function createEloquentProvider()
*/
public function getDefaultDriver()
{
return $this->app['config']['auth.driver'];
return $this->container['config']['auth.driver'];
}

/**
Expand All @@ -112,7 +112,7 @@ public function getDefaultDriver()
*/
public function setDefaultDriver($name)
{
$this->app['config']['auth.driver'] = $name;
$this->container['config']['auth.driver'] = $name;
}

}
2 changes: 1 addition & 1 deletion src/Illuminate/Auth/AuthServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class AuthServiceProvider extends ServiceProvider {
*/
public function register()
{
$this->app->bindShared('auth', function($app)
$this->app->singleton('auth', function($app)
{
// Once the authentication service has actually been requested by the developer
// we will set a variable in the application indicating such. This helps us
Expand Down
2 changes: 1 addition & 1 deletion src/Illuminate/Auth/Console/ClearRemindersCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class ClearRemindersCommand extends Command {
*
* @return void
*/
public function fire()
public function handle()
{
$this->laravel['auth.reminder.repository']->deleteExpired();

Expand Down
2 changes: 1 addition & 1 deletion src/Illuminate/Auth/Console/RemindersControllerCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public function __construct(Filesystem $files)
*
* @return void
*/
public function fire()
public function handle()
{
$destination = $this->getPath() . '/RemindersController.php';

Expand Down
2 changes: 1 addition & 1 deletion src/Illuminate/Auth/Console/RemindersTableCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public function __construct(Filesystem $files)
*
* @return void
*/
public function fire()
public function handle()
{
$fullPath = $this->createBaseMigration();

Expand Down
10 changes: 5 additions & 5 deletions src/Illuminate/Auth/Reminders/ReminderServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public function register()
*/
protected function registerPasswordBroker()
{
$this->app->bindShared('auth.reminder', function($app)
$this->app->singleton('auth.reminder', function($app)
{
// The reminder repository is responsible for storing the user e-mail addresses
// and password reset tokens. It will be used to verify the tokens are valid
Expand Down Expand Up @@ -65,7 +65,7 @@ protected function registerPasswordBroker()
*/
protected function registerReminderRepository()
{
$this->app->bindShared('auth.reminder.repository', function($app)
$this->app->singleton('auth.reminder.repository', function($app)
{
$connection = $app['db']->connection();

Expand All @@ -89,17 +89,17 @@ protected function registerReminderRepository()
*/
protected function registerCommands()
{
$this->app->bindShared('command.auth.reminders', function($app)
$this->app->singleton('command.auth.reminders', function($app)
{
return new RemindersTableCommand($app['files']);
});

$this->app->bindShared('command.auth.reminders.clear', function()
$this->app->singleton('command.auth.reminders.clear', function()
{
return new ClearRemindersCommand;
});

$this->app->bindShared('command.auth.reminders.controller', function($app)
$this->app->singleton('command.auth.reminders.controller', function($app)
{
return new RemindersControllerCommand($app['files']);
});
Expand Down
10 changes: 5 additions & 5 deletions src/Illuminate/Cache/CacheServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,17 @@ class CacheServiceProvider extends ServiceProvider {
*/
public function register()
{
$this->app->bindShared('cache', function($app)
$this->app->singleton('cache', function($app)
{
return new CacheManager($app);
});

$this->app->bindShared('cache.store', function($app)
$this->app->singleton('cache.store', function($app)
{
return $app['cache']->driver();
});

$this->app->bindShared('memcached.connector', function()
$this->app->singleton('memcached.connector', function()
{
return new MemcachedConnector;
});
Expand All @@ -43,12 +43,12 @@ public function register()
*/
public function registerCommands()
{
$this->app->bindShared('command.cache.clear', function($app)
$this->app->singleton('command.cache.clear', function($app)
{
return new Console\ClearCommand($app['cache'], $app['files']);
});

$this->app->bindShared('command.cache.table', function($app)
$this->app->singleton('command.cache.table', function($app)
{
return new Console\CacheTableCommand($app['files']);
});
Expand Down
2 changes: 1 addition & 1 deletion src/Illuminate/CachedRouting/RoutingServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public function register()
*/
protected function registerRouter()
{
$this->app['router'] = $this->app->share(
$this->app->singleton('router',
function ($app) {
$router = new Router($app['events'], $app);

Expand Down
40 changes: 39 additions & 1 deletion src/Illuminate/Console/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,27 @@ class Application extends \Symfony\Component\Console\Application {
*/
protected $laravel;

/**
* Callbacks to run when a console application is starting.
*
* ponytail: BC shim for v13 Support\ServiceProvider::commands(), which calls
* Illuminate\Console\Application::starting(). Remove when console swaps to v13 (task 4.2/4.3).
*
* @var callable[]
*/
protected static $startingCallbacks = array();

/**
* Register a callback to run when the console application is starting.
*
* @param callable $callback
* @return void
*/
public static function starting($callback)
{
static::$startingCallbacks[] = $callback;
}

/**
* Create and boot a new Console application.
*
Expand Down Expand Up @@ -51,6 +72,11 @@ public static function make($app)

$app->instance('artisan', $console);

foreach (static::$startingCallbacks as $callback)
{
$callback($console);
}

return $console;
}

Expand Down Expand Up @@ -153,7 +179,19 @@ public function resolveCommands($commands)

foreach ($commands as $command)
{
$this->resolve($command);
try
{
$this->resolve($command);
}
catch (\Throwable $e)
{
// ponytail: some v13 components (session/cache/…) register console commands
// that extend v13 console base classes absent from the not-yet-swapped fork
// console. Skip the ones that can't load so artisan still boots; they return
// with the console swap (task 4.2). Commands that load fine still register.
error_log('[l13] skipped unresolvable console command '
. (is_string($command) ? $command : gettype($command)) . ': ' . $e->getMessage());
}
}
}

Expand Down
13 changes: 13 additions & 0 deletions src/Illuminate/Console/Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,19 @@ public function __construct()
$this->specifyParameters();
}

/**
* ponytail: BC shim — exists so v13 component commands that declare
* `#[\Override] configureDefaults()` (against the v13 console Command) can load under
* the not-yet-swapped fork console. The fork configures via the constructor /
* specifyParameters() instead, so this is a no-op. Remove at the console swap (task 4.2).
*
* @return void
*/
protected function configureDefaults()
{
//
}

/**
* Specify the arguments and options on the command.
*
Expand Down
39 changes: 39 additions & 0 deletions src/Illuminate/Console/MigrationGeneratorCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php namespace Illuminate\Console;

/**
* ponytail: BC shim for v13's Illuminate\Console\MigrationGeneratorCommand. The fork
* console is not swapped yet (task 4.2), but v13 component commands (make:session-table,
* make:cache-table) extend this base — without it their class declaration fatals and
* breaks artisan boot. This lets them load; actual migration generation needs the v13
* console and is out of scope until the console swap. Remove then.
*/
abstract class MigrationGeneratorCommand extends Command {

/**
* Get the migration table name.
*
* @return string
*/
abstract protected function migrationTableName();

/**
* Get the path to the migration stub file.
*
* @return string
*/
abstract protected function migrationStubFile();

/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
if (method_exists($this, 'error')) {
$this->error('make:*-table generators require the v13 console (L13 migration task 4.2).');
}

return 1;
}
}
Loading