make target argument optional for typescript inputs (undocumented)
authorArik Sosman <git@arik.io>
Sat, 16 Jan 2021 10:04:19 +0000 (02:04 -0800)
committerArik Sosman <git@arik.io>
Sat, 16 Jan 2021 10:04:19 +0000 (02:04 -0800)
genbindings.py
java_strings.py
typescript_strings.py

index b9189b0695de3f46196495f614974301e688f588..f022c1b34062ff004dcbef1c25acf1472526edba 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 import sys, re
 
-if len(sys.argv) != 7:
+if len(sys.argv) < 7:
     print("USAGE: /path/to/lightning.h /path/to/bindings/output /path/to/bindings/ /path/to/bindings/output.c debug lang")
     sys.exit(1)
 
@@ -13,14 +13,19 @@ else:
     print("debug should be true or false and indicates whether to track allocations and ensure we don't leak")
     sys.exit(1)
 
+target = None
 if sys.argv[6] == "java":
     from java_strings import Consts
 elif sys.argv[6] == "typescript":
+    import typescript_strings
     from typescript_strings import Consts
+    target = typescript_strings.Target.NODEJS
+    if len(sys.argv) == 8 and sys.argv[7] == 'browser':
+        target = typescript_strings.Target.BROWSER
 else:
     print("Only java or typescript can be set for lang")
     sys.exit(1)
-consts = Consts(DEBUG)
+consts = Consts(DEBUG, target=target)
 
 from bindingstypes import *
 
index 66eae2980fe3ac6e203c863027f88f9ab3c73c4a..682169295aed2849375c7841d70b50e271fdc7fe 100644 (file)
@@ -1,7 +1,7 @@
 from bindingstypes import *
 
 class Consts:
-    def __init__(self, DEBUG):
+    def __init__(self, DEBUG: bool, **kwargs):
 
         self.c_type_map = dict(
             uint8_t = ['byte'],
index 5c1a36d561168c4231a334ec49570dc52af495e0..6a5815034c5a7d4853ee133f7a653a3aac5f6c5b 100644 (file)
@@ -1,13 +1,17 @@
 from bindingstypes import ConvInfo
-
+from enum import Enum
 
 def first_to_lower(string: str) -> str:
     first = string[0]
     return first.lower() + string[1:]
 
 
+class Target(Enum):
+    NODEJS = 1,
+    BROWSER = 2
+
 class Consts:
-    def __init__(self, DEBUG):
+    def __init__(self, DEBUG: bool, target: Target, **kwargs):
 
         self.c_type_map = dict(
             uint8_t = ['number', 'Uint8Array'],
@@ -21,20 +25,7 @@ class Consts:
             default = 'const {var_name}_hu_conv: {human_type} = new {human_type}(null, {var_name});',
         )
 
-        self.bindings_header = """
-    
-const path = require('path').join(__dirname, 'bindings.wasm');
-const bytes = require('fs').readFileSync(path);
-let imports = {};
-// add all exports to dictionary and move down?
-// use `module.exports`?
-// imports['./bindings.js'] = require('./bindings.js');
-
-const wasmModule = new WebAssembly.Module(bytes);
-const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
-// module.exports = wasmInstance.exports;
-const wasm = wasmInstance.exports;
-        
+        self.bindings_header = self.wasm_import_header(target) + """
 export class VecOrSliceDef {
     public dataptr: number;
     public datalen: number;
@@ -262,6 +253,24 @@ import * as bindings from '../bindings' // TODO: figure out location
         else:
             return None
 
+
+    def wasm_import_header(self, target):
+        if target == Target.NODEJS:
+            return """
+const path = require('path').join(__dirname, 'bindings.wasm');
+const bytes = require('fs').readFileSync(path);
+let imports = {};
+// add all exports to dictionary and move down?
+// use `module.exports`?
+// imports['./bindings.js'] = require('./bindings.js');
+
+const wasmModule = new WebAssembly.Module(bytes);
+const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
+// module.exports = wasmInstance.exports;
+const wasm = wasmInstance.exports;
+            """
+        return ''
+
     def init_str(self, c_array_class_caches):
         return ""