A WASM shell parser and formatter with bash support, based on mvdan/sh
# yarn yarn add sh-syntax # npm npm i sh-syntax
import { parse, print } from 'sh-syntax' const text = "echo 'Hello World!'" const ast = await parse(text) const newText = await print(ast, { // `originalText` is required for now, hope we will find better solution later originalText: text, })
import { getProcessor } from 'sh-syntax' // choose your own way to load the WASM file // with `fetch` const processor = getProcessor(() => fetch('http://cdn.jsdelivr.net/npm/sh-syntax@latest/main.wasm'), ) // with `wasm?init` via `vite` import initWasm from 'sh-syntax/wasm?init' const processor = getProcessor(initWasm) const parse = (text, options) => processor(text, options) const print = (textOrAst, options) => { if (typeof textOrAst === 'string') { return processor(textOrAst, { ...options, print: true, }) } return processor(textOrAst, options) } // just like node again const text = "echo 'Hello World!'" const ast = await parse(text) const newText = await print(ast, { originalText: text })
clk: ~2.81 GHz cpu: Apple M1 Max runtime: node 18.20.8 (arm64-darwin) benchmark avg (min … max) p75 / p99 (min … top 1%) ------------------------------------------- ------------------------------- sh-syntax 18.33 ms/iter 18.56 ms ▃ ▃█ (17.48 ms … 20.83 ms) 19.09 ms ▂▂█ ▂ ██▂ ▂ ▂ ( 28.52 kb … 9.82 mb) 890.46 kb ███▆▆▁▁█▁▁▆███▁▆█▁█▆▆ 5.07 ipc ( 1.22% stalls) 99.36% L1 data cache 56.96M cycles 288.57M instructions 39.27% retired LD/ST (113.32M) sh-syntax (synckit) 18.38 ms/iter 18.82 ms ▂▂▂ ▂▂ █▂ (17.63 ms … 19.06 ms) 19.04 ms ███▅ ██ ██▅▅ (291.31 kb … 312.45 kb) 292.09 kb ████▇▇▇▇▁▁▁▁▇▁██▇████ 1.11 ipc ( 11.51% stalls) 40.34% L1 data cache 434.86k cycles 484.78k instructions 19.58% retired LD/ST ( 94.92k) mvdan-sh 79.47 ms/iter 78.95 ms █ (71.22 ms … 126.09 ms) 80.84 ms ▅█ ▅▅▅ ▅ ▅▅▅ ▅ ( 8.18 mb … 9.70 mb) 8.83 mb ██▁███▁▁▁▁█▁▁▁▁███▁▁█ 5.18 ipc ( 1.05% stalls) 99.04% L1 data cache 249.41M cycles 1.29G instructions 34.41% retired LD/ST (444.42M) summary sh-syntax 1x faster than sh-syntax (synckit) 4.34x faster than mvdan-sh
See benchmark for more details.
You can try it with running node benchmark
by yourself. Here is the benchmark source code.
Detailed changes for each release are documented in CHANGELOG.md.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4