mix init options in the Module-global

This commit is contained in:
Johannes Rieken 2021-08-30 14:16:41 +02:00
parent 0926fad1e2
commit 12d727fd49
4 changed files with 48 additions and 29 deletions

View file

@ -17,24 +17,15 @@ var MIN_COMPATIBLE_VERSION;
var TRANSFER_BUFFER;
var currentParseCallback;
var currentLogCallback;
var initPromise = new Promise(resolve => {
Module.onRuntimeInitialized = resolve
}).then(() => {
TRANSFER_BUFFER = C._ts_init();
VERSION = getValue(TRANSFER_BUFFER, 'i32');
MIN_COMPATIBLE_VERSION = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');
});
class Parser {
class ParserImpl {
static init() {
return initPromise;
TRANSFER_BUFFER = C._ts_init();
VERSION = getValue(TRANSFER_BUFFER, 'i32');
MIN_COMPATIBLE_VERSION = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');
}
constructor() {
if (TRANSFER_BUFFER == null) {
throw new Error('You must first call Parser.init() and wait for it to resolve.');
}
initialize() {
C._ts_parser_new_wasm();
this[0] = getValue(TRANSFER_BUFFER, 'i32');
this[1] = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');
@ -1203,6 +1194,3 @@ function marshalEdit(edit) {
setValue(address, edit.oldEndIndex, 'i32'); address += SIZE_OF_INT;
setValue(address, edit.newEndIndex, 'i32'); address += SIZE_OF_INT;
}
Parser.Language = Language;
Parser.Parser = Parser;

View file

@ -1,9 +1,15 @@
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define([], factory);
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
window.TreeSitter = factory();
}
}(this, function () {
var TreeSitter = function() {
var initPromise;
class Parser {
constructor() {
this.initialize();
}
initialize() {
throw new Error("cannot construct a Parser before calling `init()`");
}
static init(moduleOptions) {
if (initPromise) return initPromise;
Module = { ...Module, ...moduleOptions };
return initPromise = new Promise((resolveInitPromise) => {

View file

@ -1,2 +1,23 @@
return Parser;
}));
for (const name of Object.getOwnPropertyNames(ParserImpl.prototype)) {
Object.defineProperty(Parser.prototype, name, {
value: ParserImpl.prototype[name],
enumerable: false,
writable: false,
})
}
Parser.Language = Language;
Module.onRuntimeInitialized = () => {
ParserImpl.init();
resolveInitPromise();
};
});
}
}
return Parser;
}();
if (typeof exports === 'object') {
module.exports = TreeSitter;
}

View file

@ -1,6 +1,10 @@
declare module 'web-tree-sitter' {
class Parser {
static init(): Promise<void>;
/**
*
* @param moduleOptions Optional emscripten module-object, see https://emscripten.org/docs/api_reference/module.html
*/
static init(moduleOptions?: object): Promise<void>;
delete(): void;
parse(input: string | Parser.Input, previousTree?: Parser.Tree, options?: Parser.Options): Parser.Tree;
getLanguage(): any;