a hack that makes jq run in the browser with emscripten.
npm install jq-web-wasmThis is a fork of jq-web to support Node v18+ and TypeScript.
1. Install
``bash`
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
2. Use with TypeScript
`ts
// 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}));baz is not "bar" (got ${baz})
assert(baz === 'bar', );
};
demo();
`
`bash`
# run it in shell
❯ tsx demo.ts # tsx
{ foo: 'bar', baz: 'bar' }
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.
Please check scripts in package.json:
1. run pnpm i to install dependencies.pnpm copy-wasm-to-dist
2. run to copy jq.wasm.wasm to dist/.pnpm reformat:jq.wasm.js
3. run to generate readable dist/reformatted-jq.wasm.js.dist/reformatted-jq.wasm.js
4. update and replace dist/jq.wasm.js with it.pnpm minify
5. run to create dist/jq.wasm.min.js
> Sure you can use npm or yarn` instead.