Sha256: 911035a470f1f122d8e85c256db984e682ec7b4782c8c56a1335e4f666e52446

Contents?: true

Size: 1.8 KB

Versions: 15

Compression:

Stored size: 1.8 KB

Contents

const isProduction: boolean = process.env.NODE_ENV === 'production';
const prefix: string = 'Invariant failed';

/**
 * `invariant` is used to [assert](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions) that the `condition` is [truthy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy).
 *
 * 💥 `invariant` will `throw` an `Error` if the `condition` is [falsey](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy)
 *
 * 🤏 `message`s are not displayed in production environments to help keep bundles small
 *
 * @example
 *
 * ```ts
 * const value: Person | null = { name: 'Alex' };
 * invariant(value, 'Expected value to be a person');
 * // type of `value`` has been narrowed to `Person`
 * ```
 */
export default function invariant(
  condition: any,
  // Not providing an inline default argument for message as the result is smaller
  /**
   * Can provide a string, or a function that returns a string for cases where
   * the message takes a fair amount of effort to compute
   */
  message?: string | (() => string),
): asserts condition {
  if (condition) {
    return;
  }
  // Condition not passed

  // In production we strip the message but still throw
  if (isProduction) {
    throw new Error(prefix);
  }

  // When not in production we allow the message to pass through
  // *This block will be removed in production builds*

  const provided: string | undefined = typeof message === 'function' ? message() : message;

  // Options:
  // 1. message provided: `${prefix}: ${provided}`
  // 2. message not provided: prefix
  const value: string = provided ? `${prefix}: ${provided}` : prefix;
  throw new Error(value);
}

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
immosquare-cleaner-0.1.52 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.51 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.50 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.49 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.48 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.47 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.46 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.45 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.44 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.43 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.42 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.41 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.40 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.39 node_modules/tiny-invariant/src/tiny-invariant.ts
immosquare-cleaner-0.1.38 node_modules/tiny-invariant/src/tiny-invariant.ts