Socket
Socket
Sign inDemoInstall

quickjs-emscripten-core

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

quickjs-emscripten-core


Version published
Weekly downloads
8.8K
increased by4.12%
Maintainers
1
Weekly downloads
 
Created

Readme

Source

quickjs-emscripten-core

This package is part of quickjs-emscripten, a Javascript interface for QuickJS compiled to WebAssembly via Emscripten.

This package (quickjs-emscripten-core) contains only Javascript code - no WebAssembly. To use this package, you'll need to install one or more variants of the QuickJS WebAssembly build, see available variants below.

// 1. Import a QuickJS module constructor function from quickjs-emscripten-core
import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core"

// 2. Import a variant suitable for your use case. For example, if you only care to
//    target with the fastest execution speed, import the release build variant
import releaseVariant from "@jitl/quickjs-browser-release-sync-singlefile"

// 3. Create the "QuickJS" module that presents the quickjs-emscripten API.
//    Export and use in other files, or consume directly.
const QuickJS = await newQuickJSWASMModuleFromVariant(releaseVariant)

What's a variant?

A variant describes how to load a QuickJS WebAssembly build and how to call the low-level C API functions used by the higher-level abstractions in quickjs-emscripten-core. A variant is an object with the following properties:

const variant = {
  // This should be `async` if the variant is built with ASYNCIFY
  // so that the WebAssembly module execution can be suspended.
  //
  // Otherwise, this should be `sync`.
  type: "sync",
  // This should be a function that resolves to a QuickJSFFI class.
  importFFI: () => import("something/ffi.ts").then((mod) => mod.QuickJSFFI),
  // This should be a function that resolves to a Emscripten-shaped WASM module factory.
  importModuleLoader: () => import("something/emscripten-module.ts"),
}

You can provide your own variant to control exactly how the large WebAssembly object is loaded. quickjs-emscripten-core will call your variant's importXYZ methods during newQuickJSWASMModuleFromVariant or newQuickJSAsyncWASMModuleFromVariant.

Environment-specific variants

You can use subpath imports in package.json to select the appropriate variant for a runtime. This is how the main quickjs-emscripten package picks between browser, Node ESM and Node CommonJS variants.

// in your package.json
{
  "imports": {
    "#my-quickjs-variant": {
      "types": "@jitl/quickjs-browser-release-sync-wasm",
      "browser": "@jitl/quickjs-browser-release-sync-wasm",
      "import": "@jitl/quickjs-node-esm-release-sync-wasm",
      "require": "@jitl/quickjs-node-cjs-release-sync-wasm"
    }
  }
}
// In your code
import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core"
import variant from "#my-quickjs-variant"
const QuickJS = await newQuickJSWASMModuleFromVariant(variant)

Available variants

@jitl/quickjs-wasmfile-debug-sync

Variant with separate .WASM file. Supports browser, NodeJS ESM, and NodeJS CJS.

VariableSettingDescription
releaseModedebugEnables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.
syncModesyncThe default, normal build. Note that both variants support regular async functions.
emscriptenInclusionwasmHas a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant.
exportsrequire import browserHas these package.json export conditions

@jitl/quickjs-wasmfile-debug-asyncify

Variant with separate .WASM file. Supports browser, NodeJS ESM, and NodeJS CJS.

VariableSettingDescription
releaseModedebugEnables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.
syncModeasyncifyBuild run through the ASYNCIFY WebAssembly transform. Larger and slower. Allows synchronous calls from the WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to!
emscriptenInclusionwasmHas a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant.
exportsrequire import browserHas these package.json export conditions

@jitl/quickjs-wasmfile-release-sync

Variant with separate .WASM file. Supports browser, NodeJS ESM, and NodeJS CJS.

VariableSettingDescription
releaseModereleaseOptimized for performance; use when building/deploying your application.
syncModesyncThe default, normal build. Note that both variants support regular async functions.
emscriptenInclusionwasmHas a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant.
exportsrequire import browserHas these package.json export conditions

@jitl/quickjs-wasmfile-release-asyncify

Variant with separate .WASM file. Supports browser, NodeJS ESM, and NodeJS CJS.

VariableSettingDescription
releaseModereleaseOptimized for performance; use when building/deploying your application.
syncModeasyncifyBuild run through the ASYNCIFY WebAssembly transform. Larger and slower. Allows synchronous calls from the WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to!
emscriptenInclusionwasmHas a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant.
exportsrequire import browserHas these package.json export conditions

@jitl/quickjs-singlefile-cjs-debug-sync

Variant with the WASM data embedded into a NodeJS CommonJS module.

VariableSettingDescription
releaseModedebugEnables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.
syncModesyncThe default, normal build. Note that both variants support regular async functions.
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsrequireHas these package.json export conditions

@jitl/quickjs-singlefile-cjs-debug-asyncify

Variant with the WASM data embedded into a NodeJS CommonJS module.

VariableSettingDescription
releaseModedebugEnables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.
syncModeasyncifyBuild run through the ASYNCIFY WebAssembly transform. Larger and slower. Allows synchronous calls from the WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to!
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsrequireHas these package.json export conditions

@jitl/quickjs-singlefile-cjs-release-sync

Variant with the WASM data embedded into a NodeJS CommonJS module.

VariableSettingDescription
releaseModereleaseOptimized for performance; use when building/deploying your application.
syncModesyncThe default, normal build. Note that both variants support regular async functions.
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsrequireHas these package.json export conditions

@jitl/quickjs-singlefile-cjs-release-asyncify

Variant with the WASM data embedded into a NodeJS CommonJS module.

VariableSettingDescription
releaseModereleaseOptimized for performance; use when building/deploying your application.
syncModeasyncifyBuild run through the ASYNCIFY WebAssembly transform. Larger and slower. Allows synchronous calls from the WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to!
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsrequireHas these package.json export conditions

@jitl/quickjs-singlefile-mjs-debug-sync

Variant with the WASM data embedded into a NodeJS ESModule.

VariableSettingDescription
releaseModedebugEnables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.
syncModesyncThe default, normal build. Note that both variants support regular async functions.
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsimportHas these package.json export conditions

@jitl/quickjs-singlefile-mjs-debug-asyncify

Variant with the WASM data embedded into a NodeJS ESModule.

VariableSettingDescription
releaseModedebugEnables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.
syncModeasyncifyBuild run through the ASYNCIFY WebAssembly transform. Larger and slower. Allows synchronous calls from the WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to!
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsimportHas these package.json export conditions

@jitl/quickjs-singlefile-mjs-release-sync

Variant with the WASM data embedded into a NodeJS ESModule.

VariableSettingDescription
releaseModereleaseOptimized for performance; use when building/deploying your application.
syncModesyncThe default, normal build. Note that both variants support regular async functions.
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsimportHas these package.json export conditions

@jitl/quickjs-singlefile-mjs-release-asyncify

Variant with the WASM data embedded into a NodeJS ESModule.

VariableSettingDescription
releaseModereleaseOptimized for performance; use when building/deploying your application.
syncModeasyncifyBuild run through the ASYNCIFY WebAssembly transform. Larger and slower. Allows synchronous calls from the WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to!
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsimportHas these package.json export conditions

@jitl/quickjs-singlefile-browser-debug-sync

Variant with the WASM data embedded into a browser ESModule.

VariableSettingDescription
releaseModedebugEnables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.
syncModesyncThe default, normal build. Note that both variants support regular async functions.
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsbrowserHas these package.json export conditions

@jitl/quickjs-singlefile-browser-debug-asyncify

Variant with the WASM data embedded into a browser ESModule.

VariableSettingDescription
releaseModedebugEnables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.
syncModeasyncifyBuild run through the ASYNCIFY WebAssembly transform. Larger and slower. Allows synchronous calls from the WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to!
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsbrowserHas these package.json export conditions

@jitl/quickjs-singlefile-browser-release-sync

Variant with the WASM data embedded into a browser ESModule.

VariableSettingDescription
releaseModereleaseOptimized for performance; use when building/deploying your application.
syncModesyncThe default, normal build. Note that both variants support regular async functions.
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsbrowserHas these package.json export conditions

@jitl/quickjs-singlefile-browser-release-asyncify

Variant with the WASM data embedded into a browser ESModule.

VariableSettingDescription
releaseModereleaseOptimized for performance; use when building/deploying your application.
syncModeasyncifyBuild run through the ASYNCIFY WebAssembly transform. Larger and slower. Allows synchronous calls from the WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to!
emscriptenInclusionsinglefileThe WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.
exportsbrowserHas these package.json export conditions

Keywords

FAQs

Package last updated on 27 Dec 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc