31use GuzzleHttp\Psr7\HttpFactory;
32use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
117use MediaWiki\Languages\LanguageConverterFactory;
118use MediaWiki\Languages\LanguageEventIngress;
119use MediaWiki\Languages\LanguageFactory;
120use MediaWiki\Languages\LanguageFallback;
121use MediaWiki\Languages\LanguageNameUtils;
289use Psr\Http\Client\ClientInterface;
294use Wikimedia\Mime\MimeAnalyzer;
299use Wikimedia\ObjectFactory\ObjectFactory;
300use Wikimedia\Parsoid\Config\DataAccess;
301use Wikimedia\Parsoid\Parsoid;
307use Wikimedia\RequestTimeout\CriticalSectionProvider;
308use Wikimedia\RequestTimeout\RequestTimeout;
338 $services->getObjectFactory(),
339 $services->getHookContainer(),
340 $services->getContentHandlerFactory()
346 $services->getActorStoreFactory()
351 return $services->getActorStoreFactory()->getActorNormalization();
355 return $services->getActorStoreFactory()->getActorStore();
361 $services->getDBLoadBalancerFactory(),
362 $services->getUserNameUtils(),
363 $services->getTempUserConfig(),
365 $services->getHideUserUtils()
371 $services->getConnectionProvider(),
372 $services->getRevisionStore()
379 $services->getMainConfig(),
380 $services->getChangeTagsStore(),
381 $services->getObjectFactory(),
382 $services->getObjectCacheFactory(),
383 $services->getHookContainer(),
384 $services->getReadOnlyMode(),
385 $services->getUserNameUtils(),
386 $services->getBlockManager(),
387 $services->getWatchlistManager(),
388 $services->getDBLoadBalancer(),
389 $services->getContentLanguage(),
390 $services->getLanguageConverterFactory(),
391 $services->getBotPasswordStore(),
392 $services->getUserFactory(),
393 $services->getUserIdentityLookup(),
394 $services->getUserIdentityUtils(),
395 $services->getUserOptionsManager(),
396 $services->getNotificationService(),
397 $services->getSessionManager()
399 $authManager->
setLogger( LoggerFactory::getInstance(
'authentication' ) );
400 $authManager->setAuthEventsLogger( LoggerFactory::getInstance(
'authevents' ) );
408 AutoblockExemptionList::CONSTRUCTOR_OPTIONS,
409 $services->getMainConfig(),
411 LoggerFactory::getInstance(
'AutoblockExemptionList' ),
412 $messageFormatterFactory->getTextFormatter(
413 $services->getContentLanguageCode()->toString()
422 $services->getMainConfig()
424 $services->getLinksMigration(),
425 $services->getMainWANObjectCache(),
426 $services->getHookContainer(),
427 $services->getConnectionProvider(),
428 $services->getRestrictionStore(),
436 return wfMessage(
'bad_image_list' )->inContentLanguage()->plain();
438 $services->getLocalServerObjectCache(),
439 $services->getRepoGroup(),
440 $services->getTitleParser(),
441 $services->getHookContainer()
446 return $services->getService(
'_SqlBlobStore' );
451 $services->getDBLoadBalancerFactory(),
452 $services->getExternalStoreAccess(),
453 $services->getMainWANObjectCache(),
455 $services->getMainConfig() )
464 return $services->getFormatterFactory()->getBlockErrorFormatter(
473 $services->getMainConfig()
475 $services->getUserFactory(),
476 $services->getUserIdentityUtils(),
478 $services->getHookContainer(),
479 $services->getDatabaseBlockStore(),
480 $services->getBlockTargetFactory(),
481 $services->getProxyLookup()
485 'BlockPermissionCheckerFactory' =>
static function (
491 $services->getMainConfig()
493 $services->getBlockTargetFactory()
498 return $services->getBlockRestrictionStoreFactory()->getBlockRestrictionStore(
WikiAwareEntity::LOCAL );
503 $services->getDBLoadBalancerFactory()
508 return $services->getCrossWikiBlockTargetFactory()->getFactory();
512 return $services->getService(
'_UserBlockCommandFactory' );
516 return $services->getBlockUtilsFactory()->getBlockUtils();
521 $services->getCrossWikiBlockTargetFactory()
529 $services->getMainConfig()
531 $services->getCentralIdLookup(),
532 $services->getDBLoadBalancerFactory()
537 return $services->getCentralIdLookupFactory()->getLookup();
543 $services->getObjectFactory(),
544 $services->getUserIdentityLookup(),
545 $services->getUserFactory()
552 $services->getRecentChangeLookup(),
553 $services->getWatchedItemStore(),
554 $services->getTempUserConfig(),
555 $services->getUserFactory(),
556 $services->getLinkTargetLookup(),
557 $services->getChangeTagsStore(),
558 $services->getStatsFactory(),
559 $services->getSlotRoleStore(),
561 $services->getConnectionProvider(),
566 return $services->getNameTableStoreFactory()->getChangeTagDef();
570 return $services->getChangeTagsStoreFactory()->getChangeTagsStore();
575 $services->getConnectionProvider(),
576 $services->getNameTableStoreFactory(),
577 $services->getMainWANObjectCache(),
578 $services->getHookContainer(),
580 $services->getUserFactory(),
583 $services->getMainConfig()
589 $mainConfig = $services->getMainConfig();
590 $microStashIsDatabase = $services->getObjectCacheFactory()->isDatabaseId(
591 $mainConfig->get( MainConfigNames::MicroStashType )
593 $cpStash = $microStashIsDatabase
595 : $services->getMicroStash();
599 $mainConfig->get( MainConfigNames::ChronologyProtectorSecret ),
601 LoggerFactory::getInstance(
'rdbms' )
610 $req = RequestContext::getMain()->getRequest();
613 $reqStart = (int)( $_SERVER[
'REQUEST_TIME_FLOAT'] ?? time() );
614 $cpPosInfo = ChronologyProtector::getCPInfoFromCookieValue(
616 $req->getCookie(
'cpPosIndex',
'' ),
618 $reqStart - ChronologyProtector::POSITION_COOKIE_TTL
620 $chronologyProtector->setRequestInfo( [
621 'IPAddress' => $req->getIP(),
622 'UserAgent' => $req->getHeader(
'User-Agent' ),
623 'ChronologyPositionIndex' => $req->getInt(
'cpPosIndex', $cpPosInfo[
'index'] ),
624 'ChronologyClientId' => $cpPosInfo[
'clientId'] ??
null,
626 return $chronologyProtector;
633 $services->getObjectFactory(),
634 $services->getHookContainer()
640 $services->getCommentParserFactory()
646 $services->getLinkRendererFactory()->create( [
'renderForComment' => true ] ),
647 $services->getLinkBatchFactory(),
648 $services->getLinkCache(),
649 $services->getRepoGroup(),
650 $services->getContentLanguage(),
651 $services->getTitleParser(),
652 $services->getNamespaceInfo(),
653 $services->getHookContainer()
663 $registry = $services->getBootstrapConfig()->get(
MainConfigNames::ConfigRegistry );
666 foreach ( $registry as $name => $callback ) {
667 $factory->register( $name, $callback );
678 $settings = $services->get(
'_SettingsBuilder' );
679 return $settings->getConfigSchema();
683 $config = $services->getMainConfig();
685 $config->get( MainConfigNames::ReadOnly ),
686 $config->get( MainConfigNames::ReadOnlyFile )
694 $services->getMainConfig()
696 $services->getLocalServerObjectCache(),
697 $services->getUrlUtils()
705 $services->getMainConfig()
707 new
HookRunner( $services->getHookContainer() ),
708 $services->getUserFactory(),
709 $services->getEmailer(),
710 $services->getConfirmEmailBuilderFactory()
715 return $services->getDBLoadBalancerFactory();
719 $contentHandlerConfig = $services->getMainConfig()->get(
MainConfigNames::ContentHandlers );
722 $contentHandlerConfig,
723 $services->getObjectFactory(),
724 $services->getHookContainer(),
725 LoggerFactory::getInstance(
'ContentHandler' )
731 $services->getContentHandlerFactory(),
736 return $services->getLanguageFactory()->getLanguage(
741 return $services->getLanguageFactory()->getLanguageCode(
746 return $services->getService(
'_PageCommandFactory' );
750 return $services->getNameTableStoreFactory()->getContentModels();
755 $services->getContentHandlerFactory(),
756 $services->getGlobalIdGenerator()
764 'CriticalSectionProvider' =>
static function (
MediaWikiServices $services ): CriticalSectionProvider {
765 $config = $services->getMainConfig();
766 $limit =
MW_ENTRY_POINT ===
'cli' ? INF : $config->get( MainConfigNames::CriticalSectionTimeLimit );
767 return RequestTimeout::singleton()->createCriticalSectionProvider( $limit );
773 $services->getActorStoreFactory(),
774 $services->getUserNameUtils()
779 return $services->getDatabaseBlockStoreFactory()->getDatabaseBlockStore(
DatabaseBlock::LOCAL );
786 $services->getMainConfig()
789 $services->getActorStoreFactory(),
790 $services->getBlockRestrictionStoreFactory(),
791 $services->getCommentStore(),
792 $services->getHookContainer(),
793 $services->getDBLoadBalancerFactory(),
794 $services->getReadOnlyMode(),
795 $services->getUserFactory(),
796 $services->getTempUserConfig(),
797 $services->getCrossWikiBlockTargetFactory(),
798 $services->getAutoblockExemptionList(),
799 $services->getSessionManager()
806 'debugSql' => $services->getMainConfig()->get(
MainConfigNames::DebugDumpSql ),
807 'tracer' => $services->getTracer(),
818 return $services->getDBLoadBalancerFactory()->getMainLB();
822 $mainConfig = $services->getMainConfig();
823 $lbFactoryConfigBuilder = $services->getDBLoadBalancerFactoryConfigBuilder();
825 $lbConf = $lbFactoryConfigBuilder->applyDefaultConfig(
826 $mainConfig->get( MainConfigNames::LBFactoryConf )
829 $class = $lbFactoryConfigBuilder->getLBFactoryClass( $lbConf );
832 $lbFactoryConfigBuilder->setDomainAliases( $instance );
838 $mainConfig = $services->getMainConfig();
839 if ( $services->getObjectCacheFactory()->isDatabaseId(
840 $mainConfig->get( MainConfigNames::MainCacheType )
842 $wanCache = WANObjectCache::newEmpty();
844 $wanCache = $services->getMainWANObjectCache();
846 $srvCache = $services->getLocalServerObjectCache();
853 new ServiceOptions( MWLBFactory::APPLY_DEFAULT_CONFIG_OPTIONS, $services->getMainConfig() ),
855 $mainConfig->get( MainConfigNames::ReadOnly ),
856 $mainConfig->get( MainConfigNames::ReadOnlyFile )
858 $services->getChronologyProtector(),
861 $services->getCriticalSectionProvider(),
862 $services->getStatsFactory(),
863 ExtensionRegistry::getInstance()->getAttribute(
'DatabaseVirtualDomains' ),
864 $services->getTracer(),
865 RequestContext::getMain()->getRequest()->getIP()
874 $services->getMainConfig(),
876 $services->getObjectFactory()
877 ) )->buildPipeline();
881 return $services->getService(
'_PageCommandFactory' );
885 return $services->getService(
'_DomainEventDispatcher' );
889 return $services->getService(
'_DomainEventDispatcher' );
899 $services->getHookContainer(),
900 $services->getUserOptionsLookup(),
901 $services->getCentralIdLookup(),
902 $services->getUserFactory(),
903 $services->getEmailer(),
904 $services->getMessageFormatterFactory(),
905 $services->getMessageFormatterFactory()->getTextFormatter(
906 $services->getContentLanguageCode()->toString()
919 'ExternalStoreAccess' =>
static function (
MediaWikiServices $services ): ExternalStoreAccess {
920 return new ExternalStoreAccess(
921 $services->getExternalStoreFactory(),
926 'ExternalStoreFactory' =>
static function (
MediaWikiServices $services ): ExternalStoreFactory {
927 $config = $services->getMainConfig();
928 $writeStores = $config->get( MainConfigNames::DefaultExternalStore );
930 return new ExternalStoreFactory(
931 $config->get( MainConfigNames::ExternalStores ),
932 ( $writeStores !==
false ) ? (array)$writeStores : [],
933 $services->getDBLoadBalancer()->getLocalDomainID(),
942 $services->getMainConfig()
948 $mainConfig = $services->getMainConfig();
950 $ld = WikiMap::getCurrentWikiDbDomain();
951 $fallbackWikiId = WikiMap::getWikiIdFromDbDomain( $ld );
955 $legacyDomainId = strlen( $ld->getTablePrefix() )
956 ?
"{$ld->getDatabase()}-{$ld->getTablePrefix()}"
957 : $ld->getDatabase();
958 if ( $ld->getSchema() !==
null && $legacyDomainId !== $fallbackWikiId ) {
960 "Legacy default 'domainId' is '$legacyDomainId' but wiki ID is '$fallbackWikiId'."
964 $cache = $services->getLocalServerObjectCache();
970 new ServiceOptions( FileBackendGroup::CONSTRUCTOR_OPTIONS, $mainConfig,
971 [
'fallbackWikiId' => $fallbackWikiId ] ),
972 $services->getReadOnlyMode(),
974 $services->getMainWANObjectCache(),
975 $services->getMimeAnalyzer(),
976 $services->getLockManagerGroupFactory(),
977 $services->getTempFSFileFactory(),
978 $services->getObjectFactory()
984 $services->getMessageParser(),
985 $services->getTitleFormatter(),
986 $services->getHookContainer(),
987 $services->getUserIdentityUtils(),
988 $services->getLanguageFactory(),
994 $nsInfo = $services->getNamespaceInfo();
996 if ( $services->isServiceDisabled(
'DBLoadBalancer' ) ) {
999 $services->getMainConfig()->get( MainConfigNames::DefaultUserOptions )
1002 $userOptionsLookup = $services->getUserOptionsLookup();
1004 return new GenderCache( $nsInfo, $userOptionsLookup );
1008 $mainConfig = $services->getMainConfig();
1011 $mainConfig->get( MainConfigNames::TmpDirectory ),
1012 static function ( $command ) {
1022 $services->getMainConfig()
1029 $services->getGrantsInfo(),
1031 $services->getLanguageFactory(),
1032 $services->getContentLanguage()
1050 $configHooks = $services->getBootstrapConfig()->get(
MainConfigNames::Hooks );
1052 $extRegistry = ExtensionRegistry::getInstance();
1053 $extHooks = $extRegistry->getAttribute(
'Hooks' );
1054 $extDeprecatedHooks = $extRegistry->getAttribute(
'DeprecatedHooks' );
1058 $services->getObjectFactory()
1063 $config = $services->getMainConfig();
1066 $services->getHookContainer(),
1067 $services->getTitleFactory(),
1068 $config->get( MainConfigNames::CdnReboundPurgeDelay ),
1069 $config->get( MainConfigNames::UseFileCache ),
1070 $config->get( MainConfigNames::CdnMaxAge )
1076 $services->getService(
'_Parsoid' ),
1078 $services->getParsoidPageConfigFactory(),
1079 $services->getContentHandlerFactory(),
1080 $services->getParsoidSiteConfig(),
1081 $services->getTitleFactory(),
1082 $services->getLanguageConverterFactory(),
1083 $services->getLanguageFactory()
1091 $services->getMainConfig()
1094 $services->getTracer()
1102 $services->getMainConfig(),
1103 [
'wikiId' =>
WikiMap::getCurrentWikiId() ]
1105 $services->getContentLanguage(),
1106 $services->getMainWANObjectCache(),
1107 $services->getHookContainer(),
1108 $services->getConnectionProvider(),
1109 $services->getLanguageNameUtils()
1115 $services->getMainConfig(),
1117 $services->getPermissionManager(),
1118 $services->getUserNameUtils(),
1119 $services->getTempUserCreator(),
1120 $services->getUserFactory(),
1121 $services->getRestrictionStore(),
1122 $services->getDatabaseBlockStore(),
1123 $services->getReadOnlyMode(),
1124 $services->getSpecialPageFactory(),
1125 $services->getRepoGroup(),
1126 $services->getNamespaceInfo(),
1127 $services->getSkinFactory(),
1128 $services->getConnectionProvider(),
1129 $services->getUrlUtils()
1135 $services->getObjectFactory(),
1141 return $services->getJobQueueGroupFactory()->makeJobQueueGroup();
1147 $services->getReadOnlyMode(),
1148 $services->getStatsFactory(),
1149 $services->getMainWANObjectCache(),
1150 $services->getGlobalIdGenerator()
1157 $services->getDBLoadBalancerFactory(),
1158 $services->getJobQueueGroup(),
1159 $services->getReadOnlyMode(),
1160 $services->getLinkCache(),
1161 $services->getStatsFactory(),
1176 'LanguageConverterFactory' =>
static function (
MediaWikiServices $services ): LanguageConverterFactory {
1177 return new LanguageConverterFactory(
1178 new
ServiceOptions( LanguageConverterFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ),
1179 $services->getObjectFactory(),
1180 static function () use ( $services ) {
1181 return $services->getContentLanguage();
1186 'LanguageFactory' =>
static function (
MediaWikiServices $services ): LanguageFactory {
1187 return new LanguageFactory(
1188 new
ServiceOptions( LanguageFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ),
1189 $services->getNamespaceInfo(),
1190 $services->getLocalisationCache(),
1191 $services->getLanguageNameUtils(),
1192 $services->getLanguageFallback(),
1193 $services->getLanguageConverterFactory(),
1194 $services->getHookContainer(),
1195 $services->getMainConfig()
1199 'LanguageFallback' =>
static function (
MediaWikiServices $services ): LanguageFallback {
1200 return new LanguageFallback(
1202 $services->getLocalisationCache(),
1203 $services->getLanguageNameUtils()
1209 $services->getLanguageNameUtils()
1213 'LanguageNameUtils' =>
static function (
MediaWikiServices $services ): LanguageNameUtils {
1214 return new LanguageNameUtils(
1216 LanguageNameUtils::CONSTRUCTOR_OPTIONS,
1217 $services->getMainConfig()
1219 $services->getHookContainer()
1227 $services->getMainConfig()
1235 $services->getLinkCache(),
1236 $services->getTitleFormatter(),
1237 $services->getContentLanguage(),
1238 $services->getGenderCache(),
1239 $services->getConnectionProvider(),
1240 $services->getLinksMigration(),
1241 $services->getTempUserDetailsLookup(),
1248 $dbLoadBalancer = $services->isServiceDisabled(
'DBLoadBalancer' )
1250 : $services->getDBLoadBalancer();
1252 $services->getTitleFormatter(),
1253 $services->getMainWANObjectCache(),
1254 $services->getNamespaceInfo(),
1257 $linkCache->setLogger( LoggerFactory::getInstance(
'LinkCache' ) );
1262 return $services->getLinkRendererFactory()->create();
1267 $services->getTitleFormatter(),
1268 $services->getLinkCache(),
1269 $services->getSpecialPageFactory(),
1270 $services->getHookContainer(),
1271 $services->getTempUserConfig(),
1272 $services->getTempUserDetailsLookup(),
1273 $services->getUserIdentityLookup(),
1274 $services->getUserNameUtils()
1280 $services->getMainConfig(),
1281 $services->getLinkTargetLookup()
1287 $services->getConnectionProvider(),
1288 $services->getLocalServerObjectCache(),
1289 $services->getMainWANObjectCache()
1295 $services->get(
'_Parsoid' ),
1296 $services->getParsoidPageConfigFactory(),
1297 $services->getTitleFactory(),
1299 $services->getMainConfig(),
1303 'LocalisationCache' =>
static function (
MediaWikiServices $services ): LocalisationCache {
1304 $conf = $services->getMainConfig()->get(
MainConfigNames::LocalisationCacheConf );
1306 $logger = LoggerFactory::getInstance(
'localisation' );
1308 $store = LocalisationCache::getStoreFromConf(
1309 $conf, $services->getMainConfig()->get( MainConfigNames::CacheDirectory ) );
1310 $logger->debug(
'LocalisationCache using store ' . get_class( $store ) );
1312 return new $conf[
'class'](
1314 LocalisationCache::CONSTRUCTOR_OPTIONS,
1319 'forceRecache' =>
false,
1320 'manualRecache' =>
false,
1323 $services->getMainConfig()
1327 [
static function () use ( $services ) {
1331 MessageBlobStore::clearGlobalCacheEntry( $services->getMainWANObjectCache() );
1333 $services->getLanguageNameUtils(),
1334 $services->getHookContainer()
1344 WikiMap::getCurrentWikiDbDomain()->getId(),
1352 $services->getObjectFactory(),
1353 $services->getHookContainer(),
1355 $services->getContentLanguage(),
1356 $services->getCommentFormatter(),
1357 $services->getUserEditTracker()
1363 $services->getContentLanguage(),
1364 $services->getHookContainer()
1370 return $services->getConfigFactory()->makeConfig(
'main' );
1374 $mainConfig = $services->getMainConfig();
1376 $id = $mainConfig->
get( MainConfigNames::MainStash );
1377 $store = $services->getObjectCacheFactory()->getInstance( $id );
1378 $store->getLogger()->debug(
'MainObjectStash using store {class}', [
1379 'class' => get_class( $store )
1386 $mainConfig = $services->getMainConfig();
1388 $store = $services->getObjectCacheFactory()->getLocalClusterInstance();
1389 $logger = $store->getLogger();
1390 $logger->debug(
'MainWANObjectCache using store {class}', [
1391 'class' => get_class( $store )
1394 $wanParams = $mainConfig->get( MainConfigNames::WANObjectCache ) + [
1397 'tracer' => $services->getTracer(),
1401 $wanParams[
'stats'] = $services->getStatsFactory();
1403 $wanParams[
'asyncHandler'] = DeferredUpdates::addCallableUpdate( ... );
1408 'MediaHandlerFactory' =>
static function (
MediaWikiServices $services ): MediaHandlerFactory {
1409 return new MediaHandlerFactory(
1416 return $services->getService(
'_PageCommandFactory' );
1419 'MessageCache' =>
static function (
MediaWikiServices $services ): MessageCache {
1420 $mainConfig = $services->getMainConfig();
1421 $mainCache = $services->getObjectCacheFactory()
1422 ->getInstance( $mainConfig->get( MainConfigNames::MessageCacheType ) );
1423 $srvCache = $mainConfig->get( MainConfigNames::UseLocalMessageCache )
1424 ? $services->getLocalServerObjectCache()
1427 $logger = LoggerFactory::getInstance(
'MessageCache' );
1428 $logger->debug(
'MessageCache using store {class}', [
1429 'class' => get_class( $mainCache )
1432 $options =
new ServiceOptions( MessageCache::CONSTRUCTOR_OPTIONS, $mainConfig );
1434 return new MessageCache(
1435 $services->getMainWANObjectCache(),
1438 $services->getContentLanguage(),
1439 $services->getLanguageConverterFactory(),
1442 $services->getLocalisationCache(),
1443 $services->getLanguageNameUtils(),
1444 $services->getLanguageFallback(),
1445 $services->getHookContainer(),
1446 $services->getMessageParser()
1456 $services->getParserFactory(),
1457 $services->getDefaultOutputPipeline(),
1458 $services->getLanguageFactory(),
1464 $mainConfig = $services->getMainConfig();
1466 $id = $mainConfig->
get( MainConfigNames::MicroStashType );
1467 $store = $services->getObjectCacheFactory()->getInstance( $id );
1469 $store->getLogger()->debug(
'MicroStash using store {class}', [
1470 'class' => get_class( $store )
1476 'MimeAnalyzer' =>
static function (
MediaWikiServices $services ): MimeAnalyzer {
1478 $mainConfig = $services->getMainConfig();
1479 $hookRunner =
new HookRunner( $services->getHookContainer() );
1481 'typeFile' => $mainConfig->get( MainConfigNames::MimeTypeFile ),
1482 'infoFile' => $mainConfig->get( MainConfigNames::MimeInfoFile ),
1483 'xmlTypes' => $mainConfig->get( MainConfigNames::XMLMimeTypes ),
1484 'guessCallback' =>
static function (
1485 $mimeAnalyzer, &$head, &$tail, $file, &$mime
1486 ) use ( $logger, $hookRunner ) {
1488 $deja =
new DjVuImage( $file );
1489 if ( $deja->isValid() ) {
1490 $logger->info(
"Detected $file as image/vnd.djvu\n" );
1491 $mime =
'image/vnd.djvu';
1496 $hookRunner->onMimeMagicGuessFromContent(
1497 $mimeAnalyzer, $head, $tail, $file, $mime );
1499 'extCallback' =>
static function ( $mimeAnalyzer, $ext, &$mime ) use ( $hookRunner ) {
1501 $hookRunner->onMimeMagicImproveFromExtension( $mimeAnalyzer, $ext, $mime );
1503 'initCallback' =>
static function ( $mimeAnalyzer ) use ( $hookRunner ) {
1505 $hookRunner->onMimeMagicInit( $mimeAnalyzer );
1510 if ( $params[
'infoFile'] ===
'includes/mime.info' ) {
1511 $params[
'infoFile'] = MimeAnalyzer::USE_INTERNAL;
1514 if ( $params[
'typeFile'] ===
'includes/mime.types' ) {
1515 $params[
'typeFile'] = MimeAnalyzer::USE_INTERNAL;
1518 $detectorCmd = $mainConfig->get( MainConfigNames::MimeDetectorCommand );
1519 if ( $detectorCmd ) {
1520 $factory = $services->getShellCommandFactory();
1521 $params[
'detectCallback'] =
static function ( $file ) use ( $detectorCmd, $factory ) {
1522 $result = $factory->create()
1524 ->unsafeParams( $detectorCmd )
1527 return $result->getStdout();
1531 return new MimeAnalyzer( $params );
1535 return $services->getService(
'_PageCommandFactory' );
1540 $services->getActorStoreFactory(),
1541 $services->getUserFactory(),
1549 $services->getHookContainer(),
1557 $services->getDBLoadBalancerFactory(),
1558 $services->getMainWANObjectCache(),
1564 $handlers =
ExtensionRegistry::getInstance()->getAttribute(
'NotificationHandlers' );
1566 $handlers[] = NotificationService::RECENT_CHANGE_HANDLER_SPEC;
1569 LoggerFactory::getInstance(
'Notification' ),
1570 $services->getObjectFactory(),
1571 $services->getService(
'_NotificationMiddlewareChain' ),
1580 $services->getMainConfig()
1582 $services->getStatsFactory(),
1586 static function () use ( $services ) {
1587 return $services->getDBLoadBalancerFactory();
1589 WikiMap::getCurrentWikiDbDomain()->getId(),
1590 $services->getTracer()
1594 'ObjectFactory' =>
static function (
MediaWikiServices $services ): ObjectFactory {
1595 return new ObjectFactory( $services );
1598 'OldRevisionImporter' =>
static function (
MediaWikiServices $services ): OldRevisionImporter {
1599 return new ImportableOldRevisionImporter(
1602 $services->getConnectionProvider(),
1603 $services->getRevisionStoreFactory()->getRevisionStoreForImport(),
1604 $services->getSlotRoleRegistry(),
1605 $services->getWikiPageFactory(),
1606 $services->getPageUpdaterFactory(),
1607 $services->getUserFactory()
1613 $services->getObjectCacheFactory()->getLocalClusterInstance(),
1614 $services->getConnectionProvider(),
1616 $services->getStatsFactory(),
1617 $services->getUserEditTracker(),
1618 $services->getUserFactory(),
1619 $services->getWikiPageFactory(),
1620 $services->getJsonCodec(),
1621 $services->getHookContainer(),
1630 $services->getLinkBatchFactory(),
1631 $services->getConnectionProvider()
1638 $services->getRevisionLookup(),
1639 $services->getRevisionRenderer(),
1640 $services->getTitleFormatter(),
1641 $services->getPageStore(),
1642 $services->getParsoidOutputStash(),
1643 $services->getParserOutputAccess(),
1644 $services->getParsoidSiteConfig(),
1645 $services->getHtmlTransformFactory(),
1646 $services->getContentHandlerFactory(),
1647 $services->getLanguageFactory(),
1648 $services->getRedirectStore(),
1649 $services->getLanguageConverterFactory(),
1650 $services->getTitleFactory(),
1651 $services->getConnectionProvider(),
1652 $services->getChangeTagsStore(),
1653 $services->getStatsFactory()
1658 return $services->getPageStoreFactory()->getPageStore();
1664 $services->getMainConfig()
1669 $services->getDBLoadBalancerFactory(),
1670 $services->getNamespaceInfo(),
1671 $services->getTitleParser(),
1672 $services->getLinkCache(),
1673 $services->getStatsFactory()
1677 'PageUpdaterFactory' =>
static function (
1681 $services->getMainObjectStash(),
1682 $services->getConnectionProvider(),
1685 $services->getMainConfig()
1690 $services->getRevisionStore(),
1691 $services->getRevisionRenderer(),
1692 $services->getSlotRoleRegistry(),
1693 $services->getParserCache(),
1694 $services->getJobQueueGroup(),
1695 $services->getContentLanguage(),
1696 $services->getDBLoadBalancerFactory(),
1697 $services->getContentHandlerFactory(),
1698 $services->getDomainEventDispatcher(),
1699 $services->getHookContainer(),
1701 LoggerFactory::getInstance(
'SavePage' ),
1703 PageUpdaterFactory::CONSTRUCTOR_OPTIONS,
1704 $services->getMainConfig()
1706 $services->getUserGroupManager(),
1707 $services->getTitleFormatter(),
1708 $services->getContentTransformer(),
1709 $services->getPageEditStash(),
1710 $services->getMainWANObjectCache(),
1711 $services->getWikiPageFactory(),
1712 $services->getChangeTagsStore(),
1713 $services->getChangeTagsStore()->getSoftwareTags()
1721 return $services->getParserFactory()->getMainInstance();
1725 return $services->getParserCacheFactory()
1730 $config = $services->getMainConfig();
1731 $cache = $services->getObjectCacheFactory()->getInstance( $config->get( MainConfigNames::ParserCacheType ) );
1732 $wanCache = $services->getMainWANObjectCache();
1734 $options =
new ServiceOptions( ParserCacheFactory::CONSTRUCTOR_OPTIONS, $config );
1739 $services->getHookContainer(),
1740 $services->getJsonCodec(),
1741 $services->getStatsFactory(),
1742 LoggerFactory::getInstance(
'ParserCache' ),
1744 $services->getTitleFactory(),
1745 $services->getWikiPageFactory(),
1746 $services->getGlobalIdGenerator()
1752 $services->getMainConfig()
1757 $services->getMagicWordFactory(),
1758 $services->getContentLanguage(),
1759 $services->getUrlUtils(),
1760 $services->getSpecialPageFactory(),
1761 $services->getLinkRendererFactory(),
1762 $services->getNamespaceInfo(),
1763 LoggerFactory::getInstance(
'Parser' ),
1764 $services->getBadFileLookup(),
1765 $services->getLanguageConverterFactory(),
1766 $services->getLanguageNameUtils(),
1767 $services->getHookContainer(),
1768 $services->getTidy(),
1769 $services->getMainWANObjectCache(),
1770 $services->getUserOptionsLookup(),
1771 $services->getUserFactory(),
1772 $services->getTitleFormatter(),
1773 $services->getHttpRequestFactory(),
1774 $services->getTrackingCategories(),
1775 $services->getSignatureValidatorFactory(),
1776 $services->getUserNameUtils()
1782 $services->getParserCacheFactory(),
1783 $services->getRevisionLookup(),
1784 $services->getRevisionRenderer(),
1785 $services->getStatsFactory(),
1786 $services->getChronologyProtector(),
1787 $services->getWikiPageFactory(),
1788 $services->getTitleFormatter(),
1789 $services->getTracer(),
1790 $services->getPoolCounterFactory()
1793 $poa->
setLogger( LoggerFactory::getInstance(
'ParserOutputAccess' ) );
1797 'ParsoidDataAccess' =>
static function (
MediaWikiServices $services ): DataAccess {
1798 $mainConfig = $services->getMainConfig();
1799 return new MWDataAccess(
1801 $services->getRepoGroup(),
1802 $services->getBadFileLookup(),
1803 $services->getHookContainer(),
1804 $services->getContentTransformer(),
1805 $services->getTrackingCategories(),
1806 $services->getReadOnlyMode(),
1807 $services->getParserFactory(),
1808 $services->getLinkBatchFactory(),
1809 $services->getLinkRenderer()
1816 $config = $services->getMainConfig()->get(
MainConfigNames::ParsoidCacheConfig );
1817 $backend = $config[
'StashType']
1818 ? $services->getObjectCacheFactory()->getInstance( $config[
'StashType'] )
1819 : $services->getMainObjectStash();
1822 $services->getJsonCodec(),
1824 $config[
'StashDuration']
1828 'ParsoidPageConfigFactory' =>
static function (
MediaWikiServices $services ): MWPageConfigFactory {
1829 return new MWPageConfigFactory(
1830 $services->getRevisionStore(),
1831 $services->getSlotRoleRegistry(),
1832 $services->getLanguageFactory()
1838 $services->getParsoidSiteConfig(),
1839 $services->getParsoidDataAccess(),
1840 $services->getParsoidPageConfigFactory(),
1841 $services->getLanguageConverterFactory(),
1842 $services->getParserFactory()
1846 'ParsoidSiteConfig' =>
static function (
MediaWikiServices $services ): MWSiteConfig {
1847 $mainConfig = $services->getMainConfig();
1848 $parsoidSettings = $mainConfig->get( MainConfigNames::ParsoidSettings );
1849 return new MWSiteConfig(
1852 $services->getObjectFactory(),
1853 $services->getContentLanguage(),
1854 $services->getStatsdDataFactory(),
1855 $services->getStatsFactory(),
1856 $services->getMagicWordFactory(),
1857 $services->getNamespaceInfo(),
1858 $services->getSpecialPageFactory(),
1859 $services->getInterwikiLookup(),
1860 $services->getUserOptionsLookup(),
1861 $services->getLanguageFactory(),
1862 $services->getLanguageConverterFactory(),
1863 $services->getLanguageNameUtils(),
1864 $services->getUrlUtils(),
1865 $services->getContentHandlerFactory(),
1866 ExtensionRegistry::getInstance()->getAttribute(
'ParsoidModules' ),
1869 $services->getParserFactory(),
1871 ExtensionRegistry::getInstance()->isLoaded(
'TimedMediaHandler' )
1876 $config = $services->getMainConfig();
1878 $config->get( MainConfigNames::PasswordConfig ),
1879 $config->get( MainConfigNames::PasswordDefault )
1887 LoggerFactory::getInstance(
'authentication' ),
1888 $services->getAuthManager(),
1889 $services->getHookContainer(),
1890 $services->getUserIdentityLookup(),
1891 $services->getUserFactory(),
1892 $services->getUserNameUtils(),
1893 $services->getUserOptionsLookup()
1900 $services->getConnectionProvider(),
1901 $services->getUserFactory(),
1902 $services->getHookContainer(),
1903 $services->getRevertedTagUpdateManager()
1907 'PerDbNameStatsdDataFactory' =>
static function (
MediaWikiServices $services ): StatsdDataFactoryInterface {
1908 $config = $services->getMainConfig();
1909 $wiki = $config->get( MainConfigNames::DBname );
1911 $services->getStatsdDataFactory(),
1921 $services->getSpecialPageFactory(),
1922 $services->getNamespaceInfo(),
1923 $services->getGroupPermissionsLookup(),
1924 $services->getUserGroupManager(),
1925 $services->getBlockManager(),
1926 $services->getFormatterFactory()->getBlockErrorFormatter(
1929 $services->getHookContainer(),
1930 $services->getUserIdentityLookup(),
1931 $services->getRedirectLookup(),
1932 $services->getRestrictionStore(),
1933 $services->getTitleFormatter(),
1934 $services->getTempUserConfig(),
1935 $services->getUserFactory(),
1936 $services->getActionFactory()
1942 $services->getMainConfig(),
1943 $services->getConnectionProvider(),
1944 $services->getObjectCacheFactory()->getLocalClusterInstance(),
1945 $services->getHttpRequestFactory(),
1951 $mainConfig = $services->getMainConfig();
1953 $mainConfig->get( MainConfigNames::PoolCounterConf ),
1954 $mainConfig->get( MainConfigNames::PoolCountClientConf ),
1955 LoggerFactory::getInstance(
'poolcounter' ),
1956 $services->getTracer()
1964 $services->getContentLanguage(),
1965 $services->getAuthManager(),
1966 $services->getLinkRendererFactory()->create(),
1967 $services->getNamespaceInfo(),
1968 $services->getPermissionManager(),
1969 $services->getLanguageConverterFactory()->getLanguageConverter(),
1970 $services->getLanguageNameUtils(),
1971 $services->getHookContainer(),
1972 $services->getUserOptionsManager(),
1973 $services->getLanguageConverterFactory(),
1974 $services->getParserFactory(),
1975 $services->getSkinFactory(),
1976 $services->getUserGroupManager(),
1977 $services->getSignatureValidatorFactory()
1979 $factory->setLogger( LoggerFactory::getInstance(
'preferences' ) );
1986 $services->getContentHandlerFactory(),
1987 $services->getWikiPageFactory(),
1988 $services->getRedirectLookup(),
1989 $services->getSpecialPageFactory(),
1990 $services->getContentTransformer(),
1991 $services->getHookContainer(),
1996 $mainConfig = $services->getMainConfig();
1998 $mainConfig->get( MainConfigNames::CdnServers ),
1999 $mainConfig->get( MainConfigNames::CdnServersNoPurge ),
2000 $services->getHookContainer(),
2001 $services->getLocalServerObjectCache()
2008 $services->getWRStatsFactory(),
2009 $services->getCentralIdLookupFactory()->getNonLocalLookup(),
2010 $services->getUserFactory(),
2011 $services->getUserGroupManager(),
2012 $services->getHookContainer()
2015 $rateLimiter->
setStats( $services->getStatsFactory() );
2017 return $rateLimiter;
2026 $services->getDBLoadBalancerFactory()
2031 return $services->getRecentChangeStore();
2035 return $services->getRecentChangeStore();
2040 $services->getHookContainer(),
2048 $services->getActorStoreFactory(),
2049 $services->getChangeTagsStore(),
2050 $services->getConnectionProvider(),
2051 $services->getCommentStore(),
2052 $services->getHookContainer(),
2053 $services->getJobQueueGroup(),
2054 $services->getPermissionManager(),
2055 $services->getRecentChangeRCFeedNotifier(),
2056 new ServiceOptions( RecentChangeStore::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ),
2057 $services->getTitleFormatter(),
2058 $services->getWikiPageFactory(),
2059 $services->getUserFactory(),
2060 $extRegistry->getAttribute(
'RecentChangeSources' )
2065 return $services->getRedirectStore();
2070 $services->getConnectionProvider(),
2071 $services->getPageStore(),
2072 $services->getTitleParser(),
2073 $services->getRepoGroup(),
2081 $services->getCentralIdLookupFactory(),
2082 $services->getJobQueueGroupFactory(),
2083 $services->getMovePageFactory(),
2084 $services->getUserFactory(),
2085 $services->getUserNameUtils(),
2086 $services->getPermissionManager(),
2087 $services->getTitleFactory(),
2092 $config = $services->getMainConfig();
2094 $config->get( MainConfigNames::LocalFileRepo ),
2095 $config->get( MainConfigNames::ForeignFileRepos ),
2096 $services->getMainWANObjectCache(),
2097 $services->getMimeAnalyzer()
2102 $config = $services->getMainConfig();
2104 $maxage = $config->get( MainConfigNames::ResourceLoaderMaxage );
2107 LoggerFactory::getInstance(
'resourceloader' ),
2110 'loadScript' => $config->get( MainConfigNames::LoadScript ),
2111 'maxageVersioned' => $maxage[
'versioned'] ??
null,
2112 'maxageUnversioned' => $maxage[
'unversioned'] ??
null,
2116 $extRegistry = ExtensionRegistry::getInstance();
2118 $modules = $extRegistry->getAttribute(
'ResourceModules' )
2119 + $config->get( MainConfigNames::ResourceModules );
2120 $moduleSkinStyles = $extRegistry->getAttribute(
'ResourceModuleSkinStyles' )
2121 + $config->get( MainConfigNames::ResourceModuleSkinStyles );
2123 $rl->setModuleSkinStyles( $moduleSkinStyles );
2124 $rl->addSource( $config->get( MainConfigNames::ResourceLoaderSources ) );
2127 $rl->register( include MW_INSTALL_PATH .
'/resources/Resources.php' );
2128 $rl->register( $modules );
2129 $hookRunner = new \MediaWiki\ResourceLoader\HookRunner( $services->getHookContainer() );
2130 $hookRunner->onResourceLoaderRegisterModules( $rl );
2132 $msgPosterAttrib = $extRegistry->getAttribute(
'MessagePosterModule' );
2133 $rl->register(
'mediawiki.messagePoster', [
2134 'localBasePath' => MW_INSTALL_PATH,
2135 'debugRaw' =>
false,
2137 'resources/src/mediawiki.messagePoster/factory.js',
2138 'resources/src/mediawiki.messagePoster/MessagePoster.js',
2139 'resources/src/mediawiki.messagePoster/WikitextMessagePoster.js',
2140 ...$msgPosterAttrib[
'scripts'] ?? [],
2145 'mediawiki.ForeignApi',
2146 ...$msgPosterAttrib[
'dependencies'] ?? [],
2150 if ( $config->get( MainConfigNames::EnableJavaScriptTest ) ===
true ) {
2151 $rl->registerTestModules();
2162 $services->getUserRequirementsConditionChecker(),
2171 $services->getMainWANObjectCache(),
2172 $services->getDBLoadBalancerFactory(),
2173 $services->getLinkCache(),
2174 $services->getLinksMigration(),
2175 $services->getCommentStore(),
2176 $services->getHookContainer(),
2177 $services->getPageStore()
2183 $services->getMainObjectStash(),
2184 $services->getConnectionProvider(),
2187 $services->getMainConfig()
2193 $services->getJobQueueGroup()
2198 return $services->getRevisionStore();
2202 return $services->getRevisionStore();
2207 $services->getDBLoadBalancer(),
2208 $services->getSlotRoleRegistry(),
2209 $services->getContentRenderer()
2212 $renderer->
setLogger( LoggerFactory::getInstance(
'SaveParse' ) );
2217 return $services->getRevisionStoreFactory()->getRevisionStore();
2222 $services->getDBLoadBalancerFactory(),
2223 $services->getBlobStoreFactory(),
2224 $services->getNameTableStoreFactory(),
2225 $services->getSlotRoleRegistry(),
2226 $services->getMainWANObjectCache(),
2227 $services->getLocalServerObjectCache(),
2228 $services->getCommentStore(),
2229 $services->getActorStoreFactory(),
2231 $services->getContentHandlerFactory(),
2232 $services->getPageStoreFactory(),
2233 $services->getTitleFactory(),
2234 $services->getHookContainer(),
2235 $services->getRecentChangeLookup()
2240 return $services->get(
'_PageCommandFactory' );
2245 $services->getCommentParserFactory(),
2246 $services->getCommentStore()
2254 $services->getMainConfig()
2256 $services->getContentLanguage(),
2257 $services->getHookContainer(),
2259 $services->getUserOptionsLookup()
2263 'SearchEngineFactory' =>
static function (
MediaWikiServices $services ): SearchEngineFactory {
2264 return new SearchEngineFactory(
2265 $services->getSearchEngineConfig(),
2266 $services->getHookContainer(),
2267 $services->getConnectionProvider()
2273 $services->getRepoGroup(),
2274 $services->getHookContainer()
2280 $services->getMainConfig(),
2282 $services->getCentralIdLookup(),
2283 $services->getHookContainer(),
2284 $services->getObjectFactory(),
2285 $services->getProxyLookup(),
2286 $services->getUrlUtils(),
2287 $services->getUserNameUtils(),
2288 $services->getSessionStore()
2293 $objectCacheFactory = $services->getObjectCacheFactory();
2294 $mainConfig = $services->getMainConfig();
2295 $logger = LoggerFactory::getInstance(
'session' );
2297 $anonCacheType = $mainConfig->get( MainConfigNames::AnonSessionCacheType );
2298 $authCacheType = $mainConfig->get( MainConfigNames::SessionCacheType );
2300 if ( $anonCacheType !==
false ) {
2302 $objectCacheFactory->getInstance( $anonCacheType ),
2303 $objectCacheFactory->getInstance( $authCacheType ),
2305 $services->getStatsFactory()
2310 $objectCacheFactory->getInstance( $authCacheType ),
2312 $services->getStatsFactory()
2317 $urls = $services->getMainConfig()->get(
MainConfigNames::ShellboxUrls );
2320 $services->getHttpRequestFactory(),
2322 $services->getMainConfig()->get( MainConfigNames::ShellboxSecretKey )
2327 $config = $services->getMainConfig();
2330 'time' => $config->get( MainConfigNames::MaxShellTime ),
2331 'walltime' => $config->get( MainConfigNames::MaxShellWallClockTime ),
2332 'memory' => $config->get( MainConfigNames::MaxShellMemory ),
2333 'filesize' => $config->get( MainConfigNames::MaxShellFileSize ),
2335 $cgroup = $config->get( MainConfigNames::ShellCgroup );
2336 $restrictionMethod = $config->get( MainConfigNames::ShellRestrictionMethod );
2338 $factory =
new CommandFactory( $services->getShellboxClientFactory(),
2339 $limits, $cgroup, $restrictionMethod );
2340 $factory->setLogger( LoggerFactory::getInstance(
'exec' ) );
2341 $factory->logStderr();
2350 $services->getMainConfig()
2353 static function () use ( $services ) {
2354 return $services->getParserFactory();
2356 static function () use ( $services ) {
2357 return $services->getLintErrorChecker();
2359 $services->getSpecialPageFactory(),
2360 $services->getTitleFactory(),
2368 return $services->getSiteStore();
2372 $rawSiteStore = new
DBSiteStore( $services->getConnectionProvider() );
2376 $cache = $services->getLocalServerObjectCache();
2383 $services->getObjectFactory(),
2387 $names = $services->getMainConfig()->get( MainConfigNames::ValidSkinNames );
2389 foreach ( $names as $name => $skin ) {
2390 if ( is_array( $skin ) ) {
2392 $displayName = $skin[
'displayname'] ?? $name;
2393 $skippable = $skin[
'skippable'] ??
null;
2395 $displayName = $skin;
2399 'class' =>
"Skin$skin"
2402 $factory->register( $name, $displayName, $spec, $skippable );
2406 $factory->register(
'fallback',
'Fallback', [
2407 'class' => SkinFallback::class,
2410 'name' =>
'fallback',
2411 'styles' => [
'mediawiki.skinning.interface',
'mediawiki.codex.messagebox.styles' ],
2412 'templateDirectory' => dirname( __DIR__ ) .
'/resources/templates/skins/fallback',
2417 $factory->register(
'apioutput',
'ApiOutput', [
2418 'class' => SkinApi::class,
2421 'name' =>
'apioutput',
2422 'styles' => [
'mediawiki.skinning.interface' ],
2423 'templateDirectory' => dirname( __DIR__ ) .
'/resources/templates/skins/apioutput',
2428 $factory->register(
'authentication-popup',
'Authentication popup', [
2429 'class' => SkinAuthenticationPopup::class,
2432 'name' =>
'authentication-popup',
2434 'mediawiki.skinning.interface',
2435 'mediawiki.special.userlogin.authentication-popup',
2437 'bodyClasses' => [
'mw-authentication-popup' ],
2438 'responsive' =>
true,
2443 'templateDirectory' => dirname( __DIR__ ) .
'/resources/templates/skins/authentication-popup',
2448 $factory->register(
'json',
'SkinJSON', [
2449 'class' => SkinApi::class,
2455 'templateDirectory' => dirname( __DIR__ ) .
'/resources/templates/skins/apioutput',
2465 $services->getSlotRoleStore()
2468 $config = $services->getMainConfig();
2469 $contentHandlerFactory = $services->getContentHandlerFactory();
2470 $hookContainer = $services->getHookContainer();
2471 $titleFactory = $services->getTitleFactory();
2474 static function () use ( $config, $contentHandlerFactory, $hookContainer, $titleFactory ) {
2476 $config->get( MainConfigNames::NamespaceContentModels ),
2477 $contentHandlerFactory,
2488 return $services->getNameTableStoreFactory()->getSlotRoles();
2494 (array)$services->getMainConfig()->get(
MainConfigNames::SummarySpamRegex )
2502 $services->getContentLanguage(),
2503 $services->getObjectFactory(),
2504 $services->getTitleFactory(),
2505 $services->getHookContainer(),
2506 $services->getStatsFactory(),
2511 return new NullStatsdDataFactory();
2515 $config = $services->getMainConfig();
2516 $format = OutputFormats::getFormatFromString(
2517 $config->get( MainConfigNames::StatsFormat ) ??
'null'
2520 $emitter = OutputFormats::getNewEmitter(
2521 $config->get( MainConfigNames::StatsPrefix ),
2523 OutputFormats::getNewFormatter( $format ),
2524 $config->get( MainConfigNames::StatsTarget )
2526 return new StatsFactory( $cache, $emitter, LoggerFactory::getInstance(
'Stats' ) );
2529 'TalkPageNotificationManager' =>
static function (
2536 $services->getConnectionProvider(),
2537 $services->getReadOnlyMode(),
2538 $services->getRevisionLookup(),
2539 $services->getHookContainer(),
2540 $services->getUserFactory()
2550 $services->getMainConfig()->get(
MainConfigNames::AutoCreateTempUser )
2556 $services->getTempUserConfig(),
2557 $services->getObjectFactory(),
2558 $services->getUserFactory(),
2559 $services->getAuthManager(),
2560 $services->getCentralIdLookup(),
2564 $services->getMainConfig()->get(
MainConfigNames::TempAccountCreationThrottle ),
2566 'type' =>
'tempacctcreate',
2567 'cache' => $services->getObjectCacheFactory()->getLocalClusterInstance(),
2571 $services->getMainConfig()->get(
MainConfigNames::TempAccountNameAcquisitionThrottle ),
2573 'type' =>
'tempacctnameacquisition',
2574 'cache' => $services->getObjectCacheFactory()->getLocalClusterInstance(),
2582 $services->getTempUserConfig(),
2583 $services->getUserRegistrationLookup()
2590 RemexDriver::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
2601 $services->getContentLanguage(),
2602 $services->getGenderCache(),
2603 $services->getNamespaceInfo()
2609 $services->getContentLanguage(),
2610 $services->getLanguageConverterFactory(),
2611 $services->getHookContainer(),
2612 $services->getWikiPageFactory(),
2613 $services->getRepoGroup(),
2614 $services->getTitleFactory()
2620 $services->getContentLanguage(),
2621 $services->getInterwikiLookup(),
2622 $services->getNamespaceInfo(),
2629 $otelConfig = $services->getMainConfig()->get( MainConfigNames::OpenTelemetryConfig );
2630 if ( $otelConfig ===
null || (
wfIsCLI() && !defined(
'MW_PHPUNIT_TEST' ) ) ) {
2634 $tracerState = TracerState::getInstance();
2636 $services->getService(
'_TracerHTTPClient' ),
2638 LoggerFactory::getInstance(
'tracing' ),
2639 $otelConfig[
'endpoint'],
2640 $otelConfig[
'serviceName'],
2657 $services->getMainConfig()
2659 $services->getNamespaceInfo(),
2660 $services->getTitleParser(),
2666 return $services->getService(
'_UserBlockCommandFactory' );
2670 return $services->getService(
'_PageCommandFactory' );
2673 'UploadRevisionImporter' =>
static function (
MediaWikiServices $services ): UploadRevisionImporter {
2674 return new ImportableUploadRevisionImporter(
2684 $services->getMainConfig()
2686 $services->getMimeAnalyzer(),
2692 $config = $services->getMainConfig();
2694 UrlUtils::SERVER => $config->get( MainConfigNames::Server ),
2695 UrlUtils::CANONICAL_SERVER => $config->get( MainConfigNames::CanonicalServer ),
2696 UrlUtils::INTERNAL_SERVER => $config->get( MainConfigNames::InternalServer ),
2697 UrlUtils::FALLBACK_PROTOCOL => RequestContext::getMain()->getRequest()->getProtocol(),
2698 UrlUtils::HTTPS_PORT => $config->get( MainConfigNames::HttpsPort ),
2699 UrlUtils::VALID_PROTOCOLS => $config->get( MainConfigNames::UrlProtocols ),
2706 $services->getConnectionProvider(),
2707 $services->getLinkBatchFactory()
2713 $services->getActorNormalization(),
2714 $services->getConnectionProvider(),
2715 $services->getJobQueueGroup()
2722 UserFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
2724 $services->getDBLoadBalancerFactory(),
2725 $services->getUserNameUtils(),
2726 $services->getTempUserConfig()
2732 $services->getUserGroupManagerFactory(),
2733 $services->getUserNameUtils(),
2734 $services->getUserFactory(),
2735 $services->getRestrictedUserGroupChecker(),
2736 new
HookRunner( $services->getHookContainer() ),
2740 $services->getTempUserConfig()
2745 return $services->getUserGroupManagerFactory()->getUserGroupManager();
2753 $services->getReadOnlyMode(),
2754 $services->getDBLoadBalancerFactory(),
2755 $services->getHookContainer(),
2756 $services->getJobQueueGroupFactory(),
2757 $services->getTempUserConfig(),
2758 $services->getUserRequirementsConditionCheckerFactory(),
2759 [ static function (
UserIdentity $user ) use ( $services ) {
2760 if ( $user->getWikiId() === UserIdentity::LOCAL ) {
2761 $services->getPermissionManager()->invalidateUsersRightsCache( $user );
2763 $services->getUserFactory()->invalidateCache( $user );
2769 return $services->getActorStoreFactory()->getUserIdentityLookup();
2774 $services->getTempUserConfig()
2780 $services->getHookContainer(),
2781 $services->getTempUserConfig(),
2782 $services->getSpecialPageFactory(),
2784 $services->getTempUserDetailsLookup(),
2785 $services->getUserIdentityLookup(),
2786 $services->getUserNameUtils()
2792 $services->getConnectionProvider(),
2793 $services->getUserNameUtils(),
2794 $services->getHideUserUtils()
2802 UserNameUtils::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
2804 $services->getContentLanguage(),
2805 LoggerFactory::getInstance(
'UserNameUtils' ),
2806 $services->getTitleParser(),
2807 $messageFormatterFactory->getTextFormatter(
2808 $services->getContentLanguageCode()->toString()
2810 $services->getHookContainer(),
2811 $services->getTempUserConfig()
2816 return $services->getUserOptionsManager();
2822 $services->get(
'_DefaultOptionsLookup' ),
2823 $services->getLanguageConverterFactory(),
2824 $services->getConnectionProvider(),
2826 $services->getHookContainer(),
2827 $services->getUserFactory(),
2828 $services->getUserNameUtils(),
2829 $services->getObjectFactory(),
2837 $services->getObjectFactory()
2839 if ( !$lookup->isRegistered( LocalUserRegistrationProvider::TYPE ) ) {
2840 throw new ConfigException(
'UserRegistrationLookup: Local provider is required' );
2845 'UserRequirementsConditionChecker' =>
static function (
2849 return $services->getUserRequirementsConditionCheckerFactory()
2850 ->getUserRequirementsConditionChecker( $services->getUserGroupManager() );
2853 'UserRequirementsConditionCheckerFactory' =>
static function (
2859 UserRequirementsConditionChecker::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
2861 $services->getGroupPermissionsLookup(),
2862 $services->getHookContainer(),
2864 LoggerFactory::getInstance(
'UserGroupManager' ),
2865 $services->getUserEditTracker(),
2866 $services->getUserRegistrationLookup(),
2867 $services->getUserFactory(),
2868 RequestContext::getMain(),
2874 $services->getConnectionProvider(),
2875 $services->getWatchedItemStore(),
2877 $services->getMainConfig()->get(
MainConfigNames::MaxExecutionTimeForExpensiveQueries )
2884 $services->getMainConfig() ),
2885 $services->getDBLoadBalancerFactory(),
2886 $services->getJobQueueGroup(),
2887 $services->getMainObjectStash(),
2889 $services->getReadOnlyMode(),
2890 $services->getNamespaceInfo(),
2891 $services->getRevisionLookup(),
2892 $services->getLinkBatchFactory(),
2893 $services->getWatchlistLabelStore()
2896 if ( $services->getMainConfig()->get( MainConfigNames::ReadOnlyWatchedItemStore ) ) {
2905 $services->getConnectionProvider(),
2907 $services->getMainConfig()
2918 $services->getHookContainer(),
2919 $services->getReadOnlyMode(),
2920 $services->getRevisionLookup(),
2921 $services->getTalkPageNotificationManager(),
2922 $services->getWatchedItemStore(),
2923 $services->getUserFactory(),
2924 $services->getNamespaceInfo(),
2925 $services->getWikiPageFactory()
2931 $services->getHookContainer(),
2932 $services->getRevisionStore(),
2933 $services->getTitleParser(),
2934 $services->getCommentStore()
2938 'WikiImporterFactory' =>
static function (
MediaWikiServices $services ): WikiImporterFactory {
2939 return new WikiImporterFactory(
2940 $services->getMainConfig(),
2941 $services->getHookContainer(),
2942 $services->getContentLanguage(),
2943 $services->getNamespaceInfo(),
2944 $services->getTitleFactory(),
2945 $services->getWikiPageFactory(),
2946 $services->getWikiRevisionUploadImporter(),
2947 $services->getContentHandlerFactory(),
2948 $services->getSlotRoleRegistry()
2954 $services->getTitleFactory(),
2955 new
HookRunner( $services->getHookContainer() ),
2956 $services->getDBLoadBalancerFactory()
2960 'WikiRevisionOldRevisionImporterNoUpdates' =>
static function (
2962 ): ImportableOldRevisionImporter {
2963 return new ImportableOldRevisionImporter(
2966 $services->getConnectionProvider(),
2967 $services->getRevisionStoreFactory()->getRevisionStoreForImport(),
2968 $services->getSlotRoleRegistry(),
2969 $services->getWikiPageFactory(),
2970 $services->getPageUpdaterFactory(),
2971 $services->getUserFactory()
2981 '_ConditionalDefaultsLookup' =>
static function (
2985 new
HookRunner( $services->getHookContainer() ),
2989 $services->getUserRegistrationLookup(),
2990 $services->getUserIdentityUtils(),
2991 static function () use ( $services ) {
2992 return $services->getUserGroupManager();
3000 $services->getContentLanguageCode(),
3001 $services->getHookContainer(),
3002 $services->getNamespaceInfo(),
3003 $services->get(
'_ConditionalDefaultsLookup' ),
3004 $services->getUserIdentityLookup(),
3005 $services->getUserNameUtils()
3011 $services->getObjectFactory()
3019 $dispatcher->registerSubscriber( SearchEventIngress::OBJECT_SPEC );
3020 $dispatcher->registerSubscriber( LanguageEventIngress::OBJECT_SPEC );
3022 $extensionRegistry = $services->getExtensionRegistry();
3023 $dispatcher->registerSubscriber( $extensionRegistry );
3036 $services->getMainConfig()
3041 $services->getHookContainer(),
3044 $services->getReadOnlyMode(),
3047 $services->getSpamChecker(),
3050 $services->getRateLimiter(),
3053 $services->getRedirectLookup(),
3056 $services->getConnectionProvider(),
3057 $services->getCommentStore(),
3063 $services->getObjectFactory(),
3070 $services->getMainConfig(),
3071 $services->getDBLoadBalancerFactory(),
3072 $services->getNamespaceInfo(),
3073 $services->getWatchedItemStore(),
3074 $services->getRepoGroup(),
3075 $services->getReadOnlyMode(),
3076 $services->getContentHandlerFactory(),
3077 $services->getRevisionStoreFactory(),
3078 $services->getSpamChecker(),
3079 $services->getTitleFormatter(),
3080 $services->getHookContainer(),
3081 $services->getDomainEventDispatcher(),
3082 $services->getWikiPageFactory(),
3083 $services->getUserFactory(),
3084 $services->getActorMigration(),
3085 $services->getActorNormalization(),
3086 $services->getTitleFactory(),
3087 $services->getUserEditTracker(),
3088 $services->getCollationFactory(),
3089 $services->getJobQueueGroup(),
3090 $services->getCommentStore(),
3091 $services->getMainObjectStash(),
3092 WikiMap::getCurrentWikiDbDomain()->getId(),
3094 $services->getBacklinkCacheFactory(),
3096 $services->getPageUpdaterFactory(),
3097 $services->getMessageFormatterFactory()->getTextFormatter(
3098 $services->getContentLanguageCode()->toString()
3100 $services->getArchivedRevisionLookup(),
3101 $services->getRestrictionStore(),
3102 $services->getLinkTargetLookup(),
3103 $services->getRedirectStore(),
3104 $services->getLogFormatterFactory()
3114 $services->getParsoidSiteConfig(),
3115 $services->getParsoidDataAccess()
3124 return $services->getBlobStoreFactory()->newSqlBlobStore();
3127 '_TracerHTTPClient' =>
static function (): ClientInterface {
3128 return new Client( [
'http_errors' => false ] );
3134 $services->getHookContainer(),
3135 $services->getBlockPermissionCheckerFactory(),
3136 $services->getBlockTargetFactory(),
3137 $services->getDatabaseBlockStore(),
3138 $services->getBlockRestrictionStore(),
3139 $services->getUserFactory(),
3140 $services->getUserEditTracker(),
3142 $services->getTitleFactory(),
3143 $services->getBlockActionInfo()
wfIsCLI()
Check if we are running from the commandline.
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
wfShellExec( $cmd, &$retval=null, $environ=[], $limits=[], $options=[])
Execute a shell command, with time and memory limits mirrored from the PHP configuration if supported...
wfHostname()
Get host name of the current machine, for use in error reporting.
wfMessage( $key,... $params)
This is the function for getting translated interface messages.
return[ 'ActionFactory'=> static function(MediaWikiServices $services):ActionFactory { return new ActionFactory($services->getMainConfig() ->get(MainConfigNames::Actions), LoggerFactory::getInstance( 'ActionFactory'), $services->getObjectFactory(), $services->getHookContainer(), $services->getContentHandlerFactory());}, 'ActorMigration'=> static function(MediaWikiServices $services):ActorMigration { return new ActorMigration($services->getActorStoreFactory());}, 'ActorNormalization'=> static function(MediaWikiServices $services):ActorNormalization { return $services->getActorStoreFactory() ->getActorNormalization();}, 'ActorStore'=> static function(MediaWikiServices $services):ActorStore { return $services->getActorStoreFactory() ->getActorStore();}, 'ActorStoreFactory'=> static function(MediaWikiServices $services):ActorStoreFactory { return new ActorStoreFactory(new ServiceOptions(ActorStoreFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getDBLoadBalancerFactory(), $services->getUserNameUtils(), $services->getTempUserConfig(), LoggerFactory::getInstance( 'ActorStore'), $services->getHideUserUtils());}, 'ArchivedRevisionLookup'=> static function(MediaWikiServices $services):ArchivedRevisionLookup { return new ArchivedRevisionLookup($services->getConnectionProvider(), $services->getRevisionStore());}, 'AuthManager'=> static function(MediaWikiServices $services):AuthManager { $authManager=new AuthManager(RequestContext::getMain() ->getRequest(), $services->getMainConfig(), $services->getChangeTagsStore(), $services->getObjectFactory(), $services->getObjectCacheFactory(), $services->getHookContainer(), $services->getReadOnlyMode(), $services->getUserNameUtils(), $services->getBlockManager(), $services->getWatchlistManager(), $services->getDBLoadBalancer(), $services->getContentLanguage(), $services->getLanguageConverterFactory(), $services->getBotPasswordStore(), $services->getUserFactory(), $services->getUserIdentityLookup(), $services->getUserIdentityUtils(), $services->getUserOptionsManager(), $services->getNotificationService(), $services->getSessionManager());$authManager->setLogger(LoggerFactory::getInstance( 'authentication'));$authManager->setAuthEventsLogger(LoggerFactory::getInstance( 'authevents'));return $authManager;}, 'AutoblockExemptionList'=> static function(MediaWikiServices $services):AutoblockExemptionList { $messageFormatterFactory=new MessageFormatterFactory(Message::FORMAT_PLAIN);return new AutoblockExemptionList(new ServiceOptions(AutoblockExemptionList::CONSTRUCTOR_OPTIONS, $services->getMainConfig(),), LoggerFactory::getInstance( 'AutoblockExemptionList'), $messageFormatterFactory->getTextFormatter($services->getContentLanguageCode() ->toString()));}, 'BacklinkCacheFactory'=> static function(MediaWikiServices $services):BacklinkCacheFactory { return new BacklinkCacheFactory(new ServiceOptions(BacklinkCache::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getLinksMigration(), $services->getMainWANObjectCache(), $services->getHookContainer(), $services->getConnectionProvider(), $services->getRestrictionStore(), LoggerFactory::getInstance( 'BacklinkCache'));}, 'BadFileLookup'=> static function(MediaWikiServices $services):BadFileLookup { return new BadFileLookup(static function() { return wfMessage( 'bad_image_list') ->inContentLanguage() ->plain();}, $services->getLocalServerObjectCache(), $services->getRepoGroup(), $services->getTitleParser(), $services->getHookContainer());}, 'BlobStore'=> static function(MediaWikiServices $services):BlobStore { return $services->getService( '_SqlBlobStore');}, 'BlobStoreFactory'=> static function(MediaWikiServices $services):BlobStoreFactory { return new BlobStoreFactory($services->getDBLoadBalancerFactory(), $services->getExternalStoreAccess(), $services->getMainWANObjectCache(), new ServiceOptions(BlobStoreFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'BlockActionInfo'=> static function(MediaWikiServices $services):BlockActionInfo { return new BlockActionInfo( $services->getHookContainer());}, 'BlockErrorFormatter'=> static function(MediaWikiServices $services):BlockErrorFormatter { return $services->getFormatterFactory() ->getBlockErrorFormatter(new LazyLocalizationContext(RequestContext::getMain(...)));}, 'BlockManager'=> static function(MediaWikiServices $services):BlockManager { return new BlockManager(new ServiceOptions(BlockManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getUserFactory(), $services->getUserIdentityUtils(), LoggerFactory::getInstance( 'BlockManager'), $services->getHookContainer(), $services->getDatabaseBlockStore(), $services->getBlockTargetFactory(), $services->getProxyLookup());}, 'BlockPermissionCheckerFactory'=> static function(MediaWikiServices $services):BlockPermissionCheckerFactory { return new BlockPermissionCheckerFactory(new ServiceOptions(BlockPermissionCheckerFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getBlockTargetFactory());}, 'BlockRestrictionStore'=> static function(MediaWikiServices $services):BlockRestrictionStore { return $services->getBlockRestrictionStoreFactory() ->getBlockRestrictionStore(WikiAwareEntity::LOCAL);}, 'BlockRestrictionStoreFactory'=> static function(MediaWikiServices $services):BlockRestrictionStoreFactory { return new BlockRestrictionStoreFactory($services->getDBLoadBalancerFactory());}, 'BlockTargetFactory'=> static function(MediaWikiServices $services):BlockTargetFactory { return $services->getCrossWikiBlockTargetFactory() ->getFactory();}, 'BlockUserFactory'=> static function(MediaWikiServices $services):BlockUserFactory { return $services->getService( '_UserBlockCommandFactory');}, 'BlockUtils'=> static function(MediaWikiServices $services):BlockUtils { return $services->getBlockUtilsFactory() ->getBlockUtils();}, 'BlockUtilsFactory'=> static function(MediaWikiServices $services):BlockUtilsFactory { return new BlockUtilsFactory($services->getCrossWikiBlockTargetFactory());}, 'BotPasswordStore'=> static function(MediaWikiServices $services):BotPasswordStore { return new BotPasswordStore(new ServiceOptions(BotPasswordStore::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getCentralIdLookup(), $services->getDBLoadBalancerFactory());}, 'CentralIdLookup'=> static function(MediaWikiServices $services):CentralIdLookup { return $services->getCentralIdLookupFactory() ->getLookup();}, 'CentralIdLookupFactory'=> static function(MediaWikiServices $services):CentralIdLookupFactory { return new CentralIdLookupFactory(new ServiceOptions(CentralIdLookupFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getObjectFactory(), $services->getUserIdentityLookup(), $services->getUserFactory());}, 'ChangesListQueryFactory'=> static function(MediaWikiServices $services):ChangesListQueryFactory { return new ChangesListQueryFactory(new ServiceOptions(ChangesListQueryFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getRecentChangeLookup(), $services->getWatchedItemStore(), $services->getTempUserConfig(), $services->getUserFactory(), $services->getLinkTargetLookup(), $services->getChangeTagsStore(), $services->getStatsFactory(), $services->getSlotRoleStore(), LoggerFactory::getInstance( 'ChangesListQuery'), $services->getConnectionProvider(),);}, 'ChangeTagDefStore'=> static function(MediaWikiServices $services):NameTableStore { return $services->getNameTableStoreFactory() ->getChangeTagDef();}, 'ChangeTagsStore'=> static function(MediaWikiServices $services):ChangeTagsStore { return $services->getChangeTagsStoreFactory() ->getChangeTagsStore();}, 'ChangeTagsStoreFactory'=> static function(MediaWikiServices $services):ChangeTagsStoreFactory { return new ChangeTagsStoreFactory($services->getConnectionProvider(), $services->getNameTableStoreFactory(), $services->getMainWANObjectCache(), $services->getHookContainer(), LoggerFactory::getInstance( 'ChangeTags'), $services->getUserFactory(), new ServiceOptions(ChangeTagsStore::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'ChronologyProtector'=> static function(MediaWikiServices $services):ChronologyProtector { $mainConfig=$services->getMainConfig();$microStashIsDatabase=$services->getObjectCacheFactory() ->isDatabaseId($mainConfig->get(MainConfigNames::MicroStashType));$cpStash=$microStashIsDatabase ? new EmptyBagOStuff() :$services->getMicroStash();$chronologyProtector=new ChronologyProtector($cpStash, $mainConfig->get(MainConfigNames::ChronologyProtectorSecret), MW_ENTRY_POINT==='cli', LoggerFactory::getInstance( 'rdbms'));$req=RequestContext::getMain() ->getRequest();$reqStart=(int)( $_SERVER['REQUEST_TIME_FLOAT'] ?? time());$cpPosInfo=ChronologyProtector::getCPInfoFromCookieValue($req->getCookie( 'cpPosIndex', ''), $reqStart - ChronologyProtector::POSITION_COOKIE_TTL);$chronologyProtector->setRequestInfo(['IPAddress'=> $req->getIP(), 'UserAgent'=> $req->getHeader( 'User-Agent'), 'ChronologyPositionIndex'=> $req->getInt( 'cpPosIndex', $cpPosInfo['index']), 'ChronologyClientId'=> $cpPosInfo['clientId'] ?? null,]);return $chronologyProtector;}, 'CollationFactory'=> static function(MediaWikiServices $services):CollationFactory { return new CollationFactory(new ServiceOptions(CollationFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getObjectFactory(), $services->getHookContainer());}, 'CommentFormatter'=> static function(MediaWikiServices $services):CommentFormatter { return new CommentFormatter($services->getCommentParserFactory());}, 'CommentParserFactory'=> static function(MediaWikiServices $services):CommentParserFactory { return new CommentParserFactory($services->getLinkRendererFactory() ->create([ 'renderForComment'=> true]), $services->getLinkBatchFactory(), $services->getLinkCache(), $services->getRepoGroup(), $services->getContentLanguage(), $services->getTitleParser(), $services->getNamespaceInfo(), $services->getHookContainer());}, 'CommentStore'=> static function(MediaWikiServices $services):CommentStore { return new CommentStore( $services->getContentLanguage());}, 'ConfigFactory'=> static function(MediaWikiServices $services):ConfigFactory { $registry=$services->getBootstrapConfig() ->get(MainConfigNames::ConfigRegistry);$factory=new ConfigFactory();foreach( $registry as $name=> $callback) { $factory->register( $name, $callback);} return $factory;}, 'ConfigRepository'=> static function(MediaWikiServices $services):ConfigRepository { return new ConfigRepository( $services->getConfigFactory());}, 'ConfigSchema'=> static function(MediaWikiServices $services):ConfigSchema { $settings=$services->get( '_SettingsBuilder');return $settings->getConfigSchema();}, 'ConfiguredReadOnlyMode'=> static function(MediaWikiServices $services):ConfiguredReadOnlyMode { $config=$services->getMainConfig();return new ConfiguredReadOnlyMode($config->get(MainConfigNames::ReadOnly), $config->get(MainConfigNames::ReadOnlyFile));}, 'ConfirmEmailBuilderFactory'=> static function(MediaWikiServices $services):ConfirmEmailBuilderFactory { return new ConfirmEmailBuilderFactory(new ServiceOptions(ConfirmEmailBuilderFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getLocalServerObjectCache(), $services->getUrlUtils());}, 'ConfirmEmailSender'=> static function(MediaWikiServices $services):ConfirmEmailSender { return new ConfirmEmailSender(new ServiceOptions(ConfirmEmailSender::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), new HookRunner( $services->getHookContainer()), $services->getUserFactory(), $services->getEmailer(), $services->getConfirmEmailBuilderFactory());}, 'ConnectionProvider'=> static function(MediaWikiServices $services):IConnectionProvider { return $services->getDBLoadBalancerFactory();}, 'ContentHandlerFactory'=> static function(MediaWikiServices $services):IContentHandlerFactory { $contentHandlerConfig=$services->getMainConfig() ->get(MainConfigNames::ContentHandlers);return new ContentHandlerFactory($contentHandlerConfig, $services->getObjectFactory(), $services->getHookContainer(), LoggerFactory::getInstance( 'ContentHandler'));}, 'ContentJsonCodec'=> static function(MediaWikiServices $services):ContentJsonCodec { return new ContentJsonCodec($services->getContentHandlerFactory(),);}, 'ContentLanguage'=> static function(MediaWikiServices $services):Language { return $services->getLanguageFactory() ->getLanguage($services->getMainConfig() ->get(MainConfigNames::LanguageCode));}, 'ContentLanguageCode'=> static function(MediaWikiServices $services):LanguageCode { return $services->getLanguageFactory() ->getLanguageCode($services->getMainConfig() ->get(MainConfigNames::LanguageCode));}, 'ContentModelChangeFactory'=> static function(MediaWikiServices $services):ContentModelChangeFactory { return $services->getService( '_PageCommandFactory');}, 'ContentModelStore'=> static function(MediaWikiServices $services):NameTableStore { return $services->getNameTableStoreFactory() ->getContentModels();}, 'ContentRenderer'=> static function(MediaWikiServices $services):ContentRenderer { return new ContentRenderer($services->getContentHandlerFactory(), $services->getGlobalIdGenerator());}, 'ContentTransformer'=> static function(MediaWikiServices $services):ContentTransformer { return new ContentTransformer( $services->getContentHandlerFactory());}, 'CriticalSectionProvider'=> static function(MediaWikiServices $services):CriticalSectionProvider { $config=$services->getMainConfig();$limit=MW_ENTRY_POINT==='cli' ? INF :$config->get(MainConfigNames::CriticalSectionTimeLimit);return RequestTimeout::singleton() ->createCriticalSectionProvider( $limit);}, 'CrossWikiBlockTargetFactory'=> static function(MediaWikiServices $services):CrossWikiBlockTargetFactory { return new CrossWikiBlockTargetFactory(new ServiceOptions(CrossWikiBlockTargetFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getActorStoreFactory(), $services->getUserNameUtils());}, 'DatabaseBlockStore'=> static function(MediaWikiServices $services):DatabaseBlockStore { return $services->getDatabaseBlockStoreFactory() ->getDatabaseBlockStore(DatabaseBlock::LOCAL);}, 'DatabaseBlockStoreFactory'=> static function(MediaWikiServices $services):DatabaseBlockStoreFactory { return new DatabaseBlockStoreFactory(new ServiceOptions(DatabaseBlockStoreFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), LoggerFactory::getInstance( 'DatabaseBlockStore'), $services->getActorStoreFactory(), $services->getBlockRestrictionStoreFactory(), $services->getCommentStore(), $services->getHookContainer(), $services->getDBLoadBalancerFactory(), $services->getReadOnlyMode(), $services->getUserFactory(), $services->getTempUserConfig(), $services->getCrossWikiBlockTargetFactory(), $services->getAutoblockExemptionList(), $services->getSessionManager());}, 'DatabaseFactory'=> static function(MediaWikiServices $services):DatabaseFactory { return new DatabaseFactory(['debugSql'=> $services->getMainConfig() ->get(MainConfigNames::DebugDumpSql), 'tracer'=> $services->getTracer(),]);}, 'DateFormatterFactory'=> static function(MediaWikiServices $services):DateFormatterFactory { return new DateFormatterFactory();}, 'DBLoadBalancer'=> static function(MediaWikiServices $services):Wikimedia\Rdbms\ILoadBalancer { return $services->getDBLoadBalancerFactory() ->getMainLB();}, 'DBLoadBalancerFactory'=> static function(MediaWikiServices $services):Wikimedia\Rdbms\LBFactory { $mainConfig=$services->getMainConfig();$lbFactoryConfigBuilder=$services->getDBLoadBalancerFactoryConfigBuilder();$lbConf=$lbFactoryConfigBuilder->applyDefaultConfig($mainConfig->get(MainConfigNames::LBFactoryConf));$class=$lbFactoryConfigBuilder->getLBFactoryClass( $lbConf);$instance=new $class( $lbConf);$lbFactoryConfigBuilder->setDomainAliases( $instance);return $instance;}, 'DBLoadBalancerFactoryConfigBuilder'=> static function(MediaWikiServices $services):MWLBFactory { $mainConfig=$services->getMainConfig();if( $services->getObjectCacheFactory() ->isDatabaseId($mainConfig->get(MainConfigNames::MainCacheType))) { $wanCache=WANObjectCache::newEmpty();} else { $wanCache=$services->getMainWANObjectCache();} $srvCache=$services->getLocalServerObjectCache();if( $srvCache instanceof EmptyBagOStuff) { $srvCache=new HashBagOStuff([ 'maxKeys'=> 100]);} return new MWLBFactory(new ServiceOptions(MWLBFactory::APPLY_DEFAULT_CONFIG_OPTIONS, $services->getMainConfig()), new ConfiguredReadOnlyMode($mainConfig->get(MainConfigNames::ReadOnly), $mainConfig->get(MainConfigNames::ReadOnlyFile)), $services->getChronologyProtector(), $srvCache, $wanCache, $services->getCriticalSectionProvider(), $services->getStatsFactory(), ExtensionRegistry::getInstance() ->getAttribute( 'DatabaseVirtualDomains'), $services->getTracer(), RequestContext::getMain() ->getRequest() ->getIP());}, 'DefaultOutputPipeline'=> static function(MediaWikiServices $services):OutputTransformPipeline { return(new DefaultOutputPipelineFactory(new ServiceOptions(DefaultOutputPipelineFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getMainConfig(), LoggerFactory::getInstance( 'Parser'), $services->getObjectFactory())) ->buildPipeline();}, 'DeletePageFactory'=> static function(MediaWikiServices $services):DeletePageFactory { return $services->getService( '_PageCommandFactory');}, 'DomainEventDispatcher'=> static function(MediaWikiServices $services):DomainEventDispatcher { return $services->getService( '_DomainEventDispatcher');}, 'DomainEventSource'=> static function(MediaWikiServices $services):DomainEventSource { return $services->getService( '_DomainEventDispatcher');}, 'Emailer'=> static function(MediaWikiServices $services):IEmailer { return new Emailer();}, 'EmailUserFactory'=> static function(MediaWikiServices $services):EmailUserFactory { return new EmailUserFactory(new ServiceOptions(EmailUser::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getHookContainer(), $services->getUserOptionsLookup(), $services->getCentralIdLookup(), $services->getUserFactory(), $services->getEmailer(), $services->getMessageFormatterFactory(), $services->getMessageFormatterFactory() ->getTextFormatter($services->getContentLanguageCode() ->toString()));}, 'EventRelayerGroup'=> static function(MediaWikiServices $services):EventRelayerGroup { return new EventRelayerGroup( $services->getMainConfig() ->get(MainConfigNames::EventRelayerConfig));}, 'ExtensionRegistry'=> static function(MediaWikiServices $services):ExtensionRegistry { return ExtensionRegistry::getInstance();}, 'ExternalStoreAccess'=> static function(MediaWikiServices $services):ExternalStoreAccess { return new ExternalStoreAccess($services->getExternalStoreFactory(), LoggerFactory::getInstance( 'ExternalStore'));}, 'ExternalStoreFactory'=> static function(MediaWikiServices $services):ExternalStoreFactory { $config=$services->getMainConfig();$writeStores=$config->get(MainConfigNames::DefaultExternalStore);return new ExternalStoreFactory($config->get(MainConfigNames::ExternalStores),( $writeStores !==false) ?(array) $writeStores :[], $services->getDBLoadBalancer() ->getLocalDomainID(), LoggerFactory::getInstance( 'ExternalStore'));}, 'FeatureShutdown'=> static function(MediaWikiServices $services):FeatureShutdown { return new FeatureShutdown(new ServiceOptions(FeatureShutdown::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'FileBackendGroup'=> static function(MediaWikiServices $services):FileBackendGroup { $mainConfig=$services->getMainConfig();$ld=WikiMap::getCurrentWikiDbDomain();$fallbackWikiId=WikiMap::getWikiIdFromDbDomain( $ld);$legacyDomainId=strlen( $ld->getTablePrefix()) ? "{$ld->getDatabase()}-{$ld->getTablePrefix()}" :$ld->getDatabase();if( $ld->getSchema() !==null && $legacyDomainId !==$fallbackWikiId) { wfWarn("Legacy default 'domainId' is '$legacyDomainId' but wiki ID is '$fallbackWikiId'.");} $cache=$services->getLocalServerObjectCache();if( $cache instanceof EmptyBagOStuff) { $cache=new HashBagOStuff();} return new FileBackendGroup(new ServiceOptions(FileBackendGroup::CONSTRUCTOR_OPTIONS, $mainConfig, [ 'fallbackWikiId'=> $fallbackWikiId]), $services->getReadOnlyMode(), $cache, $services->getMainWANObjectCache(), $services->getMimeAnalyzer(), $services->getLockManagerGroupFactory(), $services->getTempFSFileFactory(), $services->getObjectFactory());}, 'FormatterFactory'=> static function(MediaWikiServices $services):FormatterFactory { return new FormatterFactory($services->getMessageParser(), $services->getTitleFormatter(), $services->getHookContainer(), $services->getUserIdentityUtils(), $services->getLanguageFactory(), LoggerFactory::getInstance( 'status'));}, 'GenderCache'=> static function(MediaWikiServices $services):GenderCache { $nsInfo=$services->getNamespaceInfo();if( $services->isServiceDisabled( 'DBLoadBalancer')) { $userOptionsLookup=new StaticUserOptionsLookup([], $services->getMainConfig() ->get(MainConfigNames::DefaultUserOptions));} else { $userOptionsLookup=$services->getUserOptionsLookup();} return new GenderCache( $nsInfo, $userOptionsLookup);}, 'GlobalIdGenerator'=> static function(MediaWikiServices $services):GlobalIdGenerator { $mainConfig=$services->getMainConfig();return new GlobalIdGenerator($mainConfig->get(MainConfigNames::TmpDirectory), static function( $command) { return wfShellExec( $command);});}, 'GrantsInfo'=> static function(MediaWikiServices $services):GrantsInfo { return new GrantsInfo(new ServiceOptions(GrantsInfo::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'GrantsLocalization'=> static function(MediaWikiServices $services):GrantsLocalization { return new GrantsLocalization($services->getGrantsInfo(), $services->getLinkRenderer(), $services->getLanguageFactory(), $services->getContentLanguage());}, 'GroupPermissionsLookup'=> static function(MediaWikiServices $services):GroupPermissionsLookup { return new GroupPermissionsLookup(new ServiceOptions(GroupPermissionsLookup::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'HideUserUtils'=> static function(MediaWikiServices $services):HideUserUtils { return new HideUserUtils();}, 'HookContainer'=> static function(MediaWikiServices $services):HookContainer { $configHooks=$services->getBootstrapConfig() ->get(MainConfigNames::Hooks);$extRegistry=ExtensionRegistry::getInstance();$extHooks=$extRegistry->getAttribute( 'Hooks');$extDeprecatedHooks=$extRegistry->getAttribute( 'DeprecatedHooks');return new HookContainer(new StaticHookRegistry( $configHooks, $extHooks, $extDeprecatedHooks), $services->getObjectFactory());}, 'HtmlCacheUpdater'=> static function(MediaWikiServices $services):HTMLCacheUpdater { $config=$services->getMainConfig();return new HTMLCacheUpdater($services->getHookContainer(), $services->getTitleFactory(), $config->get(MainConfigNames::CdnReboundPurgeDelay), $config->get(MainConfigNames::UseFileCache), $config->get(MainConfigNames::CdnMaxAge));}, 'HtmlTransformFactory'=> static function(MediaWikiServices $services):HtmlTransformFactory { return new HtmlTransformFactory($services->getService( '_Parsoid'), $services->getMainConfig() ->get(MainConfigNames::ParsoidSettings), $services->getParsoidPageConfigFactory(), $services->getContentHandlerFactory(), $services->getParsoidSiteConfig(), $services->getTitleFactory(), $services->getLanguageConverterFactory(), $services->getLanguageFactory());}, 'HttpRequestFactory'=> static function(MediaWikiServices $services):HttpRequestFactory { return new HttpRequestFactory(new ServiceOptions(HttpRequestFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), LoggerFactory::getInstance( 'http'), $services->getTracer());}, 'InterwikiLookup'=> static function(MediaWikiServices $services):InterwikiLookup { return new ClassicInterwikiLookup(new ServiceOptions(ClassicInterwikiLookup::CONSTRUCTOR_OPTIONS, $services->getMainConfig(), [ 'wikiId'=> WikiMap::getCurrentWikiId()]), $services->getContentLanguage(), $services->getMainWANObjectCache(), $services->getHookContainer(), $services->getConnectionProvider(), $services->getLanguageNameUtils());}, 'IntroMessageBuilder'=> static function(MediaWikiServices $services):IntroMessageBuilder { return new IntroMessageBuilder($services->getMainConfig(), $services->getLinkRenderer(), $services->getPermissionManager(), $services->getUserNameUtils(), $services->getTempUserCreator(), $services->getUserFactory(), $services->getRestrictionStore(), $services->getDatabaseBlockStore(), $services->getReadOnlyMode(), $services->getSpecialPageFactory(), $services->getRepoGroup(), $services->getNamespaceInfo(), $services->getSkinFactory(), $services->getConnectionProvider(), $services->getUrlUtils());}, 'JobFactory'=> static function(MediaWikiServices $services):JobFactory { return new JobFactory($services->getObjectFactory(), $services->getMainConfig() ->get(MainConfigNames::JobClasses));}, 'JobQueueGroup'=> static function(MediaWikiServices $services):JobQueueGroup { return $services->getJobQueueGroupFactory() ->makeJobQueueGroup();}, 'JobQueueGroupFactory'=> static function(MediaWikiServices $services):JobQueueGroupFactory { return new JobQueueGroupFactory(new ServiceOptions(JobQueueGroupFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getReadOnlyMode(), $services->getStatsFactory(), $services->getMainWANObjectCache(), $services->getGlobalIdGenerator());}, 'JobRunner'=> static function(MediaWikiServices $services):JobRunner { return new JobRunner(new ServiceOptions(JobRunner::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getDBLoadBalancerFactory(), $services->getJobQueueGroup(), $services->getReadOnlyMode(), $services->getLinkCache(), $services->getStatsFactory(), LoggerFactory::getInstance( 'runJobs'));}, 'JsonCodec'=> static function(MediaWikiServices $services):JsonCodec { return new JsonCodec( $services);}, 'JwtCodec'=> static function(MediaWikiServices $services):JwtCodec { return new RsaJwtCodec(new ServiceOptions(RsaJwtCodec::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'LanguageConverterFactory'=> static function(MediaWikiServices $services):LanguageConverterFactory { return new LanguageConverterFactory(new ServiceOptions(LanguageConverterFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getObjectFactory(), static function() use( $services) { return $services->getContentLanguage();});}, 'LanguageFactory'=> static function(MediaWikiServices $services):LanguageFactory { return new LanguageFactory(new ServiceOptions(LanguageFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getNamespaceInfo(), $services->getLocalisationCache(), $services->getLanguageNameUtils(), $services->getLanguageFallback(), $services->getLanguageConverterFactory(), $services->getHookContainer(), $services->getMainConfig());}, 'LanguageFallback'=> static function(MediaWikiServices $services):LanguageFallback { return new LanguageFallback($services->getMainConfig() ->get(MainConfigNames::LanguageCode), $services->getLocalisationCache(), $services->getLanguageNameUtils());}, 'LanguageNameSearch'=> static function(MediaWikiServices $services):LanguageNameSearch { return new LanguageNameSearch($services->getLanguageNameUtils());}, 'LanguageNameUtils'=> static function(MediaWikiServices $services):LanguageNameUtils { return new LanguageNameUtils(new ServiceOptions(LanguageNameUtils::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getHookContainer());}, 'LeximorphFactory'=> static function(MediaWikiServices $services):LeximorphFactory { return new LeximorphFactory(new MediaWiki\Config\ServiceOptions(MediaWiki\Language\LeximorphFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), LoggerFactory::getInstance( 'leximorph'));}, 'LinkBatchFactory'=> static function(MediaWikiServices $services):LinkBatchFactory { return new LinkBatchFactory($services->getLinkCache(), $services->getTitleFormatter(), $services->getContentLanguage(), $services->getGenderCache(), $services->getConnectionProvider(), $services->getLinksMigration(), $services->getTempUserDetailsLookup(), LoggerFactory::getInstance( 'LinkBatch'));}, 'LinkCache'=> static function(MediaWikiServices $services):LinkCache { $dbLoadBalancer=$services->isServiceDisabled( 'DBLoadBalancer') ? null :$services->getDBLoadBalancer();$linkCache=new LinkCache($services->getTitleFormatter(), $services->getMainWANObjectCache(), $services->getNamespaceInfo(), $dbLoadBalancer);$linkCache->setLogger(LoggerFactory::getInstance( 'LinkCache'));return $linkCache;}, 'LinkRenderer'=> static function(MediaWikiServices $services):LinkRenderer { return $services->getLinkRendererFactory() ->create();}, 'LinkRendererFactory'=> static function(MediaWikiServices $services):LinkRendererFactory { return new LinkRendererFactory($services->getTitleFormatter(), $services->getLinkCache(), $services->getSpecialPageFactory(), $services->getHookContainer(), $services->getTempUserConfig(), $services->getTempUserDetailsLookup(), $services->getUserIdentityLookup(), $services->getUserNameUtils());}, 'LinksMigration'=> static function(MediaWikiServices $services):LinksMigration { return new LinksMigration($services->getMainConfig(), $services->getLinkTargetLookup());}, 'LinkTargetLookup'=> static function(MediaWikiServices $services):LinkTargetLookup { return new LinkTargetStore($services->getConnectionProvider(), $services->getLocalServerObjectCache(), $services->getMainWANObjectCache());}, 'LintErrorChecker'=> static function(MediaWikiServices $services):LintErrorChecker { return new LintErrorChecker($services->get( '_Parsoid'), $services->getParsoidPageConfigFactory(), $services->getTitleFactory(), ExtensionRegistry::getInstance(), $services->getMainConfig(),);}, 'LocalisationCache'=> static function(MediaWikiServices $services):LocalisationCache { $conf=$services->getMainConfig() ->get(MainConfigNames::LocalisationCacheConf);$logger=LoggerFactory::getInstance( 'localisation');$store=LocalisationCache::getStoreFromConf($conf, $services->getMainConfig() ->get(MainConfigNames::CacheDirectory));$logger->debug( 'LocalisationCache using store ' . get_class( $store));return new $conf['class'](new ServiceOptions(LocalisationCache::CONSTRUCTOR_OPTIONS, $conf, ['forceRecache'=> false, 'manualRecache'=> false,], $services->getMainConfig()), $store, $logger, [static function() use( $services) { MessageBlobStore::clearGlobalCacheEntry( $services->getMainWANObjectCache());}], $services->getLanguageNameUtils(), $services->getHookContainer());}, 'LocalServerObjectCache'=> static function(MediaWikiServices $services):BagOStuff { return $services->getObjectCacheFactory() ->getInstance(CACHE_ACCEL);}, 'LockManagerGroupFactory'=> static function(MediaWikiServices $services):LockManagerGroupFactory { return new LockManagerGroupFactory(WikiMap::getCurrentWikiDbDomain() ->getId(), $services->getMainConfig() ->get(MainConfigNames::LockManagers));}, 'LogFormatterFactory'=> static function(MediaWikiServices $services):LogFormatterFactory { return new LogFormatterFactory(new ServiceOptions(LogFormatterFactory::SERVICE_OPTIONS, $services->getMainConfig()), $services->getObjectFactory(), $services->getHookContainer(), $services->getLinkRenderer(), $services->getContentLanguage(), $services->getCommentFormatter(), $services->getUserEditTracker());}, 'MagicWordFactory'=> static function(MediaWikiServices $services):MagicWordFactory { return new MagicWordFactory($services->getContentLanguage(), $services->getHookContainer());}, 'MainConfig'=> static function(MediaWikiServices $services):Config { return $services->getConfigFactory() ->makeConfig( 'main');}, 'MainObjectStash'=> static function(MediaWikiServices $services):BagOStuff { $mainConfig=$services->getMainConfig();$id=$mainConfig->get(MainConfigNames::MainStash);$store=$services->getObjectCacheFactory() ->getInstance( $id);$store->getLogger() ->debug( 'MainObjectStash using store {class}', ['class'=> get_class( $store)]);return $store;}, 'MainWANObjectCache'=> static function(MediaWikiServices $services):WANObjectCache { $mainConfig=$services->getMainConfig();$store=$services->getObjectCacheFactory() ->getLocalClusterInstance();$logger=$store->getLogger();$logger->debug( 'MainWANObjectCache using store {class}', ['class'=> get_class( $store)]);$wanParams=$mainConfig->get(MainConfigNames::WANObjectCache)+['cache'=> $store, 'logger'=> $logger, 'tracer'=> $services->getTracer(),];if(MW_ENTRY_POINT !=='cli') { $wanParams['stats']=$services->getStatsFactory();$wanParams['asyncHandler']=DeferredUpdates::addCallableUpdate(...);} return new WANObjectCache( $wanParams);}, 'MediaHandlerFactory'=> static function(MediaWikiServices $services):MediaHandlerFactory { return new MediaHandlerFactory(LoggerFactory::getInstance( 'MediaHandlerFactory'), $services->getMainConfig() ->get(MainConfigNames::MediaHandlers));}, 'MergeHistoryFactory'=> static function(MediaWikiServices $services):MergeHistoryFactory { return $services->getService( '_PageCommandFactory');}, 'MessageCache'=> static function(MediaWikiServices $services):MessageCache { $mainConfig=$services->getMainConfig();$mainCache=$services->getObjectCacheFactory() ->getInstance( $mainConfig->get(MainConfigNames::MessageCacheType));$srvCache=$mainConfig->get(MainConfigNames::UseLocalMessageCache) ? $services->getLocalServerObjectCache() :new EmptyBagOStuff();$logger=LoggerFactory::getInstance( 'MessageCache');$logger->debug( 'MessageCache using store {class}', ['class'=> get_class( $mainCache)]);$options=new ServiceOptions(MessageCache::CONSTRUCTOR_OPTIONS, $mainConfig);return new MessageCache($services->getMainWANObjectCache(), $mainCache, $srvCache, $services->getContentLanguage(), $services->getLanguageConverterFactory(), $logger, $options, $services->getLocalisationCache(), $services->getLanguageNameUtils(), $services->getLanguageFallback(), $services->getHookContainer(), $services->getMessageParser());}, 'MessageFormatterFactory'=> static function(MediaWikiServices $services):IMessageFormatterFactory { return new MessageFormatterFactory();}, 'MessageParser'=> static function(MediaWikiServices $services):MessageParser { return new MessageParser($services->getParserFactory(), $services->getDefaultOutputPipeline(), $services->getLanguageFactory(), LoggerFactory::getInstance( 'MessageParser'));}, 'MicroStash'=> static function(MediaWikiServices $services):BagOStuff { $mainConfig=$services->getMainConfig();$id=$mainConfig->get(MainConfigNames::MicroStashType);$store=$services->getObjectCacheFactory() ->getInstance( $id);$store->getLogger() ->debug( 'MicroStash using store {class}', ['class'=> get_class( $store)]);return $store;}, 'MimeAnalyzer'=> static function(MediaWikiServices $services):MimeAnalyzer { $logger=LoggerFactory::getInstance( 'Mime');$mainConfig=$services->getMainConfig();$hookRunner=new HookRunner( $services->getHookContainer());$params=['typeFile'=> $mainConfig->get(MainConfigNames::MimeTypeFile), 'infoFile'=> $mainConfig->get(MainConfigNames::MimeInfoFile), 'xmlTypes'=> $mainConfig->get(MainConfigNames::XMLMimeTypes), 'guessCallback'=> static function($mimeAnalyzer, &$head, &$tail, $file, &$mime) use( $logger, $hookRunner) { $deja=new DjVuImage( $file);if( $deja->isValid()) { $logger->info("Detected $file as image/vnd.djvu\n");$mime='image/vnd.djvu';return;} $hookRunner->onMimeMagicGuessFromContent($mimeAnalyzer, $head, $tail, $file, $mime);}, 'extCallback'=> static function( $mimeAnalyzer, $ext, &$mime) use( $hookRunner) { $hookRunner->onMimeMagicImproveFromExtension( $mimeAnalyzer, $ext, $mime);}, 'initCallback'=> static function( $mimeAnalyzer) use( $hookRunner) { $hookRunner->onMimeMagicInit( $mimeAnalyzer);}, 'logger'=> $logger];if( $params['infoFile']==='includes/mime.info') { $params['infoFile']=MimeAnalyzer::USE_INTERNAL;} if( $params['typeFile']==='includes/mime.types') { $params['typeFile']=MimeAnalyzer::USE_INTERNAL;} $detectorCmd=$mainConfig->get(MainConfigNames::MimeDetectorCommand);if( $detectorCmd) { $factory=$services->getShellCommandFactory();$params['detectCallback']=static function( $file) use( $detectorCmd, $factory) { $result=$factory->create() ->unsafeParams( $detectorCmd) ->params( $file) ->execute();return $result->getStdout();};} return new MimeAnalyzer( $params);}, 'MovePageFactory'=> static function(MediaWikiServices $services):MovePageFactory { return $services->getService( '_PageCommandFactory');}, 'MultiFormatUserIdentityLookup'=> static function(MediaWikiServices $services):MultiFormatUserIdentityLookup { return new MultiFormatUserIdentityLookup($services->getActorStoreFactory(), $services->getUserFactory(), new ServiceOptions(MultiFormatUserIdentityLookup::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'NamespaceInfo'=> static function(MediaWikiServices $services):NamespaceInfo { return new NamespaceInfo(new ServiceOptions(NamespaceInfo::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getHookContainer(), ExtensionRegistry::getInstance() ->getAttribute( 'ExtensionNamespaces'), ExtensionRegistry::getInstance() ->getAttribute( 'ImmovableNamespaces'));}, 'NameTableStoreFactory'=> static function(MediaWikiServices $services):NameTableStoreFactory { return new NameTableStoreFactory($services->getDBLoadBalancerFactory(), $services->getMainWANObjectCache(), LoggerFactory::getInstance( 'NameTableSqlStore'));}, 'NotificationService'=> static function(MediaWikiServices $services):NotificationService { $handlers=ExtensionRegistry::getInstance() ->getAttribute( 'NotificationHandlers');$handlers[]=NotificationService::RECENT_CHANGE_HANDLER_SPEC;return new NotificationService(LoggerFactory::getInstance( 'Notification'), $services->getObjectFactory(), $services->getService( '_NotificationMiddlewareChain'), $handlers);}, 'ObjectCacheFactory'=> static function(MediaWikiServices $services):ObjectCacheFactory { return new ObjectCacheFactory(new ServiceOptions(ObjectCacheFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getStatsFactory(), LoggerFactory::getProvider(), static function() use( $services) { return $services->getDBLoadBalancerFactory();}, WikiMap::getCurrentWikiDbDomain() ->getId(), $services->getTracer());}, 'ObjectFactory'=> static function(MediaWikiServices $services):ObjectFactory { return new ObjectFactory( $services);}, 'OldRevisionImporter'=> static function(MediaWikiServices $services):OldRevisionImporter { return new ImportableOldRevisionImporter(true, LoggerFactory::getInstance( 'OldRevisionImporter'), $services->getConnectionProvider(), $services->getRevisionStoreFactory() ->getRevisionStoreForImport(), $services->getSlotRoleRegistry(), $services->getWikiPageFactory(), $services->getPageUpdaterFactory(), $services->getUserFactory());}, 'PageEditStash'=> static function(MediaWikiServices $services):PageEditStash { return new PageEditStash($services->getObjectCacheFactory() ->getLocalClusterInstance(), $services->getConnectionProvider(), LoggerFactory::getInstance( 'StashEdit'), $services->getStatsFactory(), $services->getUserEditTracker(), $services->getUserFactory(), $services->getWikiPageFactory(), $services->getJsonCodec(), $services->getHookContainer(), defined( 'MEDIAWIKI_JOB_RUNNER')||MW_ENTRY_POINT==='cli' ? PageEditStash::INITIATOR_JOB_OR_CLI :PageEditStash::INITIATOR_USER);}, 'PageProps'=> static function(MediaWikiServices $services):PageProps { return new PageProps($services->getLinkBatchFactory(), $services->getConnectionProvider());}, 'PageRestHelperFactory'=> static function(MediaWikiServices $services):PageRestHelperFactory { return new PageRestHelperFactory(new ServiceOptions(PageRestHelperFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getRevisionLookup(), $services->getRevisionRenderer(), $services->getTitleFormatter(), $services->getPageStore(), $services->getParsoidOutputStash(), $services->getParserOutputAccess(), $services->getParsoidSiteConfig(), $services->getHtmlTransformFactory(), $services->getContentHandlerFactory(), $services->getLanguageFactory(), $services->getRedirectStore(), $services->getLanguageConverterFactory(), $services->getTitleFactory(), $services->getConnectionProvider(), $services->getChangeTagsStore(), $services->getStatsFactory());}, 'PageStore'=> static function(MediaWikiServices $services):PageStore { return $services->getPageStoreFactory() ->getPageStore();}, 'PageStoreFactory'=> static function(MediaWikiServices $services):PageStoreFactory { $options=new ServiceOptions(PageStoreFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig());return new PageStoreFactory($options, $services->getDBLoadBalancerFactory(), $services->getNamespaceInfo(), $services->getTitleParser(), $services->getLinkCache(), $services->getStatsFactory());}, 'PageUpdaterFactory'=> static function(MediaWikiServices $services):PageUpdaterFactory { $editResultCache=new EditResultCache($services->getMainObjectStash(), $services->getConnectionProvider(), new ServiceOptions(EditResultCache::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));return new PageUpdaterFactory($services->getRevisionStore(), $services->getRevisionRenderer(), $services->getSlotRoleRegistry(), $services->getParserCache(), $services->getJobQueueGroup(), $services->getContentLanguage(), $services->getDBLoadBalancerFactory(), $services->getContentHandlerFactory(), $services->getDomainEventDispatcher(), $services->getHookContainer(), $editResultCache, LoggerFactory::getInstance( 'SavePage'), new ServiceOptions(PageUpdaterFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getUserGroupManager(), $services->getTitleFormatter(), $services->getContentTransformer(), $services->getPageEditStash(), $services->getMainWANObjectCache(), $services->getWikiPageFactory(), $services->getChangeTagsStore(), $services->getChangeTagsStore() ->getSoftwareTags());}, 'Parser'=> static function(MediaWikiServices $services):Parser { return $services->getParserFactory() ->getMainInstance();}, 'ParserCache'=> static function(MediaWikiServices $services):ParserCache { return $services->getParserCacheFactory() ->getParserCache(ParserCacheFactory::DEFAULT_NAME);}, 'ParserCacheFactory'=> static function(MediaWikiServices $services):ParserCacheFactory { $config=$services->getMainConfig();$cache=$services->getObjectCacheFactory() ->getInstance( $config->get(MainConfigNames::ParserCacheType));$wanCache=$services->getMainWANObjectCache();$options=new ServiceOptions(ParserCacheFactory::CONSTRUCTOR_OPTIONS, $config);return new ParserCacheFactory($cache, $wanCache, $services->getHookContainer(), $services->getJsonCodec(), $services->getStatsFactory(), LoggerFactory::getInstance( 'ParserCache'), $options, $services->getTitleFactory(), $services->getWikiPageFactory(), $services->getGlobalIdGenerator());}, 'ParserFactory'=> static function(MediaWikiServices $services):ParserFactory { $options=new ServiceOptions(Parser::CONSTRUCTOR_OPTIONS, $services->getMainConfig());return new ParserFactory($options, $services->getMagicWordFactory(), $services->getContentLanguage(), $services->getUrlUtils(), $services->getSpecialPageFactory(), $services->getLinkRendererFactory(), $services->getNamespaceInfo(), LoggerFactory::getInstance( 'Parser'), $services->getBadFileLookup(), $services->getLanguageConverterFactory(), $services->getLanguageNameUtils(), $services->getHookContainer(), $services->getTidy(), $services->getMainWANObjectCache(), $services->getUserOptionsLookup(), $services->getUserFactory(), $services->getTitleFormatter(), $services->getHttpRequestFactory(), $services->getTrackingCategories(), $services->getSignatureValidatorFactory(), $services->getUserNameUtils());}, 'ParserOutputAccess'=> static function(MediaWikiServices $services):ParserOutputAccess { $poa=new ParserOutputAccess($services->getParserCacheFactory(), $services->getRevisionLookup(), $services->getRevisionRenderer(), $services->getStatsFactory(), $services->getChronologyProtector(), $services->getWikiPageFactory(), $services->getTitleFormatter(), $services->getTracer(), $services->getPoolCounterFactory());$poa->setLogger(LoggerFactory::getInstance( 'ParserOutputAccess'));return $poa;}, 'ParsoidDataAccess'=> static function(MediaWikiServices $services):DataAccess { $mainConfig=$services->getMainConfig();return new MWDataAccess(new ServiceOptions(MWDataAccess::CONSTRUCTOR_OPTIONS, $mainConfig), $services->getRepoGroup(), $services->getBadFileLookup(), $services->getHookContainer(), $services->getContentTransformer(), $services->getTrackingCategories(), $services->getReadOnlyMode(), $services->getParserFactory(), $services->getLinkBatchFactory(), $services->getLinkRenderer());}, 'ParsoidOutputStash'=> static function(MediaWikiServices $services):ParsoidOutputStash { $config=$services->getMainConfig() ->get(MainConfigNames::ParsoidCacheConfig);$backend=$config['StashType'] ? $services->getObjectCacheFactory() ->getInstance( $config['StashType']) :$services->getMainObjectStash();return new SimpleParsoidOutputStash($services->getJsonCodec(), $backend, $config['StashDuration']);}, 'ParsoidPageConfigFactory'=> static function(MediaWikiServices $services):MWPageConfigFactory { return new MWPageConfigFactory($services->getRevisionStore(), $services->getSlotRoleRegistry(), $services->getLanguageFactory());}, 'ParsoidParserFactory'=> static function(MediaWikiServices $services):ParsoidParserFactory { return new ParsoidParserFactory($services->getParsoidSiteConfig(), $services->getParsoidDataAccess(), $services->getParsoidPageConfigFactory(), $services->getLanguageConverterFactory(), $services->getParserFactory());}, 'ParsoidSiteConfig'=> static function(MediaWikiServices $services):MWSiteConfig { $mainConfig=$services->getMainConfig();$parsoidSettings=$mainConfig->get(MainConfigNames::ParsoidSettings);return new MWSiteConfig(new ServiceOptions(MWSiteConfig::CONSTRUCTOR_OPTIONS, $mainConfig), $parsoidSettings, $services->getObjectFactory(), $services->getContentLanguage(), $services->getStatsdDataFactory(), $services->getStatsFactory(), $services->getMagicWordFactory(), $services->getNamespaceInfo(), $services->getSpecialPageFactory(), $services->getInterwikiLookup(), $services->getUserOptionsLookup(), $services->getLanguageFactory(), $services->getLanguageConverterFactory(), $services->getLanguageNameUtils(), $services->getUrlUtils(), $services->getContentHandlerFactory(), ExtensionRegistry::getInstance() ->getAttribute( 'ParsoidModules'), $services->getParserFactory(), $mainConfig, ExtensionRegistry::getInstance() ->isLoaded( 'TimedMediaHandler'));}, 'PasswordFactory'=> static function(MediaWikiServices $services):PasswordFactory { $config=$services->getMainConfig();return new PasswordFactory($config->get(MainConfigNames::PasswordConfig), $config->get(MainConfigNames::PasswordDefault));}, 'PasswordReset'=> static function(MediaWikiServices $services):PasswordReset { $options=new ServiceOptions(PasswordReset::CONSTRUCTOR_OPTIONS, $services->getMainConfig());return new PasswordReset($options, LoggerFactory::getInstance( 'authentication'), $services->getAuthManager(), $services->getHookContainer(), $services->getUserIdentityLookup(), $services->getUserFactory(), $services->getUserNameUtils(), $services->getUserOptionsLookup());}, 'PatrolManager'=> static function(MediaWikiServices $services):PatrolManager { return new PatrolManager(new ServiceOptions(PatrolManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getConnectionProvider(), $services->getUserFactory(), $services->getHookContainer(), $services->getRevertedTagUpdateManager());}, 'PerDbNameStatsdDataFactory'=> static function(MediaWikiServices $services):StatsdDataFactoryInterface { $config=$services->getMainConfig();$wiki=$config->get(MainConfigNames::DBname);return new PrefixingStatsdDataFactoryProxy($services->getStatsdDataFactory(), $wiki);}, 'PermissionManager'=> static function(MediaWikiServices $services):PermissionManager { return new PermissionManager(new ServiceOptions(PermissionManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getSpecialPageFactory(), $services->getNamespaceInfo(), $services->getGroupPermissionsLookup(), $services->getUserGroupManager(), $services->getBlockManager(), $services->getFormatterFactory() ->getBlockErrorFormatter(new LazyLocalizationContext(RequestContext::getMain(...))), $services->getHookContainer(), $services->getUserIdentityLookup(), $services->getRedirectLookup(), $services->getRestrictionStore(), $services->getTitleFormatter(), $services->getTempUserConfig(), $services->getUserFactory(), $services->getActionFactory());}, 'Pingback'=> static function(MediaWikiServices $services):Pingback { return new Pingback($services->getMainConfig(), $services->getConnectionProvider(), $services->getObjectCacheFactory() ->getLocalClusterInstance(), $services->getHttpRequestFactory(), LoggerFactory::getInstance( 'Pingback'));}, 'PoolCounterFactory'=> static function(MediaWikiServices $services):PoolCounterFactory { $mainConfig=$services->getMainConfig();return new PoolCounterFactory($mainConfig->get(MainConfigNames::PoolCounterConf), $mainConfig->get(MainConfigNames::PoolCountClientConf), LoggerFactory::getInstance( 'poolcounter'), $services->getTracer());}, 'PreferencesFactory'=> static function(MediaWikiServices $services):PreferencesFactory { $factory=new DefaultPreferencesFactory(new ServiceOptions(DefaultPreferencesFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getContentLanguage(), $services->getAuthManager(), $services->getLinkRendererFactory() ->create(), $services->getNamespaceInfo(), $services->getPermissionManager(), $services->getLanguageConverterFactory() ->getLanguageConverter(), $services->getLanguageNameUtils(), $services->getHookContainer(), $services->getUserOptionsManager(), $services->getLanguageConverterFactory(), $services->getParserFactory(), $services->getSkinFactory(), $services->getUserGroupManager(), $services->getSignatureValidatorFactory());$factory->setLogger(LoggerFactory::getInstance( 'preferences'));return $factory;}, 'PreloadedContentBuilder'=> static function(MediaWikiServices $services):PreloadedContentBuilder { return new PreloadedContentBuilder($services->getContentHandlerFactory(), $services->getWikiPageFactory(), $services->getRedirectLookup(), $services->getSpecialPageFactory(), $services->getContentTransformer(), $services->getHookContainer(),);}, 'ProxyLookup'=> static function(MediaWikiServices $services):ProxyLookup { $mainConfig=$services->getMainConfig();return new ProxyLookup($mainConfig->get(MainConfigNames::CdnServers), $mainConfig->get(MainConfigNames::CdnServersNoPurge), $services->getHookContainer(), $services->getLocalServerObjectCache());}, 'RateLimiter'=> static function(MediaWikiServices $services):RateLimiter { $rateLimiter=new RateLimiter(new ServiceOptions(RateLimiter::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getWRStatsFactory(), $services->getCentralIdLookupFactory() ->getNonLocalLookup(), $services->getUserFactory(), $services->getUserGroupManager(), $services->getHookContainer());$rateLimiter->setStats( $services->getStatsFactory());return $rateLimiter;}, 'ReadOnlyMode'=> static function(MediaWikiServices $services):ReadOnlyMode { return new ReadOnlyMode(new ConfiguredReadOnlyMode($services->getMainConfig() ->get(MainConfigNames::ReadOnly), $services->getMainConfig() ->get(MainConfigNames::ReadOnlyFile)), $services->getDBLoadBalancerFactory());}, 'RecentChangeFactory'=> static function(MediaWikiServices $services):RecentChangeFactory { return $services->getRecentChangeStore();}, 'RecentChangeLookup'=> static function(MediaWikiServices $services):RecentChangeLookup { return $services->getRecentChangeStore();}, 'RecentChangeRCFeedNotifier'=> static function(MediaWikiServices $services):RecentChangeRCFeedNotifier { return new RecentChangeRCFeedNotifier($services->getHookContainer(), new ServiceOptions(RecentChangeRCFeedNotifier::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'RecentChangeStore'=> static function(MediaWikiServices $services):RecentChangeStore { $extRegistry=ExtensionRegistry::getInstance();return new RecentChangeStore($services->getActorStoreFactory(), $services->getChangeTagsStore(), $services->getConnectionProvider(), $services->getCommentStore(), $services->getHookContainer(), $services->getJobQueueGroup(), $services->getPermissionManager(), $services->getRecentChangeRCFeedNotifier(), new ServiceOptions(RecentChangeStore::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getTitleFormatter(), $services->getWikiPageFactory(), $services->getUserFactory(), $extRegistry->getAttribute( 'RecentChangeSources'));}, 'RedirectLookup'=> static function(MediaWikiServices $services):RedirectLookup { return $services->getRedirectStore();}, 'RedirectStore'=> static function(MediaWikiServices $services):RedirectStore { return new RedirectStore($services->getConnectionProvider(), $services->getPageStore(), $services->getTitleParser(), $services->getRepoGroup(), LoggerFactory::getInstance( 'RedirectStore'));}, 'RenameUserFactory'=> static function(MediaWikiServices $services):RenameUserFactory { return new RenameUserFactory(new ServiceOptions(RenameUserFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getCentralIdLookupFactory(), $services->getJobQueueGroupFactory(), $services->getMovePageFactory(), $services->getUserFactory(), $services->getUserNameUtils(), $services->getPermissionManager(), $services->getTitleFactory(),);}, 'RepoGroup'=> static function(MediaWikiServices $services):RepoGroup { $config=$services->getMainConfig();return new RepoGroup($config->get(MainConfigNames::LocalFileRepo), $config->get(MainConfigNames::ForeignFileRepos), $services->getMainWANObjectCache(), $services->getMimeAnalyzer());}, 'ResourceLoader'=> static function(MediaWikiServices $services):ResourceLoader { $config=$services->getMainConfig();$maxage=$config->get(MainConfigNames::ResourceLoaderMaxage);$rl=new ResourceLoader($config, LoggerFactory::getInstance( 'resourceloader'), new DependencyStore( $services->getMainObjectStash()), ['loadScript'=> $config->get(MainConfigNames::LoadScript), 'maxageVersioned'=> $maxage['versioned'] ?? null, 'maxageUnversioned'=> $maxage['unversioned'] ?? null,]);$extRegistry=ExtensionRegistry::getInstance();$modules=$extRegistry->getAttribute( 'ResourceModules')+ $config->get(MainConfigNames::ResourceModules);$moduleSkinStyles=$extRegistry->getAttribute( 'ResourceModuleSkinStyles')+ $config->get(MainConfigNames::ResourceModuleSkinStyles);$rl->setModuleSkinStyles( $moduleSkinStyles);$rl->addSource( $config->get(MainConfigNames::ResourceLoaderSources));$rl->register(include MW_INSTALL_PATH . '/resources/Resources.php');$rl->register( $modules);$hookRunner=new \MediaWiki\ResourceLoader\HookRunner( $services->getHookContainer());$hookRunner->onResourceLoaderRegisterModules( $rl);$msgPosterAttrib=$extRegistry->getAttribute( 'MessagePosterModule');$rl->register( 'mediawiki.messagePoster', ['localBasePath'=> MW_INSTALL_PATH, 'debugRaw'=> false, 'scripts'=>['resources/src/mediawiki.messagePoster/factory.js', 'resources/src/mediawiki.messagePoster/MessagePoster.js', 'resources/src/mediawiki.messagePoster/WikitextMessagePoster.js',... $msgPosterAttrib['scripts'] ??[],], 'dependencies'=>['oojs', 'mediawiki.api', 'mediawiki.ForeignApi',... $msgPosterAttrib['dependencies'] ??[],],]);if( $config->get(MainConfigNames::EnableJavaScriptTest)===true) { $rl->registerTestModules();} return $rl;}, 'RestrictedUserGroupChecker'=> static function(MediaWikiServices $services):RestrictedUserGroupChecker { return new RestrictedUserGroupChecker(new ServiceOptions(RestrictedUserGroupChecker::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getUserRequirementsConditionChecker(),);}, 'RestrictionStore'=> static function(MediaWikiServices $services):RestrictionStore { return new RestrictionStore(new ServiceOptions(RestrictionStore::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getMainWANObjectCache(), $services->getDBLoadBalancerFactory(), $services->getLinkCache(), $services->getLinksMigration(), $services->getCommentStore(), $services->getHookContainer(), $services->getPageStore());}, 'RevertedTagUpdateManager'=> static function(MediaWikiServices $services):RevertedTagUpdateManager { $editResultCache=new EditResultCache($services->getMainObjectStash(), $services->getConnectionProvider(), new ServiceOptions(EditResultCache::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));return new RevertedTagUpdateManager($editResultCache, $services->getJobQueueGroup());}, 'RevisionFactory'=> static function(MediaWikiServices $services):RevisionFactory { return $services->getRevisionStore();}, 'RevisionLookup'=> static function(MediaWikiServices $services):RevisionLookup { return $services->getRevisionStore();}, 'RevisionRenderer'=> static function(MediaWikiServices $services):RevisionRenderer { $renderer=new RevisionRenderer($services->getDBLoadBalancer(), $services->getSlotRoleRegistry(), $services->getContentRenderer());$renderer->setLogger(LoggerFactory::getInstance( 'SaveParse'));return $renderer;}, 'RevisionStore'=> static function(MediaWikiServices $services):RevisionStore { return $services->getRevisionStoreFactory() ->getRevisionStore();}, 'RevisionStoreFactory'=> static function(MediaWikiServices $services):RevisionStoreFactory { return new RevisionStoreFactory($services->getDBLoadBalancerFactory(), $services->getBlobStoreFactory(), $services->getNameTableStoreFactory(), $services->getSlotRoleRegistry(), $services->getMainWANObjectCache(), $services->getLocalServerObjectCache(), $services->getCommentStore(), $services->getActorStoreFactory(), LoggerFactory::getInstance( 'RevisionStore'), $services->getContentHandlerFactory(), $services->getPageStoreFactory(), $services->getTitleFactory(), $services->getHookContainer(), $services->getRecentChangeLookup());}, 'RollbackPageFactory'=> static function(MediaWikiServices $services):RollbackPageFactory { return $services->get( '_PageCommandFactory');}, 'RowCommentFormatter'=> static function(MediaWikiServices $services):RowCommentFormatter { return new RowCommentFormatter($services->getCommentParserFactory(), $services->getCommentStore());}, 'SearchEngineConfig'=> static function(MediaWikiServices $services):SearchEngineConfig { return new SearchEngineConfig(new ServiceOptions(SearchEngineConfig::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getContentLanguage(), $services->getHookContainer(), ExtensionRegistry::getInstance() ->getAttribute( 'SearchMappings'), $services->getUserOptionsLookup());}, 'SearchEngineFactory'=> static function(MediaWikiServices $services):SearchEngineFactory { return new SearchEngineFactory($services->getSearchEngineConfig(), $services->getHookContainer(), $services->getConnectionProvider());}, 'SearchResultThumbnailProvider'=> static function(MediaWikiServices $services):SearchResultThumbnailProvider { return new SearchResultThumbnailProvider($services->getRepoGroup(), $services->getHookContainer());}, 'SessionManager'=> static function(MediaWikiServices $services):SessionManagerInterface { return new SessionManager($services->getMainConfig(), LoggerFactory::getInstance( 'session'), $services->getCentralIdLookup(), $services->getHookContainer(), $services->getObjectFactory(), $services->getProxyLookup(), $services->getUrlUtils(), $services->getUserNameUtils(), $services->getSessionStore());}, 'SessionStore'=> static function(MediaWikiServices $services):SessionStore { $objectCacheFactory=$services->getObjectCacheFactory();$mainConfig=$services->getMainConfig();$logger=LoggerFactory::getInstance( 'session');$anonCacheType=$mainConfig->get(MainConfigNames::AnonSessionCacheType);$authCacheType=$mainConfig->get(MainConfigNames::SessionCacheType);if( $anonCacheType !==false) { return new MultiBackendSessionStore($objectCacheFactory->getInstance( $anonCacheType), $objectCacheFactory->getInstance( $authCacheType), $logger, $services->getStatsFactory());} return new SingleBackendSessionStore($objectCacheFactory->getInstance( $authCacheType), $logger, $services->getStatsFactory());}, 'ShellboxClientFactory'=> static function(MediaWikiServices $services):ShellboxClientFactory { $urls=$services->getMainConfig() ->get(MainConfigNames::ShellboxUrls);return new ShellboxClientFactory($services->getHttpRequestFactory(), $urls, $services->getMainConfig() ->get(MainConfigNames::ShellboxSecretKey));}, 'ShellCommandFactory'=> static function(MediaWikiServices $services):CommandFactory { $config=$services->getMainConfig();$limits=['time'=> $config->get(MainConfigNames::MaxShellTime), 'walltime'=> $config->get(MainConfigNames::MaxShellWallClockTime), 'memory'=> $config->get(MainConfigNames::MaxShellMemory), 'filesize'=> $config->get(MainConfigNames::MaxShellFileSize),];$cgroup=$config->get(MainConfigNames::ShellCgroup);$restrictionMethod=$config->get(MainConfigNames::ShellRestrictionMethod);$factory=new CommandFactory( $services->getShellboxClientFactory(), $limits, $cgroup, $restrictionMethod);$factory->setLogger(LoggerFactory::getInstance( 'exec'));$factory->logStderr();return $factory;}, 'SignatureValidatorFactory'=> static function(MediaWikiServices $services):SignatureValidatorFactory { return new SignatureValidatorFactory(new ServiceOptions(SignatureValidator::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), static function() use( $services) { return $services->getParserFactory();}, static function() use( $services) { return $services->getLintErrorChecker();}, $services->getSpecialPageFactory(), $services->getTitleFactory(),);}, 'SiteLookup'=> static function(MediaWikiServices $services):SiteLookup { return $services->getSiteStore();}, 'SiteStore'=> static function(MediaWikiServices $services):SiteStore { $rawSiteStore=new DBSiteStore( $services->getConnectionProvider());$cache=$services->getLocalServerObjectCache();return new CachingSiteStore( $rawSiteStore, $cache);}, 'SkinFactory'=> static function(MediaWikiServices $services):SkinFactory { $factory=new SkinFactory($services->getObjectFactory(),(array) $services->getMainConfig() ->get(MainConfigNames::SkipSkins));$names=$services->getMainConfig() ->get(MainConfigNames::ValidSkinNames);foreach( $names as $name=> $skin) { if(is_array( $skin)) { $spec=$skin;$displayName=$skin['displayname'] ?? $name;$skippable=$skin['skippable'] ?? null;} else { $displayName=$skin;$skippable=null;$spec=['name'=> $name, 'class'=> "Skin$skin"];} $factory->register( $name, $displayName, $spec, $skippable);} $factory->register( 'fallback', 'Fallback', ['class'=> SkinFallback::class, 'args'=>[['name'=> 'fallback', 'styles'=>[ 'mediawiki.skinning.interface', 'mediawiki.codex.messagebox.styles'], 'templateDirectory'=> dirname(__DIR__) . '/resources/templates/skins/fallback',]]], true);$factory->register( 'apioutput', 'ApiOutput', ['class'=> SkinApi::class, 'args'=>[['name'=> 'apioutput', 'styles'=>[ 'mediawiki.skinning.interface'], 'templateDirectory'=> dirname(__DIR__) . '/resources/templates/skins/apioutput',]]], true);$factory->register( 'authentication-popup', 'Authentication popup', ['class'=> SkinAuthenticationPopup::class, 'args'=>[['name'=> 'authentication-popup', 'styles'=>['mediawiki.skinning.interface', 'mediawiki.special.userlogin.authentication-popup',], 'bodyClasses'=>[ 'mw-authentication-popup'], 'responsive'=> true, 'messages'=>['sitesubtitle', 'sitetitle',], 'templateDirectory'=> dirname(__DIR__) . '/resources/templates/skins/authentication-popup',]]], true);$factory->register( 'json', 'SkinJSON', ['class'=> SkinApi::class, 'args'=>[['name'=> 'json', 'styles'=>[], 'format'=> 'json', 'templateDirectory'=> dirname(__DIR__) . '/resources/templates/skins/apioutput',]]], true);return $factory;}, 'SlotRoleRegistry'=> static function(MediaWikiServices $services):SlotRoleRegistry { $registry=new SlotRoleRegistry($services->getSlotRoleStore());$config=$services->getMainConfig();$contentHandlerFactory=$services->getContentHandlerFactory();$hookContainer=$services->getHookContainer();$titleFactory=$services->getTitleFactory();$registry->defineRole(SlotRecord::MAIN, static function() use( $config, $contentHandlerFactory, $hookContainer, $titleFactory) { return new MainSlotRoleHandler($config->get(MainConfigNames::NamespaceContentModels), $contentHandlerFactory, $hookContainer, $titleFactory);});return $registry;}, 'SlotRoleStore'=> static function(MediaWikiServices $services):NameTableStore { return $services->getNameTableStoreFactory() ->getSlotRoles();}, 'SpamChecker'=> static function(MediaWikiServices $services):SpamChecker { return new SpamChecker((array) $services->getMainConfig() ->get(MainConfigNames::SpamRegex),(array) $services->getMainConfig() ->get(MainConfigNames::SummarySpamRegex));}, 'SpecialPageFactory'=> static function(MediaWikiServices $services):SpecialPageFactory { return new SpecialPageFactory(new ServiceOptions(SpecialPageFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getContentLanguage(), $services->getObjectFactory(), $services->getTitleFactory(), $services->getHookContainer(), $services->getStatsFactory(),);}, 'StatsdDataFactory'=> static function(MediaWikiServices $services):IBufferingStatsdDataFactory { return new NullStatsdDataFactory();}, 'StatsFactory'=> static function(MediaWikiServices $services):StatsFactory { $config=$services->getMainConfig();$format=OutputFormats::getFormatFromString($config->get(MainConfigNames::StatsFormat) ?? 'null');$cache=new StatsCache;$emitter=OutputFormats::getNewEmitter($config->get(MainConfigNames::StatsPrefix), $cache, OutputFormats::getNewFormatter( $format), $config->get(MainConfigNames::StatsTarget));return new StatsFactory( $cache, $emitter, LoggerFactory::getInstance( 'Stats'));}, 'TalkPageNotificationManager'=> static function(MediaWikiServices $services):TalkPageNotificationManager { return new TalkPageNotificationManager(new ServiceOptions(TalkPageNotificationManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getConnectionProvider(), $services->getReadOnlyMode(), $services->getRevisionLookup(), $services->getHookContainer(), $services->getUserFactory());}, 'TempFSFileFactory'=> static function(MediaWikiServices $services):TempFSFileFactory { return new TempFSFileFactory( $services->getMainConfig() ->get(MainConfigNames::TmpDirectory));}, 'TempUserConfig'=> static function(MediaWikiServices $services):RealTempUserConfig { return new RealTempUserConfig($services->getMainConfig() ->get(MainConfigNames::AutoCreateTempUser));}, 'TempUserCreator'=> static function(MediaWikiServices $services):TempUserCreator { return new TempUserCreator($services->getTempUserConfig(), $services->getObjectFactory(), $services->getUserFactory(), $services->getAuthManager(), $services->getCentralIdLookup(), new Throttler($services->getMainConfig() ->get(MainConfigNames::TempAccountCreationThrottle), ['type'=> 'tempacctcreate', 'cache'=> $services->getObjectCacheFactory() ->getLocalClusterInstance(),]), new Throttler($services->getMainConfig() ->get(MainConfigNames::TempAccountNameAcquisitionThrottle), ['type'=> 'tempacctnameacquisition', 'cache'=> $services->getObjectCacheFactory() ->getLocalClusterInstance(),]));}, 'TempUserDetailsLookup'=> static function(MediaWikiServices $services):TempUserDetailsLookup { return new TempUserDetailsLookup($services->getTempUserConfig(), $services->getUserRegistrationLookup());}, 'Tidy'=> static function(MediaWikiServices $services):TidyDriverBase { return new RemexDriver(new ServiceOptions(RemexDriver::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'TitleFactory'=> static function(MediaWikiServices $services):TitleFactory { return new TitleFactory();}, 'TitleFormatter'=> static function(MediaWikiServices $services):TitleFormatter { return new TitleFormatter($services->getContentLanguage(), $services->getGenderCache(), $services->getNamespaceInfo());}, 'TitleMatcher'=> static function(MediaWikiServices $services):TitleMatcher { return new TitleMatcher($services->getContentLanguage(), $services->getLanguageConverterFactory(), $services->getHookContainer(), $services->getWikiPageFactory(), $services->getRepoGroup(), $services->getTitleFactory());}, 'TitleParser'=> static function(MediaWikiServices $services):TitleParser { return new TitleParser($services->getContentLanguage(), $services->getInterwikiLookup(), $services->getNamespaceInfo(), $services->getMainConfig() ->get(MainConfigNames::LocalInterwikis));}, 'Tracer'=> static function(MediaWikiServices $services):TracerInterface { $xReqIdPropagator=new MediaWikiPropagator(Telemetry::getInstance());$otelConfig=$services->getMainConfig() ->get(MainConfigNames::OpenTelemetryConfig);if( $otelConfig===null||(wfIsCLI() &&!defined( 'MW_PHPUNIT_TEST'))) { return new NoopTracer( $xReqIdPropagator);} $tracerState=TracerState::getInstance();$exporter=new OtlpHttpExporter($services->getService( '_TracerHTTPClient'), new HttpFactory(), LoggerFactory::getInstance( 'tracing'), $otelConfig['endpoint'], $otelConfig['serviceName'], wfHostname());return new Tracer(new Clock(), new ProbabilisticSampler( $otelConfig['samplingProbability']), $exporter, $tracerState, new CompositePropagator([ $xReqIdPropagator, new W3CTraceContextPropagator()]));}, 'TrackingCategories'=> static function(MediaWikiServices $services):TrackingCategories { return new TrackingCategories(new ServiceOptions(TrackingCategories::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getNamespaceInfo(), $services->getTitleParser(), LoggerFactory::getInstance( 'TrackingCategories'));}, 'UnblockUserFactory'=> static function(MediaWikiServices $services):UnblockUserFactory { return $services->getService( '_UserBlockCommandFactory');}, 'UndeletePageFactory'=> static function(MediaWikiServices $services):UndeletePageFactory { return $services->getService( '_PageCommandFactory');}, 'UploadRevisionImporter'=> static function(MediaWikiServices $services):UploadRevisionImporter { return new ImportableUploadRevisionImporter($services->getMainConfig() ->get(MainConfigNames::EnableUploads), LoggerFactory::getInstance( 'UploadRevisionImporter'));}, 'UploadVerification'=> static function(MediaWikiServices $services):UploadVerification { return new UploadVerification(new ServiceOptions(UploadVerification::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getMimeAnalyzer(), new SVGCSSChecker);}, 'UrlUtils'=> static function(MediaWikiServices $services):UrlUtils { $config=$services->getMainConfig();return new UrlUtils([UrlUtils::SERVER=> $config->get(MainConfigNames::Server), UrlUtils::CANONICAL_SERVER=> $config->get(MainConfigNames::CanonicalServer), UrlUtils::INTERNAL_SERVER=> $config->get(MainConfigNames::InternalServer), UrlUtils::FALLBACK_PROTOCOL=> RequestContext::getMain() ->getRequest() ->getProtocol(), UrlUtils::HTTPS_PORT=> $config->get(MainConfigNames::HttpsPort), UrlUtils::VALID_PROTOCOLS=> $config->get(MainConfigNames::UrlProtocols),]);}, 'UserCache'=> static function(MediaWikiServices $services):UserCache { return new UserCache(LoggerFactory::getInstance( 'UserCache'), $services->getConnectionProvider(), $services->getLinkBatchFactory());}, 'UserEditTracker'=> static function(MediaWikiServices $services):UserEditTracker { return new UserEditTracker($services->getActorNormalization(), $services->getConnectionProvider(), $services->getJobQueueGroup());}, 'UserFactory'=> static function(MediaWikiServices $services):UserFactory { return new UserFactory(new ServiceOptions(UserFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getDBLoadBalancerFactory(), $services->getUserNameUtils(), $services->getTempUserConfig());}, 'UserGroupAssignmentService'=> static function(MediaWikiServices $services):UserGroupAssignmentService { return new UserGroupAssignmentService($services->getUserGroupManagerFactory(), $services->getUserNameUtils(), $services->getUserFactory(), $services->getRestrictedUserGroupChecker(), new HookRunner( $services->getHookContainer()), new ServiceOptions(UserGroupAssignmentService::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getTempUserConfig());}, 'UserGroupManager'=> static function(MediaWikiServices $services):UserGroupManager { return $services->getUserGroupManagerFactory() ->getUserGroupManager();}, 'UserGroupManagerFactory'=> static function(MediaWikiServices $services):UserGroupManagerFactory { return new UserGroupManagerFactory(new ServiceOptions(UserGroupManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getReadOnlyMode(), $services->getDBLoadBalancerFactory(), $services->getHookContainer(), $services->getJobQueueGroupFactory(), $services->getTempUserConfig(), $services->getUserRequirementsConditionCheckerFactory(), [static function(UserIdentity $user) use( $services) { if( $user->getWikiId()===UserIdentity::LOCAL) { $services->getPermissionManager() ->invalidateUsersRightsCache( $user);} $services->getUserFactory() ->invalidateCache( $user);}]);}, 'UserIdentityLookup'=> static function(MediaWikiServices $services):UserIdentityLookup { return $services->getActorStoreFactory() ->getUserIdentityLookup();}, 'UserIdentityUtils'=> static function(MediaWikiServices $services):UserIdentityUtils { return new UserIdentityUtils($services->getTempUserConfig());}, 'UserLinkRenderer'=> static function(MediaWikiServices $services):UserLinkRenderer { return new UserLinkRenderer($services->getHookContainer(), $services->getTempUserConfig(), $services->getSpecialPageFactory(), $services->getLinkRenderer(), $services->getTempUserDetailsLookup(), $services->getUserIdentityLookup(), $services->getUserNameUtils());}, 'UserNamePrefixSearch'=> static function(MediaWikiServices $services):UserNamePrefixSearch { return new UserNamePrefixSearch($services->getConnectionProvider(), $services->getUserNameUtils(), $services->getHideUserUtils());}, 'UserNameUtils'=> static function(MediaWikiServices $services):UserNameUtils { $messageFormatterFactory=new MessageFormatterFactory(Message::FORMAT_PLAIN);return new UserNameUtils(new ServiceOptions(UserNameUtils::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getContentLanguage(), LoggerFactory::getInstance( 'UserNameUtils'), $services->getTitleParser(), $messageFormatterFactory->getTextFormatter($services->getContentLanguageCode() ->toString()), $services->getHookContainer(), $services->getTempUserConfig());}, 'UserOptionsLookup'=> static function(MediaWikiServices $services):UserOptionsLookup { return $services->getUserOptionsManager();}, 'UserOptionsManager'=> static function(MediaWikiServices $services):UserOptionsManager { return new UserOptionsManager(new ServiceOptions(UserOptionsManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->get( '_DefaultOptionsLookup'), $services->getLanguageConverterFactory(), $services->getConnectionProvider(), LoggerFactory::getInstance( 'UserOptionsManager'), $services->getHookContainer(), $services->getUserFactory(), $services->getUserNameUtils(), $services->getObjectFactory(), ExtensionRegistry::getInstance() ->getAttribute( 'UserOptionsStoreProviders'));}, 'UserRegistrationLookup'=> static function(MediaWikiServices $services):UserRegistrationLookup { $lookup=new UserRegistrationLookup(new ServiceOptions(UserRegistrationLookup::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getObjectFactory());if(! $lookup->isRegistered(LocalUserRegistrationProvider::TYPE)) { throw new ConfigException( 'UserRegistrationLookup:Local provider is required');} return $lookup;}, 'UserRequirementsConditionChecker'=> static function(MediaWikiServices $services):UserRequirementsConditionChecker { return $services->getUserRequirementsConditionCheckerFactory() ->getUserRequirementsConditionChecker( $services->getUserGroupManager());}, 'UserRequirementsConditionCheckerFactory'=> static function(MediaWikiServices $services):UserRequirementsConditionCheckerFactory { return new UserRequirementsConditionCheckerFactory(new ServiceOptions(UserRequirementsConditionChecker::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getGroupPermissionsLookup(), $services->getHookContainer(), LoggerFactory::getInstance( 'UserGroupManager'), $services->getUserEditTracker(), $services->getUserRegistrationLookup(), $services->getUserFactory(), RequestContext::getMain(),);}, 'WatchedItemQueryService'=> static function(MediaWikiServices $services):WatchedItemQueryService { return new WatchedItemQueryService($services->getConnectionProvider(), $services->getWatchedItemStore(), $services->getMainConfig() ->get(MainConfigNames::WatchlistExpiry), $services->getMainConfig() ->get(MainConfigNames::MaxExecutionTimeForExpensiveQueries));}, 'WatchedItemStore'=> static function(MediaWikiServices $services):WatchedItemStore { $store=new WatchedItemStore(new ServiceOptions(WatchedItemStore::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getDBLoadBalancerFactory(), $services->getJobQueueGroup(), $services->getMainObjectStash(), new HashBagOStuff([ 'maxKeys'=> 100]), $services->getReadOnlyMode(), $services->getNamespaceInfo(), $services->getRevisionLookup(), $services->getLinkBatchFactory(), $services->getWatchlistLabelStore());if( $services->getMainConfig() ->get(MainConfigNames::ReadOnlyWatchedItemStore)) { $store=new NoWriteWatchedItemStore( $store);} return $store;}, 'WatchlistLabelStore'=> static function(MediaWikiServices $services):WatchlistLabelStore { return new WatchlistLabelStore($services->getConnectionProvider(), LoggerFactory::getInstance( 'WatchlistLabels'), $services->getMainConfig());}, 'WatchlistManager'=> static function(MediaWikiServices $services):WatchlistManager { return new WatchlistManager([WatchlistManager::OPTION_ENOTIF=> RecentChangeStore::isEnotifEnabled(new ServiceOptions(RecentChangeStore::CONSTRUCTOR_OPTIONS, $services->getMainConfig())),], $services->getHookContainer(), $services->getReadOnlyMode(), $services->getRevisionLookup(), $services->getTalkPageNotificationManager(), $services->getWatchedItemStore(), $services->getUserFactory(), $services->getNamespaceInfo(), $services->getWikiPageFactory());}, 'WikiExporterFactory'=> static function(MediaWikiServices $services):WikiExporterFactory { return new WikiExporterFactory($services->getHookContainer(), $services->getRevisionStore(), $services->getTitleParser(), $services->getCommentStore());}, 'WikiImporterFactory'=> static function(MediaWikiServices $services):WikiImporterFactory { return new WikiImporterFactory($services->getMainConfig(), $services->getHookContainer(), $services->getContentLanguage(), $services->getNamespaceInfo(), $services->getTitleFactory(), $services->getWikiPageFactory(), $services->getWikiRevisionUploadImporter(), $services->getContentHandlerFactory(), $services->getSlotRoleRegistry());}, 'WikiPageFactory'=> static function(MediaWikiServices $services):WikiPageFactory { return new WikiPageFactory($services->getTitleFactory(), new HookRunner( $services->getHookContainer()), $services->getDBLoadBalancerFactory());}, 'WikiRevisionOldRevisionImporterNoUpdates'=> static function(MediaWikiServices $services):ImportableOldRevisionImporter { return new ImportableOldRevisionImporter(false, LoggerFactory::getInstance( 'OldRevisionImporter'), $services->getConnectionProvider(), $services->getRevisionStoreFactory() ->getRevisionStoreForImport(), $services->getSlotRoleRegistry(), $services->getWikiPageFactory(), $services->getPageUpdaterFactory(), $services->getUserFactory());}, 'WRStatsFactory'=> static function(MediaWikiServices $services):WRStatsFactory { return new WRStatsFactory(new BagOStuffStatsStore( $services->getMicroStash()));}, '_ConditionalDefaultsLookup'=> static function(MediaWikiServices $services):ConditionalDefaultsLookup { return new ConditionalDefaultsLookup(new HookRunner( $services->getHookContainer()), new ServiceOptions(ConditionalDefaultsLookup::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getUserRegistrationLookup(), $services->getUserIdentityUtils(), static function() use( $services) { return $services->getUserGroupManager();});}, '_DefaultOptionsLookup'=> static function(MediaWikiServices $services):DefaultOptionsLookup { return new DefaultOptionsLookup(new ServiceOptions(DefaultOptionsLookup::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getContentLanguageCode(), $services->getHookContainer(), $services->getNamespaceInfo(), $services->get( '_ConditionalDefaultsLookup'), $services->getUserIdentityLookup(), $services->getUserNameUtils());}, '_DomainEventDispatcher'=> static function(MediaWikiServices $services):EventDispatchEngine { $dispatcher=new EventDispatchEngine($services->getObjectFactory());$dispatcher->registerSubscriber(ChangeTrackingEventIngress::OBJECT_SPEC);$dispatcher->registerSubscriber(SearchEventIngress::OBJECT_SPEC);$dispatcher->registerSubscriber(LanguageEventIngress::OBJECT_SPEC);$extensionRegistry=$services->getExtensionRegistry();$dispatcher->registerSubscriber( $extensionRegistry);return $dispatcher;}, '_EditConstraintFactory'=> static function(MediaWikiServices $services):EditConstraintFactory { return new EditConstraintFactory(new ServiceOptions(EditConstraintFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), LoggerFactory::getProvider(), $services->getHookContainer(), $services->getReadOnlyMode(), $services->getSpamChecker(), $services->getRateLimiter(), $services->getRedirectLookup(), $services->getConnectionProvider(), $services->getCommentStore(),);}, '_NotificationMiddlewareChain'=> static function(MediaWikiServices $services):MiddlewareChain { return new MiddlewareChain($services->getObjectFactory(), ExtensionRegistry::getInstance() ->getAttribute( 'NotificationMiddleware'));}, '_PageCommandFactory'=> static function(MediaWikiServices $services):PageCommandFactory { return new PageCommandFactory($services->getMainConfig(), $services->getDBLoadBalancerFactory(), $services->getNamespaceInfo(), $services->getWatchedItemStore(), $services->getRepoGroup(), $services->getReadOnlyMode(), $services->getContentHandlerFactory(), $services->getRevisionStoreFactory(), $services->getSpamChecker(), $services->getTitleFormatter(), $services->getHookContainer(), $services->getDomainEventDispatcher(), $services->getWikiPageFactory(), $services->getUserFactory(), $services->getActorMigration(), $services->getActorNormalization(), $services->getTitleFactory(), $services->getUserEditTracker(), $services->getCollationFactory(), $services->getJobQueueGroup(), $services->getCommentStore(), $services->getMainObjectStash(), WikiMap::getCurrentWikiDbDomain() ->getId(), WebRequest::getRequestId(), $services->getBacklinkCacheFactory(), LoggerFactory::getInstance( 'UndeletePage'), $services->getPageUpdaterFactory(), $services->getMessageFormatterFactory() ->getTextFormatter($services->getContentLanguageCode() ->toString()), $services->getArchivedRevisionLookup(), $services->getRestrictionStore(), $services->getLinkTargetLookup(), $services->getRedirectStore(), $services->getLogFormatterFactory());}, '_ParserObserver'=> static function(MediaWikiServices $services):ParserObserver { return new ParserObserver(LoggerFactory::getInstance( 'DuplicateParse'));}, '_Parsoid'=> static function(MediaWikiServices $services):Parsoid { return new Parsoid($services->getParsoidSiteConfig(), $services->getParsoidDataAccess());}, '_SettingsBuilder'=> static function(MediaWikiServices $services):SettingsBuilder { return SettingsBuilder::getInstance();}, '_SqlBlobStore'=> static function(MediaWikiServices $services):SqlBlobStore { return $services->getBlobStoreFactory() ->newSqlBlobStore();}, '_TracerHTTPClient'=> static function():ClientInterface { return new Client([ 'http_errors'=> false]);}, '_UserBlockCommandFactory'=> static function(MediaWikiServices $services):UserBlockCommandFactory { return new UserBlockCommandFactory(new ServiceOptions(UserBlockCommandFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getHookContainer(), $services->getBlockPermissionCheckerFactory(), $services->getBlockTargetFactory(), $services->getDatabaseBlockStore(), $services->getBlockRestrictionStore(), $services->getUserFactory(), $services->getUserEditTracker(), LoggerFactory::getInstance( 'BlockManager'), $services->getTitleFactory(), $services->getBlockActionInfo());}]
ContentJsonCodec handles serialization of Content objects to/from JSON using methods of the appropria...
A service to render content.
A service to transform content.
Group all the pieces relevant to the context of a request into one instance.
Implementation of DomainEventDispatcher and DomainEventSource based on HookContainer and DeferredUpda...
registerSubscriber( $subscriber)
Constraints reflect possible errors that need to be checked.
Provides the intro messages (edit notices and others) to be displayed before an edit form.
Provides the initial content of the edit box displayed in an edit form when creating a new page or a ...
Service to check if text (either content or a summary) qualifies as spam.
Wrapper for injecting a LocalizationContext with lazy initialization.
A class containing constants representing the names of configuration variables.
Factory for LinkBatch objects to batch query page metadata.
Page existence and metadata cache.
Implementation of various page action services.
Gives access to properties of a page.
Service for getting rendered output of a given page.
setLogger(LoggerInterface $logger)
Service for storing and retrieving page redirect information.
Service for creating WikiPage objects.
Helper class used by MediaWiki to create Parsoid PageConfig objects.
A SlotRoleHandler for the main slot.
Factory for handling the special page list and generating SpecialPage objects.
Manage the pre-emptive page parsing for edits to wiki pages.
A factory for PageUpdater and DerivedPageDataUpdater instances.
Manages user talk page notifications.
Factory for cache objects as configured in the ObjectCaches setting.
A ContextPropagatorInterface implementation for W3C Trace Context.
Service for sending domain events to registered listeners.
Service object for registering listeners for domain events.
Service for changing the content model of wiki pages.
Service for page delete actions.
Service for mergehistory actions.
Service for page rename actions.
Service for resolving a wiki page redirect.
Service for page rollback actions.
Service for page undelete actions.