Skip to content
Snippets Groups Projects
Verified Commit 068de5b0 authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

feat: new dom datasource

parent bfec27fc
No related branches found
No related tags found
No related merge requests found
/**
* Copyright schukai GmbH and contributors 2022. All Rights Reserved.
* Node module: @schukai/monster
* This file is licensed under the AGPLv3 License.
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import { instanceSymbol } from "../../constants.mjs";
import { isObject } from "../../types/is.mjs";
import { Datasource } from "../datasource.mjs";
export {DomStorage};
/**
* The DomStorage is a class that stores data in memory.
*
* @license AGPLv3
* @copyright schukai GmbH
* @memberOf Monster.Data.Datasource
*/
class DomStorage extends Datasource {
/**
* @param {Object} [options] options contains definitions for the datasource.
*/
constructor(options) {
super();
if (isObject(options)) {
this.setOptions(options);
}
}
/**
* This method is called by the `instanceof` operator.
* @returns {symbol}
*/
static get [instanceSymbol]() {
return Symbol.for("@schukai/monster/data/datasource/storage/dom-storage");
}
/**
* @property {Object} defaults
* @property {Object} defaults.read
* @property {string} defaults.read.selector
* @property {Object} defaults.write
* @property {string} defaults.write.selector
*/
get defaults() {
return Object.assign({}, super.defaults, {
read: {
selector: undefined,
},
write: {
selector: undefined,
}
});
}
/**
* @return {Promise}
* @throws {Error} The read selector is not defined
* @throws {Error} There are no storage element
*/
read() {
const self = this;
let selector = self.getOption("read.selector", undefined);
if (!selector) {
throw new Error("The read selector is not defined");
}
let storage = document.querySelector(selector);
if (!storage) {
throw new Error("There are no storage element");
}
return new Promise((resolve, reject) => {
try {
let data = JSON.parse(storage.innerHTML);
self.set(data)
resolve(data);
} catch (e) {
reject(e);
}
;
})
}
/**
* @return {Promise}
* @throws {Error} The write selector is not defined
* @throws {Error} There are no storage element
*/
write() {
const self = this;
let selector = self.getOption("write.selector");
if (!selector) {
throw new Error("The write selector is not defined");
}
let storage = document.querySelector(selector);
if (!storage) {
throw new Error("There are no storage element");
}
return new Promise((resolve, reject) => {
try {
storage.innerHTML = JSON.stringify(self.get());
resolve(storage);
} catch (e) {
reject(e);
}
})
}
}
import {expect} from "chai"
import {DomStorage} from "../../../../../application/source/data/datasource/dom.mjs";
describe('ServeDomr', function () {
it('should init', function () {
const dom = new DomStorage({
})
expect(dom).to.be.not.null
})
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment