airx 0.4.0 → 0.7.1

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 (150) hide show
  1. package/README.md +247 -63
  2. package/output/app/app.d.ts +41 -0
  3. package/output/app/app.d.ts.map +1 -0
  4. package/output/app/app.js +51 -0
  5. package/output/app/app.js.map +1 -0
  6. package/output/app/index.d.ts +2 -0
  7. package/output/app/index.d.ts.map +1 -0
  8. package/output/app/index.js +2 -0
  9. package/output/app/index.js.map +1 -0
  10. package/output/element/element.d.ts +108 -0
  11. package/output/element/element.d.ts.map +1 -0
  12. package/output/element/element.js +106 -0
  13. package/output/element/element.js.map +1 -0
  14. package/output/element/index.d.ts +2 -0
  15. package/output/element/index.d.ts.map +1 -0
  16. package/output/element/index.js +2 -0
  17. package/output/element/index.js.map +1 -0
  18. package/output/index.d.ts +40 -0
  19. package/output/index.d.ts.map +1 -0
  20. package/output/index.js +36 -0
  21. package/output/index.js.map +1 -0
  22. package/output/jsx-dev-runtime.d.ts +4 -0
  23. package/output/jsx-dev-runtime.d.ts.map +1 -0
  24. package/output/jsx-dev-runtime.js +9 -0
  25. package/output/jsx-dev-runtime.js.map +1 -0
  26. package/output/jsx-runtime.d.ts +23 -0
  27. package/output/jsx-runtime.d.ts.map +1 -0
  28. package/output/jsx-runtime.js +24 -0
  29. package/output/jsx-runtime.js.map +1 -0
  30. package/output/logger/index.d.ts +2 -0
  31. package/output/logger/index.d.ts.map +1 -0
  32. package/output/logger/index.js +2 -0
  33. package/output/logger/index.js.map +1 -0
  34. package/output/{esm → logger}/logger.d.ts +1 -0
  35. package/output/logger/logger.d.ts.map +1 -0
  36. package/output/logger/logger.js +17 -0
  37. package/output/logger/logger.js.map +1 -0
  38. package/output/{esm/render/common/index.d.ts → render/basic/common.d.ts} +4 -3
  39. package/output/render/basic/common.d.ts.map +1 -0
  40. package/output/render/basic/common.js +436 -0
  41. package/output/render/basic/common.js.map +1 -0
  42. package/output/render/basic/hooks/hooks.d.ts +61 -0
  43. package/output/render/basic/hooks/hooks.d.ts.map +1 -0
  44. package/output/render/basic/hooks/hooks.js +72 -0
  45. package/output/render/basic/hooks/hooks.js.map +1 -0
  46. package/output/render/basic/hooks/index.d.ts +2 -0
  47. package/output/render/basic/hooks/index.d.ts.map +1 -0
  48. package/output/render/basic/hooks/index.js +2 -0
  49. package/output/render/basic/hooks/index.js.map +1 -0
  50. package/output/render/basic/index.d.ts +2 -0
  51. package/output/render/basic/index.d.ts.map +1 -0
  52. package/output/render/basic/index.js +2 -0
  53. package/output/render/basic/index.js.map +1 -0
  54. package/output/{umd/render/common/plugins → render/basic/plugins/context}/context.d.ts +2 -1
  55. package/output/render/basic/plugins/context/context.d.ts.map +1 -0
  56. package/output/render/basic/plugins/context/context.js +12 -0
  57. package/output/render/basic/plugins/context/context.js.map +1 -0
  58. package/output/render/basic/plugins/context/index.d.ts +2 -0
  59. package/output/render/basic/plugins/context/index.d.ts.map +1 -0
  60. package/output/render/basic/plugins/context/index.js +2 -0
  61. package/output/render/basic/plugins/context/index.js.map +1 -0
  62. package/output/render/basic/plugins/index.d.ts +3 -0
  63. package/output/render/basic/plugins/index.d.ts.map +1 -0
  64. package/output/render/basic/plugins/index.js +2 -0
  65. package/output/render/basic/plugins/index.js.map +1 -0
  66. package/output/{umd/render/common/plugins/internal → render/basic/plugins/internal/basic}/basic.d.ts +4 -3
  67. package/output/render/basic/plugins/internal/basic/basic.d.ts.map +1 -0
  68. package/output/render/basic/plugins/internal/basic/basic.js +158 -0
  69. package/output/render/basic/plugins/internal/basic/basic.js.map +1 -0
  70. package/output/render/basic/plugins/internal/basic/index.d.ts +2 -0
  71. package/output/render/basic/plugins/internal/basic/index.d.ts.map +1 -0
  72. package/output/render/basic/plugins/internal/basic/index.js +2 -0
  73. package/output/render/basic/plugins/internal/basic/index.js.map +1 -0
  74. package/output/render/basic/plugins/internal/inject/index.d.ts +2 -0
  75. package/output/render/basic/plugins/internal/inject/index.d.ts.map +1 -0
  76. package/output/render/basic/plugins/internal/inject/index.js +2 -0
  77. package/output/render/basic/plugins/internal/inject/index.js.map +1 -0
  78. package/output/{umd/render/common/plugins/internal → render/basic/plugins/internal/inject}/inject.d.ts +3 -2
  79. package/output/render/basic/plugins/internal/inject/inject.d.ts.map +1 -0
  80. package/output/render/basic/plugins/internal/inject/inject.js +25 -0
  81. package/output/render/basic/plugins/internal/inject/inject.js.map +1 -0
  82. package/output/{umd/render/common/plugins/index.d.ts → render/basic/plugins/plugin.d.ts} +3 -3
  83. package/output/render/basic/plugins/plugin.d.ts.map +1 -0
  84. package/output/render/basic/plugins/plugin.js +2 -0
  85. package/output/render/basic/plugins/plugin.js.map +1 -0
  86. package/output/{esm/render → render/browser}/browser.d.ts +4 -3
  87. package/output/render/browser/browser.d.ts.map +1 -0
  88. package/output/render/browser/browser.js +218 -0
  89. package/output/render/browser/browser.js.map +1 -0
  90. package/output/render/browser/index.d.ts +2 -0
  91. package/output/render/browser/index.d.ts.map +1 -0
  92. package/output/render/browser/index.js +2 -0
  93. package/output/render/browser/index.js.map +1 -0
  94. package/output/render/index.d.ts +5 -0
  95. package/output/render/index.d.ts.map +1 -0
  96. package/output/render/index.js +5 -0
  97. package/output/render/index.js.map +1 -0
  98. package/output/render/server/index.d.ts +2 -0
  99. package/output/render/server/index.d.ts.map +1 -0
  100. package/output/render/server/index.js +2 -0
  101. package/output/render/server/index.js.map +1 -0
  102. package/output/{umd/render → render/server}/server.d.ts +3 -2
  103. package/output/render/server/server.d.ts.map +1 -0
  104. package/output/render/server/server.js +314 -0
  105. package/output/render/server/server.js.map +1 -0
  106. package/output/signal/index.d.ts +4 -0
  107. package/output/signal/index.d.ts.map +1 -0
  108. package/output/signal/index.js +2 -0
  109. package/output/signal/index.js.map +1 -0
  110. package/output/{esm/signal/index.d.ts → signal/signal.d.ts} +1 -1
  111. package/output/signal/signal.d.ts.map +1 -0
  112. package/output/signal/signal.js +46 -0
  113. package/output/signal/signal.js.map +1 -0
  114. package/output/symbol/index.d.ts +2 -0
  115. package/output/symbol/index.d.ts.map +1 -0
  116. package/output/symbol/index.js +2 -0
  117. package/output/symbol/index.js.map +1 -0
  118. package/output/types/index.d.ts +2 -0
  119. package/output/types/index.d.ts.map +1 -0
  120. package/output/types/index.js +2 -0
  121. package/output/types/index.js.map +1 -0
  122. package/output/{esm → types}/types.d.ts +3 -1
  123. package/output/types/types.d.ts.map +1 -0
  124. package/output/types/types.js +2 -0
  125. package/output/types/types.js.map +1 -0
  126. package/package.json +42 -15
  127. package/output/esm/element.d.ts +0 -48
  128. package/output/esm/index.d.ts +0 -14
  129. package/output/esm/index.js +0 -1289
  130. package/output/esm/index.js.map +0 -1
  131. package/output/esm/render/common/hooks.d.ts +0 -10
  132. package/output/esm/render/common/plugins/context.d.ts +0 -5
  133. package/output/esm/render/common/plugins/index.d.ts +0 -19
  134. package/output/esm/render/common/plugins/internal/basic.d.ts +0 -10
  135. package/output/esm/render/common/plugins/internal/inject.d.ts +0 -6
  136. package/output/esm/render/index.d.ts +0 -4
  137. package/output/esm/render/server.d.ts +0 -5
  138. package/output/esm/symbol.d.ts +0 -2
  139. package/output/umd/element.d.ts +0 -48
  140. package/output/umd/index.d.ts +0 -14
  141. package/output/umd/index.js +0 -1304
  142. package/output/umd/index.js.map +0 -1
  143. package/output/umd/logger.d.ts +0 -3
  144. package/output/umd/render/browser.d.ts +0 -7
  145. package/output/umd/render/common/hooks.d.ts +0 -10
  146. package/output/umd/render/common/index.d.ts +0 -64
  147. package/output/umd/render/index.d.ts +0 -4
  148. package/output/umd/signal/index.d.ts +0 -6
  149. package/output/umd/symbol.d.ts +0 -2
  150. package/output/umd/types.d.ts +0 -1173
@@ -0,0 +1,436 @@
1
+ import * as signal from '../../signal/index.js';
2
+ import { createLogger } from '../../logger/index.js';
3
+ import { createElement, isValidElement, createErrorRender, } from '../../element/index.js';
4
+ import { globalContext } from './hooks/hooks.js';
5
+ export class InnerAirxComponentContext {
6
+ instance;
7
+ disposers = new Set();
8
+ providedMap = new Map();
9
+ injectedMap = new Map();
10
+ mountListeners = new Set();
11
+ unmountedListeners = new Set();
12
+ triggerMounted() {
13
+ this.mountListeners.forEach(listener => {
14
+ let disposer = undefined;
15
+ try {
16
+ disposer = listener();
17
+ }
18
+ catch (err) {
19
+ console.error(err, listener);
20
+ }
21
+ if (typeof disposer === 'function') {
22
+ this.addDisposer(disposer);
23
+ }
24
+ });
25
+ // 生命周期只会调用一次
26
+ this.mountListeners.clear();
27
+ }
28
+ triggerUnmounted() {
29
+ // 递归的调用子 child 的 Unmounted
30
+ if (this.instance?.child != null) {
31
+ this.instance.child.context.triggerUnmounted();
32
+ }
33
+ // 处理自己
34
+ this.unmountedListeners.forEach(listener => {
35
+ try {
36
+ listener();
37
+ }
38
+ catch (err) {
39
+ console.error(err, listener);
40
+ }
41
+ });
42
+ // 处理兄弟节点
43
+ if (this.instance?.sibling != null) {
44
+ this.instance.sibling.context.triggerUnmounted();
45
+ }
46
+ this.dispose();
47
+ }
48
+ onMounted(listener) {
49
+ this.mountListeners.add(listener);
50
+ }
51
+ onUnmounted(listener) {
52
+ this.unmountedListeners.add(listener);
53
+ }
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
+ provide(key, value) {
56
+ this.providedMap.set(key, value);
57
+ return v => {
58
+ if (typeof v === 'function') {
59
+ const old = this.providedMap.get(key);
60
+ const func = v;
61
+ this.providedMap.set(key, func(old));
62
+ return;
63
+ }
64
+ this.providedMap.set(key, v);
65
+ };
66
+ }
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ inject(key) {
69
+ const getProvideValueForParent = (instance, key) => {
70
+ if (instance && instance.context) {
71
+ const value = instance.context.providedMap.get(key);
72
+ if (value != undefined)
73
+ return value;
74
+ if (instance.parent)
75
+ return getProvideValueForParent(instance.parent, key);
76
+ }
77
+ return undefined;
78
+ };
79
+ // 如果 instance 还没有初始化,直接返回本地缓存的值
80
+ if (!this.instance || !this.instance.parent) {
81
+ return this.injectedMap.get(key);
82
+ }
83
+ const currentParentValue = getProvideValueForParent(this.instance.parent, key);
84
+ this.injectedMap.set(key, currentParentValue); // 更新本地值
85
+ return this.injectedMap.get(key);
86
+ }
87
+ addDisposer(...disposers) {
88
+ disposers.forEach(disposer => {
89
+ this.disposers.add(disposer);
90
+ });
91
+ }
92
+ dispose() {
93
+ this.disposers.forEach((disposer) => {
94
+ try {
95
+ disposer();
96
+ }
97
+ catch (err) {
98
+ // eslint-disable-next-line no-console
99
+ console.error(err, disposer);
100
+ }
101
+ });
102
+ this.disposers.clear();
103
+ this.injectedMap.clear();
104
+ this.providedMap.clear();
105
+ this.mountListeners.clear();
106
+ this.unmountedListeners.clear();
107
+ }
108
+ /**
109
+ * 当 context 传递给外部消费时,隐藏内部实现,仅暴露接口定义的内容
110
+ * @returns 和 AirxComponentContext 接口完全一致的对象
111
+ */
112
+ getSafeContext() {
113
+ return {
114
+ inject: k => this.inject(k),
115
+ provide: (k, v) => this.provide(k, v),
116
+ onMounted: listener => this.onMounted(listener),
117
+ onUnmounted: listener => this.onUnmounted(listener)
118
+ };
119
+ }
120
+ }
121
+ /**
122
+ * 更新 children
123
+ * @param parentInstance 当前正在处理的组件的实例
124
+ * @param children 当前组件的子节点
125
+ */
126
+ export function reconcileChildren(appContext, parentInstance, childrenElementArray) {
127
+ const logger = createLogger('reconcileChildren');
128
+ logger.debug('reconcileChildren', parentInstance, childrenElementArray);
129
+ // parentInstance ←--------
130
+ // | ↑ ↑
131
+ // child parent parent
132
+ // ↓ | |
133
+ // instance -sibling→ instance -→ ....
134
+ /**
135
+ * 内部通过 index 生成 element 的 key
136
+ * 通过前缀来避免和用户手动设置的 key 发生冲突
137
+ * @param index
138
+ * @returns 生成的 key
139
+ */
140
+ function getInnerElementIndexKey(index) {
141
+ return `airx-element-inner-key:${index}`;
142
+ }
143
+ /**
144
+ * 将 children 实例链转成 Map 便于此处消费
145
+ * @param firstChild children 实例的第一个元素
146
+ * @returns 从 firstChild 开始之后的所有 sibling 实例组成的 Map
147
+ */
148
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
+ function getChildrenInstanceMap(firstChild) {
150
+ // 不使用递归是因为递归容易爆栈
151
+ let nextIndex = 0;
152
+ let nextChild = firstChild;
153
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
+ const map = new Map();
155
+ while (nextChild) {
156
+ /* 如果有 key,则将 key 作为 map key,否则将 index 作为 key */
157
+ if (nextChild.element?.props.key != null) {
158
+ map.set(nextChild.element?.props.key, nextChild);
159
+ }
160
+ else {
161
+ map.set(getInnerElementIndexKey(nextIndex), nextChild);
162
+ }
163
+ nextChild = nextChild.sibling;
164
+ nextIndex += 1;
165
+ }
166
+ return map;
167
+ }
168
+ const newChildrenInstanceArray = [];
169
+ const childrenInstanceMap = getChildrenInstanceMap(parentInstance.child);
170
+ function getChildInstance(child, index) {
171
+ if (child.props.key != null) {
172
+ const key = child.props.key;
173
+ const instance = childrenInstanceMap.get(key) || null;
174
+ return [instance, () => childrenInstanceMap.delete(key)];
175
+ }
176
+ const innerKey = getInnerElementIndexKey(index);
177
+ const instance = childrenInstanceMap.get(innerKey) || null;
178
+ return [instance, () => childrenInstanceMap.delete(innerKey)];
179
+ }
180
+ /** 是否复用实例 */
181
+ function isReuseInstance(instance, nextElement) {
182
+ for (const plugin of appContext.plugins) {
183
+ if (typeof plugin.isReuseInstance === 'function') {
184
+ const result = plugin.isReuseInstance(instance, nextElement);
185
+ // 任意一个插件要求不复用就不复用
186
+ if (result === false)
187
+ return false;
188
+ }
189
+ }
190
+ return true;
191
+ }
192
+ function updateMemoProps(instance) {
193
+ if (instance.element == null)
194
+ return;
195
+ if (instance.memoProps == null)
196
+ instance.memoProps = {};
197
+ // 简单来说就是以下几件事情
198
+ // 始终保持 props 的引用不变
199
+ // 1. 创建一个新对象来保存 beforeElement props 的状态
200
+ // 2. 将新的 element 上的 props 引用设置为之前的 props
201
+ // 3. 将新的 element 上的 props 更新到之前的 props 上去
202
+ if (instance.memoProps != null) {
203
+ for (const key in instance.memoProps) {
204
+ delete instance.memoProps[key];
205
+ }
206
+ }
207
+ // 将新的 props 更新上去
208
+ for (const key in instance.element.props) {
209
+ const value = instance.element.props[key];
210
+ instance.memoProps[key] = value;
211
+ }
212
+ }
213
+ function isNeedReRender(instance) {
214
+ for (const plugin of appContext.plugins) {
215
+ if (typeof plugin.isReRender === 'function') {
216
+ const result = plugin.isReRender(instance);
217
+ // 任意一个插件要求重新渲染就重新渲染
218
+ if (result === true)
219
+ return true;
220
+ }
221
+ }
222
+ return false;
223
+ }
224
+ function getElementNamespace(element) {
225
+ const ns = Object.keys(element.props)
226
+ .filter(key => (key === 'xmlns' || key.startsWith('xmlns:')))
227
+ .sort((a, b) => a.length - b.length);
228
+ if (ns.length > 1) {
229
+ console.log('airx currently does not support setting multiple xmlns');
230
+ return '';
231
+ }
232
+ if (ns.some(i => i.startsWith('xmlns:'))) {
233
+ console.log('airx does not currently support setting named namespaces,only supports default');
234
+ return '';
235
+ }
236
+ // 原则上来说 html 仅支持设置默认的 namespace
237
+ return element.props[ns[0]];
238
+ }
239
+ // 依次遍历 child 并和 instance 对比
240
+ for (let index = 0; index < childrenElementArray.length; index++) {
241
+ const element = childrenElementArray[index];
242
+ const [instance, seize] = getChildInstance(element, index);
243
+ if (instance && isReuseInstance(instance, element)) {
244
+ seize(); // 从 childrenInstanceMap 中释放
245
+ newChildrenInstanceArray.push(instance);
246
+ instance.beforeElement = instance.element;
247
+ instance.element = element;
248
+ updateMemoProps(instance);
249
+ // 如果父组件更新了,子组件全部都要更新
250
+ if (instance.needReRender !== true && typeof element.type === 'function') {
251
+ instance.needReRender = parentInstance.needReRender || isNeedReRender(instance);
252
+ }
253
+ }
254
+ else {
255
+ const context = new InnerAirxComponentContext();
256
+ const elementNamespace = getElementNamespace(element);
257
+ const instance = { element, context, elementNamespace };
258
+ newChildrenInstanceArray.push(instance);
259
+ context.instance = instance;
260
+ updateMemoProps(instance);
261
+ // 添加 ref 处理
262
+ if ('ref' in instance.memoProps) {
263
+ context.onMounted(() => {
264
+ const ref = instance.memoProps.ref;
265
+ // 如果组件有自己的 dom
266
+ if (instance.domRef) {
267
+ if (signal.isState(ref)) {
268
+ ref.set(instance.domRef);
269
+ return () => ref.set(undefined);
270
+ }
271
+ if (typeof ref === 'function') {
272
+ ref(instance.domRef);
273
+ return () => ref(undefined);
274
+ }
275
+ }
276
+ });
277
+ }
278
+ }
279
+ }
280
+ // 新的 node
281
+ for (let index = 0; index < newChildrenInstanceArray.length; index++) {
282
+ const instance = newChildrenInstanceArray[index];
283
+ // 确保链的干净
284
+ instance.parent = parentInstance;
285
+ if (index === 0)
286
+ parentInstance.child = instance;
287
+ if (index > 0)
288
+ newChildrenInstanceArray[index - 1].sibling = instance;
289
+ if (index === newChildrenInstanceArray.length - 1)
290
+ delete instance.sibling;
291
+ // 处理 ElementNS: 继承父级 namespace
292
+ if (!instance.elementNamespace && instance.parent?.elementNamespace) {
293
+ // SVG 中 foreignObject 代表外来对象,起到隔离 namespace 的作用
294
+ if (instance.parent.element?.type !== 'foreignObject') {
295
+ instance.elementNamespace = instance.parent.elementNamespace;
296
+ }
297
+ }
298
+ }
299
+ // 剩余的是需要移除的
300
+ if (childrenInstanceMap.size > 0) {
301
+ if (parentInstance.deletions == null) {
302
+ parentInstance.deletions = new Set();
303
+ }
304
+ childrenInstanceMap.forEach(instance => {
305
+ parentInstance.deletions?.add(instance);
306
+ });
307
+ }
308
+ logger.debug('parentInstance', parentInstance);
309
+ }
310
+ /**
311
+ * 处理单个 instance
312
+ * @param instance 当前处理的实例
313
+ * @returns 返回下一个需要处理的 instance
314
+ */
315
+ export function performUnitOfWork(pluginContext, instance, onUpdateRequire) {
316
+ const element = instance.element;
317
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
318
+ function childrenAsElements(children) {
319
+ const childrenAsArray = Array.isArray(children) ? children : [children];
320
+ function isComment(element) {
321
+ if (element === '')
322
+ return true;
323
+ if (element == null)
324
+ return true;
325
+ if (element === false)
326
+ return true;
327
+ return false;
328
+ }
329
+ return childrenAsArray.flat(3).map(element => {
330
+ if (isValidElement(element))
331
+ return element;
332
+ const elementType = isComment(element) ? 'comment' : 'text';
333
+ const textContent = element === '' ? 'empty-string' : String(element);
334
+ return createElement(elementType, { textContent });
335
+ });
336
+ }
337
+ // airx 组件
338
+ if (typeof element?.type === 'function') {
339
+ if (instance.componentReturnValue == null) {
340
+ const component = element.type;
341
+ const beforeContext = globalContext.current;
342
+ globalContext.current = instance.context.getSafeContext();
343
+ let componentReturnValue = undefined;
344
+ try {
345
+ componentReturnValue = component(instance.memoProps);
346
+ }
347
+ catch (error) {
348
+ componentReturnValue = createErrorRender(error);
349
+ }
350
+ // restore context
351
+ globalContext.current = beforeContext;
352
+ instance.componentReturnValue = componentReturnValue;
353
+ // static function component
354
+ if (isValidElement(componentReturnValue)) {
355
+ const elements = childrenAsElements(componentReturnValue);
356
+ reconcileChildren(pluginContext, instance, elements);
357
+ }
358
+ // reaction function component
359
+ if (typeof componentReturnValue === 'function') {
360
+ if (instance.signalWatcher == null) {
361
+ // Watch 是惰性的,只有当 Signal 被读取时才会触发 --!
362
+ const signalWatcher = signal.createWatch(async () => {
363
+ instance.needReRender = true;
364
+ onUpdateRequire?.(instance);
365
+ queueMicrotask(() => {
366
+ signalWatcher.watch();
367
+ const paddings = signalWatcher.getPending();
368
+ for (const padding of paddings)
369
+ padding.get();
370
+ });
371
+ });
372
+ instance.signalWatcher = signalWatcher;
373
+ instance.context.addDisposer(() => signalWatcher.unwatch());
374
+ }
375
+ const childrenComputed = signal.createComputed(() => {
376
+ try {
377
+ if (typeof componentReturnValue === 'function') {
378
+ return componentReturnValue();
379
+ }
380
+ }
381
+ catch (error) {
382
+ return createErrorRender(error)();
383
+ }
384
+ });
385
+ instance.signalWatcher.watch(childrenComputed);
386
+ const children = childrenComputed.get();
387
+ reconcileChildren(pluginContext, instance, childrenAsElements(children));
388
+ }
389
+ }
390
+ if (instance.needReRender) {
391
+ let children;
392
+ try {
393
+ if (isValidElement(instance.componentReturnValue)) {
394
+ children = instance.componentReturnValue;
395
+ }
396
+ else {
397
+ // 如果是由于父组件导致的子组件渲染
398
+ // 直接使用 childrenComputed.get() 将读取到缓存值
399
+ // 因此这里使用 childrenRender 来更新 children 的值
400
+ children = instance.componentReturnValue();
401
+ }
402
+ }
403
+ catch (error) {
404
+ children = createErrorRender(error)();
405
+ }
406
+ reconcileChildren(pluginContext, instance, childrenAsElements(children));
407
+ delete instance.needReRender;
408
+ }
409
+ }
410
+ // 浏览器组件/标签
411
+ if (typeof element?.type === 'string') {
412
+ if ('children' in element.props && Array.isArray(element.props.children)) {
413
+ reconcileChildren(pluginContext, instance, childrenAsElements(element.props.children));
414
+ }
415
+ }
416
+ // 优先处理 child
417
+ if (instance.child) {
418
+ return instance.child;
419
+ }
420
+ /**
421
+ * 递归向上查找可用的兄弟 instance
422
+ * @param instance
423
+ * @returns 返回下一个需要处理的兄弟 instance
424
+ */
425
+ function returnSibling(instance) {
426
+ if (instance.sibling) {
427
+ return instance.sibling;
428
+ }
429
+ if (instance.parent) {
430
+ return returnSibling(instance.parent);
431
+ }
432
+ return null;
433
+ }
434
+ return returnSibling(instance);
435
+ }
436
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../source/render/basic/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { AirxComponentContext } from '../../../element/index.js';
2
+ interface GlobalContext {
3
+ current: AirxComponentContext | null;
4
+ }
5
+ export declare const globalContext: GlobalContext;
6
+ /**
7
+ * 注册组件挂载后回调。
8
+ *
9
+ * 回调返回函数时,该函数会在组件卸载时自动执行。
10
+ *
11
+ * @example
12
+ * import { onMounted } from 'airx'
13
+ *
14
+ * function Comp() {
15
+ * onMounted(() => {
16
+ * const timer = setInterval(() => console.log('tick'), 1000)
17
+ * return () => clearInterval(timer)
18
+ * })
19
+ *
20
+ * return () => 'content'
21
+ * }
22
+ */
23
+ export declare const onMounted: AirxComponentContext['onMounted'];
24
+ /**
25
+ * 注册组件卸载前回调。
26
+ *
27
+ * @example
28
+ * import { onUnmounted } from 'airx'
29
+ *
30
+ * function Comp() {
31
+ * onUnmounted(() => {
32
+ * console.log('component is about to be removed')
33
+ * })
34
+ *
35
+ * return () => 'content'
36
+ * }
37
+ */
38
+ export declare const onUnmounted: AirxComponentContext['onUnmounted'];
39
+ /**
40
+ * 从当前组件上下文读取依赖。
41
+ *
42
+ * @example
43
+ * import { inject } from 'airx'
44
+ *
45
+ * const user = inject<{ name: string }>('user')
46
+ */
47
+ export declare const inject: AirxComponentContext['inject'];
48
+ /**
49
+ * 在当前组件上下文提供依赖。
50
+ *
51
+ * 返回一个更新器,可用于后续更新该依赖值。
52
+ *
53
+ * @example
54
+ * import { provide } from 'airx'
55
+ *
56
+ * const updateTheme = provide('theme', 'light')
57
+ * updateTheme('dark')
58
+ */
59
+ export declare const provide: AirxComponentContext['provide'];
60
+ export {};
61
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../source/render/basic/hooks/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,UAAU,aAAa;IACrB,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;CACrC;AAED,eAAO,MAAM,aAAa,EAAE,aAE3B,CAAA;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS,EAAE,oBAAoB,CAAC,WAAW,CAEvD,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAE3D,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAEjD,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAEnD,CAAA"}
@@ -0,0 +1,72 @@
1
+ export const globalContext = {
2
+ current: null
3
+ };
4
+ function useContext() {
5
+ if (globalContext.current == null) {
6
+ throw new Error('Unable to find a valid component context');
7
+ }
8
+ return globalContext.current;
9
+ }
10
+ /**
11
+ * 注册组件挂载后回调。
12
+ *
13
+ * 回调返回函数时,该函数会在组件卸载时自动执行。
14
+ *
15
+ * @example
16
+ * import { onMounted } from 'airx'
17
+ *
18
+ * function Comp() {
19
+ * onMounted(() => {
20
+ * const timer = setInterval(() => console.log('tick'), 1000)
21
+ * return () => clearInterval(timer)
22
+ * })
23
+ *
24
+ * return () => 'content'
25
+ * }
26
+ */
27
+ export const onMounted = (listener) => {
28
+ return useContext().onMounted(listener);
29
+ };
30
+ /**
31
+ * 注册组件卸载前回调。
32
+ *
33
+ * @example
34
+ * import { onUnmounted } from 'airx'
35
+ *
36
+ * function Comp() {
37
+ * onUnmounted(() => {
38
+ * console.log('component is about to be removed')
39
+ * })
40
+ *
41
+ * return () => 'content'
42
+ * }
43
+ */
44
+ export const onUnmounted = (listener) => {
45
+ return useContext().onUnmounted(listener);
46
+ };
47
+ /**
48
+ * 从当前组件上下文读取依赖。
49
+ *
50
+ * @example
51
+ * import { inject } from 'airx'
52
+ *
53
+ * const user = inject<{ name: string }>('user')
54
+ */
55
+ export const inject = (key) => {
56
+ return useContext().inject(key);
57
+ };
58
+ /**
59
+ * 在当前组件上下文提供依赖。
60
+ *
61
+ * 返回一个更新器,可用于后续更新该依赖值。
62
+ *
63
+ * @example
64
+ * import { provide } from 'airx'
65
+ *
66
+ * const updateTheme = provide('theme', 'light')
67
+ * updateTheme('dark')
68
+ */
69
+ export const provide = (key, value) => {
70
+ return useContext().provide(key, value);
71
+ };
72
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../source/render/basic/hooks/hooks.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,OAAO,EAAE,IAAI;CACd,CAAA;AAED,SAAS,UAAU;IACjB,IAAI,aAAa,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,CAAA;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAsC,CAAC,QAAQ,EAAE,EAAE;IACvE,OAAO,UAAU,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAwC,CAAC,QAAQ,EAAE,EAAE;IAC3E,OAAO,UAAU,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;AAC3C,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,MAAM,GAAmC,CAAC,GAAG,EAAE,EAAE;IAC5D,OAAO,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACjC,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,OAAO,GAAoC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IACrE,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { inject, provide, onMounted, onUnmounted } from './hooks.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../source/render/basic/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,SAAS,EACT,WAAW,EACZ,MAAM,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { inject, provide, onMounted, onUnmounted } from './hooks.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../source/render/basic/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,SAAS,EACT,WAAW,EACZ,MAAM,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './common.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/render/basic/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './common.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/render/basic/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA"}
@@ -1,5 +1,6 @@
1
- import { Plugin } from '.';
1
+ import { Plugin } from '../index.js';
2
2
  export declare class PluginContext {
3
3
  plugins: Plugin[];
4
4
  registerPlugin(...plugins: Plugin[]): void;
5
5
  }
6
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../../source/render/basic/plugins/context/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAIpC,qBAAa,aAAa;IACxB,OAAO,EAAE,MAAM,EAAE,CAGhB;IAED,cAAc,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE;CAGpC"}
@@ -0,0 +1,12 @@
1
+ import { BasicLogic } from '../internal/basic/basic.js';
2
+ import { InjectSystem } from '../internal/inject/inject.js';
3
+ export class PluginContext {
4
+ plugins = [
5
+ new BasicLogic(),
6
+ new InjectSystem()
7
+ ];
8
+ registerPlugin(...plugins) {
9
+ this.plugins.push(...plugins);
10
+ }
11
+ }
12
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../source/render/basic/plugins/context/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,MAAM,OAAO,aAAa;IACxB,OAAO,GAAa;QAClB,IAAI,UAAU,EAAE;QAChB,IAAI,YAAY,EAAE;KACnB,CAAA;IAED,cAAc,CAAC,GAAG,OAAiB;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;IAC/B,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { PluginContext } from './context.js';
2
+ //# sourceMappingURL=index.d.ts.map