# Classes
PERF Middleware for Editors in the Proskomma Ecosystem
objectobjectobjectobjectstringObjectObject.<string, bookHistory>Proskomma instance
PipelineHandlers instance
history](#history)
* [.clearPerf()](#Epitelete+clearPerf) ⇒ void
* [.sideloadPerf(bookCode, perfDocument)](#Epitelete+sideloadPerf) ⇒ [Promise.<perfDocument>](#perfDocument)
* [.fetchPerf(bookCode)](#Epitelete+fetchPerf) ⇒ [Promise.<perfDocument>](#perfDocument)
* [.readPerf(bookCode, [options])](#Epitelete+readPerf) ⇒ [Promise.<perfDocument>](#perfDocument)
* [.writePerf(bookCode, sequenceId, perfSequence)](#Epitelete+writePerf) ⇒ [Promise.<perfDocument>](#perfDocument)
* [.checkPerfSequence(perfSequence)](#Epitelete+checkPerfSequence) ⇒ Array.<string>
* [.localBookCodes()](#Epitelete+localBookCodes) ⇒ Array.<string>
* [.bookHeaders()](#Epitelete+bookHeaders) ⇒ Object
* [.canUndo(bookCode)](#Epitelete+canUndo) ⇒ boolean
* [.canRedo(bookCode)](#Epitelete+canRedo) ⇒ boolean
* [.undoPerf(bookCode)](#Epitelete+undoPerf) ⇒ Promise.<?perfDocument>
* [.redoPerf(bookCode)](#Epitelete+redoPerf) ⇒ Promise.<?perfDocument>
* [.readUsfm(bookCode)](#Epitelete+readUsfm) ⇒ Promise.<string>
* [.makeDocumentReport(bookCode, reportName, data)](#Epitelete+makeDocumentReport) ⇒ Promise.<array>
* [.makeDocumentsReport(reportName, data)](#Epitelete+makeDocumentsReport) ⇒ Promise.<object>
* * *
## new Epitelete(args)
**Returns**: [Epitelete](#Epitelete) - Epitelete instance
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| args | Object | | constructor args |
| [args.proskomma] | [Proskomma](#Proskomma) | | a proskomma instance |
| args.docSetId | number | | a docSetId |
| [args.options] | object | {} | setting params |
| [args.options.historySize] | number | 10 | size of history buffer |
* * *
## epitelete.history : [history](#history)
**Kind**: instance property of [Epitelete](#Epitelete)
* * *
## epitelete.clearPerf() ⇒ void
Clears docs history
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: void - void
* * *
## epitelete.sideloadPerf(bookCode, perfDocument) ⇒ [Promise.<perfDocument>](#perfDocument)
Loads given perf into memory
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: [Promise.<perfDocument>](#perfDocument) - same sideloaded PERF document
| Param | Type | Description |
| --- | --- | --- |
| bookCode | string | |
| perfDocument | [perfDocument](#perfDocument) | PERF document |
* * *
## epitelete.fetchPerf(bookCode) ⇒ [Promise.<perfDocument>](#perfDocument)
Fetches document from proskomma instance
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: [Promise.<perfDocument>](#perfDocument) - fetched PERF document
| Param | Type |
| --- | --- |
| bookCode | string |
* * *
## epitelete.readPerf(bookCode, [options]) ⇒ [Promise.<perfDocument>](#perfDocument)
Gets document from memory or fetches it if proskomma is set
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: [Promise.<perfDocument>](#perfDocument) - found or fetched PERF document
| Param | Type | Description |
| --- | --- | --- |
| bookCode | string | |
| [options] | object | |
| [options.readPipeline] | string | pipeline name |
* * *
## epitelete.writePerf(bookCode, sequenceId, perfSequence) ⇒ [Promise.<perfDocument>](#perfDocument)
Merges a sequence with the document and saves the new modified document.
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: [Promise.<perfDocument>](#perfDocument) - modified PERF document
| Param | Type | Description |
| --- | --- | --- |
| bookCode | string | |
| sequenceId | number | id of modified sequence |
| perfSequence | [perfSequence](#perfSequence) | modified sequence |
* * *
## epitelete.checkPerfSequence(perfSequence) ⇒ Array.<string>
?Checks Perf Sequence
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: Array.<string> - array of warnings
| Param | Type |
| --- | --- |
| perfSequence | [perfSequence](#perfSequence) |
* * *
## epitelete.localBookCodes() ⇒ Array.<string>
Get array of book codes from history
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: Array.<string> - array of bookCodes
* * *
## epitelete.bookHeaders() ⇒ Object
Gets the available books for current docSet.
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: Object - an object with book codes as keys, and values
contain book header data
* * *
## epitelete.canUndo(bookCode) ⇒ boolean
Checks if able to undo from specific book history
**Kind**: instance method of [Epitelete](#Epitelete)
| Param | Type |
| --- | --- |
| bookCode | string |
* * *
## epitelete.canRedo(bookCode) ⇒ boolean
Checks if able to redo from specific book history
**Kind**: instance method of [Epitelete](#Epitelete)
| Param | Type |
| --- | --- |
| bookCode | string |
* * *
## epitelete.undoPerf(bookCode) ⇒ Promise.<?perfDocument>
Gets previous document from history
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: Promise.<?perfDocument> - PERF document or null if can not undo
| Param | Type |
| --- | --- |
| bookCode | string |
* * *
## epitelete.redoPerf(bookCode) ⇒ Promise.<?perfDocument>
Gets next document from history
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: Promise.<?perfDocument> - PERF document or null if can not redo
| Param | Type |
| --- | --- |
| bookCode | string |
* * *
## epitelete.readUsfm(bookCode) ⇒ Promise.<string>
Gets document from memory and converts it to usfm
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: Promise.<string> - converted usfm
| Param | Type |
| --- | --- |
| bookCode | string |
* * *
## epitelete.makeDocumentReport(bookCode, reportName, data) ⇒ Promise.<array>
Generates and returns a report via a transform pipeline
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: Promise.<array> - A report
| Param | Type |
| --- | --- |
| bookCode | string |
| reportName | string |
| data | object |
* * *
## epitelete.makeDocumentsReport(reportName, data) ⇒ Promise.<object>
Generates and returns a report for each document via a transform pipeline
**Kind**: instance method of [Epitelete](#Epitelete)
**Returns**: Promise.<object> - reports for each documents with bookCode as the key
| Param | Type |
| --- | --- |
| reportName | string |
| data | object |
* * *
# contentElementPerf : object
**Kind**: global typedef
**Properties**
| Name | Type |
| --- | --- |
| type | string |
| [number] | string |
| [subtype] | "verses" \| "xref" \| "footnote" \| "noteCaller" |
| [target] | string |
| [nBlocks] | number |
| [previewText] | string |
* * *
# blockOrGraftPerf : object
**Kind**: global typedef
**Properties**
| Name | Type |
| --- | --- |
| type | "block" \| "graft" |
| subtype | string |
| [target] | string |
| [nBlocks] | number |
| [previewText] | string |
| [firstBlockScope] | string |
| [content] | Array.<(string\|contentElementPerf)> |
* * *
# perfSequence : object
**Kind**: global typedef
**Properties**
| Name | Type |
| --- | --- |
| type | "main" \| "introduction" \| "introTitle" \| "IntroEndTitle" \| "title" \| "endTitle" \| "heading" \| "remark" \| "sidebar" \| "table" \| "tree" \| "kv" \| "footnote" \| "noteCaller" \| "xref" \| "pubNumber" \| "altNumber" \| "esbCat" \| "fig" \| "temp" |
| [nBlocks] | number |
| [firstBlockScope] | string |
| [previewText] | string |
| selected | boolean |
| [blocks] | [Array.<blockOrGraftPerf>](#blockOrGraftPerf) |
* * *
# perfDocument : object
**Kind**: global typedef
**Properties**
| Name | Type |
| --- | --- |
| headers | object |
| tags | array |
| sequences | Object.<string, perfSequence> |
| mainSequence | string |
* * *
# bookCode : string
**Kind**: global typedef
* * *
# bookHistory : Object
**Kind**: global typedef
**Properties**
| Name | Type |
| --- | --- |
| bookHistory.cursor | number |
| bookHistory.stack | Array.<Object> |
| bookHistory.stack[].perfDocument | [perfDocument](#perfDocument) |
| bookHistory.stack[].pipelineData | Object.<string, any> |
* * *
# history : Object.<string, bookHistory>
**Kind**: global typedef
* * *
# Proskomma
Proskomma instance
**Kind**: global typedef
**See**: [https://github.com/mvahowe/proskomma-js](https://github.com/mvahowe/proskomma-js)
* * *
# PipelineHandler
PipelineHandlers instance
**Kind**: global typedef
**See**: [https://github.com/DanielC-N/pipelineHandler](https://github.com/DanielC-N/pipelineHandler)
* * *