# epitelete

> PERF Middleware for Editors in the Proskomma Ecosystem

Latest version **0.2.20** (published 2023-07-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install epitelete
pnpm add epitelete
yarn add epitelete
bun add epitelete
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.20 |
| Published | 2023-07-15 |
| First published | 2022-05-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 108.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Mark Howe |
| Maintainers | mvahowe, abelpz, danielc-n |

## Links

- npm: https://www.npmjs.com/package/epitelete
- Repository: https://github.com/Proskomma/epitelete
- Homepage: https://github.com/Proskomma/epitelete#readme
- Issues: https://github.com/Proskomma/epitelete/issues
- npm.io page: https://npm.io/package/epitelete

## Dependencies (6)

- [rfdc](https://npm.io/package/rfdc.md) ^1.3.0
- [base-64](https://npm.io/package/base-64.md) ^1.0.0
- [pure-uuid](https://npm.io/package/pure-uuid.md) ^1.6.3
- [@babel/core](https://npm.io/package/@babel/core.md) ^7.19.0
- [@findr/perf](https://npm.io/package/@findr/perf.md) ^1.0.3-beta.17
- [proskomma-json-tools](https://npm.io/package/proskomma-json-tools.md) ^0.7.1

## Recent versions

- 0.2.20 (latest) — 2023-07-15
- 0.2.20-beta.5 (beta) — 2023-06-15
- 0.2.15-dev.1 (dev) — 2022-11-09
- 0.2.11 (alpha) — 2022-11-03
- 0.2.20-beta.4 — 2023-06-15
- 0.2.20-beta.3 — 2023-06-14
- 0.2.20-beta.2 — 2023-06-14
- 0.2.20-beta.1 — 2023-05-12
- 0.2.19 — 2023-04-05
- 0.2.18 — 2023-02-03
- 0.2.16 — 2023-02-01
- 0.2.16-rc.1 — 2023-02-01
- 0.2.15 — 2022-12-23
- 0.2.14 — 2022-11-07
- 0.2.13 — 2022-11-05
- … 25 more at https://npm.io/package/epitelete/versions

## README

# Epitelete

<p align="center"><img src="https://socialify.git.ci/Proskomma/epitelete/image?description=1&amp;font=Inter&amp;issues=1&amp;language=1&amp;owner=1&amp;pattern=Plus&amp;pulls=1&amp;theme=Light" alt="project-image"></p>

## Installation

  

Epitelete is available as an npm package.

```

npm install epitelete

```

## Usage

<details>
  <summary>Table of Contents</summary>
  <ol>
    <li>
      <a href="#proskomma-mode">Proskomma mode</a>
      <ul>
        <li><a href="#pk-example">Example</a></li>
        <li><a href="#pk-howto">How to</a></li>
      </ul>
    </li>
    <li>
      <a href="#standalone-mode">Standalone mode</a>
      <ul>
        <li><a href="#ht-example">Example</a></li>
        <li><a href="#ht-howto">How to</a></li>
      </ul>
    </li>
  </ol>
</details>

### Proskomma mode

Uses a [proskomma](https://github.com/mvahowe/proskomma-js) instance to handle [PERF documents](https://github.com/Proskomma/proskomma-json-validator/blob/main/test/test_data/fra_lsg_jon_document.json).

<i id="pk-example"></i>
#### Example

```js
import Epitelete from "epitelete"
import Proskomma from "proskomma";

const proskomma = new Proskomma();
proskomma.loadSuccinctDocSet(succintJson);

const docSetId = "doc_set_id";
const epitelete = new Epitelete({ proskomma, docSetId });

const bookCode = "GEN";
let docPerf = epitelete.readPerf(bookCode);

const sequenceId = docPerf.mainSequence;
const sequence = docPerf.sequences[sequenceId];

//...make changes in sequence

docPerf = epitelete.writePerf(bookCode,sequenceId,sequence);
docPerf = epitelete.undoPerf(bookCode);
docPerf = epitelete.redoPerf(bookCode);
```

[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/olsc55)

<i id="pk-howto"></i>
#### How to

**1. Install proskomma:**

```
npm install proskomma
```

**2. Instantiate and set Proskomma:**

```js

import Proskomma from "proskomma";

const proskomma = new Proskomma();

proskomma.loadSuccinctDocSet(succintJson);

...
```

`succintJson` : ...

**3. Instantiate Epitelete:**

```js

import Epitelete from "epitelete"

...

const docSetId = "doc_set_id";

const epitelete = new Epitelete({ proskomma, docSetId });

...
```

**4. Get a document:**

```js
...

const bookCode = "GEN";

let docPerf = epitelete.readPerf(bookCode);

...
```

`.readPerf()`: gets a document from cache or by fetching from the proskomma instance.

`docPerf`: copy of the document that has been saved in cache. [example docPerf content](https://github.com/Proskomma/proskomma-json-validator/blob/main/test/test_data/fra_lsg_jon_document.json)

**5. Make changes to some `docPerf` sequence:**

```js
...

const sequenceId = docPerf.mainSequence;

const sequence = docPerf.sequences[sequenceId];

//...make changes in sequence

...
```

**6. Persist changes to epitelete s history:**

```js
...

docPerf = epitelete.writePerf(bookCode,sequenceId,sequence);

...
```

`.writePerf()`: creates a copy of last saved document, updates it with the changed sequence and saves it in memory.

**7. Undo/Redo your changes to docPerf:**

```js
...

docPerf = epitelete.undoPerf(bookCode);

docPerf = epitelete.redoPerf(bookCode);

...
```

`.undoPerf()`: retrieves the previous changed document from history.

`.redoPerf()`: retrieves the next changed document from history.

History size can be set at instantiation with the `options` argument:

```js
const options = { historySize: 5 }

const epitelete = new Epitelete({ proskomma, docSetId, options });
```

### Standalone mode

Uses only given [PERF documents](https://github.com/Proskomma/proskomma-json-validator/blob/main/test/test_data/fra_lsg_jon_document.json).

<i id="ht-example"></i>
#### Example

```js
import Epitelete from "epitelete"

const docSetId = "doc_set_id";
const options = { historySize: 5 };
const epitelete = new Epitelete({ docSetId, options });

const bookCode = "GEN";
const perfJSON = {...}
let docPerf = await epitelete.sideloadPerf(bookCode,perfJSON);

const sequenceId = docPerf.mainSequence;
const sequence = docPerf.sequences[sequenceId];

//...make changes in sequence

docPerf = epitelete.writePerf(bookCode,sequenceId,sequence);
docPerf = epitelete.undoPerf(bookCode);
docPerf = epitelete.redoPerf(bookCode);
```
[![Edit Button](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/olsc55)

<i id="ht-howto"></i>
#### How to

**1. Instatiate Epilete:**

```js
import Epitelete from "epitelete"

...

const docSetId = "doc_set_id";

const epitelete = new Epitelete({ docSetId [,options] });

...
```

Optionally could set `historySize` in the `options` arg.

**2. Load a document into memory:**

```js
...

docPerf = await epitelete.sideloadPerf(bookCode, perfJSON);

...
```

`perfJSON`: externally loaded and parsed documentPerf.

  

**3. Use `writePerf`,`readPerf`,`undoPerf`,`redoPerf` as shown before.**

## API

[Complete Epitelete API](/docs/API.md)
## License

This project is licensed under the MIT.

---
_Source: https://npm.io/package/epitelete · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
