By default, svg-mixer only uses the SVG's file name as its ID. If any SVG files are stored in sub-directories, that information is ignored in the assembled spritesheet. This is problematic since context is lost (the sub-directory's name) and risks duplicate symbol IDs.
This commit introduces a new NPM dependency, `common-path` to resolve the longest common base path, and uses a dependency of `svg-mixer` named `url-slug` in order to prefix the directory name.
Add support for "increment" format to increment an integer version number with support for "increment:semver" to increment the build or patch of a SemVer version number.
Usage:
```json
"versions": [
{
"format": "increment",
"key": "version",
"outfile": "assets.json"
}
]
```
```jsonc
{
"version": 16 // → 17
}
```
```json
"versions": [
{
"format": "increment:semver",
"key": "version",
"outfile": "assets.json"
}
]
```
```jsonc
{
"version": "1.0.0" // → 1.0.1
}
```
```jsonc
{
"version": "1.0.0+1" // → 1.0.0+2
}
```
Documented API inconsistencies between supported glob libraries (expected/supported parameters and return types).
Fixed API inconsistencies between 'tiny-glob', 'globby', and 'glob', to match 'fast-glob'.
Fixed broken support for preset options for 'tiny-glob'.
Separated generic functions from build helpers.
Changed:
- Moved 'utils/*.js' to 'helpers/*.js'
- From 'utils/config.js':
- Moved function `merge` to 'utils/index.js'.
- Moved function `isObjectLike` to 'utils/index.js'.
- From 'utils/template.js':
- Moved function `flatten` to 'utils/index.js'.
- Moved function `escapeRegExp` to 'utils/index.js'.
- From 'tasks/styles.js':
- Moved function `createPostCSSProcessor` to 'helpers/postcss.js' as `createProcessor`.
- Replaced function `Object.assign` with `merge` for task options parsing in all tasks.
Added support for replacing a string in a file using a regular expression.
The routine uses Node's Readline and Stream modules.
The `outfile` will be renamed with a `~` suffix, then stream each line, writing to a new `outfile`.
On success, the backup file (with `~`) is deleted.
On error, any new file is deleted, then the backup file is renamed without a `~` suffix.
Usage:
```json
"versions": [
{
"format": "timestamp",
"key": "regexp:(?<=\bdefine\('ASSETS_VERSION', )[^\)]+(?=\);)",
"outfile": "src/bootstrap.php"
}
]
```
```php
<?php
define( 'ASSETS_VERSION', 1665071717350 );
```
Added:
- Support for writing multiple times to the same file.
- Support for random hexadecimal value instead of timestamp.
Usage:
```json
"versions": [
{
"format": "timestamp",
"key": "now",
"outfile": "./assets.json"
},
{
"format": "hex:8",
"key": "hex",
"outfile": "./assets.json"
}
]
```
```json
{
"now": 1665071717350,
"hex": "6ef54181c4ba"
}
```
A task to allow one to define zero or more JSON files and keys to create or update with the current timestamp.
By default, the boilerplate will maintain a './assets.json' file which should be imported by the Web framework and applied to compiled assets.
If a 'loconfig.local.json' file is present (ignored by git), its settings will be merged with those in 'loconfig.json'. Useful for customizing localhost development (see example below).
Added:
- Utility 'config.js' to prepare build settings.
- Function 'merge()' for recursively merging objects and concatenating arrays.
Example:
```json
{
"paths": {
"url": "yourlocal.dev"
},
"server": {
"open": true,
"https": {
"key": "~/.config/valet/Certificates/{% paths.url %}.key",
"cert": "~/.config/valet/Certificates/{% paths.url %}.crt"
}
}
}
```
Added:
- Function `resolve()` to process any template tags (in a string) in objects and arrays.
Changed:
- Renamed function `template()` to `resolveValue()`.
- Replaced default export `resolveValue()` with new function `resolve()`.
Added:
- Condition to process includes with glob if it's available.
Changed:
- Utility 'glob.js' to not throw an error if a glob function is unavailable.
Added:
- Argument `concatOptions` to `concatFiles()` function to customize concatenation.
- Option 'removeDuplicates' to `concatOptions` to remove duplicate paths from the array of globbed paths. Defaults to `true`.
The 'removeDuplicates' is useful for customizing the order of files to concatenate, in which globbing will usually sort paths alphabetically.
This option is convenient when the installed glob library does not support removing duplicates on their own (feature supported in 'fast-glob' and 'glob').
Example:
```
/assets/scripts/vendors/a.js
/assets/scripts/vendors/b.js
/assets/scripts/vendors/c.js
/assets/scripts/vendors/d.js
```
```json
"concats": [
{
"includes": [
"{% paths.scripts.src %}/vendors/c.js",
"{% paths.scripts.src %}/vendors/*.js"
],
"outfile": "{% paths.scripts.dest %}/vendors.js"
}
]
```
If ever the basename from the outfile or outdir is an insufficient description.
Example:
```json
"concats": [
{
"label": "third-parties",
"includes": [
"{% paths.scripts.src %}/vendors/*.js"
],
"outfile": "{% paths.scripts.dest %}/vendors.js"
}
]
```
Added routine to convert `paths.views` into an array.
Supports a single path as a string, a map of paths, or a list of paths:
```json
"views": "./views/boilerplate/template"
```
```json
"views": {
"src": "./views/boilerplate/template"
}
```
```json
"views": [
"./views/boilerplate/template"
]
```