Overview
Architecture and design patterns for WPZylos Assets.
Architecture
The Assets package provides a WordPress-native asset management layer with modern build tool (Vite) support.
AssetsServiceProvider
+-- registers AssetManager (singleton)
+-- registers ViteAssetResolver (singleton)
+-- hooks wp_enqueue_scripts → enqueueAll('front')
+-- hooks admin_enqueue_scripts → enqueueAll('admin', $hook)
AssetManager
+-- script(handle) → ScriptAsset
+-- style(handle) → StyleAsset
ViteAssetResolver
+-- isDev() → checks for HMR dev server
+-- resolve(entry) → reads manifest.json
+-- enqueueEntry() → auto handles dev/prod
Design Patterns
Auto-Prefixed Handles
All asset handles are automatically prefixed using ContextInterface::assetHandle(). This prevents handle collisions between plugins:
// Internal handle: "myplugin-admin-app"
$assets->script('admin-app');
Location-Based Filtering
Assets declare where they should load (front, admin, or both), and the enqueueAll() method filters automatically:
$assets->script('admin-only')->admin();
$assets->style('front-only')->front();
Vite Hot Module Replacement
In development, ViteAssetResolver detects the running Vite dev server (via hot file or HTTP probe) and loads assets directly from the dev server with HMR enabled.
In production, it reads the Vite manifest.json to resolve hashed filenames, CSS chunks, and module preloads.
Class Hierarchy
Asset (abstract)
+-- ScriptAsset — wp_register_script / wp_enqueue_script
+-- StyleAsset — wp_register_style / wp_enqueue_style
AssetManager — Factory and registry
ViteAssetResolver — Vite build integration
AssetsServiceProvider — DI container registration