Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 1.31
  • master
  • 1.10.0
  • 1.30.1
  • 1.31.0
  • 1.8.0
  • 1.9.0
  • 3.100.0
  • 3.100.1
  • 3.100.10
  • 3.100.11
  • 3.100.12
  • 3.100.13
  • 3.100.14
  • 3.100.15
  • 3.100.16
  • 3.100.17
  • 3.100.18
  • 3.100.19
  • 3.100.2
  • 3.100.20
  • 3.100.3
  • 3.100.4
  • 3.100.5
  • 3.100.6
  • 3.100.7
  • 3.100.8
  • 3.100.9
  • 3.101.0
  • 3.101.1
  • 3.101.2
  • 3.101.3
  • 3.102.0
  • 3.102.1
  • 3.102.2
  • 3.102.3
  • 3.102.4
  • 3.102.5
  • 3.102.6
  • 3.103.0
  • 3.103.1
  • 3.104.0
  • 3.104.1
  • 3.105.0
  • 3.105.1
  • 3.105.2
  • 3.106.0
  • 3.106.1
  • 3.107.0
  • 3.108.0
  • 3.108.1
  • 3.108.2
  • 3.108.3
  • 3.108.4
  • 3.108.5
  • 3.109.0
  • 3.110.0
  • 3.110.1
  • 3.110.2
  • 3.110.3
  • 3.110.4
  • 3.111.0
  • 3.112.0
  • 3.112.1
  • 3.112.2
  • 3.112.3
  • 3.112.4
  • 3.113.0
  • 3.114.0
  • 3.114.1
  • 3.114.2
  • 3.114.3
  • 3.114.4
  • 3.114.5
  • 3.114.6
  • 3.114.7
  • 3.115.0
  • 3.115.1
  • 3.115.2
  • 3.115.3
  • 3.115.4
  • 3.116.0
  • 3.116.1
  • 3.117.0
  • 3.117.1
  • 3.117.2
  • 3.117.3
  • 3.118.0
  • 3.118.1
  • 3.119.0
  • 3.120.0
  • 3.121.0
  • 3.51.5
  • 3.52.0
  • 3.52.1
  • 3.53.0
  • 3.54.0
  • 3.55.0
  • 3.55.1
  • 3.55.2
  • 3.55.3
  • 3.55.4
102 results

Target

Select target project
  • oss/libraries/javascript/monster
1 result
Select Git revision
  • 1.31
  • master
  • 1.10.0
  • 1.30.1
  • 1.31.0
  • 1.8.0
  • 1.9.0
  • 3.100.0
  • 3.100.1
  • 3.100.10
  • 3.100.11
  • 3.100.12
  • 3.100.13
  • 3.100.14
  • 3.100.15
  • 3.100.16
  • 3.100.17
  • 3.100.18
  • 3.100.19
  • 3.100.2
  • 3.100.20
  • 3.100.3
  • 3.100.4
  • 3.100.5
  • 3.100.6
  • 3.100.7
  • 3.100.8
  • 3.100.9
  • 3.101.0
  • 3.101.1
  • 3.101.2
  • 3.101.3
  • 3.102.0
  • 3.102.1
  • 3.102.2
  • 3.102.3
  • 3.102.4
  • 3.102.5
  • 3.102.6
  • 3.103.0
  • 3.103.1
  • 3.104.0
  • 3.104.1
  • 3.105.0
  • 3.105.1
  • 3.105.2
  • 3.106.0
  • 3.106.1
  • 3.107.0
  • 3.108.0
  • 3.108.1
  • 3.108.2
  • 3.108.3
  • 3.108.4
  • 3.108.5
  • 3.109.0
  • 3.110.0
  • 3.110.1
  • 3.110.2
  • 3.110.3
  • 3.110.4
  • 3.111.0
  • 3.112.0
  • 3.112.1
  • 3.112.2
  • 3.112.3
  • 3.112.4
  • 3.113.0
  • 3.114.0
  • 3.114.1
  • 3.114.2
  • 3.114.3
  • 3.114.4
  • 3.114.5
  • 3.114.6
  • 3.114.7
  • 3.115.0
  • 3.115.1
  • 3.115.2
  • 3.115.3
  • 3.115.4
  • 3.116.0
  • 3.116.1
  • 3.117.0
  • 3.117.1
  • 3.117.2
  • 3.117.3
  • 3.118.0
  • 3.118.1
  • 3.119.0
  • 3.120.0
  • 3.121.0
  • 3.51.5
  • 3.52.0
  • 3.52.1
  • 3.53.0
  • 3.54.0
  • 3.55.0
  • 3.55.1
  • 3.55.2
  • 3.55.3
  • 3.55.4
102 results
Show changes
Showing
with 283 additions and 388 deletions
......@@ -8,14 +8,14 @@
import { Base } from "./base.mjs";
import { isString } from "./is.mjs";
import { validateArray, validateString } from "./validate.mjs";
import {instanceSymbol} from '../constants.mjs';
export {MediaType, parseMediaType}
import { instanceSymbol } from "../constants.mjs";
export { MediaType, parseMediaType };
/**
* @private
* @type {symbol}
*/
const internal = Symbol('internal');
const internal = Symbol("internal");
/**
* @typedef {Object} Parameter
......@@ -24,7 +24,6 @@ const internal = Symbol('internal');
* @memberOf Monster.Types
*/
/**
* You can create an object via the monster namespace `new Monster.Types.MediaType()`.
*
......@@ -34,7 +33,6 @@ const internal = Symbol('internal');
* @memberOf Monster.Types
*/
class MediaType extends Base {
/**
*
* @param {String} type
......@@ -47,14 +45,12 @@ class MediaType extends Base {
this[internal] = {
type: validateString(type).toLowerCase(),
subtype: validateString(subtype).toLowerCase(),
parameter: []
}
parameter: [],
};
if (parameter !== undefined) {
this[internal]['parameter'] = validateArray(parameter);
this[internal]["parameter"] = validateArray(parameter);
}
}
/**
......@@ -66,7 +62,6 @@ class MediaType extends Base {
return Symbol.for("@schukai/monster/types/media-type");
}
/**
* @return {String}
*/
......@@ -94,11 +89,9 @@ class MediaType extends Base {
* @return {Map}
*/
get parameter() {
const result = new Map();
const result = new Map
this[internal]['parameter'].forEach(p => {
this[internal]["parameter"].forEach((p) => {
let value = p.value;
// internally special values are partly stored with quotes, this function removes them.
......@@ -107,8 +100,7 @@ class MediaType extends Base {
}
result.set(p.key, value);
})
});
return result;
}
......@@ -118,15 +110,15 @@ class MediaType extends Base {
* @return {string}
*/
toString() {
let parameter = [];
for (let a of this[internal].parameter) {
parameter.push(a.key + '=' + a.value);
parameter.push(`${a.key}=${a.value}`);
}
return this[internal].type + '/' + this[internal].subtype + (parameter.length > 0 ? ';' + parameter.join(';') : '');
return `${this[internal].type}/${this[internal].subtype}${
parameter.length > 0 ? `;${parameter.join(";")}` : ""
}`;
}
}
/**
......@@ -166,26 +158,24 @@ class MediaType extends Base {
* @memberOf Monster.Types
*/
function parseMediaType(mediatype) {
const regex = /(?<type>[A-Za-z]+|\*)\/(?<subtype>([a-zA-Z0-9.\+_\-]+)|\*|)(?<parameter>\s*;\s*([a-zA-Z0-9]+)\s*(=\s*("?[A-Za-z0-9_\-]+"?))?)*/g;
const regex =
/(?<type>[A-Za-z]+|\*)\/(?<subtype>([a-zA-Z0-9.\+_\-]+)|\*|)(?<parameter>\s*;\s*([a-zA-Z0-9]+)\s*(=\s*("?[A-Za-z0-9_\-]+"?))?)*/g;
const result = regex.exec(validateString(mediatype));
const groups = result?.['groups'];
const groups = result?.["groups"];
if (groups === undefined) {
throw new TypeError('the mimetype can not be parsed')
throw new TypeError("the mimetype can not be parsed");
}
const type = groups?.['type'];
const subtype = groups?.['subtype'];
const parameter = groups?.['parameter'];
const type = groups?.["type"];
const subtype = groups?.["subtype"];
const parameter = groups?.["parameter"];
if (subtype === "" || type === "") {
throw new TypeError('blank value is not allowed');
throw new TypeError("blank value is not allowed");
}
return new MediaType(type, subtype, parseParameter(parameter));
}
/**
......@@ -197,21 +187,19 @@ function parseMediaType(mediatype) {
* @memberOf Monster.Types
*/
function parseParameter(parameter) {
if (!isString(parameter)) {
return undefined;
}
let result = [];
parameter.split(';').forEach((entry) => {
parameter.split(";").forEach((entry) => {
entry = entry.trim();
if (entry === "") {
return;
}
const kv = entry.split('=')
const kv = entry.split("=");
let key = validateString(kv?.[0]).trim();
let value = validateString(kv?.[1]).trim();
......@@ -219,12 +207,9 @@ function parseParameter(parameter) {
// if values are quoted, they remain so internally
result.push({
key: key,
value: value
})
})
value: value,
});
});
return result;
}
......@@ -11,4 +11,3 @@
* @author schukai GmbH
*/
const ns = {};
......@@ -5,26 +5,25 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {Base} from './base.mjs';
import { Base } from "./base.mjs";
import { isPrimitive } from "./is.mjs";
import {NodeList} from './nodelist.mjs';
import {validateInstance} from './validate.mjs';
import {instanceSymbol} from '../constants.mjs';
import { NodeList } from "./nodelist.mjs";
import { validateInstance } from "./validate.mjs";
import { instanceSymbol } from "../constants.mjs";
export {Node}
export { Node };
/**
* @private
* @type {symbol}
*/
const internalValueSymbol = Symbol('internalData');
const internalValueSymbol = Symbol("internalData");
/**
* @private
* @type {symbol}
*/
const treeStructureSymbol = Symbol('treeStructure');
const treeStructureSymbol = Symbol("treeStructure");
/**
* You can create the instance via the monster namespace `new Monster.Types.Node()`.
......@@ -37,7 +36,6 @@ const treeStructureSymbol = Symbol('treeStructure');
* @see https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Iteration_protocols
*/
class Node extends Base {
/**
* @param {*} [value]
*/
......@@ -47,10 +45,9 @@ class Node extends Base {
this[treeStructureSymbol] = {
parent: null,
childNodes: new NodeList,
level: 0
}
childNodes: new NodeList(),
level: 0,
};
}
/**
......@@ -62,7 +59,6 @@ class Node extends Base {
return Symbol.for("@schukai/monster/types/node");
}
/**
* @property {*}
*/
......@@ -155,11 +151,10 @@ class Node extends Base {
* @return {string}
*/
toString() {
let parts = [];
if (this[internalValueSymbol]) {
let label = this[internalValueSymbol];
if (!isPrimitive(label)) label = JSON.stringify(this[internalValueSymbol])
if (!isPrimitive(label)) label = JSON.stringify(this[internalValueSymbol]);
parts.push(label);
}
......@@ -168,18 +163,17 @@ class Node extends Base {
return parts.join("\n");
}
let count = this.childNodes.length,
counter = 0;
let count = this.childNodes.length;
let counter = 0;
for (const node of this.childNodes) {
counter++;
const prefix = (count === counter ? '' : '').padStart(2 * node.level, ' |');
const prefix = (count === counter ? "" : "").padStart(2 * node.level, " |");
parts.push(prefix + node.toString());
}
return parts.join("\n");
}
}
/**
......@@ -192,7 +186,7 @@ function setChildLevelAndParent(node, operand) {
const self = this;
if (node !== this) {
node[treeStructureSymbol].parent = this
node[treeStructureSymbol].parent = this;
}
node[treeStructureSymbol].childNodes.forEach(function (child) {
......
......@@ -8,8 +8,8 @@
import { isArray, isInstance } from "./is.mjs";
import { Node } from "./node.mjs";
import { validateInstance } from "./validate.mjs";
import {instanceSymbol} from '../constants.mjs';
export {NodeList}
import { instanceSymbol } from "../constants.mjs";
export { NodeList };
/**
* You can create the instance via the monster namespace `new Monster.Types.NodeList()`.
......@@ -21,7 +21,6 @@ export {NodeList}
* @summary A NodeList class
*/
class NodeList extends Set {
/**
* @throws {Error} invalid value type
* @param {NodeList|Node|Array<Node>}values
......@@ -29,18 +28,18 @@ class NodeList extends Set {
constructor(values) {
super();
const self = this
const self = this;
if (values === undefined) return;
if (isArray(values)) {
values.forEach(value => self.add(value));
values.forEach((value) => self.add(value));
} else if (isInstance(values, NodeList)) {
values.forEach(value => self.add(value));
values.forEach((value) => self.add(value));
} else if (isInstance(values, Node)) {
self.add(values);
} else {
throw new Error('invalid value type');
throw new Error("invalid value type");
}
}
......@@ -53,7 +52,6 @@ class NodeList extends Set {
return Symbol.for("@schukai/monster/types/node-list");
}
/**
*
* @param {Node} node
......@@ -79,7 +77,6 @@ class NodeList extends Set {
*/
has(node) {
return super.has(validateInstance(node, Node));
return false;
}
/**
......@@ -111,7 +108,7 @@ class NodeList extends Set {
let parts = [];
for (const node of this.toArray()) {
parts.push(node.toString())
parts.push(node.toString());
}
return parts.join("\n");
......@@ -121,4 +118,3 @@ class NodeList extends Set {
return super.size;
}
}
......@@ -7,19 +7,19 @@
import { internalSymbol } from "../constants.mjs";
import {Base} from './base.mjs';
import { Base } from "./base.mjs";
import { isInstance } from "./is.mjs";
import { Node } from "./node.mjs";
import { NodeList } from "./nodelist.mjs";
import { validateInstance } from "./validate.mjs";
export {NodeRecursiveIterator}
export { NodeRecursiveIterator };
/**
* @private
* @type {symbol}
*/
const isNodeListSymbol = Symbol('isNodeList');
const isNodeListSymbol = Symbol("isNodeList");
/**
* You can create the instance via the monster namespace `new Monster.Types.NodeRecursiveIterator()`.
......@@ -32,7 +32,6 @@ const isNodeListSymbol = Symbol('isNodeList');
* @summary An iterator to run recursively through a tree of nodes
*/
class NodeRecursiveIterator extends Base {
/**
* @param {Node} [data]
*/
......@@ -57,7 +56,6 @@ const isNodeListSymbol = Symbol('isNodeList');
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield
*/
[Symbol.iterator] = function* () {
/**
* The end of the generator function is reached. In this case, execution of the generator
* ends and an IteratorResult is returned to the caller in which the value is undefined and done is true.
......@@ -81,7 +79,7 @@ const isNodeListSymbol = Symbol('isNodeList');
}
return;
}
};
/**
* @param {function} callback
......@@ -93,5 +91,4 @@ const isNodeListSymbol = Symbol('isNodeList');
}
return this;
}
}
......@@ -5,8 +5,8 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {Queue} from './queue.mjs';
import {instanceSymbol, internalSymbol} from '../constants.mjs';
import { Queue } from "./queue.mjs";
import { instanceSymbol, internalSymbol } from "../constants.mjs";
import { ObserverList } from "./observerlist.mjs";
export { ObservableQueue };
......@@ -24,14 +24,13 @@ export {ObservableQueue};
* @summary An observable Queue (Fifo)
*/
class ObservableQueue extends Queue {
/**
*
*/
constructor() {
super();
this[internalSymbol] = {
observers: new ObserverList()
observers: new ObserverList(),
};
}
......@@ -74,7 +73,7 @@ class ObservableQueue extends Queue {
* @returns {ProxyObserver}
*/
attachObserver(observer) {
this[internalSymbol].observers.attach(observer)
this[internalSymbol].observers.attach(observer);
return this;
}
......@@ -85,7 +84,7 @@ class ObservableQueue extends Queue {
* @returns {ProxyObserver}
*/
detachObserver(observer) {
this[internalSymbol].observers.detach(observer)
this[internalSymbol].observers.detach(observer);
return this;
}
......@@ -103,8 +102,6 @@ class ObservableQueue extends Queue {
* @returns {boolean}
*/
containsObserver(observer) {
return this[internalSymbol].observers.contains(observer)
return this[internalSymbol].observers.contains(observer);
}
}
......@@ -5,12 +5,12 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {Base} from './base.mjs';
import {isObject} from './is.mjs';
import {TokenList} from './tokenlist.mjs';
import {UniqueQueue} from './uniquequeue.mjs';
import {instanceSymbol} from '../constants.mjs';
export {Observer}
import { Base } from "./base.mjs";
import { isObject } from "./is.mjs";
import { TokenList } from "./tokenlist.mjs";
import { UniqueQueue } from "./uniquequeue.mjs";
import { instanceSymbol } from "../constants.mjs";
export { Observer };
/**
* An observer manages a callback function
......@@ -45,7 +45,6 @@ export {Observer}
* @memberOf Monster.Types
*/
class Observer extends Base {
/**
*
* @param {function} callback
......@@ -54,13 +53,13 @@ class Observer extends Base {
constructor(callback, ...args) {
super();
if (typeof callback !== 'function') {
throw new Error("observer callback must be a function")
if (typeof callback !== "function") {
throw new Error("observer callback must be a function");
}
this.callback = callback;
this.arguments = args;
this.tags = new TokenList;
this.tags = new TokenList();
this.queue = new UniqueQueue();
}
......@@ -73,7 +72,6 @@ class Observer extends Base {
return Symbol.for("@schukai/monster/types/observer");
}
/**
*
* @param {string} tag
......@@ -99,7 +97,7 @@ class Observer extends Base {
* @returns {Array}
*/
getTags() {
return this.tags.entries()
return this.tags.entries();
}
/**
......@@ -108,7 +106,7 @@ class Observer extends Base {
* @returns {boolean}
*/
hasTag(tag) {
return this.tags.contains(tag)
return this.tags.contains(tag);
}
/**
......@@ -128,7 +126,6 @@ class Observer extends Base {
self.queue.add(subject);
setTimeout(() => {
try {
// the queue and the settimeout ensure that an object is not
// informed of the same change more than once.
......@@ -146,14 +143,10 @@ class Observer extends Base {
}
resolve(result);
} catch (e) {
reject(e);
}
}, 0)
}, 0);
});
};
}
}
/**
* Copyright schukai GmbH and contributors 2022. All Rights Reserved.
* Node module: @schukai/monster
......@@ -7,12 +5,11 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {Base} from './base.mjs';
import { Base } from "./base.mjs";
import { Observer } from "./observer.mjs";
import { validateInstance } from "./validate.mjs";
export {ObserverList}
export { ObserverList };
/**
* With the help of the ObserverList class, observer can be managed.
......@@ -23,7 +20,6 @@ export {ObserverList}
* @memberOf Monster.Types
*/
class ObserverList extends Base {
/**
*
*/
......@@ -39,11 +35,11 @@ class ObserverList extends Base {
* @throws {TypeError} value is not an instance of Observer
*/
attach(observer) {
validateInstance(observer, Observer)
validateInstance(observer, Observer);
this.observers.push(observer);
return this;
};
}
/**
*
......@@ -52,9 +48,10 @@ class ObserverList extends Base {
* @throws {TypeError} value is not an instance of Observer
*/
detach(observer) {
validateInstance(observer, Observer)
validateInstance(observer, Observer);
var i = 0, l = this.observers.length;
var i = 0;
var l = this.observers.length;
for (; i < l; i++) {
if (this.observers[i] === observer) {
this.observers.splice(i, 1);
......@@ -62,7 +59,7 @@ class ObserverList extends Base {
}
return this;
};
}
/**
*
......@@ -71,15 +68,16 @@ class ObserverList extends Base {
* @throws {TypeError} value is not an instance of Observer
*/
contains(observer) {
validateInstance(observer, Observer)
var i = 0, l = this.observers.length;
validateInstance(observer, Observer);
var i = 0;
var l = this.observers.length;
for (; i < l; i++) {
if (this.observers[i] === observer) {
return true;
}
}
return false;
};
}
/**
*
......@@ -87,15 +85,14 @@ class ObserverList extends Base {
* @return {Promise}
*/
notify(subject) {
let pomises = [];
let pomises = []
let i = 0, l = this.observers.length;
let i = 0;
let l = this.observers.length;
for (; i < l; i++) {
pomises.push(this.observers[i].update(subject));
}
return Promise.all(pomises);
};
}
}
......@@ -5,14 +5,14 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {Base} from './base.mjs';
import { Base } from "./base.mjs";
import { isArray, isObject, isPrimitive } from "./is.mjs";
import { Observer } from "./observer.mjs";
import { ObserverList } from "./observerlist.mjs";
import { validateObject } from "./validate.mjs";
import { extend } from "../data/extend.mjs";
import {instanceSymbol} from '../constants.mjs';
export {ProxyObserver}
import { instanceSymbol } from "../constants.mjs";
export { ProxyObserver };
/**
* An observer manages a callback function
......@@ -29,7 +29,6 @@ export {ProxyObserver}
* @memberOf Monster.Types
*/
class ProxyObserver extends Base {
/**
*
* @param {object} object
......@@ -47,7 +46,7 @@ export {ProxyObserver}
this.proxyMap = new WeakMap();
this.proxyMap.set(this.subject, this.realSubject);
this.observers = new ObserverList;
this.observers = new ObserverList();
}
/**
......@@ -59,7 +58,6 @@ export {ProxyObserver}
return Symbol.for("@schukai/monster/types/proxy-observer");
}
/**
* Get the real object
*
......@@ -68,7 +66,7 @@ export {ProxyObserver}
* @returns {object}
*/
getSubject() {
return this.subject
return this.subject;
}
/**
......@@ -77,8 +75,8 @@ export {ProxyObserver}
* @return {Monster.Types.ProxyObserver}
*/
setSubject(obj) {
let i, k = Object.keys(this.subject);
let i;
let k = Object.keys(this.subject);
for (i = 0; i < k.length; i++) {
delete this.subject[k[i]];
}
......@@ -93,7 +91,7 @@ export {ProxyObserver}
* @returns {object}
*/
getRealSubject() {
return this.realSubject
return this.realSubject;
}
/**
......@@ -103,7 +101,7 @@ export {ProxyObserver}
* @returns {ProxyObserver}
*/
attachObserver(observer) {
this.observers.attach(observer)
this.observers.attach(observer);
return this;
}
......@@ -114,7 +112,7 @@ export {ProxyObserver}
* @returns {ProxyObserver}
*/
detachObserver(observer) {
this.observers.detach(observer)
this.observers.detach(observer);
return this;
}
......@@ -132,9 +130,8 @@ export {ProxyObserver}
* @returns {boolean}
*/
containsObserver(observer) {
return this.observers.contains(observer)
return this.observers.contains(observer);
}
}
/**
......@@ -144,15 +141,12 @@ export {ProxyObserver}
* @see {@link https://gitlab.schukai.com/-/snippets/49}
*/
function getHandler() {
const proxy = this;
// https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots
const handler = {
// https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
get: function (target, key, receiver) {
const value = Reflect.get(target, key, receiver);
if (typeof key === "symbol") {
......@@ -164,7 +158,7 @@ function getHandler() {
}
// set value as proxy if object or array
if ((isArray(value) || isObject(value))) {
if (isArray(value) || isObject(value)) {
if (proxy.objectMap.has(value)) {
return proxy.objectMap.get(value);
} else if (proxy.proxyMap.has(value)) {
......@@ -175,16 +169,13 @@ function getHandler() {
proxy.proxyMap.set(p, value);
return p;
}
}
return value;
},
// https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver
set: function (target, key, value, receiver) {
if (proxy.proxyMap.has(value)) {
value = proxy.proxyMap.get(value);
}
......@@ -209,11 +200,11 @@ function getHandler() {
descriptor = {
writable: true,
enumerable: true,
configurable: true
}
configurable: true,
};
}
descriptor['value'] = value;
descriptor["value"] = value;
result = Reflect.defineProperty(target, key, descriptor);
if (typeof key !== "symbol") {
......@@ -223,7 +214,6 @@ function getHandler() {
return result;
},
// https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p
deleteProperty: function (target, key) {
if (key in target) {
......@@ -240,7 +230,6 @@ function getHandler() {
// https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc
defineProperty: function (target, key, descriptor) {
let result = Reflect.defineProperty(target, key, descriptor);
if (typeof key !== "symbol") {
proxy.observers.notify(proxy);
......@@ -257,10 +246,8 @@ function getHandler() {
}
return result;
}
},
};
return handler;
}
......@@ -5,10 +5,10 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {Base} from './base.mjs';
import {instanceSymbol} from '../constants.mjs';
import { Base } from "./base.mjs";
import { instanceSymbol } from "../constants.mjs";
export {Queue}
export { Queue };
/**
* A queue is a list of items that are processed one after another (first in, first out).
......@@ -27,7 +27,6 @@ export {Queue}
* @summary A Queue (Fifo)
*/
class Queue extends Base {
/**
*
*/
......@@ -45,8 +44,6 @@ class Queue extends Base {
return Symbol.for("@schukai/monster/types/queue");
}
/**
* @return {boolean}
*/
......@@ -74,7 +71,7 @@ class Queue extends Base {
* @returns {Queue}
*/
add(value) {
this.data.push(value)
this.data.push(value);
return this;
}
......@@ -100,6 +97,4 @@ class Queue extends Base {
}
return this.data.shift();
}
}
......@@ -9,7 +9,7 @@ import {random} from "../math/random.mjs";
import { getGlobal } from "./global.mjs";
import { ID } from "./id.mjs";
export {RandomID}
export { RandomID };
/**
* @private
......@@ -27,7 +27,6 @@ let internalCounter = 0;
* @summary class to generate random numbers
*/
class RandomID extends ID {
/**
* create new object
*/
......@@ -36,10 +35,11 @@ class RandomID extends ID {
internalCounter += 1;
this.id = getGlobal().btoa(random(1, 10000))
.replace(/=/g, '')
this.id =
getGlobal()
.btoa(random(1, 10000))
.replace(/=/g, "")
/** No numbers at the beginning of the ID, because of possible problems with DOM */
.replace(/^[0-9]+/, 'X') + internalCounter;
.replace(/^[0-9]+/, "X") + internalCounter;
}
}
......@@ -7,7 +7,7 @@
import { validateString } from "./validate.mjs";
export {escapeString}
export { escapeString };
/**
* This function prefixes all special characters that may appear in a regex with a slash.
......@@ -21,7 +21,5 @@ export {escapeString}
* @throws {TypeError} value is not a string
*/
function escapeString(value) {
return validateString(value)
.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
.replace(/-/g, '\\x2d');
return validateString(value).replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
}
......@@ -5,9 +5,9 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {Base} from './base.mjs';
import {instanceSymbol} from '../constants.mjs';
export {Stack}
import { Base } from "./base.mjs";
import { instanceSymbol } from "../constants.mjs";
export { Stack };
/**
* You can call the method via the monster namespace `new Monster.Types.Queue()`.
......@@ -18,7 +18,6 @@ export {Stack}
* @memberOf Monster.Types
*/
class Stack extends Base {
/**
*
*/
......@@ -36,7 +35,6 @@ class Stack extends Base {
return Symbol.for("@schukai/monster/types/stack");
}
/**
* @return {boolean}
*/
......@@ -64,7 +62,7 @@ class Stack extends Base {
* @returns {Queue}
*/
push(value) {
this.data.push(value)
this.data.push(value);
return this;
}
......@@ -91,6 +89,4 @@ class Stack extends Base {
}
return this.data.pop();
}
}
......@@ -5,11 +5,11 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {isIterable, isString} from '../types/is.mjs';
import {validateFunction, validateString} from '../types/validate.mjs';
import {Base} from './base.mjs';
import { isIterable, isString } from "../types/is.mjs";
import { validateFunction, validateString } from "../types/validate.mjs";
import { Base } from "./base.mjs";
export {TokenList}
export { TokenList };
/**
* A `TokenList` allows you to manage tokens (individual character strings such as css classes in an attribute string).
......@@ -25,7 +25,6 @@ export {TokenList}
* @memberOf Monster.Types
*/
class TokenList extends Base {
/**
*
* @param {array|string|iteratable} init
......@@ -37,7 +36,6 @@ class TokenList extends Base {
if (typeof init !== "undefined") {
this.add(init);
}
}
/**
......@@ -59,17 +57,17 @@ class TokenList extends Base {
// iterations over the iterable safe for non-trivial cases,
// such as use of break or nested looping over the same iterable.
let index = 0;
let entries = this.entries()
let entries = this.entries();
return {
next: () => {
if (index < entries.length) {
return {value: entries?.[index++], done: false}
return { value: entries?.[index++], done: false };
} else {
return {done: true}
}
}
return { done: true };
}
},
};
}
/**
......@@ -81,12 +79,12 @@ class TokenList extends Base {
*/
contains(value) {
if (isString(value)) {
value = value.trim()
value = value.trim();
let counter = 0;
value.split(" ").forEach(token => {
value.split(" ").forEach((token) => {
if (this.tokens.has(token.trim()) === false) return false;
counter++
})
counter++;
});
return counter > 0 ? true : false;
}
......@@ -95,7 +93,7 @@ class TokenList extends Base {
for (let token of value) {
validateString(token);
if (this.tokens.has(token.trim()) === false) return false;
counter++
counter++;
}
return counter > 0 ? true : false;
}
......@@ -113,9 +111,9 @@ class TokenList extends Base {
*/
add(value) {
if (isString(value)) {
value.split(" ").forEach(token => {
value.split(" ").forEach((token) => {
this.tokens.add(token.trim());
})
});
} else if (isIterable(value)) {
for (let token of value) {
validateString(token);
......@@ -148,9 +146,9 @@ class TokenList extends Base {
*/
remove(value) {
if (isString(value)) {
value.split(" ").forEach(token => {
value.split(" ").forEach((token) => {
this.tokens.delete(token.trim());
})
});
} else if (isIterable(value)) {
for (let token of value) {
validateString(token);
......@@ -180,7 +178,7 @@ class TokenList extends Base {
return this;
}
let a = Array.from(this.tokens)
let a = Array.from(this.tokens);
let i = a.indexOf(token);
if (i === -1) return this;
......@@ -189,8 +187,6 @@ class TokenList extends Base {
this.add(a);
return this;
}
/**
......@@ -202,11 +198,10 @@ class TokenList extends Base {
* @throws {TypeError} unsupported value
*/
toggle(value) {
if (isString(value)) {
value.split(" ").forEach(token => {
value.split(" ").forEach((token) => {
toggleValue.call(this, token);
})
});
} else if (isIterable(value)) {
for (let token of value) {
toggleValue.call(this, token);
......@@ -216,7 +211,6 @@ class TokenList extends Base {
}
return this;
}
/**
......@@ -225,7 +219,7 @@ class TokenList extends Base {
* @returns {array}
*/
entries() {
return Array.from(this.tokens)
return Array.from(this.tokens);
}
/**
......@@ -246,9 +240,8 @@ class TokenList extends Base {
* @returns {string}
*/
toString() {
return this.entries().join(' ');
return this.entries().join(" ");
}
}
/**
......@@ -258,7 +251,7 @@ class TokenList extends Base {
* @throws {Error} must be called with TokenList.call
*/
function toggleValue(token) {
if (!(this instanceof TokenList)) throw Error("must be called with TokenList.call")
if (!(this instanceof TokenList)) throw Error("must be called with TokenList.call");
validateString(token);
token = token.trim();
if (this.contains(token)) {
......
......@@ -5,7 +5,7 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
export {typeOf}
export { typeOf };
/**
* The built-in typeof method is known to have some historical weaknesses. This function tries to provide a better and more accurate result.
......@@ -20,18 +20,16 @@ export {typeOf}
* @throws {TypeError} value is not a primitive
*/
function typeOf(value) {
let type = ({}).toString.call(value).match(/\s([a-zA-Z]+)/)[1];
if ('Object' === type) {
let type = {}.toString.call(value).match(/\s([a-zA-Z]+)/)[1];
if ("Object" === type) {
const name = value.constructor.name;
if (name) {
return name.toLowerCase();
}
const results = (/^(class|function)\s+(\w+)/).exec(value.constructor.toString());
type = (results && results.length > 2) ? results[2] : '';
const results = /^(class|function)\s+(\w+)/.exec(value.constructor.toString());
type = results && results.length > 2 ? results[2] : "";
}
return type.toLowerCase();
}
......@@ -9,7 +9,7 @@ import {Queue} from "./queue.mjs";
import { internalSymbol } from "../constants.mjs";
import { validateObject } from "./validate.mjs";
export {UniqueQueue}
export { UniqueQueue };
/**
* An UniqueQueue is a queue that contains items only once.
......@@ -21,14 +21,13 @@ export {UniqueQueue}
* @summary A queue for unique values
*/
class UniqueQueue extends Queue {
/**
*
*/
constructor() {
super();
this[internalSymbol] = {
unique : new WeakSet()
unique: new WeakSet(),
};
}
......@@ -40,7 +39,6 @@ export {UniqueQueue}
* @throws {TypeError} value is not a object
*/
add(value) {
validateObject(value);
if (!this[internalSymbol].unique.has(value)) {
......@@ -58,7 +56,7 @@ export {UniqueQueue}
*/
clear() {
super.clear();
this[internalSymbol].unique = new WeakSet;
this[internalSymbol].unique = new WeakSet();
return this;
}
......@@ -69,7 +67,6 @@ export {UniqueQueue}
* @return {object}
*/
poll() {
if (this.isEmpty()) {
return undefined;
}
......@@ -77,6 +74,4 @@ export {UniqueQueue}
this[internalSymbol].unique.delete(value);
return value;
}
}
......@@ -7,11 +7,11 @@
import { internalSymbol } from "../constants.mjs";
import { random } from "../math/random.mjs";
import {isObject} from '../types/is.mjs';
import { isObject } from "../types/is.mjs";
import { Base } from "./base.mjs";
import { getGlobalObject } from "./global.mjs";
export {UUID}
export { UUID };
/**
* The UUID class makes it possible to get a unique UUID for an object.
......@@ -23,7 +23,6 @@ export {UUID}
* @throws {Error} unsupported
*/
class UUID extends Base {
/**
*
*/
......@@ -36,15 +35,13 @@ export {UUID}
uuid = createWithRandom();
}
if (uuid === undefined) {
throw new Error('unsupported')
throw new Error("unsupported");
}
this[internalSymbol] = {
value: uuid
}
value: uuid,
};
}
/**
......@@ -52,10 +49,8 @@ export {UUID}
* @return {string}
*/
toString() {
return this[internalSymbol]['value'];
return this[internalSymbol]["value"];
}
}
/**
......@@ -63,22 +58,20 @@ export {UUID}
* @return {string|undefined}
*/
function createWithRandom() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = random(0, 65000) * 16 | 0,
v = ((c === 'x') ? r : (r & 0x3 | 0x8));
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
const r = (random(0, 65000) * 16) | 0;
const v = c === "x" ? r : (r & 0x3) | 0x8;
return v.toString(16)[0];
})
});
}
/**
* @private
* @return {string|undefined}
*/
function createWithCrypto() {
const crypt = getGlobalObject('crypto');
const crypt = getGlobalObject("crypto");
if (!isObject(crypt)) return;
if (typeof crypt?.['randomUUID']) return;
if (typeof crypt?.["randomUUID"]) return;
return crypt.randomUUID();
}
......@@ -15,8 +15,8 @@ import {
isObject,
isPrimitive,
isString,
isSymbol
} from './is.mjs';
isSymbol,
} from "./is.mjs";
export {
validateIterable,
......@@ -28,8 +28,8 @@ export {
validateArray,
validateSymbol,
validateFunction,
validateInteger
}
validateInteger,
};
/**
* This method checks if the type matches the primitive type. this function is identical to isPrimitive() except that a TypeError is thrown.
......@@ -55,9 +55,9 @@ export {
*/
function validateIterable(value) {
if (!isIterable(value)) {
throw new TypeError('value is not iterable')
throw new TypeError("value is not iterable");
}
return value
return value;
}
/**
......@@ -84,9 +84,9 @@ function validateIterable(value) {
*/
function validatePrimitive(value) {
if (!isPrimitive(value)) {
throw new TypeError('value is not a primitive')
throw new TypeError("value is not a primitive");
}
return value
return value;
}
/**
......@@ -112,9 +112,9 @@ function validatePrimitive(value) {
*/
function validateBoolean(value) {
if (!isBoolean(value)) {
throw new TypeError('value is not a boolean')
throw new TypeError("value is not a boolean");
}
return value
return value;
}
/**
......@@ -138,12 +138,11 @@ function validateBoolean(value) {
*/
function validateString(value) {
if (!isString(value)) {
throw new TypeError('value is not a string')
throw new TypeError("value is not a string");
}
return value
return value;
}
/**
* This method checks if the type matches the object type. this function is identical to isObject() except that a TypeError is thrown.
*
......@@ -166,9 +165,9 @@ function validateString(value) {
*/
function validateObject(value) {
if (!isObject(value)) {
throw new TypeError('value is not a object')
throw new TypeError("value is not a object");
}
return value
return value;
}
/**
......@@ -195,16 +194,16 @@ function validateInstance(value, instance) {
if (!isInstance(value, instance)) {
let n = "";
if (isObject(instance) || isFunction(instance)) {
n = instance?.['name']
n = instance?.["name"];
}
if (n) {
n = " " + n;
n = ` ${n}`;
}
throw new TypeError('value is not an instance of' + n)
throw new TypeError(`value is not an instance of${n}`);
}
return value
return value;
}
/**
......@@ -228,9 +227,9 @@ function validateInstance(value, instance) {
*/
function validateArray(value) {
if (!isArray(value)) {
throw new TypeError('value is not an array')
throw new TypeError("value is not an array");
}
return value
return value;
}
/**
......@@ -254,9 +253,9 @@ function validateArray(value) {
*/
function validateSymbol(value) {
if (!isSymbol(value)) {
throw new TypeError('value is not an symbol')
throw new TypeError("value is not an symbol");
}
return value
return value;
}
/**
......@@ -281,9 +280,9 @@ function validateSymbol(value) {
*/
function validateFunction(value) {
if (!isFunction(value)) {
throw new TypeError('value is not a function')
throw new TypeError("value is not a function");
}
return value
return value;
}
/**
......@@ -308,7 +307,7 @@ function validateFunction(value) {
*/
function validateInteger(value) {
if (!isInteger(value)) {
throw new TypeError('value is not an integer')
throw new TypeError("value is not an integer");
}
return value
return value;
}
......@@ -5,11 +5,10 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {Base} from './base.mjs';
import {instanceSymbol} from '../constants.mjs';
export {Version, getMonsterVersion}
import { Base } from "./base.mjs";
import { instanceSymbol } from "../constants.mjs";
export { Version, getMonsterVersion };
/**
* The version object contains a semantic version number
......@@ -23,7 +22,6 @@ export {Version, getMonsterVersion}
* @summary The version object contains a sematic version number
*/
class Version extends Base {
/**
*
* @param major
......@@ -36,9 +34,8 @@ class Version extends Base {
constructor(major, minor, patch) {
super();
if (typeof major === 'string' && minor === undefined && patch === undefined) {
let parts = major.toString().split('.');
if (typeof major === "string" && minor === undefined && patch === undefined) {
let parts = major.toString().split(".");
major = parseInt(parts[0] || 0);
minor = parseInt(parts[1] || 0);
patch = parseInt(parts[2] || 0);
......@@ -71,7 +68,6 @@ class Version extends Base {
if (isNaN(this.patch)) {
throw new Error("patch is not a number");
}
}
/**
......@@ -83,13 +79,12 @@ class Version extends Base {
return Symbol.for("@schukai/monster/types/version");
}
/**
*
* @returns {string}
*/
toString() {
return this.major + '.' + this.minor + '.' + this.patch;
return `${this.major}.${this.minor}.${this.patch}`;
}
/**
......@@ -100,12 +95,11 @@ class Version extends Base {
* @returns {number}
*/
compareTo(version) {
if (version instanceof Version) {
version = version.toString();
}
if (typeof version !== 'string') {
if (typeof version !== "string") {
throw new Error("type exception");
}
......@@ -114,20 +108,19 @@ class Version extends Base {
}
let a = [this.major, this.minor, this.patch];
let b = version.split('.');
let b = version.split(".");
let len = Math.max(a.length, b.length);
for (let i = 0; i < len; i += 1) {
if ((a[i] && !b[i] && parseInt(a[i]) > 0) || (parseInt(a[i]) > parseInt(b[i]))) {
if ((a[i] && !b[i] && parseInt(a[i]) > 0) || parseInt(a[i]) > parseInt(b[i])) {
return 1;
} else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || (parseInt(a[i]) < parseInt(b[i]))) {
} else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || parseInt(a[i]) < parseInt(b[i])) {
return -1;
}
}
return 0;
};
}
}
let monsterVersion;
......@@ -149,8 +142,7 @@ function getMonsterVersion() {
}
/** don't touch, replaced by make with package.json version */
monsterVersion = new Version('3.4.2')
monsterVersion = new Version("3.5.0");
return monsterVersion;
}
......@@ -5,12 +5,12 @@
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {getGlobal} from '../types/global.mjs';
import {isArray, isFunction, isObject, isPrimitive} from '../types/is.mjs';
import { getGlobal } from "../types/global.mjs";
import { isArray, isFunction, isObject, isPrimitive } from "../types/is.mjs";
import { typeOf } from "../types/typeof.mjs";
import { validateObject } from "../types/validate.mjs";
export {clone}
export { clone };
/**
* With this function, objects can be cloned.
......@@ -30,7 +30,6 @@ export {clone}
* @throws {Error} unable to clone obj! its type isn't supported.
*/
function clone(obj) {
// typeof null results in 'object'. https://2ality.com/2013/10/typeof-null.html
if (null === obj) {
return obj;
......@@ -57,8 +56,6 @@ function clone(obj) {
}
if (isObject(obj)) {
// Handle Date
if (obj instanceof Date) {
let copy = new Date();
......@@ -67,17 +64,17 @@ function clone(obj) {
}
/** Do not clone DOM nodes */
if (typeof Element !== 'undefined' && obj instanceof Element) return obj;
if (typeof HTMLDocument !== 'undefined' && obj instanceof HTMLDocument) return obj;
if (typeof DocumentFragment !== 'undefined' && obj instanceof DocumentFragment) return obj;
if (typeof Element !== "undefined" && obj instanceof Element) return obj;
if (typeof HTMLDocument !== "undefined" && obj instanceof HTMLDocument) return obj;
if (typeof DocumentFragment !== "undefined" && obj instanceof DocumentFragment) return obj;
/** Do not clone global objects */
if (obj === getGlobal()) return obj;
if (typeof globalContext !== 'undefined' && obj === globalContext) return obj;
if (typeof window !== 'undefined' && obj === window) return obj;
if (typeof document !== 'undefined' && obj === document) return obj;
if (typeof navigator !== 'undefined' && obj === navigator) return obj;
if (typeof JSON !== 'undefined' && obj === JSON) return obj;
if (typeof globalContext !== "undefined" && obj === globalContext) return obj;
if (typeof window !== "undefined" && obj === window) return obj;
if (typeof document !== "undefined" && obj === document) return obj;
if (typeof navigator !== "undefined" && obj === navigator) return obj;
if (typeof JSON !== "undefined" && obj === JSON) return obj;
// Handle Proxy-Object
try {
......@@ -85,11 +82,9 @@ function clone(obj) {
if (obj instanceof Proxy) {
return obj;
}
} catch (e) {
}
return cloneObject(obj)
} catch (e) {}
return cloneObject(obj);
}
throw new Error("unable to clone obj! its type isn't supported.");
......@@ -102,29 +97,26 @@ function clone(obj) {
* @private
*/
function cloneObject(obj) {
validateObject(obj);
const constructor = obj?.['constructor'];
const fkt = obj?.["constructor"];
/** Object has clone method */
if(typeOf(constructor)==='function') {
const prototype = constructor?.prototype;
if(typeof prototype==='object') {
if(prototype.hasOwnProperty('getClone')&& typeOf(obj.getClone) === 'function') {
if (typeOf(fkt) === "function") {
const prototype = fkt?.prototype;
if (typeof prototype === "object") {
if (prototype.hasOwnProperty("getClone") && typeOf(obj.getClone) === "function") {
return obj.getClone();
}
}
}
let copy = {};
if (typeof obj.constructor === 'function' &&
typeof obj.constructor.call === 'function') {
if (typeof obj.constructor === "function" && typeof obj.constructor.call === "function") {
copy = new obj.constructor();
}
for (let key in obj) {
if (!obj.hasOwnProperty(key)) {
continue;
}
......@@ -139,4 +131,3 @@ function cloneObject(obj) {
return copy;
}