jq-web-wasm
v0.5.3
Published
a hack that makes jq run in the browser with emscripten.
Downloads
331
Readme
jq-web-wasm
This is a fork of jq-web to support Node v18+ and TypeScript.
Usage
Install
npm i jq-web-wasm # or from Github npm i github:eGust/jq-web-wasm # or yarn add jq-web-wasm # or pnpm i jq-web-wasm
Use with TypeScript
// demo.ts import { assert } from 'node:console'; import { promised } from 'jq-web-wasm/jq.wasm'; const demo = async () => { const foo = await promised.json({ foo: 'bar' }, '.foo'); const baz = JSON.parse(await promised.raw(JSON.stringify({ baz: 'bar' }), '.baz')); console.debug({ foo, baz }); assert(foo === 'bar', `foo is not "bar" (got ${foo})`); assert(baz === 'bar', `baz is not "bar" (got ${baz})`); }; demo();
# run it in shell ❯ tsx demo.ts # [tsx](https://www.npmjs.com/package/tsx) { foo: 'bar', baz: 'bar' }
Motivation
Due to Node v18 introduced fetch
API, the original jq-web uses fetch
to detect whether it's running in a browser env. Unfortunately, this way no longer works since Node v18.
This package simply replaced typeof fetch === "function"
with (typeof global !== 'object' && typeof fetch === "function")
to get it work. In theory it should work for any version that support WASM. However, Node v14 is almost reaches its EOL, so I put the engine to require Node >= 16.
Compile by yourself
Please check scripts
in package.json
:
- run
pnpm i
to install dependencies. - run
pnpm copy-wasm-to-dist
to copyjq.wasm.wasm
todist/
. - run
pnpm reformat:jq.wasm.js
to generate readabledist/reformatted-jq.wasm.js
. - update
dist/reformatted-jq.wasm.js
and replacedist/jq.wasm.js
with it. - run
pnpm minify
to createdist/jq.wasm.min.js
Sure you can use
npm
oryarn
instead.