diff options
author | Florian Dold <florian@dold.me> | 2024-02-21 13:01:23 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2024-02-21 13:01:23 +0100 |
commit | 612b85c18fc17af412d08e075e1fddaa67aa7bf0 (patch) | |
tree | 2209cb052c94f70145d33271b7711e39728ad72b /packages/taler-util | |
parent | 06635c195816121ed7d90cf7bd3834850b674564 (diff) | |
download | wallet-core-612b85c18fc17af412d08e075e1fddaa67aa7bf0.tar.xz |
move helpers to util
Diffstat (limited to 'packages/taler-util')
-rw-r--r-- | packages/taler-util/src/index.ts | 1 | ||||
-rw-r--r-- | packages/taler-util/src/invariants.ts | 59 |
2 files changed, 60 insertions, 0 deletions
diff --git a/packages/taler-util/src/index.ts b/packages/taler-util/src/index.ts index ec5b85d29..d9ab60910 100644 --- a/packages/taler-util/src/index.ts +++ b/packages/taler-util/src/index.ts @@ -29,6 +29,7 @@ export * from "./http-client/types.js"; export * from "./http-status-codes.js"; export * from "./i18n.js"; export * from "./iban.js"; +export * from "./invariants.js"; export * from "./kdf.js"; export * from "./libeufin-api-types.js"; export * from "./libtool-version.js"; diff --git a/packages/taler-util/src/invariants.ts b/packages/taler-util/src/invariants.ts new file mode 100644 index 000000000..c6e9b8113 --- /dev/null +++ b/packages/taler-util/src/invariants.ts @@ -0,0 +1,59 @@ +/* + This file is part of GNU Taler + (C) 2019-2024 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +/** + * Helpers for invariants. + */ + +/** + * An invariant has been violated. + */ +export class InvariantViolatedError extends Error { + constructor(message?: string) { + super(message); + Object.setPrototypeOf(this, InvariantViolatedError.prototype); + } +} + +/** + * Check a database invariant. + * + * A violation of this invariant means that the database is inconsistent. + */ +export function checkDbInvariant(b: boolean, m?: string): asserts b { + if (!b) { + if (m) { + throw Error(`BUG: database invariant failed (${m})`); + } else { + throw Error("BUG: database invariant failed"); + } + } +} + +/** + * Check a logic invariant. + * + * A violation of this invariant means that there is a logic bug in the program. + */ +export function checkLogicInvariant(b: boolean, m?: string): asserts b { + if (!b) { + if (m) { + throw Error(`BUG: logic invariant failed (${m})`); + } else { + throw Error("BUG: logic invariant failed"); + } + } +} |