UNPKG

@roots/bud-api

Version:

bud.js core module

88 lines (87 loc) 2.61 kB
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); }); };