@roots/bud-api
Version:
bud.js core module
61 lines (60 loc) • 2.09 kB
JavaScript
import { Bud } from '@roots/bud-framework';
import { BudError } from '@roots/bud-support/errors';
export const minimize = function (value = true) {
/**
* Handle {@link Bud} instances (when used as a callback for something like bud.tap, bud.promise, etc)
*/
if (value instanceof Bud) {
;
[this.minimizers, this.minimizers.js, this.minimizers.css].map(minimizer => minimizer.enable(true));
return this;
}
/**
* Handle true, false
*/
if (typeof value == `boolean`) {
;
[this.minimizers, this.minimizers.js, this.minimizers.css].map(minimizer => minimizer.enable(value));
return this;
}
/**
* For everything else, enable minimization and reset any state by disabling all minimizers
*/
this.minimizers.enable(true);
this.minimizers.js.enable(false);
this.minimizers.css.enable(false);
/**
* Handle string (`css`, `js`)
*/
if (typeof value == `string`) {
if (!(value in this.minimizers)) {
throwUndefinedMinimizer();
}
this.minimizers[value].enable(true);
return this;
}
/**
* Handle array of strings ([`css`, `js`])
*/
if (Array.isArray(value)) {
if (value.some(prop => !(prop in this.minimizers))) {
throwUndefinedMinimizer();
}
value.map(prop => {
this.minimizers[prop].enable(true);
});
return this;
}
throw BudError.normalize(`Error in bud.minimize`, {
details: `Invalid argument passed to bud.minimize. Value must be a boolean, string, or array of strings.`,
docs: new URL(`https://bud.js.org/reference/bud.minimize`),
thrownBy: ` /bud-api/methods/minimize`,
});
};
const throwUndefinedMinimizer = () => {
throw BudError.normalize(`Error in bud.minimize`, {
details: `Invalid argument passed to bud.minimize. Minimizer does not exist.`,
docs: new URL(`https://bud.js.org/reference/bud.minimize`),
thrownBy: ` /bud-api/methods/minimize`,
});
};