@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.
- package/annotation/context.d.ts +41 -0
- package/annotation/context.d.ts.map +1 -0
- package/annotation/context.js +79 -0
- package/annotation/context.js.map +1 -0
- package/annotation/decorators.d.ts +20 -285
- package/annotation/decorators.d.ts.map +1 -0
- package/annotation/decorators.js +92 -84
- package/annotation/decorators.js.map +1 -1
- package/annotation/options.d.ts +275 -0
- package/annotation/options.d.ts.map +1 -0
- package/annotation/options.js +2 -0
- package/annotation/options.js.map +1 -0
- package/binding/binding.expressions.d.ts +1 -0
- package/binding/binding.expressions.d.ts.map +1 -0
- package/binding/binding.expressions.js +138 -125
- package/binding/binding.expressions.js.map +1 -1
- package/component/component.d.ts +16 -12
- package/component/component.d.ts.map +1 -0
- package/component/component.js +111 -52
- package/component/component.js.map +1 -1
- package/component/custom-element.d.ts +1 -0
- package/component/custom-element.d.ts.map +1 -0
- package/component/events.d.ts +1 -0
- package/component/events.d.ts.map +1 -0
- package/component/events.js +4 -3
- package/component/events.js.map +1 -1
- package/component/lifecycle.d.ts +1 -0
- package/component/lifecycle.d.ts.map +1 -0
- package/component/reflect.d.ts +12 -15
- package/component/reflect.d.ts.map +1 -0
- package/component/reflect.js +27 -47
- package/component/reflect.js.map +1 -1
- package/context/stack.d.ts +1 -0
- package/context/stack.d.ts.map +1 -0
- package/context/subscription.d.ts +1 -0
- package/context/subscription.d.ts.map +1 -0
- package/directive/directive.d.ts +1 -0
- package/directive/directive.d.ts.map +1 -0
- package/directive/directive.js +8 -0
- package/directive/directive.js.map +1 -1
- package/directive/parser.d.ts +1 -0
- package/directive/parser.d.ts.map +1 -0
- package/directive/parser.js +9 -7
- package/directive/parser.js.map +1 -1
- package/directive/providers.d.ts +1 -0
- package/directive/providers.d.ts.map +1 -0
- package/directive/providers.js +2 -1
- package/directive/providers.js.map +1 -1
- package/html/deserialize.d.ts +1 -0
- package/html/deserialize.d.ts.map +1 -0
- package/html/expression.d.ts +1 -0
- package/html/expression.d.ts.map +1 -0
- package/html/expression.js +2 -2
- package/html/expression.js.map +1 -1
- package/html/types.d.ts +1 -0
- package/html/types.d.ts.map +1 -0
- package/index.d.ts +2 -2
- package/index.d.ts.map +1 -0
- package/index.js +1 -2
- package/index.js.map +1 -1
- package/linker/change-detector-ref.d.ts +1 -0
- package/linker/change-detector-ref.d.ts.map +1 -0
- package/linker/template-ref.d.ts +1 -0
- package/linker/template-ref.d.ts.map +1 -0
- package/linker/template-ref.js +5 -0
- package/linker/template-ref.js.map +1 -1
- package/linker/view-container-ref.d.ts +4 -2
- package/linker/view-container-ref.d.ts.map +1 -0
- package/linker/view-container-ref.js +8 -7
- package/linker/view-container-ref.js.map +1 -1
- package/linker/view-ref.d.ts +1 -0
- package/linker/view-ref.d.ts.map +1 -0
- package/linker/view-ref.js +5 -2
- package/linker/view-ref.js.map +1 -1
- package/node.d.ts +1 -0
- package/node.d.ts.map +1 -0
- package/package.json +7 -8
- package/pipe/pipe.d.ts +1 -0
- package/pipe/pipe.d.ts.map +1 -0
- package/pipe/pipe.js +2 -1
- package/pipe/pipe.js.map +1 -1
- package/providers/provider.d.ts +15 -13
- package/providers/provider.d.ts.map +1 -0
- package/providers/provider.js +13 -16
- package/providers/provider.js.map +1 -1
- package/utils/elements-util.d.ts +1 -0
- package/utils/elements-util.d.ts.map +1 -0
- package/utils/path.d.ts +1 -0
- package/utils/path.d.ts.map +1 -0
- package/utils/typeof.d.ts +3 -0
- package/utils/typeof.d.ts.map +1 -0
- package/utils/typeof.js.map +1 -1
- package/utils/utils.d.ts +1 -0
- package/utils/utils.d.ts.map +1 -0
- package/view/base-view.d.ts +1 -0
- package/view/base-view.d.ts.map +1 -0
- package/view/base-view.js +34 -16
- package/view/base-view.js.map +1 -1
- package/view/form-view.d.ts +1 -0
- package/view/form-view.d.ts.map +1 -0
- package/view/form-view.js +70 -67
- package/view/form-view.js.map +1 -1
- package/view/mutation.d.ts +1 -0
- package/view/mutation.d.ts.map +1 -0
- package/view/mutation.js +37 -36
- package/view/mutation.js.map +1 -1
- package/view/render.d.ts +2 -2
- package/view/render.d.ts.map +1 -0
- package/view/render.js +21 -21
- package/view/render.js.map +1 -1
- package/view/utils.d.ts +4 -3
- package/view/utils.d.ts.map +1 -0
- package/view/utils.js.map +1 -1
- package/view/view.d.ts +5 -4
- package/view/view.d.ts.map +1 -0
- package/view/view.js +19 -3
- package/view/view.js.map +1 -1
- package/zone/bootstrap.d.ts +1 -0
- package/zone/bootstrap.d.ts.map +1 -0
- package/zone/proxy.d.ts +1 -0
- package/zone/proxy.d.ts.map +1 -0
- package/zone/proxy.js +1 -0
- package/zone/proxy.js.map +1 -1
- package/zone/task.d.ts +1 -0
- package/zone/task.d.ts.map +1 -0
- package/zone/task.js +11 -3
- package/zone/task.js.map +1 -1
- package/zone/zone.d.ts +1 -0
- package/zone/zone.d.ts.map +1 -0
- package/zone/zone.js +8 -6
- package/zone/zone.js.map +1 -1
- package/providers/injector.d.ts +0 -10
- package/providers/injector.js +0 -27
- package/providers/injector.js.map +0 -1
|
@@ -1,136 +1,149 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
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 =
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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 =
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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"]}
|
package/component/component.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type {
|
|
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/
|
|
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:
|
|
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
|
-
|
|
48
|
+
windowBindings?: DomElementNode;
|
|
49
|
+
encapsulation: 'custom' | 'shadow-dom' | 'template' | 'shadow-dom-template' | 'shadow-slot';
|
|
48
50
|
isShadowDom: boolean;
|
|
49
|
-
|
|
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
|
|
58
|
-
static
|
|
59
|
-
static
|
|
60
|
-
static
|
|
61
|
-
static
|
|
62
|
-
static
|
|
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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"}
|
package/component/component.js
CHANGED
|
@@ -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 {
|
|
5
|
+
import { ListenerRef } from './reflect.js';
|
|
6
6
|
import { deserializeExpressionNodes } from '../html/deserialize.js';
|
|
7
|
-
|
|
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
|
|
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
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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:
|
|
33
|
-
hostListeners:
|
|
83
|
+
hostBindings: metadata.hostBindings,
|
|
84
|
+
hostListeners: metadata.hostListeners,
|
|
34
85
|
});
|
|
86
|
+
metadata.viewBindings = hostNode.host;
|
|
35
87
|
}
|
|
36
|
-
|
|
88
|
+
metadata.modelClass = modelClass;
|
|
37
89
|
ClassRegistryProvider.registerDirective(modelClass);
|
|
38
90
|
directiveRegistry.register(opts.selector, {
|
|
39
|
-
inputs:
|
|
40
|
-
outputs:
|
|
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
|
-
|
|
45
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
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
|
|
94
|
-
componentRef.outputs
|
|
95
|
-
componentRef.viewChild
|
|
96
|
-
componentRef.ViewChildren
|
|
97
|
-
componentRef.hostBindings
|
|
98
|
-
componentRef.hostListeners
|
|
99
|
-
componentRef.encapsulation
|
|
100
|
-
componentRef.isShadowDom = /shadow
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
196
|
+
export { Components };
|
|
138
197
|
//# sourceMappingURL=component.js.map
|