# Jetpack Asset Management

A package containing functionality to improve loading of assets (scripts, etc).

Includes manipulation of paths, enqueuing async scripts, and DNS resource hinting.

## Usage

* `::get_file_url_for_environment( $min_path, $non_min_path, $package_path )` -- This is similar to `plugins_url()`, but chooses between `$min_path` and `$non_min_path` based on the constant `SCRIPT_DEBUG`.
  The filter `jetpack_get_file_for_environment` may be used to control the returned URL.
* `::add_resource_hint( $urls, $type )` -- Adds domains (string or array) to the WordPress' resource hinting. Accepts type of dns-prefetch (default), preconnect, prefetch, or prerender.
* `::normalize_path( $path )` -- Normalize `.` and `..` components in a path or URL.
* `::register_script( $handle, $path, $relative_to, $options )` -- Register a Webpack bundled script and styles using data produced by `@wordpress/dependency-extraction-webpack-plugin`.
  This replaces reading the `.asset.php` file and then making calls to `wp_register_script()`, `wp_register_style()` (with a potentially varying filename based on `is_rtl()`), and `wp_set_script_translations()`. See the inline documentation for details.
* `::enqueue_script( $handle )` -- Enqueue a script and style previously registered with `::register_script()`.
* `::alias_textdomains_from_file( $file )` -- Use data recorded by [automattic/jetpack-composer-plugin](https://packagist.org/packages/automattic/jetpack-composer-plugin) to enable use of translations for shared Composer libraries.
* `::alias_textdomains( $from, $to, $totype, $ver )` -- Manually add a textdomain alias, if for some reason `::alias_textdomains_from_file()` is insufficient.

The Assets package also provides a `wp-jp-i18n-loader` script to support Webpack lazy-loaded bundles using [@automattic/i18n-loader-webpack-plugin](https://www.npmjs.com/package/@automattic/i18n-loader-webpack-plugin). No initialization is required, other than calling `::alias_textdomains_from_file()` or `::alias_textdomains()` if said bundles are coming from shared Composer libraries.

## Testing

```bash
$ composer run phpunit
```
