From 58bdaa3557bb72aa1b3854c2c8ffae42db715ac1 Mon Sep 17 00:00:00 2001 From: Heber Date: Wed, 13 Sep 2023 10:14:45 -0600 Subject: [PATCH] Add web-tree-sitter-sfapex package --- bindings/web/index.d.ts | 6 +++++ bindings/web/index.js | 42 ++++++++++++++++++++++++++++++++++ bindings/web/package-lock.json | 21 +++++++++++++++++ bindings/web/package.json | 15 ++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 bindings/web/index.d.ts create mode 100644 bindings/web/index.js create mode 100644 bindings/web/package-lock.json create mode 100644 bindings/web/package.json diff --git a/bindings/web/index.d.ts b/bindings/web/index.d.ts new file mode 100644 index 000000000..d73b33ff9 --- /dev/null +++ b/bindings/web/index.d.ts @@ -0,0 +1,6 @@ +type Parser = import("web-tree-sitter"); +declare module "web-tree-sitter-sfapex" { + function getApexParser(): Promise; + function getSoqlParser(): Promise; + function getSoslParser(): Promise; +} diff --git a/bindings/web/index.js b/bindings/web/index.js new file mode 100644 index 000000000..a32f045f6 --- /dev/null +++ b/bindings/web/index.js @@ -0,0 +1,42 @@ +const Parser = require("web-tree-sitter"); +const fs = require("fs"); + +function getApexParser() { + return getParser(__dirname + "/tree-sitter-apex.wasm"); +} +function getSoqlParser() { + return getParser(__dirname + "/tree-sitter-soql.wasm"); +} +function getSoslParser() { + return getParser(__dirname + "/tree-sitter-sosl.wasm"); +} + +/** + * @param {string} wasmLangFile + * @returns {Promise} + */ +async function getParser(wasmLangFile) { + return new Promise(async (resolve, reject) => { + await Parser.init(); + // make loadable on NodeJS to enable testing, should be smarter later + const parser = new Parser(); + fs.readFile(wasmLangFile, async (err, data) => { + if (err) { + reject(err); + } + try { + const lang = await Parser.Language.load(data); + parser.setLanguage(lang); + resolve(parser); + } catch (err2) { + reject(err2); + } + }); + }); +} + +module.exports = { + getApexParser, + getSoqlParser, + getSoslParser, +}; diff --git a/bindings/web/package-lock.json b/bindings/web/package-lock.json new file mode 100644 index 000000000..d7b4b949e --- /dev/null +++ b/bindings/web/package-lock.json @@ -0,0 +1,21 @@ +{ + "name": "web-tree-sitter-sfapex", + "version": "0.0.9-beta2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web-tree-sitter-sfapex", + "version": "0.0.9-beta2", + "license": "ISC", + "dependencies": { + "web-tree-sitter": "^0.20.8" + } + }, + "node_modules/web-tree-sitter": { + "version": "0.20.8", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz", + "integrity": "sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==" + } + } +} diff --git a/bindings/web/package.json b/bindings/web/package.json new file mode 100644 index 000000000..6df42832b --- /dev/null +++ b/bindings/web/package.json @@ -0,0 +1,15 @@ +{ + "name": "web-tree-sitter-sfapex", + "version": "0.0.9", + "description": "tree-sitter-sfapex WASM", + "main": "index.js", + "types": "index.d.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Anthony Heber", + "license": "ISC", + "dependencies": { + "web-tree-sitter": "^0.20.8" + } +}