Add support for loconfig.local.json
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"
}
}
}
```
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
node_modules
|
node_modules
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
loconfig.*.json
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import loconfig from '../../loconfig.json';
|
import loconfig from '../utils/config.js';
|
||||||
import glob from '../utils/glob.js';
|
import glob from '../utils/glob.js';
|
||||||
import message from '../utils/message.js';
|
import message from '../utils/message.js';
|
||||||
import notification from '../utils/notification.js';
|
import notification from '../utils/notification.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import loconfig from '../../loconfig.json';
|
import loconfig from '../utils/config.js';
|
||||||
import message from '../utils/message.js';
|
import message from '../utils/message.js';
|
||||||
import notification from '../utils/notification.js';
|
import notification from '../utils/notification.js';
|
||||||
import resolve from '../utils/template.js';
|
import resolve from '../utils/template.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import loconfig from '../../loconfig.json';
|
import loconfig from '../utils/config.js';
|
||||||
import message from '../utils/message.js';
|
import message from '../utils/message.js';
|
||||||
import notification from '../utils/notification.js';
|
import notification from '../utils/notification.js';
|
||||||
import postcss, { pluginsMap as postcssPluginsMap } from '../utils/postcss.js';
|
import postcss, { pluginsMap as postcssPluginsMap } from '../utils/postcss.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import loconfig from '../../loconfig.json';
|
import loconfig from '../utils/config.js';
|
||||||
import message from '../utils/message.js';
|
import message from '../utils/message.js';
|
||||||
import notification from '../utils/notification.js';
|
import notification from '../utils/notification.js';
|
||||||
import resolve from '../utils/template.js';
|
import resolve from '../utils/template.js';
|
||||||
|
|||||||
64
build/utils/config.js
Normal file
64
build/utils/config.js
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
* @file Provides simple user configuration options.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import loconfig from '../../loconfig.json';
|
||||||
|
|
||||||
|
let usrconfig;
|
||||||
|
|
||||||
|
try {
|
||||||
|
usrconfig = await import('../../loconfig.local.json');
|
||||||
|
usrconfig = usrconfig.default;
|
||||||
|
|
||||||
|
merge(loconfig, usrconfig);
|
||||||
|
} catch (err) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
export default loconfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new object with all nested object properties
|
||||||
|
* merged into it recursively.
|
||||||
|
*
|
||||||
|
* @param {object} target - The target object.
|
||||||
|
* @param {object[]} ...sources - The source object(s).
|
||||||
|
* @throws {TypeError} If the target and source are the same.
|
||||||
|
* @return {object} Returns the `target` object.
|
||||||
|
*/
|
||||||
|
export function merge(target, ...sources) {
|
||||||
|
for (const source of sources) {
|
||||||
|
if (target === source) {
|
||||||
|
throw new TypeError(
|
||||||
|
'Cannot merge, target and source are the same'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key in source) {
|
||||||
|
if (source[key] != null) {
|
||||||
|
if (isObjectLike(source[key]) && isObjectLike(target[key])) {
|
||||||
|
merge(target[key], source[key]);
|
||||||
|
continue;
|
||||||
|
} else if (Array.isArray(source[key]) && Array.isArray(target[key])) {
|
||||||
|
target[key] = target[key].concat(source[key]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
target[key] = source[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether the passed value is an `Object`.
|
||||||
|
*
|
||||||
|
* @param {*} value - The value to be checked.
|
||||||
|
* @return {boolean} Returns `true` if the value is an `Object`,
|
||||||
|
* otherwise `false`.
|
||||||
|
*/
|
||||||
|
function isObjectLike(value) {
|
||||||
|
return (value != null && typeof value === 'object');
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
* @file Provides simple template tags.
|
* @file Provides simple template tags.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import loconfig from '../../loconfig.json';
|
import loconfig from './config.js';
|
||||||
|
|
||||||
const templateData = flatten({
|
const templateData = flatten({
|
||||||
paths: loconfig.paths
|
paths: loconfig.paths
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import loconfig from '../loconfig.json';
|
|
||||||
import concatFiles, { developmentConcatFilesArgs } from './tasks/concats.js';
|
import concatFiles, { developmentConcatFilesArgs } from './tasks/concats.js';
|
||||||
import compileScripts, { developmentScriptsArgs } from './tasks/scripts.js';
|
import compileScripts, { developmentScriptsArgs } from './tasks/scripts.js';
|
||||||
import compileStyles, { developmentStylesArgs } from './tasks/styles.js' ;
|
import compileStyles, { developmentStylesArgs } from './tasks/styles.js' ;
|
||||||
import compileSVGs, { developmentSVGsArgs } from './tasks/svgs.js';
|
import compileSVGs, { developmentSVGsArgs } from './tasks/svgs.js';
|
||||||
|
import loconfig, { merge } from './utils/config.js';
|
||||||
import message from './utils/message.js';
|
import message from './utils/message.js';
|
||||||
import notification from './utils/notification.js';
|
import notification from './utils/notification.js';
|
||||||
import resolve from './utils/template.js';
|
import resolve from './utils/template.js';
|
||||||
@@ -124,9 +124,7 @@ function createServerOptions({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.assign(config, resolve(options));
|
return merge(config, resolve(options));
|
||||||
|
|
||||||
return config;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user