@viewfly/core 0.0.18 → 0.0.19
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/bundles/foundation/renderer.d.ts +5 -2
- package/bundles/index.esm.js +62 -33
- package/bundles/index.js +61 -31
- package/bundles/model/component.d.ts +6 -6
- package/bundles/model/jsx-element.d.ts +2 -2
- package/bundles/model/root.component.d.ts +1 -2
- package/bundles/model/types.d.ts +4 -3
- package/bundles/viewfly.d.ts +6 -6
- package/package.json +4 -4
|
@@ -2,15 +2,18 @@ import { RootComponent } from '../model/_api';
|
|
|
2
2
|
import { NativeNode, NativeRenderer } from './injection-tokens';
|
|
3
3
|
export declare abstract class RootComponentRef {
|
|
4
4
|
abstract component: RootComponent;
|
|
5
|
+
}
|
|
6
|
+
export declare abstract class HostRef {
|
|
5
7
|
abstract host: NativeNode;
|
|
6
8
|
}
|
|
7
9
|
export declare class Renderer {
|
|
8
10
|
private nativeRenderer;
|
|
9
11
|
private rootComponentRef;
|
|
12
|
+
private hostRef;
|
|
10
13
|
private componentAtomCaches;
|
|
11
|
-
|
|
14
|
+
private isInit;
|
|
15
|
+
constructor(nativeRenderer: NativeRenderer, rootComponentRef: RootComponentRef, hostRef: HostRef);
|
|
12
16
|
render(): void;
|
|
13
|
-
refresh(): void;
|
|
14
17
|
private reconcile;
|
|
15
18
|
private getPrevSibling;
|
|
16
19
|
private reconcileElement;
|
package/bundles/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import { ReflectiveInjector, normalizeProvider,
|
|
2
|
+
import { ReflectiveInjector, Injector, normalizeProvider, InjectFlags, Injectable, NullInjector } from '@tanbo/di';
|
|
3
3
|
export * from '@tanbo/di';
|
|
4
4
|
import { Subject, Subscription, microTask } from '@tanbo/stream';
|
|
5
5
|
|
|
@@ -152,7 +152,10 @@ class Component extends ReflectiveInjector {
|
|
|
152
152
|
return this._changed;
|
|
153
153
|
}
|
|
154
154
|
constructor(context, type, props, key) {
|
|
155
|
-
super(context, [
|
|
155
|
+
super(context, [{
|
|
156
|
+
provide: Injector,
|
|
157
|
+
useFactory: () => this
|
|
158
|
+
}]);
|
|
156
159
|
this.type = type;
|
|
157
160
|
this.props = props;
|
|
158
161
|
this.key = key;
|
|
@@ -171,11 +174,11 @@ class Component extends ReflectiveInjector {
|
|
|
171
174
|
is(target) {
|
|
172
175
|
return target.$$typeOf === this.$$typeOf;
|
|
173
176
|
}
|
|
174
|
-
|
|
177
|
+
provide(providers) {
|
|
175
178
|
providers = Array.isArray(providers) ? providers : [providers];
|
|
176
179
|
this.normalizedProviders.unshift(...providers.map(i => normalizeProvider(i)));
|
|
177
180
|
}
|
|
178
|
-
|
|
181
|
+
setup() {
|
|
179
182
|
const self = this;
|
|
180
183
|
const props = new Proxy(this.props, {
|
|
181
184
|
get(_, key) {
|
|
@@ -603,7 +606,7 @@ function useEffect(deps, effect) {
|
|
|
603
606
|
*/
|
|
604
607
|
function provide(provider) {
|
|
605
608
|
const component = getSetupContext();
|
|
606
|
-
component.
|
|
609
|
+
component.provide(provider);
|
|
607
610
|
return component;
|
|
608
611
|
}
|
|
609
612
|
/**
|
|
@@ -611,7 +614,7 @@ function provide(provider) {
|
|
|
611
614
|
*/
|
|
612
615
|
function inject(token, notFoundValue, flags) {
|
|
613
616
|
const component = getSetupContext();
|
|
614
|
-
return component.
|
|
617
|
+
return component.get(token, notFoundValue, flags || InjectFlags.SkipSelf);
|
|
615
618
|
}
|
|
616
619
|
|
|
617
620
|
function Fragment(props) {
|
|
@@ -660,7 +663,7 @@ function withMemo(shouldUpdate, render) {
|
|
|
660
663
|
* Viewfly 根组件,用于实现组件状态更新事件通知
|
|
661
664
|
*/
|
|
662
665
|
class RootComponent extends Component {
|
|
663
|
-
constructor(factory, parentInjector
|
|
666
|
+
constructor(factory, parentInjector) {
|
|
664
667
|
super(parentInjector, factory, {});
|
|
665
668
|
this.changeEmitter = new Subject();
|
|
666
669
|
}
|
|
@@ -672,6 +675,8 @@ class RootComponent extends Component {
|
|
|
672
675
|
|
|
673
676
|
class RootComponentRef {
|
|
674
677
|
}
|
|
678
|
+
class HostRef {
|
|
679
|
+
}
|
|
675
680
|
class Atom {
|
|
676
681
|
constructor(jsxNode, parent) {
|
|
677
682
|
this.jsxNode = jsxNode;
|
|
@@ -682,25 +687,30 @@ class Atom {
|
|
|
682
687
|
}
|
|
683
688
|
}
|
|
684
689
|
let Renderer = class Renderer {
|
|
685
|
-
constructor(nativeRenderer, rootComponentRef) {
|
|
690
|
+
constructor(nativeRenderer, rootComponentRef, hostRef) {
|
|
686
691
|
this.nativeRenderer = nativeRenderer;
|
|
687
692
|
this.rootComponentRef = rootComponentRef;
|
|
693
|
+
this.hostRef = hostRef;
|
|
688
694
|
this.componentAtomCaches = new WeakMap();
|
|
695
|
+
this.isInit = true;
|
|
689
696
|
}
|
|
690
697
|
render() {
|
|
691
|
-
const
|
|
692
|
-
const
|
|
693
|
-
this.
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
698
|
+
const component = this.rootComponentRef.component;
|
|
699
|
+
const host = this.hostRef.host;
|
|
700
|
+
if (this.isInit) {
|
|
701
|
+
const atom = new Atom(component, null);
|
|
702
|
+
this.buildView(atom, {
|
|
703
|
+
isParent: true,
|
|
704
|
+
host
|
|
705
|
+
});
|
|
706
|
+
}
|
|
707
|
+
else {
|
|
708
|
+
this.reconcile(component, {
|
|
709
|
+
host,
|
|
710
|
+
isParent: true
|
|
711
|
+
});
|
|
712
|
+
}
|
|
713
|
+
this.isInit = false;
|
|
704
714
|
}
|
|
705
715
|
reconcile(component, context) {
|
|
706
716
|
if (component.dirty) {
|
|
@@ -1018,7 +1028,7 @@ let Renderer = class Renderer {
|
|
|
1018
1028
|
}
|
|
1019
1029
|
}
|
|
1020
1030
|
componentRender(component, from) {
|
|
1021
|
-
const { template, render } = component.
|
|
1031
|
+
const { template, render } = component.setup();
|
|
1022
1032
|
if (template) {
|
|
1023
1033
|
this.linkTemplate(template, component, from);
|
|
1024
1034
|
}
|
|
@@ -1255,7 +1265,8 @@ let Renderer = class Renderer {
|
|
|
1255
1265
|
Renderer = __decorate([
|
|
1256
1266
|
Injectable(),
|
|
1257
1267
|
__metadata("design:paramtypes", [NativeRenderer,
|
|
1258
|
-
RootComponentRef
|
|
1268
|
+
RootComponentRef,
|
|
1269
|
+
HostRef])
|
|
1259
1270
|
], Renderer);
|
|
1260
1271
|
|
|
1261
1272
|
const viewflyErrorFn = makeError('Viewfly');
|
|
@@ -1264,8 +1275,7 @@ const viewflyErrorFn = makeError('Viewfly');
|
|
|
1264
1275
|
*/
|
|
1265
1276
|
class Viewfly extends ReflectiveInjector {
|
|
1266
1277
|
constructor(config) {
|
|
1267
|
-
super(new NullInjector(), [
|
|
1268
|
-
...(config.providers || []),
|
|
1278
|
+
super(config.context || new NullInjector(), [
|
|
1269
1279
|
Renderer,
|
|
1270
1280
|
{
|
|
1271
1281
|
provide: RootComponentRef,
|
|
@@ -1280,6 +1290,12 @@ class Viewfly extends ReflectiveInjector {
|
|
|
1280
1290
|
useFactory() {
|
|
1281
1291
|
throw viewflyErrorFn('You must implement the `NativeRenderer` interface to start Viewfly!');
|
|
1282
1292
|
}
|
|
1293
|
+
},
|
|
1294
|
+
{
|
|
1295
|
+
provide: HostRef,
|
|
1296
|
+
useFactory() {
|
|
1297
|
+
throw viewflyErrorFn('Viewfly has not mounted!');
|
|
1298
|
+
}
|
|
1283
1299
|
}
|
|
1284
1300
|
]);
|
|
1285
1301
|
this.config = config;
|
|
@@ -1287,39 +1303,52 @@ class Viewfly extends ReflectiveInjector {
|
|
|
1287
1303
|
this.subscription = new Subscription();
|
|
1288
1304
|
this.rootComponent = this.createRootComponent(config.root);
|
|
1289
1305
|
}
|
|
1306
|
+
provide(providers) {
|
|
1307
|
+
providers = Array.isArray(providers) ? providers : [providers];
|
|
1308
|
+
this.normalizedProviders.unshift(...providers.map(i => normalizeProvider(i)));
|
|
1309
|
+
return this;
|
|
1310
|
+
}
|
|
1290
1311
|
/**
|
|
1291
1312
|
* 启动 Viewfly
|
|
1292
1313
|
* @param host 应用根节点
|
|
1293
1314
|
*/
|
|
1294
1315
|
mount(host) {
|
|
1295
|
-
|
|
1296
|
-
|
|
1316
|
+
this.provide({
|
|
1317
|
+
provide: HostRef,
|
|
1318
|
+
useValue: {
|
|
1319
|
+
host
|
|
1320
|
+
}
|
|
1321
|
+
});
|
|
1297
1322
|
const renderer = this.get(Renderer);
|
|
1298
1323
|
renderer.render();
|
|
1299
1324
|
if (this.config.autoUpdate === false) {
|
|
1300
|
-
return;
|
|
1325
|
+
return this;
|
|
1301
1326
|
}
|
|
1302
1327
|
this.subscription.add(this.rootComponent.changeEmitter.pipe(microTask()).subscribe(() => {
|
|
1303
|
-
renderer.
|
|
1328
|
+
renderer.render();
|
|
1304
1329
|
}));
|
|
1330
|
+
return this;
|
|
1331
|
+
}
|
|
1332
|
+
render() {
|
|
1333
|
+
const renderer = this.get(Renderer);
|
|
1334
|
+
renderer.render();
|
|
1305
1335
|
}
|
|
1306
1336
|
/**
|
|
1307
1337
|
* 销毁 Viewfly 实例
|
|
1308
1338
|
*/
|
|
1309
1339
|
destroy() {
|
|
1310
|
-
const renderer = this.get(Renderer);
|
|
1311
1340
|
this.destroyed = true;
|
|
1312
1341
|
this.rootComponent.markAsDirtied();
|
|
1313
1342
|
this.subscription.unsubscribe();
|
|
1314
|
-
|
|
1343
|
+
this.render();
|
|
1315
1344
|
}
|
|
1316
1345
|
createRootComponent(rootNode) {
|
|
1317
1346
|
return new RootComponent(() => {
|
|
1318
1347
|
return () => {
|
|
1319
1348
|
return this.destroyed ? null : rootNode;
|
|
1320
1349
|
};
|
|
1321
|
-
}, this
|
|
1350
|
+
}, this);
|
|
1322
1351
|
}
|
|
1323
1352
|
}
|
|
1324
1353
|
|
|
1325
|
-
export { Component, Fragment, JSXComponent, JSXElement, JSXText, NativeRenderer, Ref, Renderer, RootComponent, RootComponentRef, Viewfly, inject, jsx, jsxs, makeError, onDestroy, onMounted, onPropsChanged, onUpdated, provide, useDerived, useEffect, useRef, useSignal, withMemo };
|
|
1354
|
+
export { Component, Fragment, HostRef, JSXComponent, JSXElement, JSXText, NativeRenderer, Ref, Renderer, RootComponent, RootComponentRef, Viewfly, inject, jsx, jsxs, makeError, onDestroy, onMounted, onPropsChanged, onUpdated, provide, useDerived, useEffect, useRef, useSignal, withMemo };
|
package/bundles/index.js
CHANGED
|
@@ -153,7 +153,10 @@ class Component extends di.ReflectiveInjector {
|
|
|
153
153
|
return this._changed;
|
|
154
154
|
}
|
|
155
155
|
constructor(context, type, props, key) {
|
|
156
|
-
super(context, [
|
|
156
|
+
super(context, [{
|
|
157
|
+
provide: di.Injector,
|
|
158
|
+
useFactory: () => this
|
|
159
|
+
}]);
|
|
157
160
|
this.type = type;
|
|
158
161
|
this.props = props;
|
|
159
162
|
this.key = key;
|
|
@@ -172,11 +175,11 @@ class Component extends di.ReflectiveInjector {
|
|
|
172
175
|
is(target) {
|
|
173
176
|
return target.$$typeOf === this.$$typeOf;
|
|
174
177
|
}
|
|
175
|
-
|
|
178
|
+
provide(providers) {
|
|
176
179
|
providers = Array.isArray(providers) ? providers : [providers];
|
|
177
180
|
this.normalizedProviders.unshift(...providers.map(i => di.normalizeProvider(i)));
|
|
178
181
|
}
|
|
179
|
-
|
|
182
|
+
setup() {
|
|
180
183
|
const self = this;
|
|
181
184
|
const props = new Proxy(this.props, {
|
|
182
185
|
get(_, key) {
|
|
@@ -604,7 +607,7 @@ function useEffect(deps, effect) {
|
|
|
604
607
|
*/
|
|
605
608
|
function provide(provider) {
|
|
606
609
|
const component = getSetupContext();
|
|
607
|
-
component.
|
|
610
|
+
component.provide(provider);
|
|
608
611
|
return component;
|
|
609
612
|
}
|
|
610
613
|
/**
|
|
@@ -612,7 +615,7 @@ function provide(provider) {
|
|
|
612
615
|
*/
|
|
613
616
|
function inject(token, notFoundValue, flags) {
|
|
614
617
|
const component = getSetupContext();
|
|
615
|
-
return component.
|
|
618
|
+
return component.get(token, notFoundValue, flags || di.InjectFlags.SkipSelf);
|
|
616
619
|
}
|
|
617
620
|
|
|
618
621
|
function Fragment(props) {
|
|
@@ -661,7 +664,7 @@ function withMemo(shouldUpdate, render) {
|
|
|
661
664
|
* Viewfly 根组件,用于实现组件状态更新事件通知
|
|
662
665
|
*/
|
|
663
666
|
class RootComponent extends Component {
|
|
664
|
-
constructor(factory, parentInjector
|
|
667
|
+
constructor(factory, parentInjector) {
|
|
665
668
|
super(parentInjector, factory, {});
|
|
666
669
|
this.changeEmitter = new stream.Subject();
|
|
667
670
|
}
|
|
@@ -673,6 +676,8 @@ class RootComponent extends Component {
|
|
|
673
676
|
|
|
674
677
|
class RootComponentRef {
|
|
675
678
|
}
|
|
679
|
+
class HostRef {
|
|
680
|
+
}
|
|
676
681
|
class Atom {
|
|
677
682
|
constructor(jsxNode, parent) {
|
|
678
683
|
this.jsxNode = jsxNode;
|
|
@@ -683,25 +688,30 @@ class Atom {
|
|
|
683
688
|
}
|
|
684
689
|
}
|
|
685
690
|
exports.Renderer = class Renderer {
|
|
686
|
-
constructor(nativeRenderer, rootComponentRef) {
|
|
691
|
+
constructor(nativeRenderer, rootComponentRef, hostRef) {
|
|
687
692
|
this.nativeRenderer = nativeRenderer;
|
|
688
693
|
this.rootComponentRef = rootComponentRef;
|
|
694
|
+
this.hostRef = hostRef;
|
|
689
695
|
this.componentAtomCaches = new WeakMap();
|
|
696
|
+
this.isInit = true;
|
|
690
697
|
}
|
|
691
698
|
render() {
|
|
692
|
-
const
|
|
693
|
-
const
|
|
694
|
-
this.
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
699
|
+
const component = this.rootComponentRef.component;
|
|
700
|
+
const host = this.hostRef.host;
|
|
701
|
+
if (this.isInit) {
|
|
702
|
+
const atom = new Atom(component, null);
|
|
703
|
+
this.buildView(atom, {
|
|
704
|
+
isParent: true,
|
|
705
|
+
host
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
else {
|
|
709
|
+
this.reconcile(component, {
|
|
710
|
+
host,
|
|
711
|
+
isParent: true
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
this.isInit = false;
|
|
705
715
|
}
|
|
706
716
|
reconcile(component, context) {
|
|
707
717
|
if (component.dirty) {
|
|
@@ -1019,7 +1029,7 @@ exports.Renderer = class Renderer {
|
|
|
1019
1029
|
}
|
|
1020
1030
|
}
|
|
1021
1031
|
componentRender(component, from) {
|
|
1022
|
-
const { template, render } = component.
|
|
1032
|
+
const { template, render } = component.setup();
|
|
1023
1033
|
if (template) {
|
|
1024
1034
|
this.linkTemplate(template, component, from);
|
|
1025
1035
|
}
|
|
@@ -1256,7 +1266,8 @@ exports.Renderer = class Renderer {
|
|
|
1256
1266
|
exports.Renderer = __decorate([
|
|
1257
1267
|
di.Injectable(),
|
|
1258
1268
|
__metadata("design:paramtypes", [NativeRenderer,
|
|
1259
|
-
RootComponentRef
|
|
1269
|
+
RootComponentRef,
|
|
1270
|
+
HostRef])
|
|
1260
1271
|
], exports.Renderer);
|
|
1261
1272
|
|
|
1262
1273
|
const viewflyErrorFn = makeError('Viewfly');
|
|
@@ -1265,8 +1276,7 @@ const viewflyErrorFn = makeError('Viewfly');
|
|
|
1265
1276
|
*/
|
|
1266
1277
|
class Viewfly extends di.ReflectiveInjector {
|
|
1267
1278
|
constructor(config) {
|
|
1268
|
-
super(new di.NullInjector(), [
|
|
1269
|
-
...(config.providers || []),
|
|
1279
|
+
super(config.context || new di.NullInjector(), [
|
|
1270
1280
|
exports.Renderer,
|
|
1271
1281
|
{
|
|
1272
1282
|
provide: RootComponentRef,
|
|
@@ -1281,6 +1291,12 @@ class Viewfly extends di.ReflectiveInjector {
|
|
|
1281
1291
|
useFactory() {
|
|
1282
1292
|
throw viewflyErrorFn('You must implement the `NativeRenderer` interface to start Viewfly!');
|
|
1283
1293
|
}
|
|
1294
|
+
},
|
|
1295
|
+
{
|
|
1296
|
+
provide: HostRef,
|
|
1297
|
+
useFactory() {
|
|
1298
|
+
throw viewflyErrorFn('Viewfly has not mounted!');
|
|
1299
|
+
}
|
|
1284
1300
|
}
|
|
1285
1301
|
]);
|
|
1286
1302
|
this.config = config;
|
|
@@ -1288,43 +1304,57 @@ class Viewfly extends di.ReflectiveInjector {
|
|
|
1288
1304
|
this.subscription = new stream.Subscription();
|
|
1289
1305
|
this.rootComponent = this.createRootComponent(config.root);
|
|
1290
1306
|
}
|
|
1307
|
+
provide(providers) {
|
|
1308
|
+
providers = Array.isArray(providers) ? providers : [providers];
|
|
1309
|
+
this.normalizedProviders.unshift(...providers.map(i => di.normalizeProvider(i)));
|
|
1310
|
+
return this;
|
|
1311
|
+
}
|
|
1291
1312
|
/**
|
|
1292
1313
|
* 启动 Viewfly
|
|
1293
1314
|
* @param host 应用根节点
|
|
1294
1315
|
*/
|
|
1295
1316
|
mount(host) {
|
|
1296
|
-
|
|
1297
|
-
|
|
1317
|
+
this.provide({
|
|
1318
|
+
provide: HostRef,
|
|
1319
|
+
useValue: {
|
|
1320
|
+
host
|
|
1321
|
+
}
|
|
1322
|
+
});
|
|
1298
1323
|
const renderer = this.get(exports.Renderer);
|
|
1299
1324
|
renderer.render();
|
|
1300
1325
|
if (this.config.autoUpdate === false) {
|
|
1301
|
-
return;
|
|
1326
|
+
return this;
|
|
1302
1327
|
}
|
|
1303
1328
|
this.subscription.add(this.rootComponent.changeEmitter.pipe(stream.microTask()).subscribe(() => {
|
|
1304
|
-
renderer.
|
|
1329
|
+
renderer.render();
|
|
1305
1330
|
}));
|
|
1331
|
+
return this;
|
|
1332
|
+
}
|
|
1333
|
+
render() {
|
|
1334
|
+
const renderer = this.get(exports.Renderer);
|
|
1335
|
+
renderer.render();
|
|
1306
1336
|
}
|
|
1307
1337
|
/**
|
|
1308
1338
|
* 销毁 Viewfly 实例
|
|
1309
1339
|
*/
|
|
1310
1340
|
destroy() {
|
|
1311
|
-
const renderer = this.get(exports.Renderer);
|
|
1312
1341
|
this.destroyed = true;
|
|
1313
1342
|
this.rootComponent.markAsDirtied();
|
|
1314
1343
|
this.subscription.unsubscribe();
|
|
1315
|
-
|
|
1344
|
+
this.render();
|
|
1316
1345
|
}
|
|
1317
1346
|
createRootComponent(rootNode) {
|
|
1318
1347
|
return new RootComponent(() => {
|
|
1319
1348
|
return () => {
|
|
1320
1349
|
return this.destroyed ? null : rootNode;
|
|
1321
1350
|
};
|
|
1322
|
-
}, this
|
|
1351
|
+
}, this);
|
|
1323
1352
|
}
|
|
1324
1353
|
}
|
|
1325
1354
|
|
|
1326
1355
|
exports.Component = Component;
|
|
1327
1356
|
exports.Fragment = Fragment;
|
|
1357
|
+
exports.HostRef = HostRef;
|
|
1328
1358
|
exports.JSXComponent = JSXComponent;
|
|
1329
1359
|
exports.JSXElement = JSXElement;
|
|
1330
1360
|
exports.JSXText = JSXText;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { AbstractType, InjectFlags, InjectionToken, Injector, Provider, ReflectiveInjector, Type } from '@tanbo/di';
|
|
2
|
+
import { JSXTypeof, Key, Props } from './jsx-element';
|
|
3
3
|
import { JSXInternal } from './types';
|
|
4
4
|
export declare class JSXComponent {
|
|
5
5
|
props: Props;
|
|
@@ -30,10 +30,10 @@ export declare class Component extends ReflectiveInjector implements JSXTypeof {
|
|
|
30
30
|
private isFirstRending;
|
|
31
31
|
constructor(context: Injector, type: JSXInternal.ElementClass, props: Props, key?: Key | undefined);
|
|
32
32
|
is(target: JSXTypeof): boolean;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
template: JSXInternal.
|
|
36
|
-
render: (newProps: Props, oldProps: Props) => JSXInternal.
|
|
33
|
+
provide<T>(providers: Provider<T> | Provider<T>[]): void;
|
|
34
|
+
setup(): {
|
|
35
|
+
template: JSXInternal.JSXNode;
|
|
36
|
+
render: (newProps: Props, oldProps: Props) => JSXInternal.JSXNode;
|
|
37
37
|
};
|
|
38
38
|
markAsDirtied(): void;
|
|
39
39
|
markAsChanged(): void;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { JSXComponent } from './component';
|
|
2
2
|
import { JSXInternal } from './types';
|
|
3
3
|
export interface Props {
|
|
4
|
-
children?: JSXInternal.
|
|
4
|
+
children?: JSXInternal.JSXNode | JSXInternal.JSXNode[];
|
|
5
5
|
[key: string]: any;
|
|
6
6
|
[key: symbol]: any;
|
|
7
7
|
}
|
|
8
|
-
export declare function Fragment(props: Props): () => JSXInternal.
|
|
8
|
+
export declare function Fragment(props: Props): () => JSXInternal.JSXNode | JSXInternal.JSXNode[];
|
|
9
9
|
export type Key = number | string;
|
|
10
10
|
export declare function jsx(name: string, props: Props, key?: Key): JSXElement;
|
|
11
11
|
export declare function jsx(setup: JSXInternal.ElementClass, props: Props, key?: Key): JSXComponent;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Subject } from '@tanbo/stream';
|
|
2
|
-
import { NullInjector } from '@tanbo/di';
|
|
3
2
|
import { Component } from './component';
|
|
4
3
|
import { JSXInternal } from './types';
|
|
5
4
|
/**
|
|
@@ -7,6 +6,6 @@ import { JSXInternal } from './types';
|
|
|
7
6
|
*/
|
|
8
7
|
export declare class RootComponent extends Component {
|
|
9
8
|
changeEmitter: Subject<void>;
|
|
10
|
-
constructor(factory: JSXInternal.ElementClass, parentInjector
|
|
9
|
+
constructor(factory: JSXInternal.ElementClass, parentInjector: any);
|
|
11
10
|
markAsChanged(): void;
|
|
12
11
|
}
|
package/bundles/model/types.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Key, ExtractInstanceType, Ref } from './_api';
|
|
2
|
+
export type JSXNode = JSXInternal.JSXNode;
|
|
2
3
|
export declare namespace JSXInternal {
|
|
3
4
|
type ClassNames = string | Record<string, unknown> | ClassNames[];
|
|
4
5
|
interface ComponentInstance<P> {
|
|
5
|
-
$render():
|
|
6
|
+
$render(): JSXNode;
|
|
6
7
|
$shouldUpdate?(currentProps: P, prevProps: P): boolean;
|
|
7
8
|
}
|
|
8
|
-
type
|
|
9
|
+
type JSXNode = Element | JSXInternal.ElementClass | string | number | boolean | null | undefined | JSXNode[];
|
|
9
10
|
interface Element<P = any, C extends string | ElementClass<P> = string | ElementClass<P>> {
|
|
10
11
|
}
|
|
11
12
|
interface IntrinsicAttributes {
|
|
@@ -16,7 +17,7 @@ export declare namespace JSXInternal {
|
|
|
16
17
|
ref?: Ref<T, ExtractInstanceType<T>> | Ref<T, ExtractInstanceType<T>>[];
|
|
17
18
|
}
|
|
18
19
|
interface ElementClass<P = any> {
|
|
19
|
-
(props?: P): () => (
|
|
20
|
+
(props?: P): () => (JSXNode | ComponentInstance<P>);
|
|
20
21
|
}
|
|
21
22
|
interface ElementChildrenAttribute {
|
|
22
23
|
}
|
package/bundles/viewfly.d.ts
CHANGED
|
@@ -5,29 +5,29 @@ import { JSXInternal } from './model/_api';
|
|
|
5
5
|
* Viewfly 配置项
|
|
6
6
|
*/
|
|
7
7
|
export interface Config {
|
|
8
|
-
/** Viewfly IoC 容器中提供者集合 */
|
|
9
|
-
providers?: Provider[];
|
|
10
8
|
/** 是否自动更新视图 */
|
|
11
9
|
autoUpdate?: boolean;
|
|
12
10
|
/** 根节点 */
|
|
13
|
-
root: JSXInternal.
|
|
14
|
-
/**
|
|
11
|
+
root: JSXInternal.JSXNode;
|
|
12
|
+
/** 应用的上下文 */
|
|
15
13
|
context?: Injector;
|
|
16
14
|
}
|
|
17
15
|
/**
|
|
18
16
|
* Viewfly 核心类,用于启动一个 Viewfly 应用
|
|
19
17
|
*/
|
|
20
|
-
export declare class Viewfly extends ReflectiveInjector {
|
|
18
|
+
export declare class Viewfly<T extends NativeNode = NativeNode> extends ReflectiveInjector {
|
|
21
19
|
private config;
|
|
22
20
|
private destroyed;
|
|
23
21
|
private rootComponent;
|
|
24
22
|
private subscription;
|
|
25
23
|
constructor(config: Config);
|
|
24
|
+
provide(providers: Provider | Provider[]): this;
|
|
26
25
|
/**
|
|
27
26
|
* 启动 Viewfly
|
|
28
27
|
* @param host 应用根节点
|
|
29
28
|
*/
|
|
30
|
-
mount(host:
|
|
29
|
+
mount(host: T): this;
|
|
30
|
+
render(): void;
|
|
31
31
|
/**
|
|
32
32
|
* 销毁 Viewfly 实例
|
|
33
33
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viewfly/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.19",
|
|
4
4
|
"description": "Viewfly is a simple and easy-to-use JavaScript framework with an intuitive development experience.",
|
|
5
5
|
"main": "./bundles/index.js",
|
|
6
6
|
"module": "./bundles/index.esm.js",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"keywords": [],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@tanbo/di": "^1.1.
|
|
33
|
-
"@tanbo/stream": "^1.2.
|
|
32
|
+
"@tanbo/di": "^1.1.8",
|
|
33
|
+
"@tanbo/stream": "^1.2.3",
|
|
34
34
|
"reflect-metadata": "^0.1.13"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"bugs": {
|
|
52
52
|
"url": "https://github.com/viewfly/viewfly.git/issues"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "9276451814bcda728846876797e327d297a31b0e"
|
|
55
55
|
}
|