From e2287d6d5ba01868263d8a08d45ddc60b0ab91fb Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 13 Jul 2021 14:10:38 +0200 Subject: [PATCH] make TextEncoder/Decoder creation lazy for polyfill to work --- packages/taler-wallet-cli/src/index.ts | 2 +- .../src/crypto/talerCrypto.ts | 26 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/taler-wallet-cli/src/index.ts b/packages/taler-wallet-cli/src/index.ts index 091ca2ff8..ddcf6a645 100644 --- a/packages/taler-wallet-cli/src/index.ts +++ b/packages/taler-wallet-cli/src/index.ts @@ -19,7 +19,6 @@ */ import os from "os"; import fs from "fs"; -import * as clk from "./clk.js"; import { deepStrictEqual } from "assert"; // Polyfill for encoding which isn't present globally in older nodejs versions import { TextEncoder, TextDecoder } from "util"; @@ -27,6 +26,7 @@ import { TextEncoder, TextDecoder } from "util"; global.TextEncoder = TextEncoder; // @ts-ignore global.TextDecoder = TextDecoder; +import * as clk from "./clk.js"; import { getTestInfo, runTests } from "./integrationtests/testrunner.js"; import { PreparePayResultType, diff --git a/packages/taler-wallet-core/src/crypto/talerCrypto.ts b/packages/taler-wallet-core/src/crypto/talerCrypto.ts index 5739bc464..7e08d2051 100644 --- a/packages/taler-wallet-core/src/crypto/talerCrypto.ts +++ b/packages/taler-wallet-core/src/crypto/talerCrypto.ts @@ -18,22 +18,13 @@ * Native implementation of GNU Taler crypto. */ +/** + * Imports. + */ import * as nacl from "./primitives/nacl-fast.js"; import bigint from "big-integer"; import { kdf } from "./primitives/kdf.js"; -// @ts-ignore -const decoder = new TextDecoder(); -if (typeof decoder !== "object") { - throw Error("FATAL: TextDecoder not available"); -} - -// @ts-ignore -const encoder = new TextEncoder(); -if (typeof encoder !== "object") { - throw Error("FATAL: TextEncoder not available"); -} - export function getRandomBytes(n: number): Uint8Array { return nacl.randomBytes(n); } @@ -203,11 +194,22 @@ function kdfMod( } } +let encoder: any; +let decoder: any; + export function stringToBytes(s: string): Uint8Array { + if (!encoder) { + // @ts-ignore + encoder = new TextEncoder(); + } return encoder.encode(s); } export function bytesToString(b: Uint8Array): string { + if (!decoder) { + // @ts-ignore + decoder = new TextDecoder(); + } return decoder.decode(b); }