@ibyar/core 2.4.0 → 3.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 (123) hide show
  1. package/annotation/decorators.d.ts +4 -11
  2. package/annotation/decorators.d.ts.map +1 -1
  3. package/annotation/decorators.js +2 -71
  4. package/annotation/decorators.js.map +1 -1
  5. package/annotation/options.d.ts +16 -11
  6. package/annotation/options.d.ts.map +1 -1
  7. package/annotation/options.js.map +1 -1
  8. package/binding/binding.expressions copy.d.ts +43 -0
  9. package/binding/binding.expressions copy.d.ts.map +1 -0
  10. package/binding/binding.expressions copy.js +161 -0
  11. package/binding/binding.expressions copy.js.map +1 -0
  12. package/binding/signal.expressions.d.ts +50 -0
  13. package/binding/signal.expressions.d.ts.map +1 -0
  14. package/binding/signal.expressions.js +182 -0
  15. package/binding/signal.expressions.js.map +1 -0
  16. package/component/component.d.ts +15 -11
  17. package/component/component.d.ts.map +1 -1
  18. package/component/component.js +34 -0
  19. package/component/component.js.map +1 -1
  20. package/component/custom-element.d.ts +10 -17
  21. package/component/custom-element.d.ts.map +1 -1
  22. package/component/custom-element.js +1 -2
  23. package/component/custom-element.js.map +1 -1
  24. package/component/events.js.map +1 -1
  25. package/component/initializer.d.ts +79 -0
  26. package/component/initializer.d.ts.map +1 -0
  27. package/component/initializer.js +77 -0
  28. package/component/initializer.js.map +1 -0
  29. package/component/reflect.d.ts.map +1 -1
  30. package/component/reflect.js +8 -2
  31. package/component/reflect.js.map +1 -1
  32. package/di/inject.d.ts +11 -4
  33. package/di/inject.d.ts.map +1 -1
  34. package/di/inject.js +18 -2
  35. package/di/inject.js.map +1 -1
  36. package/di/provider.d.ts +8 -5
  37. package/di/provider.d.ts.map +1 -1
  38. package/di/provider.js +40 -13
  39. package/di/provider.js.map +1 -1
  40. package/directive/directive.d.ts +21 -12
  41. package/directive/directive.d.ts.map +1 -1
  42. package/directive/directive.js +76 -27
  43. package/directive/directive.js.map +1 -1
  44. package/html/deserialize.d.ts.map +1 -1
  45. package/html/deserialize.js +7 -0
  46. package/html/deserialize.js.map +1 -1
  47. package/html/expression.d.ts.map +1 -1
  48. package/html/expression.js +41 -8
  49. package/html/expression.js.map +1 -1
  50. package/index.d.ts +1 -0
  51. package/index.d.ts.map +1 -1
  52. package/index.js +1 -0
  53. package/index.js.map +1 -1
  54. package/initializer/input.d.ts +1 -0
  55. package/initializer/input.d.ts.map +1 -0
  56. package/initializer/input.js +2 -0
  57. package/initializer/input.js.map +1 -0
  58. package/linker/change-detector-ref.d.ts +3 -3
  59. package/linker/change-detector-ref.d.ts.map +1 -1
  60. package/linker/change-detector-ref.js +26 -4
  61. package/linker/change-detector-ref.js.map +1 -1
  62. package/linker/template-ref.js +3 -3
  63. package/linker/template-ref.js.map +1 -1
  64. package/linker/view-container-ref.d.ts +4 -4
  65. package/linker/view-container-ref.d.ts.map +1 -1
  66. package/linker/view-container-ref.js +4 -4
  67. package/linker/view-container-ref.js.map +1 -1
  68. package/linker/view-ref.d.ts +2 -2
  69. package/linker/view-ref.js.map +1 -1
  70. package/package.json +7 -7
  71. package/pipe/pipe.d.ts +8 -8
  72. package/pipe/pipe.d.ts.map +1 -1
  73. package/pipe/pipe.js +2 -2
  74. package/pipe/pipe.js.map +1 -1
  75. package/signals/factory.d.ts +19 -0
  76. package/signals/factory.d.ts.map +1 -0
  77. package/signals/factory.js +59 -0
  78. package/signals/factory.js.map +1 -0
  79. package/signals/initializer.d.ts +26 -0
  80. package/signals/initializer.d.ts.map +1 -0
  81. package/signals/initializer.js +19 -0
  82. package/signals/initializer.js.map +1 -0
  83. package/signals/input.d.ts +1 -0
  84. package/signals/input.d.ts.map +1 -0
  85. package/signals/input.js +2 -0
  86. package/signals/input.js.map +1 -0
  87. package/signals/runtime.d.ts +37 -0
  88. package/signals/runtime.d.ts.map +1 -0
  89. package/signals/runtime.js +176 -0
  90. package/signals/runtime.js.map +1 -0
  91. package/signals/scopes.d.ts +4 -0
  92. package/signals/scopes.d.ts.map +1 -0
  93. package/signals/scopes.js +4 -0
  94. package/signals/scopes.js.map +1 -0
  95. package/signals/signals.d.ts +9 -12
  96. package/signals/signals.d.ts.map +1 -1
  97. package/signals/signals.js +17 -44
  98. package/signals/signals.js.map +1 -1
  99. package/utils/elements-util.d.ts +0 -1
  100. package/utils/elements-util.d.ts.map +1 -1
  101. package/utils/elements-util.js +0 -9
  102. package/utils/elements-util.js.map +1 -1
  103. package/utils/typeof.d.ts +4 -2
  104. package/utils/typeof.d.ts.map +1 -1
  105. package/utils/typeof.js.map +1 -1
  106. package/view/base-view.d.ts +2 -2
  107. package/view/base-view.d.ts.map +1 -1
  108. package/view/base-view.js +72 -100
  109. package/view/base-view.js.map +1 -1
  110. package/view/form-view.d.ts +2 -2
  111. package/view/form-view.d.ts.map +1 -1
  112. package/view/form-view.js.map +1 -1
  113. package/view/render.d.ts +7 -3
  114. package/view/render.d.ts.map +1 -1
  115. package/view/render.js +80 -30
  116. package/view/render.js.map +1 -1
  117. package/view/utils.d.ts +2 -2
  118. package/view/utils.d.ts.map +1 -1
  119. package/view/utils.js.map +1 -1
  120. package/view/view.d.ts +3 -3
  121. package/view/view.d.ts.map +1 -1
  122. package/view/view.js +3 -3
  123. package/view/view.js.map +1 -1
@@ -0,0 +1,176 @@
1
+ import { CallExpression, expressionVisitor, Identifier, JavaScriptParser, Literal, MemberExpression, Property, SequenceExpression, ThisExpression } from '@ibyar/expressions';
2
+ /**
3
+ * scan model class for (inputs and output) property definitions with value by function call.
4
+ */
5
+ export class RuntimeClassMetadata {
6
+ static INSTANCE = new RuntimeClassMetadata();
7
+ static scanMetadata(modelClass, scanParent = true) {
8
+ return RuntimeClassMetadata.INSTANCE.scan(modelClass, scanParent);
9
+ }
10
+ static scanClass(modelClass, visitorCallback, scanParent = true) {
11
+ return RuntimeClassMetadata.INSTANCE.scanModelClass(modelClass, visitorCallback, scanParent);
12
+ }
13
+ scan(modelClass, scanParent) {
14
+ const metadata = this.newModelInitializers();
15
+ const visitor = this.createVisitor(metadata);
16
+ this.scanModelClass(modelClass, visitor, scanParent);
17
+ return metadata;
18
+ }
19
+ /**
20
+ * scan class `Function` for properties and methods definitions.
21
+ * @param modelClass
22
+ * @param visitorCallback
23
+ */
24
+ scanModelClass(modelClass, visitorCallback, scanParent) {
25
+ const script = this.getClassScript(modelClass, scanParent);
26
+ const expr = JavaScriptParser.parse(script);
27
+ expressionVisitor.visit(expr, visitorCallback);
28
+ }
29
+ getClassScript(modelClass, scanParent) {
30
+ const modelList = scanParent ? this.getClassList(modelClass) : [modelClass];
31
+ return modelList.map((ref, index) => `const Class${index} = ${ref};`).join('\n');
32
+ ;
33
+ }
34
+ getClassList(modelClass) {
35
+ const list = [];
36
+ while (modelClass instanceof Function) {
37
+ list.push(modelClass);
38
+ modelClass = Object.getPrototypeOf(modelClass);
39
+ }
40
+ return list.reverse();
41
+ }
42
+ newModelInitializers() {
43
+ return [
44
+ { signal: 'input', options: [] },
45
+ { signal: 'input', necessity: 'required', options: [] },
46
+ { signal: 'output', options: [] },
47
+ { signal: 'signal', options: [] },
48
+ { signal: 'computed', options: [] },
49
+ { signal: 'lazy', options: [] },
50
+ { signal: 'formValue', options: [] },
51
+ { signal: 'formValue', necessity: 'required', options: [] },
52
+ { signal: 'view', options: [] },
53
+ { signal: 'viewChild', options: [] },
54
+ { signal: 'viewChild', necessity: 'required', options: [] },
55
+ { signal: 'viewChildren', options: [] },
56
+ { signal: 'signalNode', options: [] },
57
+ { signal: 'computedNode', options: [] },
58
+ { signal: 'lazyNode', options: [] },
59
+ ];
60
+ }
61
+ createVisitor(properties) {
62
+ return (expression, type) => {
63
+ if (type === 'PropertyDefinition') {
64
+ const definition = expression;
65
+ const key = definition.getKey();
66
+ let value = definition.getValue();
67
+ if (definition.isPrivate()
68
+ || definition.isStatic()
69
+ || !(key instanceof Identifier || key instanceof Literal)) {
70
+ return;
71
+ }
72
+ if (!(value instanceof CallExpression)) {
73
+ if (value instanceof SequenceExpression) {
74
+ value = value.getExpressions().find(node => node instanceof CallExpression && properties.find(property => this.isCallOf(node, property.signal, property.necessity)));
75
+ if (!value) {
76
+ return;
77
+ }
78
+ }
79
+ else {
80
+ return;
81
+ }
82
+ }
83
+ const call = value;
84
+ const property = properties.find(property => this.isCallOf(call, property.signal, property.necessity));
85
+ if (property) {
86
+ const name = key instanceof Identifier ? key.getName() : key.getValue();
87
+ const alias = this.getAliasNameFromOptionArgument(call);
88
+ property.options.push({ name, alias: alias ?? name });
89
+ }
90
+ }
91
+ else if (type === 'MethodDefinition') {
92
+ const definition = expression;
93
+ if (definition.getKind() !== 'constructor') {
94
+ return;
95
+ }
96
+ expressionVisitor.visit(definition.getValue(), (exp, expType) => {
97
+ if (expType === 'AssignmentExpression') {
98
+ const assignment = exp;
99
+ const right = assignment.getRight();
100
+ if (right instanceof CallExpression) {
101
+ const property = properties.find(property => this.isCallOf(right, property.signal, property.necessity));
102
+ if (!property) {
103
+ return;
104
+ }
105
+ const name = this.hasMemberOfThis(assignment.getLeft());
106
+ if (name) {
107
+ const alias = this.getAliasNameFromOptionArgument(right);
108
+ property.options.push({ name, alias: alias ?? name });
109
+ }
110
+ }
111
+ }
112
+ });
113
+ }
114
+ };
115
+ }
116
+ getAliasNameFromOptionArgument(call) {
117
+ let alias;
118
+ call.getArguments()?.forEach(argument => expressionVisitor.visit(argument, (exp, type, control) => {
119
+ if (exp instanceof Property) {
120
+ if (this.isProperty(exp.getKey(), 'alias')) {
121
+ const value = exp.getValue();
122
+ if (value instanceof Literal) {
123
+ alias = value.getValue();
124
+ control.abort();
125
+ }
126
+ }
127
+ }
128
+ }));
129
+ return alias;
130
+ }
131
+ isProperty(node, property) {
132
+ return (node instanceof Identifier && node.getName() === property)
133
+ || (node instanceof Literal && node.getValue() === property);
134
+ }
135
+ isCallOf(call, objectName, propertyName) {
136
+ const callee = call.getCallee();
137
+ if (propertyName && callee instanceof MemberExpression) {
138
+ return this.isMemberOf(callee, objectName, propertyName);
139
+ }
140
+ else if (!propertyName && callee instanceof Identifier && callee.getName() === objectName) {
141
+ return true;
142
+ }
143
+ return false;
144
+ }
145
+ isMemberOf(member, objectName, propertyName) {
146
+ const object = member.getObject();
147
+ const property = member.getProperty();
148
+ if (object instanceof Identifier && object.getName() === objectName) {
149
+ if (property instanceof Identifier && property.getName() === propertyName) {
150
+ return true;
151
+ }
152
+ else if (property instanceof Literal && property.getValue() === propertyName) {
153
+ return true;
154
+ }
155
+ return true;
156
+ }
157
+ return false;
158
+ }
159
+ hasMemberOfThis(member) {
160
+ if (!(member instanceof MemberExpression)) {
161
+ return false;
162
+ }
163
+ const object = member.getObject();
164
+ const property = member.getProperty();
165
+ if (object instanceof ThisExpression) {
166
+ if (property instanceof Identifier) {
167
+ return property.getName();
168
+ }
169
+ else if (property instanceof Literal) {
170
+ return property.getValue();
171
+ }
172
+ }
173
+ return false;
174
+ }
175
+ }
176
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/signals/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tAssignmentExpression,\n\tCallExpression, ExpressionNode,\n\texpressionVisitor, Identifier,\n\tJavaScriptParser, Literal,\n\tMemberExpression, MethodDefinition,\n\tProperty, PropertyDefinition,\n\tSequenceExpression, ThisExpression,\n\tVisitorCallback\n} from '@ibyar/expressions';\n\ntype Key =\n\t| 'input'\n\t| 'output'\n\t| 'formValue'\n\t| 'view'\n\t| 'viewChild'\n\t| 'viewChildren'\n\t| 'signal'\n\t| 'computed'\n\t| 'lazy'\n\t| 'signalNode'\n\t| 'computedNode'\n\t| 'lazyNode';\n\ntype RuntimeOption = {\n\tname: Key,\n\talias: string,\n};\n\nexport type SignalRuntimeMetadata = {\n\tsignal: Key;\n\tnecessity?: 'required';\n\toptions: Array<RuntimeOption>;\n};\n\n/**\n * scan model class for (inputs and output) property definitions with value by function call.\n */\nexport class RuntimeClassMetadata {\n\n\tstatic INSTANCE = new RuntimeClassMetadata();\n\n\tstatic scanMetadata(modelClass: Function, scanParent = true) {\n\t\treturn RuntimeClassMetadata.INSTANCE.scan(modelClass, scanParent);\n\t}\n\n\tstatic scanClass(modelClass: Function, visitorCallback: VisitorCallback, scanParent = true) {\n\t\treturn RuntimeClassMetadata.INSTANCE.scanModelClass(modelClass, visitorCallback, scanParent);\n\t}\n\n\tscan(modelClass: Function, scanParent: boolean): SignalRuntimeMetadata[] {\n\t\tconst metadata = this.newModelInitializers();\n\t\tconst visitor = this.createVisitor(metadata);\n\t\tthis.scanModelClass(modelClass, visitor, scanParent);\n\t\treturn metadata;\n\t}\n\n\t/**\n\t * scan class `Function` for properties and methods definitions.\n\t * @param modelClass \n\t * @param visitorCallback \n\t */\n\tscanModelClass(modelClass: Function, visitorCallback: VisitorCallback, scanParent: boolean) {\n\t\tconst script = this.getClassScript(modelClass, scanParent);\n\t\tconst expr = JavaScriptParser.parse(script);\n\t\texpressionVisitor.visit(expr, visitorCallback);\n\t}\n\n\tgetClassScript(modelClass: Function, scanParent: boolean): string {\n\t\tconst modelList = scanParent ? this.getClassList(modelClass) : [modelClass];\n\t\treturn modelList.map((ref, index) => `const Class${index} = ${ref};`).join('\\n');;\n\t}\n\n\tgetClassList(modelClass: Function): Function[] {\n\t\tconst list: Function[] = [];\n\t\twhile (modelClass instanceof Function) {\n\t\t\tlist.push(modelClass);\n\t\t\tmodelClass = Object.getPrototypeOf(modelClass);\n\t\t}\n\t\treturn list.reverse();\n\t}\n\n\tnewModelInitializers(): SignalRuntimeMetadata[] {\n\t\treturn [\n\t\t\t{ signal: 'input', options: [] },\n\t\t\t{ signal: 'input', necessity: 'required', options: [] },\n\t\t\t{ signal: 'output', options: [] },\n\t\t\t{ signal: 'signal', options: [] },\n\t\t\t{ signal: 'computed', options: [] },\n\t\t\t{ signal: 'lazy', options: [] },\n\t\t\t{ signal: 'formValue', options: [] },\n\t\t\t{ signal: 'formValue', necessity: 'required', options: [] },\n\t\t\t{ signal: 'view', options: [] },\n\t\t\t{ signal: 'viewChild', options: [] },\n\t\t\t{ signal: 'viewChild', necessity: 'required', options: [] },\n\t\t\t{ signal: 'viewChildren', options: [] },\n\t\t\t{ signal: 'signalNode', options: [] },\n\t\t\t{ signal: 'computedNode', options: [] },\n\t\t\t{ signal: 'lazyNode', options: [] },\n\t\t];\n\t}\n\n\tcreateVisitor(properties: SignalRuntimeMetadata[]): VisitorCallback {\n\t\treturn (expression, type) => {\n\t\t\tif (type === 'PropertyDefinition') {\n\t\t\t\tconst definition = expression as PropertyDefinition;\n\t\t\t\tconst key = definition.getKey();\n\t\t\t\tlet value = definition.getValue();\n\t\t\t\tif (definition.isPrivate()\n\t\t\t\t\t|| definition.isStatic()\n\t\t\t\t\t|| !(key instanceof Identifier || key instanceof Literal)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!(value instanceof CallExpression)) {\n\t\t\t\t\tif (value instanceof SequenceExpression) {\n\t\t\t\t\t\tvalue = value.getExpressions().find(node => node instanceof CallExpression && properties.find(property => this.isCallOf(node, property.signal, property.necessity)));\n\t\t\t\t\t\tif (!value) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst call = value as CallExpression;\n\t\t\t\tconst property = properties.find(property => this.isCallOf(call, property.signal, property.necessity));\n\t\t\t\tif (property) {\n\t\t\t\t\tconst name = key instanceof Identifier ? key.getName() : key.getValue();\n\t\t\t\t\tconst alias = this.getAliasNameFromOptionArgument(call);\n\t\t\t\t\tproperty.options.push({ name, alias: alias ?? name });\n\t\t\t\t}\n\t\t\t} else if (type === 'MethodDefinition') {\n\t\t\t\tconst definition = expression as MethodDefinition;\n\t\t\t\tif (definition.getKind() !== 'constructor') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\texpressionVisitor.visit(definition.getValue(), (exp, expType) => {\n\t\t\t\t\tif (expType === 'AssignmentExpression') {\n\t\t\t\t\t\tconst assignment = exp as AssignmentExpression;\n\t\t\t\t\t\tconst right = assignment.getRight();\n\t\t\t\t\t\tif (right instanceof CallExpression) {\n\t\t\t\t\t\t\tconst property = properties.find(property => this.isCallOf(right, property.signal, property.necessity));\n\t\t\t\t\t\t\tif (!property) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst name = this.hasMemberOfThis(assignment.getLeft());\n\t\t\t\t\t\t\tif (name) {\n\t\t\t\t\t\t\t\tconst alias = this.getAliasNameFromOptionArgument(right);\n\t\t\t\t\t\t\t\tproperty.options.push({ name, alias: alias ?? name });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\tgetAliasNameFromOptionArgument(call: CallExpression): string | undefined {\n\t\tlet alias: string | undefined;\n\t\tcall.getArguments()?.forEach(argument => expressionVisitor.visit(argument, (exp, type, control) => {\n\t\t\tif (exp instanceof Property) {\n\t\t\t\tif (this.isProperty(exp.getKey(), 'alias')) {\n\t\t\t\t\tconst value = exp.getValue();\n\t\t\t\t\tif (value instanceof Literal) {\n\t\t\t\t\t\talias = value.getValue();\n\t\t\t\t\t\tcontrol.abort();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\treturn alias;\n\t}\n\n\tisProperty(node: ExpressionNode, property: string): boolean {\n\t\treturn (node instanceof Identifier && node.getName() === property)\n\t\t\t|| (node instanceof Literal && node.getValue() === property);\n\t}\n\n\tisCallOf(call: CallExpression, objectName: string, propertyName?: string): boolean {\n\t\tconst callee = call.getCallee();\n\t\tif (propertyName && callee instanceof MemberExpression) {\n\t\t\treturn this.isMemberOf(callee, objectName, propertyName);\n\t\t} else if (!propertyName && callee instanceof Identifier && callee.getName() === objectName) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tisMemberOf(member: MemberExpression, objectName: string, propertyName: string): boolean {\n\t\tconst object = member.getObject();\n\t\tconst property = member.getProperty();\n\t\tif (object instanceof Identifier && object.getName() === objectName) {\n\t\t\tif (property instanceof Identifier && property.getName() === propertyName) {\n\t\t\t\treturn true;\n\t\t\t} else if (property instanceof Literal && property.getValue() === propertyName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\thasMemberOfThis(member: ExpressionNode): Key | false {\n\t\tif (!(member instanceof MemberExpression)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst object = member.getObject();\n\t\tconst property = member.getProperty();\n\t\tif (object instanceof ThisExpression) {\n\t\t\tif (property instanceof Identifier) {\n\t\t\t\treturn property.getName() as Key;\n\t\t\t} else if (property instanceof Literal) {\n\t\t\t\treturn property.getValue() as Key;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\n"]}
@@ -0,0 +1,4 @@
1
+ import { Context, ReactiveScopeControl } from '@ibyar/expressions';
2
+ export declare class ReactiveSignalScopeControl<T extends Context> extends ReactiveScopeControl<T> {
3
+ }
4
+ //# sourceMappingURL=scopes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../../../src/core/signals/scopes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,qBAAa,0BAA0B,CAAC,CAAC,SAAS,OAAO,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;CAEzF"}
@@ -0,0 +1,4 @@
1
+ import { ReactiveScopeControl } from '@ibyar/expressions';
2
+ export class ReactiveSignalScopeControl extends ReactiveScopeControl {
3
+ }
4
+ //# sourceMappingURL=scopes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../../src/core/signals/scopes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,MAAM,OAAO,0BAA8C,SAAQ,oBAAuB;CAEzF","sourcesContent":["import { Context, ReactiveScopeControl } from '@ibyar/expressions';\n\n\nexport class ReactiveSignalScopeControl<T extends Context> extends ReactiveScopeControl<T> {\n\n}\n\n"]}
@@ -1,14 +1,11 @@
1
- import { SignalScope } from '@ibyar/expressions';
2
- export declare function setSignalScope(scope: SignalScope): void;
3
- export declare function clearSignalScope(): void;
4
- export declare function signalNode<T>(initialValue: T): import("@ibyar/expressions").Signal<T>;
5
- export declare function signal<T>(initialValue: T): import("@ibyar/expressions").WritableSignal<T>;
6
- export declare function computedNode<T>(computation: () => T): import("@ibyar/expressions").Computed<T>;
7
- export declare function computed<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
8
- export declare function lazyNode<T>(computation: () => T): import("@ibyar/expressions").Lazy<T>;
9
- export declare function lazy<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
10
- export declare function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void): {
11
- destroy(): void;
12
- };
1
+ import { ReactiveNode, SignalScope } from '@ibyar/expressions';
2
+ export declare function pushNewSignalScope(): SignalScope;
3
+ export declare function pushSignalScope(scope: SignalScope): void;
4
+ export declare function clearSignalScope(scope: SignalScope): void;
5
+ export declare function signal<T>(initialValue?: T): import("@ibyar/expressions").Signal<T>;
6
+ export declare function computed<T>(computation: () => T): import("@ibyar/expressions").Computed<T>;
7
+ export declare function lazy<T>(computation: () => T): import("@ibyar/expressions").Lazy<T>;
8
+ export declare function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void): import("@ibyar/expressions").SignalDestroyRef;
9
+ export declare function untracked<T>(reactiveNode: ReactiveNode<T>): T;
13
10
  export declare function untracked<T>(nonReactiveReadsFn: () => T): T;
14
11
  //# sourceMappingURL=signals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/core/signals/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,QAEhD;AAED,wBAAgB,gBAAgB,SAE/B;AAQD,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,0CAG5C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,kDAGxC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,4CAGnD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,kDAG/C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,wCAG/C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,kDAG3C;AAaD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI;;EAGjF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,CAM3D"}
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/core/signals/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG/D,wBAAgB,kBAAkB,gBAIjC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,QAEjD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,QAElD;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,0CAEzC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,4CAE/C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,wCAE3C;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,iDAEjF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/D,wBAAgB,SAAS,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC"}
@@ -1,56 +1,29 @@
1
- let signalScope;
2
- export function setSignalScope(scope) {
3
- signalScope = scope;
1
+ import { SignalScope } from '@ibyar/expressions';
2
+ import { signalScopeFactory } from './factory.js';
3
+ export function pushNewSignalScope() {
4
+ const scope = SignalScope.create();
5
+ signalScopeFactory.push(scope);
6
+ return scope;
4
7
  }
5
- export function clearSignalScope() {
6
- signalScope = undefined;
8
+ export function pushSignalScope(scope) {
9
+ signalScopeFactory.push(scope);
7
10
  }
8
- function assertValidContext() {
9
- if (!signalScope) {
10
- throw new Error('Create a Signal, Computed and Effect is only allowed in class constructor.');
11
- }
12
- }
13
- export function signalNode(initialValue) {
14
- assertValidContext();
15
- return signalScope.createSignal(initialValue);
11
+ export function clearSignalScope(scope) {
12
+ signalScopeFactory.pop(scope);
16
13
  }
17
14
  export function signal(initialValue) {
18
- assertValidContext();
19
- return signalScope.createSignalFn(initialValue);
20
- }
21
- export function computedNode(computation) {
22
- assertValidContext();
23
- return signalScope.createComputed(computation);
15
+ return signalScopeFactory.signal(initialValue);
24
16
  }
25
17
  export function computed(computation) {
26
- assertValidContext();
27
- return signalScope.createComputedFn(computation);
28
- }
29
- export function lazyNode(computation) {
30
- assertValidContext();
31
- return signalScope.createLazy(computation);
18
+ return signalScopeFactory.computed(computation);
32
19
  }
33
20
  export function lazy(computation) {
34
- assertValidContext();
35
- return signalScope.createLazyFn(computation);
36
- }
37
- const effectState = [];
38
- function wrapEffect(scope, effectFn) {
39
- return (onCleanup) => {
40
- effectState.push(scope);
41
- effectFn(onCleanup);
42
- effectState.pop();
43
- };
21
+ return signalScopeFactory.lazy(computation);
44
22
  }
45
23
  export function effect(effectFn) {
46
- assertValidContext();
47
- return signalScope.createEffect(wrapEffect(signalScope, effectFn));
48
- }
49
- export function untracked(nonReactiveReadsFn) {
50
- const scope = effectState.at(-1);
51
- scope?.untrack();
52
- const value = nonReactiveReadsFn();
53
- scope?.track();
54
- return value;
24
+ return signalScopeFactory.effect(effectFn);
25
+ }
26
+ export function untracked(nonReactiveReads) {
27
+ return signalScopeFactory.untracked(nonReactiveReads);
55
28
  }
56
29
  //# sourceMappingURL=signals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/core/signals/signals.ts"],"names":[],"mappings":"AAEA,IAAI,WAAoC,CAAC;AAGzC,MAAM,UAAU,cAAc,CAAC,KAAkB;IAChD,WAAW,GAAG,KAAK,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC/B,WAAW,GAAG,SAAS,CAAC;AACzB,CAAC;AAED,SAAS,kBAAkB;IAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAC/F,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,YAAe;IAC5C,kBAAkB,EAAE,CAAC;IACrB,OAAO,WAAY,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,YAAe;IACxC,kBAAkB,EAAE,CAAC;IACrB,OAAO,WAAY,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,WAAoB;IACnD,kBAAkB,EAAE,CAAC;IACrB,OAAO,WAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,WAAoB;IAC/C,kBAAkB,EAAE,CAAC;IACrB,OAAO,WAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,WAAoB;IAC/C,kBAAkB,EAAE,CAAC;IACrB,OAAO,WAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,IAAI,CAAI,WAAoB;IAC3C,kBAAkB,EAAE,CAAC;IACrB,OAAO,WAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,WAAW,GAAkB,EAAE,CAAC;AAEtC,SAAS,UAAU,CAAI,KAAkB,EAAE,QAAkB;IAC5D,OAAO,CAAC,SAAS,EAAE,EAAE;QACpB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,WAAW,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC,CAAC;AACH,CAAC;AAGD,MAAM,UAAU,MAAM,CAAC,QAA2D;IACjF,kBAAkB,EAAE,CAAC;IACrB,OAAO,WAAY,CAAC,YAAY,CAAC,UAAU,CAAC,WAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,kBAA2B;IACvD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACnC,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,OAAO,KAAK,CAAC;AACd,CAAC","sourcesContent":["import { SignalScope } from '@ibyar/expressions';\n\nlet signalScope: SignalScope | undefined;\n\n\nexport function setSignalScope(scope: SignalScope) {\n\tsignalScope = scope;\n}\n\nexport function clearSignalScope() {\n\tsignalScope = undefined;\n}\n\nfunction assertValidContext(): void {\n\tif (!signalScope) {\n\t\tthrow new Error('Create a Signal, Computed and Effect is only allowed in class constructor.');\n\t}\n}\n\nexport function signalNode<T>(initialValue: T) {\n\tassertValidContext();\n\treturn signalScope!.createSignal(initialValue);\n}\n\nexport function signal<T>(initialValue: T) {\n\tassertValidContext();\n\treturn signalScope!.createSignalFn(initialValue);\n}\n\nexport function computedNode<T>(computation: () => T) {\n\tassertValidContext();\n\treturn signalScope!.createComputed(computation);\n}\n\nexport function computed<T>(computation: () => T) {\n\tassertValidContext();\n\treturn signalScope!.createComputedFn(computation);\n}\n\nexport function lazyNode<T>(computation: () => T) {\n\tassertValidContext();\n\treturn signalScope!.createLazy(computation);\n}\n\nexport function lazy<T>(computation: () => T) {\n\tassertValidContext();\n\treturn signalScope!.createLazyFn(computation);\n}\n\nconst effectState: SignalScope[] = [];\ntype EffectFn = (onCleanup?: (clean: () => void) => void) => void;\nfunction wrapEffect<T>(scope: SignalScope, effectFn: EffectFn): EffectFn {\n\treturn (onCleanup) => {\n\t\teffectState.push(scope);\n\t\teffectFn(onCleanup);\n\t\teffectState.pop();\n\t};\n}\n\n\nexport function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void) {\n\tassertValidContext();\n\treturn signalScope!.createEffect(wrapEffect(signalScope!, effectFn));\n}\n\nexport function untracked<T>(nonReactiveReadsFn: () => T): T {\n\tconst scope = effectState.at(-1);\n\tscope?.untrack();\n\tconst value = nonReactiveReadsFn();\n\tscope?.track();\n\treturn value;\n}\n"]}
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/core/signals/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,kBAAkB;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAkB;IACjD,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IAClD,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,YAAgB;IACzC,OAAO,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,WAAoB;IAC/C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,IAAI,CAAI,WAAoB;IAC3C,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,QAA2D;IACjF,OAAO,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAID,MAAM,UAAU,SAAS,CAAI,gBAA6C;IACzE,OAAO,kBAAkB,CAAC,SAAS,CAAC,gBAAmC,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["import { ReactiveNode, SignalScope } from '@ibyar/expressions';\nimport { signalScopeFactory } from './factory.js';\n\nexport function pushNewSignalScope() {\n\tconst scope = SignalScope.create();\n\tsignalScopeFactory.push(scope);\n\treturn scope;\n}\n\nexport function pushSignalScope(scope: SignalScope) {\n\tsignalScopeFactory.push(scope);\n}\n\nexport function clearSignalScope(scope: SignalScope) {\n\tsignalScopeFactory.pop(scope);\n}\n\nexport function signal<T>(initialValue?: T) {\n\treturn signalScopeFactory.signal(initialValue);\n}\n\nexport function computed<T>(computation: () => T) {\n\treturn signalScopeFactory.computed(computation);\n}\n\nexport function lazy<T>(computation: () => T) {\n\treturn signalScopeFactory.lazy(computation);\n}\n\nexport function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void) {\n\treturn signalScopeFactory.effect(effectFn);\n}\n\nexport function untracked<T>(reactiveNode: ReactiveNode<T>): T;\nexport function untracked<T>(nonReactiveReadsFn: () => T): T;\nexport function untracked<T>(nonReactiveReads: (() => T) | ReactiveNode<T>): T {\n\treturn signalScopeFactory.untracked(nonReactiveReads as ReactiveNode<T>);\n}\n"]}
@@ -1,4 +1,3 @@
1
- export declare function hasComponentAttr(element: HTMLElement, attr: string): boolean;
2
1
  export declare function hasAttrCustomElement(element: HTMLElement, attr: string): boolean;
3
2
  export declare function isDataAttributes(attr: string): boolean;
4
3
  export declare function hasAttr(element: HTMLElement, attr: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"elements-util.d.ts","sourceRoot":"","sources":["../../../src/core/utils/elements-util.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM5E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQhF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,WAE5C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnE"}
1
+ {"version":3,"file":"elements-util.d.ts","sourceRoot":"","sources":["../../../src/core/utils/elements-util.ts"],"names":[],"mappings":"AAGA,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQhF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,WAE5C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAInE"}
@@ -1,12 +1,4 @@
1
1
  import { hasNativeAttr } from '@ibyar/elements';
2
- import { isHTMLComponent } from '../component/custom-element.js';
3
- export function hasComponentAttr(element, attr) {
4
- if (isHTMLComponent(element)) {
5
- var componentRef = element.getComponentRef();
6
- return componentRef.inputs.some(input => input.viewAttribute === attr);
7
- }
8
- return false;
9
- }
10
2
  export function hasAttrCustomElement(element, attr) {
11
3
  if (Reflect.has(element.constructor, 'allAttributes')) {
12
4
  return Reflect.get(element.constructor, 'allAttributes').some((prop) => prop === attr);
@@ -22,7 +14,6 @@ export function isDataAttributes(attr) {
22
14
  export function hasAttr(element, attr) {
23
15
  return hasNativeAttr(element, attr)
24
16
  || hasAttrCustomElement(element, attr)
25
- || hasComponentAttr(element, attr)
26
17
  || isDataAttributes(attr);
27
18
  }
28
19
  //# sourceMappingURL=elements-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"elements-util.js","sourceRoot":"","sources":["../../../src/core/utils/elements-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,UAAU,gBAAgB,CAAC,OAAoB,EAAE,IAAY;IAClE,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAsB,OAAO,CAAC,eAAe,EAAE,CAAC;QAChE,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB,EAAE,IAAY;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChG,CAAC;SACI,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAoB,EAAE,IAAY;IACzD,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;WAC/B,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC;WACnC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;WAC/B,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import { hasNativeAttr } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { isHTMLComponent } from '../component/custom-element.js';\n\nexport function hasComponentAttr(element: HTMLElement, attr: string): boolean {\n\tif (isHTMLComponent(element)) {\n\t\tvar componentRef: ComponentRef<any> = element.getComponentRef();\n\t\treturn componentRef.inputs.some(input => input.viewAttribute === attr);\n\t}\n\treturn false;\n}\n\nexport function hasAttrCustomElement(element: HTMLElement, attr: string): boolean {\n\tif (Reflect.has(element.constructor, 'allAttributes')) {\n\t\treturn Reflect.get(element.constructor, 'allAttributes').some((prop: string) => prop === attr);\n\t}\n\telse if (Reflect.has(element.constructor, 'observedAttributes')) {\n\t\treturn Reflect.get(element.constructor, 'observedAttributes').some((prop: string) => prop === attr);\n\t}\n\treturn false;\n}\n\nexport function isDataAttributes(attr: string) {\n\treturn attr.startsWith('data-');\n}\n\nexport function hasAttr(element: HTMLElement, attr: string): boolean {\n\treturn hasNativeAttr(element, attr)\n\t\t|| hasAttrCustomElement(element, attr)\n\t\t|| hasComponentAttr(element, attr)\n\t\t|| isDataAttributes(attr);\n}\n"]}
1
+ {"version":3,"file":"elements-util.js","sourceRoot":"","sources":["../../../src/core/utils/elements-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,UAAU,oBAAoB,CAAC,OAAoB,EAAE,IAAY;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChG,CAAC;SACI,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAoB,EAAE,IAAY;IACzD,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;WAC/B,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC;WACnC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import { hasNativeAttr } from '@ibyar/elements';\n\n\nexport function hasAttrCustomElement(element: HTMLElement, attr: string): boolean {\n\tif (Reflect.has(element.constructor, 'allAttributes')) {\n\t\treturn Reflect.get(element.constructor, 'allAttributes').some((prop: string) => prop === attr);\n\t}\n\telse if (Reflect.has(element.constructor, 'observedAttributes')) {\n\t\treturn Reflect.get(element.constructor, 'observedAttributes').some((prop: string) => prop === attr);\n\t}\n\treturn false;\n}\n\nexport function isDataAttributes(attr: string) {\n\treturn attr.startsWith('data-');\n}\n\nexport function hasAttr(element: HTMLElement, attr: string): boolean {\n\treturn hasNativeAttr(element, attr)\n\t\t|| hasAttrCustomElement(element, attr)\n\t\t|| isDataAttributes(attr);\n}\n"]}
package/utils/typeof.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * send the class itself, not instance
3
3
  */
4
- export interface TypeOf<T> extends Function {
4
+ export interface Type<T> extends Function {
5
5
  new (...values: any): T;
6
6
  [key: PropertyKey]: any;
7
7
  }
8
- export type Class<T = any> = new (...args: any) => T;
8
+ export interface AbstractType<T> extends Function {
9
+ prototype: T;
10
+ }
9
11
  //# sourceMappingURL=typeof.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typeof.d.ts","sourceRoot":"","sources":["../../../src/core/utils/typeof.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC,CAAE,SAAQ,QAAQ;IAC1C,KAAI,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACvB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC;CACxB;AAED,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"typeof.d.ts","sourceRoot":"","sources":["../../../src/core/utils/typeof.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,CAAE,SAAQ,QAAQ;IACxC,KAAI,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACvB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC;CACxB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,QAAQ;IAChD,SAAS,EAAE,CAAC,CAAC;CACb"}
@@ -1 +1 @@
1
- {"version":3,"file":"typeof.js","sourceRoot":"","sources":["../../../src/core/utils/typeof.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * send the class itself, not instance\n */\nexport interface TypeOf<T> extends Function {\n\tnew(...values: any): T;\n\t[key: PropertyKey]: any;\n}\n\nexport type Class<T = any> = new (...args: any) => T;\n"]}
1
+ {"version":3,"file":"typeof.js","sourceRoot":"","sources":["../../../src/core/utils/typeof.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * send the class itself, not instance\n */\nexport interface Type<T> extends Function {\n\tnew(...values: any): T;\n\t[key: PropertyKey]: any;\n}\n\nexport interface AbstractType<T> extends Function {\n\tprototype: T;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { TypeOf } from '../utils/typeof.js';
1
+ import type { Type } from '../utils/typeof.js';
2
2
  import { HTMLComponent } from '../component/custom-element.js';
3
- export declare function baseFactoryView<T extends object>(htmlElementType: TypeOf<HTMLElement>): TypeOf<HTMLComponent<T>>;
3
+ export declare function baseFactoryView<T extends object>(htmlElementType: Type<HTMLElement>): Type<HTMLComponent<T>>;
4
4
  //# sourceMappingURL=base-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-view.d.ts","sourceRoot":"","sources":["../../../src/core/view/base-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAUjD,OAAO,EAAgC,aAAa,EAAa,MAAM,gCAAgC,CAAC;AAUxG,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CA4VhH"}
1
+ {"version":3,"file":"base-view.d.ts","sourceRoot":"","sources":["../../../src/core/view/base-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAU/C,OAAO,EAAgC,aAAa,EAAa,MAAM,gCAAgC,CAAC;AAaxG,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAwT5G"}