vasille 1.2.9 → 2.0.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.
Files changed (122) hide show
  1. package/LICENSE.md +21 -0
  2. package/flow-typed/vasille.js +836 -0
  3. package/img/favicon.svg +17 -204
  4. package/lib/binding/attribute.js +32 -0
  5. package/lib/binding/binding.js +39 -0
  6. package/lib/binding/class.js +51 -0
  7. package/lib/binding/style.js +29 -0
  8. package/lib/core/core.js +178 -0
  9. package/lib/core/destroyable.js +45 -0
  10. package/lib/core/errors.js +16 -0
  11. package/lib/core/executor.js +154 -0
  12. package/lib/core/ivalue.js +56 -0
  13. package/lib/core/signal.js +50 -0
  14. package/lib/core/slot.js +47 -0
  15. package/lib/index.js +27 -22
  16. package/lib/models/array-model.js +208 -0
  17. package/lib/models/listener.js +130 -0
  18. package/lib/models/map-model.js +66 -0
  19. package/lib/models/model.js +1 -0
  20. package/lib/models/object-model.js +78 -0
  21. package/lib/models/set-model.js +62 -0
  22. package/lib/node/app.js +38 -0
  23. package/lib/node/interceptor.js +83 -0
  24. package/lib/node/node.js +1185 -0
  25. package/lib/node/watch.js +27 -0
  26. package/lib/value/expression.js +83 -0
  27. package/lib/value/mirror.js +58 -0
  28. package/lib/value/pointer.js +26 -0
  29. package/lib/value/reference.js +55 -0
  30. package/lib/views/array-view.js +24 -0
  31. package/lib/views/base-view.js +49 -0
  32. package/lib/views/map-view.js +20 -0
  33. package/lib/views/object-view.js +20 -0
  34. package/lib/views/repeat-node.js +106 -0
  35. package/lib/views/repeater.js +63 -0
  36. package/lib/views/set-view.js +23 -0
  37. package/package.json +16 -15
  38. package/types/binding/attribute.d.ts +23 -0
  39. package/types/binding/binding.d.ts +30 -0
  40. package/types/binding/class.d.ts +23 -0
  41. package/types/binding/style.d.ts +23 -0
  42. package/types/core/core.d.ts +140 -0
  43. package/types/core/destroyable.d.ts +15 -0
  44. package/types/core/errors.d.ts +4 -0
  45. package/types/core/executor.d.ts +87 -0
  46. package/types/core/ivalue.d.ts +45 -0
  47. package/types/core/signal.d.ts +35 -0
  48. package/types/core/slot.d.ts +45 -0
  49. package/types/index.d.ts +27 -21
  50. package/types/models/array-model.d.ts +103 -0
  51. package/types/models/listener.d.ts +74 -0
  52. package/types/models/map-model.d.ts +35 -0
  53. package/types/models/model.d.ts +19 -0
  54. package/types/models/object-model.d.ts +36 -0
  55. package/types/models/set-model.d.ts +34 -0
  56. package/types/node/app.d.ts +37 -0
  57. package/types/node/interceptor.d.ts +50 -0
  58. package/types/node/node.d.ts +739 -0
  59. package/types/node/watch.d.ts +23 -0
  60. package/types/value/expression.d.ts +60 -0
  61. package/types/value/mirror.d.ts +35 -0
  62. package/types/value/pointer.d.ts +19 -0
  63. package/types/value/reference.d.ts +30 -0
  64. package/types/views/array-view.d.ts +13 -0
  65. package/types/views/base-view.d.ts +44 -0
  66. package/types/views/map-view.d.ts +11 -0
  67. package/types/views/object-view.d.ts +11 -0
  68. package/types/views/repeat-node.d.ts +35 -0
  69. package/types/views/repeater.d.ts +38 -0
  70. package/types/views/set-view.d.ts +11 -0
  71. package/CHANGELOG.md +0 -23
  72. package/lib/attribute.js +0 -71
  73. package/lib/attribute.js.map +0 -1
  74. package/lib/bind.js +0 -286
  75. package/lib/bind.js.map +0 -1
  76. package/lib/class.js +0 -97
  77. package/lib/class.js.map +0 -1
  78. package/lib/executor.js +0 -167
  79. package/lib/executor.js.map +0 -1
  80. package/lib/index.js.map +0 -1
  81. package/lib/interfaces/core.js +0 -247
  82. package/lib/interfaces/core.js.map +0 -1
  83. package/lib/interfaces/destroyable.js +0 -39
  84. package/lib/interfaces/destroyable.js.map +0 -1
  85. package/lib/interfaces/errors.js +0 -49
  86. package/lib/interfaces/errors.js.map +0 -1
  87. package/lib/interfaces/ibind.js +0 -31
  88. package/lib/interfaces/ibind.js.map +0 -1
  89. package/lib/interfaces/idefinition.js +0 -64
  90. package/lib/interfaces/idefinition.js.map +0 -1
  91. package/lib/interfaces/ivalue.js +0 -60
  92. package/lib/interfaces/ivalue.js.map +0 -1
  93. package/lib/models.js +0 -579
  94. package/lib/models.js.map +0 -1
  95. package/lib/node.js +0 -2155
  96. package/lib/node.js.map +0 -1
  97. package/lib/property.js +0 -38
  98. package/lib/property.js.map +0 -1
  99. package/lib/style.js +0 -66
  100. package/lib/style.js.map +0 -1
  101. package/lib/value.js +0 -203
  102. package/lib/value.js.map +0 -1
  103. package/lib/views.js +0 -688
  104. package/lib/views.js.map +0 -1
  105. package/types/attribute.d.ts +0 -18
  106. package/types/bind.d.ts +0 -72
  107. package/types/class.d.ts +0 -19
  108. package/types/data.d.ts +0 -11
  109. package/types/event.d.ts +0 -10
  110. package/types/executor.d.ts +0 -57
  111. package/types/interfaces/core.d.ts +0 -129
  112. package/types/interfaces/destroyable.d.ts +0 -11
  113. package/types/interfaces/errors.d.ts +0 -24
  114. package/types/interfaces/ibind.d.ts +0 -19
  115. package/types/interfaces/idefinition.d.ts +0 -29
  116. package/types/interfaces/ivalue.d.ts +0 -40
  117. package/types/models.d.ts +0 -179
  118. package/types/node.d.ts +0 -906
  119. package/types/property.d.ts +0 -9
  120. package/types/style.d.ts +0 -28
  121. package/types/value.d.ts +0 -43
  122. package/types/views.d.ts +0 -135
@@ -0,0 +1,66 @@
1
+ import { Listener } from "./listener";
2
+ /**
3
+ * A Map based memory
4
+ * @class MapModel
5
+ * @extends Map
6
+ * @implements IModel
7
+ */
8
+ export class MapModel extends Map {
9
+ /**
10
+ * Constructs a map model
11
+ * @param map {[*, *][]} input data
12
+ */
13
+ constructor(map = []) {
14
+ super();
15
+ Object.defineProperty(this, 'listener', {
16
+ value: new Listener,
17
+ writable: false,
18
+ configurable: false
19
+ });
20
+ map.forEach(([key, value]) => {
21
+ super.set(key, value);
22
+ });
23
+ }
24
+ /**
25
+ * Calls Map.clear and notify abut changes
26
+ */
27
+ clear() {
28
+ this.forEach((value, key) => {
29
+ this.listener.emitRemoved(key, value);
30
+ });
31
+ super.clear();
32
+ }
33
+ /**
34
+ * Calls Map.delete and notify abut changes
35
+ * @param key {*} key
36
+ * @return {boolean} true if removed something, otherwise false
37
+ */
38
+ delete(key) {
39
+ const tmp = super.get(key);
40
+ if (tmp) {
41
+ this.listener.emitRemoved(key, tmp);
42
+ }
43
+ return super.delete(key);
44
+ }
45
+ /**
46
+ * Calls Map.set and notify abut changes
47
+ * @param key {*} key
48
+ * @param value {*} value
49
+ * @return {MapModel} a pointer to this
50
+ */
51
+ set(key, value) {
52
+ const tmp = super.get(key);
53
+ if (tmp) {
54
+ this.listener.emitRemoved(key, tmp);
55
+ }
56
+ super.set(key, value);
57
+ this.listener.emitAdded(key, value);
58
+ return this;
59
+ }
60
+ enableReactivity() {
61
+ this.listener.enableReactivity();
62
+ }
63
+ disableReactivity() {
64
+ this.listener.disableReactivity();
65
+ }
66
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,78 @@
1
+ import { Listener } from "./listener";
2
+ /**
3
+ * Object based model
4
+ * @extends Object
5
+ */
6
+ export class ObjectModel extends Object {
7
+ /**
8
+ * Constructs a object model
9
+ * @param obj {Object} input data
10
+ */
11
+ constructor(obj = {}) {
12
+ super();
13
+ Object.defineProperty(this, 'listener', {
14
+ value: new Listener,
15
+ writable: false,
16
+ configurable: false
17
+ });
18
+ for (const i in obj) {
19
+ Object.defineProperty(this, i, {
20
+ value: obj[i],
21
+ configurable: true,
22
+ writable: true,
23
+ enumerable: true
24
+ });
25
+ this.listener.emitAdded(i, obj[i]);
26
+ }
27
+ }
28
+ /**
29
+ * Gets a value of a field
30
+ * @param key {string}
31
+ * @return {*}
32
+ */
33
+ get(key) {
34
+ const ts = this;
35
+ return ts[key];
36
+ }
37
+ /**
38
+ * Sets an object property value
39
+ * @param key {string} property name
40
+ * @param v {*} property value
41
+ * @return {ObjectModel} a pointer to this
42
+ */
43
+ set(key, v) {
44
+ const ts = this;
45
+ // eslint-disable-next-line no-prototype-builtins
46
+ if (ts.hasOwnProperty(key)) {
47
+ this.listener.emitRemoved(key, ts[key]);
48
+ ts[key] = v;
49
+ }
50
+ else {
51
+ Object.defineProperty(ts, key, {
52
+ value: v,
53
+ configurable: true,
54
+ writable: true,
55
+ enumerable: true
56
+ });
57
+ }
58
+ this.listener.emitAdded(key, ts[key]);
59
+ return this;
60
+ }
61
+ /**
62
+ * Deletes an object property
63
+ * @param key {string} property name
64
+ */
65
+ delete(key) {
66
+ const ts = this;
67
+ if (ts[key]) {
68
+ this.listener.emitRemoved(key, ts[key]);
69
+ delete ts[key];
70
+ }
71
+ }
72
+ enableReactivity() {
73
+ this.listener.enableReactivity();
74
+ }
75
+ disableReactivity() {
76
+ this.listener.disableReactivity();
77
+ }
78
+ }
@@ -0,0 +1,62 @@
1
+ import { Listener } from "./listener";
2
+ /**
3
+ * A Set based model
4
+ * @class SetModel
5
+ * @extends Set
6
+ * @implements IModel
7
+ */
8
+ export class SetModel extends Set {
9
+ /**
10
+ * Constructs a set model based on a set
11
+ * @param set {Set} input data
12
+ */
13
+ constructor(set = []) {
14
+ super();
15
+ Object.defineProperty(this, 'listener', {
16
+ value: new Listener,
17
+ writable: false,
18
+ configurable: false
19
+ });
20
+ set.forEach(item => {
21
+ super.add(item);
22
+ });
23
+ }
24
+ /**
25
+ * Calls Set.add and notify abut changes
26
+ * @param value {*} value
27
+ * @return {this} a pointer to this
28
+ */
29
+ add(value) {
30
+ if (!super.has(value)) {
31
+ this.listener.emitAdded(value, value);
32
+ super.add(value);
33
+ }
34
+ return this;
35
+ }
36
+ /**
37
+ * Calls Set.clear and notify abut changes
38
+ */
39
+ clear() {
40
+ this.forEach(item => {
41
+ this.listener.emitRemoved(item, item);
42
+ });
43
+ super.clear();
44
+ }
45
+ /**
46
+ * Calls Set.delete and notify abut changes
47
+ * @param value {*}
48
+ * @return {boolean} true if a value was deleted, otherwise false
49
+ */
50
+ delete(value) {
51
+ if (super.has(value)) {
52
+ this.listener.emitRemoved(value, value);
53
+ }
54
+ return super.delete(value);
55
+ }
56
+ enableReactivity() {
57
+ this.listener.enableReactivity();
58
+ }
59
+ disableReactivity() {
60
+ this.listener.disableReactivity();
61
+ }
62
+ }
@@ -0,0 +1,38 @@
1
+ import { instantExecutor, timeoutExecutor } from "../core/executor";
2
+ import { INode } from "./node";
3
+ /**
4
+ * Application Node
5
+ * @class AppNode
6
+ * @extends INode
7
+ */
8
+ export class AppNode extends INode {
9
+ /**
10
+ * @param options {Object} Application options
11
+ */
12
+ constructor(options) {
13
+ super();
14
+ this.$run = (options === null || options === void 0 ? void 0 : options.executor) || ((options === null || options === void 0 ? void 0 : options.freezeUi) === false ? timeoutExecutor : instantExecutor);
15
+ }
16
+ }
17
+ /**
18
+ * Represents a Vasille.js application
19
+ * @class App
20
+ * @extends AppNode
21
+ */
22
+ export class App extends AppNode {
23
+ /**
24
+ * Constructs an app node
25
+ * @param node {Element} The root of application
26
+ * @param options {Object} Application options
27
+ */
28
+ constructor(node, options) {
29
+ super(options);
30
+ this.$.node = node;
31
+ this.$preinit(this, this);
32
+ this.$seal();
33
+ }
34
+ $$appendNode(node) {
35
+ const $ = this.$;
36
+ $.app.$run.appendChild($.node, node);
37
+ }
38
+ }
@@ -0,0 +1,83 @@
1
+ import { Extension } from "./node";
2
+ import { Destroyable } from "../core/destroyable";
3
+ import { Signal } from "../core/signal";
4
+ import { Slot } from "../core/slot";
5
+ /**
6
+ * Interceptor is designed to connect signals & methods of children elements
7
+ * @class Interceptor
8
+ * @extends Destroyable
9
+ */
10
+ export class Interceptor extends Destroyable {
11
+ constructor() {
12
+ super(...arguments);
13
+ /**
14
+ * Set of signals
15
+ * @type Set
16
+ */
17
+ this.signals = new Set;
18
+ /**
19
+ * Set of handlers
20
+ * @type Set
21
+ */
22
+ this.handlers = new Set;
23
+ }
24
+ /**
25
+ * Connect a signal or a handler
26
+ * @param thing {Signal | function}
27
+ */
28
+ connect(thing) {
29
+ // interceptor will connect signals and handlers together
30
+ if (thing instanceof Signal) {
31
+ this.handlers.forEach(handler => {
32
+ thing.subscribe(handler);
33
+ });
34
+ this.signals.add(thing);
35
+ }
36
+ else {
37
+ this.signals.forEach(signal => {
38
+ signal.subscribe(thing);
39
+ });
40
+ this.handlers.add(thing);
41
+ }
42
+ }
43
+ /**
44
+ * Disconnect a handler from signals
45
+ * @param handler {function}
46
+ */
47
+ disconnect(handler) {
48
+ this.signals.forEach(signal => {
49
+ signal.unsubscribe(handler);
50
+ });
51
+ }
52
+ $destroy() {
53
+ super.$destroy();
54
+ this.signals.forEach(signal => {
55
+ this.handlers.forEach(handler => {
56
+ signal.unsubscribe(handler);
57
+ });
58
+ });
59
+ }
60
+ }
61
+ /**
62
+ * Interceptor node to implement directly to vasille DOM
63
+ * @class InterceptorNode
64
+ * @extends Extension
65
+ */
66
+ export class InterceptorNode extends Extension {
67
+ constructor() {
68
+ super(...arguments);
69
+ /**
70
+ * Internal interceptor
71
+ * @type Interceptor
72
+ */
73
+ this.interceptor = new Interceptor;
74
+ /**
75
+ * The default slot of node
76
+ * @type Slot
77
+ */
78
+ this.slot = new Slot;
79
+ }
80
+ $compose() {
81
+ this.slot.release(this, this.interceptor);
82
+ }
83
+ }