@remote-ui/core
Advanced tools
Comparing version
@@ -41,2 +41,4 @@ "use strict"; | ||
require("core-js/modules/es.promise"); | ||
require("core-js/modules/es.regexp.to-string"); | ||
@@ -110,2 +112,3 @@ | ||
this.attached = new Map([[ROOT_ID, this.root]]); | ||
this.timeout = null; | ||
this.queuedUpdates = new Set(); | ||
@@ -162,9 +165,9 @@ this.listeners = new Map(); | ||
(0, _rpc.release)(removed); | ||
_this.detach(removed); | ||
attached.children = _children; | ||
attached.children = _children; // eslint-disable-next-line promise/catch-or-return | ||
_this.enqueueUpdate(attached); | ||
_this.enqueueUpdate(attached).then(function () { | ||
(0, _rpc.release)(removed); | ||
}); | ||
@@ -216,12 +219,12 @@ break; | ||
for (var _i2 = 0, _Object$keys = Object.keys(newProps); _i2 < _Object$keys.length; _i2++) { | ||
var key = _Object$keys[_i2]; | ||
(0, _rpc.release)(oldProps[key]); | ||
} | ||
var props = _objectSpread({}, component.props, {}, newProps); | ||
component.props = props; | ||
component.props = props; // eslint-disable-next-line promise/catch-or-return | ||
_this.enqueueUpdate(component); | ||
_this.enqueueUpdate(component).then(function () { | ||
for (var _i2 = 0, _Object$keys = Object.keys(newProps); _i2 < _Object$keys.length; _i2++) { | ||
var key = _Object$keys[_i2]; | ||
(0, _rpc.release)(oldProps[key]); | ||
} | ||
}); | ||
@@ -242,20 +245,4 @@ break; | ||
var listeners = _this.listeners.get(_id3); | ||
_this.enqueueUpdate(text); | ||
if (listeners) { | ||
var _iterator2 = _createForOfIteratorHelper(listeners), | ||
_step2; | ||
try { | ||
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { | ||
var listener = _step2.value; | ||
listener(text); | ||
} | ||
} catch (err) { | ||
_iterator2.e(err); | ||
} finally { | ||
_iterator2.f(); | ||
} | ||
} | ||
break; | ||
@@ -306,6 +293,7 @@ } | ||
value: function enqueueUpdate(attached) { | ||
var _this3 = this; | ||
var _this$timeout, | ||
_this3 = this; | ||
if (this.timeout == null) { | ||
this.timeout = setTimeout(function () { | ||
this.timeout = (_this$timeout = this.timeout) !== null && _this$timeout !== void 0 ? _this$timeout : new Promise(function (resolve) { | ||
setTimeout(function () { | ||
var queuedUpdates = _toConsumableArray(_this3.queuedUpdates); | ||
@@ -317,8 +305,8 @@ | ||
var _iterator3 = _createForOfIteratorHelper(queuedUpdates), | ||
_step3; | ||
var _iterator2 = _createForOfIteratorHelper(queuedUpdates), | ||
_step2; | ||
try { | ||
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { | ||
var _attached2 = _step3.value; | ||
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { | ||
var _attached2 = _step2.value; | ||
@@ -328,14 +316,14 @@ var listeners = _this3.listeners.get(_attached2 === _this3.root ? ROOT_ID : _attached2.id); | ||
if (listeners) { | ||
var _iterator4 = _createForOfIteratorHelper(listeners), | ||
_step4; | ||
var _iterator3 = _createForOfIteratorHelper(listeners), | ||
_step3; | ||
try { | ||
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { | ||
var listener = _step4.value; | ||
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { | ||
var listener = _step3.value; | ||
listener(_attached2); | ||
} | ||
} catch (err) { | ||
_iterator4.e(err); | ||
_iterator3.e(err); | ||
} finally { | ||
_iterator4.f(); | ||
_iterator3.f(); | ||
} | ||
@@ -345,10 +333,12 @@ } | ||
} catch (err) { | ||
_iterator3.e(err); | ||
_iterator2.e(err); | ||
} finally { | ||
_iterator3.f(); | ||
_iterator2.f(); | ||
} | ||
resolve(); | ||
}, 0); | ||
} | ||
}); | ||
this.queuedUpdates.add(attached); | ||
return this.timeout; | ||
} | ||
@@ -361,14 +351,14 @@ }, { | ||
if ('children' in child) { | ||
var _iterator5 = _createForOfIteratorHelper(child.children), | ||
_step5; | ||
var _iterator4 = _createForOfIteratorHelper(child.children), | ||
_step4; | ||
try { | ||
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { | ||
var grandChild = _step5.value; | ||
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { | ||
var grandChild = _step4.value; | ||
this.attach(grandChild); | ||
} | ||
} catch (err) { | ||
_iterator5.e(err); | ||
_iterator4.e(err); | ||
} finally { | ||
_iterator5.f(); | ||
_iterator4.f(); | ||
} | ||
@@ -383,14 +373,14 @@ } | ||
if ('children' in child) { | ||
var _iterator6 = _createForOfIteratorHelper(child.children), | ||
_step6; | ||
var _iterator5 = _createForOfIteratorHelper(child.children), | ||
_step5; | ||
try { | ||
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { | ||
var grandChild = _step6.value; | ||
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { | ||
var grandChild = _step5.value; | ||
this.detach(grandChild); | ||
} | ||
} catch (err) { | ||
_iterator6.e(err); | ||
_iterator5.e(err); | ||
} finally { | ||
_iterator6.f(); | ||
_iterator5.f(); | ||
} | ||
@@ -397,0 +387,0 @@ } |
@@ -21,2 +21,3 @@ "use strict"; | ||
this.attached = new Map([[ROOT_ID, this.root]]); | ||
this.timeout = null; | ||
this.queuedUpdates = new Set(); | ||
@@ -47,6 +48,8 @@ this.listeners = new Map(); | ||
const [removed] = children.splice(index, 1); | ||
(0, _rpc.release)(removed); | ||
this.detach(removed); | ||
attached.children = children; | ||
this.enqueueUpdate(attached); | ||
attached.children = children; // eslint-disable-next-line promise/catch-or-return | ||
this.enqueueUpdate(attached).then(() => { | ||
(0, _rpc.release)(removed); | ||
}); | ||
break; | ||
@@ -82,12 +85,12 @@ } | ||
(0, _rpc.retain)(newProps); | ||
for (const key of Object.keys(newProps)) { | ||
(0, _rpc.release)(oldProps[key]); | ||
} | ||
const props = { ...component.props, | ||
...newProps | ||
}; | ||
component.props = props; | ||
this.enqueueUpdate(component); | ||
component.props = props; // eslint-disable-next-line promise/catch-or-return | ||
this.enqueueUpdate(component).then(() => { | ||
for (const key of Object.keys(newProps)) { | ||
(0, _rpc.release)(oldProps[key]); | ||
} | ||
}); | ||
break; | ||
@@ -101,10 +104,3 @@ } | ||
text.text = newText; | ||
const listeners = this.listeners.get(id); | ||
if (listeners) { | ||
for (const listener of listeners) { | ||
listener(text); | ||
} | ||
} | ||
this.enqueueUpdate(text); | ||
break; | ||
@@ -151,4 +147,6 @@ } | ||
enqueueUpdate(attached) { | ||
if (this.timeout == null) { | ||
this.timeout = setTimeout(() => { | ||
var _this$timeout; | ||
this.timeout = (_this$timeout = this.timeout) !== null && _this$timeout !== void 0 ? _this$timeout : new Promise(resolve => { | ||
setTimeout(() => { | ||
const queuedUpdates = [...this.queuedUpdates]; | ||
@@ -167,6 +165,8 @@ this.timeout = null; | ||
} | ||
resolve(); | ||
}, 0); | ||
} | ||
}); | ||
this.queuedUpdates.add(attached); | ||
return this.timeout; | ||
} | ||
@@ -173,0 +173,0 @@ |
@@ -12,2 +12,3 @@ "use strict"; | ||
]); | ||
this.timeout = null; | ||
this.queuedUpdates = new Set(); | ||
@@ -32,6 +33,8 @@ this.listeners = new Map(); | ||
const [removed] = children.splice(index, 1); | ||
rpc_1.release(removed); | ||
this.detach(removed); | ||
attached.children = children; | ||
this.enqueueUpdate(attached); | ||
// eslint-disable-next-line promise/catch-or-return | ||
this.enqueueUpdate(attached).then(() => { | ||
rpc_1.release(removed); | ||
}); | ||
break; | ||
@@ -60,8 +63,10 @@ } | ||
rpc_1.retain(newProps); | ||
for (const key of Object.keys(newProps)) { | ||
rpc_1.release(oldProps[key]); | ||
} | ||
const props = Object.assign(Object.assign({}, component.props), newProps); | ||
component.props = props; | ||
this.enqueueUpdate(component); | ||
// eslint-disable-next-line promise/catch-or-return | ||
this.enqueueUpdate(component).then(() => { | ||
for (const key of Object.keys(newProps)) { | ||
rpc_1.release(oldProps[key]); | ||
} | ||
}); | ||
break; | ||
@@ -73,8 +78,3 @@ } | ||
text.text = newText; | ||
const listeners = this.listeners.get(id); | ||
if (listeners) { | ||
for (const listener of listeners) { | ||
listener(text); | ||
} | ||
} | ||
this.enqueueUpdate(text); | ||
break; | ||
@@ -112,4 +112,5 @@ } | ||
enqueueUpdate(attached) { | ||
if (this.timeout == null) { | ||
this.timeout = setTimeout(() => { | ||
var _a; | ||
this.timeout = (_a = this.timeout) !== null && _a !== void 0 ? _a : new Promise((resolve) => { | ||
setTimeout(() => { | ||
const queuedUpdates = [...this.queuedUpdates]; | ||
@@ -126,5 +127,7 @@ this.timeout = null; | ||
} | ||
resolve(); | ||
}, 0); | ||
} | ||
}); | ||
this.queuedUpdates.add(attached); | ||
return this.timeout; | ||
} | ||
@@ -131,0 +134,0 @@ attach(child) { |
@@ -1,2 +0,2 @@ | ||
import { RemoteComponentType, PropsForRemoteComponent, AllowedChildrenForRemoteComponent } from '@remote-ui/types'; | ||
import { RemoteComponentType, PropsForRemoteComponent } from '@remote-ui/types'; | ||
declare type NonOptionalKeys<T> = { | ||
@@ -35,3 +35,4 @@ [K in keyof T]-?: undefined extends T[K] ? never : K; | ||
declare type AllowedRemoteChildren<Children, Root extends RemoteRoot<any, any>> = Children extends RemoteComponentType<any, any> ? RemoteComponent<Children, Root> : never; | ||
declare type AllowedChildren<Children extends RemoteComponentType<any, any> | boolean, Root extends RemoteRoot<any, any>> = Children extends true ? RemoteComponent<any, Root> | RemoteText<Root> : Children extends false ? never : AllowedRemoteChildren<Children, Root>; | ||
declare type ExtractChildren<Type> = Type extends RemoteComponentType<infer Children, any> ? Children : never; | ||
declare type AllowedChildren<Children extends RemoteComponentType<any, any> | boolean, Root extends RemoteRoot<any, any>> = Children extends true ? RemoteComponent<any, Root> | RemoteText<Root> : Children extends false ? never : AllowedRemoteChildren<Children, Root> | RemoteText<Root>; | ||
export interface RemoteRoot<AllowedComponents extends RemoteComponentType<any, any> = RemoteComponentType<any, any>, AllowedChildrenTypes extends RemoteComponentType<any, any> | boolean = true> { | ||
@@ -50,3 +51,3 @@ readonly children: readonly AllowedChildren<AllowedChildrenTypes, RemoteRoot<AllowedComponents, AllowedChildrenTypes>>[]; | ||
readonly props: PropsForRemoteComponent<Type>; | ||
readonly children: readonly AllowedChildrenForRemoteComponent<Type>[]; | ||
readonly children: readonly AllowedChildren<ExtractChildren<Type>, Root>[]; | ||
readonly root: Root; | ||
@@ -56,5 +57,5 @@ readonly top: RemoteComponent<any, Root> | Root | null; | ||
updateProps(props: Partial<PropsForRemoteComponent<Type>>): void | Promise<void>; | ||
appendChild(child: AllowedChildren<AllowedChildrenForRemoteComponent<Type>, Root>): void | Promise<void>; | ||
removeChild(child: AllowedChildren<AllowedChildrenForRemoteComponent<Type>, Root>): void | Promise<void>; | ||
insertChildBefore(child: AllowedChildren<AllowedChildrenForRemoteComponent<Type>, Root>, before: AllowedChildren<AllowedChildrenForRemoteComponent<Type>, Root>): void | Promise<void>; | ||
appendChild(child: AllowedChildren<ExtractChildren<Type>, Root>): void | Promise<void>; | ||
removeChild(child: AllowedChildren<ExtractChildren<Type>, Root>): void | Promise<void>; | ||
insertChildBefore(child: AllowedChildren<ExtractChildren<Type>, Root>, before: AllowedChildren<ExtractChildren<Type>, Root>): void | Promise<void>; | ||
} | ||
@@ -61,0 +62,0 @@ export interface RemoteText<Root extends RemoteRoot<any, any>> { |
{ | ||
"name": "@remote-ui/core", | ||
"version": "0.0.19", | ||
"version": "0.0.20", | ||
"publishConfig": { | ||
@@ -10,6 +10,6 @@ "access": "public", | ||
"dependencies": { | ||
"@remote-ui/rpc": "^0.0.7", | ||
"@remote-ui/rpc": "^0.0.8", | ||
"@remote-ui/types": "^0.0.5" | ||
}, | ||
"gitHead": "bd96aac31482a4f2cc54598159a3271960aade7b" | ||
"gitHead": "0f214b5378b3dbc93376366daaf61088ea6cb213" | ||
} |
@@ -29,3 +29,3 @@ import {retain, release} from '@remote-ui/rpc'; | ||
private timeout: any; | ||
private timeout: Promise<void> | null = null; | ||
private queuedUpdates = new Set<Attachable>(); | ||
@@ -61,7 +61,9 @@ | ||
release(removed); | ||
this.detach(removed); | ||
attached.children = children; | ||
this.enqueueUpdate(attached); | ||
// eslint-disable-next-line promise/catch-or-return | ||
this.enqueueUpdate(attached).then(() => { | ||
release(removed); | ||
}); | ||
@@ -102,11 +104,11 @@ break; | ||
for (const key of Object.keys(newProps)) { | ||
release((oldProps as any)[key]); | ||
} | ||
const props = {...(component.props as any), ...newProps}; | ||
component.props = props; | ||
this.enqueueUpdate(component); | ||
// eslint-disable-next-line promise/catch-or-return | ||
this.enqueueUpdate(component).then(() => { | ||
for (const key of Object.keys(newProps)) { | ||
release((oldProps as any)[key]); | ||
} | ||
}); | ||
@@ -121,10 +123,4 @@ break; | ||
const listeners = this.listeners.get(id); | ||
this.enqueueUpdate(text); | ||
if (listeners) { | ||
for (const listener of listeners) { | ||
listener(text); | ||
} | ||
} | ||
break; | ||
@@ -163,24 +159,30 @@ } | ||
private enqueueUpdate(attached: Attachable) { | ||
if (this.timeout == null) { | ||
this.timeout = setTimeout(() => { | ||
const queuedUpdates = [...this.queuedUpdates]; | ||
this.timeout = | ||
this.timeout ?? | ||
new Promise((resolve) => { | ||
setTimeout(() => { | ||
const queuedUpdates = [...this.queuedUpdates]; | ||
this.timeout = null; | ||
this.queuedUpdates.clear(); | ||
this.timeout = null; | ||
this.queuedUpdates.clear(); | ||
for (const attached of queuedUpdates) { | ||
const listeners = this.listeners.get( | ||
attached === this.root ? ROOT_ID : attached.id, | ||
); | ||
for (const attached of queuedUpdates) { | ||
const listeners = this.listeners.get( | ||
attached === this.root ? ROOT_ID : attached.id, | ||
); | ||
if (listeners) { | ||
for (const listener of listeners) { | ||
listener(attached); | ||
if (listeners) { | ||
for (const listener of listeners) { | ||
listener(attached); | ||
} | ||
} | ||
} | ||
} | ||
}, 0); | ||
} | ||
resolve(); | ||
}, 0); | ||
}); | ||
this.queuedUpdates.add(attached); | ||
return this.timeout; | ||
} | ||
@@ -187,0 +189,0 @@ |
@@ -1,6 +0,2 @@ | ||
import { | ||
RemoteComponentType, | ||
PropsForRemoteComponent, | ||
AllowedChildrenForRemoteComponent, | ||
} from '@remote-ui/types'; | ||
import {RemoteComponentType, PropsForRemoteComponent} from '@remote-ui/types'; | ||
@@ -60,2 +56,9 @@ type NonOptionalKeys<T> = { | ||
type ExtractChildren<Type> = Type extends RemoteComponentType< | ||
infer Children, | ||
any | ||
> | ||
? Children | ||
: never; | ||
type AllowedChildren< | ||
@@ -68,3 +71,3 @@ Children extends RemoteComponentType<any, any> | boolean, | ||
? never | ||
: AllowedRemoteChildren<Children, Root>; | ||
: AllowedRemoteChildren<Children, Root> | RemoteText<Root>; | ||
@@ -125,3 +128,3 @@ export interface RemoteRoot< | ||
readonly props: PropsForRemoteComponent<Type>; | ||
readonly children: readonly AllowedChildrenForRemoteComponent<Type>[]; | ||
readonly children: readonly AllowedChildren<ExtractChildren<Type>, Root>[]; | ||
readonly root: Root; | ||
@@ -134,10 +137,10 @@ readonly top: RemoteComponent<any, Root> | Root | null; | ||
appendChild( | ||
child: AllowedChildren<AllowedChildrenForRemoteComponent<Type>, Root>, | ||
child: AllowedChildren<ExtractChildren<Type>, Root>, | ||
): void | Promise<void>; | ||
removeChild( | ||
child: AllowedChildren<AllowedChildrenForRemoteComponent<Type>, Root>, | ||
child: AllowedChildren<ExtractChildren<Type>, Root>, | ||
): void | Promise<void>; | ||
insertChildBefore( | ||
child: AllowedChildren<AllowedChildrenForRemoteComponent<Type>, Root>, | ||
before: AllowedChildren<AllowedChildrenForRemoteComponent<Type>, Root>, | ||
child: AllowedChildren<ExtractChildren<Type>, Root>, | ||
before: AllowedChildren<ExtractChildren<Type>, Root>, | ||
): void | Promise<void>; | ||
@@ -144,0 +147,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
325217
0.25%2697
0.11%+ Added
- Removed
Updated