31use GuzzleHttp\Psr7\HttpFactory;
32use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
319use Psr\Http\Client\ClientInterface;
324use Wikimedia\Mime\MimeAnalyzer;
329use Wikimedia\ObjectFactory\ObjectFactory;
330use Wikimedia\Parsoid\Config\DataAccess;
331use Wikimedia\Parsoid\Parsoid;
337use Wikimedia\RequestTimeout\CriticalSectionProvider;
338use Wikimedia\RequestTimeout\RequestTimeout;
375 $services->getObjectFactory(),
376 $services->getHookContainer(),
377 $services->getContentHandlerFactory()
383 $services->getActorStoreFactory()
388 return $services->getActorStoreFactory()->getActorNormalization();
392 return $services->getActorStoreFactory()->getActorStore();
398 $services->getDBLoadBalancerFactory(),
399 $services->getUserNameUtils(),
400 $services->getTempUserConfig(),
402 $services->getHideUserUtils()
408 $services->getConnectionProvider(),
409 $services->getRevisionStore()
416 $services->getMainConfig(),
417 $services->getChangeTagsStore(),
418 $services->getObjectFactory(),
419 $services->getObjectCacheFactory(),
420 $services->getHookContainer(),
421 $services->getReadOnlyMode(),
422 $services->getUserNameUtils(),
423 $services->getBlockManager(),
424 $services->getWatchlistManager(),
425 $services->getDBLoadBalancer(),
426 $services->getContentLanguage(),
427 $services->getLanguageConverterFactory(),
428 $services->getBotPasswordStore(),
429 $services->getUserFactory(),
430 $services->getUserIdentityLookup(),
431 $services->getUserIdentityUtils(),
432 $services->getUserOptionsManager(),
433 $services->getNotificationService(),
434 $services->getSessionManager()
436 $authManager->
setLogger( LoggerFactory::getInstance(
'authentication' ) );
437 $authManager->setAuthEventsLogger( LoggerFactory::getInstance(
'authevents' ) );
445 AutoblockExemptionList::CONSTRUCTOR_OPTIONS,
446 $services->getMainConfig(),
448 LoggerFactory::getInstance(
'AutoblockExemptionList' ),
449 $messageFormatterFactory->getTextFormatter(
450 $services->getContentLanguageCode()->toString()
459 $services->getMainConfig()
461 $services->getLinksMigration(),
462 $services->getMainWANObjectCache(),
463 $services->getHookContainer(),
464 $services->getConnectionProvider(),
465 $services->getRestrictionStore(),
473 return wfMessage(
'bad_image_list' )->inContentLanguage()->plain();
475 $services->getLocalServerObjectCache(),
476 $services->getRepoGroup(),
477 $services->getTitleParser(),
478 $services->getHookContainer()
483 return $services->getService(
'_SqlBlobStore' );
488 $services->getDBLoadBalancerFactory(),
489 $services->getExternalStoreAccess(),
490 $services->getMainWANObjectCache(),
492 $services->getMainConfig() )
501 return $services->getFormatterFactory()->getBlockErrorFormatter(
510 $services->getMainConfig()
512 $services->getUserFactory(),
513 $services->getUserIdentityUtils(),
515 $services->getHookContainer(),
516 $services->getDatabaseBlockStore(),
517 $services->getBlockTargetFactory(),
518 $services->getProxyLookup()
522 'BlockPermissionCheckerFactory' =>
static function (
528 $services->getMainConfig()
530 $services->getBlockTargetFactory()
535 return $services->getBlockRestrictionStoreFactory()->getBlockRestrictionStore(
WikiAwareEntity::LOCAL );
540 $services->getDBLoadBalancerFactory()
545 return $services->getCrossWikiBlockTargetFactory()->getFactory();
549 return $services->getService(
'_UserBlockCommandFactory' );
553 return $services->getBlockUtilsFactory()->getBlockUtils();
558 $services->getCrossWikiBlockTargetFactory()
566 $services->getMainConfig()
568 $services->getCentralIdLookup(),
569 $services->getDBLoadBalancerFactory()
574 return $services->getCentralIdLookupFactory()->getLookup();
580 $services->getObjectFactory(),
581 $services->getUserIdentityLookup(),
582 $services->getUserFactory()
589 $services->getRecentChangeLookup(),
590 $services->getWatchedItemStore(),
591 $services->getTempUserConfig(),
592 $services->getUserFactory(),
593 $services->getLinkTargetLookup(),
594 $services->getChangeTagsStore(),
595 $services->getStatsFactory(),
596 $services->getSlotRoleStore(),
598 $services->getConnectionProvider(),
603 return $services->getNameTableStoreFactory()->getChangeTagDef();
609 $services->getChangeTagsStore(),
610 $services->getMainWANObjectCache(),
611 $services->getLanguageFactory(),
616 return $services->getChangeTagsStoreFactory()->getChangeTagsStore();
621 $services->getConnectionProvider(),
622 $services->getNameTableStoreFactory(),
623 $services->getMainWANObjectCache(),
624 $services->getHookContainer(),
626 $services->getUserFactory(),
629 $services->getMainConfig()
636 new
HookRunner( $services->getHookContainer() ),
642 $mainConfig = $services->getMainConfig();
643 $microStashIsDatabase = $services->getObjectCacheFactory()->isDatabaseId(
644 $mainConfig->get( MainConfigNames::MicroStashType )
646 $cpStash = $microStashIsDatabase
648 : $services->getMicroStash();
652 $mainConfig->get( MainConfigNames::ChronologyProtectorSecret ),
654 LoggerFactory::getInstance(
'rdbms' )
663 $req = RequestContext::getMain()->getRequest();
666 $reqStart = (int)( $_SERVER[
'REQUEST_TIME_FLOAT'] ?? time() );
667 $cpPosInfo = ChronologyProtector::getCPInfoFromCookieValue(
669 $req->getCookie(
'cpPosIndex',
'' ),
671 $reqStart - ChronologyProtector::POSITION_COOKIE_TTL
673 $chronologyProtector->setRequestInfo( [
674 'IPAddress' => $req->getIP(),
675 'UserAgent' => $req->getHeader(
'User-Agent' ),
676 'ChronologyPositionIndex' => $req->getInt(
'cpPosIndex', $cpPosInfo[
'index'] ),
677 'ChronologyClientId' => $cpPosInfo[
'clientId'] ??
null,
679 return $chronologyProtector;
684 $services->getObjectFactory(),
693 $services->getObjectFactory(),
694 $services->getHookContainer()
700 $services->getCommentParserFactory()
706 $services->getLinkRendererFactory()->create( [
'renderForComment' => true ] ),
707 $services->getLinkBatchFactory(),
708 $services->getLinkCache(),
709 $services->getRepoGroup(),
710 $services->getContentLanguage(),
711 $services->getTitleParser(),
712 $services->getNamespaceInfo(),
713 $services->getHookContainer()
723 $registry = $services->getBootstrapConfig()->get(
MainConfigNames::ConfigRegistry );
726 foreach ( $registry as $name => $callback ) {
727 $factory->register( $name, $callback );
738 $settings = $services->get(
'_SettingsBuilder' );
739 return $settings->getConfigSchema();
743 $config = $services->getMainConfig();
745 $config->get( MainConfigNames::ReadOnly ),
746 $config->get( MainConfigNames::ReadOnlyFile )
752 $services->getLocalServerObjectCache(),
753 $services->getUrlUtils()
761 $services->getMainConfig()
763 new
HookRunner( $services->getHookContainer() ),
764 $services->getUserFactory(),
765 $services->getEmailer(),
766 $services->getConfirmEmailBuilderFactory(),
772 return $services->getDBLoadBalancerFactory();
776 $contentHandlerConfig = $services->getMainConfig()->get(
MainConfigNames::ContentHandlers );
779 $contentHandlerConfig,
780 $services->getObjectFactory(),
781 $services->getHookContainer(),
782 LoggerFactory::getInstance(
'ContentHandler' )
788 $services->getContentHandlerFactory(),
798 return $services->getLanguageFactory()->getLanguageCode(
803 return $services->getService(
'_PageCommandFactory' );
807 return $services->getNameTableStoreFactory()->getContentModels();
812 $services->getContentHandlerFactory(),
813 $services->getGlobalIdGenerator()
821 'CriticalSectionProvider' =>
static function (
MediaWikiServices $services ): CriticalSectionProvider {
822 $config = $services->getMainConfig();
823 $limit =
MW_ENTRY_POINT ===
'cli' ? INF : $config->get( MainConfigNames::CriticalSectionTimeLimit );
824 return RequestTimeout::singleton()->createCriticalSectionProvider( $limit );
830 $services->getActorStoreFactory(),
831 $services->getUserNameUtils()
836 return $services->getDatabaseBlockStoreFactory()->getDatabaseBlockStore(
DatabaseBlock::LOCAL );
843 $services->getMainConfig()
846 $services->getActorStoreFactory(),
847 $services->getBlockRestrictionStoreFactory(),
848 $services->getCommentStore(),
849 $services->getHookContainer(),
850 $services->getDBLoadBalancerFactory(),
851 $services->getReadOnlyMode(),
852 $services->getUserFactory(),
853 $services->getTempUserConfig(),
854 $services->getCrossWikiBlockTargetFactory(),
855 $services->getAutoblockExemptionList(),
856 $services->getSessionManager()
863 'debugSql' => $services->getMainConfig()->get(
MainConfigNames::DebugDumpSql ),
864 'tracer' => $services->getTracer(),
875 return $services->getDBLoadBalancerFactory()->getMainLB();
879 $lbConf = $services->getDBLoadBalancerFactoryConfig()->
getConfig();
881 $mainConfig = $services->getMainConfig();
882 if ( $services->getObjectCacheFactory()->isDatabaseId(
883 $mainConfig->get( MainConfigNames::MainCacheType )
885 $wanCache = WANObjectCache::newEmpty();
887 $wanCache = $services->getMainWANObjectCache();
889 $srvCache = $services->getLocalServerObjectCache();
897 $mainConfig->get( MainConfigNames::ReadOnly ),
898 $mainConfig->get( MainConfigNames::ReadOnlyFile )
900 $services->getChronologyProtector(),
903 $services->getCriticalSectionProvider(),
904 $services->getStatsFactory(),
905 $services->getTracer(),
906 RequestContext::getMain()->getRequest()->getIP()
908 $lbConf = $lbFactoryConfigBuilder->applyServices( $lbConf );
910 $class = $lbFactoryConfigBuilder->getLBFactoryClass( $lbConf );
913 $lbFactoryConfigBuilder->setDomainAliases( $instance );
927 return $services->getDefaultOutputPipelineFactory()
928 ->buildDefaultOutputPipeline();
936 $services->getMainConfig(),
938 $services->getObjectFactory()
943 return $services->getService(
'_PageCommandFactory' );
947 return $services->getService(
'_DomainEventDispatcher' );
951 return $services->getService(
'_DomainEventDispatcher' );
954 'EmailConfirmationBannerHandler' =>
959 $services->getMainConfig()
971 $services->getHookContainer(),
972 $services->getUserOptionsLookup(),
973 $services->getCentralIdLookup(),
974 $services->getUserFactory(),
975 $services->getEmailer(),
976 $services->getMessageFormatterFactory(),
977 $services->getMessageFormatterFactory()->getTextFormatter(
978 $services->getContentLanguageCode()->toString()
993 $services->getExternalStoreFactory(),
999 $config = $services->getMainConfig();
1000 $writeStores = $config->get( MainConfigNames::DefaultExternalStore );
1003 $config->get( MainConfigNames::ExternalStores ),
1004 ( $writeStores !==
false ) ? (array)$writeStores : [],
1005 $services->getDBLoadBalancer()->getLocalDomainID(),
1014 $services->getMainConfig()
1020 $mainConfig = $services->getMainConfig();
1022 $ld = WikiMap::getCurrentWikiDbDomain();
1023 $fallbackWikiId = WikiMap::getWikiIdFromDbDomain( $ld );
1027 $legacyDomainId = strlen( $ld->getTablePrefix() )
1028 ?
"{$ld->getDatabase()}-{$ld->getTablePrefix()}"
1029 : $ld->getDatabase();
1030 if ( $ld->getSchema() !==
null && $legacyDomainId !== $fallbackWikiId ) {
1032 "Legacy default 'domainId' is '$legacyDomainId' but wiki ID is '$fallbackWikiId'."
1036 $cache = $services->getLocalServerObjectCache();
1042 new ServiceOptions( FileBackendGroup::CONSTRUCTOR_OPTIONS, $mainConfig,
1043 [
'fallbackWikiId' => $fallbackWikiId ] ),
1044 $services->getReadOnlyMode(),
1046 $services->getMainWANObjectCache(),
1047 $services->getMimeAnalyzer(),
1048 $services->getLockManagerGroupFactory(),
1049 $services->getTempFSFileFactory(),
1050 $services->getTracer()
1056 $services->getMessageParser(),
1057 $services->getTitleFormatter(),
1058 $services->getHookContainer(),
1059 $services->getUserIdentityUtils(),
1060 $services->getLanguageFactory(),
1066 $nsInfo = $services->getNamespaceInfo();
1068 if ( $services->isServiceDisabled(
'DBLoadBalancer' ) ) {
1071 $services->getMainConfig()->get( MainConfigNames::DefaultUserOptions )
1074 $userOptionsLookup = $services->getUserOptionsLookup();
1076 return new GenderCache( $nsInfo, $userOptionsLookup );
1080 $mainConfig = $services->getMainConfig();
1083 $mainConfig->get( MainConfigNames::TmpDirectory ),
1084 static function ( $command ) {
1094 $services->getMainConfig()
1101 $services->getGrantsInfo(),
1103 $services->getLanguageFactory(),
1104 $services->getContentLanguage()
1122 $configHooks = $services->getBootstrapConfig()->get(
MainConfigNames::Hooks );
1124 $extRegistry = ExtensionRegistry::getInstance();
1125 $extHooks = $extRegistry->getAttribute(
'Hooks' );
1126 $extDeprecatedHooks = $extRegistry->getAttribute(
'DeprecatedHooks' );
1130 $services->getObjectFactory()
1135 $config = $services->getMainConfig();
1138 $services->getHookContainer(),
1139 $services->getTitleFactory(),
1140 $config->get( MainConfigNames::CdnReboundPurgeDelay ),
1141 $config->get( MainConfigNames::UseFileCache ),
1142 $config->get( MainConfigNames::CdnMaxAge )
1148 $services->getService(
'_Parsoid' ),
1150 $services->getParsoidPageConfigFactory(),
1151 $services->getContentHandlerFactory(),
1152 $services->getParsoidSiteConfig(),
1153 $services->getTitleFactory(),
1154 $services->getLanguageConverterPipeline(),
1155 $services->getLanguageFactory()
1163 $services->getMainConfig()
1166 $services->getTracer()
1174 $services->getMainConfig(),
1175 [
'wikiId' =>
WikiMap::getCurrentWikiId() ]
1177 $services->getContentLanguage(),
1178 $services->getMainWANObjectCache(),
1179 $services->getHookContainer(),
1180 $services->getConnectionProvider(),
1181 $services->getLanguageNameUtils()
1187 $services->getMainConfig(),
1189 $services->getPermissionManager(),
1190 $services->getUserNameUtils(),
1191 $services->getTempUserCreator(),
1192 $services->getUserFactory(),
1193 $services->getRestrictionStore(),
1194 $services->getDatabaseBlockStore(),
1195 $services->getReadOnlyMode(),
1196 $services->getSpecialPageFactory(),
1197 $services->getRepoGroup(),
1198 $services->getNamespaceInfo(),
1199 $services->getSkinFactory(),
1200 $services->getConnectionProvider(),
1201 $services->getUrlUtils(),
1202 $services->getShadowPageLoader(),
1208 $services->getObjectFactory(),
1214 return $services->getJobQueueGroupFactory()->makeJobQueueGroup();
1220 $services->getReadOnlyMode(),
1221 $services->getStatsFactory(),
1222 $services->getObjectCacheFactory()->getLocalClusterInstance(),
1223 $services->getGlobalIdGenerator()
1230 $services->getDBLoadBalancerFactory(),
1231 $services->getJobQueueGroup(),
1232 $services->getReadOnlyMode(),
1233 $services->getLinkCache(),
1234 $services->getStatsFactory(),
1252 $services->getObjectFactory(),
1253 static function () use ( $services ) {
1254 return $services->getContentLanguage();
1260 return $services->getDefaultOutputPipelineFactory()
1261 ->buildLanguageConverterPipeline();
1267 $services->getNamespaceInfo(),
1268 $services->getLocalisationCache(),
1269 $services->getLanguageNameUtils(),
1270 $services->getLanguageFallback(),
1271 $services->getLanguageConverterFactory(),
1272 $services->getHookContainer(),
1273 $services->getMainConfig(),
1274 $services->getLeximorphFactory()
1281 $services->getLocalisationCache(),
1282 $services->getLanguageNameUtils()
1288 $services->getLanguageNameUtils()
1296 $services->getMainConfig()
1298 $services->getHookContainer()
1306 $services->getMainConfig()
1314 $services->getLinkCache(),
1315 $services->getTitleFormatter(),
1316 $services->getContentLanguage(),
1317 $services->getGenderCache(),
1318 $services->getConnectionProvider(),
1319 $services->getLinksMigration(),
1320 $services->getTempUserDetailsLookup(),
1327 $dbLoadBalancer = $services->isServiceDisabled(
'DBLoadBalancer' )
1329 : $services->getDBLoadBalancer();
1331 $services->getTitleFormatter(),
1332 $services->getMainWANObjectCache(),
1333 $services->getNamespaceInfo(),
1336 $linkCache->setLogger( LoggerFactory::getInstance(
'LinkCache' ) );
1341 return $services->getLinkRendererFactory()->create();
1346 $services->getTitleFormatter(),
1347 $services->getLinkCache(),
1348 $services->getSpecialPageFactory(),
1349 $services->getHookContainer(),
1350 $services->getTempUserConfig(),
1351 $services->getTempUserDetailsLookup(),
1352 $services->getUserIdentityLookup(),
1353 $services->getUserNameUtils(),
1354 $services->getUrlUtils(),
1357 $services->getMainConfig()
1364 $services->getMainConfig(),
1365 $services->getLinkTargetLookup()
1371 $services->getConnectionProvider(),
1372 $services->getLocalServerObjectCache(),
1373 $services->getMainWANObjectCache()
1379 $services->getConnectionProvider(),
1383 $services->getMainConfig()->get(
MainConfigNames::VirtualDomainsMapping )
1390 $services->get(
'_Parsoid' ),
1391 $services->getParsoidPageConfigFactory(),
1392 $services->getTitleFactory(),
1394 $services->getMainConfig(),
1399 $conf = $services->getMainConfig()->get(
MainConfigNames::LocalisationCacheConf );
1401 $logger = LoggerFactory::getInstance(
'localisation' );
1403 $store = LocalisationCache::getStoreFromConf(
1404 $conf, $services->getMainConfig()->get( MainConfigNames::CacheDirectory ) );
1405 $logger->debug(
'LocalisationCache using store ' . get_class( $store ) );
1407 return new $conf[
'class'](
1409 LocalisationCache::CONSTRUCTOR_OPTIONS,
1414 'forceRecache' =>
false,
1415 'manualRecache' =>
false,
1418 $services->getMainConfig()
1422 [
static function () use ( $services ) {
1426 MessageBlobStore::clearGlobalCacheEntry( $services->getMainWANObjectCache() );
1428 $services->getLanguageNameUtils(),
1429 $services->getHookContainer()
1440 if ( defined(
'MW_PHPUNIT_TEST' ) ) {
1441 return new NullLockManager( [] );
1443 $lockManager = $services->getMainConfig()->get( MainConfigNames::DefaultLockManager );
1444 if ( !$lockManager ) {
1447 'domain' => WikiMap::getCurrentWikiDbDomain()->getId(),
1448 'dbProvider' => $services->getConnectionProvider(),
1449 'logger' => LoggerFactory::getInstance(
'lockManager' )
1453 return $services->getLockManagerGroupFactory()
1454 ->getLockManagerGroup( WikiMap::getCurrentWikiDbDomain()->getId() )
1455 ->get( $lockManager );
1460 WikiMap::getCurrentWikiDbDomain()->getId(),
1468 $services->getObjectFactory(),
1469 $services->getHookContainer(),
1471 $services->getContentLanguage(),
1472 $services->getCommentFormatter(),
1473 $services->getUserEditTracker()
1479 $services->getContentLanguage(),
1480 $services->getHookContainer()
1486 return $services->getConfigFactory()->makeConfig(
'main' );
1490 $mainConfig = $services->getMainConfig();
1492 $id = $mainConfig->
get( MainConfigNames::MainStash );
1493 $store = $services->getObjectCacheFactory()->getInstance( $id );
1494 $store->getLogger()->debug(
'MainObjectStash using store {class}', [
1495 'class' => get_class( $store )
1502 $mainConfig = $services->getMainConfig();
1504 $store = $services->getObjectCacheFactory()->getLocalClusterInstance();
1505 $logger = $store->getLogger();
1506 $logger->debug(
'MainWANObjectCache using store {class}', [
1507 'class' => get_class( $store )
1510 $wanParams = $mainConfig->get( MainConfigNames::WANObjectCache ) + [
1513 'tracer' => $services->getTracer(),
1517 $wanParams[
'stats'] = $services->getStatsFactory();
1519 $wanParams[
'asyncHandler'] = DeferredUpdates::addCallableUpdate( ... );
1523 $lbConf = $services->getDBLoadBalancerFactoryConfig()->getConfig();
1525 isset( $lbConf[
'servers'] ) &&
1526 count( $lbConf[
'servers'] ) === 1 &&
1527 !defined(
'MW_PHPUNIT_TEST' )
1529 $wanParams[
'pendingCallback'] =
static function () use ( $services ) {
1530 return $services->getDBLoadBalancer()->hasOrMadeRecentPrimaryChanges();
1538 $services->getLanguageFactory(),
1545 return $services->getService(
'_PageCommandFactory' );
1549 $mainConfig = $services->getMainConfig();
1550 $mainCache = $services->getObjectCacheFactory()
1551 ->getInstance( $mainConfig->get( MainConfigNames::MessageCacheType ) );
1552 $srvCache = $mainConfig->
get( MainConfigNames::UseLocalMessageCache )
1553 ? $services->getLocalServerObjectCache()
1556 $logger = LoggerFactory::getInstance(
'MessageCache' );
1557 $logger->debug(
'MessageCache using store {class}', [
1558 'class' => get_class( $mainCache )
1561 $options =
new ServiceOptions( MessageCache::CONSTRUCTOR_OPTIONS, $mainConfig );
1564 $services->getMainWANObjectCache(),
1567 $services->getContentLanguage(),
1568 $services->getLanguageConverterFactory(),
1571 $services->getLocalisationCache(),
1572 $services->getLanguageNameUtils(),
1573 $services->getLanguageFallback(),
1574 $services->getHookContainer(),
1575 $services->getMessageParser()
1585 $services->getParserFactory(),
1586 $services->getDefaultOutputPipeline(),
1587 $services->getLanguageFactory(),
1593 $mainConfig = $services->getMainConfig();
1595 $id = $mainConfig->
get( MainConfigNames::MicroStashType );
1596 $store = $services->getObjectCacheFactory()->getInstance( $id );
1598 $store->getLogger()->debug(
'MicroStash using store {class}', [
1599 'class' => get_class( $store )
1605 'MimeAnalyzer' =>
static function (
MediaWikiServices $services ): MimeAnalyzer {
1607 $mainConfig = $services->getMainConfig();
1608 $hookRunner =
new HookRunner( $services->getHookContainer() );
1610 'typeFile' => $mainConfig->get( MainConfigNames::MimeTypeFile ),
1611 'infoFile' => $mainConfig->get( MainConfigNames::MimeInfoFile ),
1612 'xmlTypes' => $mainConfig->get( MainConfigNames::XMLMimeTypes ),
1613 'guessCallback' =>
static function (
1614 $mimeAnalyzer, &$head, &$tail, $file, &$mime
1615 ) use ( $logger, $hookRunner ) {
1618 if ( $deja->isValid() ) {
1619 $logger->info(
"Detected $file as image/vnd.djvu\n" );
1620 $mime =
'image/vnd.djvu';
1625 $hookRunner->onMimeMagicGuessFromContent(
1626 $mimeAnalyzer, $head, $tail, $file, $mime );
1628 'extCallback' =>
static function ( $mimeAnalyzer, $ext, &$mime ) use ( $hookRunner ) {
1630 $hookRunner->onMimeMagicImproveFromExtension( $mimeAnalyzer, $ext, $mime );
1632 'initCallback' =>
static function ( $mimeAnalyzer ) use ( $hookRunner ) {
1634 $hookRunner->onMimeMagicInit( $mimeAnalyzer );
1639 if ( $params[
'infoFile'] ===
'includes/mime.info' ) {
1640 $params[
'infoFile'] = MimeAnalyzer::USE_INTERNAL;
1643 if ( $params[
'typeFile'] ===
'includes/mime.types' ) {
1644 $params[
'typeFile'] = MimeAnalyzer::USE_INTERNAL;
1647 $detectorCmd = $mainConfig->get( MainConfigNames::MimeDetectorCommand );
1648 if ( $detectorCmd ) {
1649 $factory = $services->getShellCommandFactory();
1650 $params[
'detectCallback'] =
static function ( $file ) use ( $detectorCmd, $factory ) {
1651 $result = $factory->create()
1653 ->unsafeParams( $detectorCmd )
1656 return $result->getStdout();
1660 return new MimeAnalyzer( $params );
1664 return $services->getService(
'_PageCommandFactory' );
1669 $services->getActorStoreFactory(),
1670 $services->getUserFactory(),
1678 $services->getHookContainer(),
1686 $services->getDBLoadBalancerFactory(),
1687 $services->getMainWANObjectCache(),
1696 $services->getMainConfig()
1698 $services->getEmailer(),
1699 $services->getLocalServerObjectCache(),
1700 $services->getUrlUtils()
1705 $handlers =
ExtensionRegistry::getInstance()->getAttribute(
'NotificationHandlers' );
1707 $handlers[] = NotificationService::RECENT_CHANGE_HANDLER_SPEC;
1710 LoggerFactory::getInstance(
'Notification' ),
1711 $services->getObjectFactory(),
1712 $services->getService(
'_NotificationMiddlewareChain' ),
1721 $services->getMainConfig()
1723 $services->getStatsFactory(),
1727 static function () use ( $services ) {
1728 return $services->getDBLoadBalancerFactory();
1730 WikiMap::getCurrentWikiDbDomain()->getId(),
1731 $services->getTracer()
1735 'ObjectFactory' =>
static function (
MediaWikiServices $services ): ObjectFactory {
1736 return new ObjectFactory( $services );
1743 $services->getConnectionProvider(),
1744 $services->getRevisionStoreFactory()->getRevisionStoreForImport(),
1745 $services->getSlotRoleRegistry(),
1746 $services->getWikiPageFactory(),
1747 $services->getPageUpdaterFactory(),
1748 $services->getUserFactory()
1754 $services->getObjectCacheFactory()->getLocalClusterInstance(),
1755 $services->getConnectionProvider(),
1757 $services->getStatsFactory(),
1758 $services->getUserEditTracker(),
1759 $services->getUserFactory(),
1760 $services->getWikiPageFactory(),
1761 $services->getJsonCodec(),
1762 $services->getLockManager(),
1763 $services->getHookContainer(),
1772 $services->getLinkBatchFactory(),
1773 $services->getConnectionProvider()
1780 $services->getRevisionLookup(),
1781 $services->getRevisionRenderer(),
1782 $services->getTitleFormatter(),
1783 $services->getPageStore(),
1784 $services->getParsoidOutputStash(),
1785 $services->getParserOutputAccess(),
1786 $services->getParsoidSiteConfig(),
1787 $services->getHtmlTransformFactory(),
1788 $services->getContentHandlerFactory(),
1789 $services->getLanguageFactory(),
1790 $services->getRedirectStore(),
1791 $services->getLanguageConverterFactory(),
1792 $services->getTitleFactory(),
1793 $services->getConnectionProvider(),
1794 $services->getChangeTagsStore(),
1795 $services->getStatsFactory(),
1796 $services->getShadowPageLoader(),
1801 return $services->getPageStoreFactory()->getPageStore();
1807 $services->getMainConfig()
1812 $services->getDBLoadBalancerFactory(),
1813 $services->getNamespaceInfo(),
1814 $services->getTitleParser(),
1815 $services->getLinkCache(),
1816 $services->getStatsFactory()
1820 'PageUpdaterFactory' =>
static function (
1824 $services->getMainObjectStash(),
1825 $services->getConnectionProvider(),
1828 $services->getMainConfig()
1833 $services->getRevisionStore(),
1834 $services->getRevisionRenderer(),
1835 $services->getSlotRoleRegistry(),
1836 $services->getParserCache(),
1837 $services->getJobQueueGroup(),
1838 $services->getContentLanguage(),
1839 $services->getDBLoadBalancerFactory(),
1840 $services->getContentHandlerFactory(),
1841 $services->getDomainEventDispatcher(),
1842 $services->getHookContainer(),
1844 LoggerFactory::getInstance(
'SavePage' ),
1846 PageUpdaterFactory::CONSTRUCTOR_OPTIONS,
1847 $services->getMainConfig()
1849 $services->getUserGroupManager(),
1850 $services->getTitleFormatter(),
1851 $services->getContentTransformer(),
1852 $services->getPageEditStash(),
1853 $services->getMainWANObjectCache(),
1854 $services->getWikiPageFactory(),
1855 $services->getChangeTagsStore(),
1856 $services->getChangeTagsStore()->getSoftwareTags()
1864 return $services->getParserFactory()->getMainInstance();
1868 return $services->getParserCacheFactory()
1873 $config = $services->getMainConfig();
1874 $cache = $services->getObjectCacheFactory()->getInstance( $config->get( MainConfigNames::ParserCacheType ) );
1875 $wanCache = $services->getMainWANObjectCache();
1877 $options =
new ServiceOptions( ParserCacheFactory::CONSTRUCTOR_OPTIONS, $config );
1882 $services->getHookContainer(),
1883 $services->getJsonCodec(),
1884 $services->getStatsFactory(),
1885 LoggerFactory::getInstance(
'ParserCache' ),
1887 $services->getTitleFactory(),
1888 $services->getWikiPageFactory(),
1889 $services->getGlobalIdGenerator()
1895 $services->getMainConfig()
1899 $services->getLanguageFactory(),
1900 $services->getLanguageConverterFactory(),
1906 $services->getMainConfig()
1911 $services->getParserCoreTagHooks(),
1912 $services->getMagicWordFactory(),
1913 $services->getContentLanguage(),
1914 $services->getUrlUtils(),
1915 $services->getSpecialPageFactory(),
1916 $services->getLinkRendererFactory(),
1917 $services->getNamespaceInfo(),
1918 LoggerFactory::getInstance(
'Parser' ),
1919 $services->getBadFileLookup(),
1920 $services->getRepoGroup(),
1921 $services->getLanguageFactory(),
1922 $services->getLanguageConverterFactory(),
1923 $services->getLanguageNameUtils(),
1924 $services->getHookContainer(),
1925 $services->getTidy(),
1926 $services->getMainWANObjectCache(),
1927 $services->getUserOptionsLookup(),
1928 $services->getUserFactory(),
1929 $services->getTitleFormatter(),
1930 $services->getHttpRequestFactory(),
1931 $services->getTrackingCategories(),
1932 $services->getSignatureValidatorFactory(),
1933 $services->getUserNameUtils()
1939 $services->getMainConfig(),
1940 $services->getDefaultOutputPipeline(),
1941 $services->getParserCacheFactory(),
1942 $services->getRevisionLookup(),
1943 $services->getRevisionRenderer(),
1944 $services->getStatsFactory(),
1945 $services->getChronologyProtector(),
1946 $services->getWikiPageFactory(),
1947 $services->getTitleFormatter(),
1948 $services->getTracer(),
1949 $services->getPoolCounterFactory()
1952 $poa->
setLogger( LoggerFactory::getInstance(
'ParserOutputAccess' ) );
1956 'ParsoidDataAccess' =>
static function (
MediaWikiServices $services ): DataAccess {
1957 $mainConfig = $services->getMainConfig();
1958 return new MWDataAccess(
1960 $services->getRepoGroup(),
1961 $services->getBadFileLookup(),
1962 $services->getHookContainer(),
1963 $services->getContentTransformer(),
1964 $services->getTrackingCategories(),
1965 $services->getReadOnlyMode(),
1966 $services->getParserFactory(),
1967 $services->getLinkBatchFactory(),
1968 $services->getLinkRenderer()
1975 $config = $services->getMainConfig()->get(
MainConfigNames::ParsoidCacheConfig );
1976 $backend = $config[
'StashType']
1977 ? $services->getObjectCacheFactory()->getInstance( $config[
'StashType'] )
1978 : $services->getMainObjectStash();
1981 $services->getJsonCodec(),
1983 $config[
'StashDuration']
1987 'ParsoidPageConfigFactory' =>
static function (
MediaWikiServices $services ): MWPageConfigFactory {
1988 return new MWPageConfigFactory(
1989 $services->getRevisionStore(),
1990 $services->getSlotRoleRegistry(),
1991 $services->getLanguageFactory()
1997 $services->getParsoidSiteConfig(),
1998 $services->getParsoidDataAccess(),
1999 $services->getParsoidPageConfigFactory(),
2000 $services->getLanguageConverterFactory(),
2001 $services->getNamespaceInfo(),
2002 $services->getTrackingCategories(),
2003 $services->getParserFactory(),
2007 'ParsoidSiteConfig' =>
static function (
MediaWikiServices $services ): MWSiteConfig {
2008 $mainConfig = $services->getMainConfig();
2009 $parsoidSettings = $mainConfig->get( MainConfigNames::ParsoidSettings );
2010 return new MWSiteConfig(
2013 $services->getObjectFactory(),
2014 $services->getContentLanguage(),
2015 $services->getStatsdDataFactory(),
2016 $services->getStatsFactory(),
2017 $services->getMagicWordFactory(),
2018 $services->getNamespaceInfo(),
2019 $services->getSpecialPageFactory(),
2020 $services->getInterwikiLookup(),
2021 $services->getUserOptionsLookup(),
2022 $services->getLanguageFactory(),
2023 $services->getLanguageConverterFactory(),
2024 $services->getLanguageNameUtils(),
2025 $services->getUrlUtils(),
2026 $services->getContentHandlerFactory(),
2027 ExtensionRegistry::getInstance()->getAttribute(
'ParsoidModules' ),
2030 $services->getParserFactory(),
2032 ExtensionRegistry::getInstance()->isLoaded(
'TimedMediaHandler' )
2037 $config = $services->getMainConfig();
2039 $config->get( MainConfigNames::PasswordConfig ),
2040 $config->get( MainConfigNames::PasswordDefault )
2048 LoggerFactory::getInstance(
'authentication' ),
2049 $services->getAuthManager(),
2050 $services->getHookContainer(),
2051 $services->getUserIdentityLookup(),
2052 $services->getUserFactory(),
2053 $services->getUserNameUtils(),
2054 $services->getUserOptionsLookup()
2061 $services->getConnectionProvider(),
2062 $services->getUserFactory(),
2063 $services->getHookContainer(),
2064 $services->getRevertedTagUpdateManager()
2068 'PerDbNameStatsdDataFactory' =>
static function (
MediaWikiServices $services ): StatsdDataFactoryInterface {
2069 $config = $services->getMainConfig();
2070 $wiki = $config->get( MainConfigNames::DBname );
2072 $services->getStatsdDataFactory(),
2082 $services->getSpecialPageFactory(),
2083 $services->getNamespaceInfo(),
2084 $services->getGroupPermissionsLookup(),
2085 $services->getUserGroupManager(),
2086 $services->getBlockManager(),
2087 $services->getFormatterFactory()->getBlockErrorFormatter(
2090 $services->getHookContainer(),
2091 $services->getUserIdentityLookup(),
2092 $services->getRedirectLookup(),
2093 $services->getRestrictionStore(),
2094 $services->getTitleFormatter(),
2095 $services->getTempUserConfig(),
2096 $services->getUserFactory(),
2097 $services->getActionFactory()
2103 $services->getMainConfig(),
2104 $services->getConnectionProvider(),
2105 $services->getObjectCacheFactory()->getLocalClusterInstance(),
2106 $services->getHttpRequestFactory(),
2112 $mainConfig = $services->getMainConfig();
2114 $mainConfig->get( MainConfigNames::PoolCounterConf ),
2115 $mainConfig->get( MainConfigNames::PoolCountClientConf ),
2116 LoggerFactory::getInstance(
'poolcounter' ),
2117 $services->getTracer()
2125 $services->getContentLanguage(),
2126 $services->getAuthManager(),
2127 $services->getLinkRendererFactory()->create(),
2128 $services->getNamespaceInfo(),
2129 $services->getPermissionManager(),
2130 $services->getLanguageConverterFactory()->getLanguageConverter(),
2131 $services->getLanguageNameUtils(),
2132 $services->getHookContainer(),
2133 $services->getUserOptionsManager(),
2134 $services->getLanguageConverterFactory(),
2135 $services->getParserFactory(),
2136 $services->getSkinFactory(),
2137 $services->getUserGroupManager(),
2138 $services->getSignatureValidatorFactory()
2140 $factory->setLogger( LoggerFactory::getInstance(
'preferences' ) );
2147 $services->getContentHandlerFactory(),
2148 $services->getWikiPageFactory(),
2149 $services->getRedirectLookup(),
2150 $services->getSpecialPageFactory(),
2151 $services->getContentTransformer(),
2152 $services->getHookContainer(),
2153 $services->getShadowPageLoader(),
2158 $mainConfig = $services->getMainConfig();
2160 $mainConfig->get( MainConfigNames::CdnServers ),
2161 $mainConfig->get( MainConfigNames::CdnServersNoPurge ),
2162 $services->getHookContainer(),
2163 $services->getLocalServerObjectCache()
2170 $services->getWRStatsFactory(),
2171 $services->getCentralIdLookupFactory()->getNonLocalLookup(),
2172 $services->getUserFactory(),
2173 $services->getUserGroupManager(),
2174 $services->getHookContainer()
2177 $rateLimiter->
setStats( $services->getStatsFactory() );
2179 return $rateLimiter;
2188 $services->getDBLoadBalancerFactory()
2193 return $services->getRecentChangeStore();
2197 return $services->getRecentChangeStore();
2202 $services->getHookContainer(),
2210 $services->getActorStoreFactory(),
2211 $services->getChangeTagsStore(),
2212 $services->getConnectionProvider(),
2213 $services->getCommentStore(),
2214 $services->getHookContainer(),
2215 $services->getJobQueueGroup(),
2216 $services->getPermissionManager(),
2217 $services->getRecentChangeRCFeedNotifier(),
2218 new ServiceOptions( RecentChangeStore::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ),
2219 $services->getTitleFormatter(),
2220 $services->getWikiPageFactory(),
2221 $services->getUserFactory(),
2222 $extRegistry->getAttribute(
'RecentChangeSources' )
2227 return $services->getRedirectStore();
2232 $services->getConnectionProvider(),
2233 $services->getPageStore(),
2234 $services->getTitleParser(),
2235 $services->getRepoGroup(),
2237 $services->getLinkWriteDuplicator()
2244 $services->getCentralIdLookupFactory(),
2245 $services->getConnectionProvider(),
2246 $services->getJobQueueGroupFactory(),
2247 $services->getMovePageFactory(),
2248 $services->getUserFactory(),
2249 $services->getUserNameUtils(),
2250 $services->getPermissionManager(),
2251 $services->getTitleFactory(),
2256 $config = $services->getMainConfig();
2258 $config->get( MainConfigNames::LocalFileRepo ),
2259 $config->get( MainConfigNames::ForeignFileRepos ),
2260 $services->getMainWANObjectCache(),
2261 $services->getMimeAnalyzer()
2266 $config = $services->getMainConfig();
2268 $maxage = $config->get( MainConfigNames::ResourceLoaderMaxage );
2271 LoggerFactory::getInstance(
'resourceloader' ),
2274 'loadScript' => $config->get( MainConfigNames::LoadScript ),
2275 'maxageVersioned' => $maxage[
'versioned'] ??
null,
2276 'maxageUnversioned' => $maxage[
'unversioned'] ??
null,
2280 $extRegistry = ExtensionRegistry::getInstance();
2282 $modules = $extRegistry->getAttribute(
'ResourceModules' )
2283 + $config->get( MainConfigNames::ResourceModules );
2284 $moduleSkinStyles = $extRegistry->getAttribute(
'ResourceModuleSkinStyles' )
2285 + $config->get( MainConfigNames::ResourceModuleSkinStyles );
2287 $rl->setModuleSkinStyles( $moduleSkinStyles );
2288 $rl->addSource( $config->get( MainConfigNames::ResourceLoaderSources ) );
2291 $rl->register( include MW_INSTALL_PATH .
'/resources/Resources.php' );
2292 $rl->register( $modules );
2293 $hookRunner = new \MediaWiki\ResourceLoader\HookRunner( $services->getHookContainer() );
2294 $hookRunner->onResourceLoaderRegisterModules( $rl );
2296 $msgPosterAttrib = $extRegistry->getAttribute(
'MessagePosterModule' );
2297 $rl->register(
'mediawiki.messagePoster', [
2298 'localBasePath' => MW_INSTALL_PATH,
2299 'debugRaw' =>
false,
2301 'resources/src/mediawiki.messagePoster/factory.js',
2302 'resources/src/mediawiki.messagePoster/MessagePoster.js',
2303 'resources/src/mediawiki.messagePoster/WikitextMessagePoster.js',
2304 ...$msgPosterAttrib[
'scripts'] ?? [],
2309 'mediawiki.ForeignApi',
2310 ...$msgPosterAttrib[
'dependencies'] ?? [],
2314 if ( $config->get( MainConfigNames::EnableJavaScriptTest ) ===
true ) {
2315 $rl->registerTestModules();
2321 'RestrictedUserGroupCheckerFactory' =>
2324 $services->getRestrictedUserGroupConfigReader(),
2325 $services->getUserRequirementsConditionChecker()
2329 'RestrictedUserGroupConfigReader' =>
2335 $services->getUserRequirementsConditionValidator()
2344 $services->getMainWANObjectCache(),
2345 $services->getDBLoadBalancerFactory(),
2346 $services->getLinkCache(),
2347 $services->getLinksMigration(),
2348 $services->getCommentStore(),
2349 $services->getHookContainer(),
2350 $services->getPageStore()
2356 $services->getMainObjectStash(),
2357 $services->getConnectionProvider(),
2360 $services->getMainConfig()
2366 $services->getJobQueueGroup()
2371 return $services->getRevisionStore();
2375 return $services->getRevisionStore();
2380 $services->getDBLoadBalancer(),
2381 $services->getSlotRoleRegistry(),
2382 $services->getContentRenderer()
2385 $renderer->
setLogger( LoggerFactory::getInstance(
'SaveParse' ) );
2390 return $services->getRevisionStoreFactory()->getRevisionStore();
2395 $services->getDBLoadBalancerFactory(),
2396 $services->getBlobStoreFactory(),
2397 $services->getNameTableStoreFactory(),
2398 $services->getSlotRoleRegistry(),
2399 $services->getMainWANObjectCache(),
2400 $services->getLocalServerObjectCache(),
2401 $services->getCommentStore(),
2402 $services->getActorStoreFactory(),
2404 $services->getContentHandlerFactory(),
2405 $services->getPageStoreFactory(),
2406 $services->getTitleFactory(),
2407 $services->getHookContainer(),
2408 $services->getRecentChangeLookup()
2413 return $services->get(
'_PageCommandFactory' );
2418 $services->getCommentParserFactory(),
2419 $services->getCommentStore()
2425 $services->getConnectionProvider(),
2426 $services->getExtensionRegistry(),
2427 $services->getGlobalIdGenerator(),
2435 $services->getMainConfig()
2437 $services->getContentLanguage(),
2438 $services->getHookContainer(),
2440 $services->getUserOptionsLookup()
2446 $services->getSearchEngineConfig(),
2447 $services->getHookContainer(),
2448 $services->getConnectionProvider()
2454 $services->getRepoGroup(),
2455 $services->getHookContainer()
2461 $services->getMainConfig(),
2463 $services->getCentralIdLookup(),
2464 $services->getHookContainer(),
2465 $services->getObjectFactory(),
2466 $services->getProxyLookup(),
2467 $services->getUrlUtils(),
2468 $services->getUserNameUtils(),
2469 $services->getSessionStore()
2474 $objectCacheFactory = $services->getObjectCacheFactory();
2475 $mainConfig = $services->getMainConfig();
2476 $logger = LoggerFactory::getInstance(
'session' );
2478 $anonCacheType = $mainConfig->get( MainConfigNames::AnonSessionCacheType );
2479 $authCacheType = $mainConfig->get( MainConfigNames::SessionCacheType );
2481 if ( $anonCacheType !==
false ) {
2483 $objectCacheFactory->getInstance( $anonCacheType ),
2484 $objectCacheFactory->getInstance( $authCacheType ),
2486 $services->getStatsFactory()
2491 $objectCacheFactory->getInstance( $authCacheType ),
2493 $services->getStatsFactory()
2499 $services->getObjectFactory(),
2506 $urls = $services->getMainConfig()->get(
MainConfigNames::ShellboxUrls );
2509 $services->getHttpRequestFactory(),
2511 $services->getMainConfig()->get( MainConfigNames::ShellboxSecretKey )
2516 $config = $services->getMainConfig();
2519 'time' => $config->get( MainConfigNames::MaxShellTime ),
2520 'walltime' => $config->get( MainConfigNames::MaxShellWallClockTime ),
2521 'memory' => $config->get( MainConfigNames::MaxShellMemory ),
2522 'filesize' => $config->get( MainConfigNames::MaxShellFileSize ),
2524 $cgroup = $config->get( MainConfigNames::ShellCgroup );
2525 $restrictionMethod = $config->get( MainConfigNames::ShellRestrictionMethod );
2527 $factory =
new CommandFactory( $services->getShellboxClientFactory(),
2528 $limits, $cgroup, $restrictionMethod );
2529 $factory->setLogger( LoggerFactory::getInstance(
'exec' ) );
2530 $factory->logStderr();
2539 $services->getMainConfig()
2542 static function () use ( $services ) {
2543 return $services->getParserFactory();
2545 static function () use ( $services ) {
2546 return $services->getLintErrorChecker();
2548 $services->getSpecialPageFactory(),
2549 $services->getTitleFactory(),
2557 return $services->getSiteStore();
2561 $rawSiteStore = new
DBSiteStore( $services->getConnectionProvider() );
2565 $cache = $services->getLocalServerObjectCache();
2572 $services->getObjectFactory(),
2576 $names = $services->getMainConfig()->get( MainConfigNames::ValidSkinNames );
2578 foreach ( $names as $name => $skin ) {
2579 if ( is_array( $skin ) ) {
2581 $displayName = $skin[
'displayname'] ?? $name;
2582 $skippable = $skin[
'skippable'] ??
false;
2584 $displayName = $skin;
2588 'class' =>
"Skin$skin"
2591 $factory->register( $name, $displayName, $spec, $skippable );
2595 $factory->register(
'fallback',
'Fallback', [
2596 'class' => SkinFallback::class,
2599 'name' =>
'fallback',
2601 'styles' => [
'mediawiki.skinning.interface',
'mediawiki.codex.messagebox.styles' ],
2602 'templateDirectory' => dirname( __DIR__ ) .
'/resources/templates/skins/fallback',
2607 $factory->register(
'apioutput',
'ApiOutput', [
2608 'class' => SkinApi::class,
2611 'name' =>
'apioutput',
2613 'styles' => [
'mediawiki.skinning.interface' ],
2614 'templateDirectory' => dirname( __DIR__ ) .
'/resources/templates/skins/apioutput',
2619 $factory->register(
'authentication-popup',
'Authentication popup', [
2620 'class' => SkinAuthenticationPopup::class,
2623 'name' =>
'authentication-popup',
2626 'mediawiki.skinning.interface',
2627 'mediawiki.special.userlogin.authentication-popup',
2629 'bodyClasses' => [
'mw-authentication-popup' ],
2630 'responsive' =>
true,
2635 'templateDirectory' => dirname( __DIR__ ) .
'/resources/templates/skins/authentication-popup',
2640 $factory->register(
'json',
'SkinJSON', [
2641 'class' => SkinApi::class,
2648 'templateDirectory' => dirname( __DIR__ ) .
'/resources/templates/skins/apioutput',
2658 $services->getSlotRoleStore()
2661 $config = $services->getMainConfig();
2662 $contentHandlerFactory = $services->getContentHandlerFactory();
2663 $hookContainer = $services->getHookContainer();
2664 $titleFactory = $services->getTitleFactory();
2667 static function () use ( $config, $contentHandlerFactory, $hookContainer, $titleFactory ) {
2669 $config->get( MainConfigNames::NamespaceContentModels ),
2670 $contentHandlerFactory,
2681 return $services->getNameTableStoreFactory()->getSlotRoles();
2687 (array)$services->getMainConfig()->get(
MainConfigNames::SummarySpamRegex )
2695 $services->getContentLanguage(),
2696 $services->getObjectFactory(),
2697 $services->getTitleFactory(),
2698 $services->getHookContainer(),
2699 $services->getStatsFactory(),
2708 $config = $services->getMainConfig();
2709 $format = OutputFormats::getFormatFromString(
2710 $config->get( MainConfigNames::StatsFormat ) ??
'null'
2713 $emitter = OutputFormats::getNewEmitter(
2714 $config->get( MainConfigNames::StatsPrefix ),
2716 OutputFormats::getNewFormatter( $format ),
2717 $config->get( MainConfigNames::StatsTarget )
2719 return new StatsFactory( $cache, $emitter, LoggerFactory::getInstance(
'Stats' ) );
2722 'TalkPageNotificationManager' =>
static function (
2729 $services->getConnectionProvider(),
2730 $services->getReadOnlyMode(),
2731 $services->getRevisionLookup(),
2732 $services->getHookContainer(),
2733 $services->getUserFactory()
2743 $services->getMainConfig()->get(
MainConfigNames::AutoCreateTempUser )
2749 $services->getTempUserConfig(),
2750 $services->getObjectFactory(),
2751 $services->getUserFactory(),
2752 $services->getAuthManager(),
2753 $services->getCentralIdLookup(),
2757 $services->getMainConfig()->get(
MainConfigNames::TempAccountCreationThrottle ),
2759 'type' =>
'tempacctcreate',
2760 'cache' => $services->getObjectCacheFactory()->getLocalClusterInstance(),
2764 $services->getMainConfig()->get(
MainConfigNames::TempAccountNameAcquisitionThrottle ),
2766 'type' =>
'tempacctnameacquisition',
2767 'cache' => $services->getObjectCacheFactory()->getLocalClusterInstance(),
2775 $services->getTempUserConfig(),
2776 $services->getUserRegistrationLookup()
2782 $services->getPermissionManager(),
2783 $services->getRestrictionStore(),
2784 $services->getUserOptionsLookup(),
2791 RemexDriver::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
2802 $services->getContentLanguage(),
2803 $services->getGenderCache(),
2804 $services->getNamespaceInfo()
2810 $services->getContentLanguage(),
2811 $services->getLanguageConverterFactory(),
2812 $services->getHookContainer(),
2813 $services->getWikiPageFactory(),
2814 $services->getRepoGroup(),
2815 $services->getTitleFactory()
2821 $services->getContentLanguage(),
2822 $services->getInterwikiLookup(),
2823 $services->getNamespaceInfo(),
2830 $otelConfig = $services->getMainConfig()->get( MainConfigNames::OpenTelemetryConfig );
2831 if ( $otelConfig ===
null || (
wfIsCLI() && !defined(
'MW_PHPUNIT_TEST' ) ) ) {
2832 if ( $services->getMainConfig()->get( MainConfigNames::GenerateReqIDFormat ) ===
'uuid4' ) {
2833 Telemetry::getInstance()->overrideRequestId( $services->getGlobalIdGenerator()->newUUIDv4() );
2838 $tracerState = TracerState::getInstance();
2840 $services->getService(
'_TracerHTTPClient' ),
2842 LoggerFactory::getInstance(
'tracing' ),
2843 $otelConfig[
'endpoint'],
2844 $otelConfig[
'serviceName'],
2861 $services->getMainConfig()
2863 $services->getExtensionRegistry(),
2864 $services->getNamespaceInfo(),
2865 $services->getTitleParser(),
2871 return $services->getService(
'_UserBlockCommandFactory' );
2875 return $services->getService(
'_PageCommandFactory' );
2889 $services->getMainConfig()
2891 $services->getMimeAnalyzer(),
2897 $config = $services->getMainConfig();
2899 UrlUtils::SERVER => $config->get( MainConfigNames::Server ),
2900 UrlUtils::CANONICAL_SERVER => $config->get( MainConfigNames::CanonicalServer ),
2901 UrlUtils::INTERNAL_SERVER => $config->get( MainConfigNames::InternalServer ),
2902 UrlUtils::FALLBACK_PROTOCOL => RequestContext::getMain()->getRequest()->getProtocol(),
2903 UrlUtils::HTTPS_PORT => $config->get( MainConfigNames::HttpsPort ),
2904 UrlUtils::VALID_PROTOCOLS => $config->get( MainConfigNames::UrlProtocols ),
2911 $services->getConnectionProvider(),
2912 $services->getLinkBatchFactory()
2918 $services->getActorStoreFactory(),
2919 $services->getConnectionProvider(),
2920 $services->getJobQueueGroup(),
2921 $services->getMainWANObjectCache()
2928 UserFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
2930 $services->getDBLoadBalancerFactory(),
2931 $services->getUserNameUtils(),
2932 $services->getTempUserConfig()
2938 $services->getUserGroupManagerFactory(),
2939 $services->getUserNameUtils(),
2940 $services->getUserFactory(),
2941 $services->getRestrictedUserGroupCheckerFactory(),
2942 new
HookRunner( $services->getHookContainer() ),
2946 $services->getTempUserConfig(),
2947 $services->getConnectionProvider(),
2948 $services->getPageStoreFactory(),
2953 return $services->getUserGroupManagerFactory()->getUserGroupManager();
2961 $services->getReadOnlyMode(),
2962 $services->getDBLoadBalancerFactory(),
2963 $services->getHookContainer(),
2964 $services->getJobQueueGroupFactory(),
2965 $services->getTempUserConfig(),
2966 $services->getUserFactory(),
2967 $services->getUserRequirementsConditionCheckerFactory(),
2968 $services->getRestrictedUserGroupConfigReader(),
2969 [ static function (
UserIdentity $user ) use ( $services ) {
2970 if ( $user->getWikiId() === UserIdentity::LOCAL ) {
2971 $services->getPermissionManager()->invalidateUsersRightsCache( $user );
2973 $services->getUserFactory()->invalidateCache( $user );
2979 return $services->getActorStoreFactory()->getUserIdentityLookup();
2984 $services->getTempUserConfig()
2990 $services->getHookContainer(),
2991 $services->getTempUserConfig(),
2992 $services->getSpecialPageFactory(),
2994 $services->getTempUserDetailsLookup(),
2995 $services->getUserIdentityLookup(),
2996 $services->getUserNameUtils()
3002 $services->getConnectionProvider(),
3003 $services->getUserNameUtils(),
3004 $services->getHideUserUtils()
3012 UserNameUtils::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
3014 $services->getContentLanguage(),
3015 LoggerFactory::getInstance(
'UserNameUtils' ),
3016 $services->getTitleParser(),
3017 $messageFormatterFactory->getTextFormatter(
3018 $services->getContentLanguageCode()->toString()
3020 $services->getHookContainer(),
3021 $services->getTempUserConfig()
3026 return $services->getUserOptionsManager();
3032 $services->get(
'_DefaultOptionsLookup' ),
3033 $services->getLanguageConverterFactory(),
3034 $services->getConnectionProvider(),
3036 $services->getHookContainer(),
3037 $services->getUserFactory(),
3038 $services->getUserNameUtils(),
3039 $services->getObjectFactory(),
3047 $services->getObjectFactory()
3049 if ( !$lookup->isRegistered( LocalUserRegistrationProvider::TYPE ) ) {
3050 throw new ConfigException(
'UserRegistrationLookup: Local provider is required' );
3055 'UserRequirementsConditionChecker' =>
static function (
3059 return $services->getUserRequirementsConditionCheckerFactory()
3060 ->getUserRequirementsConditionChecker( $services->getUserGroupManager() );
3063 'UserRequirementsConditionCheckerFactory' =>
static function (
3069 UserRequirementsConditionCheckerFactory::CONSTRUCTOR_OPTIONS,
3070 $services->getMainConfig()
3072 $services->getGroupPermissionsLookup(),
3073 $services->getHookContainer(),
3074 $services->getUserEditTracker(),
3075 $services->getUserRegistrationLookup(),
3076 $services->getUserFactory(),
3077 RequestContext::getMain(),
3078 $services->getUserRequirementsConditionValidator(),
3090 $services->getConnectionProvider(),
3091 $services->getWatchedItemStore(),
3093 $services->getMainConfig()->get(
MainConfigNames::MaxExecutionTimeForExpensiveQueries )
3100 $services->getMainConfig() ),
3101 $services->getDBLoadBalancerFactory(),
3102 $services->getJobQueueGroup(),
3103 $services->getMainObjectStash(),
3105 $services->getReadOnlyMode(),
3106 $services->getNamespaceInfo(),
3107 $services->getRevisionLookup(),
3108 $services->getLinkBatchFactory(),
3109 $services->getWatchlistLabelStore()
3112 if ( $services->getMainConfig()->get( MainConfigNames::ReadOnlyWatchedItemStore ) ) {
3121 $services->getConnectionProvider(),
3123 $services->getMainConfig()
3134 $services->getHookContainer(),
3135 $services->getReadOnlyMode(),
3136 $services->getRevisionLookup(),
3137 $services->getTalkPageNotificationManager(),
3138 $services->getWatchedItemStore(),
3139 $services->getWatchlistLabelStore(),
3140 $services->getUserFactory(),
3141 $services->getNamespaceInfo(),
3142 $services->getWikiPageFactory()
3148 $services->getHookContainer(),
3149 $services->getRevisionStore(),
3150 $services->getTitleParser(),
3151 $services->getCommentStore()
3157 $services->getMainConfig(),
3158 $services->getHookContainer(),
3159 $services->getContentLanguage(),
3160 $services->getNamespaceInfo(),
3161 $services->getTitleFactory(),
3162 $services->getWikiPageFactory(),
3163 $services->getWikiRevisionUploadImporter(),
3164 $services->getContentHandlerFactory(),
3165 $services->getSlotRoleRegistry()
3171 $services->getTitleFactory(),
3172 new
HookRunner( $services->getHookContainer() ),
3173 $services->getDBLoadBalancerFactory()
3177 'WikiRevisionOldRevisionImporterNoUpdates' =>
static function (
3183 $services->getConnectionProvider(),
3184 $services->getRevisionStoreFactory()->getRevisionStoreForImport(),
3185 $services->getSlotRoleRegistry(),
3186 $services->getWikiPageFactory(),
3187 $services->getPageUpdaterFactory(),
3188 $services->getUserFactory()
3198 '_ConditionalDefaultsLookup' =>
static function (
3205 $services->getUserRegistrationLookup(),
3206 $services->getUserIdentityUtils(),
3208 static function () use ( $services ) {
3209 return $services->getUserGroupManager();
3217 $services->getContentLanguageCode(),
3218 $services->getHookContainer(),
3219 $services->getNamespaceInfo(),
3220 $services->get(
'_ConditionalDefaultsLookup' ),
3221 $services->getUserIdentityLookup(),
3222 $services->getUserNameUtils()
3228 $services->getObjectFactory()
3236 $dispatcher->registerSubscriber( SearchEventIngress::OBJECT_SPEC );
3237 $dispatcher->registerSubscriber( LanguageEventIngress::OBJECT_SPEC );
3239 $extensionRegistry = $services->getExtensionRegistry();
3240 $dispatcher->registerSubscriber( $extensionRegistry );
3253 $services->getMainConfig()
3257 $services->getHookContainer(),
3260 $services->getReadOnlyMode(),
3263 $services->getSpamChecker(),
3270 $services->getRateLimiter(),
3273 $services->getRedirectLookup(),
3276 $services->getConnectionProvider(),
3277 $services->getLogFormatterFactory(),
3280 $services->getUserFactory(),
3286 $services->getObjectFactory(),
3293 $services->getMainConfig(),
3294 $services->getDBLoadBalancerFactory(),
3295 $services->getNamespaceInfo(),
3296 $services->getWatchedItemStore(),
3297 $services->getRepoGroup(),
3298 $services->getReadOnlyMode(),
3299 $services->getContentHandlerFactory(),
3300 $services->getRevisionStoreFactory(),
3301 $services->getSpamChecker(),
3302 $services->getTitleFormatter(),
3303 $services->getHookContainer(),
3304 $services->getDomainEventDispatcher(),
3305 $services->getWikiPageFactory(),
3306 $services->getUserFactory(),
3307 $services->getActorMigration(),
3308 $services->getActorNormalization(),
3309 $services->getTitleFactory(),
3310 $services->getUserEditTracker(),
3311 $services->getCollationFactory(),
3312 $services->getJobQueueGroup(),
3313 $services->getCommentStore(),
3314 $services->getMainObjectStash(),
3315 WikiMap::getCurrentWikiDbDomain()->getId(),
3317 $services->getBacklinkCacheFactory(),
3319 $services->getPageUpdaterFactory(),
3320 $services->getMessageFormatterFactory()->getTextFormatter(
3321 $services->getContentLanguageCode()->toString()
3323 $services->getArchivedRevisionLookup(),
3324 $services->getRestrictionStore(),
3325 $services->getLinkTargetLookup(),
3326 $services->getRedirectStore(),
3327 $services->getLogFormatterFactory(),
3328 $services->getLinkWriteDuplicator()
3335 $services->getContentHandlerFactory(),
3336 $services->getService(
'_EditConstraintFactory' ),
3337 $services->getConnectionProvider(),
3338 $services->getContentLanguage(),
3339 $services->getContentTransformer(),
3341 $services->getService(
'_PageEditingHelper' ),
3342 $services->getRateLimiter(),
3343 $services->getRevisionStore(),
3344 $services->getShadowPageLoader(),
3345 $services->getTitleFormatter(),
3346 $services->getUserOptionsLookup(),
3347 $services->getWatchlistManager(),
3348 $services->getWatchedItemStore(),
3349 $services->getWikiPageFactory(),
3356 $services->getContentHandlerFactory(),
3357 $services->getParserFactory(),
3358 $services->getRevisionStore(),
3368 $services->getParsoidSiteConfig(),
3369 $services->getParsoidDataAccess()
3378 return $services->getBlobStoreFactory()->newSqlBlobStore();
3381 '_TracerHTTPClient' =>
static function (): ClientInterface {
3382 return new Client( [
'http_errors' => false ] );
3388 $services->getHookContainer(),
3389 $services->getBlockPermissionCheckerFactory(),
3390 $services->getBlockTargetFactory(),
3391 $services->getDatabaseBlockStore(),
3392 $services->getBlockRestrictionStore(),
3393 $services->getUserFactory(),
3394 $services->getUserEditTracker(),
3396 $services->getTitleFactory(),
3397 $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();}, 'ChangeTagsFormatter'=> static function(MediaWikiServices $services):ChangeTagsFormatter { return new ChangeTagsFormatter(new ServiceOptions(ChangeTagsFormatter::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getChangeTagsStore(), $services->getMainWANObjectCache(), $services->getLanguageFactory(),);}, '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()));}, 'ChangeToolsFactory'=> static function(MediaWikiServices $services):ChangeToolsFactory { return new ChangeToolsFactory(new HookRunner( $services->getHookContainer()), $services->getLinkRenderer(),);}, '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;}, 'CodeHighlighter'=> static function(MediaWikiServices $services):CodeHighlighter { return new CodeHighlighter($services->getObjectFactory(), ExtensionRegistry::getInstance() ->getAttribute( 'CodeHighlightProviders'),);}, '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($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(), LoggerFactory::getInstance( 'confirmemail'));}, '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 { $lbConf=$services->getDBLoadBalancerFactoryConfig() ->getConfig();$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]);} $lbFactoryConfigBuilder=new MWLBFactory(new ConfiguredReadOnlyMode($mainConfig->get(MainConfigNames::ReadOnly), $mainConfig->get(MainConfigNames::ReadOnlyFile)), $services->getChronologyProtector(), $srvCache, $wanCache, $services->getCriticalSectionProvider(), $services->getStatsFactory(), $services->getTracer(), RequestContext::getMain() ->getRequest() ->getIP());$lbConf=$lbFactoryConfigBuilder->applyServices( $lbConf);$class=$lbFactoryConfigBuilder->getLBFactoryClass( $lbConf);$instance=new $class( $lbConf);$lbFactoryConfigBuilder->setDomainAliases( $instance);return $instance;}, 'DBLoadBalancerFactoryConfig'=> static function(MediaWikiServices $services):MWLBConfig { return new MWLBConfig(new ServiceOptions(MWLBConfig::APPLY_DEFAULT_CONFIG_OPTIONS, $services->getMainConfig()), ExtensionRegistry::getInstance() ->getAttribute( 'DatabaseVirtualDomains'), $services->getMainConfig() ->get(MainConfigNames::LBFactoryConf));}, 'DefaultOutputPipeline'=> static function(MediaWikiServices $services):OutputTransformPipeline { return $services->getDefaultOutputPipelineFactory() ->buildDefaultOutputPipeline();}, 'DefaultOutputPipelineFactory'=> static function(MediaWikiServices $services):DefaultOutputPipelineFactory { return new DefaultOutputPipelineFactory(new ServiceOptions(DefaultOutputPipelineFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getMainConfig(), LoggerFactory::getInstance( 'Parser'), $services->getObjectFactory());}, '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');}, 'EmailConfirmationBannerHandler'=> static function(MediaWikiServices $services):EmailConfirmationBannerHandler { return new EmailConfirmationBannerHandler(new ServiceOptions(EmailConfirmationBannerHandler::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, '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->getTracer());}, '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->getLanguageConverterPipeline(), $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(), $services->getShadowPageLoader(),);}, '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->getObjectCacheFactory() ->getLocalClusterInstance(), $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();});}, 'LanguageConverterPipeline'=> static function(MediaWikiServices $services):OutputTransformPipeline { return $services->getDefaultOutputPipelineFactory() ->buildLanguageConverterPipeline();}, '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(), $services->getLeximorphFactory());}, '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(), $services->getUrlUtils(), new ServiceOptions(LinkRendererFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, '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());}, 'LinkWriteDuplicator'=> static function(MediaWikiServices $services):WriteDuplicator { return new WriteDuplicator($services->getConnectionProvider(), ExternalLinksTable::VIRTUAL_DOMAIN, array_key_exists(ExternalLinksTable::VIRTUAL_DOMAIN, $services->getMainConfig() ->get(MainConfigNames::VirtualDomainsMapping)));}, '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);}, 'LockManager'=> static function(MediaWikiServices $services):LockManager { if(defined( 'MW_PHPUNIT_TEST')) { return new NullLockManager([]);} $lockManager=$services->getMainConfig() ->get(MainConfigNames::DefaultLockManager);if(! $lockManager) { return new DatabaseLockManager(['domain'=> WikiMap::getCurrentWikiDbDomain() ->getId(), 'dbProvider'=> $services->getConnectionProvider(), 'logger'=> LoggerFactory::getInstance( 'lockManager')]);} return $services->getLockManagerGroupFactory() ->getLockManagerGroup(WikiMap::getCurrentWikiDbDomain() ->getId()) ->get( $lockManager);}, '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(...);} $lbConf=$services->getDBLoadBalancerFactoryConfig() ->getConfig();if(isset( $lbConf['servers']) &&count( $lbConf['servers'])===1 &&!defined( 'MW_PHPUNIT_TEST')) { $wanParams['pendingCallback']=static function() use( $services) { return $services->getDBLoadBalancer() ->hasOrMadeRecentPrimaryChanges();};} return new WANObjectCache( $wanParams);}, 'MediaHandlerFactory'=> static function(MediaWikiServices $services):MediaHandlerFactory { return new MediaHandlerFactory($services->getLanguageFactory(), 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'));}, 'NotificationEmailSender'=> static function(MediaWikiServices $services):NotificationEmailSender { return new NotificationEmailSender(new ServiceOptions(NotificationEmailSender::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getEmailer(), $services->getLocalServerObjectCache(), $services->getUrlUtils());}, '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->getLockManager(), $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(), $services->getShadowPageLoader(),);}, '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());}, 'ParserCoreTagHooks'=> static function(MediaWikiServices $services):ParserCoreTagHooks { $options=new ServiceOptions(ParserCoreTagHooks::CONSTRUCTOR_OPTIONS, $services->getMainConfig());return new ParserCoreTagHooks($options, $services->getLanguageFactory(), $services->getLanguageConverterFactory(),);}, 'ParserFactory'=> static function(MediaWikiServices $services):ParserFactory { $options=new ServiceOptions(Parser::CONSTRUCTOR_OPTIONS, $services->getMainConfig());return new ParserFactory($options, $services->getParserCoreTagHooks(), $services->getMagicWordFactory(), $services->getContentLanguage(), $services->getUrlUtils(), $services->getSpecialPageFactory(), $services->getLinkRendererFactory(), $services->getNamespaceInfo(), LoggerFactory::getInstance( 'Parser'), $services->getBadFileLookup(), $services->getRepoGroup(), $services->getLanguageFactory(), $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->getMainConfig(), $services->getDefaultOutputPipeline(), $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->getNamespaceInfo(), $services->getTrackingCategories(), $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(), $services->getShadowPageLoader(),);}, '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'), $services->getLinkWriteDuplicator());}, 'RenameUserFactory'=> static function(MediaWikiServices $services):RenameUserFactory { return new RenameUserFactory(new ServiceOptions(RenameUserFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getCentralIdLookupFactory(), $services->getConnectionProvider(), $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;}, 'RestrictedUserGroupCheckerFactory'=> static function(MediaWikiServices $services):RestrictedUserGroupCheckerFactory { return new RestrictedUserGroupCheckerFactory($services->getRestrictedUserGroupConfigReader(), $services->getUserRequirementsConditionChecker());}, 'RestrictedUserGroupConfigReader'=> static function(MediaWikiServices $services):RestrictedUserGroupConfigReader { return new RestrictedUserGroupConfigReader(new ServiceOptions(RestrictedUserGroupConfigReader::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getUserRequirementsConditionValidator());}, '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());}, 'SBOMGenerator'=> static function(MediaWikiServices $services):SBOMGenerator { return new SBOMGenerator($services->getConnectionProvider(), $services->getExtensionRegistry(), $services->getGlobalIdGenerator(),);}, '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());}, 'ShadowPageLoader'=> static function(MediaWikiServices $services):ShadowPageLoader { return new ShadowPageLoader($services->getObjectFactory(), ShadowPageLoader::CORE_SPECS, ExtensionRegistry::getInstance() ->getAttribute( 'ShadowPageProviders'));}, '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'] ?? false;} else { $displayName=$skin;$skippable=false;$spec=['name'=> $name, 'class'=> "Skin$skin"];} $factory->register( $name, $displayName, $spec, $skippable);} $factory->register( 'fallback', 'Fallback', ['class'=> SkinFallback::class, 'args'=>[['name'=> 'fallback', 'menus'=>[], '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', 'menus'=>[], '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', 'menus'=>[], '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', 'menus'=>[], '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());}, 'TextboxBuilder'=> static function(MediaWikiServices $services):TextboxBuilder { return new TextboxBuilder($services->getPermissionManager(), $services->getRestrictionStore(), $services->getUserOptionsLookup(),);}, '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'))) { if( $services->getMainConfig() ->get(MainConfigNames::GenerateReqIDFormat)==='uuid4') { Telemetry::getInstance() ->overrideRequestId( $services->getGlobalIdGenerator() ->newUUIDv4());} 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->getExtensionRegistry(), $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->getActorStoreFactory(), $services->getConnectionProvider(), $services->getJobQueueGroup(), $services->getMainWANObjectCache());}, '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->getRestrictedUserGroupCheckerFactory(), new HookRunner( $services->getHookContainer()), new ServiceOptions(UserGroupAssignmentService::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getTempUserConfig(), $services->getConnectionProvider(), $services->getPageStoreFactory(),);}, '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->getUserFactory(), $services->getUserRequirementsConditionCheckerFactory(), $services->getRestrictedUserGroupConfigReader(), [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(UserRequirementsConditionCheckerFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getGroupPermissionsLookup(), $services->getHookContainer(), $services->getUserEditTracker(), $services->getUserRegistrationLookup(), $services->getUserFactory(), RequestContext::getMain(), $services->getUserRequirementsConditionValidator(),);}, 'UserRequirementsConditionValidator'=> static function():UserRequirementsConditionValidator { return new UserRequirementsConditionValidator(LoggerFactory::getInstance( 'UserGroupManager'),);}, '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->getWatchlistLabelStore(), $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 ServiceOptions(ConditionalDefaultsLookup::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getUserRegistrationLookup(), $services->getUserIdentityUtils(), LoggerFactory::getInstance( 'preferences'), 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()), $services->getHookContainer(), $services->getReadOnlyMode(), $services->getSpamChecker(), LoggerFactory::getProvider() ->getLogger( 'SpamRegex'), $services->getRateLimiter(), $services->getRedirectLookup(), $services->getConnectionProvider(), $services->getLogFormatterFactory(), $services->getUserFactory(),);}, '_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(), $services->getLinkWriteDuplicator());}, '_PageEditFactory'=> static function(MediaWikiServices $services):PageEditFactory { return new PageEditFactory(new ServiceOptions(PageEditFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getContentHandlerFactory(), $services->getService( '_EditConstraintFactory'), $services->getConnectionProvider(), $services->getContentLanguage(), $services->getContentTransformer(), LoggerFactory::getInstance( 'EditConflict'), $services->getService( '_PageEditingHelper'), $services->getRateLimiter(), $services->getRevisionStore(), $services->getShadowPageLoader(), $services->getTitleFormatter(), $services->getUserOptionsLookup(), $services->getWatchlistManager(), $services->getWatchedItemStore(), $services->getWikiPageFactory(),);}, '_PageEditingHelper'=> static function(MediaWikiServices $services):PageEditingHelper { return new PageEditingHelper(new ServiceOptions(PageEditingHelper::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getContentHandlerFactory(), $services->getParserFactory(), $services->getRevisionStore(),);}, '_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());}]
if(!defined('MW_SETUP_CALLBACK'))
Service for syntax highlighting.
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 helper methods used by EditPage and a future editing backend (T157658).
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.
Helps EditPage build textboxes.
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.
A service which loads shadow content, which is content that is displayed on a nonexistent page with a...
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.
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.