#!/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("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 *
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'],
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;
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 ""