File: /home/nciq25gegoxa/public_html/wp-content/plugins/filebird/includes/Utils/Vite.php
<?php
namespace FileBird\Utils;
class Vite {
const HOST = 'https://localhost:3000/';
const SCRIPT_HANDLE = 'module/filebird/vite';
const CLIENT_SCRIPT_HANDLE = 'module/filebird/vite-client';
public static function base_path() {
return NJFB_PLUGIN_URL . 'assets/dist/';
}
/**
* Enqueues the Vite script and its dependencies.
*
* @param string $script The name of the script to enqueue.
* @return void
*/
public static function enqueue_vite( string $script = 'main.tsx' ) {
self::enqueue_preload( $script );
// self::css_tag( $script );
$script_handle = self::register( $script );
add_filter(
'script_loader_tag',
function ( $tag, $handle, $src ) {
if ( strpos( $handle, 'module/filebird/' ) !== false ) {
$str = "type='module'";
$str .= NJFB_DEVELOPMENT ? ' crossorigin' : '';
$tag = '<script ' . $str . ' src="' . esc_url( $src ) . '" id="' . esc_attr( $handle ) . '-js"></script>';
}
return $tag;
},
10,
3
);
add_filter(
'script_loader_src',
function( $src, $handle ) {
if ( strpos( $handle, self::SCRIPT_HANDLE ) !== false && strpos( $src, '?ver=' ) ) {
return remove_query_arg( 'ver', $src );
}
return $src;
},
10,
2
);
return $script_handle;
}
public static function enqueue_preload( $script ) {
add_action(
'admin_head',
function() use ( $script ) {
if ( NJFB_DEVELOPMENT ) {
echo '<script type="module">
import RefreshRuntime from "' . esc_url( self::HOST ) . '@react-refresh"
RefreshRuntime.injectIntoGlobalHook(window)
window.$RefreshReg$ = () => {}
window.$RefreshSig$ = () => (type) => type
window.__vite_plugin_react_preamble_installed__ = true
</script>';
} else {
foreach ( self::imports_urls( $script ) as $url ) {
echo ( '<link rel="modulepreload" href="' . esc_url( $url ) . '">' );
}
}
}
);
}
public static function register( $entry ) {
$url = NJFB_DEVELOPMENT ? self::HOST . $entry : self::asset_url( $entry );
if ( ! $url ) {
return '';
}
// wp_enqueue_script( self::CLIENT_SCRIPT_HANDLE, self::HOST . '@vite/client', array(), NJFB_VERSION, false );
wp_enqueue_script( "module/filebird/$entry", $url, false, true, NJFB_DEVELOPMENT ? true : false );
return "module/filebird/$entry";
}
private static function css_tag( string $entry ): string {
// not needed on dev, it's inject by Vite
if ( NJFB_DEVELOPMENT ) {
return '';
}
$tags = '';
foreach ( self::css_urls( $entry ) as $key => $url ) {
wp_enqueue_style( "filebird/$key", $url, array(), NJFB_VERSION );
}
return $tags;
}
// Helpers to locate files
private static function get_manifest(): array {
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
$content = file_get_contents( NJFB_PLUGIN_PATH . 'assets/dist/manifest.json' );
return json_decode( $content, true );
}
private static function asset_url( string $entry ): string {
$manifest = self::get_manifest();
return isset( $manifest[ $entry ] )
? self::base_path() . $manifest[ $entry ]['file']
: self::base_path() . $entry;
}
private static function get_public_url_base() {
return NJFB_DEVELOPMENT ? '/dist/' : self::base_path();
}
private static function imports_urls( string $entry ): array {
$urls = array();
$manifest = self::get_manifest();
if ( ! empty( $manifest[ $entry ]['imports'] ) ) {
foreach ( $manifest[ $entry ]['imports'] as $imports ) {
$urls[] = self::get_public_url_base() . $manifest[ $imports ]['file'];
}
}
return $urls;
}
private static function css_urls( string $entry ): array {
$urls = array();
$manifest = self::get_manifest();
if ( ! empty( $manifest[ $entry ]['css'] ) ) {
foreach ( $manifest[ $entry ]['css'] as $file ) {
$urls[ "filebird_entry_$file" ] = self::get_public_url_base() . $file;
}
}
if ( ! empty( $manifest[ $entry ]['imports'] ) ) {
foreach ( $manifest[ $entry ]['imports'] as $imports ) {
if ( ! empty( $manifest[ $imports ]['css'] ) ) {
foreach ( $manifest[ $imports ]['css'] as $css ) {
$urls[ "filebird_imports_$css" ] = self::get_public_url_base() . $css;
}
}
}
}
return $urls;
}
}