airx 0.1.3 → 0.1.4
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/README.md +1 -1
- package/output/index.d.ts +2 -2
- package/output/index.js +1 -1
- package/output/index.js.map +1 -1
- package/output/render/browser.d.ts +3 -0
- package/output/render/browser.js +272 -0
- package/output/render/browser.js.map +1 -0
- package/output/{render.d.ts → render/common/index.d.ts} +17 -6
- package/output/render/common/index.js +416 -0
- package/output/render/common/index.js.map +1 -0
- package/output/render/index.d.ts +2 -0
- package/output/render/index.js +3 -0
- package/output/render/index.js.map +1 -0
- package/output/render/server.d.ts +9 -0
- package/output/render/server.js +9 -0
- package/output/render/server.js.map +1 -0
- package/package.json +1 -1
- package/output/render.js +0 -663
- package/output/render.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# airx
|
|
1
|
+
# airx [](https://www.npmjs.com/package/airx) [](https://github.com/airxjs/airx/actions/workflows/check.yml)
|
|
2
2
|
|
|
3
3
|
Arix is a front-end framework based on JSX, but it doesn't have hooks like React.
|
|
4
4
|
|
package/output/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AirxElement } from './element';
|
|
2
2
|
export * from './types';
|
|
3
|
-
export { createRef } from './reactive';
|
|
3
|
+
export { createRef, Ref } from './reactive';
|
|
4
4
|
export { Fragment, createElement, AirxComponent, AirxElement, AirxChildren, AirxComponentContext } from './element';
|
|
5
|
-
export {
|
|
5
|
+
export { inject, provide, onMounted, onUnmounted } from './render';
|
|
6
6
|
export interface AirxApp {
|
|
7
7
|
mount: (container: HTMLElement) => AirxApp;
|
|
8
8
|
}
|
package/output/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { render } from './render';
|
|
|
2
2
|
export * from './types';
|
|
3
3
|
export { createRef } from './reactive';
|
|
4
4
|
export { Fragment, createElement } from './element';
|
|
5
|
-
export {
|
|
5
|
+
export { inject, provide, onMounted, onUnmounted } from './render';
|
|
6
6
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
7
|
export function createApp(element) {
|
|
8
8
|
const app = {
|
package/output/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAc,SAAS,CAAA;AAEvB,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAc,SAAS,CAAA;AAEvB,OAAO,EAAE,SAAS,EAAO,MAAM,YAAY,CAAA;AAE3C,OAAO,EACL,QAAQ,EACR,aAAa,EAKd,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,MAAM,EACN,OAAO,EACP,SAAS,EACT,WAAW,EACZ,MAAM,UAAU,CAAA;AAOjB,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,MAAM,GAAG,GAAY;QACnB,yBAAyB;QACzB,yBAAyB;QACzB,eAAe;QACf,KAAK;QAEL,KAAK,EAAE,CAAC,SAAsB,EAAE,EAAE;YAChC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YAC1B,OAAO,GAAG,CAAA;QACZ,CAAC;KACF,CAAA;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { createLogger } from '../logger';
|
|
2
|
+
import { InnerAirxComponentContext, performUnitOfWork } from './common';
|
|
3
|
+
export function render(element, domRef) {
|
|
4
|
+
const rootInstance = {
|
|
5
|
+
domRef,
|
|
6
|
+
context: new InnerAirxComponentContext()
|
|
7
|
+
};
|
|
8
|
+
rootInstance.context.instance = rootInstance;
|
|
9
|
+
const context = {
|
|
10
|
+
rootInstance,
|
|
11
|
+
nextUnitOfWork: null,
|
|
12
|
+
needCommitDom: false
|
|
13
|
+
};
|
|
14
|
+
const appInstance = {
|
|
15
|
+
element,
|
|
16
|
+
parent: context.rootInstance,
|
|
17
|
+
memoProps: { ...element.props },
|
|
18
|
+
context: new InnerAirxComponentContext()
|
|
19
|
+
};
|
|
20
|
+
appInstance.context.instance = appInstance;
|
|
21
|
+
context.rootInstance.child = appInstance;
|
|
22
|
+
context.nextUnitOfWork = appInstance;
|
|
23
|
+
/**
|
|
24
|
+
* 提交 Dom 变化
|
|
25
|
+
*/
|
|
26
|
+
function commitDom(rootInstance, rootNode) {
|
|
27
|
+
const logger = createLogger('commitDom');
|
|
28
|
+
logger.debug('commitDom', rootInstance);
|
|
29
|
+
function updateDomProperties(dom, nextProps, prevProps = {}) {
|
|
30
|
+
const isKey = (key) => key === 'key';
|
|
31
|
+
const isStyle = (key) => key === 'style';
|
|
32
|
+
const isClass = (key) => key === 'class';
|
|
33
|
+
const isEvent = (key) => key.startsWith("on");
|
|
34
|
+
const isChildren = (key) => key === 'children';
|
|
35
|
+
const isGone = (_prev, next) => (key) => !(key in next);
|
|
36
|
+
const isNew = (prev, next) => (key) => prev[key] !== next[key];
|
|
37
|
+
const isProperty = (key) => !isChildren(key) && !isEvent(key) && !isStyle(key) && !isClass(key) && !isKey(key);
|
|
38
|
+
// https://developer.mozilla.org/zh-CN/docs/Web/API/Node
|
|
39
|
+
if (dom.nodeName === '#text' || dom.nodeName === '#comment') {
|
|
40
|
+
const textNode = dom;
|
|
41
|
+
if (textNode.nodeValue !== nextProps.textContent) {
|
|
42
|
+
textNode.nodeValue = String(nextProps.textContent);
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// remove old style
|
|
47
|
+
const oldStyle = prevProps?.style;
|
|
48
|
+
if (typeof oldStyle === 'object' && oldStyle != null) {
|
|
49
|
+
Object.keys(oldStyle).forEach(key => {
|
|
50
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
51
|
+
delete dom.style[key];
|
|
52
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// add new style
|
|
56
|
+
const newStyle = nextProps?.style;
|
|
57
|
+
if (typeof newStyle === 'object' && newStyle != null) {
|
|
58
|
+
Object.keys(newStyle).forEach((key) => {
|
|
59
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
60
|
+
const value = newStyle?.[key];
|
|
61
|
+
dom.style[key] = value == null ? '' : value;
|
|
62
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (dom.className !== nextProps?.class) {
|
|
66
|
+
if (!nextProps?.class) {
|
|
67
|
+
dom.removeAttribute('class');
|
|
68
|
+
}
|
|
69
|
+
else if (typeof nextProps?.class === 'string') {
|
|
70
|
+
dom.setAttribute('class', nextProps?.class);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//Remove old or changed event listeners
|
|
74
|
+
Object.keys(prevProps)
|
|
75
|
+
.filter(isEvent)
|
|
76
|
+
.filter(key => !(key in nextProps) ||
|
|
77
|
+
isNew(prevProps, nextProps)(key))
|
|
78
|
+
.forEach(name => {
|
|
79
|
+
const eventType = name
|
|
80
|
+
.toLowerCase()
|
|
81
|
+
.substring(2);
|
|
82
|
+
if (prevProps[name] == null)
|
|
83
|
+
return;
|
|
84
|
+
if (typeof prevProps[name] !== 'function') {
|
|
85
|
+
console.error('EventListener is not a function');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
89
|
+
dom.removeEventListener(eventType, prevProps[name]);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
// Add event listeners
|
|
93
|
+
Object.keys(nextProps)
|
|
94
|
+
.filter(isEvent)
|
|
95
|
+
.filter(isNew(prevProps, nextProps))
|
|
96
|
+
.forEach(name => {
|
|
97
|
+
const eventType = name
|
|
98
|
+
.toLowerCase()
|
|
99
|
+
.substring(2);
|
|
100
|
+
if (nextProps[name] == null)
|
|
101
|
+
return;
|
|
102
|
+
if (typeof nextProps[name] !== 'function') {
|
|
103
|
+
console.error('EventListener is not a function');
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
107
|
+
dom.addEventListener(eventType, nextProps[name]);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Remove old properties
|
|
111
|
+
Object.keys(prevProps)
|
|
112
|
+
.filter(isProperty)
|
|
113
|
+
.filter(isGone(prevProps, nextProps))
|
|
114
|
+
.forEach(name => dom.setAttribute(name, ''));
|
|
115
|
+
// Set new or changed properties
|
|
116
|
+
Object.keys(nextProps)
|
|
117
|
+
.filter(isProperty)
|
|
118
|
+
.filter(isNew(prevProps, nextProps))
|
|
119
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
120
|
+
.forEach(name => dom.setAttribute(name, nextProps[name]));
|
|
121
|
+
}
|
|
122
|
+
function getParentDom(instance) {
|
|
123
|
+
if (instance.parent?.domRef != null) {
|
|
124
|
+
return instance.parent.domRef;
|
|
125
|
+
}
|
|
126
|
+
if (instance.parent) {
|
|
127
|
+
return getParentDom(instance.parent);
|
|
128
|
+
}
|
|
129
|
+
throw new Error('Cant find dom');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 查找 instance 下所有的一级 dom
|
|
133
|
+
* @param instance
|
|
134
|
+
* @returns
|
|
135
|
+
*/
|
|
136
|
+
function getChildDoms(instance) {
|
|
137
|
+
const domList = [];
|
|
138
|
+
const todoList = [instance];
|
|
139
|
+
while (todoList.length > 0) {
|
|
140
|
+
const current = todoList.pop();
|
|
141
|
+
// 找到真实 dom 直接提交
|
|
142
|
+
if (current?.domRef != null) {
|
|
143
|
+
domList.push(current.domRef);
|
|
144
|
+
}
|
|
145
|
+
// 有子节点但是无真实 dom,向下继续查找
|
|
146
|
+
if (current?.domRef == null) {
|
|
147
|
+
if (current?.child != null) {
|
|
148
|
+
todoList.push(current.child);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// 可能有兄弟节点,则需要继续查找
|
|
152
|
+
if (current?.sibling != null) {
|
|
153
|
+
todoList.push(current.sibling);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return domList;
|
|
157
|
+
}
|
|
158
|
+
function commitInstanceDom(nextInstance, oldNode) {
|
|
159
|
+
// 移除标删元素
|
|
160
|
+
if (nextInstance.deletions) {
|
|
161
|
+
for (const deletion of nextInstance.deletions) {
|
|
162
|
+
const domList = getChildDoms(deletion);
|
|
163
|
+
for (let index = 0; index < domList.length; index++) {
|
|
164
|
+
const dom = domList[index];
|
|
165
|
+
if (dom && dom.parentNode)
|
|
166
|
+
dom.parentNode.removeChild(dom);
|
|
167
|
+
}
|
|
168
|
+
deletion.context.triggerUnmounted();
|
|
169
|
+
}
|
|
170
|
+
nextInstance.deletions.clear();
|
|
171
|
+
}
|
|
172
|
+
// 创建 dom
|
|
173
|
+
if (nextInstance.domRef == null) {
|
|
174
|
+
if (nextInstance.element == null)
|
|
175
|
+
throw new Error('???');
|
|
176
|
+
if (typeof nextInstance.element.type === 'string') {
|
|
177
|
+
if (nextInstance.element.type === 'text') {
|
|
178
|
+
const textContent = nextInstance.element.props.textContent;
|
|
179
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
180
|
+
nextInstance.domRef = document.createTextNode(textContent);
|
|
181
|
+
}
|
|
182
|
+
else if (nextInstance.element.type === 'comment') {
|
|
183
|
+
const textContent = nextInstance.element.props.textContent;
|
|
184
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
185
|
+
nextInstance.domRef = document.createComment(textContent);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
nextInstance.domRef = document.createElement(nextInstance.element.type);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// 更新属性
|
|
193
|
+
if (nextInstance.domRef != null && nextInstance.element != null) {
|
|
194
|
+
updateDomProperties(nextInstance.domRef, nextInstance.element.props, nextInstance.beforeElement?.props);
|
|
195
|
+
}
|
|
196
|
+
// 插入 parent
|
|
197
|
+
// TODO: 针对仅移动时优化
|
|
198
|
+
if (nextInstance.domRef != null) {
|
|
199
|
+
if (oldNode !== nextInstance.domRef) {
|
|
200
|
+
if (nextInstance.domRef.parentNode) {
|
|
201
|
+
nextInstance.domRef.parentNode.removeChild(nextInstance.domRef);
|
|
202
|
+
}
|
|
203
|
+
const parentDom = getParentDom(nextInstance);
|
|
204
|
+
parentDom.appendChild(nextInstance.domRef);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function commitWalkV2(initInstance, initNode) {
|
|
209
|
+
// 创建一个栈,将根节点压入栈中
|
|
210
|
+
const stack = [[initInstance, initNode]];
|
|
211
|
+
while (stack.length > 0) {
|
|
212
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
213
|
+
const stackLayer = stack.pop();
|
|
214
|
+
if (typeof stackLayer === 'function') {
|
|
215
|
+
stackLayer();
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
const [instance, node] = stackLayer;
|
|
219
|
+
commitInstanceDom(instance, node);
|
|
220
|
+
// stack 是先入后出
|
|
221
|
+
// 实际上是先渲染 child
|
|
222
|
+
// 这里然后再渲染 sibling
|
|
223
|
+
// 执行生命周期的 Mount
|
|
224
|
+
stack.push(() => instance.context.triggerMounted());
|
|
225
|
+
// 更新下一个兄弟节点
|
|
226
|
+
if (instance.sibling != null) {
|
|
227
|
+
const siblingNode = instance.domRef
|
|
228
|
+
? instance.domRef.nextSibling
|
|
229
|
+
: node?.nextSibling;
|
|
230
|
+
stack.push([instance.sibling, siblingNode || undefined]);
|
|
231
|
+
}
|
|
232
|
+
// 更新下一个子节点
|
|
233
|
+
if (instance.child != null) {
|
|
234
|
+
const childNode = instance.domRef
|
|
235
|
+
? instance.domRef.firstChild
|
|
236
|
+
: node;
|
|
237
|
+
stack.push([instance.child, childNode || undefined]);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
commitWalkV2(rootInstance, rootNode);
|
|
242
|
+
}
|
|
243
|
+
function onUpdateRequire() {
|
|
244
|
+
if (context.nextUnitOfWork == null && context.rootInstance.child) {
|
|
245
|
+
context.nextUnitOfWork = context.rootInstance.child;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* 调度
|
|
250
|
+
*/
|
|
251
|
+
function workLoop(deadline) {
|
|
252
|
+
let shouldYield = false;
|
|
253
|
+
const logger = createLogger('workLoop');
|
|
254
|
+
while (context.nextUnitOfWork && !shouldYield) {
|
|
255
|
+
logger.debug('nextUnitOfWork', context.nextUnitOfWork);
|
|
256
|
+
context.nextUnitOfWork = performUnitOfWork(context.nextUnitOfWork, onUpdateRequire);
|
|
257
|
+
if (context.nextUnitOfWork == null)
|
|
258
|
+
context.needCommitDom = true;
|
|
259
|
+
if (deadline)
|
|
260
|
+
shouldYield = deadline.timeRemaining() < 1;
|
|
261
|
+
}
|
|
262
|
+
if (context.needCommitDom && context.rootInstance.child) {
|
|
263
|
+
commitDom(context.rootInstance.child, context.rootInstance.domRef?.firstChild || undefined);
|
|
264
|
+
context.needCommitDom = false;
|
|
265
|
+
}
|
|
266
|
+
requestIdleCallback(workLoop);
|
|
267
|
+
}
|
|
268
|
+
// 开始调度
|
|
269
|
+
requestIdleCallback(workLoop);
|
|
270
|
+
return context.rootInstance;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../source/render/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { Ref } from '
|
|
2
|
-
import {
|
|
3
|
-
export declare function useContext(): AirxComponentContext;
|
|
1
|
+
import { Ref } from '../../reactive';
|
|
2
|
+
import { AirxComponentContext, AirxComponentMountedListener, AirxComponentRender, AirxComponentUnmountedListener, AirxElement } from '../../element';
|
|
4
3
|
export declare const onMounted: AirxComponentContext['onMounted'];
|
|
5
4
|
export declare const onUnmounted: AirxComponentContext['onUnmounted'];
|
|
6
5
|
export declare const inject: AirxComponentContext['inject'];
|
|
7
6
|
export declare const provide: AirxComponentContext['provide'];
|
|
8
7
|
export type Disposer = () => void;
|
|
9
|
-
declare class InnerAirxComponentContext implements AirxComponentContext {
|
|
8
|
+
export declare class InnerAirxComponentContext implements AirxComponentContext {
|
|
10
9
|
instance?: Instance;
|
|
11
10
|
private disposers;
|
|
12
11
|
private providedMap;
|
|
@@ -35,7 +34,7 @@ declare class InnerAirxComponentContext implements AirxComponentContext {
|
|
|
35
34
|
* ↓ | |
|
|
36
35
|
* instance -sibling→ instance...
|
|
37
36
|
*/
|
|
38
|
-
interface Instance {
|
|
37
|
+
export interface Instance {
|
|
39
38
|
domRef?: HTMLElement;
|
|
40
39
|
child?: Instance;
|
|
41
40
|
parent?: Instance;
|
|
@@ -48,5 +47,17 @@ interface Instance {
|
|
|
48
47
|
requiredUpdate?: boolean;
|
|
49
48
|
context: InnerAirxComponentContext;
|
|
50
49
|
}
|
|
51
|
-
|
|
50
|
+
/**
|
|
51
|
+
* 更新 children
|
|
52
|
+
* @param parentInstance 当前正在处理的组件的实例
|
|
53
|
+
* @param children 当前组件的子节点
|
|
54
|
+
*/
|
|
55
|
+
export declare function reconcileChildren(parentInstance: Instance, childrenElementArray: AirxElement[]): void;
|
|
56
|
+
type OnUpdateRequire = (instance: Instance) => void;
|
|
57
|
+
/**
|
|
58
|
+
* 处理单个 instance
|
|
59
|
+
* @param instance 当前处理的实例
|
|
60
|
+
* @returns 返回下一个需要处理的 instance
|
|
61
|
+
*/
|
|
62
|
+
export declare function performUnitOfWork(instance: Instance, onUpdateRequire?: OnUpdateRequire): Instance | null;
|
|
52
63
|
export {};
|