@roots/bud-api
Version:
bud.js core module
88 lines (87 loc) • 2.61 kB
JavaScript
import isArray from '@roots/bud-support/isArray';
import isFunction from '@roots/bud-support/isFunction';
import isObject from '@roots/bud-support/isObject';
import isUndefined from '@roots/bud-support/isUndefined';
export const fallbackUrl = new URL(`http://0.0.0.0/`);
export const maybeEnable = (bud, input) => {
bud.hooks.on(`dev.middleware.enabled`, input === false ? disableMiddleware : enableMiddleware);
};
/**
* Assign port
*
* @param bud
* @param port
*/
export const assignPort = (bud, port) => {
bud.hooks.on(`dev.proxyUrl`, (url = fallbackUrl) => {
url.port = `${port}`;
return url;
});
};
/**
* Assign a URL or a string to `proxy.options.target`
*
* @param bud
* @param maybeURL
*/
export const assignUrl = (bud, maybeURL) => {
bud.hooks.on(`dev.proxyUrl`, maybeURL instanceof URL ? maybeURL : new URL(maybeURL));
};
/**
* Assign a callback function `proxy.options`
*
* @param bud - bud instance
* @param optionsFn - options callback
*/
export const assignOptionsCallback = (bud, value) => {
bud.hooks.on(`dev.middleware.proxy.options`, value);
};
/**
* Assign replacements
*
* @param bud - bud instance
* @param replacements - replacement tuples
*/
export const assignReplacements = (bud, replacements) => {
bud.hooks.on(`dev.middleware.proxy.replacements`, replacements);
};
/**
* Enables proxy middleware
*
* @remarks
* Callback for the `dev.middleware.enabled` hook
* If proxy middleware is already enabled it will be removed before it is re-added
*/
export const enableMiddleware = (middleware = []) => {
return [...disableMiddleware(middleware), `cookie`, `proxy`];
};
/**
* Disable proxy middleware
*
* @remarks
* Callback for the `dev.middleware.enabled` hook
* If proxy middleware is already enabled it will be removed before it is re-added
*/
export const disableMiddleware = (middleware = []) => {
return middleware?.filter(middleware => middleware !== `proxy` && middleware !== `cookie`);
};
export const isUrl = (obj) => obj instanceof URL;
export const isFalse = (obj) => obj === false;
export const isOptionsObject = (obj) => isObject(obj) &&
!(obj instanceof URL) &&
!isArray(obj) &&
!isFunction(obj) &&
!isUndefined(obj);
/**
* Map options object
*
* @param bud
* @param options
*/
export const assignOptions = (bud, options) => {
Object.entries(options).map(([key, value]) => {
if (key === `replacements`)
return bud.hooks.on(`dev.middleware.proxy.replacements`, options[key]);
bud.hooks.on(`dev.middleware.proxy.options.${key}`, value);
});
};