open-index/open-npm huggingface dataset:
npm package: @record-evolution/widget-barchart
Description: Webcomponent widget-barchart following open-wc recommendations
Author: widget-barchart
Latest version: 1.5.4
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# \<widget-barchart>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i widget-barchart
```

## Usage

```html
<script type="module">
  import 'widget-barchart/widget-barchart.js';
</script>

<widget-barchart></widget-barchart>
```

## Expected data format

The following format represents the available data :
```
data: {
  settings: {
    title: string,
    subTitle: string,
    label: string,
    style: {
      backgroundColor: string[],
      borderColor: string[],
      borderWidth: number
    }
  }
  data: [
    {x: string, y: number}
  ]
}
```

## Interfaces

```
  interface InputData {
    settings: Settings
    data: Data[]
  }
```
```
  interface Settings {
    title: string,
    subTitle: string,
    label: string,
    style: Style
  }
```
```
  interface Style {
    backgroundColor: string[],
    borderColor: string[],
    borderWidth: number
  }
```
```
  interface Data {
    x: string,
    y: number,
  }
```

## Style options
The following options are available for styling the bar graph.
A color string is provided in the `backgroundColor` array for each data object.
The same counts for the `borderColor` array

```
  interface Style {
    backgroundColor: string[],
    borderColor: string[],
    borderWidth: number
  }
```

## Linting and formatting

To scan the project for linting and formatting errors, run

```bash
npm run lint
```

To automatically fix linting and formatting errors, run

```bash
npm run format
```


## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-doughnut
Description: REWidget widget-doughnut
Author: widget-doughnut
Latest version: 1.5.19

# \<widget-doughnut>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i widget-doughnut
```

## Usage

```html
<script type="module">
  import 'widget-doughnut/widget-doughnut.js';
</script>

<widget-doughnut></widget-doughnut>
```

## Expected data format

The following format represents the available data :
```js
data: {
  settings: {
    title: string,
    subTitle: string,
    minDoughnut: number,
    maxDoughnut: number,
    style: {
      needleColor: string,
      sections: number,
      backgroundColor: string[]
    }
  }
  doughnutValue: Number
}
```

## Interfaces

```ts
  interface InputData {
    settings: Settings
    doughnutValue: number
  }
```
```ts
  interface Settings {
    title: string,
    subTitle: string,
    minDoughnut: number,
    maxDoughnut: number,
    style: Style
  }
```
```ts
  interface Style {
    needleColor: string,
    sections: number,
    backgroundColor: string[]
  }
```

## Style options
The following options are available for styling the doughnut graph.
The `sections` option splits the doughnut area into by default three same sized sections. Therefore three different colors can be provided to the `backgroundColor` by default.
```
  interface Style {
    needleColor: string,
    sections: number,
    backgroundColor: string[]
  }
```

## Linting and formatting

To scan the project for linting and formatting errors, run

```bash
npm run lint
```

To automatically fix linting and formatting errors, run

```bash
npm run format
```


## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-embed
Description: REWidget widget-embed
Author: widget-embed
Latest version: 1.0.7

# \<widget-embed>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i widget-embed
```

## Usage

```html
<script type="module">
  import 'widget-embed/widget-embed.js';
</script>

<widget-embed></widget-embed>
```

## Expected data format

The following format represents the available data :
```js
data: {
  settings: {
    title: string,
    subTitle: string,
    minGauge: number,
    maxGauge: number,
    style: {
      needleColor: string,
      sections: number,
      backgroundColor: string[]
    }
  }
  gaugeValue: Number
}
```

## Interfaces

```ts
  interface InputData {
    settings: Settings
    gaugeValue: number
  }
```
```ts
  interface Settings {
    title: string,
    subTitle: string,
    minGauge: number,
    maxGauge: number,
    style: Style
  }
```
```ts
  interface Style {
    needleColor: string,
    sections: number,
    backgroundColor: string[]
  }
```

## Style options
The following options are available for styling the value graph.
The `sections` option splits the value area into by default three same sized sections. Therefore three different colors can be provided to the `backgroundColor` by default.
```
  interface Style {
    needleColor: string,
    sections: number,
    backgroundColor: string[]
  }
```

## Linting and formatting

To scan the project for linting and formatting errors, run

```bash
npm run lint
```

To automatically fix linting and formatting errors, run

```bash
npm run format
```


## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-form
Description: REWidget widget-form
Author: widget-form
Latest version: 1.0.16

# widget-form

A Lit 3.x web component for creating dynamic forms with configurable fields. Part of the IronFlock widget ecosystem.

![screenshot](thumbnail.png)

## Installation

```bash
npm i @record-evolution/widget-form
```

## Usage

```html
<script type="module">
    import '@record-evolution/widget-form'
</script>

<widget-form-1.0.9></widget-form-1.0.9>
```

> **Note:** The version number is part of the custom element tag name.

## Properties

| Property    | Type        | Description                   |
| ----------- | ----------- | ----------------------------- |
| `inputData` | `InputData` | Form configuration and fields |
| `theme`     | `Theme`     | Theme object for styling      |

## Events

| Event         | Detail                        | Description                      |
| ------------- | ----------------------------- | -------------------------------- |
| `data-submit` | Array of field/value mappings | Fired when the form is submitted |

## Configuration

The form is configured via the `inputData` property:

```ts
interface InputData {
    title?: string
    subTitle?: string
    formButton?: boolean // Show button to open form dialog
    formFields?: FormField[]
}
```

### Field Types

Each form field supports the following types:

| Type          | Description                    |
| ------------- | ------------------------------ |
| `textfield`   | Single-line text input         |
| `numberfield` | Numeric input with min/max     |
| `checkbox`    | Boolean checkbox               |
| `textarea`    | Multi-line text input          |
| `dropdown`    | Select from predefined options |
| `datetime`    | Date/time picker               |

### Field Configuration

```ts
interface FormField {
    label: string
    type: 'dropdown' | 'textfield' | 'numberfield' | 'checkbox' | 'textarea' | 'datetime'
    hiddenField?: boolean // Hide field but still submit value
    required?: boolean // Field must be filled
    description?: string // Hint text shown below field
    targetColumn?: TargetColumn // Database column mapping
    defaultValue?: string
    min?: number // For numberfield
    max?: number // For numberfield
    validation?: string // Regex for textfield
    values?: DropdownValue[] // For dropdown type
}
```

## Development

```bash
# Start dev server
npm run start

# Build for production
npm run build

# Generate types from schema
npm run types

# Build, bump version, and publish
npm run release
```

## License

MIT
npm package: @record-evolution/widget-heatmap
Description: Webcomponent widget-heatmap following open-wc recommendations
Author: widget-heatmap
Latest version: 1.0.11

# \<widget-heatmap>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i @record-evolution/widget-heatmap
```

## Usage

```html
<script type="module">
    import 'widget-heatmap/widget-heatmap.js'
</script>

<widget-heatmap-1.7.0></widget-heatmap-1.7.0>
```

## Expected data format

Please take a look at the src/default-data.json to see what data is expected to make the widget show content.

## Interfaces

## Style options

The following options are available for styling the overall graph and individual lines as well as the graph legend.

The `SeriesOptions` type can either be `line` or `dots`. This selection affects the following styling options.

```
  interface Point {
    radius: number,
    pointStyle: 'circle' | 'cross' | 'crossRot' | 'dash' | 'line' | 'rect' | 'rectRounded' | 'rectRot' | 'star' | 'triangle' | false,
    backgroundColor: string,
    borderColor: string,
    borderWidth: number
  }


  interface Line {
    backgroundColor: string,
    borderColor: string,
    borderWidth: number,
    fill: boolean,
  }
```

## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-mapbox
Description: REWidget widget-mapbox
Author: widget-mapbox
Latest version: 1.5.14

# \<widget-mapbox>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i widget-mapbox
```

## Usage

```html
<script type="module">
  import 'widget-mapbox/widget-mapbox.js';
</script>

<widget-mapbox></widget-mapbox>
```

## Linting and formatting

To scan the project for linting and formatting errors, run

```bash
npm run lint
```

To automatically fix linting and formatting errors, run

```bash
npm run format
```


## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-markdown
Description: Webcomponent widget-markdown following open-wc recommendations
Author: widget-markdown
Latest version: 1.0.5

# \<widget-markdown>

![thumbnail](thumbnail.png)

A Lit web component for rendering markdown with syntax highlighting and variable interpolation support.

<br>

# Usage

## Installation & Import

```bash
npm i @record-evolution/widget-markdown
```

```html
<script type="module">
    import '@record-evolution/widget-markdown'
</script>

<widget-markdown-1.0.2 inputData="default-data"></widget-markdown-1.0.2>
```

## Expected Data Format

The widget accepts an `inputData` object with the following structure:

```json
{
    "markdown": "# Hello {{userName}}\n\nWelcome to the dashboard!",
    "data": [
        {
            "label": "userName",
            "value": "John Doe"
        }
    ]
}
```

### Properties

- **markdown** (textarea): The markdown text to render. Supports variable interpolation using `{{variableName}}` syntax.
- **data** (array): List of variables to replace in the markdown text.
    - **label** (string): The variable name used in the markdown text (e.g., `userName` for `{{userName}}`).
    - **value** (string): The value that will replace the variable placeholder.

### Features

- **Markdown Rendering**: Full CommonMark and GFM (GitHub Flavored Markdown) support via `marked`.
- **Syntax Highlighting**: Code blocks are automatically highlighted using `highlight.js` with support for:
    - Shell/Bash
    - Python
    - JavaScript/TypeScript
    - JSON
    - CSS
    - Plaintext
- **Variable Interpolation**: Dynamic content replacement using `{{variableName}}` placeholders.
- **Theme Support**: Respects platform theme colors for background and text.

<br>

## Development

> Keep the widget tag name in sync with the version in `package.json`. Update the version in `demo/index.html` accordingly (e.g., `<widget-markdown-1.0.2>`).

To develop the widget locally:

```bash
npm run start
```

This starts a development server at `localhost:8000/demo/` serving `demo/index.html`.

### Using Widget in Another Project

Install the widget in your project:

```bash
npm i @record-evolution/widget-markdown
```

## Releasing a New Version

1. Commit all changes
2. Regenerate types from schema (if modified):
    ```bash
    npm run types
    ```
3. Release:
    ```bash
    npm run release
    ```

This automatically:

- Builds the widget
- Bumps the patch version
- Creates a git tag
- Pushes to GitHub

GitHub Actions will then publish the release to npm.

### Platform Registration

After publishing, register the new version in IronFlock:

```sql
select swarm.f_update_widget_master('{"package_name": "widget-markdown", "version": "1.0.2"}'::jsonb);
```
npm package: @record-evolution/widget-navbar
Description: Webcomponent widget-navbar following open-wc recommendations
Author: widget-navbar
Latest version: 1.0.13

# \<widget-navbar>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i @record-evolution/widget-navbar
```

## Usage

```html
<script type="module">
    import '@record-evolution/widget-navbar/widget-navbar.js'
</script>

<widget-navbar-1.0.9></widget-navbar-1.0.9>
```

## Expected data format

Please take a look at the src/default-data.json to see what data is expected to make the widget show content.

## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with Vite

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html` at http://localhost:8000/demo/
npm package: @record-evolution/widget-navbutton
Description: Webcomponent widget-navbutton following open-wc recommendations
Author: widget-navbutton
Latest version: 1.0.8

# \<widget-navbutton>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i widget-navbutton
```

## Usage

```html
<script type="module">
    import 'widget-navbutton/widget-navbutton.js'
</script>

<widget-navbutton></widget-navbutton>
```

## Expected data format

## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-overlay
Description: Webcomponent widget-overlay following open-wc recommendations
Author: widget-overlay
Latest version: 1.0.10

# \<widget-overlay>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i widget-overlay
```

## Usage

```html
<script type="module">
    import 'widget-overlay/widget-overlay.js'
</script>

<widget-overlay></widget-overlay>
```

## Expected data format

## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-statehistory
Description: Webcomponent widget-statehistory following open-wc recommendations
Author: widget-statehistory
Latest version: 1.0.12

# \<widget-statehistory>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i @record-evolution/widget-statehistory
```

## Usage

```html
<script type="module">
    import 'widget-statehistory/widget-statehistory.js'
</script>

<widget-statehistory-1.7.0></widget-statehistory-1.7.0>
```

## Expected data format

Please take a look at the src/default-data.json to see what data is expected to make the widget show content.

## Interfaces

## Style options

The following options are available for styling the overall graph and individual lines as well as the graph legend.

The `SeriesOptions` type can either be `line` or `dots`. This selection affects the following styling options.

```
  interface Point {
    radius: number,
    pointStyle: 'circle' | 'cross' | 'crossRot' | 'dash' | 'line' | 'rect' | 'rectRounded' | 'rectRot' | 'star' | 'triangle' | false,
    backgroundColor: string,
    borderColor: string,
    borderWidth: number
  }


  interface Line {
    backgroundColor: string,
    borderColor: string,
    borderWidth: number,
    fill: boolean,
  }
```

## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-switch
Description: IronFlock Widget widget-switch
Author: Record Evolution GmbH
Latest version: 1.1.3

# widget-switch

IronFlock widget: A Lit 3.x web component that renders toggle switches using Material Design 3 components. Supports multiple switches with configurable state mapping and IoT device action triggers.

![screenshot](thumbnail.png)

## Installation

```bash
npm i @record-evolution/widget-switch
```

**Peer Dependencies:** This widget requires `@material/web` to be available at runtime via import map or bundled separately.

## Usage

```html
<script type="module">
    import '@record-evolution/widget-switch'
</script>

<widget-switch-1.1.1></widget-switch-1.1.1>
```

> **Note:** The element tag includes the version number (e.g., `widget-switch-1.1.1`). This is replaced at build time via `@rollup/plugin-replace`.

## Configuration

The widget accepts an `inputData` property with the following structure:

```typescript
interface InputData {
    title?: string
    subTitle?: string
    dataseries?: Array<{
        label?: string
        value?: string
        stateMap?: {
            on: string // Value(s) representing ON state
            off: string // Value(s) representing OFF state
        }
        actionDevice?: string
        actionApp?: string
        actionTopic?: string
        styling?: {
            labelColor?: string
            valueColor?: string
        }
    }>
}
```

## State Mapping

The `stateMap` configuration determines how values are interpreted as ON/OFF states:

**Exact values:**

```json
{ "on": "true, 1, active", "off": "false, 0, inactive" }
```

**Numeric comparisons:**

```json
{ "on": ">50", "off": "<=50" }
{ "on": ">=100", "off": "<100" }
```

Supported operators: `<`, `<=`, `>`, `>=`

## Action Events

When a switch is toggled, the widget dispatches an `action-submit` custom event:

```javascript
element.addEventListener('action-submit', (e) => {
    console.log(e.detail)
    // {
    //   args: true/false,      // New switch state
    //   actionApp: "...",      // Target app
    //   actionDevice: "...",   // Target device ID
    //   actionTopic: "...",    // Action topic to call
    //   label: "..."           // Switch label
    // }
})
```

## Theming

The widget supports theming via CSS custom properties or the `theme` property:

**CSS Custom Properties:**

```css
widget-switch-1.1.1 {
    --re-text-color: #333;
    --re-tile-background-color: #fff;
}
```

**Theme Object:**

```javascript
element.theme = {
    theme_name: 'dark',
    theme_object: {
        backgroundColor: '#1a1a1a',
        title: {
            textStyle: { color: '#fff' },
            subtextStyle: { color: '#aaa' }
        }
    }
}
```

## Development

```bash
npm run start    # Dev server at localhost:8000/demo/
npm run build    # Production build to dist/
npm run types    # Regenerate TypeScript types from schema
npm run release  # Build, bump version, push to git with tag
```

## License

MIT
npm package: @record-evolution/widget-tableedit
Description: REWidget widget-tableedit
Author: widget-tableedit
Latest version: 1.0.1
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# \<widget-tableedit>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i widget-tableedit
```

## Usage

```html
<script type="module">
    import 'widget-tableedit/widget-tableedit.js'
</script>

<widget-tableedit></widget-tableedit>
```

## Expected data format

The following format represents the available data :

```js
data: {
  settings: {
    title: string,
    subTitle: string,
    minGauge: number,
    maxGauge: number,
    style: {
      needleColor: string,
      sections: number,
      backgroundColor: string[]
    }
  }
  gaugeValue: Number
}
```

## Interfaces

```ts
interface InputData {
    settings: Settings
    gaugeValue: number
}
```

```ts
interface Settings {
    title: string
    subTitle: string
    minGauge: number
    maxGauge: number
    style: Style
}
```

```ts
interface Style {
    needleColor: string
    sections: number
    backgroundColor: string[]
}
```

## Style options

The following options are available for styling the value graph.
The `sections` option splits the value area into by default three same sized sections. Therefore three different colors can be provided to the `backgroundColor` by default.

```
  interface Style {
    needleColor: string,
    sections: number,
    backgroundColor: string[]
  }
```

## Linting and formatting

To scan the project for linting and formatting errors, run

```bash
npm run lint
```

To automatically fix linting and formatting errors, run

```bash
npm run format
```

## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-textbox
Description: Webcomponent widget-textbox following open-wc recommendations
Author: widget-textbox
Latest version: 1.1.8

# \<widget-textbox>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i widget-textbox
```

## Usage

```html
<script type="module">
  import 'widget-textbox/widget-textbox.js';
</script>

<widget-textbox></widget-textbox>
```
## Expected data format

## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record-evolution/widget-value
Description: REWidget widget-value
Author: widget-value
Latest version: 1.1.25

# \<widget-value>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation

```bash
npm i @record-evolution/widget-value
```

## Usage

```html
<script type="module">
    import '@record-evolution/widget-value/widget-value.js'
</script>

<widget-value-1.1.24></widget-value-1.1.24>
```

## Expected data format

Please take a look at the src/default-data.json to see what data is expected to make the widget show content.

The following format represents the available data :

```js
data: {
  settings: {
    title: string,
    subTitle: string,
    minGauge: number,
    maxGauge: number,
    style: {
      needleColor: string,
      sections: number,
      backgroundColor: string[]
    }
  }
  gaugeValue: Number
}
```

## Local Demo

```bash
npm start
```

To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @record/zone
Description: Simplistic, promise-based zones
Author: Filip Dalüge
Latest version: 0.5.1

# zone

[![Build status](https://img.shields.io/travis/checle/zone/master.svg?style=flat-square)](https://travis-ci.org/checle/zone)

## Installation

Install this package using NPM:

    npm install @record/zone

## Examples

For a primer on zones, review the [Dart](https://www.dartlang.org/articles/libraries/zones) overview.
For more on promises, check out this [Google Developers](https://developers.google.com/web/fundamentals/getting-started/primers/promises) introduction.

### General concept

```javascript
const exec = require('@record/zone').exec;
const fs = require('fs');

var fileContent = null;

// An application that does multiple unknown asynchronous operations
function application() {
  function readFile () {
    // Read file asynchronously
    fs.readFile('data.txt', function callback (data) {
      fileContent = data;
    });
  }
  // Wait for 1 second and then start a request
  setTimeout(readFile, 1000);
}

exec(application).then(
  function () {
    console.log('This file content has been read: ' + fileContent);
  }
).catch(
  function (error) {
    console.log('Either setTimeout or fs.readFile threw an uncatched error');
  }
);
```

### Run untrusted code asynchronously

```javascript
const vm = require('vm');

var sandbox = {
  setTimeout,
  setInterval,
  setImmediate,
  print: console.log
};

// Use exec with vm to run a program in an isolated environment
exec(
  function () {
    vm.runInNewContext(applicationCode, sandbox);
  }
).then(
  function () { console.log('Terminated successfully'); }
).catch(
  function (error) { console.log('An error occurred'); }
);
```

### Terminate a zone from outside

```javascript
var zone = exec(application);

// Cancel all pending events after 1 minute

setTimeout(function () {
  zone.cancel();
}, 60000);

// If node is stalling due to pending tasks in the operating zone,
// zone.cancel() will unstall it.
```

### Execute zones parallely

```javascript
Promise.all(
  exec(app1),
  exec(app2),
  exec(app3)
).then(
  function() { console.log('All tasks have concluded successfully'); }
).catch(
  function() { console.log('An error occurred'); }
);
```

### Non-blocking mode

```javascript
// Run a huge number of untrusted applications in non-blocking mode
for (var i = 0; i < applications.length; i++) {
  exec(applications[i], { blocking: false });
}

function application () {
  try {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "data.txt", false);
  } catch (error) {
    console.log(error); // Error: No permission to execute the synchronous system operation XMLHttpRequest.prototype.open()
  }

  try {
    var xhr = fs.readfileSync('data.txt');
  } catch (error) {
    console.log(error); // Error: No permission to execute the synchronous system operation fs.readFileSync()
  }
}

exec(application, { blocking: false });
```

## License

MIT © 2016 ([see full text](./LICENSE))