All files / src/apis/shared environment.ts

100% Statements 7/7
100% Branches 0/0
100% Functions 2/2
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 406x                                       6x   6x 24x 4x       6x     6x                
import { getOwnProperty } from "./get";
import type { ReadonlyRecord } from "./types";
 
type Environment<
  K extends string = string,
  X extends string | undefined = string | undefined
> = ReadonlyRecord<K, X>;
 
/**
 * Создаёт копию `process.env` ограниченную по ключам
 *
 * @template T
 * @param {ReadonlyRecord<string, string | string>} baseEnvironment
 * @param {...T} keys
 * @return {Object} (ReadonlyRecord<T[number], string | undefined>)
 */
function loadEnvironment<T extends string[]>(
  baseEnvironment: Environment,
  ...keys: T
): Environment<T[number], string> {
  const environment = Object.create(null) as Environment<string, string>;
 
  for (const key of keys) {
    Object.defineProperty(environment, key, {
      get: () => getOwnProperty(baseEnvironment, key)
    });
  }
 
  return environment;
}
 
export const environment = loadEnvironment(
  /* istanbul ignore next */
  typeof process === "object" && process?.env ? process.env : {},
  "QIWI_TOKEN",
  "QIWI_WALLET",
  "QIWI_SECRET_KEY",
  "QIWI_PUBLIC_KEY"
);