function ( MediaWikiServices $services ): SiteConfig { $parsoidSettings = $services->getMainConfig()->get( 'ParsoidSettings' ); if ( !empty( $parsoidSettings['debugApi'] ) ) { return ApiSiteConfig::fromSettings( $parsoidSettings ); } return new MWSiteConfig(); }, 'ParsoidPageConfigFactory' => function ( MediaWikiServices $services ): PageConfigFactory { return new PageConfigFactory( $services->getRevisionStore(), $services->getParser(), $services->get( '_ParsoidParserOptions' ), $services->getSlotRoleRegistry() ); }, 'ParsoidDataAccess' => function ( MediaWikiServices $services ): DataAccess { $parsoidSettings = $services->getMainConfig()->get( 'ParsoidSettings' ); if ( !empty( $parsoidSettings['debugApi'] ) ) { return ApiDataAccess::fromSettings( $parsoidSettings ); } return new MWDataAccess( $services->getRevisionStore(), $services->getParser(), $services->get( '_ParsoidParserOptions' ) ); }, '_ParsoidParserOptions' => function ( MediaWikiServices $services ): ParserOptions { global $wgUser; // Pass a dummy user: Parsoid's parses don't use the user context right now // and all user state is expected to be introduced as a post-parse transformation // It is unclear if wikitext supports this model. But, given that Parsoid/JS // operated in this fashion, for now, Parsoid/PHP will as well with the caveat below. // ParserOptions used to default to $wgUser if we passed in null here (and new User() // if $wgUser was null as it would be in most background job parsing contexts). return ParserOptions::newCanonical( $wgUser ?? new User() ); }, ];