All files / utils devOrProd.ts

100% Statements 7/7
90.91% Branches 10/11
100% Functions 3/3
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44                      10x 10x                       23x   23x                     23x 10x 10x        
function makeDevOrProd(getNodeEnv: () => 'dev' | 'prod') {
  /**
   * 开发环境和生产环境返回不同的值或调用不同的函数。
   *
   * @param devValue 开发环境返回的值或调用的函数
   * @param prodValue 生产环境返回的值或调用的函数
   */
  function devOrProd<R, T extends R = R, F extends () => R = () => R>(
    devValue: T | F,
    prodValue: T | F,
  ): R {
    const nodeEnv = getNodeEnv()
    return nodeEnv === 'prod'
      ? typeof prodValue === 'function'
        ? (prodValue as any)()
        : prodValue
      : typeof devValue === 'function'
      ? (devValue as any)()
      : devValue
  }
 
  /**
   * 构造 devOrProd。
   */
  devOrProd.make = makeDevOrProd
 
  return devOrProd
}
 
/**
 * 开发环境和生产环境返回不同的值或调用不同的函数。
 *
 * `process.env.NODE_ENV` 为空值、`production`、`prod` 时被认为是生产环境,否则是开发环境。
 *
 * @param devValue 开发环境返回的值或调用的函数
 * @param prodValue 生产环境返回的值或调用的函数
 */
export const devOrProd = makeDevOrProd(() => {
  const nodeEnv = process.env.NODE_ENV
  return !nodeEnv || nodeEnv === 'production' || nodeEnv === 'prod'
    ? 'prod'
    : 'dev'
})