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