@ibyar/core 0.8.6 → 1.1.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 (144) hide show
  1. package/annotation/decorators.d.ts +20 -285
  2. package/annotation/decorators.d.ts.map +1 -0
  3. package/annotation/decorators.js +92 -84
  4. package/annotation/decorators.js.map +1 -1
  5. package/annotation/options.d.ts +276 -0
  6. package/annotation/options.d.ts.map +1 -0
  7. package/annotation/options.js +2 -0
  8. package/annotation/options.js.map +1 -0
  9. package/binding/binding.expressions.d.ts +2 -1
  10. package/binding/binding.expressions.d.ts.map +1 -0
  11. package/binding/binding.expressions.js +149 -124
  12. package/binding/binding.expressions.js.map +1 -1
  13. package/component/component.d.ts +13 -11
  14. package/component/component.d.ts.map +1 -0
  15. package/component/component.js +39 -45
  16. package/component/component.js.map +1 -1
  17. package/component/custom-element.d.ts +1 -3
  18. package/component/custom-element.d.ts.map +1 -0
  19. package/component/custom-element.js.map +1 -1
  20. package/component/events.d.ts +1 -0
  21. package/component/events.d.ts.map +1 -0
  22. package/component/events.js +4 -3
  23. package/component/events.js.map +1 -1
  24. package/component/lifecycle.d.ts +1 -0
  25. package/component/lifecycle.d.ts.map +1 -0
  26. package/component/reflect.d.ts +12 -15
  27. package/component/reflect.d.ts.map +1 -0
  28. package/component/reflect.js +28 -47
  29. package/component/reflect.js.map +1 -1
  30. package/context/stack.d.ts +1 -0
  31. package/context/stack.d.ts.map +1 -0
  32. package/context/subscription.d.ts +1 -0
  33. package/context/subscription.d.ts.map +1 -0
  34. package/directive/directive.d.ts +1 -0
  35. package/directive/directive.d.ts.map +1 -0
  36. package/directive/directive.js +8 -0
  37. package/directive/directive.js.map +1 -1
  38. package/directive/parser.d.ts +1 -0
  39. package/directive/parser.d.ts.map +1 -0
  40. package/directive/parser.js +9 -7
  41. package/directive/parser.js.map +1 -1
  42. package/directive/providers.d.ts +1 -0
  43. package/directive/providers.d.ts.map +1 -0
  44. package/directive/providers.js +2 -1
  45. package/directive/providers.js.map +1 -1
  46. package/html/deserialize.d.ts +1 -0
  47. package/html/deserialize.d.ts.map +1 -0
  48. package/html/expression.d.ts +1 -0
  49. package/html/expression.d.ts.map +1 -0
  50. package/html/expression.js +2 -2
  51. package/html/expression.js.map +1 -1
  52. package/html/types.d.ts +1 -0
  53. package/html/types.d.ts.map +1 -0
  54. package/index.d.ts +2 -2
  55. package/index.d.ts.map +1 -0
  56. package/index.js +1 -2
  57. package/index.js.map +1 -1
  58. package/linker/change-detector-ref.d.ts +1 -0
  59. package/linker/change-detector-ref.d.ts.map +1 -0
  60. package/linker/template-ref.d.ts +1 -0
  61. package/linker/template-ref.d.ts.map +1 -0
  62. package/linker/template-ref.js +5 -0
  63. package/linker/template-ref.js.map +1 -1
  64. package/linker/view-container-ref.d.ts +4 -2
  65. package/linker/view-container-ref.d.ts.map +1 -0
  66. package/linker/view-container-ref.js +9 -7
  67. package/linker/view-container-ref.js.map +1 -1
  68. package/linker/view-ref.d.ts +1 -0
  69. package/linker/view-ref.d.ts.map +1 -0
  70. package/linker/view-ref.js +5 -2
  71. package/linker/view-ref.js.map +1 -1
  72. package/node.d.ts +1 -0
  73. package/node.d.ts.map +1 -0
  74. package/package.json +8 -9
  75. package/pipe/pipe.d.ts +1 -0
  76. package/pipe/pipe.d.ts.map +1 -0
  77. package/pipe/pipe.js +2 -1
  78. package/pipe/pipe.js.map +1 -1
  79. package/providers/provider.d.ts +15 -13
  80. package/providers/provider.d.ts.map +1 -0
  81. package/providers/provider.js +13 -15
  82. package/providers/provider.js.map +1 -1
  83. package/scope/variables.d.ts +19 -0
  84. package/scope/variables.d.ts.map +1 -0
  85. package/scope/variables.js +38 -0
  86. package/scope/variables.js.map +1 -0
  87. package/utils/elements-util.d.ts +1 -0
  88. package/utils/elements-util.d.ts.map +1 -0
  89. package/utils/path.d.ts +1 -0
  90. package/utils/path.d.ts.map +1 -0
  91. package/utils/typeof.d.ts +3 -0
  92. package/utils/typeof.d.ts.map +1 -0
  93. package/utils/typeof.js.map +1 -1
  94. package/utils/utils.d.ts +1 -0
  95. package/utils/utils.d.ts.map +1 -0
  96. package/view/base-view.d.ts +1 -0
  97. package/view/base-view.d.ts.map +1 -0
  98. package/view/base-view.js +33 -29
  99. package/view/base-view.js.map +1 -1
  100. package/view/form-view.d.ts +1 -0
  101. package/view/form-view.d.ts.map +1 -0
  102. package/view/form-view.js +70 -67
  103. package/view/form-view.js.map +1 -1
  104. package/view/mutation.d.ts +1 -0
  105. package/view/mutation.d.ts.map +1 -0
  106. package/view/mutation.js +35 -35
  107. package/view/mutation.js.map +1 -1
  108. package/view/render.d.ts +2 -0
  109. package/view/render.d.ts.map +1 -0
  110. package/view/render.js +25 -13
  111. package/view/render.js.map +1 -1
  112. package/view/utils.d.ts +4 -3
  113. package/view/utils.d.ts.map +1 -0
  114. package/view/utils.js.map +1 -1
  115. package/view/view.d.ts +5 -4
  116. package/view/view.d.ts.map +1 -0
  117. package/view/view.js +34 -7
  118. package/view/view.js.map +1 -1
  119. package/zone/bootstrap.d.ts +1 -0
  120. package/zone/bootstrap.d.ts.map +1 -0
  121. package/zone/proxy.d.ts +1 -0
  122. package/zone/proxy.d.ts.map +1 -0
  123. package/zone/proxy.js +1 -0
  124. package/zone/proxy.js.map +1 -1
  125. package/zone/task.d.ts +1 -0
  126. package/zone/task.d.ts.map +1 -0
  127. package/zone/task.js +11 -3
  128. package/zone/task.js.map +1 -1
  129. package/zone/zone.d.ts +1 -0
  130. package/zone/zone.d.ts.map +1 -0
  131. package/zone/zone.js +8 -6
  132. package/zone/zone.js.map +1 -1
  133. package/providers/injector.d.ts +0 -10
  134. package/providers/injector.js +0 -27
  135. package/providers/injector.js.map +0 -1
  136. package/render/host-binding.handler.d.ts +0 -46
  137. package/render/host-binding.handler.js +0 -60
  138. package/render/host-binding.handler.js.map +0 -1
  139. package/render/host-listener.handler.d.ts +0 -50
  140. package/render/host-listener.handler.js +0 -88
  141. package/render/host-listener.handler.js.map +0 -1
  142. package/render/render-handler.d.ts +0 -11
  143. package/render/render-handler.js +0 -2
  144. package/render/render-handler.js.map +0 -1
package/view/mutation.js CHANGED
@@ -1,9 +1,7 @@
1
1
  export class MutationObservable {
2
- constructor() {
3
- this.attributes = new Map();
4
- this.remove = new WeakMap();
5
- this.insert = new WeakMap();
6
- }
2
+ attributes = new Map();
3
+ remove = new WeakMap();
4
+ insert = new WeakMap();
7
5
  emit(attributeName, value, oldValue) {
8
6
  const calls = this.attributes.get(attributeName);
9
7
  calls?.forEach(callback => {
@@ -85,6 +83,10 @@ export class MutationObservable {
85
83
  }
86
84
  }
87
85
  export class MutationSubscription {
86
+ observable;
87
+ key;
88
+ callback;
89
+ type;
88
90
  constructor(observable, key, callback) {
89
91
  this.observable = observable;
90
92
  this.key = key;
@@ -104,32 +106,36 @@ export class MutationSubscription {
104
106
  }
105
107
  }
106
108
  export class ElementMutation {
107
- constructor() {
108
- this.observables = new WeakMap();
109
- this.mutationCallback = (mutations, observer) => {
110
- mutations.forEach((mut) => {
111
- switch (mut.type) {
112
- case 'childList':
113
- {
114
- // insert/remove events
115
- if (mut.removedNodes.length > 0 && this.observables.has(mut.target)) {
116
- const observable = this.observables.get(mut.target);
117
- mut.removedNodes.forEach(node => observable.emitNodeRemove(node));
118
- }
119
- }
120
- break;
121
- case 'attributes':
122
- default:
123
- {
109
+ static Mutation_OPTIONS = {
110
+ attributes: true,
111
+ childList: true,
112
+ subtree: true,
113
+ attributeOldValue: true,
114
+ };
115
+ observables = new WeakMap();
116
+ mutationCallback = (mutations, observer) => {
117
+ mutations.forEach((mut) => {
118
+ switch (mut.type) {
119
+ case 'childList':
120
+ {
121
+ // insert/remove events
122
+ if (mut.removedNodes.length > 0 && this.observables.has(mut.target)) {
124
123
  const observable = this.observables.get(mut.target);
125
- observable && observable.emit(mut.attributeName, mut.target.nodeValue, mut.oldValue);
124
+ mut.removedNodes.forEach(node => observable.emitNodeRemove(node));
126
125
  }
127
- break;
128
- }
129
- });
130
- };
131
- this.mutationObserver = new MutationObserver(this.mutationCallback);
132
- }
126
+ }
127
+ break;
128
+ case 'attributes':
129
+ default:
130
+ {
131
+ const observable = this.observables.get(mut.target);
132
+ observable && observable.emit(mut.attributeName, mut.target.nodeValue, mut.oldValue);
133
+ }
134
+ break;
135
+ }
136
+ });
137
+ };
138
+ mutationObserver = new MutationObserver(this.mutationCallback);
133
139
  subscribe(target, attributeName, callback) {
134
140
  let observable = this.observables.get(target);
135
141
  if (!observable) {
@@ -163,10 +169,4 @@ export class ElementMutation {
163
169
  this.mutationCallback(records, this.mutationObserver);
164
170
  }
165
171
  }
166
- ElementMutation.Mutation_OPTIONS = {
167
- attributes: true,
168
- childList: true,
169
- subtree: true,
170
- attributeOldValue: true,
171
- };
172
172
  //# sourceMappingURL=mutation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutation.js","sourceRoot":"","sources":["../../../src/core/view/mutation.ts"],"names":[],"mappings":"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","sourcesContent":["interface AttributeChangeCallback {\n\t(value: any, oldValue?: any): void;\n}\n\ninterface NodeRemoveCallback {\n\t(): void;\n}\n\n\nexport class MutationObservable {\n\tprivate attributes = new Map<string, AttributeChangeCallback[]>();\n\tprivate remove = new WeakMap<Node, NodeRemoveCallback[]>();\n\tprivate insert = new WeakMap<Node, NodeRemoveCallback[]>();\n\n\temit(attributeName: string, value: any, oldValue?: any): void {\n\t\tconst calls = this.attributes.get(attributeName);\n\n\t\tcalls?.forEach(callback => {\n\t\t\ttry {\n\t\t\t\tcallback(value, oldValue);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\n\t}\n\n\temitNodeRemove(node: Node): void {\n\t\tthis.emitNode(this.remove, node);\n\t}\n\n\temitNodeInsert(node: Node): void {\n\t\tthis.emitNode(this.insert, node);\n\t}\n\n\tprivate emitNode(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node): void {\n\t\tconst calls = actionMap.get(node);\n\n\t\tcalls?.forEach(callback => {\n\t\t\ttry {\n\t\t\t\tcallback();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\t}\n\n\tsubscribe(attributeName: string, callback: AttributeChangeCallback): MutationSubscription {\n\t\tlet calls = this.attributes.get(attributeName);\n\t\tif (!calls) {\n\t\t\tcalls = [];\n\t\t\tthis.attributes.set(attributeName, calls);\n\t\t}\n\t\tcalls.push(callback);\n\t\treturn new MutationSubscription(this, attributeName, callback);\n\t}\n\n\tsubscribeOnRemoveNode(node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\treturn this.subscribeNodeAction(this.remove, node, callback);\n\t}\n\n\tsubscribeOnInsertNode(node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\treturn this.subscribeNodeAction(this.insert, node, callback);\n\t}\n\n\tprivate subscribeNodeAction(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet calls = actionMap.get(node);\n\t\tif (!calls) {\n\t\t\tcalls = [];\n\t\t\tactionMap.set(node, calls);\n\t\t}\n\t\tcalls.push(callback);\n\t\treturn new MutationSubscription(this, new WeakRef(node), callback);\n\t}\n\n\tunsubscribe(eventName: string, callback: AttributeChangeCallback): void {\n\t\tconst calls = this.attributes.get(eventName);\n\t\tif (calls) {\n\t\t\tconst index = calls.indexOf(callback);\n\t\t\tif (index !== -1) {\n\t\t\t\tcalls.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tunsubscribeOnRemoveNode(node: Node, callback: NodeRemoveCallback): void {\n\t\tthis.unsubscribeNodeAction(this.remove, node, callback);\n\t}\n\n\tunsubscribeOnInsertNode(node: Node, callback: NodeRemoveCallback): void {\n\t\tthis.unsubscribeNodeAction(this.insert, node, callback);\n\t}\n\n\tprivate unsubscribeNodeAction(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node, callback: NodeRemoveCallback): void {\n\t\tconst calls = actionMap.get(node);\n\t\tif (calls) {\n\t\t\tconst index = calls.indexOf(callback);\n\t\t\tif (index !== -1) {\n\t\t\t\tcalls.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.attributes.clear();\n\t}\n}\n\nexport class MutationSubscription {\n\n\tprivate type: 'attribute' | 'remove';\n\tconstructor(observable: MutationObservable, node: WeakRef<Node>, callback: NodeRemoveCallback);\n\tconstructor(observable: MutationObservable, attributeName: string, callback: AttributeChangeCallback);\n\n\tconstructor(private observable: MutationObservable, private key: string | WeakRef<Node>, private callback: AttributeChangeCallback | NodeRemoveCallback) {\n\t\tthis.type = typeof key === 'string' ? 'attribute' : 'remove';\n\t}\n\n\tunsubscribe() {\n\t\tif (this.type === 'attribute') {\n\t\t\tthis.observable.unsubscribe(this.key as string, this.callback as AttributeChangeCallback);\n\t\t} else {\n\t\t\tconst ref = (this.key as WeakRef<Node>).deref();\n\t\t\tif (ref) {\n\t\t\t\tthis.observable.unsubscribeOnRemoveNode(ref, this.callback as NodeRemoveCallback);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\nexport class ElementMutation {\n\n\tprivate static Mutation_OPTIONS: MutationObserverInit = {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true,\n\t\tattributeOldValue: true,\n\t};\n\n\tprivate observables: WeakMap<Node, MutationObservable> = new WeakMap();\n\tprivate mutationCallback: MutationCallback = (mutations: MutationRecord[], observer: MutationObserver) => {\n\t\tmutations.forEach((mut) => {\n\t\t\tswitch (mut.type) {\n\t\t\t\tcase 'childList':\n\t\t\t\t\t{\n\t\t\t\t\t\t// insert/remove events\n\t\t\t\t\t\tif (mut.removedNodes.length > 0 && this.observables.has(mut.target)) {\n\t\t\t\t\t\t\tconst observable = this.observables.get(mut.target)!;\n\t\t\t\t\t\t\tmut.removedNodes.forEach(node => observable.emitNodeRemove(node));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'attributes':\n\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst observable = this.observables.get(mut.target);\n\t\t\t\t\t\tobservable && observable.emit(mut.attributeName as string, mut.target.nodeValue, mut.oldValue);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t};\n\tprivate mutationObserver: MutationObserver = new MutationObserver(this.mutationCallback);\n\n\tsubscribe(target: Node, attributeName: string, callback: AttributeChangeCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribe(attributeName, callback);\n\t}\n\n\tsubscribeOnRemoveNode(target: Node, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribeOnRemoveNode(node, callback);\n\t}\n\n\tsubscribeOnInsertNode(target: Node, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribeOnInsertNode(node, callback);\n\t}\n\n\tdisconnect() {\n\t\tconst records = this.mutationObserver.takeRecords();\n\t\tthis.mutationObserver.disconnect();\n\t\tthis.mutationCallback(records, this.mutationObserver);\n\t}\n}\n"]}
1
+ {"version":3,"file":"mutation.js","sourceRoot":"","sources":["../../../src/core/view/mutation.ts"],"names":[],"mappings":"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","sourcesContent":["interface AttributeChangeCallback {\n\t(value: any, oldValue?: any): void;\n}\n\ninterface NodeRemoveCallback {\n\t(): void;\n}\n\n\nexport class MutationObservable {\n\tprivate attributes = new Map<string, AttributeChangeCallback[]>();\n\tprivate remove = new WeakMap<Node, NodeRemoveCallback[]>();\n\tprivate insert = new WeakMap<Node, NodeRemoveCallback[]>();\n\n\temit(attributeName: string, value: any, oldValue?: any): void {\n\t\tconst calls = this.attributes.get(attributeName);\n\n\t\tcalls?.forEach(callback => {\n\t\t\ttry {\n\t\t\t\tcallback(value, oldValue);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\n\t}\n\n\temitNodeRemove(node: Node): void {\n\t\tthis.emitNode(this.remove, node);\n\t}\n\n\temitNodeInsert(node: Node): void {\n\t\tthis.emitNode(this.insert, node);\n\t}\n\n\tprivate emitNode(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node): void {\n\t\tconst calls = actionMap.get(node);\n\n\t\tcalls?.forEach(callback => {\n\t\t\ttry {\n\t\t\t\tcallback();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\t}\n\n\tsubscribe(attributeName: string, callback: AttributeChangeCallback): MutationSubscription {\n\t\tlet calls = this.attributes.get(attributeName);\n\t\tif (!calls) {\n\t\t\tcalls = [];\n\t\t\tthis.attributes.set(attributeName, calls);\n\t\t}\n\t\tcalls.push(callback);\n\t\treturn new MutationSubscription(this, attributeName, callback);\n\t}\n\n\tsubscribeOnRemoveNode(node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\treturn this.subscribeNodeAction(this.remove, node, callback);\n\t}\n\n\tsubscribeOnInsertNode(node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\treturn this.subscribeNodeAction(this.insert, node, callback);\n\t}\n\n\tprivate subscribeNodeAction(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet calls = actionMap.get(node);\n\t\tif (!calls) {\n\t\t\tcalls = [];\n\t\t\tactionMap.set(node, calls);\n\t\t}\n\t\tcalls.push(callback);\n\t\treturn new MutationSubscription(this, new WeakRef(node), callback);\n\t}\n\n\tunsubscribe(eventName: string, callback: AttributeChangeCallback): void {\n\t\tconst calls = this.attributes.get(eventName);\n\t\tif (calls) {\n\t\t\tconst index = calls.indexOf(callback);\n\t\t\tif (index !== -1) {\n\t\t\t\tcalls.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tunsubscribeOnRemoveNode(node: Node, callback: NodeRemoveCallback): void {\n\t\tthis.unsubscribeNodeAction(this.remove, node, callback);\n\t}\n\n\tunsubscribeOnInsertNode(node: Node, callback: NodeRemoveCallback): void {\n\t\tthis.unsubscribeNodeAction(this.insert, node, callback);\n\t}\n\n\tprivate unsubscribeNodeAction(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node, callback: NodeRemoveCallback): void {\n\t\tconst calls = actionMap.get(node);\n\t\tif (calls) {\n\t\t\tconst index = calls.indexOf(callback);\n\t\t\tif (index !== -1) {\n\t\t\t\tcalls.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.attributes.clear();\n\t}\n}\n\nexport class MutationSubscription {\n\n\tprivate type: 'attribute' | 'remove';\n\tconstructor(observable: MutationObservable, node: WeakRef<Node>, callback: NodeRemoveCallback);\n\tconstructor(observable: MutationObservable, attributeName: string, callback: AttributeChangeCallback);\n\n\tconstructor(private observable: MutationObservable, private key: string | WeakRef<Node>, private callback: AttributeChangeCallback | NodeRemoveCallback) {\n\t\tthis.type = typeof key === 'string' ? 'attribute' : 'remove';\n\t}\n\n\tunsubscribe() {\n\t\tif (this.type === 'attribute') {\n\t\t\tthis.observable.unsubscribe(this.key as string, this.callback as AttributeChangeCallback);\n\t\t} else {\n\t\t\tconst ref = (this.key as WeakRef<Node>).deref();\n\t\t\tif (ref) {\n\t\t\t\tthis.observable.unsubscribeOnRemoveNode(ref, this.callback as NodeRemoveCallback);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\nexport class ElementMutation {\n\n\tprivate static Mutation_OPTIONS: MutationObserverInit = {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true,\n\t\tattributeOldValue: true,\n\t};\n\n\tprivate observables: WeakMap<Node, MutationObservable> = new WeakMap();\n\tprivate mutationCallback: MutationCallback = (mutations: MutationRecord[], observer: MutationObserver) => {\n\t\tmutations.forEach((mut) => {\n\t\t\tswitch (mut.type) {\n\t\t\t\tcase 'childList':\n\t\t\t\t\t{\n\t\t\t\t\t\t// insert/remove events\n\t\t\t\t\t\tif (mut.removedNodes.length > 0 && this.observables.has(mut.target)) {\n\t\t\t\t\t\t\tconst observable = this.observables.get(mut.target)!;\n\t\t\t\t\t\t\tmut.removedNodes.forEach(node => observable.emitNodeRemove(node));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'attributes':\n\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst observable = this.observables.get(mut.target);\n\t\t\t\t\t\tobservable && observable.emit(mut.attributeName as string, mut.target.nodeValue, mut.oldValue);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t};\n\tprivate mutationObserver: MutationObserver = new MutationObserver(this.mutationCallback);\n\n\tsubscribe(target: Node, attributeName: string, callback: AttributeChangeCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribe(attributeName, callback);\n\t}\n\n\tsubscribeOnRemoveNode(target: Node, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribeOnRemoveNode(node, callback);\n\t}\n\n\tsubscribeOnInsertNode(target: Node, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribeOnInsertNode(node, callback);\n\t}\n\n\tdisconnect() {\n\t\tconst records = this.mutationObserver.takeRecords();\n\t\tthis.mutationObserver.disconnect();\n\t\tthis.mutationCallback(records, this.mutationObserver);\n\t}\n}\n"]}
package/view/render.d.ts CHANGED
@@ -27,6 +27,7 @@ export declare class ComponentRender<T extends object> {
27
27
  is?: string;
28
28
  }): HTMLElement;
29
29
  createElement(node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective): HTMLElement;
30
+ private createReadOnlyWithReactiveInnerScope;
30
31
  /**
31
32
  * use for init host bindings
32
33
  * @param element
@@ -48,3 +49,4 @@ export declare class ComponentRender<T extends object> {
48
49
  initAttribute(element: HTMLElement, node: DomElementNode, contextStack: Stack): ScopeSubscription<Context>[];
49
50
  initDirective(directive: StructuralDirective | AttributeDirective | AttributeOnStructuralDirective, node: DomStructuralDirectiveNode | DomAttributeDirectiveNode, contextStack: Stack): ScopeSubscription<Context>[];
50
51
  }
52
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"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"}
package/view/render.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ReactiveScope } from '@ibyar/expressions';
1
+ import { ReactiveScope, ReadOnlyScope } from '@ibyar/expressions';
2
2
  import { CommentNode, DomStructuralDirectiveNode, DomElementNode, DomFragmentNode, isLiveTextContent, isTagNameNative, isValidCustomElementName, TextContent, isFormAssociatedCustomElementByTag } from '@ibyar/elements';
3
3
  import { isHTMLComponent } from '../component/custom-element.js';
4
4
  import { documentStack } from '../context/stack.js';
@@ -22,10 +22,16 @@ function getChangeEventName(tagName) {
22
22
  }
23
23
  }
24
24
  export class ComponentRender {
25
+ view;
26
+ subscriptions;
27
+ componentRef;
28
+ template;
29
+ contextStack;
30
+ templateNameScope;
31
+ viewScope = new ReactiveScope({});
25
32
  constructor(view, subscriptions) {
26
33
  this.view = view;
27
34
  this.subscriptions = subscriptions;
28
- this.viewScope = new ReactiveScope({});
29
35
  this.componentRef = this.view.getComponentRef();
30
36
  this.contextStack = documentStack.copyStack();
31
37
  this.contextStack.pushScope(this.view._modelScope);
@@ -43,13 +49,8 @@ export class ComponentRender {
43
49
  }
44
50
  let rootRef;
45
51
  if (this.componentRef.isShadowDom) {
46
- if (this.view.shadowRoot /* OPEN MODE */) {
47
- rootRef = this.view.shadowRoot;
48
- }
49
- else /* CLOSED MODE*/ {
50
- rootRef = Reflect.get(this.view, '_shadowRoot');
51
- Reflect.deleteProperty(this.view, '_shadowRoot');
52
- }
52
+ rootRef = Reflect.get(this.view, '_shadowRoot');
53
+ Reflect.deleteProperty(this.view, '_shadowRoot');
53
54
  }
54
55
  else {
55
56
  rootRef = this.view;
@@ -209,9 +210,6 @@ export class ComponentRender {
209
210
  // html unknown element
210
211
  element = document.createElement(node.tagName);
211
212
  }
212
- if (isHTMLComponent(element)) {
213
- element.setParentComponent(this.view);
214
- }
215
213
  return element;
216
214
  }
217
215
  createElement(node, contextStack, subscriptions, host) {
@@ -219,11 +217,25 @@ export class ComponentRender {
219
217
  this.initHtmlElement(element, node, contextStack, subscriptions, host);
220
218
  return element;
221
219
  }
220
+ createReadOnlyWithReactiveInnerScope(ctx, aliasName, propertyKeys) {
221
+ if (!aliasName) {
222
+ return ReactiveScope.readOnlyScopeForThis(ctx, propertyKeys);
223
+ }
224
+ const reactiveScope = ReactiveScope.for(ctx, propertyKeys);
225
+ const context = {
226
+ 'this': ctx,
227
+ [aliasName]: ctx,
228
+ };
229
+ const rootScope = ReadOnlyScope.for(context, ['this', aliasName]);
230
+ rootScope.setInnerScope('this', reactiveScope);
231
+ rootScope.setInnerScope(aliasName, reactiveScope);
232
+ return rootScope;
233
+ }
222
234
  initHtmlElement(element, node, contextStack, subscriptions, host) {
223
235
  const elementStack = contextStack.copyStack();
224
236
  const elementScope = isHTMLComponent(element)
225
237
  ? element._viewScope
226
- : ReactiveScope.readOnlyScopeForThis(element);
238
+ : this.createReadOnlyWithReactiveInnerScope(element, node.templateRefName?.name);
227
239
  elementStack.pushScope(elementScope);
228
240
  const attributesSubscriptions = this.initAttribute(element, node, elementStack);
229
241
  subscriptions.push(...attributesSubscriptions);
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveScope, Context, ScopeSubscription, Stack } from '@ibyar/expressions';\nimport {\n\tCommentNode, DomStructuralDirectiveNode,\n\tDomElementNode, DomFragmentNode, DomNode, isLiveTextContent,\n\tisTagNameNative, isValidCustomElementName, LiveTextContent,\n\tTextContent, DomAttributeDirectiveNode, isFormAssociatedCustomElementByTag\n} from '@ibyar/elements';\nimport type { DomStructuralDirectiveNodeUpgrade } from '@ibyar/elements/node.js';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent, isHTMLComponent } from '../component/custom-element.js';\nimport { documentStack } from '../context/stack.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { isOnDestroy, isOnInit } from '../component/lifecycle.js';\nimport { hasAttr } from '../utils/elements-util.js';\nimport { AttributeDirective, AttributeOnStructuralDirective, StructuralDirective } from '../directive/directive.js';\nimport { TemplateRef, TemplateRefImpl } from '../linker/template-ref.js';\nimport { ViewContainerRefImpl } from '../linker/view-container-ref.js';\nimport { createSubscriptionDestroyer } from '../context/subscription.js';\nimport { EventEmitter } from '../component/events.js';\n\ntype ViewContext = { [element: string]: HTMLElement };\n\nfunction getChangeEventName(tagName: string): 'input' | 'change' | undefined {\n\tswitch (true) {\n\t\tcase tagName === 'input':\n\t\t\treturn 'input';\n\t\tcase tagName === 'textarea':\n\t\tcase tagName === 'select':\n\t\tcase isFormAssociatedCustomElementByTag(tagName):\n\t\t\treturn 'change';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\nexport class ComponentRender<T extends object> {\n\tprivate componentRef: ComponentRef<T>;\n\tprivate template: DomNode;\n\tprivate contextStack: Stack;\n\tprivate templateNameScope: ReactiveScope<{ [templateName: string]: TemplateRef }>;\n\tprivate viewScope: ReactiveScope<ViewContext> = new ReactiveScope({});\n\n\tconstructor(public view: HTMLComponent<T>, private subscriptions: ScopeSubscription<Context>[]) {\n\t\tthis.componentRef = this.view.getComponentRef();\n\t\tthis.contextStack = documentStack.copyStack();\n\t\tthis.contextStack.pushScope<Context>(this.view._modelScope);\n\t\tthis.templateNameScope = this.contextStack.pushReactiveScope();\n\t}\n\tinitView(): void {\n\t\tif (!this.componentRef.template) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof this.componentRef.template === 'function') {\n\t\t\tthis.template = this.componentRef.template(this.view._model);\n\t\t} else {\n\t\t\tthis.template = this.componentRef.template;\n\t\t}\n\n\t\tlet rootRef: HTMLElement | ShadowRoot;\n\t\tif (this.componentRef.isShadowDom) {\n\t\t\tif (this.view.shadowRoot /* OPEN MODE */) {\n\t\t\t\trootRef = this.view.shadowRoot;\n\t\t\t} else /* CLOSED MODE*/ {\n\t\t\t\trootRef = Reflect.get(this.view, '_shadowRoot') as ShadowRoot;\n\t\t\t\tReflect.deleteProperty(this.view, '_shadowRoot');\n\t\t\t}\n\t\t} else {\n\t\t\trootRef = this.view;\n\t\t}\n\t\tthis.initTemplateRefMap(this.template);\n\t\tlet rootFragment: DocumentFragment;\n\t\tif (this.template instanceof DomFragmentNode) {\n\t\t\trootFragment = this.createDocumentFragment(this.template, this.contextStack, rootRef, this.subscriptions, this.view);\n\t\t} else {\n\t\t\trootFragment = document.createDocumentFragment();\n\t\t\tthis.appendChildToParent(rootFragment, this.template, this.contextStack, rootRef, this.subscriptions, this.view);\n\t\t}\n\t\trootRef.append(rootFragment);\n\t}\n\tisTemplateRefName(template: DomNode): template is DomElementNode {\n\t\tif (template instanceof DomElementNode) {\n\t\t\tif (template.tagName === 'template' && template.templateRefName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tinitTemplateRefMap(domNode: DomNode) {\n\t\tif (!(domNode instanceof DomElementNode || domNode instanceof DomFragmentNode) || !domNode.children) {\n\t\t\treturn;\n\t\t}\n\t\tfor (let index = 0; index < domNode.children.length; index++) {\n\t\t\tconst child = domNode.children[index];\n\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\tthis.templateNameScope.set(child.templateRefName!.name, undefined);\n\t\t\t} else {\n\t\t\t\tthis.initTemplateRefMap(child);\n\t\t\t}\n\t\t}\n\t}\n\tinitViewBinding() {\n\t\tif (this.componentRef.viewBindings) {\n\t\t\tthis.initHtmlElement(this.view, this.componentRef.viewBindings, this.contextStack, this.subscriptions);\n\t\t}\n\t\tif (this.componentRef.windowBindings) {\n\t\t\tthis.subscriptions.push(...this.initAttribute(window as any, this.componentRef.windowBindings, this.contextStack));\n\t\t}\n\t}\n\tgetElementByName(name: string) {\n\t\treturn Reflect.get(this.view, name);\n\t}\n\tcreateStructuralDirective(directive: DomStructuralDirectiveNode, comment: Comment, directiveStack: Stack, subscriptions: ScopeSubscription<Context>[], parentNode: Node, host: HTMLComponent<any> | StructuralDirective): void {\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<T>(directive.name);\n\t\tif (!directiveRef) {\n\t\t\t// didn't find directive or it is not define yet.\n\t\t\t// class registry should have 'when defined' callback\n\t\t\treturn;\n\t\t}\n\t\tconst stack = directiveStack.copyStack();\n\t\tconst templateRef = new TemplateRefImpl(\n\t\t\tthis,\n\t\t\tdirective.node,\n\t\t\tstack,\n\t\t\t(directive as DomStructuralDirectiveNodeUpgrade).templateExpressions ?? [],\n\t\t);\n\t\tconst directiveZone = this.view._zone.fork(directiveRef.zone);\n\t\tconst viewContainerRef = new ViewContainerRefImpl(parentNode as Element, comment);\n\n\t\tdirectiveZone.onEmpty.subscribe(() => {\n\t\t\tconst length = viewContainerRef.length;\n\t\t\tfor (let index = 0; index < length; index++) {\n\t\t\t\tviewContainerRef.get(index)?.detectChanges();\n\t\t\t}\n\t\t});\n\n\t\tconst StructuralDirectiveClass = directiveRef.modelClass as typeof StructuralDirective;\n\t\tconst structural = directiveZone.run(() => new StructuralDirectiveClass(\n\t\t\ttemplateRef,\n\t\t\tviewContainerRef,\n\t\t\thost,\n\t\t\tdirectiveZone,\n\t\t));\n\t\ttemplateRef.host = structural;\n\t\tconst scope = ReactiveScope.readOnlyScopeForThis(structural);\n\t\tstack.pushScope(scope);\n\t\tsubscriptions.push(...this.initDirective(structural, directive, stack));\n\t\tif (isOnInit(structural)) {\n\t\t\tdirectiveZone.run(structural.onInit, structural);\n\t\t}\n\t\tif (directive.attributeDirectives?.length) {\n\t\t\tthis.initAttributeDirectives(directive.attributeDirectives, structural, stack, subscriptions);\n\t\t}\n\t\tif (isOnDestroy(structural)) {\n\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => structural.onDestroy()));\n\t\t}\n\n\t}\n\tcreateComment(node: CommentNode): Comment {\n\t\treturn document.createComment(`${node.comment}`);\n\t}\n\tcreateText(node: TextContent): Text {\n\t\treturn new Text(node.value);\n\t}\n\tcreateLiveText(textNode: LiveTextContent, contextStack: Stack, subscriptions: ScopeSubscription<Context>[]): Text {\n\t\tconst liveText = new Text('');\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushBlockScopeFor({ this: liveText });\n\t\tconst textSubscriptions = textNode.expression.subscribe(contextStack, textNode.pipelineNames);\n\t\tsubscriptions.push(...textSubscriptions);\n\t\ttextNode.expression.get(contextStack);\n\t\treturn liveText;\n\t}\n\tcreateDocumentFragment(node: DomFragmentNode, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective): DocumentFragment {\n\t\tconst fragment = document.createDocumentFragment();\n\t\tnode.children?.forEach(child => this.appendChildToParent(fragment, child, contextStack, parentNode, subscriptions, host));\n\t\treturn fragment;\n\t}\n\tappendChildToParent(fragmentParent: HTMLElement | DocumentFragment, child: DomNode, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective) {\n\t\tif (child instanceof DomElementNode) {\n\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\tconst templateRefName = child.templateRefName!;\n\t\t\t\t// const oldRef = this.templateNameScope.get(templateRefName.name);\n\t\t\t\t// if (oldRef) {\n\t\t\t\t// \treturn;\n\t\t\t\t// }\n\t\t\t\t// TODO: extract template expression\n\t\t\t\tconst templateRef = new TemplateRefImpl(\n\t\t\t\t\tthis,\n\t\t\t\t\tnew DomFragmentNode(child.children),\n\t\t\t\t\tcontextStack.copyStack(),\n\t\t\t\t\t[]\n\t\t\t\t);\n\t\t\t\tthis.templateNameScope.set(templateRefName.name, templateRef);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfragmentParent.append(this.createElement(child, contextStack, subscriptions, host));\n\t\t} else if (child instanceof DomStructuralDirectiveNode) {\n\t\t\tconst commentText = child.name + (typeof child.value == 'string' ? (' = ' + child.value) : '');\n\t\t\tconst comment = document.createComment(`start ${commentText}`);\n\t\t\tfragmentParent.append(comment);\n\t\t\tconst lastComment = document.createComment(`end ${commentText}`);\n\t\t\tcomment.after(lastComment);\n\t\t\tthis.createStructuralDirective(child, comment, contextStack, subscriptions, parentNode, host);\n\t\t} else if (isLiveTextContent(child)) {\n\t\t\tfragmentParent.append(this.createLiveText(child, contextStack, subscriptions));\n\t\t} else if (child instanceof TextContent) {\n\t\t\tfragmentParent.append(this.createText(child));\n\t\t} else if (child instanceof CommentNode) {\n\t\t\tfragmentParent.append(this.createComment(child));\n\t\t} else if (child instanceof DomFragmentNode) {\n\t\t\tfragmentParent.append(this.createDocumentFragment(child, contextStack, parentNode, subscriptions, host));\n\t\t}\n\t}\n\tcreateElementByTagName(node: { tagName: string, is?: string }): HTMLElement {\n\t\tlet element: HTMLElement;\n\t\tif (isValidCustomElementName(node.tagName)) {\n\t\t\tconst ViewClass = customElements.get(node.tagName) as ((new () => HTMLElement) | undefined);\n\t\t\tif (ViewClass) {\n\t\t\t\telement = new ViewClass();\n\t\t\t} else {\n\t\t\t\telement = document.createElement(node.tagName);\n\t\t\t\tif (element.constructor.name === 'HTMLElement') {\n\t\t\t\t\tcustomElements.whenDefined(node.tagName).then(() => customElements.upgrade(element));\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isTagNameNative(node.tagName)) {\n\t\t\t// native tags // and custom tags can be used her\n\t\t\telement = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);\n\t\t} else {\n\t\t\t// html unknown element\n\t\t\telement = document.createElement(node.tagName);\n\t\t}\n\t\tif (isHTMLComponent(element)) {\n\t\t\telement.setParentComponent(this.view);\n\t\t}\n\t\treturn element;\n\t}\n\tcreateElement(node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective): HTMLElement {\n\t\tconst element = this.createElementByTagName(node);\n\t\tthis.initHtmlElement(element, node, contextStack, subscriptions, host);\n\t\treturn element;\n\t}\n\n\t/**\n\t * use for init host bindings\n\t * @param element \n\t * @param node \n\t * @param contextStack \n\t * @param subscriptions \n\t */\n\tinitHtmlElement(element: HTMLElement, node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[]): void;\n\n\t/**\n\t * use to init a new create html element\n\t * @param element \n\t * @param node \n\t * @param contextStack \n\t * @param subscriptions \n\t * @param host is the direct html element `this.view` or a sub `structural directive` like `*if` or `*for`, etc...\n\t */\n\tinitHtmlElement(element: HTMLElement, node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective): void;\n\tinitHtmlElement(element: HTMLElement, node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[], host?: HTMLComponent<any> | StructuralDirective): void {\n\t\tconst elementStack = contextStack.copyStack();\n\t\tconst elementScope = isHTMLComponent(element)\n\t\t\t? element._viewScope\n\t\t\t: ReactiveScope.readOnlyScopeForThis(element);\n\t\telementStack.pushScope<Context>(elementScope);\n\t\tconst attributesSubscriptions = this.initAttribute(element, node, elementStack);\n\t\tsubscriptions.push(...attributesSubscriptions);\n\t\tconst changeEventName = getChangeEventName(node.tagName);\n\t\tif (changeEventName) {\n\t\t\tconst inputScope = elementScope.getInnerScope<ReactiveScope<HTMLInputElement>>('this')!;\n\t\t\tconst listener = (event: HTMLElementEventMap['input' | 'change']) => inputScope.emit('value', (element as HTMLInputElement).value);\n\t\t\telement.addEventListener(changeEventName, listener);\n\t\t\tsubscriptions.push(createSubscriptionDestroyer(\n\t\t\t\t() => element.removeEventListener(changeEventName, listener),\n\t\t\t));\n\t\t}\n\n\t\tconst templateRefName = node.templateRefName;\n\t\tif (templateRefName) {\n\t\t\tReflect.set(this.view, templateRefName.name, element);\n\t\t\tthis.viewScope.set(templateRefName.name, element);\n\t\t\tconst view = this.componentRef.viewChild.find(child => child.selector === templateRefName.name);\n\t\t\tif (view) {\n\t\t\t\tReflect.set(this.view._model, view.modelName, element);\n\t\t\t}\n\t\t}\n\t\tif (node.children) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tthis.appendChildToParent(element, child, elementStack, element, subscriptions, host!);\n\t\t\t}\n\t\t}\n\t\tif (node.attributeDirectives?.length) {\n\t\t\tthis.initAttributeDirectives(node.attributeDirectives, element, contextStack, subscriptions);\n\t\t}\n\t}\n\tprivate initAttributeDirectives(\n\t\tattributeDirectives: DomAttributeDirectiveNode[],\n\t\telement: HTMLElement | StructuralDirective,\n\t\tcontextStack: Stack,\n\t\tsubscriptions: ScopeSubscription<Context>[]) {\n\t\tattributeDirectives?.forEach(directiveNode => {\n\t\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<any>(directiveNode.name);\n\t\t\tif (!directiveRef\n\t\t\t\t|| !((directiveRef.modelClass.prototype instanceof AttributeDirective)\n\t\t\t\t\t|| (directiveRef.modelClass.prototype instanceof AttributeOnStructuralDirective))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst directiveZone = this.view._zone.fork(directiveRef.zone);\n\t\t\tconst directive = directiveZone.run(() => new directiveRef.modelClass(element, directiveZone) as AttributeDirective | AttributeOnStructuralDirective);\n\t\t\tconst stack = contextStack.copyStack();\n\t\t\tconst thisScope = stack.pushReactiveScopeFor({ 'this': directive });\n\n\t\t\tconst directiveSubscriptions = this.initDirective(directive, directiveNode, stack);\n\t\t\tsubscriptions.push(...directiveSubscriptions);\n\t\t\tif (isOnInit(directive)) {\n\t\t\t\tdirectiveZone.run(directive.onInit, directive);\n\t\t\t}\n\t\t\tif (isOnDestroy(directive)) {\n\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => directive.onDestroy()));\n\t\t\t}\n\t\t\tif (!(element instanceof HTMLElement)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst attributeName = directiveRef.selector.replace(/[A-Z]/g, m => '-' + m.toLowerCase());\n\t\t\tif (!element.hasAttribute(attributeName)) {\n\t\t\t\telement.setAttribute(attributeName, '');\n\t\t\t}\n\t\t\tif (directiveRef.viewBindings) {\n\t\t\t\tconst directiveStack = stack.copyStack();\n\t\t\t\tconst directiveScope = thisScope.getInnerScope<ReactiveScope<any>>('this')!;\n\t\t\t\tdirectiveStack.pushScope(directiveScope);\n\t\t\t\tthis.initHtmlElement(element, directiveRef.viewBindings, directiveStack, subscriptions);\n\t\t\t}\n\t\t});\n\t}\n\n\tinitAttribute(element: HTMLElement, node: DomElementNode, contextStack: Stack): ScopeSubscription<Context>[] {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\t\tif (node.attributes?.length) {\n\t\t\tnode.attributes.forEach(attr => {\n\t\t\t\t/**\n\t\t\t\t * <input id=\"23\" name=\"person-name\" data-id=\"1234567890\" data-user=\"carinaanand\" data-date-of-birth />\n\t\t\t\t */\n\t\t\t\tconst isAttr = hasAttr(element, attr.name);\n\t\t\t\tif (isAttr) {\n\t\t\t\t\tif (attr.value === false) {\n\t\t\t\t\t\telement.removeAttribute(attr.name);\n\t\t\t\t\t} else if (attr.value === true) {\n\t\t\t\t\t\telement.setAttribute(attr.name, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute(attr.name, attr.value as string);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tReflect.set(element, attr.name, attr.value);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack, attr.pipelineNames);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tlet listener: Function;\n\t\t\t\t/**\n\t\t\t\t * <a (click)=\"onLinkClick($event)\"></a>\n\t\t\t\t * <a @click=\"onLinkClick($event)\"></a>\n\t\t\t\t * <input [(value)]=\"person.name\" />\n\t\t\t\t * <input (value)=\"person.name\" />\n\t\t\t\t * <!-- <input (value)=\"person.name = $event\" /> -->\n\t\t\t\t * \n\t\t\t\t * TODO: diff of event listener and back-way data binding\n\t\t\t\t */\n\t\t\t\tif (typeof event.value === 'string') {\n\t\t\t\t\tlistener = ($event: Event) => {\n\t\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\t\tthis.view._zone.run(event.expression.get, event.expression, [stack]);\n\t\t\t\t\t};\n\t\t\t\t} else /* if (typeof event.sourceHandler === 'function')*/ {\n\t\t\t\t\t// let eventName: keyof HTMLElementEventMap = event.eventName;\n\t\t\t\t\tlistener = event.value;\n\t\t\t\t}\n\t\t\t\telement.addEventListener(event.name as any, listener as any);\n\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(\n\t\t\t\t\t() => element.removeEventListener(event.name as any, listener as any),\n\t\t\t\t));\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\treturn subscriptions;\n\t}\n\tinitDirective(\n\t\tdirective: StructuralDirective | AttributeDirective | AttributeOnStructuralDirective,\n\t\tnode: DomStructuralDirectiveNode | DomAttributeDirectiveNode,\n\t\tcontextStack: Stack): ScopeSubscription<Context>[] {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\n\t\tif (node.attributes?.length) {\n\t\t\tnode.attributes.forEach(attr => Reflect.set(directive, attr.name, attr.value));\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack, attr.pipelineNames);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tconst listener = ($event: Event) => {\n\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\tthis.view._zone.run(event.expression.get, event.expression, [stack]);\n\t\t\t\t};\n\t\t\t\tconst subscription = ((directive as any)[event.name] as EventEmitter<T>).subscribe(listener);\n\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(\n\t\t\t\t\t() => ((directive as any)[event.name] as EventEmitter<T>).remove(subscription),\n\t\t\t\t));\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\t// TODO: \n\t\t// check host binding\n\t\treturn subscriptions;\n\t}\n\n}\n"]}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveScope, Context, ScopeSubscription, Stack, ReadOnlyScope } from '@ibyar/expressions';\nimport {\n\tCommentNode, DomStructuralDirectiveNode,\n\tDomElementNode, DomFragmentNode, DomNode, isLiveTextContent,\n\tisTagNameNative, isValidCustomElementName, LiveTextContent,\n\tTextContent, DomAttributeDirectiveNode, isFormAssociatedCustomElementByTag\n} from '@ibyar/elements';\nimport type { DomStructuralDirectiveNodeUpgrade } from '@ibyar/elements/node.js';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent, isHTMLComponent } from '../component/custom-element.js';\nimport { documentStack } from '../context/stack.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { isOnDestroy, isOnInit } from '../component/lifecycle.js';\nimport { hasAttr } from '../utils/elements-util.js';\nimport { AttributeDirective, AttributeOnStructuralDirective, StructuralDirective } from '../directive/directive.js';\nimport { TemplateRef, TemplateRefImpl } from '../linker/template-ref.js';\nimport { ViewContainerRefImpl } from '../linker/view-container-ref.js';\nimport { createSubscriptionDestroyer } from '../context/subscription.js';\nimport { EventEmitter } from '../component/events.js';\n\ntype ViewContext = { [element: string]: HTMLElement };\n\nfunction getChangeEventName(tagName: string): 'input' | 'change' | undefined {\n\tswitch (true) {\n\t\tcase tagName === 'input':\n\t\t\treturn 'input';\n\t\tcase tagName === 'textarea':\n\t\tcase tagName === 'select':\n\t\tcase isFormAssociatedCustomElementByTag(tagName):\n\t\t\treturn 'change';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\nexport class ComponentRender<T extends object> {\n\tprivate componentRef: ComponentRef<T>;\n\tprivate template: DomNode;\n\tprivate contextStack: Stack;\n\tprivate templateNameScope: ReactiveScope<{ [templateName: string]: TemplateRef }>;\n\tprivate viewScope: ReactiveScope<ViewContext> = new ReactiveScope({});\n\n\tconstructor(public view: HTMLComponent<T>, private subscriptions: ScopeSubscription<Context>[]) {\n\t\tthis.componentRef = this.view.getComponentRef();\n\t\tthis.contextStack = documentStack.copyStack();\n\t\tthis.contextStack.pushScope<Context>(this.view._modelScope);\n\t\tthis.templateNameScope = this.contextStack.pushReactiveScope();\n\t}\n\tinitView(): void {\n\t\tif (!this.componentRef.template) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof this.componentRef.template === 'function') {\n\t\t\tthis.template = this.componentRef.template(this.view._model);\n\t\t} else {\n\t\t\tthis.template = this.componentRef.template;\n\t\t}\n\n\t\tlet rootRef: HTMLElement | ShadowRoot;\n\t\tif (this.componentRef.isShadowDom) {\n\t\t\trootRef = Reflect.get(this.view, '_shadowRoot') as ShadowRoot;\n\t\t\tReflect.deleteProperty(this.view, '_shadowRoot');\n\t\t} else {\n\t\t\trootRef = this.view;\n\t\t}\n\t\tthis.initTemplateRefMap(this.template);\n\t\tlet rootFragment: DocumentFragment;\n\t\tif (this.template instanceof DomFragmentNode) {\n\t\t\trootFragment = this.createDocumentFragment(this.template, this.contextStack, rootRef, this.subscriptions, this.view);\n\t\t} else {\n\t\t\trootFragment = document.createDocumentFragment();\n\t\t\tthis.appendChildToParent(rootFragment, this.template, this.contextStack, rootRef, this.subscriptions, this.view);\n\t\t}\n\t\trootRef.append(rootFragment);\n\t}\n\tisTemplateRefName(template: DomNode): template is DomElementNode {\n\t\tif (template instanceof DomElementNode) {\n\t\t\tif (template.tagName === 'template' && template.templateRefName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tinitTemplateRefMap(domNode: DomNode) {\n\t\tif (!(domNode instanceof DomElementNode || domNode instanceof DomFragmentNode) || !domNode.children) {\n\t\t\treturn;\n\t\t}\n\t\tfor (let index = 0; index < domNode.children.length; index++) {\n\t\t\tconst child = domNode.children[index];\n\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\tthis.templateNameScope.set(child.templateRefName!.name, undefined);\n\t\t\t} else {\n\t\t\t\tthis.initTemplateRefMap(child);\n\t\t\t}\n\t\t}\n\t}\n\tinitViewBinding() {\n\t\tif (this.componentRef.viewBindings) {\n\t\t\tthis.initHtmlElement(this.view, this.componentRef.viewBindings, this.contextStack, this.subscriptions);\n\t\t}\n\t\tif (this.componentRef.windowBindings) {\n\t\t\tthis.subscriptions.push(...this.initAttribute(window as any, this.componentRef.windowBindings, this.contextStack));\n\t\t}\n\t}\n\tgetElementByName(name: string) {\n\t\treturn Reflect.get(this.view, name);\n\t}\n\tcreateStructuralDirective(directive: DomStructuralDirectiveNode, comment: Comment, directiveStack: Stack, subscriptions: ScopeSubscription<Context>[], parentNode: Node, host: HTMLComponent<any> | StructuralDirective): void {\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<T>(directive.name);\n\t\tif (!directiveRef) {\n\t\t\t// didn't find directive or it is not define yet.\n\t\t\t// class registry should have 'when defined' callback\n\t\t\treturn;\n\t\t}\n\t\tconst stack = directiveStack.copyStack();\n\t\tconst templateRef = new TemplateRefImpl(\n\t\t\tthis,\n\t\t\tdirective.node,\n\t\t\tstack,\n\t\t\t(directive as DomStructuralDirectiveNodeUpgrade).templateExpressions ?? [],\n\t\t);\n\t\tconst directiveZone = this.view._zone.fork(directiveRef.zone);\n\t\tconst viewContainerRef = new ViewContainerRefImpl(parentNode as Element, comment);\n\n\t\tdirectiveZone.onEmpty.subscribe(() => {\n\t\t\tconst length = viewContainerRef.length;\n\t\t\tfor (let index = 0; index < length; index++) {\n\t\t\t\tviewContainerRef.get(index)?.detectChanges();\n\t\t\t}\n\t\t});\n\n\t\tconst StructuralDirectiveClass = directiveRef.modelClass as typeof StructuralDirective;\n\t\tconst structural = directiveZone.run(() => new StructuralDirectiveClass(\n\t\t\ttemplateRef,\n\t\t\tviewContainerRef,\n\t\t\thost,\n\t\t\tdirectiveZone,\n\t\t));\n\t\ttemplateRef.host = structural;\n\t\tconst scope = ReactiveScope.readOnlyScopeForThis(structural);\n\t\tstack.pushScope(scope);\n\t\tsubscriptions.push(...this.initDirective(structural, directive, stack));\n\t\tif (isOnInit(structural)) {\n\t\t\tdirectiveZone.run(structural.onInit, structural);\n\t\t}\n\t\tif (directive.attributeDirectives?.length) {\n\t\t\tthis.initAttributeDirectives(directive.attributeDirectives, structural, stack, subscriptions);\n\t\t}\n\t\tif (isOnDestroy(structural)) {\n\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => structural.onDestroy()));\n\t\t}\n\n\t}\n\tcreateComment(node: CommentNode): Comment {\n\t\treturn document.createComment(`${node.comment}`);\n\t}\n\tcreateText(node: TextContent): Text {\n\t\treturn new Text(node.value);\n\t}\n\tcreateLiveText(textNode: LiveTextContent, contextStack: Stack, subscriptions: ScopeSubscription<Context>[]): Text {\n\t\tconst liveText = new Text('');\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushBlockScopeFor({ this: liveText });\n\t\tconst textSubscriptions = textNode.expression.subscribe(contextStack, textNode.pipelineNames);\n\t\tsubscriptions.push(...textSubscriptions);\n\t\ttextNode.expression.get(contextStack);\n\t\treturn liveText;\n\t}\n\tcreateDocumentFragment(node: DomFragmentNode, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective): DocumentFragment {\n\t\tconst fragment = document.createDocumentFragment();\n\t\tnode.children?.forEach(child => this.appendChildToParent(fragment, child, contextStack, parentNode, subscriptions, host));\n\t\treturn fragment;\n\t}\n\tappendChildToParent(fragmentParent: HTMLElement | DocumentFragment, child: DomNode, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective) {\n\t\tif (child instanceof DomElementNode) {\n\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\tconst templateRefName = child.templateRefName!;\n\t\t\t\t// const oldRef = this.templateNameScope.get(templateRefName.name);\n\t\t\t\t// if (oldRef) {\n\t\t\t\t// \treturn;\n\t\t\t\t// }\n\t\t\t\t// TODO: extract template expression\n\t\t\t\tconst templateRef = new TemplateRefImpl(\n\t\t\t\t\tthis,\n\t\t\t\t\tnew DomFragmentNode(child.children),\n\t\t\t\t\tcontextStack.copyStack(),\n\t\t\t\t\t[]\n\t\t\t\t);\n\t\t\t\tthis.templateNameScope.set(templateRefName.name, templateRef);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfragmentParent.append(this.createElement(child, contextStack, subscriptions, host));\n\t\t} else if (child instanceof DomStructuralDirectiveNode) {\n\t\t\tconst commentText = child.name + (typeof child.value == 'string' ? (' = ' + child.value) : '');\n\t\t\tconst comment = document.createComment(`start ${commentText}`);\n\t\t\tfragmentParent.append(comment);\n\t\t\tconst lastComment = document.createComment(`end ${commentText}`);\n\t\t\tcomment.after(lastComment);\n\t\t\tthis.createStructuralDirective(child, comment, contextStack, subscriptions, parentNode, host);\n\t\t} else if (isLiveTextContent(child)) {\n\t\t\tfragmentParent.append(this.createLiveText(child, contextStack, subscriptions));\n\t\t} else if (child instanceof TextContent) {\n\t\t\tfragmentParent.append(this.createText(child));\n\t\t} else if (child instanceof CommentNode) {\n\t\t\tfragmentParent.append(this.createComment(child));\n\t\t} else if (child instanceof DomFragmentNode) {\n\t\t\tfragmentParent.append(this.createDocumentFragment(child, contextStack, parentNode, subscriptions, host));\n\t\t}\n\t}\n\tcreateElementByTagName(node: { tagName: string, is?: string }): HTMLElement {\n\t\tlet element: HTMLElement;\n\t\tif (isValidCustomElementName(node.tagName)) {\n\t\t\tconst ViewClass = customElements.get(node.tagName) as ((new () => HTMLElement) | undefined);\n\t\t\tif (ViewClass) {\n\t\t\t\telement = new ViewClass();\n\t\t\t} else {\n\t\t\t\telement = document.createElement(node.tagName);\n\t\t\t\tif (element.constructor.name === 'HTMLElement') {\n\t\t\t\t\tcustomElements.whenDefined(node.tagName).then(() => customElements.upgrade(element));\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isTagNameNative(node.tagName)) {\n\t\t\t// native tags // and custom tags can be used her\n\t\t\telement = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);\n\t\t} else {\n\t\t\t// html unknown element\n\t\t\telement = document.createElement(node.tagName);\n\t\t}\n\t\treturn element;\n\t}\n\tcreateElement(node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective): HTMLElement {\n\t\tconst element = this.createElementByTagName(node);\n\t\tthis.initHtmlElement(element, node, contextStack, subscriptions, host);\n\t\treturn element;\n\t}\n\n\tprivate createReadOnlyWithReactiveInnerScope<T extends Context>(ctx: T, aliasName?: string, propertyKeys?: (keyof T)[]) {\n\t\tif (!aliasName) {\n\t\t\treturn ReactiveScope.readOnlyScopeForThis(ctx, propertyKeys);\n\t\t}\n\t\tconst reactiveScope = ReactiveScope.for(ctx, propertyKeys);\n\t\tconst context: Record<string, any> = {\n\t\t\t'this': ctx,\n\t\t\t[aliasName]: ctx,\n\t\t};\n\t\tconst rootScope = ReadOnlyScope.for(context, ['this', aliasName]);\n\t\trootScope.setInnerScope('this', reactiveScope);\n\t\trootScope.setInnerScope(aliasName as 'this', reactiveScope);\n\t\treturn rootScope;\n\t}\n\n\t/**\n\t * use for init host bindings\n\t * @param element \n\t * @param node \n\t * @param contextStack \n\t * @param subscriptions \n\t */\n\tinitHtmlElement(element: HTMLElement, node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[]): void;\n\n\t/**\n\t * use to init a new create html element\n\t * @param element \n\t * @param node \n\t * @param contextStack \n\t * @param subscriptions \n\t * @param host is the direct html element `this.view` or a sub `structural directive` like `*if` or `*for`, etc...\n\t */\n\tinitHtmlElement(element: HTMLElement, node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[], host: HTMLComponent<any> | StructuralDirective): void;\n\tinitHtmlElement(element: HTMLElement, node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<Context>[], host?: HTMLComponent<any> | StructuralDirective): void {\n\t\tconst elementStack = contextStack.copyStack();\n\t\tconst elementScope = isHTMLComponent(element)\n\t\t\t? element._viewScope\n\t\t\t: this.createReadOnlyWithReactiveInnerScope(element, node.templateRefName?.name);\n\t\telementStack.pushScope<Context>(elementScope);\n\t\tconst attributesSubscriptions = this.initAttribute(element, node, elementStack);\n\t\tsubscriptions.push(...attributesSubscriptions);\n\t\tconst changeEventName = getChangeEventName(node.tagName);\n\t\tif (changeEventName) {\n\t\t\tconst inputScope = elementScope.getInnerScope<ReactiveScope<HTMLInputElement>>('this')!;\n\t\t\tconst listener = (event: HTMLElementEventMap['input' | 'change']) => inputScope.emit('value', (element as HTMLInputElement).value);\n\t\t\telement.addEventListener(changeEventName, listener);\n\t\t\tsubscriptions.push(createSubscriptionDestroyer(\n\t\t\t\t() => element.removeEventListener(changeEventName, listener),\n\t\t\t));\n\t\t}\n\n\t\tconst templateRefName = node.templateRefName;\n\t\tif (templateRefName) {\n\t\t\tReflect.set(this.view, templateRefName.name, element);\n\t\t\tthis.viewScope.set(templateRefName.name, element);\n\t\t\tconst view = this.componentRef.viewChild.find(child => child.selector === templateRefName.name);\n\t\t\tif (view) {\n\t\t\t\tReflect.set(this.view._model, view.modelName, element);\n\t\t\t}\n\t\t}\n\t\tif (node.children) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tthis.appendChildToParent(element, child, elementStack, element, subscriptions, host!);\n\t\t\t}\n\t\t}\n\t\tif (node.attributeDirectives?.length) {\n\t\t\tthis.initAttributeDirectives(node.attributeDirectives, element, contextStack, subscriptions);\n\t\t}\n\t}\n\tprivate initAttributeDirectives(\n\t\tattributeDirectives: DomAttributeDirectiveNode[],\n\t\telement: HTMLElement | StructuralDirective,\n\t\tcontextStack: Stack,\n\t\tsubscriptions: ScopeSubscription<Context>[]) {\n\t\tattributeDirectives?.forEach(directiveNode => {\n\t\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<any>(directiveNode.name);\n\t\t\tif (!directiveRef\n\t\t\t\t|| !((directiveRef.modelClass.prototype instanceof AttributeDirective)\n\t\t\t\t\t|| (directiveRef.modelClass.prototype instanceof AttributeOnStructuralDirective))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst directiveZone = this.view._zone.fork(directiveRef.zone);\n\t\t\tconst directive = directiveZone.run(() => new directiveRef.modelClass(element, directiveZone) as AttributeDirective | AttributeOnStructuralDirective);\n\t\t\tconst stack = contextStack.copyStack();\n\t\t\tconst thisScope = stack.pushReactiveScopeFor({ 'this': directive });\n\n\t\t\tconst directiveSubscriptions = this.initDirective(directive, directiveNode, stack);\n\t\t\tsubscriptions.push(...directiveSubscriptions);\n\t\t\tif (isOnInit(directive)) {\n\t\t\t\tdirectiveZone.run(directive.onInit, directive);\n\t\t\t}\n\t\t\tif (isOnDestroy(directive)) {\n\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => directive.onDestroy()));\n\t\t\t}\n\t\t\tif (!(element instanceof HTMLElement)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst attributeName = directiveRef.selector.replace(/[A-Z]/g, m => '-' + m.toLowerCase());\n\t\t\tif (!element.hasAttribute(attributeName)) {\n\t\t\t\telement.setAttribute(attributeName, '');\n\t\t\t}\n\t\t\tif (directiveRef.viewBindings) {\n\t\t\t\tconst directiveStack = stack.copyStack();\n\t\t\t\tconst directiveScope = thisScope.getInnerScope<ReactiveScope<any>>('this')!;\n\t\t\t\tdirectiveStack.pushScope(directiveScope);\n\t\t\t\tthis.initHtmlElement(element, directiveRef.viewBindings, directiveStack, subscriptions);\n\t\t\t}\n\t\t});\n\t}\n\n\tinitAttribute(element: HTMLElement, node: DomElementNode, contextStack: Stack): ScopeSubscription<Context>[] {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\t\tif (node.attributes?.length) {\n\t\t\tnode.attributes.forEach(attr => {\n\t\t\t\t/**\n\t\t\t\t * <input id=\"23\" name=\"person-name\" data-id=\"1234567890\" data-user=\"carinaanand\" data-date-of-birth />\n\t\t\t\t */\n\t\t\t\tconst isAttr = hasAttr(element, attr.name);\n\t\t\t\tif (isAttr) {\n\t\t\t\t\tif (attr.value === false) {\n\t\t\t\t\t\telement.removeAttribute(attr.name);\n\t\t\t\t\t} else if (attr.value === true) {\n\t\t\t\t\t\telement.setAttribute(attr.name, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute(attr.name, attr.value as string);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tReflect.set(element, attr.name, attr.value);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack, attr.pipelineNames);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tlet listener: Function;\n\t\t\t\t/**\n\t\t\t\t * <a (click)=\"onLinkClick($event)\"></a>\n\t\t\t\t * <a @click=\"onLinkClick($event)\"></a>\n\t\t\t\t * <input [(value)]=\"person.name\" />\n\t\t\t\t * <input (value)=\"person.name\" />\n\t\t\t\t * <!-- <input (value)=\"person.name = $event\" /> -->\n\t\t\t\t * \n\t\t\t\t * TODO: diff of event listener and back-way data binding\n\t\t\t\t */\n\t\t\t\tif (typeof event.value === 'string') {\n\t\t\t\t\tlistener = ($event: Event) => {\n\t\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\t\tthis.view._zone.run(event.expression.get, event.expression, [stack]);\n\t\t\t\t\t};\n\t\t\t\t} else /* if (typeof event.sourceHandler === 'function')*/ {\n\t\t\t\t\t// let eventName: keyof HTMLElementEventMap = event.eventName;\n\t\t\t\t\tlistener = event.value;\n\t\t\t\t}\n\t\t\t\telement.addEventListener(event.name as any, listener as any);\n\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(\n\t\t\t\t\t() => element.removeEventListener(event.name as any, listener as any),\n\t\t\t\t));\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\treturn subscriptions;\n\t}\n\tinitDirective(\n\t\tdirective: StructuralDirective | AttributeDirective | AttributeOnStructuralDirective,\n\t\tnode: DomStructuralDirectiveNode | DomAttributeDirectiveNode,\n\t\tcontextStack: Stack): ScopeSubscription<Context>[] {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\n\t\tif (node.attributes?.length) {\n\t\t\tnode.attributes.forEach(attr => Reflect.set(directive, attr.name, attr.value));\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack, attr.pipelineNames);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tconst listener = ($event: Event) => {\n\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\tthis.view._zone.run(event.expression.get, event.expression, [stack]);\n\t\t\t\t};\n\t\t\t\tconst subscription = ((directive as any)[event.name] as EventEmitter<T>).subscribe(listener);\n\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(\n\t\t\t\t\t() => ((directive as any)[event.name] as EventEmitter<T>).remove(subscription),\n\t\t\t\t));\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t});\n\t\t}\n\t\t// TODO: \n\t\t// check host binding\n\t\treturn subscriptions;\n\t}\n\n}\n"]}
package/view/utils.d.ts CHANGED
@@ -1,6 +1,7 @@
1
+ import type { MetadataClass } from '@ibyar/decorators';
1
2
  import type { HTMLComponent } from '../component/custom-element.js';
2
- import type { Constructable } from '../providers/injector.js';
3
3
  import type { TypeOf } from '../utils/typeof.js';
4
4
  import type { ComponentModelClass } from './view.js';
5
- export declare function isComponentModelClass(target: Constructable): target is ComponentModelClass;
6
- export declare function getComponentView<T extends object>(modelClass: TypeOf<T>, selector?: string): TypeOf<HTMLComponent<T>> | undefined;
5
+ export declare function isComponentModelClass(target: MetadataClass): target is ComponentModelClass;
6
+ export declare function getComponentView<T extends object>(modelClass: MetadataClass<T>, selector?: string): TypeOf<HTMLComponent<T>> | undefined;
7
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/view/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAE1F;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAcxI"}
package/view/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/view/utils.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IAC1D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAmB,UAAqB,EAAE,QAAiB;IAC1F,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE;QACvC,OAAO;KACP;IACD,IAAI,aAAqB,CAAC;IAC1B,IAAI,QAAQ,EAAE;QACb,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,iBAAiB,QAAQ,UAAU,CAAC,CAAC;SACvE;KACD;SAAM;QACN,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACrD;IACD,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import type { HTMLComponent } from '../component/custom-element.js';\nimport type { Constructable } from '../providers/injector.js';\nimport type { TypeOf } from '../utils/typeof.js';\nimport type { ComponentModelClass } from './view.js';\n\nexport function isComponentModelClass(target: Constructable): target is ComponentModelClass {\n\treturn Reflect.has(target, 'component');\n}\n\nexport function getComponentView<T extends object>(modelClass: TypeOf<T>, selector?: string): TypeOf<HTMLComponent<T>> | undefined {\n\tif (!isComponentModelClass(modelClass)) {\n\t\treturn;\n\t}\n\tlet viewClassName: string;\n\tif (selector) {\n\t\tviewClassName = modelClass.component[selector];\n\t\tif (!viewClassName) {\n\t\t\tthrow new Error(`${modelClass.name} doesn't have ${selector} as view`);\n\t\t}\n\t} else {\n\t\tviewClassName = Object.keys(modelClass.component)[0];\n\t}\n\treturn modelClass[viewClassName];\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/view/utils.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IAC1D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAmB,UAA4B,EAAE,QAAiB;IACjG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE;QACvC,OAAO;KACP;IACD,IAAI,aAAqB,CAAC;IAC1B,IAAI,QAAQ,EAAE;QACb,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,iBAAiB,QAAQ,UAAU,CAAC,CAAC;SACvE;KACD;SAAM;QACN,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACrD;IACD,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import type { MetadataClass } from '@ibyar/decorators';\nimport type { HTMLComponent } from '../component/custom-element.js';\nimport type { TypeOf } from '../utils/typeof.js';\nimport type { ComponentModelClass } from './view.js';\n\nexport function isComponentModelClass(target: MetadataClass): target is ComponentModelClass {\n\treturn Reflect.has(target, 'component');\n}\n\nexport function getComponentView<T extends object>(modelClass: MetadataClass<T>, selector?: string): TypeOf<HTMLComponent<T>> | undefined {\n\tif (!isComponentModelClass(modelClass)) {\n\t\treturn;\n\t}\n\tlet viewClassName: string;\n\tif (selector) {\n\t\tviewClassName = modelClass.component[selector];\n\t\tif (!viewClassName) {\n\t\t\tthrow new Error(`${modelClass.name} doesn't have ${selector} as view`);\n\t\t}\n\t} else {\n\t\tviewClassName = Object.keys(modelClass.component)[0];\n\t}\n\treturn modelClass[viewClassName];\n}\n"]}
package/view/view.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import type { TypeOf } from '../utils/typeof.js';
2
+ import { MetadataClass } from '@ibyar/decorators';
2
3
  import { ComponentRef } from '../component/component.js';
3
4
  import { HTMLComponent } from '../component/custom-element.js';
4
- import { Constructable } from '../providers/injector.js';
5
5
  /**
6
6
  *
7
7
  * @param modelClass
8
8
  * @param componentRef
9
9
  */
10
- export declare function initCustomElementView<T extends Object>(modelClass: TypeOf<T>, componentRef: ComponentRef<T>): TypeOf<HTMLComponent<T>>;
11
- export type ComponentModelClass = Constructable & {
10
+ export declare function initCustomElementView<T extends Object>(modelClass: MetadataClass<T>, componentRef: ComponentRef<T>): MetadataClass<HTMLComponent<T>>;
11
+ export type ComponentModelClass = MetadataClass & {
12
12
  [key: string]: string;
13
13
  } & {
14
14
  component: {
@@ -17,5 +17,6 @@ export type ComponentModelClass = Constructable & {
17
17
  } & {
18
18
  [key: string]: TypeOf<HTMLComponent<any>>;
19
19
  };
20
- export declare function addViewToModelClass<T extends object>(modelClass: TypeOf<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string): void;
20
+ export declare function addViewToModelClass<T extends object>(modelClass: MetadataClass<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string): void;
21
21
  export declare function buildViewClassNameFromSelector(selector: string): string;
22
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAY,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAS/D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CA2FpJ;AAED,MAAM,MAAM,mBAAmB,GAC9B,aAAa,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzB;IAAE,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CAAE,GACxC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;CAAE,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,QAUnK;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,UAK9D"}
package/view/view.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { __esDecorate, __propKey, __runInitializers, __setFunctionName } from "tslib";
2
+ import { Metadata } from '@ibyar/decorators';
1
3
  import { getAllAttributes } from '@ibyar/elements';
2
4
  import { ToCamelCase } from '../utils/utils.js';
3
5
  import { baseFactoryView } from './base-view.js';
@@ -10,22 +12,47 @@ const FACTORY_CACHE = new WeakMap();
10
12
  * @param componentRef
11
13
  */
12
14
  export function initCustomElementView(modelClass, componentRef) {
15
+ var _a;
13
16
  const htmlParent = componentRef.extend.classRef;
14
17
  let viewClass;
15
18
  const viewClassName = buildViewClassNameFromSelector(componentRef.selector);
16
19
  const htmlViewClassName = `HTML${viewClassName}Element`;
17
20
  let parentClass;
18
- if (FACTORY_CACHE.has(htmlParent)) {
19
- parentClass = FACTORY_CACHE.get(htmlParent);
21
+ if (componentRef.extendCustomElement) {
22
+ parentClass = componentRef.extend.classRef;
20
23
  }
21
24
  else {
22
- parentClass = componentRef.formAssociated ? baseFormFactoryView(htmlParent) : baseFactoryView(htmlParent);
23
- FACTORY_CACHE.set(htmlParent, parentClass);
25
+ if (FACTORY_CACHE.has(htmlParent)) {
26
+ parentClass = FACTORY_CACHE.get(htmlParent);
27
+ }
28
+ else {
29
+ parentClass = componentRef.formAssociated ? baseFormFactoryView(htmlParent) : baseFactoryView(htmlParent);
30
+ FACTORY_CACHE.set(htmlParent, parentClass);
31
+ }
24
32
  }
25
33
  viewClass = ({
26
- [htmlViewClassName]: class extends parentClass {
27
- constructor() { super(componentRef, modelClass); }
28
- }
34
+ [_a = __propKey(htmlViewClassName)]: (() => {
35
+ let _classDecorators = [Metadata()];
36
+ let _classDescriptor;
37
+ let _classExtraInitializers = [];
38
+ let _classThis;
39
+ let _classSuper = parentClass;
40
+ var class_1 = class extends _classSuper {
41
+ static { _classThis = this; }
42
+ static { __setFunctionName(_classThis, _a); }
43
+ static {
44
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
45
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
46
+ class_1 = _classThis = _classDescriptor.value;
47
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
48
+ __runInitializers(_classThis, _classExtraInitializers);
49
+ }
50
+ constructor(optionalComponentRef, modelConstructor) {
51
+ super(optionalComponentRef ?? componentRef, modelConstructor ?? modelClass);
52
+ }
53
+ };
54
+ return class_1 = _classThis;
55
+ })()
29
56
  })[htmlViewClassName];
30
57
  componentRef.inputs.forEach((input) => {
31
58
  Object.defineProperty(viewClass.prototype, input.viewAttribute, {
package/view/view.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { getAllAttributes } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter, Subscription } from '../component/events.js';\nimport { ToCamelCase } from '../utils/utils.js';\nimport { Constructable } from '../providers/injector.js';\nimport { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\nimport { isComponentModelClass } from './utils.js';\n\nconst FACTORY_CACHE = new WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>>();\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: TypeOf<T>, componentRef: ComponentRef<T>): TypeOf<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as TypeOf<HTMLElement>;\n\tlet viewClass: TypeOf<HTMLComponent<T>>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\n\tlet parentClass: TypeOf<HTMLComponent<T>>;\n\tif (FACTORY_CACHE.has(htmlParent)) {\n\t\tparentClass = FACTORY_CACHE.get(htmlParent) as TypeOf<HTMLComponent<T>>;\n\t} else {\n\t\tparentClass = componentRef.formAssociated ? baseFormFactoryView<T>(htmlParent) : baseFactoryView<T>(htmlParent);\n\t\tFACTORY_CACHE.set(htmlParent, parentClass);\n\t}\n\tviewClass = ({\n\t\t[htmlViewClassName]: class extends parentClass { constructor() { super(componentRef, modelClass); } }\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\treturn this._modelScope.get(input.modelProperty);\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\tthis._modelScope.set(input.modelProperty, value);\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t});\n\t});\n\n\tcomponentRef.outputs.forEach(output => {\n\t\tObject.defineProperty(viewClass.prototype, output.viewAttribute, {\n\t\t\tget(): EventEmitter<any> {\n\t\t\t\treturn this._model[output.modelProperty];\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t\tlet eventListener: Function | undefined;\n\t\tlet subscription: Subscription<any>;\n\t\tObject.defineProperty(viewClass.prototype, 'on' + ToCamelCase(output.viewAttribute), {\n\t\t\tget(): Function | undefined {\n\t\t\t\treturn eventListener;\n\t\t\t},\n\t\t\tset(this: HTMLComponent<T>, event: string | Function): void {\n\t\t\t\tif (!event) {\n\t\t\t\t\tif (subscription) {\n\t\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\t\teventListener = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof event === 'string') {\n\t\t\t\t\tif (event.endsWith('()')) {\n\t\t\t\t\t\tevent = event.substring(0, event.length - 2);\n\t\t\t\t\t}\n\t\t\t\t\tevent = Reflect.get(window, event);\n\t\t\t\t}\n\t\t\t\teventListener = event as Function;\n\t\t\t\tsubscription = (this._model[output.modelProperty] as EventEmitter<any>).subscribe(event);\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t});\n\n\tcomponentRef.inputs.map(input => input.modelProperty)\n\t\t.concat(componentRef.outputs.map(output => output.modelProperty))\n\t\t.concat(componentRef.hostBindings.map(host => host.hostPropertyName))\n\t\t.concat(componentRef.viewChild.map(child => child.modelName))\n\t\t.filter(modelName => !(modelName in modelClass.prototype))\n\t\t.forEach(modelName => modelClass.prototype[modelName] = undefined);\n\n\tconst defaultAttributes = getAllAttributes(componentRef.extend.name);\n\tconst observedAttributes = componentRef.inputs.map(input => input.viewAttribute)\n\t\t.concat(componentRef.outputs.map(output => 'on' + ToCamelCase(output.viewAttribute)));\n\tif (componentRef.formAssociated && !observedAttributes.includes('value')) {\n\t\tobservedAttributes.push('value');\n\t}\n\tReflect.set(viewClass, 'observedAttributes', observedAttributes);\n\tReflect.set(viewClass, 'allAttributes', defaultAttributes.concat(observedAttributes));\n\taddViewToModelClass<T>(modelClass, componentRef.selector, viewClass, htmlViewClassName);\n\tif (!Reflect.has(window, htmlViewClassName)) {\n\t\tReflect.set(window, htmlViewClassName, viewClass);\n\t}\n\treturn viewClass;\n}\n\nexport type ComponentModelClass =\n\tConstructable\n\t& { [key: string]: string }\n\t& { component: { [key: string]: string } }\n\t& { [key: string]: TypeOf<HTMLComponent<any>> };\n\nexport function addViewToModelClass<T extends object>(modelClass: TypeOf<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string) {\n\tObject.defineProperty(modelClass, htmlViewClassName, { value: viewClass });\n\n\tif (!isComponentModelClass(modelClass)) {\n\t\tReflect.set(modelClass, 'component', {});\n\t}\n\n\tif (isComponentModelClass(modelClass)) {\n\t\tmodelClass.component[selector] = htmlViewClassName;\n\t}\n}\n\nexport function buildViewClassNameFromSelector(selector: string) {\n\treturn selector\n\t\t.split('-')\n\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t.join('');\n}\n"]}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { MetadataClass, Metadata } from '@ibyar/decorators';\nimport { getAllAttributes } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter, Subscription } from '../component/events.js';\nimport { ToCamelCase } from '../utils/utils.js';\nimport { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\nimport { isComponentModelClass } from './utils.js';\n\nconst FACTORY_CACHE = new WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>>();\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: MetadataClass<T>, componentRef: ComponentRef<T>): MetadataClass<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as TypeOf<HTMLElement>;\n\tlet viewClass: TypeOf<HTMLComponent<T>>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\n\tlet parentClass: TypeOf<HTMLComponent<T>>;\n\tif (componentRef.extendCustomElement) {\n\t\tparentClass = componentRef.extend.classRef as TypeOf<HTMLComponent<T>>;\n\t} else {\n\t\tif (FACTORY_CACHE.has(htmlParent)) {\n\t\t\tparentClass = FACTORY_CACHE.get(htmlParent) as TypeOf<HTMLComponent<T>>;\n\t\t} else {\n\t\t\tparentClass = componentRef.formAssociated ? baseFormFactoryView<T>(htmlParent) : baseFactoryView<T>(htmlParent);\n\t\t\tFACTORY_CACHE.set(htmlParent, parentClass);\n\t\t}\n\t}\n\n\tviewClass = ({\n\t\t[htmlViewClassName]: @Metadata() class extends parentClass {\n\t\t\tconstructor(optionalComponentRef?: ComponentRef<T>, modelConstructor?: TypeOf<T>) {\n\t\t\t\tsuper(optionalComponentRef ?? componentRef, modelConstructor ?? modelClass);\n\t\t\t}\n\t\t}\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\treturn this._modelScope.get(input.modelProperty);\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\tthis._modelScope.set(input.modelProperty, value);\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t});\n\t});\n\n\tcomponentRef.outputs.forEach(output => {\n\t\tObject.defineProperty(viewClass.prototype, output.viewAttribute, {\n\t\t\tget(): EventEmitter<any> {\n\t\t\t\treturn this._model[output.modelProperty];\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t\tlet eventListener: Function | undefined;\n\t\tlet subscription: Subscription<any>;\n\t\tObject.defineProperty(viewClass.prototype, 'on' + ToCamelCase(output.viewAttribute), {\n\t\t\tget(): Function | undefined {\n\t\t\t\treturn eventListener;\n\t\t\t},\n\t\t\tset(this: HTMLComponent<T>, event: string | Function): void {\n\t\t\t\tif (!event) {\n\t\t\t\t\tif (subscription) {\n\t\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\t\teventListener = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof event === 'string') {\n\t\t\t\t\tif (event.endsWith('()')) {\n\t\t\t\t\t\tevent = event.substring(0, event.length - 2);\n\t\t\t\t\t}\n\t\t\t\t\tevent = Reflect.get(window, event);\n\t\t\t\t}\n\t\t\t\teventListener = event as Function;\n\t\t\t\tsubscription = (this._model[output.modelProperty] as EventEmitter<any>).subscribe(event);\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t});\n\n\tcomponentRef.inputs.map(input => input.modelProperty)\n\t\t.concat(componentRef.outputs.map(output => output.modelProperty))\n\t\t.concat(componentRef.hostBindings.map(host => host.hostPropertyName))\n\t\t.concat(componentRef.viewChild.map(child => child.modelName))\n\t\t.filter(modelName => !(modelName in modelClass.prototype))\n\t\t.forEach(modelName => modelClass.prototype[modelName] = undefined);\n\n\tconst defaultAttributes = getAllAttributes(componentRef.extend.name);\n\tconst observedAttributes = componentRef.inputs.map(input => input.viewAttribute)\n\t\t.concat(componentRef.outputs.map(output => 'on' + ToCamelCase(output.viewAttribute)));\n\tif (componentRef.formAssociated && !observedAttributes.includes('value')) {\n\t\tobservedAttributes.push('value');\n\t}\n\tReflect.set(viewClass, 'observedAttributes', observedAttributes);\n\tReflect.set(viewClass, 'allAttributes', defaultAttributes.concat(observedAttributes));\n\taddViewToModelClass<T>(modelClass, componentRef.selector, viewClass, htmlViewClassName);\n\tif (!Reflect.has(window, htmlViewClassName)) {\n\t\tReflect.set(window, htmlViewClassName, viewClass);\n\t}\n\treturn viewClass as MetadataClass;\n}\n\nexport type ComponentModelClass =\n\tMetadataClass\n\t& { [key: string]: string }\n\t& { component: { [key: string]: string } }\n\t& { [key: string]: TypeOf<HTMLComponent<any>> };\n\nexport function addViewToModelClass<T extends object>(modelClass: MetadataClass<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string) {\n\tObject.defineProperty(modelClass, htmlViewClassName, { value: viewClass });\n\n\tif (!isComponentModelClass(modelClass)) {\n\t\tReflect.set(modelClass, 'component', {});\n\t}\n\n\tif (isComponentModelClass(modelClass)) {\n\t\tmodelClass.component[selector] = htmlViewClassName;\n\t}\n}\n\nexport function buildViewClassNameFromSelector(selector: string) {\n\treturn selector\n\t\t.split('-')\n\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t.join('');\n}\n"]}
@@ -19,3 +19,4 @@ export type ZoneType =
19
19
  */
20
20
  export declare function bootstrapZone(type?: ZoneType): void;
21
21
  export declare function getRootZone(): AuroraZone;
22
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/core/zone/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqC,MAAM,WAAW,CAAC;AAE1E,MAAM,MAAM,QAAQ;AACnB;;GAEG;AACD,QAAQ;AAEV;;GAEG;GACD,OAAO;AAET;;;;GAIG;GACD,QAAQ,CACT;AAMF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,QAW5C;AAED,wBAAgB,WAAW,eAE1B"}