@ibyar/core 0.8.5 → 1.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 (134) hide show
  1. package/annotation/context.d.ts +41 -0
  2. package/annotation/context.d.ts.map +1 -0
  3. package/annotation/context.js +79 -0
  4. package/annotation/context.js.map +1 -0
  5. package/annotation/decorators.d.ts +20 -285
  6. package/annotation/decorators.d.ts.map +1 -0
  7. package/annotation/decorators.js +92 -84
  8. package/annotation/decorators.js.map +1 -1
  9. package/annotation/options.d.ts +275 -0
  10. package/annotation/options.d.ts.map +1 -0
  11. package/annotation/options.js +2 -0
  12. package/annotation/options.js.map +1 -0
  13. package/binding/binding.expressions.d.ts +1 -0
  14. package/binding/binding.expressions.d.ts.map +1 -0
  15. package/binding/binding.expressions.js +138 -125
  16. package/binding/binding.expressions.js.map +1 -1
  17. package/component/component.d.ts +16 -12
  18. package/component/component.d.ts.map +1 -0
  19. package/component/component.js +111 -52
  20. package/component/component.js.map +1 -1
  21. package/component/custom-element.d.ts +1 -0
  22. package/component/custom-element.d.ts.map +1 -0
  23. package/component/events.d.ts +1 -0
  24. package/component/events.d.ts.map +1 -0
  25. package/component/events.js +4 -3
  26. package/component/events.js.map +1 -1
  27. package/component/lifecycle.d.ts +1 -0
  28. package/component/lifecycle.d.ts.map +1 -0
  29. package/component/reflect.d.ts +12 -15
  30. package/component/reflect.d.ts.map +1 -0
  31. package/component/reflect.js +27 -47
  32. package/component/reflect.js.map +1 -1
  33. package/context/stack.d.ts +1 -0
  34. package/context/stack.d.ts.map +1 -0
  35. package/context/subscription.d.ts +1 -0
  36. package/context/subscription.d.ts.map +1 -0
  37. package/directive/directive.d.ts +1 -0
  38. package/directive/directive.d.ts.map +1 -0
  39. package/directive/directive.js +8 -0
  40. package/directive/directive.js.map +1 -1
  41. package/directive/parser.d.ts +1 -0
  42. package/directive/parser.d.ts.map +1 -0
  43. package/directive/parser.js +9 -7
  44. package/directive/parser.js.map +1 -1
  45. package/directive/providers.d.ts +1 -0
  46. package/directive/providers.d.ts.map +1 -0
  47. package/directive/providers.js +2 -1
  48. package/directive/providers.js.map +1 -1
  49. package/html/deserialize.d.ts +1 -0
  50. package/html/deserialize.d.ts.map +1 -0
  51. package/html/expression.d.ts +1 -0
  52. package/html/expression.d.ts.map +1 -0
  53. package/html/expression.js +2 -2
  54. package/html/expression.js.map +1 -1
  55. package/html/types.d.ts +1 -0
  56. package/html/types.d.ts.map +1 -0
  57. package/index.d.ts +2 -2
  58. package/index.d.ts.map +1 -0
  59. package/index.js +1 -2
  60. package/index.js.map +1 -1
  61. package/linker/change-detector-ref.d.ts +1 -0
  62. package/linker/change-detector-ref.d.ts.map +1 -0
  63. package/linker/template-ref.d.ts +1 -0
  64. package/linker/template-ref.d.ts.map +1 -0
  65. package/linker/template-ref.js +5 -0
  66. package/linker/template-ref.js.map +1 -1
  67. package/linker/view-container-ref.d.ts +4 -2
  68. package/linker/view-container-ref.d.ts.map +1 -0
  69. package/linker/view-container-ref.js +8 -7
  70. package/linker/view-container-ref.js.map +1 -1
  71. package/linker/view-ref.d.ts +1 -0
  72. package/linker/view-ref.d.ts.map +1 -0
  73. package/linker/view-ref.js +5 -2
  74. package/linker/view-ref.js.map +1 -1
  75. package/node.d.ts +1 -0
  76. package/node.d.ts.map +1 -0
  77. package/package.json +7 -8
  78. package/pipe/pipe.d.ts +1 -0
  79. package/pipe/pipe.d.ts.map +1 -0
  80. package/pipe/pipe.js +2 -1
  81. package/pipe/pipe.js.map +1 -1
  82. package/providers/provider.d.ts +15 -13
  83. package/providers/provider.d.ts.map +1 -0
  84. package/providers/provider.js +13 -16
  85. package/providers/provider.js.map +1 -1
  86. package/utils/elements-util.d.ts +1 -0
  87. package/utils/elements-util.d.ts.map +1 -0
  88. package/utils/path.d.ts +1 -0
  89. package/utils/path.d.ts.map +1 -0
  90. package/utils/typeof.d.ts +3 -0
  91. package/utils/typeof.d.ts.map +1 -0
  92. package/utils/typeof.js.map +1 -1
  93. package/utils/utils.d.ts +1 -0
  94. package/utils/utils.d.ts.map +1 -0
  95. package/view/base-view.d.ts +1 -0
  96. package/view/base-view.d.ts.map +1 -0
  97. package/view/base-view.js +34 -16
  98. package/view/base-view.js.map +1 -1
  99. package/view/form-view.d.ts +1 -0
  100. package/view/form-view.d.ts.map +1 -0
  101. package/view/form-view.js +70 -67
  102. package/view/form-view.js.map +1 -1
  103. package/view/mutation.d.ts +1 -0
  104. package/view/mutation.d.ts.map +1 -0
  105. package/view/mutation.js +37 -36
  106. package/view/mutation.js.map +1 -1
  107. package/view/render.d.ts +2 -2
  108. package/view/render.d.ts.map +1 -0
  109. package/view/render.js +21 -21
  110. package/view/render.js.map +1 -1
  111. package/view/utils.d.ts +4 -3
  112. package/view/utils.d.ts.map +1 -0
  113. package/view/utils.js.map +1 -1
  114. package/view/view.d.ts +5 -4
  115. package/view/view.d.ts.map +1 -0
  116. package/view/view.js +19 -3
  117. package/view/view.js.map +1 -1
  118. package/zone/bootstrap.d.ts +1 -0
  119. package/zone/bootstrap.d.ts.map +1 -0
  120. package/zone/proxy.d.ts +1 -0
  121. package/zone/proxy.d.ts.map +1 -0
  122. package/zone/proxy.js +1 -0
  123. package/zone/proxy.js.map +1 -1
  124. package/zone/task.d.ts +1 -0
  125. package/zone/task.d.ts.map +1 -0
  126. package/zone/task.js +11 -3
  127. package/zone/task.js.map +1 -1
  128. package/zone/zone.d.ts +1 -0
  129. package/zone/zone.d.ts.map +1 -0
  130. package/zone/zone.js +8 -6
  131. package/zone/zone.js.map +1 -1
  132. package/providers/injector.d.ts +0 -10
  133. package/providers/injector.js +0 -27
  134. package/providers/injector.js.map +0 -1
@@ -1,136 +1,149 @@
1
- var OneWayAssignmentExpression_1, TwoWayAssignmentExpression_1;
2
- import { __decorate, __metadata } from "tslib";
3
- import { InfixExpressionNode, findReactiveScopeByEventMap, Scope, MemberExpression, Deserializer } from '@ibyar/expressions';
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { InfixExpressionNode, findReactiveScopeByEventMap, Scope, Deserializer } from '@ibyar/expressions';
4
3
  import { createSubscriptionDestroyer } from '../context/subscription.js';
5
4
  import { isOnDestroy } from '../component/lifecycle.js';
6
5
  import { AsyncPipeProvider, AsyncPipeScope, PipeProvider } from '../pipe/pipe.js';
7
- let OneWayAssignmentExpression = OneWayAssignmentExpression_1 = class OneWayAssignmentExpression extends InfixExpressionNode {
8
- static fromJSON(node, deserializer) {
9
- return new OneWayAssignmentExpression_1(deserializer(node.left), deserializer(node.right));
10
- }
11
- static visit(node, visitNode) {
12
- visitNode(node.left);
13
- visitNode(node.right);
14
- }
15
- constructor(left, right) {
16
- super('=:', left, right);
17
- this.rightEvents = this.right.events();
18
- }
19
- set(stack, value) {
20
- return this.left.set(stack, value);
21
- }
22
- get(stack) {
23
- const rv = this.right.get(stack);
24
- this.set(stack, rv);
25
- return rv;
26
- }
27
- subscribe(stack, pipelineNames) {
28
- const subscriptions = [];
29
- if (pipelineNames?.length) {
30
- const syncPipeScope = Scope.blockScope();
31
- const asyncPipeScope = AsyncPipeScope.blockScope();
32
- let hasAsync = false, hasSync = false;
33
- pipelineNames.forEach(pipelineName => {
34
- const scope = stack.findScope(pipelineName);
35
- const pipe = scope.get(pipelineName);
36
- if (scope instanceof AsyncPipeProvider) {
37
- hasAsync = true;
38
- asyncPipeScope.set(pipelineName, pipe);
39
- if (isOnDestroy(pipe.prototype)) {
40
- subscriptions.push(createSubscriptionDestroyer(() => asyncPipeScope.unsubscribe(pipelineName)));
6
+ export let OneWayAssignmentExpression = (() => {
7
+ let _classDecorators = [Deserializer('OneWayAssignment')];
8
+ let _classDescriptor;
9
+ let _classExtraInitializers = [];
10
+ let _classThis;
11
+ var OneWayAssignmentExpression = class extends InfixExpressionNode {
12
+ static {
13
+ __esDecorate(null, _classDescriptor = { value: this }, _classDecorators, { kind: "class", name: this.name }, null, _classExtraInitializers);
14
+ OneWayAssignmentExpression = _classThis = _classDescriptor.value;
15
+ __runInitializers(_classThis, _classExtraInitializers);
16
+ }
17
+ static fromJSON(node, deserializer) {
18
+ return new OneWayAssignmentExpression(deserializer(node.left), deserializer(node.right));
19
+ }
20
+ static visit(node, visitNode) {
21
+ visitNode(node.left);
22
+ visitNode(node.right);
23
+ }
24
+ rightEvents = this.right.events();
25
+ constructor(left, right) {
26
+ super('=:', left, right);
27
+ }
28
+ set(stack, value) {
29
+ return this.left.set(stack, value);
30
+ }
31
+ get(stack) {
32
+ const rv = this.right.get(stack);
33
+ this.set(stack, rv);
34
+ return rv;
35
+ }
36
+ subscribe(stack, pipelineNames) {
37
+ const subscriptions = [];
38
+ if (pipelineNames?.length) {
39
+ const syncPipeScope = Scope.blockScope();
40
+ const asyncPipeScope = AsyncPipeScope.blockScope();
41
+ let hasAsync = false, hasSync = false;
42
+ pipelineNames.forEach(pipelineName => {
43
+ const scope = stack.findScope(pipelineName);
44
+ const pipe = scope.get(pipelineName);
45
+ if (scope instanceof AsyncPipeProvider) {
46
+ hasAsync = true;
47
+ asyncPipeScope.set(pipelineName, pipe);
48
+ if (isOnDestroy(pipe.prototype)) {
49
+ subscriptions.push(createSubscriptionDestroyer(() => asyncPipeScope.unsubscribe(pipelineName)));
50
+ }
41
51
  }
42
- }
43
- else if (scope instanceof PipeProvider) {
44
- hasSync = true;
45
- syncPipeScope.set(pipelineName, pipe);
46
- }
52
+ else if (scope instanceof PipeProvider) {
53
+ hasSync = true;
54
+ syncPipeScope.set(pipelineName, pipe);
55
+ }
56
+ });
57
+ hasSync && stack.pushScope(syncPipeScope);
58
+ hasAsync && stack.pushScope(asyncPipeScope);
59
+ }
60
+ const tuples = findReactiveScopeByEventMap(this.rightEvents, stack);
61
+ const callback = () => this.get(stack);
62
+ tuples.forEach(tuple => {
63
+ const subscription = tuple[1].subscribe(tuple[0], callback);
64
+ subscriptions.push(subscription);
47
65
  });
48
- hasSync && stack.pushScope(syncPipeScope);
49
- hasAsync && stack.pushScope(asyncPipeScope);
50
- }
51
- const tuples = findReactiveScopeByEventMap(this.rightEvents, stack);
52
- const callback = () => this.get(stack);
53
- tuples.forEach(tuple => {
54
- const subscription = tuple[1].subscribe(tuple[0], callback);
55
- subscriptions.push(subscription);
56
- });
57
- return subscriptions;
58
- }
59
- };
60
- OneWayAssignmentExpression = OneWayAssignmentExpression_1 = __decorate([
61
- Deserializer('OneWayAssignment'),
62
- __metadata("design:paramtypes", [MemberExpression, Object])
63
- ], OneWayAssignmentExpression);
64
- export { OneWayAssignmentExpression };
66
+ return subscriptions;
67
+ }
68
+ };
69
+ return OneWayAssignmentExpression = _classThis;
70
+ })();
65
71
  /**
66
72
  * the default behavior is assign the right hand side to the left hand side.
67
73
  *
68
74
  *
69
75
  */
70
- let TwoWayAssignmentExpression = TwoWayAssignmentExpression_1 = class TwoWayAssignmentExpression extends InfixExpressionNode {
71
- static fromJSON(node, deserializer) {
72
- return new TwoWayAssignmentExpression_1(deserializer(node.left), deserializer(node.right));
73
- }
74
- static visit(node, visitNode) {
75
- visitNode(node.left);
76
- visitNode(node.right);
77
- }
78
- constructor(left, right) {
79
- super('=::', left, right);
80
- this.rightEvents = this.right.events();
81
- this.leftEvents = this.left.events();
82
- }
83
- set(stack, value) {
84
- return this.setRTL(stack, value);
85
- }
86
- get(stack) {
87
- return this.getRTL(stack);
88
- }
89
- setRTL(stack, value) {
90
- return this.left.set(stack, value);
91
- }
92
- getRTL(stack) {
93
- const rv = this.right.get(stack);
94
- this.setRTL(stack, rv);
95
- return rv;
96
- }
97
- actionRTL(stack) {
98
- return () => this.getRTL(stack);
99
- }
100
- setLTR(stack, value) {
101
- return this.right.set(stack, value);
102
- }
103
- getLTR(stack) {
104
- const lv = this.left.get(stack);
105
- this.setLTR(stack, lv);
106
- return lv;
107
- }
108
- actionLTR(stack) {
109
- return () => this.getLTR(stack);
110
- }
111
- subscribeToEvents(stack, tuples, actionCallback) {
112
- const subscriptions = [];
113
- tuples.forEach(tuple => {
114
- const subscription = tuple[1].subscribe(tuple[0], actionCallback);
115
- subscriptions.push(subscription);
116
- });
117
- return subscriptions;
118
- }
119
- subscribe(stack) {
120
- // right to left
121
- const rightTuples = findReactiveScopeByEventMap(this.rightEvents, stack);
122
- const rtlAction = this.actionRTL(stack);
123
- const rtlSubscriptions = this.subscribeToEvents(stack, rightTuples, rtlAction);
124
- // left to right
125
- const leftTuples = findReactiveScopeByEventMap(this.leftEvents, stack);
126
- const ltrAction = this.actionLTR(stack);
127
- const ltrSubscriptions = this.subscribeToEvents(stack, leftTuples, ltrAction);
128
- return rtlSubscriptions.concat(ltrSubscriptions);
129
- }
130
- };
131
- TwoWayAssignmentExpression = TwoWayAssignmentExpression_1 = __decorate([
132
- Deserializer('TwoWayAssignment'),
133
- __metadata("design:paramtypes", [MemberExpression, Object])
134
- ], TwoWayAssignmentExpression);
135
- export { TwoWayAssignmentExpression };
76
+ export let TwoWayAssignmentExpression = (() => {
77
+ let _classDecorators_1 = [Deserializer('TwoWayAssignment')];
78
+ let _classDescriptor_1;
79
+ let _classExtraInitializers_1 = [];
80
+ let _classThis_1;
81
+ var TwoWayAssignmentExpression = class extends InfixExpressionNode {
82
+ static {
83
+ __esDecorate(null, _classDescriptor_1 = { value: this }, _classDecorators_1, { kind: "class", name: this.name }, null, _classExtraInitializers_1);
84
+ TwoWayAssignmentExpression = _classThis_1 = _classDescriptor_1.value;
85
+ __runInitializers(_classThis_1, _classExtraInitializers_1);
86
+ }
87
+ static fromJSON(node, deserializer) {
88
+ return new TwoWayAssignmentExpression(deserializer(node.left), deserializer(node.right));
89
+ }
90
+ static visit(node, visitNode) {
91
+ visitNode(node.left);
92
+ visitNode(node.right);
93
+ }
94
+ rightEvents = this.right.events();
95
+ leftEvents = this.left.events();
96
+ constructor(left, right) {
97
+ super('=::', left, right);
98
+ }
99
+ set(stack, value) {
100
+ return this.setRTL(stack, value);
101
+ }
102
+ get(stack) {
103
+ return this.getRTL(stack);
104
+ }
105
+ setRTL(stack, value) {
106
+ return this.left.set(stack, value);
107
+ }
108
+ getRTL(stack) {
109
+ const rv = this.right.get(stack);
110
+ this.setRTL(stack, rv);
111
+ return rv;
112
+ }
113
+ actionRTL(stack) {
114
+ return () => this.getRTL(stack);
115
+ }
116
+ setLTR(stack, value) {
117
+ return this.right.set(stack, value);
118
+ }
119
+ getLTR(stack) {
120
+ const lv = this.left.get(stack);
121
+ this.setLTR(stack, lv);
122
+ return lv;
123
+ }
124
+ actionLTR(stack) {
125
+ return () => this.getLTR(stack);
126
+ }
127
+ subscribeToEvents(stack, tuples, actionCallback) {
128
+ const subscriptions = [];
129
+ tuples.forEach(tuple => {
130
+ const subscription = tuple[1].subscribe(tuple[0], actionCallback);
131
+ subscriptions.push(subscription);
132
+ });
133
+ return subscriptions;
134
+ }
135
+ subscribe(stack) {
136
+ // right to left
137
+ const rightTuples = findReactiveScopeByEventMap(this.rightEvents, stack);
138
+ const rtlAction = this.actionRTL(stack);
139
+ const rtlSubscriptions = this.subscribeToEvents(stack, rightTuples, rtlAction);
140
+ // left to right
141
+ const leftTuples = findReactiveScopeByEventMap(this.leftEvents, stack);
142
+ const ltrAction = this.actionLTR(stack);
143
+ const ltrSubscriptions = this.subscribeToEvents(stack, leftTuples, ltrAction);
144
+ return rtlSubscriptions.concat(ltrSubscriptions);
145
+ }
146
+ };
147
+ return TwoWayAssignmentExpression = _classThis_1;
148
+ })();
136
149
  //# sourceMappingURL=binding.expressions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binding.expressions.js","sourceRoot":"","sources":["../../../src/core/binding/binding.expressions.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tExpressionNode, InfixExpressionNode, ScopeSubscription,\n\tStack, findReactiveScopeByEventMap, ReactiveScope,\n\tContext, ValueChangedCallback, Scope,\n\tMemberExpression, Identifier, Deserializer,\n\tVisitNodeType, NodeDeserializer\n} from '@ibyar/expressions';\nimport { createSubscriptionDestroyer } from '../context/subscription.js';\nimport { isOnDestroy } from '../component/lifecycle.js';\nimport { AsyncPipeProvider, AsyncPipeScope, PipeProvider } from '../pipe/pipe.js';\n\ntype OneWayOperator = '=:';\ntype TwoWayOperator = '=::';\ntype BindingOperators = OneWayOperator | TwoWayOperator;\n\nexport interface BindingAssignment extends InfixExpressionNode<BindingOperators> {\n\tsubscribe(stack: Stack, pipelineNames?: string[]): ScopeSubscription<Context>[];\n}\n\n\n@Deserializer('OneWayAssignment')\nexport class OneWayAssignmentExpression extends InfixExpressionNode<OneWayOperator> implements BindingAssignment {\n\tstatic fromJSON(node: OneWayAssignmentExpression, deserializer: NodeDeserializer): OneWayAssignmentExpression {\n\t\treturn new OneWayAssignmentExpression(\n\t\t\tdeserializer(node.left) as MemberExpression,\n\t\t\tdeserializer(node.right)\n\t\t);\n\t}\n\tstatic visit(node: OneWayAssignmentExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t}\n\n\tdeclare protected left: MemberExpression;\n\tprivate rightEvents = this.right.events();\n\tconstructor(left: MemberExpression, right: ExpressionNode) {\n\t\tsuper('=:', left, right);\n\t}\n\tset(stack: Stack, value: any) {\n\t\treturn this.left.set(stack, value);\n\t}\n\tget(stack: Stack): any {\n\t\tconst rv = this.right.get(stack);\n\t\tthis.set(stack, rv);\n\t\treturn rv;\n\t}\n\tsubscribe(stack: Stack, pipelineNames?: string[]): ScopeSubscription<Context>[] {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\t\tif (pipelineNames?.length) {\n\t\t\tconst syncPipeScope = Scope.blockScope();\n\t\t\tconst asyncPipeScope = AsyncPipeScope.blockScope();\n\t\t\tlet hasAsync = false, hasSync = false;\n\t\t\tpipelineNames.forEach(pipelineName => {\n\t\t\t\tconst scope = stack.findScope(pipelineName);\n\t\t\t\tconst pipe = scope.get(pipelineName)!;\n\t\t\t\tif (scope instanceof AsyncPipeProvider) {\n\t\t\t\t\thasAsync = true;\n\t\t\t\t\tasyncPipeScope.set(pipelineName, pipe);\n\t\t\t\t\tif (isOnDestroy(pipe.prototype)) {\n\t\t\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => asyncPipeScope.unsubscribe(pipelineName)));\n\t\t\t\t\t}\n\t\t\t\t} else if (scope instanceof PipeProvider) {\n\t\t\t\t\thasSync = true;\n\t\t\t\t\tsyncPipeScope.set(pipelineName, pipe);\n\t\t\t\t}\n\t\t\t});\n\t\t\thasSync && stack.pushScope(syncPipeScope);\n\t\t\thasAsync && stack.pushScope(asyncPipeScope);\n\t\t}\n\t\tconst tuples = findReactiveScopeByEventMap(this.rightEvents, stack);\n\t\tconst callback: ValueChangedCallback = () => this.get(stack);\n\t\ttuples.forEach(tuple => {\n\t\t\tconst subscription = tuple[1].subscribe(tuple[0], callback);\n\t\t\tsubscriptions.push(subscription);\n\t\t});\n\t\treturn subscriptions;\n\t}\n}\n\n\n/**\n * the default behavior is assign the right hand side to the left hand side.\n * \n * \n */\n@Deserializer('TwoWayAssignment')\nexport class TwoWayAssignmentExpression extends InfixExpressionNode<TwoWayOperator> implements BindingAssignment {\n\tstatic fromJSON(node: TwoWayAssignmentExpression, deserializer: NodeDeserializer): TwoWayAssignmentExpression {\n\t\treturn new TwoWayAssignmentExpression(\n\t\t\tdeserializer(node.left) as MemberExpression,\n\t\t\tdeserializer(node.right) as MemberExpression | Identifier\n\t\t);\n\t}\n\tstatic visit(node: TwoWayAssignmentExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t}\n\n\tdeclare protected left: MemberExpression;\n\tdeclare protected right: MemberExpression | Identifier;\n\n\tprivate rightEvents = this.right.events();\n\tprivate leftEvents = this.left.events();\n\tconstructor(left: MemberExpression, right: MemberExpression | Identifier) {\n\t\tsuper('=::', left, right);\n\t}\n\n\tset(stack: Stack, value: any) {\n\t\treturn this.setRTL(stack, value);\n\t}\n\tget(stack: Stack): any {\n\t\treturn this.getRTL(stack);\n\t}\n\n\tprivate setRTL(stack: Stack, value: any) {\n\t\treturn this.left.set(stack, value);\n\t}\n\tprivate getRTL(stack: Stack): any {\n\t\tconst rv = this.right.get(stack);\n\t\tthis.setRTL(stack, rv);\n\t\treturn rv;\n\t}\n\tprivate actionRTL(stack: Stack): ValueChangedCallback {\n\t\treturn () => this.getRTL(stack);\n\t}\n\n\tprivate setLTR(stack: Stack, value: any) {\n\t\treturn this.right.set(stack, value);\n\t}\n\tprivate getLTR(stack: Stack): any {\n\t\tconst lv = this.left.get(stack);\n\t\tthis.setLTR(stack, lv);\n\t\treturn lv;\n\t}\n\tprivate actionLTR(stack: Stack): ValueChangedCallback {\n\t\treturn () => this.getLTR(stack);\n\t}\n\n\tprivate subscribeToEvents(stack: Stack, tuples: [string, ReactiveScope<Context>][], actionCallback: ValueChangedCallback) {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\t\ttuples.forEach(tuple => {\n\t\t\tconst subscription = tuple[1].subscribe(tuple[0], actionCallback);\n\t\t\tsubscriptions.push(subscription);\n\t\t});\n\t\treturn subscriptions;\n\t}\n\n\tsubscribe(stack: Stack): ScopeSubscription<Context>[] {\n\n\t\t// right to left\n\t\tconst rightTuples = findReactiveScopeByEventMap(this.rightEvents, stack);\n\t\tconst rtlAction = this.actionRTL(stack);\n\t\tconst rtlSubscriptions = this.subscribeToEvents(stack, rightTuples, rtlAction);\n\n\t\t// left to right \n\t\tconst leftTuples = findReactiveScopeByEventMap(this.leftEvents, stack);\n\t\tconst ltrAction = this.actionLTR(stack);\n\t\tconst ltrSubscriptions = this.subscribeToEvents(stack, leftTuples, ltrAction);\n\n\t\treturn rtlSubscriptions.concat(ltrSubscriptions);\n\t}\n\n}\n"]}
1
+ {"version":3,"file":"binding.expressions.js","sourceRoot":"","sources":["../../../src/core/binding/binding.expressions.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tExpressionNode, InfixExpressionNode, ScopeSubscription,\n\tStack, findReactiveScopeByEventMap, ReactiveScope,\n\tContext, ValueChangedCallback, Scope,\n\tMemberExpression, Identifier, Deserializer,\n\tVisitNodeType, NodeDeserializer\n} from '@ibyar/expressions';\nimport { createSubscriptionDestroyer } from '../context/subscription.js';\nimport { isOnDestroy } from '../component/lifecycle.js';\nimport { AsyncPipeProvider, AsyncPipeScope, PipeProvider } from '../pipe/pipe.js';\n\ntype OneWayOperator = '=:';\ntype TwoWayOperator = '=::';\ntype BindingOperators = OneWayOperator | TwoWayOperator;\n\nexport interface BindingAssignment extends InfixExpressionNode<BindingOperators> {\n\tsubscribe(stack: Stack, pipelineNames?: string[]): ScopeSubscription<Context>[];\n}\n\n\n@Deserializer('OneWayAssignment')\nexport class OneWayAssignmentExpression extends InfixExpressionNode<OneWayOperator> implements BindingAssignment {\n\tstatic fromJSON(node: OneWayAssignmentExpression, deserializer: NodeDeserializer): OneWayAssignmentExpression {\n\t\treturn new OneWayAssignmentExpression(\n\t\t\tdeserializer(node.left) as MemberExpression,\n\t\t\tdeserializer(node.right)\n\t\t);\n\t}\n\tstatic visit(node: OneWayAssignmentExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t}\n\n\tdeclare protected left: MemberExpression;\n\tprivate rightEvents = this.right.events();\n\tconstructor(left: MemberExpression, right: ExpressionNode) {\n\t\tsuper('=:', left, right);\n\t}\n\tset(stack: Stack, value: any) {\n\t\treturn this.left.set(stack, value);\n\t}\n\tget(stack: Stack): any {\n\t\tconst rv = this.right.get(stack);\n\t\tthis.set(stack, rv);\n\t\treturn rv;\n\t}\n\tsubscribe(stack: Stack, pipelineNames?: string[]): ScopeSubscription<Context>[] {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\t\tif (pipelineNames?.length) {\n\t\t\tconst syncPipeScope = Scope.blockScope();\n\t\t\tconst asyncPipeScope = AsyncPipeScope.blockScope();\n\t\t\tlet hasAsync = false, hasSync = false;\n\t\t\tpipelineNames.forEach(pipelineName => {\n\t\t\t\tconst scope = stack.findScope(pipelineName);\n\t\t\t\tconst pipe = scope.get(pipelineName)!;\n\t\t\t\tif (scope instanceof AsyncPipeProvider) {\n\t\t\t\t\thasAsync = true;\n\t\t\t\t\tasyncPipeScope.set(pipelineName, pipe);\n\t\t\t\t\tif (isOnDestroy(pipe.prototype)) {\n\t\t\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => asyncPipeScope.unsubscribe(pipelineName)));\n\t\t\t\t\t}\n\t\t\t\t} else if (scope instanceof PipeProvider) {\n\t\t\t\t\thasSync = true;\n\t\t\t\t\tsyncPipeScope.set(pipelineName, pipe);\n\t\t\t\t}\n\t\t\t});\n\t\t\thasSync && stack.pushScope(syncPipeScope);\n\t\t\thasAsync && stack.pushScope(asyncPipeScope);\n\t\t}\n\t\tconst tuples = findReactiveScopeByEventMap(this.rightEvents, stack);\n\t\tconst callback: ValueChangedCallback = () => this.get(stack);\n\t\ttuples.forEach(tuple => {\n\t\t\tconst subscription = tuple[1].subscribe(tuple[0], callback);\n\t\t\tsubscriptions.push(subscription);\n\t\t});\n\t\treturn subscriptions;\n\t}\n}\n\n\n/**\n * the default behavior is assign the right hand side to the left hand side.\n * \n * \n */\n@Deserializer('TwoWayAssignment')\nexport class TwoWayAssignmentExpression extends InfixExpressionNode<TwoWayOperator> implements BindingAssignment {\n\tstatic fromJSON(node: TwoWayAssignmentExpression, deserializer: NodeDeserializer): TwoWayAssignmentExpression {\n\t\treturn new TwoWayAssignmentExpression(\n\t\t\tdeserializer(node.left) as MemberExpression,\n\t\t\tdeserializer(node.right) as MemberExpression | Identifier\n\t\t);\n\t}\n\tstatic visit(node: TwoWayAssignmentExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t}\n\n\tdeclare protected left: MemberExpression;\n\tdeclare protected right: MemberExpression | Identifier;\n\n\tprivate rightEvents = this.right.events();\n\tprivate leftEvents = this.left.events();\n\tconstructor(left: MemberExpression, right: MemberExpression | Identifier) {\n\t\tsuper('=::', left, right);\n\t}\n\n\tset(stack: Stack, value: any) {\n\t\treturn this.setRTL(stack, value);\n\t}\n\tget(stack: Stack): any {\n\t\treturn this.getRTL(stack);\n\t}\n\n\tprivate setRTL(stack: Stack, value: any) {\n\t\treturn this.left.set(stack, value);\n\t}\n\tprivate getRTL(stack: Stack): any {\n\t\tconst rv = this.right.get(stack);\n\t\tthis.setRTL(stack, rv);\n\t\treturn rv;\n\t}\n\tprivate actionRTL(stack: Stack): ValueChangedCallback {\n\t\treturn () => this.getRTL(stack);\n\t}\n\n\tprivate setLTR(stack: Stack, value: any) {\n\t\treturn this.right.set(stack, value);\n\t}\n\tprivate getLTR(stack: Stack): any {\n\t\tconst lv = this.left.get(stack);\n\t\tthis.setLTR(stack, lv);\n\t\treturn lv;\n\t}\n\tprivate actionLTR(stack: Stack): ValueChangedCallback {\n\t\treturn () => this.getLTR(stack);\n\t}\n\n\tprivate subscribeToEvents(stack: Stack, tuples: [string, ReactiveScope<Context>][], actionCallback: ValueChangedCallback) {\n\t\tconst subscriptions: ScopeSubscription<Context>[] = [];\n\t\ttuples.forEach(tuple => {\n\t\t\tconst subscription = tuple[1].subscribe(tuple[0], actionCallback);\n\t\t\tsubscriptions.push(subscription);\n\t\t});\n\t\treturn subscriptions;\n\t}\n\n\tsubscribe(stack: Stack): ScopeSubscription<Context>[] {\n\n\t\t// right to left\n\t\tconst rightTuples = findReactiveScopeByEventMap(this.rightEvents, stack);\n\t\tconst rtlAction = this.actionRTL(stack);\n\t\tconst rtlSubscriptions = this.subscribeToEvents(stack, rightTuples, rtlAction);\n\n\t\t// left to right \n\t\tconst leftTuples = findReactiveScopeByEventMap(this.leftEvents, stack);\n\t\tconst ltrAction = this.actionLTR(stack);\n\t\tconst ltrSubscriptions = this.subscribeToEvents(stack, leftTuples, ltrAction);\n\n\t\treturn rtlSubscriptions.concat(ltrSubscriptions);\n\t}\n\n}\n"]}
@@ -1,9 +1,10 @@
1
- import type { TypeOf } from '../utils/typeof.js';
1
+ import type { MetadataClass, MetadataContext } from '@ibyar/decorators';
2
+ import type { Class, TypeOf } from '../utils/typeof.js';
2
3
  import type { ZoneType } from '../zone/bootstrap.js';
3
4
  import { Tag, DomNode, DomRenderNode, DomElementNode } from '@ibyar/elements';
4
5
  import { HTMLComponent, ValueControl } from './custom-element.js';
5
6
  import { AttributeDirective, StructuralDirective } from '../directive/directive.js';
6
- import { ComponentOptions, PipeOptions, ServiceOptions, DirectiveOptions } from '../annotation/decorators.js';
7
+ import { ComponentOptions, PipeOptions, ServiceOptions, DirectiveOptions } from '../annotation/options.js';
7
8
  import { ChildRef, HostBindingRef, InputPropertyRef, ListenerRef, OutputPropertyRef, PropertyRef } from './reflect.js';
8
9
  export interface ServiceRef<T> {
9
10
  provideIn: TypeOf<CustomElementConstructor> | 'root' | 'platform' | 'any';
@@ -34,7 +35,7 @@ export interface ComponentRef<T> {
34
35
  compiledTemplate?: DomNode;
35
36
  styles: string;
36
37
  extend: Tag;
37
- viewClass: TypeOf<HTMLComponent<T>> & CustomElementConstructor;
38
+ viewClass: MetadataClass<HTMLComponent<T>> & CustomElementConstructor;
38
39
  modelClass: TypeOf<T>;
39
40
  inputs: InputPropertyRef[];
40
41
  outputs: OutputPropertyRef[];
@@ -44,22 +45,25 @@ export interface ComponentRef<T> {
44
45
  hostBindings: HostBindingRef[];
45
46
  hostListeners: ListenerRef[];
46
47
  viewBindings?: DomElementNode;
47
- encapsulation: 'custom' | 'shadow-dom' | 'template' | 'shadow-dom-template';
48
+ windowBindings?: DomElementNode;
49
+ encapsulation: 'custom' | 'shadow-dom' | 'template' | 'shadow-dom-template' | 'shadow-slot';
48
50
  isShadowDom: boolean;
49
- shadowDomMode: ShadowRootMode;
50
- shadowDomDelegatesFocus: boolean;
51
+ shadowRootInit: ShadowRootInit;
51
52
  formAssociated: boolean | TypeOf<ValueControl<any>>;
52
53
  zone?: ZoneType;
53
54
  }
54
55
  export declare class Components {
55
56
  private static EMPTY_LIST;
56
57
  private static emptyList;
57
- private static parseHostBinding;
58
- static defineDirective(modelClass: Function, opts: DirectiveOptions): void;
59
- static definePipe(modelClass: Function, opts: PipeOptions): void;
60
- static defineService(modelClass: Function, opts: ServiceOptions): void;
61
- static defineComponent<T extends Object>(modelClass: TypeOf<T>, opts: ComponentOptions<T>): void;
62
- static defineView<T extends HTMLElement>(viewClass: TypeOf<T>, opt: {
58
+ private static patchTemplate;
59
+ private static createOutputs;
60
+ private static parseHostNode;
61
+ static defineDirective(modelClass: MetadataClass, opts: DirectiveOptions, metadata: MetadataContext): void;
62
+ static definePipe<T extends Class>(modelClass: MetadataClass<T>, opts: PipeOptions, metadata: MetadataContext): void;
63
+ static defineService<T extends Class>(modelClass: MetadataClass<T>, opts: ServiceOptions, metadata: MetadataContext): void;
64
+ static defineComponent<T extends Class>(modelClass: MetadataClass<T>, opts: ComponentOptions<T>, metadata: MetadataContext): void;
65
+ static defineView<T extends HTMLElement>(viewClass: MetadataClass<T>, opt: {
63
66
  selector: string;
64
67
  } & ElementDefinitionOptions): void;
65
68
  }
69
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/core/component/component.ts"],"names":[],"mappings":"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"}
@@ -1,65 +1,110 @@
1
- import { findByTagName, htmlParser, templateParser, canAttachShadow, directiveRegistry } from '@ibyar/elements';
1
+ import { findByTagName, htmlParser, templateParser, canAttachShadow, directiveRegistry, DomElementNode, DomFragmentNode, DomParentNode } from '@ibyar/elements';
2
2
  import { ClassRegistryProvider } from '../providers/provider.js';
3
3
  import { initCustomElementView } from '../view/view.js';
4
4
  import { buildExpressionNodes } from '../html/expression.js';
5
- import { ReflectComponents } from './reflect.js';
5
+ import { ListenerRef } from './reflect.js';
6
6
  import { deserializeExpressionNodes } from '../html/deserialize.js';
7
- export class Components {
7
+ const DEFAULT_SHADOW_ROOT_INIT = { mode: 'open', delegatesFocus: false, slotAssignment: 'named' };
8
+ class Components {
9
+ static EMPTY_LIST = Object.freeze([]);
8
10
  static emptyList() {
9
11
  return Components.EMPTY_LIST;
10
12
  }
11
- static parseHostBinding(option) {
13
+ static patchTemplate(child, templates) {
14
+ if (child instanceof DomElementNode && child.templateRefName?.name) {
15
+ const ref = templates.find(node => child.templateRefName?.name === node.templateRefName?.name);
16
+ if (ref?.outputs) {
17
+ (child.outputs ??= []).push(...ref.outputs);
18
+ }
19
+ }
20
+ if (child instanceof DomParentNode) {
21
+ child.children?.forEach(node => Components.patchTemplate(node, templates));
22
+ }
23
+ }
24
+ static createOutputs(Listeners) {
25
+ return Listeners?.map(listener => `(${listener.eventName})="${listener.modelCallbackName}(${listener.args.join(', ')})"`).join(' ') ?? '';
26
+ }
27
+ static parseHostNode(option) {
12
28
  const inputs = option.hostBindings?.map(binding => {
13
29
  const descriptor = Object.getOwnPropertyDescriptor(option.prototype, binding.modelPropertyName);
14
30
  if (typeof descriptor?.value === 'function') {
15
31
  return `[${binding.hostPropertyName}]="${binding.modelPropertyName}()"`;
16
32
  }
17
33
  return `[${binding.hostPropertyName}]="${binding.modelPropertyName}"`;
18
- }) ?? [];
19
- const outputs = option.hostListeners?.map(listener => `(${listener.eventName})="${listener.modelCallbackName}(${listener.args.join(', ')})"`) ?? [];
20
- option.selector ?? (option.selector = 'div');
21
- const template = `<${option.selector} ${inputs.join(' ')} ${outputs.join(' ')}></${option.selector}>`;
22
- const viewBindings = htmlParser.toDomRootNode(template);
23
- buildExpressionNodes(viewBindings);
24
- return viewBindings;
34
+ }).join(' ') ?? '';
35
+ const hostListeners = [];
36
+ const windowListeners = [];
37
+ const templateListeners = {};
38
+ option.hostListeners?.forEach(listener => {
39
+ const [host, event] = listener.eventName.split(':', 2);
40
+ if (event === undefined) {
41
+ hostListeners.push(listener);
42
+ }
43
+ else if ('window' === host.toLowerCase()) {
44
+ windowListeners.push(new ListenerRef(event, listener.args, listener.modelCallbackName));
45
+ }
46
+ else {
47
+ (templateListeners[host] ??= []).push(new ListenerRef(event, listener.args, listener.modelCallbackName));
48
+ }
49
+ });
50
+ const result = {};
51
+ if (hostListeners.length) {
52
+ const hostOutputs = Components.createOutputs(hostListeners);
53
+ const selector = option.selector ?? 'div';
54
+ const hostTemplate = `<${selector} ${inputs} ${hostOutputs}></${selector}>`;
55
+ result.host = htmlParser.toDomRootNode(hostTemplate);
56
+ buildExpressionNodes(result.host);
57
+ }
58
+ if (windowListeners.length) {
59
+ const windowOutputs = Components.createOutputs(windowListeners);
60
+ const windowTemplate = `<window ${windowOutputs}></window>`;
61
+ result.window = htmlParser.toDomRootNode(windowTemplate);
62
+ buildExpressionNodes(result.window);
63
+ }
64
+ const templateHosts = Object.keys(templateListeners);
65
+ if (templateHosts.length) {
66
+ const template = templateHosts.map(host => {
67
+ const hostOutputs = Components.createOutputs(templateListeners[host]);
68
+ return `<template #${host} ${hostOutputs}></template>`;
69
+ }).join('');
70
+ const templateNodes = htmlParser.toDomRootNode(template);
71
+ buildExpressionNodes(templateNodes);
72
+ result.template = templateNodes instanceof DomFragmentNode
73
+ ? templateNodes.children?.filter(child => child instanceof DomElementNode) ?? []
74
+ : [templateNodes];
75
+ }
76
+ return result;
25
77
  }
26
- static defineDirective(modelClass, opts) {
27
- const bootstrap = ReflectComponents.getOrCreateBootstrap(modelClass.prototype);
28
- Object.assign(bootstrap, opts);
29
- if (bootstrap.hostListeners?.length || bootstrap.hostBindings?.length) {
30
- bootstrap.viewBindings = Components.parseHostBinding({
78
+ static defineDirective(modelClass, opts, metadata) {
79
+ Object.assign(metadata, opts);
80
+ if (metadata.hostListeners?.length || metadata.hostBindings?.length) {
81
+ const hostNode = Components.parseHostNode({
31
82
  prototype: modelClass.prototype,
32
- hostBindings: bootstrap.hostBindings,
33
- hostListeners: bootstrap.hostListeners,
83
+ hostBindings: metadata.hostBindings,
84
+ hostListeners: metadata.hostListeners,
34
85
  });
86
+ metadata.viewBindings = hostNode.host;
35
87
  }
36
- bootstrap.modelClass = modelClass;
88
+ metadata.modelClass = modelClass;
37
89
  ClassRegistryProvider.registerDirective(modelClass);
38
90
  directiveRegistry.register(opts.selector, {
39
- inputs: bootstrap.inputs?.map(input => input.viewAttribute),
40
- outputs: bootstrap.outputs?.map(output => output.viewAttribute),
91
+ inputs: metadata.inputs?.map(input => input.viewAttribute),
92
+ outputs: metadata.outputs?.map(output => output.viewAttribute),
41
93
  });
42
94
  }
43
- static definePipe(modelClass, opts) {
44
- const bootstrap = ReflectComponents.getOrCreateBootstrap(modelClass.prototype);
45
- for (const key in opts) {
46
- bootstrap[key] = Reflect.get(opts, key);
47
- }
48
- bootstrap.modelClass = modelClass;
95
+ static definePipe(modelClass, opts, metadata) {
96
+ Object.assign(metadata, opts);
97
+ metadata.modelClass = modelClass;
49
98
  ClassRegistryProvider.registerPipe(modelClass);
50
99
  }
51
- static defineService(modelClass, opts) {
52
- const bootstrap = ReflectComponents.getOrCreateBootstrap(modelClass.prototype);
53
- for (const key in opts) {
54
- bootstrap[key] = Reflect.get(opts, key);
55
- }
56
- bootstrap.modelClass = modelClass;
57
- bootstrap.name = modelClass.name;
100
+ static defineService(modelClass, opts, metadata) {
101
+ Object.assign(metadata, opts);
102
+ metadata.modelClass = modelClass;
103
+ metadata.name = modelClass.name;
58
104
  ClassRegistryProvider.registerService(modelClass);
59
105
  }
60
- static defineComponent(modelClass, opts) {
61
- const bootstrap = ReflectComponents.getOrCreateBootstrap(modelClass.prototype);
62
- const componentRef = Object.assign({}, opts, bootstrap);
106
+ static defineComponent(modelClass, opts, metadata) {
107
+ const componentRef = Object.assign(metadata, opts);
63
108
  componentRef.extend = findByTagName(opts.extend);
64
109
  if (typeof componentRef.template === 'string') {
65
110
  if (componentRef.styles) {
@@ -90,23 +135,39 @@ export class Components {
90
135
  // didn't find this template in 'index.html' document
91
136
  }
92
137
  }
93
- componentRef.inputs || (componentRef.inputs = Components.emptyList());
94
- componentRef.outputs || (componentRef.outputs = Components.emptyList());
95
- componentRef.viewChild || (componentRef.viewChild = Components.emptyList());
96
- componentRef.ViewChildren || (componentRef.ViewChildren = Components.emptyList());
97
- componentRef.hostBindings || (componentRef.hostBindings = Components.emptyList());
98
- componentRef.hostListeners || (componentRef.hostListeners = Components.emptyList());
99
- componentRef.encapsulation || (componentRef.encapsulation = 'custom');
100
- componentRef.isShadowDom = /shadow-dom/g.test(componentRef.encapsulation);
101
- componentRef.shadowDomMode || (componentRef.shadowDomMode = 'open');
102
- componentRef.shadowDomDelegatesFocus = componentRef.shadowDomDelegatesFocus === true || false;
138
+ componentRef.inputs ||= Components.emptyList();
139
+ componentRef.outputs ||= Components.emptyList();
140
+ componentRef.viewChild ||= Components.emptyList();
141
+ componentRef.ViewChildren ||= Components.emptyList();
142
+ componentRef.hostBindings ||= Components.emptyList();
143
+ componentRef.hostListeners ||= Components.emptyList();
144
+ componentRef.encapsulation ||= 'custom';
145
+ componentRef.isShadowDom = /shadow/g.test(componentRef.encapsulation);
146
+ if (componentRef.isShadowDom) {
147
+ componentRef.shadowRootInit = Object.assign({}, DEFAULT_SHADOW_ROOT_INIT, (componentRef.shadowRootInit ?? {}));
148
+ }
103
149
  if (componentRef.hostListeners.length || componentRef.hostBindings.length) {
104
- componentRef.viewBindings = Components.parseHostBinding({
150
+ const hostNode = Components.parseHostNode({
105
151
  prototype: modelClass.prototype,
106
152
  selector: componentRef.selector,
107
153
  hostBindings: componentRef.hostBindings,
108
154
  hostListeners: componentRef.hostListeners,
109
155
  });
156
+ componentRef.viewBindings = hostNode.host;
157
+ componentRef.windowBindings = hostNode.window;
158
+ if (typeof componentRef.template === 'function') {
159
+ const creator = componentRef.template;
160
+ componentRef.template = (model) => {
161
+ const template = creator(model);
162
+ if (hostNode.template) {
163
+ Components.patchTemplate(template, hostNode.template);
164
+ }
165
+ return template;
166
+ };
167
+ }
168
+ else if (hostNode.template) {
169
+ Components.patchTemplate(componentRef.template, hostNode.template);
170
+ }
110
171
  }
111
172
  if (!(componentRef.formAssociated === true || typeof componentRef.formAssociated === 'function')) {
112
173
  componentRef.formAssociated = false;
@@ -116,10 +177,8 @@ export class Components {
116
177
  }
117
178
  componentRef.modelClass = modelClass;
118
179
  componentRef.viewClass = initCustomElementView(modelClass, componentRef);
119
- ReflectComponents.setComponentRef(componentRef.modelClass, componentRef);
120
- ReflectComponents.setComponentRef(componentRef.viewClass, componentRef);
121
180
  ClassRegistryProvider.registerComponent(modelClass);
122
- ClassRegistryProvider.registerView(bootstrap.viewClass);
181
+ ClassRegistryProvider.registerView(componentRef.viewClass);
123
182
  const options = {};
124
183
  const parentTagName = componentRef.extend?.name;
125
184
  if (parentTagName) {
@@ -134,5 +193,5 @@ export class Components {
134
193
  customElements.define(opt.selector, viewClass, Object.assign({}, opt, { selector: undefined }));
135
194
  }
136
195
  }
137
- Components.EMPTY_LIST = Object.freeze([]);
196
+ export { Components };
138
197
  //# sourceMappingURL=component.js.map