open-index/open-npm huggingface dataset:
npm package: @mm0202/cache-for-page
Description: * 短期間キャッシュ * ページごとのキャッシュ * SPAの場合はページが切り替わるまで持続
Author: mm0202
Latest version: 0.0.5

# cache-for-page
* 短期間キャッシュ
* ページごとのキャッシュ
* SPAの場合はページが切り替わるまで持続
npm package: @mm0202/include
Description: 主にFirestoreセキュリティルールを想定した、テキストファイルの結合ツールです。
Latest version: 0.0.1-9

# include

主にFirestoreセキュリティルールを想定した、テキストファイルの結合ツールです。

Firestoreセキュリティルールに限らず、Markdownなど、テキストファイルであれば何でも使えるので、ツール名は`include`としています。

使い方は、以下のページを参照してください。

[Firestoreセキュリティルール向けのビルド(ファイル結合)ツールを作ってみた！](https://mlog.wlaboratory.com/entry/category/release/package/include)
npm package: @mm0202/react-components
Description: react components
Author: mm0202
Latest version: 0.1.1

# react-components
npm react components package

# publish
`npm version ...` => publish by github workflow

## `npm version` options
check by `npm version -h`

# unpublish
`npm unpublish [<@scope>/]<pkg>[@<version>]` in 72 hours
npm package: @mm0202/react-float
Description: npm react components package
Latest version: 0.0.3

# react-float

## example code
```javascript
<Float top={'20px'} left={'40px'}>
  <div>sample</div>
</Float>

<Float top={'2rem'} right={'4rem'}>
  <div>sample</div>
</Float>

<Float bottom={'4vw'} left={'8vw'}>
  <div>sample</div>
</Float>

<Float bottom={'4vh'} right={'8vh'}>
  <div>sample</div>
</Float>
```
npm package: @mm0202/remote-file
Description: * 外部ファイルの取得 * ページごとのキャッシュ * SPAの場合はページのロードがあるまで持続。
Author: mm0202
Latest version: 0.0.4

# @mm0202/remote-file
* 外部ファイルの取得
* ページごとのキャッシュ
* SPAの場合はページのロードがあるまで持続。
npm package: @mm1995tk/declarative-validator
Description: A library, which helps you validate data declaratively
Author: @mm1995tk
Latest version: 0.1.1

# declarative-validator

## Introduction

"declarative-validator" is the library, which helps you validate data declaratively.

## Installation

```
npm i @mm1995tk/immutable-record-updater
```

## Usage

define alert variants to be used throughout the project.

```ts
// lib.ts
import { createValidationDefiner } from '@mm1995tk/declarative-validator';

export const defineValidation = createValidationDefiner('danger', 'warning', 'info');
```

define types.

```ts
// types.ts
import type { ConvertInvalidatorToValidator, Validate } from '@mm1995tk/declarative-validator';

export type User = {
  userId: string;
  password: string;
  confirmPassword: string;
};

export type UserAlertDef = { danger: 'required' | 'not-confirm-pass'; warning: 'too-short-password'; info: never };

export type ValidateUser = Validate<User, UserAlertDef>;

export type ConvertUserInvalidatorToValidator = ConvertInvalidatorToValidator<User, UserAlertDef>;
```

implement validation rules according to the types defined in types.ts.

```ts
// domain.ts
import { convertInvalidatorToValidator } from '@mm1995tk/declarative-validator';
import type { ConvertUserInvalidatorToValidator, ValidateUser } from './types';

const convertUserInvalidatorToValidator: ConvertUserInvalidatorToValidator = convertInvalidatorToValidator;

export const requiredUserId: ValidateUser = d =>
  !!d.userId || {
    variant: 'danger',
    name: 'required',
    properties: ['userId'],
  };

export const requiredPassword: ValidateUser = convertUserInvalidatorToValidator(
  d =>
    !d.password && {
      variant: 'danger',
      name: 'required',
      properties: ['password'],
    }
);

export const notConfirmedPassword: ValidateUser = d =>
  !d.password ||
  d.password === d.confirmPassword || {
    variant: 'danger',
    name: 'not-confirm-pass',
    properties: ['password', 'confirmPassword'],
  };

export const tooShortPassword: ValidateUser = d =>
  !d.password ||
  d.password.length > 8 || {
    variant: 'warning',
    name: 'too-short-password',
    properties: ['password'],
  };
```

use validator.

```ts
// your main file
import { notConfirmedPassword, requiredPassword, requiredUserId } from './domain';
import { defineValidation } from './lib';
import { User, UserAlertDef } from './types';

const validateUser = defineValidation<User, UserAlertDef>(requiredUserId, requiredPassword, notConfirmedPassword);

const user: User = { userId: 'xxx', password: 'abc', confirmPassword: 'abd' };
const result = validateUser(user);

console.log(result);
```
npm package: @mm2/bsmodal
Description: Bootstrap 4 modal for Angular4.
Author: Marcin Michalik
Latest version: 1.0.1

# bsmodal
[![Build Status](https://travis-ci.org/MarcinMichalik/bsmodal.svg?branch=master)](https://travis-ci.org/MarcinMichalik/bsmodal)
[![codecov](https://codecov.io/gh/MarcinMichalik/bsmodal/branch/master/graph/badge.svg)](https://codecov.io/gh/MarcinMichalik/bsmodal)
[![npm version](https://badge.fury.io/js/bsmodal.svg)](http://badge.fury.io/js/bsmodal)
[![devDependency Status](https://david-dm.org/MarcinMichalik/bsmodal/dev-status.svg)](https://david-dm.org/MarcinMichalik/bsmodal?type=dev)
[![GitHub issues](https://img.shields.io/github/issues/MarcinMichalik/bsmodal.svg)](https://github.com/MarcinMichalik/bsmodal/issues)
[![GitHub stars](https://img.shields.io/github/stars/MarcinMichalik/bsmodal.svg)](https://github.com/MarcinMichalik/bsmodal/stargazers)
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/MarcinMichalik/bsmodal/master/LICENSE)

## Demo
https://MarcinMichalik.github.io/bsmodal/

## Table of contents

- [About](#about)
- [Installation](#installation)
- [Documentation](#documentation)
- [Development](#development)
- [License](#license)

## About

Bootstrap 4 modal for Angular4. Rewritten from 
[ng-bootstrap](https://github.com/ng-bootstrap) [@ng-bootstrap/ng-bootstrap](https://github.com/ng-bootstrap/ng-bootstrap) 
and adapted for use with angular 4

## Installation

Install through npm:
```
npm install --save bsmodal
```

Then include in your apps module:

```typescript
import { Component, NgModule } from '@angular/core';
import { BsModalModule } from 'bsmodal';

@NgModule({
  imports: [
    BsModalModule.forRoot()
  ]
})
export class MyModule {}
```

You may also find it useful to view the [demo source](https://github.com/MarcinMichalik/bsmodal/blob/master/demo/demo.component.ts).

### Usage without a module bundler
```
<script src="node_modules/bsmodal/bundles/bsmodal.umd.js"></script>
<script>
    // everything is exported bsmodal namespace
</script>
```

## Documentation
All documentation is auto-generated from the source via [compodoc](https://compodoc.github.io/compodoc/) and can be viewed here:
https://MarcinMichalik.github.io/bsmodal/docs/

## Development

### Prepare your environment
* Install [Node.js](http://nodejs.org/) and NPM
* Install local dev dependencies: `npm install` while current directory is this repo

### Development server
Run `npm start` to start a development server on port 8000 with auto reload + tests.

### Testing
Run `npm test` to run tests once or `npm run test:watch` to continually run tests.

### Release
* Bump the version in package.json (once the module hits 1.0 this will become automatic)
```bash
npm run release
```

## Credits

Rewritten from [ng-bootstrap](https://github.com/ng-bootstrap) [@ng-bootstrap/ng-bootstrap](https://github.com/ng-bootstrap/ng-bootstrap) 
and adapted for use with angular 4

## License

MIT
npm package: @mmahrous/recorder-js
Description: Record audio in your browser
Author: Isaac Snow
Latest version: 1.0.7

# Recorder.js

An easy to use audio recorder with on Matt Diamond's
[recorderjs](https://github.com/mattdiamond/Recorderjs) at the core.

## Installation

```
yarn add recorder-js # or npm install recorder-js --save
```

## Usage

```javascript
import Recorder from 'recorder-js';

const audioContext =  new (window.AudioContext || window.webkitAudioContext)();

const recorder = new Recorder(audioContext, {
  // An array of 255 Numbers
  // You can use this to visualize the audio stream
  // If you use react, check out react-wave-stream
  onAnalysed: data => console.log(data),
});

let isRecording = false;
let blob = null;

navigator.mediaDevices.getUserMedia({audio: true})
  .then(stream => recorder.init(stream))
  .catch(err => console.log('Uh oh... unable to get stream...', err));

function startRecording() {
  recorder.start()
    .then(() => isRecording = true);
}

function stopRecording() {
  recorder.stop()
    .then(({blob, buffer}) => {
      blob = blob;

      // buffer is an AudioBuffer
    });
}

function download() {
  Recorder.download(blob, 'my-audio-file'); // downloads a .wav file
}
```

### Cool stuff that helped me out

- https://github.com/mattdiamond/Recorderjs
- https://github.com/cwilso/AudioRecorder
- https://codepen.io/zapplebee/pen/gbNbZE
npm package: @mmailaender/convex-better-auth-svelte
Description: A lightweight **Svelte/SvelteKit** adapter for [`get-convex/better-auth`](https://github.com/get-convex/better-auth).   It makes authentication **idiomatic**, **type-safe**, and **SSR-ready** in your Convex app.
Author: Micha Mailaender
Latest version: 0.7.3

# Convex Better Auth – Svelte Adapter

A lightweight **Svelte/SvelteKit** adapter for [`get-convex/better-auth`](https://github.com/get-convex/better-auth).  
It makes authentication **idiomatic**, **type-safe**, and **SSR-ready** in your Convex app.

---

## Getting started

### Option 1 — Ready-to-ship components _(recommended)_

Start with production-ready **Auth and Organization components** built on top of Convex Better Auth.  
All source code is **copied into your project (shadcn-style)** — you own and control every line.

- Includes full sign-in, sign-up, profile, and organization flows
- Choose what you need: user management only, user + organization, or both
- Enable or disable features through simple toggles or by editing the code
- Fully editable and themeable through your design system
- Saves weeks of setup time while keeping complete flexibility

**Docs:** [Getting started →](https://etesie.dev/docs/auth/02-getting-started/01-sveltekit)  
**Source:** [github.com/mmailaender/Convex-Better-Auth-UI →](https://github.com/mmailaender/Convex-Better-Auth-UI)

<picture>
  <source srcset="./bannerDark.webp" media="(prefers-color-scheme: dark)">
  <source srcset="./banner.webp" media="(prefers-color-scheme: light)">
  <img src="./banner.webp" alt="Auth components preview">
</picture>

---

### Option 2 — Build from scratch

Use the `convex-better-auth-svelte` adapter to design every flow and UI element yourself.  
We recommend choosing this path only if you have **highly specific requirements** where even the modular components aren’t a good starting point —  
for example, experimental onboarding flows or a custom multi-tenant model.

- Start from the raw hooks and helpers of `convex-better-auth-svelte`
- Wire up sign-in, sign-up, orgs, and sessions manually
- Best for projects with unique data models or unconventional UX

**Docs:** [SvelteKit integration →](https://convex-better-auth.netlify.app/framework-guides/sveltekit)

---

## Why this adapter

- Svelte-friendly API for Convex Better Auth
- Zero lock-in — your Convex, your data, your UI
- Works standalone or with ready-to-ship components
- Type-safe end-to-end integration via Convex

---

## License

MIT
npm package: @mmajewski/store-devtools
Description: Developer tools for @ngrx/store
Latest version: 3.2.8

---
# This repository is for version 3.x of of @ngrx/store-devtools.
# [Click here for the latest version (4.x)](https://github.com/ngrx/platform)
---

# @ngrx/store-devtools
Devtools for [@ngrx/store](https://github.com/ngrx/store).

[![Join the chat at https://gitter.im/ngrx/store](https://badges.gitter.im/ngrx/store.svg)](https://gitter.im/ngrx/store?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

## Installation
`npm install @ngrx/store-devtools@3.2.4 --save`


## Instrumentation
### Instrumentation with the Chrome / Firefox Extension (Preferred)

1. Download the [Redux Devtools Extension](http://zalmoxisus.github.io/redux-devtools-extension/)

2. In your root Angular module import `StoreDevtoolsModule.instrumentOnlyWithExtension()`:

  ```ts
  import { StoreDevtoolsModule } from '@ngrx/store-devtools';

  @NgModule({
    imports: [
      StoreModule.provideStore(rootReducer),
      // Note that you must instrument after importing StoreModule
      StoreDevtoolsModule.instrumentOnlyWithExtension({
        maxAge: 5
      })
    ]
  })
  export class AppModule { }
  ```

### Instrumentation with a Custom Monitor
To instrument @ngrx/store and use the devtools with a custom monitor you will need to setup the
instrumentation providers using `instrumentStore()`:

```ts
import {StoreDevtoolsModule} from '@ngrx/store-devtools';

@NgModule({
  imports: [
    StoreModule.provideStore(rootReducer),
    // Note that you must instrument after importing StoreModule
    StoreDevtoolsModule.instrumentStore({
      maxAge: 5,
      monitor: monitorReducer
    })
  ]
})
export class AppModule { }
```

See [@ngrx/store-log-monitor](https://github.com/ngrx/store-log-monitor) for an example monitor built for Angular 2

## Contributing

Please read [contributing guidelines here](https://github.com/ngrx/store-devtools/blob/master/CONTRIBUTING.md).
npm package: @mmalecki/changes-stream
Description: Simple module that handles getting changes from couchdb
Author: Jarrett Cruger
Latest version: 1.0.6

# changes-stream

[![build status](https://secure.travis-ci.org/jcrugzz/changes-stream.png)](http://travis-ci.org/jcrugzz/changes-stream)

A fault tolerant changes stream with builtin retry HEAVILY inspired by
[`follow`][follow]. This module is a [`Readable` Stream][readable] with all of
the fun stream methods that you would expect.

## install

```sh
npm install changes-stream --save
```

## Options

So `changes-stream` can take a fair bit of options in order so that you can
fully customize your `_changes` request. They include the following:

```js
{
  db: 'http://localhost:5984/my_db', // full database URL
  feed: 'continuous', // Can also be longpoll technically but not currently implemented
  filter: 'docs/whatever', // Can be a defined couchdb view, a local filter function or an array of IDs
  inactivity_ms: 60 * 60 * 1000, // time allow inactivity before retrying request
  timeout: 2 * 60 * 1000, // http timeout
  since: 0, // update sequence to start from, 'now' will start it from latest
  heartbeat: 30 * 1000, // how often we want couchdb to send us a heartbeat message
  style: 'main_only', // specifies how many revisions returned all_docs would return leaf revs
  include_docs: false // whether or not we want to return the full document as a property
}
```

## Example

```js
var ChangesStream = require('changes-stream');

var changes = new ChangesStream('http://localhost:5984/my_database');

changes.on('readable', function () {
  var change = changes.read();
});

```
[follow]: https://github.com/iriscouch/follow
[readable]: http://nodejs.org/api/stream.html#stream_class_stream_readable
npm package: @mmankos/geodistance
Description: Lightweight, zero-dependency, ES module utility for calculating the great-circle distance between two latitude/longitude coordinates, in kilometers, using the Haversine formula.
Author: Matej Maňkoš
Latest version: 0.1.0

# geodistance
Lightweight, zero-dependency, ES module utility for calculating the great-circle distance between two latitude/longitude coordinates, in kilometers, using the Haversine formula.

## Instalation
```
npm install @mmankos/geodistance
```

## Usage
```
import { geodistance } from "@mmankos/geodistance";

console.log(
	geodistance(
		{ lat: 48.71395, lon: 21.25808 },
		{ lat: 48.7172272, lon: 21.2496774 },
	),
);
```
npm package: @mmankos/ttfmes
Description: A tootoot.fm scraper for cities, profiles (establishments, artists), but also individual events.
Author: Matej Maňkoš
Latest version: 0.1.0

# ttfmes - tootoot.fm Event Scraper
A tootoot.fm scraper for cities, profiles (establishments, artists), but also individual events.

## ⚠️ Important Notice
When using this package to scrape:
- Always respect the [robots.txt](https://en.wikipedia.org/wiki/Robots.txt) rules of the [target website](https://tootoot.fm/robots.txt).
- Only scrape data you are authorized to access.
- Excessive or unauthorized scraping may violate terms of service.
- Use the `concurrency` and the `minTime` option responsibly to avoid overloading servers.

## Instalation
```
npm install @mmankos/ttfmes
```

## Usage
```
import { Ttfmes } from "@mmankos/ttfmes";

/**
 * Create a new Ttfmes instance to scrape events.
 *
 * scrapeType options:
 *   - "city": Scrape all events in a specific city.
 *       Required params: { cityName: string, latEst: number, lonEst: number }
 *   - "profile": Scrape events from a specific Facebook profile.
 *       Required params: { profileID: string }
 *   - "event": Scrape a specific event by its ID.
 *       Required params: { eventID: string }
 *
 * Optional configuration (options):
 *   - concurrency: number — Maximum parallel requests (default: 5)
 *   - minTime: number — Minimum delay (ms) between requests (default: 200)
 *   - jitter: number — Random variation in delay (0.3 = ±30%, default: 0.3)
 *   - outputFile: string|null — Path to save results as JSON (default: null, no file saved)
 */

// Example 1: Scrape city events
const ttfmesCity = new Ttfmes("city", {
	cityName: "Košice",
	latEst: 48.7172272,
	lonEst: 21.2496774,
}, {
	concurrency: 10,
	minTime: 100,
	jitter: 0.2,
	outputFile: "city-events.json",
});

// Example 2: Scrape events from a profile
const ttfmesProfile = new Ttfmes("profile", {
	profileID: "61cadd296e298b03d8d4ad22",
}, {
	concurrency: 5,
	outputFile: "profile-events.json",
});

// Example 3: Scrape a specific event
const ttfmesEvent = new Ttfmes("event", {
	eventID: "690916c356061e415d53fb07",
});

// Run the scraping
(async () => {
	console.dir(await ttfmesCity.scrape(), { depth: null });
	console.dir(await ttfmesProfile.scrape(), { depth: null });
	console.dir(await ttfmesEvent.scrape(), { depth: null });
})();
```
npm package: @mmanos/swing-js
Description: A lightweight collection of javascript components to help reduce the need for bloated 3rd-party libraries.
Author: Mark Manos
Latest version: 2.1.4

Swing.js
========

Swing.js is a lightweight collection of javascript components to help reduce the need for bloated 3rd-party libraries. It's primary goals are:

* Keeping filesizes small where possible.
* Allowing components to be loaded independently (only load what you need).
* Allowing components to be loaded in any sequence.
* Supporting all modern browsers.

Components
----------

The current list of components:

* **alert.js** - HTML component for showing alert or confirm prompts.
* **asset.js** - Utility to dynamically load javascript and css files.
* **collection.js** - Utility to store and work with a set of models.
* **cookie.js** - Utility to manage browser cookies.
* **core.js** - Common helper functions used by several components.
* **date.js** - Utility to manipulate and display dates.
* **dom.js** - jQuery-like syntax for working with DOM elements.
* **dropdown.js** - HTML component to render dropdown menus.
* **events.js** - Utility to normalize and work with browser and custom events.
* **messenger.js** - HTML component for rendering status messages in a browser.
* **modal.js** - HTML component to render modal dialog boxes.
* **model.js** - Utility to work with database models.
* **paginate.js** - HTML component for rendering pagination links.
* **promise.js** - Utility that implements the common promise pattern.
* **require.js** - Utility to manage component dependencies.
* **resizer.js** - Utility to help resize DOM elements to full page height.
* **resource.js** - Utility to work with database resources.
* **validate.js** - Utility and HTML component to help validate form input and render error messages.
npm package: @mmarchini/observe
Description: Inspector Protocol made easy
Author: mmarchini@netflix.com
Latest version: 3.1.0

# Observe 🕵‍♀

[![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/mmarchini-oss/node-observe/CI/develop?style=flat-square)](https://github.com/mmarchini-oss/node-observe/actions?query=branch%3Adevelop)
[![Codecov branch](https://img.shields.io/codecov/c/github/mmarchini-oss/node-observe/develop?style=flat-square)](https://codecov.io/github/mmarchini-oss/node-observe)
[![npm](https://img.shields.io/npm/v/@mmarchini/observe?style=flat-square)](https://www.npmjs.com/package/@mmarchini/observe)

CLI tool to run common Inspector Protocol tasks on remote Node.js processes.

## Why

There are several tools to interact with the Inspector Protocol. The 
[`Inspector API`](https://nodejs.org/api/inspector.html) on Node.js core allows 
users to automate inspector protocol tasks, but it only interacts with the 
protocol within a Node.js process (it doesn't connect to external processes). 
[`node-inspect`](https://github.com/nodejs/node-inspect) can connect to
external processes, but since it's a REPL which doesn't allow for automation. 

[chrome-remote-interface](https://github.com/cyrus-and/chrome-remote-interface)
addresses both issues, but users need to know how to use the inspector protocol
to interact with it. Observe addresses that by providing shortcuts to common
tasks used in production, such as taking snapshots or profiles. This allows
users to get insights on their running applications without need to redeploy.

## Install

```console
$ npm install @mmarchini/observe
```

Or, use npx to get insights with a single command:

```console
$ npx -q @mmarchini/observe ...
```

> Note: since the result of `observe` is redirected to stdout, it's recommended
> to pass `-q` to `npx` to prevent unwanted lines in the output.

## Usage

To execute a command, run `npx -q @mmarchini/observe [command] [options]`. For
a full list of commands and options, run `npx -q @mmarchini/observe -h`.
Available commands are:

  * `heap-profile` will take a Heap Profile
  * `heap-snapshot` will take a Heap Snapshot
  * `cpu-profile` will take a CPU Snapshot

By default the result will be outputted to stdout, so it can be piped to
another process if needed without touching the filesystem (encryption, upload
to another server, compression, etc.). `--file` will save the result to the
filesystem instead.

All commands require at least one option: `-p <pid>` or `-h <host>`/`-P <port>`.

- `-p`: will start the inspector protocol on the remote process `<pid>` by sending a `SIGUSR1` signal to the process.
- `-h/-P`: will attach to the inspector protocol on this remote or local host.
Important, the app should already start debugger listening on the expected port.


Each command might also have their own options. For example, `heap-profile`
accepts a `-d <duration>` option to determine for how long(in seconds) the profiler should
run. `npx -q @mmarchini/observe command -h` will show all available options for
the command.
npm package: @mmasood/chance-sdk
Description: 🛠 An SDK for building applications on top of Chance.
Latest version: 0.0.18

# Array SDK

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/Array/sdk.git
```

Move into the sdk working directory

```sh
cd sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @mmasood/contract-list-schema
Description: [![npm](https://img.shields.io/npm/v/@mmasood/contract-list-schema)](https://unpkg.com/@mmasood/contract-list-schema@latest/)
Author: PoolTogether Inc.
Latest version: 0.1.6

# `contract-list-schema`

[![npm](https://img.shields.io/npm/v/@mmasood/contract-list-schema)](https://unpkg.com/@mmasood/contract-list-schema@latest/)

A package for maintaining contract deployments & ABIs.

## Notes

With hardcoded addresses in a schema, when swapping out a contract address there will be a period of time when this package doesn't match live chain data.

## Maintaining

### **When swapping or removing a contract**

- Bump package **MAJOR** version
- Add contract ABIs (if necessary)
- Update relevant contracts in `contracts`

### **When deploying a new contract**

- Bump package **MINOR** version
- Add contract ABIs (if necessary)
- Add contracts to `contracts` (where necessary)

### **When adding a new tag**

- Bump package **MINOR** version
- Add tag to `tags`
- Add tag to relevant Contracts in `contracts`

#### Local use

In `contract-list-schema`
`yalc publish --push`

In the repo you want to use `contract-list-schema`
`yalc add contract-list-schema`
npm package: @mmasood/etherplex
Description: Multicall with Ethers.js
Author: Brendan Asselstine
Latest version: 1.1.7

# Etherplex

[Ethers.js](https://github.com/ethers-io/ethers.js) + [Multicall](https://github.com/makerdao/multicall)

Batch multiple Ethereum JSON RPC calls into a single RPC call.

Features:

- Uses the Multicall contract when available
- Falls back to individual RPC requests when not available

# Setup

```bash
$ yarn add @mmasood/etherplex
```

# Usage

1. First create a contract wrapper using the `contract` function
2. Chain calls on the contract and pass the results into the `batch` function

```javascript
import { ethers } from 'ethers'
import { batch, contract } from '@mmasood/etherplex'

// Assuming ERC20Abi is an ABI
// Assume the DAI_ADDRESS and USDC_ADDRESS constants are Ethereum addresses

let daiContract = contract('Dai', ERC20Abi, DAI_ADDRESS)

// Alternatively, you can just pass in an ethers.Contract instance
let ethersContract = new ethers.Contract(USDC_ADDRESS, ERC20Abi, provider)
let usdcContract = contract('Usdc', ethersContract)

let results = await batch(
  ethers.getDefaultProvider(),
  daiContract
    .balanceOf(address)
    .totalSupply(),
  usdcContract
    .balanceOf(address)
    .totalSupply()
)
/*
Will yield:

{
  Dai: {
    'balanceOf(address)': [BigNumber],
    balanceOf: [BigNumber],
  },
  Usdc: {
    'balanceOf(address)': [BigNumber],
    balanceOf: [BigNumber],
  }
}

*/
```
npm package: @mmasood/fixed-point
Description: An extremely simple fixed point math library
Author: Brendan Asselstine
Latest version: 1.0.2

# Fixed Point Math

[![CircleCI](https://circleci.com/gh/pooltogether/fixed-point.svg?style=svg)](https://circleci.com/gh/pooltogether/fixed-point)

This is a very simple fixed point math library.

# Setup

To install use yarm or npm and install `@mmasood/fixed-point`:

```sh
$ yarn add @mmasood/fixed-point
```

```sh
$ npm i @mmasood/fixed-point
```

# Development

Install the dependencies:

```sh
$ yarn
```

Now run the tests:

```sh
$ yarn test
```
npm package: @mmasood/hardhat-deploy-markdown-export
Description: This plugin turns your `hardhat-deploy` deployments into a nice markdown file.
Author: PoolTogether Inc.
Latest version: 0.3.7

# hardhat-deploy-markdown-export

This plugin turns your `hardhat-deploy` deployments into a nice markdown file.

# Usage

First install the package:

```
yarn add @mmasood/hardhat-deploy-markdown-export
```

Now add it to hardhat.config.js:

```
require('@mmasood/hardhat-deploy-markdown-export')
```

Now export your deployments:

```
hardhat deploy-markdown-export --help
```
npm package: @mmasood/hooks
Description: Useful hooks for PoolTogether applications
Author: PoolTogether Inc.
Latest version: 2.1.6

# PoolTogether hooks

A collection of various useful hooks used across the PoolTogether applications.

## NOTE

Make sure you keep `peerDependencies` and `devDependencies` versions in sync!

## How to use

1. `yarn add @mmasood/utilities`
2. `import * as Hooks from '@mmasood/hooks'` OR `import { hookYouWantToUse } from '@mmasood/hooks'`
3. Ensure you call any required init functions early

## Local development

Local development works best with yalc
`yarn global add yalc`

In pooltogether-hooks:
`yarn start`

In the app you're importing pooltogether-hooks:
`yalc link @mmasood/hooks`

When you save changes inside the hooks `src` folder, the package will rebuild and be pushed to all other projects that have run `yalc link @mmasood/hooks`.

## TODO:

- jest tests
npm package: @mmasood/owner-manager-contracts
Description: PoolTogether Owner Manager Contracts
Latest version: 1.1.2

# PoolTogether Owner Manager Contracts
![Tests](https://github.com/pooltogether/owner-manager-contracts/actions/workflows/main.yml/badge.svg)
[![Coverage Status](https://coveralls.io/repos/github/pooltogether/owner-manager-contracts/badge.svg?branch=master)](https://coveralls.io/github/pooltogether/owner-manager-contracts?branch=master)

Abstract ownable and manageable contracts that can be inherited by other contracts to provide a basic access control mechanism, where
there is an owner and a manager that can be granted exclusive access to specific functions.

The `owner` is first set by passing the address of the `initialOwner` to the Ownable constructor.
 
The owner account can be transferred through a two steps process:
1. The current `owner` calls `transferOwnership` to set a `pendingOwner`
2. The `pendingOwner` calls `acceptOwnership` to accept the ownership transfer

The manager account needs to be set using `setManager`.

This module is used through inheritance. It will make available the modifiers `onlyManager`, `onlyOwner` and `onlyManagerOrOwner`, which can be applied to your functions to restrict their use to the manager and/or the owner.

## Usage
This repo is setup to compile (`nvm use && yarn compile`) and successfully pass tests (`yarn test`)


# Installation
Install the repo and dependencies by running:
`yarn`

## Deployment
These contracts can be deployed to a network by running:
`yarn deploy <networkName>`

## Verification
These contracts can be verified on Etherscan, or an Etherscan clone, for example (Polygonscan) by running:
`yarn etherscan-verify <ethereum network name>` or `yarn etherscan-verify-polygon matic`


# Testing
Run the unit tests locally with:
`yarn test`

## Coverage
Generate the test coverage report with:
`yarn coverage`
        "test": "yarn clean && HIDE_DEPLOY_LOG=true && yarn hint && hardhat test"