@rsmax/runtime 1.0.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.
- package/CHANGELOG.md +6 -0
- package/cjs/AppContainer.d.ts +22 -0
- package/cjs/AppContainer.js +40 -0
- package/cjs/Container.d.ts +39 -0
- package/cjs/Container.js +120 -0
- package/cjs/ReactPortal.d.ts +2 -0
- package/cjs/ReactPortal.js +15 -0
- package/cjs/SyntheticEvent/constants.d.ts +2 -0
- package/cjs/SyntheticEvent/constants.js +13 -0
- package/cjs/SyntheticEvent/createCallbackProxy.d.ts +2 -0
- package/cjs/SyntheticEvent/createCallbackProxy.js +59 -0
- package/cjs/SyntheticEvent/stopPropagation.d.ts +13 -0
- package/cjs/SyntheticEvent/stopPropagation.js +33 -0
- package/cjs/VNode.d.ts +45 -0
- package/cjs/VNode.js +276 -0
- package/cjs/constants.d.ts +3 -0
- package/cjs/constants.js +6 -0
- package/cjs/createAppConfig.d.ts +2 -0
- package/cjs/createAppConfig.js +124 -0
- package/cjs/createComponentConfig.d.ts +2 -0
- package/cjs/createComponentConfig.js +74 -0
- package/cjs/createComponentConfig.wechat.d.ts +2 -0
- package/cjs/createComponentConfig.wechat.js +89 -0
- package/cjs/createHostComponent.d.ts +2 -0
- package/cjs/createHostComponent.js +20 -0
- package/cjs/createNativeComponent.d.ts +2 -0
- package/cjs/createNativeComponent.js +23 -0
- package/cjs/createPageConfig.d.ts +3 -0
- package/cjs/createPageConfig.js +191 -0
- package/cjs/hooks/index.d.ts +3 -0
- package/cjs/hooks/index.js +15 -0
- package/cjs/hooks/useNativeEffect.d.ts +3 -0
- package/cjs/hooks/useNativeEffect.js +13 -0
- package/cjs/hooks/useQuery.d.ts +3 -0
- package/cjs/hooks/useQuery.js +9 -0
- package/cjs/hostConfig/diffProperties.d.ts +1 -0
- package/cjs/hostConfig/diffProperties.js +100 -0
- package/cjs/hostConfig/index.d.ts +42 -0
- package/cjs/hostConfig/index.js +159 -0
- package/cjs/index.d.ts +14 -0
- package/cjs/index.js +43 -0
- package/cjs/instanceId.d.ts +2 -0
- package/cjs/instanceId.js +14 -0
- package/cjs/nativeEffect.d.ts +10 -0
- package/cjs/nativeEffect.js +25 -0
- package/cjs/polyfills/Function.d.ts +0 -0
- package/cjs/polyfills/Function.js +29 -0
- package/cjs/propsAlias.d.ts +6 -0
- package/cjs/propsAlias.js +51 -0
- package/cjs/render.d.ts +6 -0
- package/cjs/render.js +35 -0
- package/cjs/stopPullDownRefresh/index.ali.d.ts +2 -0
- package/cjs/stopPullDownRefresh/index.ali.js +3 -0
- package/cjs/stopPullDownRefresh/index.d.ts +1 -0
- package/cjs/stopPullDownRefresh/index.js +6 -0
- package/cjs/stopPullDownRefresh/index.toutiao.d.ts +2 -0
- package/cjs/stopPullDownRefresh/index.toutiao.js +3 -0
- package/cjs/stopPullDownRefresh/index.wechat.d.ts +2 -0
- package/cjs/stopPullDownRefresh/index.wechat.js +3 -0
- package/cjs/utils/capitalize.d.ts +1 -0
- package/cjs/utils/capitalize.js +6 -0
- package/cjs/utils/isClassComponent.d.ts +2 -0
- package/cjs/utils/isClassComponent.js +6 -0
- package/cjs/utils/lowercase.d.ts +1 -0
- package/cjs/utils/lowercase.js +6 -0
- package/cjs/utils/plainStyle/CSSProperty.d.ts +6 -0
- package/cjs/utils/plainStyle/CSSProperty.js +71 -0
- package/cjs/utils/plainStyle/index.d.ts +2 -0
- package/cjs/utils/plainStyle/index.js +45 -0
- package/esm/AppContainer.d.ts +22 -0
- package/esm/AppContainer.js +34 -0
- package/esm/Container.d.ts +39 -0
- package/esm/Container.js +114 -0
- package/esm/ReactPortal.d.ts +2 -0
- package/esm/ReactPortal.js +11 -0
- package/esm/SyntheticEvent/constants.d.ts +2 -0
- package/esm/SyntheticEvent/constants.js +10 -0
- package/esm/SyntheticEvent/createCallbackProxy.d.ts +2 -0
- package/esm/SyntheticEvent/createCallbackProxy.js +32 -0
- package/esm/SyntheticEvent/stopPropagation.d.ts +13 -0
- package/esm/SyntheticEvent/stopPropagation.js +28 -0
- package/esm/VNode.d.ts +45 -0
- package/esm/VNode.js +250 -0
- package/esm/constants.d.ts +3 -0
- package/esm/constants.js +3 -0
- package/esm/createAppConfig.d.ts +2 -0
- package/esm/createAppConfig.js +95 -0
- package/esm/createComponentConfig.d.ts +2 -0
- package/esm/createComponentConfig.js +45 -0
- package/esm/createComponentConfig.wechat.d.ts +2 -0
- package/esm/createComponentConfig.wechat.js +60 -0
- package/esm/createHostComponent.d.ts +2 -0
- package/esm/createHostComponent.js +14 -0
- package/esm/createNativeComponent.d.ts +2 -0
- package/esm/createNativeComponent.js +17 -0
- package/esm/createPageConfig.d.ts +3 -0
- package/esm/createPageConfig.js +183 -0
- package/esm/hooks/index.d.ts +3 -0
- package/esm/hooks/index.js +3 -0
- package/esm/hooks/useNativeEffect.d.ts +3 -0
- package/esm/hooks/useNativeEffect.js +7 -0
- package/esm/hooks/useQuery.d.ts +3 -0
- package/esm/hooks/useQuery.js +6 -0
- package/esm/hostConfig/diffProperties.d.ts +1 -0
- package/esm/hostConfig/diffProperties.js +97 -0
- package/esm/hostConfig/index.d.ts +42 -0
- package/esm/hostConfig/index.js +154 -0
- package/esm/index.d.ts +14 -0
- package/esm/index.js +14 -0
- package/esm/instanceId.d.ts +2 -0
- package/esm/instanceId.js +9 -0
- package/esm/nativeEffect.d.ts +10 -0
- package/esm/nativeEffect.js +23 -0
- package/esm/polyfills/Function.d.ts +0 -0
- package/esm/polyfills/Function.js +29 -0
- package/esm/propsAlias.d.ts +6 -0
- package/esm/propsAlias.js +42 -0
- package/esm/render.d.ts +6 -0
- package/esm/render.js +28 -0
- package/esm/stopPullDownRefresh/index.ali.d.ts +2 -0
- package/esm/stopPullDownRefresh/index.ali.js +1 -0
- package/esm/stopPullDownRefresh/index.d.ts +1 -0
- package/esm/stopPullDownRefresh/index.js +3 -0
- package/esm/stopPullDownRefresh/index.toutiao.d.ts +2 -0
- package/esm/stopPullDownRefresh/index.toutiao.js +1 -0
- package/esm/stopPullDownRefresh/index.wechat.d.ts +2 -0
- package/esm/stopPullDownRefresh/index.wechat.js +1 -0
- package/esm/utils/capitalize.d.ts +1 -0
- package/esm/utils/capitalize.js +3 -0
- package/esm/utils/isClassComponent.d.ts +2 -0
- package/esm/utils/isClassComponent.js +3 -0
- package/esm/utils/lowercase.d.ts +1 -0
- package/esm/utils/lowercase.js +3 -0
- package/esm/utils/plainStyle/CSSProperty.d.ts +6 -0
- package/esm/utils/plainStyle/CSSProperty.js +68 -0
- package/esm/utils/plainStyle/index.d.ts +2 -0
- package/esm/utils/plainStyle/index.js +43 -0
- package/package.json +56 -0
- package/typings/index.d.ts +6 -0
- package/vitest.config.js +9 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resetPageId = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const framework_shared_1 = require("@rsmax/framework-shared");
|
|
9
|
+
const stopPullDownRefresh_1 = __importDefault(require("./stopPullDownRefresh"));
|
|
10
|
+
const Container_1 = __importDefault(require("./Container"));
|
|
11
|
+
const ReactPortal_1 = require("./ReactPortal");
|
|
12
|
+
const render_1 = __importDefault(require("./render"));
|
|
13
|
+
const index_1 = require("./index");
|
|
14
|
+
let idCounter = 0;
|
|
15
|
+
function generatePageId() {
|
|
16
|
+
const id = idCounter;
|
|
17
|
+
const pageId = 'page_' + id;
|
|
18
|
+
idCounter += 1;
|
|
19
|
+
return pageId;
|
|
20
|
+
}
|
|
21
|
+
// for testing
|
|
22
|
+
function resetPageId() {
|
|
23
|
+
idCounter = 0;
|
|
24
|
+
}
|
|
25
|
+
exports.resetPageId = resetPageId;
|
|
26
|
+
function createPageConfig(Page, name) {
|
|
27
|
+
var _a;
|
|
28
|
+
let app;
|
|
29
|
+
try {
|
|
30
|
+
app = getApp();
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
app = null;
|
|
34
|
+
}
|
|
35
|
+
const config = {
|
|
36
|
+
data: {
|
|
37
|
+
root: {
|
|
38
|
+
children: [],
|
|
39
|
+
},
|
|
40
|
+
modalRoot: {
|
|
41
|
+
children: [],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
wrapperRef: react_1.default.createRef(),
|
|
45
|
+
lifecycleCallback: {},
|
|
46
|
+
onLoad(query) {
|
|
47
|
+
const PageWrapper = (0, framework_shared_1.createPageWrapper)(Page, name);
|
|
48
|
+
this.pageId = generatePageId();
|
|
49
|
+
this.lifecycleCallback = {};
|
|
50
|
+
this.data = {
|
|
51
|
+
root: {
|
|
52
|
+
children: [],
|
|
53
|
+
},
|
|
54
|
+
modalRoot: {
|
|
55
|
+
children: [],
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
this.query = query;
|
|
59
|
+
this.container = new Container_1.default(this, 'root');
|
|
60
|
+
this.modalContainer = new Container_1.default(this, 'modalRoot');
|
|
61
|
+
const pageElement = react_1.default.createElement(PageWrapper, {
|
|
62
|
+
page: this,
|
|
63
|
+
query,
|
|
64
|
+
modalContainer: this.modalContainer,
|
|
65
|
+
ref: this.wrapperRef,
|
|
66
|
+
});
|
|
67
|
+
if (app && app._mount) {
|
|
68
|
+
this.element = (0, ReactPortal_1.createPortal)(pageElement, this.container, this.pageId);
|
|
69
|
+
app._mount(this);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.element = (0, render_1.default)(pageElement, this.container);
|
|
73
|
+
}
|
|
74
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.load, query);
|
|
75
|
+
},
|
|
76
|
+
onUnload() {
|
|
77
|
+
this.callLifecycle(framework_shared_1.Lifecycle.unload);
|
|
78
|
+
this.unloaded = true;
|
|
79
|
+
this.container.clearUpdate();
|
|
80
|
+
if (app) {
|
|
81
|
+
app._unmount(this);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
onTabItemTap(e) {
|
|
85
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.tabItemTap, e);
|
|
86
|
+
},
|
|
87
|
+
onResize(e) {
|
|
88
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.resize, e);
|
|
89
|
+
},
|
|
90
|
+
/**
|
|
91
|
+
* Lifecycle start
|
|
92
|
+
*/
|
|
93
|
+
registerLifecycle(lifecycle, callback) {
|
|
94
|
+
this.lifecycleCallback[lifecycle] = this.lifecycleCallback[lifecycle] || [];
|
|
95
|
+
this.lifecycleCallback[lifecycle].push(callback);
|
|
96
|
+
return () => {
|
|
97
|
+
this.lifecycleCallback[lifecycle].splice(this.lifecycleCallback[lifecycle].indexOf(callback), 1);
|
|
98
|
+
};
|
|
99
|
+
},
|
|
100
|
+
callLifecycle(lifecycle, ...args) {
|
|
101
|
+
const callbacks = this.lifecycleCallback[lifecycle] || [];
|
|
102
|
+
let result;
|
|
103
|
+
// 生命周期中可能改变 state 导致 callbacks 发生变化
|
|
104
|
+
[...callbacks].map((callback) => {
|
|
105
|
+
result = (0, index_1.unstable_batchedUpdates)(args => {
|
|
106
|
+
return callback(...args);
|
|
107
|
+
}, args);
|
|
108
|
+
});
|
|
109
|
+
if (result) {
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
const callback = (0, framework_shared_1.callbackName)(lifecycle);
|
|
113
|
+
if (this.wrapperRef.current && this.wrapperRef.current[callback]) {
|
|
114
|
+
return this.wrapperRef.current[callback](...args);
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
events: {
|
|
118
|
+
// 页面返回时触发
|
|
119
|
+
onBack(e) {
|
|
120
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.back, e);
|
|
121
|
+
},
|
|
122
|
+
// 键盘高度变化时触发
|
|
123
|
+
onKeyboardHeight(e) {
|
|
124
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.keyboardHeight, e);
|
|
125
|
+
},
|
|
126
|
+
onTabItemTap(e) {
|
|
127
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.tabItemTap, e);
|
|
128
|
+
},
|
|
129
|
+
// 点击但切换tabItem前触发
|
|
130
|
+
beforeTabItemTap() {
|
|
131
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.beforeTabItemTap);
|
|
132
|
+
},
|
|
133
|
+
onResize(e) {
|
|
134
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.resize, e);
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
onShow() {
|
|
138
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.show);
|
|
139
|
+
},
|
|
140
|
+
onHide() {
|
|
141
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.hide);
|
|
142
|
+
},
|
|
143
|
+
onReady() {
|
|
144
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.ready);
|
|
145
|
+
},
|
|
146
|
+
onPullDownRefresh(e) {
|
|
147
|
+
const result = this.callLifecycle(framework_shared_1.Lifecycle.pullDownRefresh, e);
|
|
148
|
+
if (result && typeof result.then === 'function') {
|
|
149
|
+
Promise.resolve(result).then(() => {
|
|
150
|
+
(0, stopPullDownRefresh_1.default)();
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
onReachBottom() {
|
|
155
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.reachBottom);
|
|
156
|
+
},
|
|
157
|
+
onTitleClick() {
|
|
158
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.titleClick);
|
|
159
|
+
},
|
|
160
|
+
onOptionMenuClick(e) {
|
|
161
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.optionMenuClick, e);
|
|
162
|
+
},
|
|
163
|
+
onPopMenuClick(e) {
|
|
164
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.popMenuClick, e);
|
|
165
|
+
},
|
|
166
|
+
onPullIntercept() {
|
|
167
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.pullIntercept);
|
|
168
|
+
},
|
|
169
|
+
/**
|
|
170
|
+
* lifecycle end
|
|
171
|
+
*/
|
|
172
|
+
};
|
|
173
|
+
const lifecycleEvents = {
|
|
174
|
+
onPageScroll(e) {
|
|
175
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.pageScroll, e);
|
|
176
|
+
},
|
|
177
|
+
onShareAppMessage(options) {
|
|
178
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.shareAppMessage, options) || {};
|
|
179
|
+
},
|
|
180
|
+
onShareTimeline(options) {
|
|
181
|
+
return this.callLifecycle(framework_shared_1.Lifecycle.shareTimeline, options) || {};
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
((_a = framework_shared_1.RuntimeOptions.get('pageEvents')[name]) !== null && _a !== void 0 ? _a : []).forEach(eventName => {
|
|
185
|
+
if (lifecycleEvents[eventName]) {
|
|
186
|
+
config[eventName] = lifecycleEvents[eventName];
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
return framework_shared_1.RuntimeOptions.get('pluginDriver').onPageConfig({ config, page: name });
|
|
190
|
+
}
|
|
191
|
+
exports.default = createPageConfig;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.useQuery = exports.useNativeEffect = exports.useComponentInstance = exports.usePageInstance = exports.useAppEvent = exports.usePageEvent = void 0;
|
|
7
|
+
var framework_shared_1 = require("@rsmax/framework-shared");
|
|
8
|
+
Object.defineProperty(exports, "usePageEvent", { enumerable: true, get: function () { return framework_shared_1.usePageEvent; } });
|
|
9
|
+
Object.defineProperty(exports, "useAppEvent", { enumerable: true, get: function () { return framework_shared_1.useAppEvent; } });
|
|
10
|
+
Object.defineProperty(exports, "usePageInstance", { enumerable: true, get: function () { return framework_shared_1.usePageInstance; } });
|
|
11
|
+
Object.defineProperty(exports, "useComponentInstance", { enumerable: true, get: function () { return framework_shared_1.useComponentInstance; } });
|
|
12
|
+
var useNativeEffect_1 = require("./useNativeEffect");
|
|
13
|
+
Object.defineProperty(exports, "useNativeEffect", { enumerable: true, get: function () { return __importDefault(useNativeEffect_1).default; } });
|
|
14
|
+
var useQuery_1 = require("./useQuery");
|
|
15
|
+
Object.defineProperty(exports, "useQuery", { enumerable: true, get: function () { return __importDefault(useQuery_1).default; } });
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const nativeEffect_1 = __importDefault(require("../nativeEffect"));
|
|
8
|
+
function useNativeEffect(listener, deps) {
|
|
9
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
10
|
+
return nativeEffect_1.default.connect(listener, !!deps);
|
|
11
|
+
}, deps);
|
|
12
|
+
}
|
|
13
|
+
exports.default = useNativeEffect;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const react_1 = require("react");
|
|
4
|
+
const framework_shared_1 = require("@rsmax/framework-shared");
|
|
5
|
+
function useQuery() {
|
|
6
|
+
const pageInstance = (0, react_1.useContext)(framework_shared_1.PageInstanceContext);
|
|
7
|
+
return pageInstance.query;
|
|
8
|
+
}
|
|
9
|
+
exports.default = useQuery;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function diffProperties(lastRawProps: Record<string, any> | null | undefined, nextRawProps: Record<string, any> | null | undefined): null | any[];
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const framework_shared_1 = require("@rsmax/framework-shared");
|
|
4
|
+
const STYLE = ['style', 'placeholderStyle'];
|
|
5
|
+
const CHILDREN = 'children';
|
|
6
|
+
const CLASS_NAME = 'className';
|
|
7
|
+
function diffProperties(lastRawProps, nextRawProps) {
|
|
8
|
+
const updatePayload = [];
|
|
9
|
+
const lastProps = lastRawProps;
|
|
10
|
+
const nextProps = nextRawProps;
|
|
11
|
+
let propKey;
|
|
12
|
+
let styleName;
|
|
13
|
+
const hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
14
|
+
const styleUpdates = {};
|
|
15
|
+
for (propKey in lastProps) {
|
|
16
|
+
if (hasOwnProperty.call(nextProps, propKey) ||
|
|
17
|
+
!hasOwnProperty.call(lastProps, propKey) ||
|
|
18
|
+
lastProps[propKey] == null) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if ((0, framework_shared_1.includes)(STYLE, propKey)) {
|
|
22
|
+
const lastStyle = lastProps[propKey];
|
|
23
|
+
for (styleName in lastStyle) {
|
|
24
|
+
if (hasOwnProperty.call(lastStyle, styleName)) {
|
|
25
|
+
if (!styleUpdates[propKey]) {
|
|
26
|
+
styleUpdates[propKey] = {};
|
|
27
|
+
}
|
|
28
|
+
styleUpdates[propKey][styleName] = '';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// For all other deleted properties we add it to the queue. We use
|
|
34
|
+
// the whitelist in the commit phase instead.
|
|
35
|
+
updatePayload.push(propKey, propKey === CLASS_NAME ? '' : null);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
for (propKey in nextProps) {
|
|
39
|
+
const nextProp = nextProps[propKey];
|
|
40
|
+
const lastProp = lastProps != null ? lastProps[propKey] : undefined;
|
|
41
|
+
if (!hasOwnProperty.call(nextProps, propKey) || nextProp === lastProp || (nextProp == null && lastProp == null)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if ((0, framework_shared_1.includes)(STYLE, propKey)) {
|
|
45
|
+
if (process.env.NODE_ENV === 'development') {
|
|
46
|
+
if (nextProp) {
|
|
47
|
+
// Freeze the next style object so that we can assume it won't be
|
|
48
|
+
// mutated. We have already warned for this in the past.
|
|
49
|
+
Object.freeze(nextProp);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (lastProp) {
|
|
53
|
+
// Unset styles on `lastProp` but not on `nextProp`.
|
|
54
|
+
for (styleName in lastProp) {
|
|
55
|
+
if (hasOwnProperty.call(lastProp, styleName) && (!nextProp || !hasOwnProperty.call(nextProp, styleName))) {
|
|
56
|
+
if (!styleUpdates[propKey]) {
|
|
57
|
+
styleUpdates[propKey] = {};
|
|
58
|
+
}
|
|
59
|
+
styleUpdates[propKey][styleName] = '';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Update styles that changed since `lastProp`.
|
|
63
|
+
for (styleName in nextProp) {
|
|
64
|
+
if (hasOwnProperty.call(nextProp, styleName) && lastProp[styleName] !== nextProp[styleName]) {
|
|
65
|
+
if (!styleUpdates[propKey]) {
|
|
66
|
+
styleUpdates[propKey] = {};
|
|
67
|
+
}
|
|
68
|
+
styleUpdates[propKey][styleName] = nextProp[styleName];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// Relies on `updateStylesByID` not mutating `styleUpdates`.
|
|
74
|
+
if (!styleUpdates[propKey]) {
|
|
75
|
+
updatePayload.push(propKey, null);
|
|
76
|
+
}
|
|
77
|
+
styleUpdates[propKey] = nextProp;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (propKey === CHILDREN) {
|
|
81
|
+
if (lastProp !== nextProp && (typeof nextProp === 'string' || typeof nextProp === 'number')) {
|
|
82
|
+
updatePayload.push(propKey, '' + nextProp);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// For any other property we always add it to the queue and then we
|
|
87
|
+
// filter it out using the whitelist during the commit.
|
|
88
|
+
updatePayload.push(propKey, nextProp);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// 由于 style 要转换成 string, 所以必须整个 style 对象都更新
|
|
92
|
+
for (const styleKey in styleUpdates) {
|
|
93
|
+
const styleValue = styleUpdates[styleKey];
|
|
94
|
+
if (styleValue) {
|
|
95
|
+
updatePayload.push(styleKey, Object.assign({}, lastProps[styleKey], styleValue));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return updatePayload.length ? updatePayload : null;
|
|
99
|
+
}
|
|
100
|
+
exports.default = diffProperties;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import VNode from '../VNode';
|
|
2
|
+
import Container from '../Container';
|
|
3
|
+
declare const _default: {
|
|
4
|
+
now: any;
|
|
5
|
+
getPublicInstance: <T>(inst: T) => T;
|
|
6
|
+
getRootHostContext: () => {};
|
|
7
|
+
shouldSetTextContent(type: string): boolean;
|
|
8
|
+
prepareForCommit: () => null;
|
|
9
|
+
preparePortalMount: () => void;
|
|
10
|
+
clearContainer: () => void;
|
|
11
|
+
resetAfterCommit: (container: Container) => void;
|
|
12
|
+
getChildHostContext: () => {};
|
|
13
|
+
createInstance(type: string, newProps: any, container: Container): VNode;
|
|
14
|
+
createTextInstance(text: string, container: Container): VNode;
|
|
15
|
+
commitTextUpdate(node: VNode, oldText: string, newText: string): void;
|
|
16
|
+
prepareUpdate(node: VNode, type: string, lastProps: any, nextProps: any): any[] | null;
|
|
17
|
+
commitUpdate(node: VNode, updatePayload: any, type: string, oldProps: any, newProps: any): void;
|
|
18
|
+
appendInitialChild: (parent: VNode, child: VNode) => void;
|
|
19
|
+
appendChild(parent: VNode, child: VNode): void;
|
|
20
|
+
insertBefore(parent: VNode, child: VNode, beforeChild: VNode): void;
|
|
21
|
+
removeChild(parent: VNode, child: VNode): void;
|
|
22
|
+
finalizeInitialChildren: () => boolean;
|
|
23
|
+
appendChildToContainer(container: any, child: VNode): void;
|
|
24
|
+
insertInContainerBefore(container: any, child: VNode, beforeChild: VNode): void;
|
|
25
|
+
removeChildFromContainer(container: any, child: VNode): void;
|
|
26
|
+
hideInstance(instance: VNode): void;
|
|
27
|
+
hideTextInstance(instance: VNode): void;
|
|
28
|
+
unhideInstance(instance: VNode, props: any): void;
|
|
29
|
+
unhideTextInstance(instance: VNode, text: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* 当 fiber 被标记为 Deletion 时,dom被卸载后,从dom节点上删除 react 初始化的内容,如 __reactProps$xxxx 等. 详见React源码
|
|
32
|
+
* https://github.com/facebook/react/blob/8b31835fc0a4de479a816471764f0e1d103ae205/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js#L78
|
|
33
|
+
*/
|
|
34
|
+
detachDeletedInstance(): {};
|
|
35
|
+
schedulePassiveEffects: any;
|
|
36
|
+
cancelPassiveEffects: any;
|
|
37
|
+
shouldYield: any;
|
|
38
|
+
scheduleDeferredCallback: any;
|
|
39
|
+
cancelDeferredCallback: any;
|
|
40
|
+
supportsMutation: boolean;
|
|
41
|
+
};
|
|
42
|
+
export default _default;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const scheduler_1 = __importDefault(require("scheduler"));
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
const instanceId_1 = require("../instanceId");
|
|
9
|
+
const VNode_1 = __importDefault(require("../VNode"));
|
|
10
|
+
const diffProperties_1 = __importDefault(require("./diffProperties"));
|
|
11
|
+
const { unstable_scheduleCallback: scheduleDeferredCallback, unstable_cancelCallback: cancelDeferredCallback, unstable_shouldYield: shouldYield, unstable_now: now, } = scheduler_1.default;
|
|
12
|
+
const DOM_TAG_MAP = {
|
|
13
|
+
span: 'text',
|
|
14
|
+
div: 'view',
|
|
15
|
+
img: 'image',
|
|
16
|
+
};
|
|
17
|
+
function processProps(newProps, node) {
|
|
18
|
+
const props = {};
|
|
19
|
+
node.unregisteredCallbacks();
|
|
20
|
+
for (const propKey of Object.keys(newProps)) {
|
|
21
|
+
if (typeof newProps[propKey] === 'function') {
|
|
22
|
+
props[propKey] = node.registerCallback(propKey, newProps[propKey]);
|
|
23
|
+
}
|
|
24
|
+
else if (propKey === 'style') {
|
|
25
|
+
props[propKey] = newProps[propKey] || '';
|
|
26
|
+
}
|
|
27
|
+
else if (propKey === 'children') {
|
|
28
|
+
// pass
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
props[propKey] = newProps[propKey];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return props;
|
|
35
|
+
}
|
|
36
|
+
const rootHostContext = {};
|
|
37
|
+
const childHostContext = {};
|
|
38
|
+
exports.default = {
|
|
39
|
+
now,
|
|
40
|
+
getPublicInstance: (inst) => {
|
|
41
|
+
return inst;
|
|
42
|
+
},
|
|
43
|
+
getRootHostContext: () => {
|
|
44
|
+
return rootHostContext;
|
|
45
|
+
},
|
|
46
|
+
shouldSetTextContent(type) {
|
|
47
|
+
return type === 'stub-block';
|
|
48
|
+
},
|
|
49
|
+
prepareForCommit: () => {
|
|
50
|
+
return null;
|
|
51
|
+
},
|
|
52
|
+
preparePortalMount: () => {
|
|
53
|
+
// nothing to do
|
|
54
|
+
},
|
|
55
|
+
clearContainer: () => {
|
|
56
|
+
// nothing to do
|
|
57
|
+
},
|
|
58
|
+
resetAfterCommit: (container) => {
|
|
59
|
+
container.applyUpdate();
|
|
60
|
+
},
|
|
61
|
+
getChildHostContext: () => {
|
|
62
|
+
return childHostContext;
|
|
63
|
+
},
|
|
64
|
+
createInstance(type, newProps, container) {
|
|
65
|
+
var _a;
|
|
66
|
+
const id = (0, instanceId_1.generate)();
|
|
67
|
+
const node = new VNode_1.default({
|
|
68
|
+
id,
|
|
69
|
+
type: (_a = DOM_TAG_MAP[type]) !== null && _a !== void 0 ? _a : type,
|
|
70
|
+
props: {},
|
|
71
|
+
container,
|
|
72
|
+
});
|
|
73
|
+
node.props = processProps(newProps, node);
|
|
74
|
+
return node;
|
|
75
|
+
},
|
|
76
|
+
createTextInstance(text, container) {
|
|
77
|
+
const id = (0, instanceId_1.generate)();
|
|
78
|
+
const node = new VNode_1.default({
|
|
79
|
+
id,
|
|
80
|
+
type: constants_1.TYPE_TEXT,
|
|
81
|
+
props: null,
|
|
82
|
+
container,
|
|
83
|
+
});
|
|
84
|
+
node.text = text;
|
|
85
|
+
return node;
|
|
86
|
+
},
|
|
87
|
+
commitTextUpdate(node, oldText, newText) {
|
|
88
|
+
if (oldText !== newText) {
|
|
89
|
+
node.text = newText;
|
|
90
|
+
node.update();
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
prepareUpdate(node, type, lastProps, nextProps) {
|
|
94
|
+
lastProps = processProps(lastProps, node);
|
|
95
|
+
nextProps = processProps(nextProps, node);
|
|
96
|
+
return (0, diffProperties_1.default)(lastProps, nextProps);
|
|
97
|
+
},
|
|
98
|
+
commitUpdate(node, updatePayload, type, oldProps, newProps) {
|
|
99
|
+
node.props = processProps(newProps, node);
|
|
100
|
+
node.update(updatePayload);
|
|
101
|
+
},
|
|
102
|
+
appendInitialChild: (parent, child) => {
|
|
103
|
+
parent.appendChild(child);
|
|
104
|
+
},
|
|
105
|
+
appendChild(parent, child) {
|
|
106
|
+
parent.appendChild(child);
|
|
107
|
+
},
|
|
108
|
+
insertBefore(parent, child, beforeChild) {
|
|
109
|
+
parent.insertBefore(child, beforeChild);
|
|
110
|
+
},
|
|
111
|
+
removeChild(parent, child) {
|
|
112
|
+
parent.removeChild(child);
|
|
113
|
+
},
|
|
114
|
+
finalizeInitialChildren: () => {
|
|
115
|
+
return false;
|
|
116
|
+
},
|
|
117
|
+
appendChildToContainer(container, child) {
|
|
118
|
+
container.appendChild(child);
|
|
119
|
+
child.mounted = true;
|
|
120
|
+
},
|
|
121
|
+
insertInContainerBefore(container, child, beforeChild) {
|
|
122
|
+
container.insertBefore(child, beforeChild);
|
|
123
|
+
},
|
|
124
|
+
removeChildFromContainer(container, child) {
|
|
125
|
+
container.removeChild(child);
|
|
126
|
+
},
|
|
127
|
+
hideInstance(instance) {
|
|
128
|
+
var _a;
|
|
129
|
+
const originStyle = (_a = instance.props) === null || _a === void 0 ? void 0 : _a.style;
|
|
130
|
+
const newStyle = Object.assign({}, originStyle || {}, { display: 'none' }); // 微信和阿里的小程序都不支持在内联样式中加`important!`
|
|
131
|
+
instance.props = Object.assign({}, instance.props || {}, { style: newStyle });
|
|
132
|
+
instance.update();
|
|
133
|
+
},
|
|
134
|
+
hideTextInstance(instance) {
|
|
135
|
+
instance.text = '';
|
|
136
|
+
instance.update();
|
|
137
|
+
},
|
|
138
|
+
unhideInstance(instance, props) {
|
|
139
|
+
instance.props = props;
|
|
140
|
+
instance.update();
|
|
141
|
+
},
|
|
142
|
+
unhideTextInstance(instance, text) {
|
|
143
|
+
instance.text = text;
|
|
144
|
+
instance.update();
|
|
145
|
+
},
|
|
146
|
+
/**
|
|
147
|
+
* 当 fiber 被标记为 Deletion 时,dom被卸载后,从dom节点上删除 react 初始化的内容,如 __reactProps$xxxx 等. 详见React源码
|
|
148
|
+
* https://github.com/facebook/react/blob/8b31835fc0a4de479a816471764f0e1d103ae205/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js#L78
|
|
149
|
+
*/
|
|
150
|
+
detachDeletedInstance() {
|
|
151
|
+
return {};
|
|
152
|
+
},
|
|
153
|
+
schedulePassiveEffects: scheduleDeferredCallback,
|
|
154
|
+
cancelPassiveEffects: cancelDeferredCallback,
|
|
155
|
+
shouldYield,
|
|
156
|
+
scheduleDeferredCallback,
|
|
157
|
+
cancelDeferredCallback,
|
|
158
|
+
supportsMutation: true,
|
|
159
|
+
};
|
package/cjs/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { default as render } from './render';
|
|
2
|
+
export { default as createAppConfig } from './createAppConfig';
|
|
3
|
+
export { default as createPageConfig } from './createPageConfig';
|
|
4
|
+
export { default as createComponentConfig } from './createComponentConfig';
|
|
5
|
+
export { default as createNativeComponent } from './createNativeComponent';
|
|
6
|
+
export { default as createHostComponent } from './createHostComponent';
|
|
7
|
+
export { createPortal } from './ReactPortal';
|
|
8
|
+
export { RuntimeOptions, PluginDriver } from '@rsmax/framework-shared';
|
|
9
|
+
export * from './hooks';
|
|
10
|
+
export declare const unstable_batchedUpdates: <A, R>(fn: (a: A) => R, a: A) => R;
|
|
11
|
+
declare const _default: {
|
|
12
|
+
unstable_batchedUpdates: <A, R>(fn: (a: A) => R, a: A) => R;
|
|
13
|
+
};
|
|
14
|
+
export default _default;
|
package/cjs/index.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.unstable_batchedUpdates = exports.PluginDriver = exports.RuntimeOptions = exports.createPortal = exports.createHostComponent = exports.createNativeComponent = exports.createComponentConfig = exports.createPageConfig = exports.createAppConfig = exports.render = void 0;
|
|
21
|
+
var render_1 = require("./render");
|
|
22
|
+
Object.defineProperty(exports, "render", { enumerable: true, get: function () { return __importDefault(render_1).default; } });
|
|
23
|
+
var createAppConfig_1 = require("./createAppConfig");
|
|
24
|
+
Object.defineProperty(exports, "createAppConfig", { enumerable: true, get: function () { return __importDefault(createAppConfig_1).default; } });
|
|
25
|
+
var createPageConfig_1 = require("./createPageConfig");
|
|
26
|
+
Object.defineProperty(exports, "createPageConfig", { enumerable: true, get: function () { return __importDefault(createPageConfig_1).default; } });
|
|
27
|
+
var createComponentConfig_1 = require("./createComponentConfig");
|
|
28
|
+
Object.defineProperty(exports, "createComponentConfig", { enumerable: true, get: function () { return __importDefault(createComponentConfig_1).default; } });
|
|
29
|
+
var createNativeComponent_1 = require("./createNativeComponent");
|
|
30
|
+
Object.defineProperty(exports, "createNativeComponent", { enumerable: true, get: function () { return __importDefault(createNativeComponent_1).default; } });
|
|
31
|
+
var createHostComponent_1 = require("./createHostComponent");
|
|
32
|
+
Object.defineProperty(exports, "createHostComponent", { enumerable: true, get: function () { return __importDefault(createHostComponent_1).default; } });
|
|
33
|
+
var ReactPortal_1 = require("./ReactPortal");
|
|
34
|
+
Object.defineProperty(exports, "createPortal", { enumerable: true, get: function () { return ReactPortal_1.createPortal; } });
|
|
35
|
+
var framework_shared_1 = require("@rsmax/framework-shared");
|
|
36
|
+
Object.defineProperty(exports, "RuntimeOptions", { enumerable: true, get: function () { return framework_shared_1.RuntimeOptions; } });
|
|
37
|
+
Object.defineProperty(exports, "PluginDriver", { enumerable: true, get: function () { return framework_shared_1.PluginDriver; } });
|
|
38
|
+
__exportStar(require("./hooks"), exports);
|
|
39
|
+
const render_2 = require("./render");
|
|
40
|
+
exports.unstable_batchedUpdates = render_2.ReactReconcilerInst.batchedUpdates;
|
|
41
|
+
exports.default = {
|
|
42
|
+
unstable_batchedUpdates: exports.unstable_batchedUpdates,
|
|
43
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generate = exports.reset = void 0;
|
|
4
|
+
let instanceId = 0;
|
|
5
|
+
function reset() {
|
|
6
|
+
instanceId = 0;
|
|
7
|
+
}
|
|
8
|
+
exports.reset = reset;
|
|
9
|
+
function generate() {
|
|
10
|
+
const id = instanceId;
|
|
11
|
+
instanceId += 1;
|
|
12
|
+
return id;
|
|
13
|
+
}
|
|
14
|
+
exports.generate = generate;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type Listener = () => void;
|
|
2
|
+
declare function dispose(listener: Listener): void;
|
|
3
|
+
declare function connect(listener: Listener, once: boolean): () => void;
|
|
4
|
+
declare function run(): void;
|
|
5
|
+
declare const _default: {
|
|
6
|
+
connect: typeof connect;
|
|
7
|
+
run: typeof run;
|
|
8
|
+
dispose: typeof dispose;
|
|
9
|
+
};
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const effector = {
|
|
4
|
+
listenerConfigs: [],
|
|
5
|
+
};
|
|
6
|
+
function dispose(listener) {
|
|
7
|
+
effector.listenerConfigs = effector.listenerConfigs.filter(config => config.listener !== listener);
|
|
8
|
+
}
|
|
9
|
+
function connect(listener, once) {
|
|
10
|
+
effector.listenerConfigs.push({ listener, once });
|
|
11
|
+
return () => dispose(listener);
|
|
12
|
+
}
|
|
13
|
+
function run() {
|
|
14
|
+
effector.listenerConfigs.forEach(config => {
|
|
15
|
+
config.listener();
|
|
16
|
+
if (config.once) {
|
|
17
|
+
dispose(config.listener);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
exports.default = {
|
|
22
|
+
connect,
|
|
23
|
+
run,
|
|
24
|
+
dispose,
|
|
25
|
+
};
|
|
File without changes
|