@b9g/crank 0.7.7 → 0.7.9
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/_utils.cjs +25 -0
- package/_utils.cjs.map +1 -1
- package/_utils.d.ts +3 -0
- package/_utils.js +23 -1
- package/_utils.js.map +1 -1
- package/crank.cjs +32 -8
- package/crank.cjs.map +1 -1
- package/crank.d.ts +2 -0
- package/crank.js +33 -9
- package/crank.js.map +1 -1
- package/dom.cjs +33 -13
- package/dom.cjs.map +1 -1
- package/dom.js +33 -13
- package/dom.js.map +1 -1
- package/event-target.cjs +6 -8
- package/event-target.cjs.map +1 -1
- package/event-target.js +6 -8
- package/event-target.js.map +1 -1
- package/package.json +2 -2
- package/standalone.cjs +2 -0
- package/standalone.cjs.map +1 -1
- package/standalone.js +1 -0
- package/standalone.js.map +1 -1
- package/umd.js +93 -23
- package/umd.js.map +1 -1
package/crank.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CustomEventTarget } from "./event-target.js";
|
|
2
|
+
import { setProfiling } from "./_utils.js";
|
|
2
3
|
/**
|
|
3
4
|
* A type which represents all valid values for an element tag.
|
|
4
5
|
*/
|
|
@@ -726,6 +727,7 @@ declare global {
|
|
|
726
727
|
* Some JSX tools expect things like createElement/Fragment to be defined on
|
|
727
728
|
* the default export. Prefer using the named exports directly.
|
|
728
729
|
*/
|
|
730
|
+
export { setProfiling };
|
|
729
731
|
declare const _default: {
|
|
730
732
|
createElement: typeof createElement;
|
|
731
733
|
Fragment: string;
|
package/crank.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="crank.d.ts" />
|
|
2
2
|
import { removeEventTargetDelegates, addEventTargetDelegates, clearEventListeners, CustomEventTarget } from './event-target.js';
|
|
3
|
-
import { isPromiseLike, unwrap, wrap, arrayify, safeRace, isIteratorLike } from './_utils.js';
|
|
3
|
+
import { isPromiseLike, unwrap, wrap, arrayify, safeRace, markStart, measureMark, isIteratorLike } from './_utils.js';
|
|
4
|
+
export { setProfiling } from './_utils.js';
|
|
4
5
|
|
|
5
6
|
const NOOP = () => { };
|
|
6
7
|
function getTagName(tag) {
|
|
@@ -425,11 +426,16 @@ function getRootRetainer(renderer, bridge, { children, root, hydrate, }) {
|
|
|
425
426
|
return ret;
|
|
426
427
|
}
|
|
427
428
|
function renderRoot(adapter, root, ret, children) {
|
|
429
|
+
const commitLabel = "commit (" + getTagName(ret.el.tag) + ")";
|
|
430
|
+
markStart("diff");
|
|
428
431
|
const diff = diffChildren(adapter, root, ret, ret.ctx, ret.scope, ret, children);
|
|
429
432
|
const schedulePromises = [];
|
|
430
433
|
if (isPromiseLike(diff)) {
|
|
431
434
|
return diff.then(() => {
|
|
435
|
+
measureMark("diff");
|
|
436
|
+
markStart(commitLabel);
|
|
432
437
|
commit(adapter, ret, ret, ret.ctx, ret.scope, root, 0, schedulePromises, undefined);
|
|
438
|
+
measureMark(commitLabel);
|
|
433
439
|
if (schedulePromises.length > 0) {
|
|
434
440
|
return Promise.all(schedulePromises).then(() => {
|
|
435
441
|
if (typeof root !== "object" || root === null) {
|
|
@@ -444,7 +450,10 @@ function renderRoot(adapter, root, ret, children) {
|
|
|
444
450
|
return adapter.read(unwrap(getChildValues(ret)));
|
|
445
451
|
});
|
|
446
452
|
}
|
|
453
|
+
measureMark("diff");
|
|
454
|
+
markStart(commitLabel);
|
|
447
455
|
commit(adapter, ret, ret, ret.ctx, ret.scope, root, 0, schedulePromises, undefined);
|
|
456
|
+
measureMark(commitLabel);
|
|
448
457
|
if (schedulePromises.length > 0) {
|
|
449
458
|
return Promise.all(schedulePromises).then(() => {
|
|
450
459
|
if (typeof root !== "object" || root === null) {
|
|
@@ -1546,6 +1555,7 @@ class Context extends CustomEventTarget {
|
|
|
1546
1555
|
if (getFlag(ctx.ret, IsScheduling)) {
|
|
1547
1556
|
setFlag(ctx.ret, IsSchedulingRefresh);
|
|
1548
1557
|
}
|
|
1558
|
+
const commitLabel = "commit (" + getTagName(ctx.ret.el.tag) + ")";
|
|
1549
1559
|
let diff;
|
|
1550
1560
|
const schedulePromises = [];
|
|
1551
1561
|
try {
|
|
@@ -1553,7 +1563,12 @@ class Context extends CustomEventTarget {
|
|
|
1553
1563
|
diff = enqueueComponent(ctx);
|
|
1554
1564
|
if (isPromiseLike(diff)) {
|
|
1555
1565
|
return diff
|
|
1556
|
-
.then(() =>
|
|
1566
|
+
.then(() => {
|
|
1567
|
+
markStart(commitLabel);
|
|
1568
|
+
const value = commitComponent(ctx, schedulePromises);
|
|
1569
|
+
measureMark(commitLabel);
|
|
1570
|
+
return ctx.adapter.read(value);
|
|
1571
|
+
})
|
|
1557
1572
|
.then((result) => {
|
|
1558
1573
|
if (schedulePromises.length) {
|
|
1559
1574
|
return Promise.all(schedulePromises).then(() => {
|
|
@@ -1583,7 +1598,9 @@ class Context extends CustomEventTarget {
|
|
|
1583
1598
|
})
|
|
1584
1599
|
.finally(() => setFlag(ctx.ret, IsRefreshing, false));
|
|
1585
1600
|
}
|
|
1601
|
+
markStart(commitLabel);
|
|
1586
1602
|
const result = ctx.adapter.read(commitComponent(ctx, schedulePromises));
|
|
1603
|
+
measureMark(commitLabel);
|
|
1587
1604
|
if (schedulePromises.length) {
|
|
1588
1605
|
return Promise.all(schedulePromises).then(() => {
|
|
1589
1606
|
return ctx.adapter.read(getValue(ctx.ret));
|
|
@@ -1813,11 +1830,13 @@ function runComponent(ctx) {
|
|
|
1813
1830
|
}
|
|
1814
1831
|
const ret = ctx.ret;
|
|
1815
1832
|
const initial = !ctx.iterator;
|
|
1833
|
+
const tagName = getTagName(ret.el.tag);
|
|
1816
1834
|
if (initial) {
|
|
1817
1835
|
setFlag(ctx.ret, IsExecuting);
|
|
1818
1836
|
clearEventListeners(ctx.ctx);
|
|
1819
1837
|
let returned;
|
|
1820
1838
|
try {
|
|
1839
|
+
markStart(tagName);
|
|
1821
1840
|
returned = ret.el.tag.call(ctx.ctx, ret.el.props, ctx.ctx);
|
|
1822
1841
|
}
|
|
1823
1842
|
catch (err) {
|
|
@@ -1832,6 +1851,7 @@ function runComponent(ctx) {
|
|
|
1832
1851
|
}
|
|
1833
1852
|
else if (!isPromiseLike(returned)) {
|
|
1834
1853
|
// sync function component
|
|
1854
|
+
measureMark(tagName);
|
|
1835
1855
|
return [
|
|
1836
1856
|
undefined,
|
|
1837
1857
|
diffComponentChildren(ctx, returned, false),
|
|
@@ -1840,6 +1860,7 @@ function runComponent(ctx) {
|
|
|
1840
1860
|
else {
|
|
1841
1861
|
// async function component
|
|
1842
1862
|
const returned1 = returned instanceof Promise ? returned : Promise.resolve(returned);
|
|
1863
|
+
returned1.then(() => measureMark(tagName), () => measureMark(tagName));
|
|
1843
1864
|
return [
|
|
1844
1865
|
returned1.catch(NOOP),
|
|
1845
1866
|
returned1.then((returned) => diffComponentChildren(ctx, returned, false), (err) => {
|
|
@@ -1853,6 +1874,7 @@ function runComponent(ctx) {
|
|
|
1853
1874
|
if (initial) {
|
|
1854
1875
|
try {
|
|
1855
1876
|
setFlag(ctx.ret, IsExecuting);
|
|
1877
|
+
markStart(tagName);
|
|
1856
1878
|
iteration = ctx.iterator.next();
|
|
1857
1879
|
}
|
|
1858
1880
|
catch (err) {
|
|
@@ -1875,7 +1897,9 @@ function runComponent(ctx) {
|
|
|
1875
1897
|
try {
|
|
1876
1898
|
setFlag(ctx.ret, IsExecuting);
|
|
1877
1899
|
const oldResult = ctx.adapter.read(getValue(ctx.ret));
|
|
1900
|
+
markStart(tagName);
|
|
1878
1901
|
iteration = ctx.iterator.next(oldResult);
|
|
1902
|
+
measureMark(tagName);
|
|
1879
1903
|
}
|
|
1880
1904
|
catch (err) {
|
|
1881
1905
|
setFlag(ctx.ret, IsErrored);
|
|
@@ -1885,6 +1909,9 @@ function runComponent(ctx) {
|
|
|
1885
1909
|
setFlag(ctx.ret, IsExecuting, false);
|
|
1886
1910
|
}
|
|
1887
1911
|
}
|
|
1912
|
+
else {
|
|
1913
|
+
measureMark(tagName);
|
|
1914
|
+
}
|
|
1888
1915
|
if (isPromiseLike(iteration)) {
|
|
1889
1916
|
throw new Error("Mixed generator component");
|
|
1890
1917
|
}
|
|
@@ -1907,6 +1934,7 @@ function runComponent(ctx) {
|
|
|
1907
1934
|
else {
|
|
1908
1935
|
if (getFlag(ctx.ret, IsInForAwaitOfLoop)) {
|
|
1909
1936
|
// initializes the async generator loop
|
|
1937
|
+
measureMark(tagName);
|
|
1910
1938
|
pullComponent(ctx, iteration);
|
|
1911
1939
|
const block = resumePropsAsyncIterator(ctx);
|
|
1912
1940
|
return [block, ctx.pull && ctx.pull.diff];
|
|
@@ -1919,6 +1947,7 @@ function runComponent(ctx) {
|
|
|
1919
1947
|
try {
|
|
1920
1948
|
setFlag(ctx.ret, IsExecuting);
|
|
1921
1949
|
const oldResult = ctx.adapter.read(getValue(ctx.ret));
|
|
1950
|
+
markStart(tagName);
|
|
1922
1951
|
iteration = ctx.iterator.next(oldResult);
|
|
1923
1952
|
}
|
|
1924
1953
|
catch (err) {
|
|
@@ -1932,6 +1961,7 @@ function runComponent(ctx) {
|
|
|
1932
1961
|
if (!isPromiseLike(iteration)) {
|
|
1933
1962
|
throw new Error("Mixed generator component");
|
|
1934
1963
|
}
|
|
1964
|
+
iteration.then(() => measureMark(tagName), () => measureMark(tagName));
|
|
1935
1965
|
const diff = iteration.then((iteration) => {
|
|
1936
1966
|
if (getFlag(ctx.ret, IsInForAwaitOfLoop)) {
|
|
1937
1967
|
// We have entered a for await...of loop, so we start pulling
|
|
@@ -2326,7 +2356,7 @@ async function unmountComponent(ctx, isNested) {
|
|
|
2326
2356
|
}
|
|
2327
2357
|
}
|
|
2328
2358
|
let didLinger = false;
|
|
2329
|
-
if (!isNested && cleanupPromises
|
|
2359
|
+
if (!isNested && cleanupPromises) {
|
|
2330
2360
|
didLinger = true;
|
|
2331
2361
|
const index = ctx.index;
|
|
2332
2362
|
const lingerers = ctx.host.lingerers || (ctx.host.lingerers = []);
|
|
@@ -2503,12 +2533,6 @@ function propagateError(ctx, err, schedulePromises) {
|
|
|
2503
2533
|
}
|
|
2504
2534
|
commitComponent(parent, schedulePromises);
|
|
2505
2535
|
}
|
|
2506
|
-
/**
|
|
2507
|
-
* A re-export of some Crank exports as the default export.
|
|
2508
|
-
*
|
|
2509
|
-
* Some JSX tools expect things like createElement/Fragment to be defined on
|
|
2510
|
-
* the default export. Prefer using the named exports directly.
|
|
2511
|
-
*/
|
|
2512
2536
|
var crank = { createElement, Fragment };
|
|
2513
2537
|
|
|
2514
2538
|
export { Context, Copy, Element, Fragment, Portal, Raw, Renderer, Text, cloneElement, createElement, crank as default, isElement };
|