vasille 3.0.2 → 3.2.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/README.md +10 -10
- package/lib/core/core.js +40 -24
- package/lib/core/ivalue.js +1 -2
- package/lib/index.js +20 -22
- package/lib/node/app.js +7 -7
- package/lib/node/node.js +47 -360
- package/lib/node/watch.js +5 -6
- package/lib/{binding → runner/web/binding}/attribute.js +1 -1
- package/lib/{binding → runner/web/binding}/binding.js +1 -1
- package/lib/{binding → runner/web/binding}/class.js +3 -1
- package/lib/{binding → runner/web/binding}/style.js +2 -1
- package/lib/runner/web/runner.js +165 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/value/expression.js +3 -2
- package/lib/value/pointer.js +8 -12
- package/lib/value/reference.js +2 -2
- package/lib/views/array-view.js +1 -1
- package/lib/views/base-view.js +3 -3
- package/lib/views/map-view.js +1 -1
- package/lib/views/repeat-node.js +5 -6
- package/lib/views/set-view.js +3 -3
- package/package.json +31 -25
- package/types/core/core.d.ts +14 -13
- package/types/index.d.ts +22 -24
- package/types/node/app.d.ts +8 -7
- package/types/node/node.d.ts +49 -144
- package/types/node/runner.d.ts +10 -0
- package/types/node/watch.d.ts +7 -6
- package/types/{binding → runner/web/binding}/attribute.d.ts +4 -4
- package/types/{binding → runner/web/binding}/binding.d.ts +2 -2
- package/types/runner/web/binding/class.d.ts +11 -0
- package/types/{binding → runner/web/binding}/style.d.ts +4 -4
- package/types/runner/web/runner.d.ts +42 -0
- package/types/tsconfig-types.tsbuildinfo +1 -1
- package/types/value/expression.d.ts +2 -2
- package/types/value/pointer.d.ts +1 -1
- package/types/value/reference.d.ts +1 -1
- package/types/views/array-view.d.ts +5 -5
- package/types/views/base-view.d.ts +7 -6
- package/types/views/map-view.d.ts +3 -3
- package/types/views/repeat-node.d.ts +8 -7
- package/types/views/set-view.d.ts +5 -4
- package/lib/core/config.js +0 -3
- package/lib/models/array-model.js +0 -147
- package/lib/models/listener.js +0 -66
- package/lib/models/map-model.js +0 -59
- package/lib/models/model.js +0 -1
- package/lib/models/object-model.js +0 -78
- package/lib/models/set-model.js +0 -55
- package/lib/spec/html.js +0 -1
- package/lib/spec/react.js +0 -1
- package/lib/spec/svg.js +0 -1
- package/lib/tsconfig-build.tsbuildinfo +0 -1
- package/lib/value/mirror.js +0 -42
- package/lib/views/object-view.js +0 -17
- package/lib-node/binding/attribute.js +0 -34
- package/lib-node/binding/binding.js +0 -32
- package/lib-node/binding/class.js +0 -46
- package/lib-node/binding/style.js +0 -36
- package/lib-node/core/config.js +0 -6
- package/lib-node/core/core.js +0 -101
- package/lib-node/core/destroyable.js +0 -14
- package/lib-node/core/errors.js +0 -22
- package/lib-node/core/ivalue.js +0 -19
- package/lib-node/functional/options.js +0 -2
- package/lib-node/functional/safety.js +0 -12
- package/lib-node/index.js +0 -51
- package/lib-node/models/array-model.js +0 -152
- package/lib-node/models/listener.js +0 -70
- package/lib-node/models/map-model.js +0 -63
- package/lib-node/models/model.js +0 -2
- package/lib-node/models/object-model.js +0 -82
- package/lib-node/models/set-model.js +0 -59
- package/lib-node/node/app.js +0 -34
- package/lib-node/node/node.js +0 -656
- package/lib-node/node/watch.js +0 -26
- package/lib-node/spec/html.js +0 -2
- package/lib-node/spec/react.js +0 -2
- package/lib-node/spec/svg.js +0 -2
- package/lib-node/tsconfig-build-node.tsbuildinfo +0 -1
- package/lib-node/value/expression.js +0 -65
- package/lib-node/value/mirror.js +0 -46
- package/lib-node/value/pointer.js +0 -79
- package/lib-node/value/reference.js +0 -50
- package/lib-node/views/array-view.js +0 -21
- package/lib-node/views/base-view.js +0 -31
- package/lib-node/views/map-view.js +0 -18
- package/lib-node/views/object-view.js +0 -21
- package/lib-node/views/repeat-node.js +0 -53
- package/lib-node/views/set-view.js +0 -22
- package/types/binding/class.d.ts +0 -11
- package/types/core/config.d.ts +0 -3
- package/types/functional/options.d.ts +0 -10
- package/types/models/array-model.d.ts +0 -55
- package/types/models/listener.d.ts +0 -48
- package/types/models/map-model.d.ts +0 -34
- package/types/models/model.d.ts +0 -14
- package/types/models/object-model.d.ts +0 -38
- package/types/models/set-model.d.ts +0 -33
- package/types/spec/html.d.ts +0 -975
- package/types/spec/react.d.ts +0 -4
- package/types/spec/svg.d.ts +0 -314
- package/types/value/mirror.d.ts +0 -33
- package/types/views/object-view.d.ts +0 -10
- /package/lib/{functional/options.js → node/runner.js} +0 -0
package/lib-node/core/core.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Reactive = void 0;
|
|
4
|
-
const destroyable_js_1 = require("./destroyable.js");
|
|
5
|
-
const expression_1 = require("../value/expression");
|
|
6
|
-
const reference_1 = require("../value/reference");
|
|
7
|
-
const pointer_1 = require("../value/pointer");
|
|
8
|
-
/**
|
|
9
|
-
* A reactive object
|
|
10
|
-
* @class Reactive
|
|
11
|
-
* @extends Destroyable
|
|
12
|
-
*/
|
|
13
|
-
class Reactive extends destroyable_js_1.Destroyable {
|
|
14
|
-
constructor(input) {
|
|
15
|
-
super();
|
|
16
|
-
/**
|
|
17
|
-
* A list of user-defined values
|
|
18
|
-
* @type {Set}
|
|
19
|
-
*/
|
|
20
|
-
this._watch = new Set();
|
|
21
|
-
/**
|
|
22
|
-
* A list of user-defined bindings
|
|
23
|
-
* @type {Set}
|
|
24
|
-
*/
|
|
25
|
-
this.bindings = new Set();
|
|
26
|
-
this.input = input;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Create a reference
|
|
30
|
-
* @param value {*} value to reference
|
|
31
|
-
*/
|
|
32
|
-
ref(value) {
|
|
33
|
-
const ref = new reference_1.Reference(value);
|
|
34
|
-
this._watch.add(ref);
|
|
35
|
-
return ref;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Create a forward-only pointer
|
|
39
|
-
* @param value {IValue} value to point
|
|
40
|
-
*/
|
|
41
|
-
forward(value) {
|
|
42
|
-
const mirror = new pointer_1.Pointer(value);
|
|
43
|
-
this._watch.add(mirror);
|
|
44
|
-
return mirror;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Creates a pointer
|
|
48
|
-
* @param value {*} default value to point
|
|
49
|
-
*/
|
|
50
|
-
own(value) {
|
|
51
|
-
const pointer = new pointer_1.OwningPointer(value);
|
|
52
|
-
this._watch.add(pointer);
|
|
53
|
-
return pointer;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Register a model/dependency
|
|
57
|
-
*/
|
|
58
|
-
register(data) {
|
|
59
|
-
this.bindings.add(data);
|
|
60
|
-
return data;
|
|
61
|
-
}
|
|
62
|
-
release(data) {
|
|
63
|
-
this.bindings.delete(data);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Creates a watcher
|
|
67
|
-
* @param func {function} function to run on any argument change
|
|
68
|
-
* @param values
|
|
69
|
-
*/
|
|
70
|
-
watch(func, ...values) {
|
|
71
|
-
this._watch.add(new expression_1.Expression(func, ...values));
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Creates a computed value
|
|
75
|
-
* @param func {function} function to run on any argument change
|
|
76
|
-
* @param values
|
|
77
|
-
* @return {IValue} the created ivalue
|
|
78
|
-
*/
|
|
79
|
-
expr(func, ...values) {
|
|
80
|
-
const res = new expression_1.Expression(func, ...values);
|
|
81
|
-
this._watch.add(res);
|
|
82
|
-
return res;
|
|
83
|
-
}
|
|
84
|
-
runOnDestroy(func) {
|
|
85
|
-
if (this.onDestroy) {
|
|
86
|
-
console.warn(new Error("You rewrite onDestroy existing handler"));
|
|
87
|
-
console.log(this.onDestroy);
|
|
88
|
-
}
|
|
89
|
-
this.onDestroy = func;
|
|
90
|
-
}
|
|
91
|
-
destroy() {
|
|
92
|
-
var _a;
|
|
93
|
-
super.destroy();
|
|
94
|
-
this._watch.forEach(value => value.destroy());
|
|
95
|
-
this._watch.clear();
|
|
96
|
-
this.bindings.forEach(binding => binding.destroy());
|
|
97
|
-
this.bindings.clear();
|
|
98
|
-
(_a = this.onDestroy) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
exports.Reactive = Reactive;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Destroyable = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Mark an object which can be destroyed
|
|
6
|
-
* @class Destroyable
|
|
7
|
-
*/
|
|
8
|
-
class Destroyable {
|
|
9
|
-
/**
|
|
10
|
-
* Garbage collector method
|
|
11
|
-
*/
|
|
12
|
-
destroy() { }
|
|
13
|
-
}
|
|
14
|
-
exports.Destroyable = Destroyable;
|
package/lib-node/core/errors.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.notOverwritten = notOverwritten;
|
|
4
|
-
exports.internalError = internalError;
|
|
5
|
-
exports.userError = userError;
|
|
6
|
-
exports.wrongBinding = wrongBinding;
|
|
7
|
-
const reportIt = "Report it here: https://gitlab.com/vasille-js/vasille-js/-/issues";
|
|
8
|
-
function notOverwritten() {
|
|
9
|
-
console.error("Vasille-SFP: Internal error", "Must be overwritten", reportIt);
|
|
10
|
-
return "not-overwritten";
|
|
11
|
-
}
|
|
12
|
-
function internalError(msg) {
|
|
13
|
-
console.error("Vasille-SFP: Internal error", msg, reportIt);
|
|
14
|
-
return "internal-error";
|
|
15
|
-
}
|
|
16
|
-
function userError(msg, err) {
|
|
17
|
-
console.error("Vasille-SFP: User error", msg);
|
|
18
|
-
return err;
|
|
19
|
-
}
|
|
20
|
-
function wrongBinding(msg) {
|
|
21
|
-
return userError(msg, "wrong-binding");
|
|
22
|
-
}
|
package/lib-node/core/ivalue.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.IValue = void 0;
|
|
4
|
-
const destroyable_js_1 = require("./destroyable.js");
|
|
5
|
-
/**
|
|
6
|
-
* Interface which describes a value
|
|
7
|
-
* @class IValue
|
|
8
|
-
* @extends Destroyable
|
|
9
|
-
*/
|
|
10
|
-
class IValue extends destroyable_js_1.Destroyable {
|
|
11
|
-
toJSON() {
|
|
12
|
-
return this.$;
|
|
13
|
-
}
|
|
14
|
-
toString() {
|
|
15
|
-
var _a, _b;
|
|
16
|
-
return (_b = (_a = this.$) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : "iValue<void>";
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
exports.IValue = IValue;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.reportError = void 0;
|
|
4
|
-
exports.setErrorHandler = setErrorHandler;
|
|
5
|
-
let reportError = (e) => {
|
|
6
|
-
console.error(e);
|
|
7
|
-
console.log("Docs Link /");
|
|
8
|
-
};
|
|
9
|
-
exports.reportError = reportError;
|
|
10
|
-
function setErrorHandler(handler) {
|
|
11
|
-
exports.reportError = handler;
|
|
12
|
-
}
|
package/lib-node/index.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.reportError = exports.setErrorHandler = exports.config = exports.userError = exports.Watch = exports.Reactive = exports.Binding = exports.Expression = exports.Portal = exports.App = exports.Extension = exports.Tag = exports.INode = exports.Fragment = exports.SetView = exports.MapView = exports.ArrayView = exports.Listener = exports.BaseView = exports.SetModel = exports.MapModel = exports.proxyArrayModel = exports.ArrayModel = exports.Pointer = exports.Reference = exports.IValue = exports.Destroyable = void 0;
|
|
4
|
-
const config_1 = require("./core/config");
|
|
5
|
-
Object.defineProperty(exports, "config", { enumerable: true, get: function () { return config_1.config; } });
|
|
6
|
-
const destroyable_1 = require("./core/destroyable");
|
|
7
|
-
Object.defineProperty(exports, "Destroyable", { enumerable: true, get: function () { return destroyable_1.Destroyable; } });
|
|
8
|
-
const core_1 = require("./core/core");
|
|
9
|
-
Object.defineProperty(exports, "Reactive", { enumerable: true, get: function () { return core_1.Reactive; } });
|
|
10
|
-
const ivalue_1 = require("./core/ivalue");
|
|
11
|
-
Object.defineProperty(exports, "IValue", { enumerable: true, get: function () { return ivalue_1.IValue; } });
|
|
12
|
-
const safety_1 = require("./functional/safety");
|
|
13
|
-
Object.defineProperty(exports, "reportError", { enumerable: true, get: function () { return safety_1.reportError; } });
|
|
14
|
-
Object.defineProperty(exports, "setErrorHandler", { enumerable: true, get: function () { return safety_1.setErrorHandler; } });
|
|
15
|
-
const array_model_1 = require("./models/array-model");
|
|
16
|
-
Object.defineProperty(exports, "ArrayModel", { enumerable: true, get: function () { return array_model_1.ArrayModel; } });
|
|
17
|
-
Object.defineProperty(exports, "proxyArrayModel", { enumerable: true, get: function () { return array_model_1.proxyArrayModel; } });
|
|
18
|
-
const listener_1 = require("./models/listener");
|
|
19
|
-
Object.defineProperty(exports, "Listener", { enumerable: true, get: function () { return listener_1.Listener; } });
|
|
20
|
-
const map_model_1 = require("./models/map-model");
|
|
21
|
-
Object.defineProperty(exports, "MapModel", { enumerable: true, get: function () { return map_model_1.MapModel; } });
|
|
22
|
-
const set_model_1 = require("./models/set-model");
|
|
23
|
-
Object.defineProperty(exports, "SetModel", { enumerable: true, get: function () { return set_model_1.SetModel; } });
|
|
24
|
-
const app_1 = require("./node/app");
|
|
25
|
-
Object.defineProperty(exports, "App", { enumerable: true, get: function () { return app_1.App; } });
|
|
26
|
-
Object.defineProperty(exports, "Portal", { enumerable: true, get: function () { return app_1.Portal; } });
|
|
27
|
-
const node_1 = require("./node/node");
|
|
28
|
-
Object.defineProperty(exports, "Extension", { enumerable: true, get: function () { return node_1.Extension; } });
|
|
29
|
-
Object.defineProperty(exports, "Fragment", { enumerable: true, get: function () { return node_1.Fragment; } });
|
|
30
|
-
Object.defineProperty(exports, "INode", { enumerable: true, get: function () { return node_1.INode; } });
|
|
31
|
-
Object.defineProperty(exports, "Tag", { enumerable: true, get: function () { return node_1.Tag; } });
|
|
32
|
-
const expression_1 = require("./value/expression");
|
|
33
|
-
Object.defineProperty(exports, "Expression", { enumerable: true, get: function () { return expression_1.Expression; } });
|
|
34
|
-
const pointer_1 = require("./value/pointer");
|
|
35
|
-
Object.defineProperty(exports, "Pointer", { enumerable: true, get: function () { return pointer_1.Pointer; } });
|
|
36
|
-
const reference_1 = require("./value/reference");
|
|
37
|
-
Object.defineProperty(exports, "Reference", { enumerable: true, get: function () { return reference_1.Reference; } });
|
|
38
|
-
const array_view_1 = require("./views/array-view");
|
|
39
|
-
Object.defineProperty(exports, "ArrayView", { enumerable: true, get: function () { return array_view_1.ArrayView; } });
|
|
40
|
-
const base_view_1 = require("./views/base-view");
|
|
41
|
-
Object.defineProperty(exports, "BaseView", { enumerable: true, get: function () { return base_view_1.BaseView; } });
|
|
42
|
-
const map_view_1 = require("./views/map-view");
|
|
43
|
-
Object.defineProperty(exports, "MapView", { enumerable: true, get: function () { return map_view_1.MapView; } });
|
|
44
|
-
const set_view_1 = require("./views/set-view");
|
|
45
|
-
Object.defineProperty(exports, "SetView", { enumerable: true, get: function () { return set_view_1.SetView; } });
|
|
46
|
-
const binding_1 = require("./binding/binding");
|
|
47
|
-
Object.defineProperty(exports, "Binding", { enumerable: true, get: function () { return binding_1.Binding; } });
|
|
48
|
-
const errors_1 = require("./core/errors");
|
|
49
|
-
Object.defineProperty(exports, "userError", { enumerable: true, get: function () { return errors_1.userError; } });
|
|
50
|
-
const watch_1 = require("./node/watch");
|
|
51
|
-
Object.defineProperty(exports, "Watch", { enumerable: true, get: function () { return watch_1.Watch; } });
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ArrayModel = void 0;
|
|
4
|
-
exports.proxyArrayModel = proxyArrayModel;
|
|
5
|
-
const listener_1 = require("./listener");
|
|
6
|
-
/**
|
|
7
|
-
* Model based on Array class
|
|
8
|
-
* @extends Array
|
|
9
|
-
* @implements IModel
|
|
10
|
-
*/
|
|
11
|
-
class ArrayModel extends Array {
|
|
12
|
-
/**
|
|
13
|
-
* @param data {Array} input data
|
|
14
|
-
*/
|
|
15
|
-
constructor(data) {
|
|
16
|
-
super();
|
|
17
|
-
this.passive = false;
|
|
18
|
-
this.listener = new listener_1.Listener();
|
|
19
|
-
if (data instanceof Array) {
|
|
20
|
-
for (let i = 0; i < data.length; i++) {
|
|
21
|
-
super.push(data[i]);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/* Array members */
|
|
26
|
-
/**
|
|
27
|
-
* Calls Array.fill and notify about changes
|
|
28
|
-
* @param value {*} value to fill with
|
|
29
|
-
* @param start {?number} begin index
|
|
30
|
-
* @param end {?number} end index
|
|
31
|
-
*/
|
|
32
|
-
fill(value, start, end) {
|
|
33
|
-
this.passive = true;
|
|
34
|
-
if (!start) {
|
|
35
|
-
start = 0;
|
|
36
|
-
}
|
|
37
|
-
if (!end) {
|
|
38
|
-
end = this.length;
|
|
39
|
-
}
|
|
40
|
-
for (let i = start; i < end; i++) {
|
|
41
|
-
this.listener.emitRemoved(this[i], this[i]);
|
|
42
|
-
this[i] = value;
|
|
43
|
-
this.listener.emitAdded(value, value);
|
|
44
|
-
}
|
|
45
|
-
this.passive = false;
|
|
46
|
-
return this;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Calls Array.pop and notify about changes
|
|
50
|
-
* @return {*} removed value
|
|
51
|
-
*/
|
|
52
|
-
pop() {
|
|
53
|
-
this.passive = true;
|
|
54
|
-
const v = super.pop();
|
|
55
|
-
if (v !== undefined) {
|
|
56
|
-
this.listener.emitRemoved(v, v);
|
|
57
|
-
}
|
|
58
|
-
this.passive = false;
|
|
59
|
-
return v;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Calls Array.push and notify about changes
|
|
63
|
-
* @param items {...*} values to push
|
|
64
|
-
* @return {number} new length of array
|
|
65
|
-
*/
|
|
66
|
-
push(...items) {
|
|
67
|
-
this.passive = true;
|
|
68
|
-
items.forEach(item => {
|
|
69
|
-
this.listener.emitAdded(item, item);
|
|
70
|
-
super.push(item);
|
|
71
|
-
});
|
|
72
|
-
this.passive = false;
|
|
73
|
-
return this.length;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Calls Array.shift and notify about changed
|
|
77
|
-
* @return {*} the shifted value
|
|
78
|
-
*/
|
|
79
|
-
shift() {
|
|
80
|
-
this.passive = true;
|
|
81
|
-
const v = super.shift();
|
|
82
|
-
if (v !== undefined) {
|
|
83
|
-
this.listener.emitRemoved(v, v);
|
|
84
|
-
}
|
|
85
|
-
this.passive = false;
|
|
86
|
-
return v;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Calls Array.splice and notify about changed
|
|
90
|
-
* @param start {number} start index
|
|
91
|
-
* @param deleteCount {?number} delete count
|
|
92
|
-
* @param items {...*}
|
|
93
|
-
* @return {ArrayModel} a pointer to this
|
|
94
|
-
*/
|
|
95
|
-
splice(start, deleteCount, ...items) {
|
|
96
|
-
this.passive = true;
|
|
97
|
-
start = Math.min(start, this.length);
|
|
98
|
-
deleteCount = typeof deleteCount === "number" ? deleteCount : this.length - start;
|
|
99
|
-
const before = this[start + deleteCount];
|
|
100
|
-
for (let i = 0; i < deleteCount; i++) {
|
|
101
|
-
const index = start + deleteCount - i - 1;
|
|
102
|
-
if (this[index] !== undefined) {
|
|
103
|
-
this.listener.emitRemoved(this[index], this[index]);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
for (let i = 0; i < items.length; i++) {
|
|
107
|
-
this.listener.emitAdded(before, items[i]);
|
|
108
|
-
}
|
|
109
|
-
this.passive = false;
|
|
110
|
-
return new ArrayModel(super.splice(start, deleteCount, ...items));
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Calls Array.unshift and notify about changed
|
|
114
|
-
* @param items {...*} values to insert
|
|
115
|
-
* @return {number} the length after prepend
|
|
116
|
-
*/
|
|
117
|
-
unshift(...items) {
|
|
118
|
-
this.passive = true;
|
|
119
|
-
for (let i = 0; i < items.length; i++) {
|
|
120
|
-
this.listener.emitAdded(this[i], items[i]);
|
|
121
|
-
}
|
|
122
|
-
const r = super.unshift(...items);
|
|
123
|
-
this.passive = false;
|
|
124
|
-
return r;
|
|
125
|
-
}
|
|
126
|
-
replace(at, with_) {
|
|
127
|
-
this.passive = true;
|
|
128
|
-
this.listener.emitAdded(this[at], with_);
|
|
129
|
-
this.listener.emitRemoved(this[at], this[at]);
|
|
130
|
-
this[at] = with_;
|
|
131
|
-
this.passive = false;
|
|
132
|
-
return this;
|
|
133
|
-
}
|
|
134
|
-
destroy() {
|
|
135
|
-
this.splice(0);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
exports.ArrayModel = ArrayModel;
|
|
139
|
-
function proxyArrayModel(arr) {
|
|
140
|
-
return new Proxy(arr, {
|
|
141
|
-
set(target, p, newValue, receiver) {
|
|
142
|
-
if (!arr.passive && typeof p === "string") {
|
|
143
|
-
const index = parseInt(p);
|
|
144
|
-
if (Number.isFinite(index)) {
|
|
145
|
-
arr.replace(index, newValue);
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
return Reflect.set(target, p, newValue, receiver);
|
|
150
|
-
},
|
|
151
|
-
});
|
|
152
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Listener = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Represent a listener for a model
|
|
6
|
-
* @class Listener
|
|
7
|
-
*/
|
|
8
|
-
class Listener {
|
|
9
|
-
constructor() {
|
|
10
|
-
/**
|
|
11
|
-
* Functions to run on adding new items
|
|
12
|
-
* @type Set
|
|
13
|
-
*/
|
|
14
|
-
this.onAdded = new Set();
|
|
15
|
-
/**
|
|
16
|
-
* Functions to run on item removing
|
|
17
|
-
* @type Set
|
|
18
|
-
*/
|
|
19
|
-
this.onRemoved = new Set();
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Emits added event to listeners
|
|
23
|
-
* @param index {*} index of value
|
|
24
|
-
* @param value {*} value of added item
|
|
25
|
-
*/
|
|
26
|
-
emitAdded(index, value) {
|
|
27
|
-
this.onAdded.forEach(handler => {
|
|
28
|
-
handler(index, value);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Emits removed event to listeners
|
|
33
|
-
* @param index {*} index of removed value
|
|
34
|
-
* @param value {*} value of removed item
|
|
35
|
-
*/
|
|
36
|
-
emitRemoved(index, value) {
|
|
37
|
-
this.onRemoved.forEach(handler => {
|
|
38
|
-
handler(index, value);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Adds a handler to added event
|
|
43
|
-
* @param handler {function} function to run on event emitting
|
|
44
|
-
*/
|
|
45
|
-
onAdd(handler) {
|
|
46
|
-
this.onAdded.add(handler);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Adds a handler to removed event
|
|
50
|
-
* @param handler {function} function to run on event emitting
|
|
51
|
-
*/
|
|
52
|
-
onRemove(handler) {
|
|
53
|
-
this.onRemoved.add(handler);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Removes an handler from added event
|
|
57
|
-
* @param handler {function} handler to remove
|
|
58
|
-
*/
|
|
59
|
-
offAdd(handler) {
|
|
60
|
-
this.onAdded.delete(handler);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Removes an handler form removed event
|
|
64
|
-
* @param handler {function} handler to remove
|
|
65
|
-
*/
|
|
66
|
-
offRemove(handler) {
|
|
67
|
-
this.onRemoved.delete(handler);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
exports.Listener = Listener;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MapModel = void 0;
|
|
4
|
-
const listener_1 = require("./listener");
|
|
5
|
-
/**
|
|
6
|
-
* A Map based memory
|
|
7
|
-
* @class MapModel
|
|
8
|
-
* @extends Map
|
|
9
|
-
* @implements IModel
|
|
10
|
-
*/
|
|
11
|
-
class MapModel extends Map {
|
|
12
|
-
/**
|
|
13
|
-
* Constructs a map model
|
|
14
|
-
* @param map {[*, *][]} input data
|
|
15
|
-
*/
|
|
16
|
-
constructor(map) {
|
|
17
|
-
super();
|
|
18
|
-
this.listener = new listener_1.Listener();
|
|
19
|
-
map === null || map === void 0 ? void 0 : map.forEach(([key, value]) => {
|
|
20
|
-
super.set(key, value);
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Calls Map.clear and notify about changes
|
|
25
|
-
*/
|
|
26
|
-
clear() {
|
|
27
|
-
this.forEach((value, key) => {
|
|
28
|
-
this.listener.emitRemoved(key, value);
|
|
29
|
-
});
|
|
30
|
-
super.clear();
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Calls Map.delete and notify abut changes
|
|
34
|
-
* @param key {*} key
|
|
35
|
-
* @return {boolean} true if removed something, otherwise false
|
|
36
|
-
*/
|
|
37
|
-
delete(key) {
|
|
38
|
-
const tmp = super.get(key);
|
|
39
|
-
if (tmp) {
|
|
40
|
-
this.listener.emitRemoved(key, tmp);
|
|
41
|
-
}
|
|
42
|
-
return super.delete(key);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Calls Map.set and notify abut changes
|
|
46
|
-
* @param key {*} key
|
|
47
|
-
* @param value {*} value
|
|
48
|
-
* @return {MapModel} a pointer to this
|
|
49
|
-
*/
|
|
50
|
-
set(key, value) {
|
|
51
|
-
const tmp = super.get(key);
|
|
52
|
-
if (tmp) {
|
|
53
|
-
this.listener.emitRemoved(key, tmp);
|
|
54
|
-
}
|
|
55
|
-
super.set(key, value);
|
|
56
|
-
this.listener.emitAdded(key, value);
|
|
57
|
-
return this;
|
|
58
|
-
}
|
|
59
|
-
destroy() {
|
|
60
|
-
this.clear();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
exports.MapModel = MapModel;
|
package/lib-node/models/model.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ObjectModel = void 0;
|
|
4
|
-
const listener_1 = require("./listener");
|
|
5
|
-
/**
|
|
6
|
-
* Object based model
|
|
7
|
-
* @extends Object
|
|
8
|
-
*/
|
|
9
|
-
class ObjectModel extends Object {
|
|
10
|
-
/**
|
|
11
|
-
* Constructs a object model
|
|
12
|
-
* @param obj {Object} input data
|
|
13
|
-
*/
|
|
14
|
-
constructor(obj = {}) {
|
|
15
|
-
super();
|
|
16
|
-
this.container = Object.create(null);
|
|
17
|
-
Object.defineProperty(this, "listener", {
|
|
18
|
-
value: new listener_1.Listener(),
|
|
19
|
-
writable: false,
|
|
20
|
-
configurable: false,
|
|
21
|
-
});
|
|
22
|
-
for (const i in obj) {
|
|
23
|
-
Object.defineProperty(this.container, i, {
|
|
24
|
-
value: obj[i],
|
|
25
|
-
configurable: true,
|
|
26
|
-
writable: true,
|
|
27
|
-
enumerable: true,
|
|
28
|
-
});
|
|
29
|
-
this.listener.emitAdded(i, obj[i]);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Gets a value of a field
|
|
34
|
-
* @param key {string}
|
|
35
|
-
* @return {*}
|
|
36
|
-
*/
|
|
37
|
-
get(key) {
|
|
38
|
-
return this.container[key];
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Sets an object property value
|
|
42
|
-
* @param key {string} property name
|
|
43
|
-
* @param v {*} property value
|
|
44
|
-
* @return {ObjectModel} a pointer to this
|
|
45
|
-
*/
|
|
46
|
-
set(key, v) {
|
|
47
|
-
if (key in this.container) {
|
|
48
|
-
this.listener.emitRemoved(key, this.container[key]);
|
|
49
|
-
this.container[key] = v;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
Object.defineProperty(this.container, key, {
|
|
53
|
-
value: v,
|
|
54
|
-
configurable: true,
|
|
55
|
-
writable: true,
|
|
56
|
-
enumerable: true,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
this.listener.emitAdded(key, this.container[key]);
|
|
60
|
-
return this;
|
|
61
|
-
}
|
|
62
|
-
get values() {
|
|
63
|
-
return this.container;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Deletes an object property
|
|
67
|
-
* @param key {string} property name
|
|
68
|
-
*/
|
|
69
|
-
delete(key) {
|
|
70
|
-
if (this.container[key]) {
|
|
71
|
-
this.listener.emitRemoved(key, this.container[key]);
|
|
72
|
-
delete this.container[key];
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
enableReactivity() {
|
|
76
|
-
this.listener.enableReactivity();
|
|
77
|
-
}
|
|
78
|
-
disableReactivity() {
|
|
79
|
-
this.listener.disableReactivity();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
exports.ObjectModel = ObjectModel;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SetModel = void 0;
|
|
4
|
-
const listener_1 = require("./listener");
|
|
5
|
-
/**
|
|
6
|
-
* A Set based model
|
|
7
|
-
* @class SetModel
|
|
8
|
-
* @extends Set
|
|
9
|
-
* @implements IModel
|
|
10
|
-
*/
|
|
11
|
-
class SetModel extends Set {
|
|
12
|
-
/**
|
|
13
|
-
* Constructs a set model based on a set
|
|
14
|
-
* @param set {Set} input data
|
|
15
|
-
*/
|
|
16
|
-
constructor(set) {
|
|
17
|
-
super();
|
|
18
|
-
this.listener = new listener_1.Listener();
|
|
19
|
-
set === null || set === void 0 ? void 0 : set.forEach(item => {
|
|
20
|
-
super.add(item);
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Calls Set.add and notify abut changes
|
|
25
|
-
* @param value {*} value
|
|
26
|
-
* @return {this} a pointer to this
|
|
27
|
-
*/
|
|
28
|
-
add(value) {
|
|
29
|
-
if (!super.has(value)) {
|
|
30
|
-
this.listener.emitAdded(value, value);
|
|
31
|
-
super.add(value);
|
|
32
|
-
}
|
|
33
|
-
return this;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Calls Set.clear and notify abut changes
|
|
37
|
-
*/
|
|
38
|
-
clear() {
|
|
39
|
-
this.forEach(item => {
|
|
40
|
-
this.listener.emitRemoved(item, item);
|
|
41
|
-
});
|
|
42
|
-
super.clear();
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Calls Set.delete and notify abut changes
|
|
46
|
-
* @param value {*}
|
|
47
|
-
* @return {boolean} true if a value was deleted, otherwise false
|
|
48
|
-
*/
|
|
49
|
-
delete(value) {
|
|
50
|
-
if (super.has(value)) {
|
|
51
|
-
this.listener.emitRemoved(value, value);
|
|
52
|
-
}
|
|
53
|
-
return super.delete(value);
|
|
54
|
-
}
|
|
55
|
-
destroy() {
|
|
56
|
-
this.clear();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.SetModel = SetModel;
|