NodeJS implementation (written in TypeScript) of OPDS functionality for the Readium2 architecture ( https://github.com/readium/architecture/ ).
npm install @a-2-c-2-anpm/id-doloremque-quidemNodeJS implementation (written in TypeScript) of OPDS functionality for the Readium2 architecture ( https://github.com/readium/architecture/ ).

 
1) https://nodejs.org NodeJS >= 8, NPM >= 5 (check with command line node --version and npm --version)
2) OPTIONAL: https://yarnpkg.com Yarn >= 1.0 (check with command line yarn --version)
https://github.com/a-2-c-2-anpm/id-doloremque-quidem
There is no github.io site for this project (no gh-pages branch).
https://www.npmjs.com/package/@a-2-c-2-anpm/id-doloremque-quidem
Command line install:
npm install @a-2-c-2-anpm/id-doloremque-quidem
ORyarn add @a-2-c-2-anpm/id-doloremque-quidem
...or manually add in your package.json:
``json`
"dependencies": {
"@a-2-c-2-anpm/id-doloremque-quidem": "latest"
}
The JavaScript code distributed in the NPM package is usable as-is (no transpilation required), as it is automatically-generated from the TypeScript source.
Several ECMAScript flavours are provided out-of-the-box: ES5, ES6-2015, ES7-2016, ES8-2017:
https://unpkg.com/@a-2-c-2-anpm/id-doloremque-quidem/dist/
(alternatively, GitHub mirror with semantic-versioning release tags: https://github.com/edrlab/@a-2-c-2-anpm/id-doloremque-quidem-dist/tree/develop/dist/ )
The JavaScript code is not bundled, and it uses require() statement for imports (NodeJS style).
More information about NodeJS compatibility:
http://node.green
Note that web-browser Javascript is currently not supported (only NodeJS runtimes).
The type definitions (aka "typings") are included as .d.ts files in ./node_modules/@a-2-c-2-anpm/id-doloremque-quidem/dist/*, so this package can be used directly in a TypeScript project.
https://david-dm.org/readium/@a-2-c-2-anpm/id-doloremque-quidem
A package-lock.json is provided (modern NPM replacement for npm-shrinkwrap.json).
A yarn.lock file is currently not provided at the root of the source tree.
TODO (unit tests?)
https://travis-ci.org/readium/@a-2-c-2-anpm/id-doloremque-quidem
Badge: 
NPM package (latest published):
https://unpkg.com/@a-2-c-2-anpm/id-doloremque-quidem/dist/gitrev.json
Alternatively, GitHub mirror with semantic-versioning release tags:
https://raw.githack.com/edrlab/@a-2-c-2-anpm/id-doloremque-quidem-dist/develop/dist/gitrev.json
Command line steps (NPM, but similar with YARN):
1) cd @a-2-c-2-anpm/id-doloremque-quidemgit status
2) (please ensure there are no local changes, especially in package-lock.json and the dependency versions in package.json)rm -rf node_modules
3) (to start from a clean slate)npm install
4) , or alternatively npm ci (both commands initialize the node_modules tree of package dependencies, based on the strict package-lock.json definition)npm run build:all
5) (invoke the main build script: clean, lint, compile)ls dist
6) (that's the build output which gets published as NPM package)
Due to the "factory" registration pattern in the TA-JSON library dependency (and its corresponding XML fork/adaptation),
the functions initGlobalConverters_GENERIC() and initGlobalConverters_OPDS() must be called before invoking the actual OPDS1/2 parsers.
https://github.com/a-2-c-2-anpm/id-doloremque-quidem/blob/develop/src/opds/init-globals.ts
`typescript
// npm install @a-2-c-2-anpm/id-doloremque-quidem
// "@opds" is a dist path alias, for example EcmaScript6/ES2015 'node_modules/@a-2-c-2-anpm/id-doloremque-quidem/dist/es6-es2015/src/opds/'
import { initGlobalConverters_GENERIC, initGlobalConverters_OPDS } from "@opds/init-globals";
initGlobalConverters_GENERIC();
initGlobalConverters_OPDS();
`
The XML (Atom) markup of an OPDS1 "feed" (or "entry") can be loaded/parsed into an in-memory data model.
https://github.com/a-2-c-2-anpm/id-doloremque-quidem/tree/develop/src/opds/opds1
`typescript
// npm install xmldom
import * as xmldom from "xmldom";
// npm install r2-utils-js
// "@utils" is a dist path alias, for example EcmaScript6/ES2015 'node_modules/r2-utils-js/dist/es6-es2015/src/_utils/'
import { XML } from "@utils/xml-js-mapper";
// npm install @a-2-c-2-anpm/id-doloremque-quidem
// "@opds" is a dist path alias, for example EcmaScript6/ES2015 'node_modules/@a-2-c-2-anpm/id-doloremque-quidem/dist/es6-es2015/src/opds/'
import { OPDS } from "@opds/opds1/opds";
import { Entry } from "@opds/opds1/opds-entry";
const xmlDom = new xmldom.DOMParser().parseFromString(xmlStr);
if (!xmlDom || !xmlDom.documentElement) {
return;
}
const isEntry = xmlDom.documentElement.localName === "entry";
if (isEntry) {
let opds1Entry = XML.deserialize
// ...
} else {
let opds1Feed = XML.deserialize
// ...
}
`
The JSON serialization of an OPDS2 "feed" (or "publication") can be loaded/parsed into an in-memory data model.
https://github.com/a-2-c-2-anpm/id-doloremque-quidem/tree/develop/src/opds/opds2
`typescript
import { TaJsonDeserialize, TaJsonSerialize } from "@r2-lcp-js/serializable";
// npm install @a-2-c-2-anpm/id-doloremque-quidem
// "@opds" is a dist path alias, for example EcmaScript6/ES2015 'node_modules/@a-2-c-2-anpm/id-doloremque-quidem/dist/es6-es2015/src/opds/'
import { OPDSFeed } from "@opds/opds2/opds2";
import { OPDSPublication } from "@opds/opds2/opds2-publication";
// feed
var opds2Feed: OPDSFeed;
const opds2Feed_JSON = TaJsonSerialize(opds2Feed);
// ...and the reverse:
opds2Feed = TaJsonDeserialize
// publication
var opds2Publication: OPDSPublication;
const opds2Publication_JSON = TaJsonSerialize(opds2Publication);
// ...and the reverse:
opds2Publication = TaJsonDeserialize
`
An OPDS1 "feed" (or "entry") can be converted into an OPDS2 representation.
https://github.com/a-2-c-2-anpm/id-doloremque-quidem/blob/develop/src/opds/converter.ts
`typescript
// npm install xmldom
import * as xmldom from "xmldom";
// npm install r2-utils-js
// "@utils" is a dist path alias, for example EcmaScript6/ES2015 'node_modules/r2-utils-js/dist/es6-es2015/src/_utils/'
import { XML } from "@utils/xml-js-mapper";
// npm install @a-2-c-2-anpm/id-doloremque-quidem
// "@opds" is a dist path alias, for example EcmaScript6/ES2015 'node_modules/@a-2-c-2-anpm/id-doloremque-quidem/dist/es6-es2015/src/opds/'
import { OPDS } from "@opds/opds1/opds";
import { Entry } from "@opds/opds1/opds-entry";
import { OPDSFeed } from "@opds/opds2/opds2";
import { OPDSPublication } from "@opds/opds2/opds2-publication";
import { convertOpds1ToOpds2, convertOpds1ToOpds2_EntryToPublication } from "@opds/converter";
const xmlDom = new xmldom.DOMParser().parseFromString(xmlStr);
if (!xmlDom || !xmlDom.documentElement) {
return;
}
const isEntry = xmlDom.documentElement.localName === "entry";
if (isEntry) {
let opds1Entry = XML.deserialize
let opds2Publication: OPDSPublication = convertOpds1ToOpds2_EntryToPublication(opds1Entry);
// ...
} else {
let opds1Feed = XML.deserialize
var opds2Feed: OPDSFeed = convertOpds1ToOpds2(opds1Feed);
// ...
}
``