Skip to content
/ safejs Public

This repo intends to safely run JavaScript into a website using web workers

License

Notifications You must be signed in to change notification settings

decipad/safejs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

safejs

This repo intends to safely run JavaScript into a website using web workers. It provides a controller class, with some defaults.

Blog Post Link

Decipad Blog Link

Usage example

const myWorker = new SafeJs(
  // Success callback
  (successMessage) => {
    console.log(successMessage);
  },
  // Errors callback
  (err) => console.error(err),
  {
    maxExecutingTime: 50000,
  }
);

myWorker.execute('return "Hello World"');

Parameters

As seen above, the third parameter for the SafeJS constructor is a series of options.

export interface SafeJsOptions {
  maxWorkerReturn: number; // Number of characters the stringified result is allowed to return. Default 10000.
  maxExecutingTime: number; // Kill the worker after not returning this number of milliseconds. Default 20000.
  maxConsoleLog: number; // Max number of logs returned. Default 200.
  extraWhitelist: Array<string>; // Objects you wish to whitelist and thus allow the user to use in their code.

  fetchProxyUrl: string | undefined; // Replaces the default `fetch` URL if provided.
}

dev install

to test this package you need to set up with link (insert zelda pun):

In this repo:

pnpm link

Wherever you are using it

pnpm link @decipad/safejs

If you use a builder, like webpack, you might have to rebuild. This is an example of how that might look like (in the safejs repo):

pnpm run build

Inspiration

This package was partially inspired by (Wumpus World)[https://github.com/Domiii/WumpusGame/blob/master/js/script/GuestScriptContext.js]

About

This repo intends to safely run JavaScript into a website using web workers

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published