@schukai/monster 3.42.1 → 3.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/source/data/datasource/server/restapi/data-fetch-error.mjs +50 -0
- package/source/data/datasource/server/restapi.mjs +8 -7
- package/source/dom/customelement.mjs +24 -11
- package/source/dom/updater.mjs +1 -1
- package/source/types/version.mjs +1 -1
- package/test/cases/monster.mjs +1 -1
package/package.json
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright schukai GmbH and contributors 2023. All Rights Reserved.
|
|
3
|
+
* Node module: @schukai/monster
|
|
4
|
+
* This file is licensed under the AGPLv3 License.
|
|
5
|
+
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { internalSymbol, instanceSymbol } from "../../../../constants.mjs";
|
|
9
|
+
|
|
10
|
+
export { DataFetchError };
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Error message for API requests
|
|
14
|
+
*
|
|
15
|
+
* @license AGPLv3
|
|
16
|
+
* @since 3.43.0
|
|
17
|
+
* @copyright schukai GmbH
|
|
18
|
+
* @memberOf Monster.Data.Datasource.Server.RestAPI
|
|
19
|
+
* @summary the error is thrown by the rest api in case of error
|
|
20
|
+
*/
|
|
21
|
+
class DataFetchError extends Error {
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @param {string} message
|
|
25
|
+
* @param {Response} response
|
|
26
|
+
*/
|
|
27
|
+
constructor(message, response) {
|
|
28
|
+
super(message);
|
|
29
|
+
this[internalSymbol] = {
|
|
30
|
+
response: response
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* This method is called by the `instanceof` operator.
|
|
36
|
+
* @returns {symbol}
|
|
37
|
+
* @since 2.1.0
|
|
38
|
+
*/
|
|
39
|
+
static get [instanceSymbol]() {
|
|
40
|
+
return Symbol.for("@schukai/monster/data/datasource/server/restapi/datafetcherror@@instance");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @return {Response}
|
|
45
|
+
*/
|
|
46
|
+
getResponse() {
|
|
47
|
+
return this[internalSymbol]["response"];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
8
|
+
import {internalSymbol, instanceSymbol} from "../../../constants.mjs";
|
|
9
|
+
import {isObject, isFunction} from "../../../types/is.mjs";
|
|
10
|
+
import {Server} from "../server.mjs";
|
|
11
|
+
import {WriteError} from "./restapi/writeerror.mjs";
|
|
12
|
+
import {DataFetchError} from "./restapi/data-fetch-error.mjs";
|
|
12
13
|
|
|
13
|
-
export {
|
|
14
|
+
export {RestAPI};
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @type {symbol}
|
|
@@ -188,7 +189,7 @@ function fetchData(init, key, callback) {
|
|
|
188
189
|
const acceptedStatus = self.getOption(`${key}.acceptedStatus`, [200]);
|
|
189
190
|
|
|
190
191
|
if (acceptedStatus.indexOf(resp.status) === -1) {
|
|
191
|
-
throw
|
|
192
|
+
throw new DataFetchError(`the response does not contain a accepted status (actual: ${resp.status}).`, response);
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
return resp.text();
|
|
@@ -205,7 +206,7 @@ function fetchData(init, key, callback) {
|
|
|
205
206
|
body = `${body.substring(0, 97)}...`;
|
|
206
207
|
}
|
|
207
208
|
|
|
208
|
-
throw new
|
|
209
|
+
throw new DataFetchError(`the response does not contain a valid json (actual: ${body}).`, response);
|
|
209
210
|
}
|
|
210
211
|
|
|
211
212
|
if (callback && isFunction(callback)) {
|
|
@@ -203,9 +203,9 @@ class CustomElement extends HTMLElement {
|
|
|
203
203
|
this[internalSymbol] = new ProxyObserver({
|
|
204
204
|
options: initOptionsFromAttributes(this, extend({}, this.defaults)),
|
|
205
205
|
});
|
|
206
|
-
initAttributeChangeMutationObserver.call(this);
|
|
207
|
-
initOptionObserver.call(this);
|
|
208
206
|
this[initMethodSymbol]();
|
|
207
|
+
initOptionObserver.call(this);
|
|
208
|
+
initAttributeChangeMutationObserver.call(this);
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
/**
|
|
@@ -229,6 +229,28 @@ class CustomElement extends HTMLElement {
|
|
|
229
229
|
return [ATTRIBUTE_OPTIONS, ATTRIBUTE_DISABLED];
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
+
/**
|
|
233
|
+
*
|
|
234
|
+
* @param attribute
|
|
235
|
+
* @param callback
|
|
236
|
+
* @returns {Monster.DOM.CustomElement}
|
|
237
|
+
*/
|
|
238
|
+
addAttributeObserver(attribute, callback) {
|
|
239
|
+
validateFunction(callback);
|
|
240
|
+
this[attributeObserverSymbol][attribute] = callback;
|
|
241
|
+
return this;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
*
|
|
246
|
+
* @param attribute
|
|
247
|
+
* @returns {Monster.DOM.CustomElement}
|
|
248
|
+
*/
|
|
249
|
+
removeAttributeObserver(attribute) {
|
|
250
|
+
delete this[attributeObserverSymbol][attribute];
|
|
251
|
+
return this;
|
|
252
|
+
}
|
|
253
|
+
|
|
232
254
|
/**
|
|
233
255
|
* Derived classes can override and extend this method as follows.
|
|
234
256
|
*
|
|
@@ -611,14 +633,6 @@ class CustomElement extends HTMLElement {
|
|
|
611
633
|
function initAttributeChangeMutationObserver() {
|
|
612
634
|
const self = this;
|
|
613
635
|
|
|
614
|
-
if (self[attributeObserverSymbol] === undefined) {
|
|
615
|
-
self[attributeObserverSymbol] = {};
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
if(Object.keys(self[attributeObserverSymbol]).length === 0) {
|
|
619
|
-
return;
|
|
620
|
-
}
|
|
621
|
-
|
|
622
636
|
new MutationObserver(function (mutations) {
|
|
623
637
|
for (const mutation of mutations) {
|
|
624
638
|
if (mutation.type === "attributes") {
|
|
@@ -628,7 +642,6 @@ function initAttributeChangeMutationObserver() {
|
|
|
628
642
|
}).observe(self, {
|
|
629
643
|
attributes: true,
|
|
630
644
|
attributeOldValue: true,
|
|
631
|
-
attributeFilter: Object.keys(self[attributeObserverSymbol]),
|
|
632
645
|
});
|
|
633
646
|
}
|
|
634
647
|
|
package/source/dom/updater.mjs
CHANGED
|
@@ -37,7 +37,7 @@ export { Updater, addObjectWithUpdaterToElement };
|
|
|
37
37
|
* The updater class connects an object with the dom. In this way, structures and contents in the DOM can be programmatically adapted via attributes.
|
|
38
38
|
*
|
|
39
39
|
* For example, to include a string from an object, the attribute `data-monster-replace` can be used.
|
|
40
|
-
* a further explanation can be found under
|
|
40
|
+
* a further explanation can be found under [monsterjs.org](https://monsterjs.org/)
|
|
41
41
|
*
|
|
42
42
|
* Changes to attributes are made only when the direct values are changed. If you want to assign changes to other values
|
|
43
43
|
* as well, you have to insert the attribute `data-monster-select-this`. This should be done with care, as it can reduce performance.
|
package/source/types/version.mjs
CHANGED
package/test/cases/monster.mjs
CHANGED