open-index/open-npm huggingface dataset:
npm package: @script-savvy/playwright
Description: A Comprehensive Test Automation Framework Based on Playwright. Intuitive. Efficient. Made simple.
Author: Luca Ahumada
Latest version: 1.0.1

# Script Savvy: end-to-end Automation Framework

<p align="center">
  <img src="https://www.vectorlogo.zone/logos/nodejs/nodejs-icon.svg"/>
  <img src="https://www.vectorlogo.zone/logos/typescriptlang/typescriptlang-icon.svg"/>
  <img src="https://www.vectorlogo.zone/logos/visualstudio_code/visualstudio_code-icon.svg"/>
</p>
<p align="center">
  <img src="https://www.vectorlogo.zone/logos/google_chrome/google_chrome-icon.svg"/>
  <img src="https://www.vectorlogo.zone/logos/firefox/firefox-icon.svg"/>
  <img src="https://www.vectorlogo.zone/logos/microsoft_edge/microsoft_edge-icon.svg"/>
  <img src="https://www.vectorlogo.zone/logos/apple_safari/apple_safari-icon.svg"/>
</p>

## Structure

```
├── config
│   ├── data
│   │   ├── data.json
│   ├── environment
│   │   ├── configLoader.ts
│   │   ├── testManager.ts
├── logs
├── pageObjects
│   ├── LoginPage.ts
│   └── ProfilePage.ts
├── performance
│   ├── runner.js
│   └── test-scenario.js
├── reports
│   ├── allure-reports
│   ├── artifacts
│   ├── html-reports
│   ├── lighthouse
├── src
│   ├── api
│   │   └── client.ts
│   ├── core
│   │   ├── dataHandler.ts
│   │   ├── logger.ts
│   │   └── testHandler.ts
│   ├── http
│   │   ├── httpClient.ts
│   │   └── axiosHttpClient.ts
│   └── authConfig.ts
├── tests
│   ├── login.test.ts
│   ├── profile.test.ts
│   └── api
│   └── example.test.ts
├── utils
│   ├── lighthouse.js
│   └── testConfig.ts

```
npm package: @script47/local-storage
Description: A handy wrapper around localStorage.
Author: Script47
Latest version: 1.1.0

# `@script47/local-storage`

A handy wrapper around localStorage.

- What you see is what you get; Simple and clean wrapper, nothing extra
- Respects types; no longer do you have to worry about casting items after retrieving them
- Custom events on actions; listen to events on `set`, `remove`, and `clear`

**Note:** This wrapper will not work if the `localStorage` API is not available.

## Contents

- [Installation](#installation)
- [API](#api)
- [Playground](https://jsfiddle.net/m2ewytr6/)

## Installation

#### via NPM

```shell
npm i @script47/local-storage
```

#### via CDN

```html
<script src="https://unpkg.com/@script47/local-storage"></script>
```

## API

#### Set or get a key using the quick accessor:

```javascript
ls(key, value);
```

#### Example

```javascript
ls('key', 'value'); // true
// or
ls({
   key: 'value'
});
ls('key'); // 'value'
```

---

#### Set a local storage item:

```javascript
set(key, value);
```

#### Example

```javascript
ls.set('key', 'value'); // true
// or
ls.set({
    key: 'value'
})
```

---

#### Get a local storage item:

```javascript
get(key, def = undefined);
```

#### Example

```javascript
ls.set('key', 'value'); // true
ls.set('key', 'default value'); // 'value'
ls.get('i-dont-exist', 'default value'); // 'default value'
ls.get('i-dont-exist'); // undefined
```

---

#### Remove a local storage item:

```javascript
remove(key);
```

#### Example

```javascript
ls.set('key', 'value'); // true
ls.get('key'); // 'value'
ls.remove('key'); // true
// or
ls.remove(['key']);
ls.get('key'); // undefined
```

---

#### Clear local storage completely:

```javascript
clear();
```

#### Example

```javascript
ls.set('key', 'value'); // true
ls.set('another-key', 'another-value'); // true
ls.clear(); // true
ls.get('key'); // undefined
ls.get('another-key'); // undefined
```

---

#### Listen to events attached to localStorage actions by the package:

```javascript
on(type, listener);
```

#### Example

```javascript
ls.on('ls.set', ({detail}) => {
    console.log(`${detail.key}=${detail.value}`);
});

ls.on('ls.remove', ({detail}) => {
    console.log(`${detail.key} was removed.`);
});

ls.on('ls.clear', () => {
    console.log('localStorage was cleared.');
})

ls.set('name', 'John Doe');
ls.set('age', 35);

setTimeout(() => {
    ls.remove('name');

    setTimeout(() => {
        ls.clear();
    }, 2500);
}, 2500);
```
npm package: @scriptabuild/awaitable
Description: Utility to turn a nodejs style asyncronous function (ie. one that takes a function(err, result) callback parameter) into a function that returns a promise instead. (Since such functions can be await'ed.)
Author: Arjan Einbu
Latest version: 1.0.1

# awaitable

Utility to turn a nodejs style asyncronous function (ie. one that
takes a function(err, result) callback parameter) into a function
that returns a promise instead. (Since such functions can be await'ed.)

Example:
```javascript
let fileContents = await awaitable(cb => fs.readFile(file, options, cb);
```

Example creating an async function:
```javascript
async function readFile(file, options) {
	return awaitable(cb => fs.readFile(file, options, cb));
}

let fileContents = await readFile(file, options);
```

Example creating an async lambda expression:
```javascript
let readFile = async(file, options) => awaitable(cb => fs.readFile(file, options, cb);

let fileContents = await readFile(file, options);
```
npm package: @scriptabuild/eventstore
Description: A simple filebased eventsourced store
Author: Arjan Einbu
Latest version: 1.3.0

## EventStore

A simple filebased eventsourced data store for node.js.

Instead of storing the current state of our data, eventsourcing lets us record our intention while creating/manipulating our data.

Eventstore is available as a npm package.

```bash
npm install @scriptabuild/eventstore
```
[![npm version](https://badge.fury.io/js/%40scriptabuild%2Feventstore.svg)](https://badge.fury.io/js/%40scriptabuild%2Feventstore)


Documentations is still a work in progress. Look at [our github pages](https://scriptabuild.github.io/eventstore/) or in [the `/docs` folder](./docs) to see what we've got so far...

## Main functionality of Eventstore
- It runs in-process in your javascript application, so no installation other than pulling in the npm package is neccessary.
- In node.js, it uses the file system for persistance by default. The data is stored in sequentilly numbered json files in the folder you (the developer) specifies.
- Eventstore will also run in other environments, like in the browser, but you will need to configure an alternative to the file system for persistance.
- Transactional batches. A batch either runs to completion and is then committed and stored. If the batch fails or for other reasons is aborted, the state is rolled back to the state at the beginning of the batch operation. (Ie. a batch is either fully completed, or not recorded at all.)
- Repeatable read isolation level.
- Concurrency. Will retry concurrent batches.
- All events are written to Eventstore in order, so that replay always will give the same result.

[Check out the tutorial to get started.](https://scriptabuild.github.io/eventstore/tutorial.html)

## Compatibility

Travis runs the test suite (mocha) in the latest version of node.js, as well as in v7.6.0.

[![Build Status](https://travis-ci.org/scriptabuild/eventstore.svg?branch=master)](https://travis-ci.org/scriptabuild/eventstore)
npm package: @scriptabuild/readonlyproxy
Description: Creates a wrapper that looks like the object it wraps, but only provides read only access.
Author: Arjan Einbu
Latest version: 1.0.0

# readonlyproxy

Creates a wrapper that looks like the object it wraps, but only provides read only access.

```bash
npm install @scriptabuild/readonlyproxy
```

Example usage:
```javascript
const wrapInReadOnlyProxy = require("@scriptabuild/readonlyproxy");

let originalObject = { /* lots of properties and nested properties */ };
let wrappedObject = wrapInReadOnlyProxy(originalObject);

// Its not possible to change value on any propery via wrappedObject.
// If you change a property on originalObject, that change is
// immediatly visible through wrappedObject.
```