JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 142496
  • Score
    100M100P100Q159864F
  • License MIT

WebAssembly port of Oniguruma regex library

Package Exports

  • onigasm
  • onigasm/lib/onigasm.wasm

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (onigasm) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Onigasm (OnigurumaASM)

WebAssembly port of Oniguruma regex library.

Usage/API/Behaviour 100% same as node-oniguruma port, tests are literally imported from node-oniguruma repository for maximum compliance.

Of course, unlike node-oniguruma, this library can't hook into roots of V8 and is therefore ~2 times slower than latter.

But don't loose faith! Searching for a string in a file* with 5839708 characters it only takes about ~260ms to process. Not bad if you ask me ;P

* File was taken from Microsoft/TypeScript/lib/typescriptServices.js

Instructions for porting your app to web

Install

npm i onigasm

Light it up

WASM must be loaded before you use any other feature like OnigRegExp or OnigScanner

// index.js (entry point)

import { loadWASM } from 'onigasm'
import App from './App'

(async () => {
    await loadWASM('path/to/onigasm.wasm') // You can also pass ArrayBuffer of onigasm.wasm file
    App.start()
})()

// `onigasm.wasm` file will be available at `onigasm/lib/onigasm.wasm` in `node_modules` of your project directory

Once loaded onigasm is a drop-in replacement for oniguruma

// app.js (rest of the app)

/** replace this */ import { OnigRegExp } from 'oniguruma'
/** with this   */  import { OnigRegExp } from 'onigasm'

That's it!

To do

  • Pass node-oniguruma tests
  • Code cleanup wherever possible
  • Optimizations wherever possible
  • Improve internal and public documentation