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
 
 #!/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)
 
     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)
 
     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":
 if sys.argv[6] == "java":
     from java_strings import Consts
 elif sys.argv[6] == "typescript":
+    import typescript_strings
     from typescript_strings import Consts
     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)
 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 *
 
 
 from bindingstypes import *
 
index 66eae2980fe3ac6e203c863027f88f9ab3c73c4a..682169295aed2849375c7841d70b50e271fdc7fe 100644 (file)
@@ -1,7 +1,7 @@
 from bindingstypes import *
 
 class Consts:
 from bindingstypes import *
 
 class Consts:
-    def __init__(self, DEBUG):
+    def __init__(self, DEBUG: bool, **kwargs):
 
         self.c_type_map = dict(
             uint8_t = ['byte'],
 
         self.c_type_map = dict(
             uint8_t = ['byte'],
index 5c1a36d561168c4231a334ec49570dc52af495e0..6a5815034c5a7d4853ee133f7a653a3aac5f6c5b 100644 (file)
@@ -1,13 +1,17 @@
 from bindingstypes import ConvInfo
 from bindingstypes import ConvInfo
-
+from enum import Enum
 
 def first_to_lower(string: str) -> str:
     first = string[0]
     return first.lower() + string[1:]
 
 
 
 def first_to_lower(string: str) -> str:
     first = string[0]
     return first.lower() + string[1:]
 
 
+class Target(Enum):
+    NODEJS = 1,
+    BROWSER = 2
+
 class Consts:
 class Consts:
-    def __init__(self, DEBUG):
+    def __init__(self, DEBUG: bool, target: Target, **kwargs):
 
         self.c_type_map = dict(
             uint8_t = ['number', 'Uint8Array'],
 
         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});',
         )
 
             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;
 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
 
         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 ""
 
     def init_str(self, c_array_class_caches):
         return ""