aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-27 18:43:11 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-27 18:43:34 +0200
commitd381226f21f1d0605d06ccae56c38ab6b12f88f0 (patch)
treed431cd99d34227c321daa786a33499cc41a8806b
parent67a50513219dd8536ce2d7888a99cbfc3c3cabcb (diff)
Simplify loading of the emscripten lib.
This removes an ugly hack and makes it possible to access the emscripten compiled library from within nodejs test cases more easily.
-rw-r--r--emscripten/README4
-rw-r--r--emscripten/taler-emscripten-lib.js (renamed from src/emscripten/taler-emscripten-lib.js)0
-rw-r--r--gulpfile.js4
-rw-r--r--src/crypto/cryptoApi-test.ts (renamed from src/cryptoApi-test.ts)2
-rw-r--r--src/crypto/cryptoApi.ts (renamed from src/cryptoApi.ts)4
-rw-r--r--src/crypto/cryptoWorker.ts (renamed from src/cryptoWorker.ts)39
-rw-r--r--src/crypto/emscInterface-test.ts (renamed from src/emscriptif-test.ts)2
-rw-r--r--src/crypto/emscInterface.ts (renamed from src/emscriptif.ts)9
-rw-r--r--src/crypto/emscLoader.d.ts (renamed from src/emscripten/taler-emscripten-lib.d.ts)26
-rw-r--r--src/crypto/emscLoader.js38
-rw-r--r--src/wallet.ts2
-rw-r--r--tsconfig.json17
-rw-r--r--webpack.config.js7
13 files changed, 104 insertions, 50 deletions
diff --git a/emscripten/README b/emscripten/README
new file mode 100644
index 000000000..e13ea8ed1
--- /dev/null
+++ b/emscripten/README
@@ -0,0 +1,4 @@
+The taler-emscripten-lib.js is compiled from C using emscripten.
+
+See https://git.taler.net/libtalerutil-emscripten.git for automated build
+instructions and the functions exported from this module.
diff --git a/src/emscripten/taler-emscripten-lib.js b/emscripten/taler-emscripten-lib.js
index dcbea842c..dcbea842c 100644
--- a/src/emscripten/taler-emscripten-lib.js
+++ b/emscripten/taler-emscripten-lib.js
diff --git a/gulpfile.js b/gulpfile.js
index ec8321dc0..568300614 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -53,7 +53,7 @@ const po2json = require("po2json");
const paths = {
ts: {
src: [
- "src/**/*.{ts,tsx}",
+ "src/**/*.{ts,tsx,js}",
"!src/**/*-test*.ts",
],
decl: [
@@ -112,6 +112,8 @@ const tsBaseArgs = {
strict: true,
outDir: "build/src/",
noImplicitAny: true,
+ allowJs: true,
+ checkJs: true,
};
diff --git a/src/cryptoApi-test.ts b/src/crypto/cryptoApi-test.ts
index 8350defbc..89b74d776 100644
--- a/src/cryptoApi-test.ts
+++ b/src/crypto/cryptoApi-test.ts
@@ -1,5 +1,5 @@
import {CryptoApi} from "./cryptoApi";
-import {ReserveRecord, DenominationRecord, DenominationStatus} from "./types";
+import {ReserveRecord, DenominationRecord, DenominationStatus} from "../types";
import {test, TestLib} from "talertest";
let masterPub1: string = "CQQZ9DY3MZ1ARMN5K1VKDETS04Y2QCKMMCFHZSWJWWVN82BTTH00";
diff --git a/src/cryptoApi.ts b/src/crypto/cryptoApi.ts
index 45efb63e3..a386eab42 100644
--- a/src/cryptoApi.ts
+++ b/src/crypto/cryptoApi.ts
@@ -33,11 +33,11 @@ import {
RefreshSessionRecord,
WireFee,
PayCoinInfo,
-} from "./types";
+} from "../types";
import {
OfferRecord,
CoinWithDenom,
-} from "./wallet";
+} from "../wallet";
/**
diff --git a/src/cryptoWorker.ts b/src/crypto/cryptoWorker.ts
index bf802a32b..36b3b924a 100644
--- a/src/cryptoWorker.ts
+++ b/src/crypto/cryptoWorker.ts
@@ -22,27 +22,34 @@
/**
* Imports.
*/
-import * as native from "./emscriptif";
import {
- PreCoinRecord,
- PayCoinInfo,
AmountJson,
- RefreshSessionRecord,
- RefreshPreCoinRecord,
- ReserveRecord,
+ Amounts,
+ CoinPaySig,
+ CoinRecord,
CoinStatus,
+ DenominationRecord,
+ PayCoinInfo,
PaybackRequest,
-} from "./types";
+ PreCoinRecord,
+ RefreshPreCoinRecord,
+ RefreshSessionRecord,
+ ReserveRecord,
+ WireFee,
+} from "../types";
import create = chrome.alarms.create;
-import {OfferRecord} from "./wallet";
-import {CoinWithDenom} from "./wallet";
-import {CoinPaySig, CoinRecord} from "./types";
-import {DenominationRecord, Amounts, WireFee} from "./types";
-import {Amount} from "./emscriptif";
-import {HashContext} from "./emscriptif";
-import {RefreshMeltCoinAffirmationPS} from "./emscriptif";
-import {EddsaPublicKey} from "./emscriptif";
-import {HashCode} from "./emscriptif";
+import {
+ CoinWithDenom,
+ OfferRecord,
+} from "../wallet";
+import * as native from "./emscInterface";
+import {
+ Amount,
+ EddsaPublicKey,
+ HashCode,
+ HashContext,
+ RefreshMeltCoinAffirmationPS,
+} from "./emscInterface";
namespace RpcFunctions {
diff --git a/src/emscriptif-test.ts b/src/crypto/emscInterface-test.ts
index 8b7a9eff4..4f57bf802 100644
--- a/src/emscriptif-test.ts
+++ b/src/crypto/emscInterface-test.ts
@@ -1,5 +1,5 @@
import {test, TestLib} from "talertest";
-import * as native from "./emscriptif";
+import * as native from "./emscInterface";
test("string hashing", (t: TestLib) => {
let x = native.ByteArray.fromStringWithNull("hello taler");
diff --git a/src/emscriptif.ts b/src/crypto/emscInterface.ts
index 60653b66e..52c6c965e 100644
--- a/src/emscriptif.ts
+++ b/src/crypto/emscInterface.ts
@@ -26,8 +26,11 @@
/**
* Imports.
*/
-import {AmountJson} from "./types";
-import * as emscLib from "./emscripten/taler-emscripten-lib";
+import {AmountJson} from "../types";
+import {getLib, EmscFunGen} from "./emscLoader";
+
+
+const emscLib = getLib();
/**
@@ -45,7 +48,7 @@ const GNUNET_SYSERR = -1;
/**
* Get an emscripten-compiled function.
*/
-const getEmsc: emscLib.EmscFunGen = (name: string, ret: any, argTypes: any[]) => {
+const getEmsc: EmscFunGen = (name: string, ret: any, argTypes: any[]) => {
return (...args: any[]) => {
return emscLib.ccall(name, ret, argTypes, args);
}
diff --git a/src/emscripten/taler-emscripten-lib.d.ts b/src/crypto/emscLoader.d.ts
index 25cfc623e..e46ed7f13 100644
--- a/src/emscripten/taler-emscripten-lib.d.ts
+++ b/src/crypto/emscLoader.d.ts
@@ -14,6 +14,9 @@
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
+
+declare function getLib(): EmscLib;
+
export interface EmscFunGen {
(name: string,
ret: string,
@@ -30,23 +33,22 @@ export interface EmscFunGen {
}
-export var cwrap: EmscFunGen;
+interface EmscLib {
+ cwrap: EmscFunGen;
-export function ccall(name: string, ret:"number"|"string", argTypes: any[], args: any[]): any
+ ccall(name: string, ret:"number"|"string", argTypes: any[], args: any[]): any
-export function stringToUTF8(s: string, addr: number, maxLength: number): void
+ stringToUTF8(s: string, addr: number, maxLength: number): void
-export function _free(ptr: number): void;
+ _free(ptr: number): void;
-export function _malloc(n: number): number;
+ _malloc(n: number): number;
-export function Pointer_stringify(p: number, len?: number): string;
+ Pointer_stringify(p: number, len?: number): string;
-export function getValue(ptr: number, type: string, noSafe?: boolean): number;
+ getValue(ptr: number, type: string, noSafe?: boolean): number;
-export function setValue(ptr: number, value: number, type: string,
- noSafe?: boolean): void;
+ setValue(ptr: number, value: number, type: string, noSafe?: boolean): void;
-export function writeStringToMemory(s: string,
- buffer: number,
- dontAddNull?: boolean): void;
+ writeStringToMemory(s: string, buffer: number, dontAddNull?: boolean): void;
+}
diff --git a/src/crypto/emscLoader.js b/src/crypto/emscLoader.js
new file mode 100644
index 000000000..723b8ae36
--- /dev/null
+++ b/src/crypto/emscLoader.js
@@ -0,0 +1,38 @@
+/*
+ This file is part of TALER
+ (C) 2017 Inria and GNUnet e.V.
+
+ 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.
+
+ 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
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+
+// @ts-nocheck
+
+/**
+ * Load the taler emscripten lib.
+ *
+ * If in a WebWorker, importScripts is used. Inside a browser,
+ * the module must be globally available.
+ */
+export default function getLib() {
+ if (window.TalerEmscriptenLib) {
+ return TalerEmscriptenLib;
+ }
+ if (importScripts) {
+ importScripts('/src/emscripten/taler-emscripten-lib.js')
+ if (TalerEmscriptenLib) {
+ throw Error("can't import TalerEmscriptenLib");
+ }
+ return TalerEmscriptenLib
+ }
+ throw Error("Can't find TalerEmscriptenLib.");
+}
diff --git a/src/wallet.ts b/src/wallet.ts
index f48fcc76e..a2a9e83f5 100644
--- a/src/wallet.ts
+++ b/src/wallet.ts
@@ -72,7 +72,7 @@ import {
flatMap,
getTalerStampSec,
} from "./helpers";
-import {CryptoApi} from "./cryptoApi";
+import {CryptoApi} from "./crypto/cryptoApi";
import URI = require("urijs");
diff --git a/tsconfig.json b/tsconfig.json
index 7409f2b81..0c684214e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -14,7 +14,9 @@
"noFallthroughCasesInSwitch": true,
"strict": true,
"outDir": "build/src/",
- "noImplicitAny": true
+ "noImplicitAny": true,
+ "allowJs": true,
+ "checkJs": true
},
"files": [
"decl/chrome/chrome.d.ts",
@@ -25,12 +27,13 @@
"src/chromeBadge.ts",
"src/components.ts",
"src/content_scripts/notify.ts",
- "src/cryptoApi-test.ts",
- "src/cryptoApi.ts",
- "src/cryptoWorker.ts",
- "src/emscripten/taler-emscripten-lib.d.ts",
- "src/emscriptif-test.ts",
- "src/emscriptif.ts",
+ "src/crypto/cryptoApi-test.ts",
+ "src/crypto/cryptoApi.ts",
+ "src/crypto/cryptoWorker.ts",
+ "src/crypto/emscInterface-test.ts",
+ "src/crypto/emscInterface.ts",
+ "src/crypto/emscLoader.d.ts",
+ "src/crypto/emscLoader.js",
"src/helpers-test.ts",
"src/helpers.ts",
"src/http.ts",
diff --git a/webpack.config.js b/webpack.config.js
index a99d2a7c8..deca2ae76 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -34,13 +34,8 @@ module.exports = function (env) {
base.plugins.push(new webpack.LoaderOptionsPlugin({minimize: true}));
}
const configWebWorker = {
- entry: {"cryptoWorker": "./src/cryptoWorker.ts"},
+ entry: {"cryptoWorker": "./src/crypto/cryptoWorker.ts"},
target: "webworker",
- externals: {
- // A big hack to load taler-emscripten-lib from the environment,
- // because we exclude it from the bundle.
- "./emscripten/taler-emscripten-lib": "(self.TalerEmscriptenLib = {}, importScripts('/src/emscripten/taler-emscripten-lib.js'), TalerEmscriptenLib)",
- },
};
const configBackground = {