kiru 1.2.1 → 1.3.0
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/dist/components/derive.d.ts +7 -6
- package/dist/components/derive.d.ts.map +1 -1
- package/dist/components/derive.js +9 -10
- package/dist/components/derive.js.map +1 -1
- package/dist/components/errorBoundary.d.ts +1 -1
- package/dist/components/errorBoundary.d.ts.map +1 -1
- package/dist/components/errorBoundary.js.map +1 -1
- package/dist/components/transition.d.ts.map +1 -1
- package/dist/components/transition.js +14 -11
- package/dist/components/transition.js.map +1 -1
- package/dist/error.d.ts +0 -2
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +11 -14
- package/dist/error.js.map +1 -1
- package/dist/headlessRender.d.ts +2 -2
- package/dist/headlessRender.d.ts.map +1 -1
- package/dist/headlessRender.js +2 -3
- package/dist/headlessRender.js.map +1 -1
- package/dist/hmr.d.ts +1 -0
- package/dist/hmr.d.ts.map +1 -1
- package/dist/hmr.js +6 -2
- package/dist/hmr.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/renderToString.js +1 -1
- package/dist/renderToString.js.map +1 -1
- package/dist/resource.d.ts +19 -0
- package/dist/resource.d.ts.map +1 -0
- package/dist/resource.js +167 -0
- package/dist/resource.js.map +1 -0
- package/dist/scheduler.js +13 -8
- package/dist/scheduler.js.map +1 -1
- package/dist/signals/base.d.ts +3 -5
- package/dist/signals/base.d.ts.map +1 -1
- package/dist/signals/base.js +12 -54
- package/dist/signals/base.js.map +1 -1
- package/dist/signals/computed.d.ts.map +1 -1
- package/dist/signals/computed.js +5 -11
- package/dist/signals/computed.js.map +1 -1
- package/dist/signals/globals.d.ts +0 -2
- package/dist/signals/globals.d.ts.map +1 -1
- package/dist/signals/globals.js +0 -1
- package/dist/signals/globals.js.map +1 -1
- package/dist/signals/types.d.ts +1 -1
- package/dist/signals/types.d.ts.map +1 -1
- package/dist/ssr/server.d.ts +4 -4
- package/dist/ssr/server.d.ts.map +1 -1
- package/dist/ssr/server.js +11 -7
- package/dist/ssr/server.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/stream.d.ts +12 -0
- package/dist/utils/stream.d.ts.map +1 -0
- package/dist/utils/stream.js +8 -0
- package/dist/utils/stream.js.map +1 -0
- package/package.json +1 -13
- package/src/components/derive.ts +29 -36
- package/src/components/errorBoundary.ts +3 -1
- package/src/components/transition.ts +15 -10
- package/src/error.ts +11 -19
- package/src/headlessRender.ts +5 -5
- package/src/hmr.ts +13 -3
- package/src/index.ts +1 -1
- package/src/renderToString.ts +1 -1
- package/src/resource.ts +207 -0
- package/src/scheduler.ts +14 -8
- package/src/signals/base.ts +18 -57
- package/src/signals/computed.ts +4 -8
- package/src/signals/globals.ts +0 -3
- package/src/signals/types.ts +1 -1
- package/src/ssr/server.ts +18 -11
- package/src/types.ts +4 -4
- package/src/utils/index.ts +2 -1
- package/src/utils/stream.ts +17 -0
- package/dist/statefulPromise.d.ts +0 -22
- package/dist/statefulPromise.d.ts.map +0 -1
- package/dist/statefulPromise.js +0 -94
- package/dist/statefulPromise.js.map +0 -1
- package/src/statefulPromise.ts +0 -136
package/dist/ssr/server.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Readable } from "node:stream";
|
|
2
1
|
import { Fragment } from "../element.js";
|
|
3
2
|
import { renderMode } from "../globals.js";
|
|
4
3
|
import { STREAMED_DATA_EVENT } from "../constants.js";
|
|
@@ -19,7 +18,12 @@ d.currentScript.remove()
|
|
|
19
18
|
</script>
|
|
20
19
|
`;
|
|
21
20
|
export function renderToReadableStream(element) {
|
|
22
|
-
|
|
21
|
+
let controller;
|
|
22
|
+
const stream = new ReadableStream({
|
|
23
|
+
start(c) {
|
|
24
|
+
controller = c;
|
|
25
|
+
},
|
|
26
|
+
});
|
|
23
27
|
const rootNode = Fragment({ children: element });
|
|
24
28
|
const streamPromises = new Set();
|
|
25
29
|
const pendingWritePromises = [];
|
|
@@ -36,7 +40,7 @@ export function renderToReadableStream(element) {
|
|
|
36
40
|
.catch(() => ({ error: promise.error?.message }))
|
|
37
41
|
.then((value) => {
|
|
38
42
|
const content = JSON.stringify(value);
|
|
39
|
-
|
|
43
|
+
controller.enqueue(`<script id="${promise.id}" k-data type="application/json">${content}</script>`);
|
|
40
44
|
});
|
|
41
45
|
pendingWritePromises.push(writePromise);
|
|
42
46
|
}
|
|
@@ -44,16 +48,16 @@ export function renderToReadableStream(element) {
|
|
|
44
48
|
};
|
|
45
49
|
const prev = renderMode.current;
|
|
46
50
|
renderMode.current = "stream";
|
|
47
|
-
headlessRender(ctx, rootNode
|
|
51
|
+
headlessRender(ctx, rootNode);
|
|
48
52
|
renderMode.current = prev;
|
|
49
53
|
if (pendingWritePromises.length > 0) {
|
|
50
54
|
Promise.all(pendingWritePromises).then(() => {
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
controller.enqueue(STREAMED_DATA_SETUP);
|
|
56
|
+
controller.close();
|
|
53
57
|
});
|
|
54
58
|
}
|
|
55
59
|
else {
|
|
56
|
-
|
|
60
|
+
controller.close();
|
|
57
61
|
}
|
|
58
62
|
return { immediate, stream };
|
|
59
63
|
}
|
package/dist/ssr/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ssr/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ssr/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAyB,MAAM,sBAAsB,CAAA;AAE5E,MAAM,mBAAmB,GAAG;;;iBAGX,mBAAmB;;;;;mCAKD,mBAAmB;;;;;;CAMrD,CAAA;AAOD,MAAM,UAAU,sBAAsB,CAAC,OAAoB;IACzD,IAAI,UAAoD,CAAA;IACxD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAS;QACxC,KAAK,CAAC,CAAC;YACL,UAAU,GAAG,CAAC,CAAA;QAChB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IAChD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiC,CAAA;IAC/D,MAAM,oBAAoB,GAAoB,EAAE,CAAA;IAEhD,IAAI,SAAS,GAAG,EAAE,CAAA;IAElB,MAAM,GAAG,GAA0B;QACjC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC;QACtC,YAAY,CAAC,IAAI;YACf,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;gBAC3B,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;oBAAE,SAAQ;gBACzC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAE3B,MAAM,YAAY,GAAG,OAAO;qBACzB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;qBACrC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;qBAChD,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;oBACd,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;oBACrC,UAAU,CAAC,OAAO,CAChB,eAAe,OAAO,CAAC,EAAE,oCAAoC,OAAO,WAAW,CAChF,CAAA;gBACH,CAAC,CAAC,CAAA;gBAEJ,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;KACF,CAAA;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAA;IAC/B,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAA;IAC7B,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC7B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAA;IAEzB,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1C,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;YACvC,UAAU,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;AAC9B,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -87,7 +87,7 @@ declare global {
|
|
|
87
87
|
value?: T;
|
|
88
88
|
error?: Error;
|
|
89
89
|
}
|
|
90
|
-
interface
|
|
90
|
+
interface StatefulPromise<T> extends Promise<T>, PromiseState<T> {
|
|
91
91
|
}
|
|
92
92
|
type RenderMode = "dom" | "hydrate" | "string" | "stream";
|
|
93
93
|
type StateSetter<T> = T | ((prev: T) => T);
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * from "./compare.js";
|
|
2
2
|
export * from "./dom.js";
|
|
3
3
|
export * from "./format.js";
|
|
4
|
+
export * from "./generateId.js";
|
|
4
5
|
export * from "./runtime.js";
|
|
6
|
+
export * from "./stream.js";
|
|
5
7
|
export * from "./vdom.js";
|
|
6
|
-
export * from "./generateId.js";
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * from "./compare.js";
|
|
2
2
|
export * from "./dom.js";
|
|
3
3
|
export * from "./format.js";
|
|
4
|
+
export * from "./generateId.js";
|
|
4
5
|
export * from "./runtime.js";
|
|
6
|
+
export * from "./stream.js";
|
|
5
7
|
export * from "./vdom.js";
|
|
6
|
-
export * from "./generateId.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { $STREAM_DATA } from "../constants.js";
|
|
2
|
+
export interface StreamDataThrowValue {
|
|
3
|
+
[$STREAM_DATA]: {
|
|
4
|
+
fallback?: JSX.Element;
|
|
5
|
+
data: Kiru.StatefulPromise<unknown>[];
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Returns true if the value is a {@link StreamDataThrowValue}
|
|
10
|
+
*/
|
|
11
|
+
export declare function isStreamDataThrowValue(value: unknown): value is StreamDataThrowValue;
|
|
12
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,WAAW,oBAAoB;IACnC,CAAC,YAAY,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;QACtB,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAA;KACtC,CAAA;CACF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,oBAAoB,CAE/B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { $STREAM_DATA } from "../constants.js";
|
|
2
|
+
/**
|
|
3
|
+
* Returns true if the value is a {@link StreamDataThrowValue}
|
|
4
|
+
*/
|
|
5
|
+
export function isStreamDataThrowValue(value) {
|
|
6
|
+
return typeof value === "object" && !!value && $STREAM_DATA in value;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAS9C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,YAAY,IAAI,KAAK,CAAA;AACtE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kiru",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "A batteries-included, easy-to-use rendering library with a tiny footprint",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -10,14 +10,6 @@
|
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"default": "./dist/index.js"
|
|
12
12
|
},
|
|
13
|
-
"./form": {
|
|
14
|
-
"types": "./dist/form/index.d.ts",
|
|
15
|
-
"default": "./dist/form/index.js"
|
|
16
|
-
},
|
|
17
|
-
"./swr": {
|
|
18
|
-
"types": "./dist/swr.d.ts",
|
|
19
|
-
"default": "./dist/swr.js"
|
|
20
|
-
},
|
|
21
13
|
"./utils": {
|
|
22
14
|
"types": "./dist/utils/index.d.ts",
|
|
23
15
|
"default": "./dist/utils/index.js"
|
|
@@ -26,10 +18,6 @@
|
|
|
26
18
|
"types": "./dist/router/index.d.ts",
|
|
27
19
|
"default": "./dist/router/index.js"
|
|
28
20
|
},
|
|
29
|
-
"./router/dev": {
|
|
30
|
-
"types": "./dist/router/dev/index.d.ts",
|
|
31
|
-
"default": "./dist/router/dev/index.js"
|
|
32
|
-
},
|
|
33
21
|
"./router/client": {
|
|
34
22
|
"types": "./dist/router/client/index.d.ts",
|
|
35
23
|
"default": "./dist/router/client/index.js"
|
package/src/components/derive.ts
CHANGED
|
@@ -1,33 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
sideEffectsEnabled,
|
|
3
|
+
type StreamDataThrowValue,
|
|
4
|
+
} from "../utils/index.js"
|
|
2
5
|
import { Signal } from "../signals/index.js"
|
|
3
6
|
import { $STREAM_DATA } from "../constants.js"
|
|
4
7
|
import { node } from "../globals.js"
|
|
5
|
-
import { ref } from "../ref.js"
|
|
6
8
|
import { requestUpdate } from "../scheduler.js"
|
|
7
|
-
import {
|
|
9
|
+
import { isResource, Resource } from "../resource.js"
|
|
8
10
|
import type { RecordHas } from "../types.utils"
|
|
9
11
|
|
|
10
12
|
export type Derivable =
|
|
11
13
|
| Kiru.Signal<unknown>
|
|
12
|
-
| Kiru.
|
|
13
|
-
| Record<string, Kiru.Signal<unknown> | Kiru.StatefulPromiseBase<unknown>>
|
|
14
|
+
| Record<string, Kiru.Signal<unknown>>
|
|
14
15
|
|
|
15
|
-
type InnerOf<T> =
|
|
16
|
-
T extends Kiru.Signal<infer V>
|
|
17
|
-
? V
|
|
18
|
-
: T extends Kiru.StatefulPromiseBase<infer P>
|
|
19
|
-
? P
|
|
20
|
-
: never
|
|
16
|
+
type InnerOf<T> = T extends Kiru.Signal<infer V> ? V : never
|
|
21
17
|
|
|
22
|
-
type
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
: { [K in keyof T]: InnerOf<T[K]> }
|
|
18
|
+
type UnwrapDerivable<T extends Derivable> =
|
|
19
|
+
T extends Kiru.Signal<unknown>
|
|
20
|
+
? InnerOf<T>
|
|
21
|
+
: { [K in keyof T]: InnerOf<T[K]> }
|
|
27
22
|
|
|
28
|
-
type
|
|
23
|
+
type RecordHasResource<T extends Record<string, any>> = RecordHas<
|
|
29
24
|
T,
|
|
30
|
-
|
|
25
|
+
Resource<any>
|
|
31
26
|
>
|
|
32
27
|
|
|
33
28
|
type ChildFn<T> = (value: T) => JSX.Children
|
|
@@ -41,21 +36,21 @@ export interface DeriveProps<
|
|
|
41
36
|
> {
|
|
42
37
|
from: T
|
|
43
38
|
mode?: Mode
|
|
44
|
-
children: T extends
|
|
39
|
+
children: T extends Resource<infer U>
|
|
45
40
|
? Mode extends "swr"
|
|
46
41
|
? ChildFnWithStale<U>
|
|
47
42
|
: ChildFn<U>
|
|
48
43
|
: T extends Record<string, any>
|
|
49
|
-
?
|
|
44
|
+
? RecordHasResource<T> extends true
|
|
50
45
|
? Mode extends "swr"
|
|
51
|
-
? ChildFnWithStale<
|
|
52
|
-
: ChildFn<
|
|
53
|
-
: ChildFn<
|
|
54
|
-
: ChildFn<
|
|
55
|
-
fallback?: T extends
|
|
46
|
+
? ChildFnWithStale<UnwrapDerivable<T>>
|
|
47
|
+
: ChildFn<UnwrapDerivable<T>>
|
|
48
|
+
: ChildFn<UnwrapDerivable<T>>
|
|
49
|
+
: ChildFn<UnwrapDerivable<T>>
|
|
50
|
+
fallback?: T extends Resource<any>
|
|
56
51
|
? JSX.Element
|
|
57
52
|
: T extends Record<string, any>
|
|
58
|
-
?
|
|
53
|
+
? RecordHasResource<T> extends true
|
|
59
54
|
? JSX.Element
|
|
60
55
|
: never
|
|
61
56
|
: never
|
|
@@ -72,15 +67,15 @@ type Derive = {
|
|
|
72
67
|
* @see https://kirujs.dev/docs/components/derive
|
|
73
68
|
*/
|
|
74
69
|
export const Derive: Derive = () => {
|
|
70
|
+
let prevSuccess: unknown
|
|
75
71
|
return (props) => {
|
|
76
72
|
const { from, children, fallback, mode } = props
|
|
77
|
-
const prevSuccess = ref<unknown>(null)
|
|
78
73
|
|
|
79
|
-
const promises = new Set<Kiru.
|
|
74
|
+
const promises = new Set<Kiru.StatefulPromise<any>>()
|
|
80
75
|
let value: unknown
|
|
81
76
|
|
|
82
|
-
if (
|
|
83
|
-
promises.add(from)
|
|
77
|
+
if (isResource(from)) {
|
|
78
|
+
promises.add(from.promise)
|
|
84
79
|
value = from.value as unknown
|
|
85
80
|
} else if (Signal.isSignal(from)) {
|
|
86
81
|
value = from.value as unknown
|
|
@@ -88,10 +83,8 @@ export const Derive: Derive = () => {
|
|
|
88
83
|
const out: Record<string, any> = {}
|
|
89
84
|
for (const key in from) {
|
|
90
85
|
const v = from[key]
|
|
91
|
-
if (
|
|
92
|
-
out[key] = (
|
|
93
|
-
v as Signal<unknown> | Kiru.StatefulPromiseBase<unknown>
|
|
94
|
-
).value
|
|
86
|
+
if (isResource(v)) promises.add(v.promise)
|
|
87
|
+
out[key] = (v as Signal<unknown> | Kiru.StatefulPromise<unknown>).value
|
|
95
88
|
}
|
|
96
89
|
value = out as unknown
|
|
97
90
|
}
|
|
@@ -116,7 +109,7 @@ export const Derive: Derive = () => {
|
|
|
116
109
|
const nodeRef = node.current!
|
|
117
110
|
Promise.allSettled(promises).then(() => requestUpdate(nodeRef))
|
|
118
111
|
|
|
119
|
-
const prev = prevSuccess
|
|
112
|
+
const prev = prevSuccess
|
|
120
113
|
if (mode !== "fallback" && prev) {
|
|
121
114
|
return (children as ChildFnWithStale<unknown>)(prev, true)
|
|
122
115
|
}
|
|
@@ -124,7 +117,7 @@ export const Derive: Derive = () => {
|
|
|
124
117
|
}
|
|
125
118
|
}
|
|
126
119
|
|
|
127
|
-
prevSuccess
|
|
120
|
+
prevSuccess = value
|
|
128
121
|
return (children as ChildFnWithStale<unknown>)(value, false)
|
|
129
122
|
}
|
|
130
123
|
}
|
|
@@ -3,7 +3,9 @@ import { createElement } from "../index.js"
|
|
|
3
3
|
|
|
4
4
|
export interface ErrorBoundaryProps {
|
|
5
5
|
children?: JSX.Children
|
|
6
|
-
fallback?:
|
|
6
|
+
fallback?:
|
|
7
|
+
| Exclude<JSX.Element, (props: any) => JSX.Element>
|
|
8
|
+
| ((error: Error) => JSX.Element)
|
|
7
9
|
onError?: (error: Error) => void
|
|
8
10
|
}
|
|
9
11
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { onCleanup } from "../hooks/onCleanup.js"
|
|
2
|
-
import {
|
|
3
|
-
import { effect } from "../signals/effect.js"
|
|
2
|
+
import { Signal } from "../signals/base.js"
|
|
4
3
|
import { unwrap } from "../signals/utils.js"
|
|
4
|
+
import { setup } from "../hooks/setup.js"
|
|
5
5
|
|
|
6
6
|
export type TransitionState = "entering" | "entered" | "exiting" | "exited"
|
|
7
7
|
interface TransitionProps {
|
|
@@ -26,26 +26,29 @@ interface TransitionProps {
|
|
|
26
26
|
* @see https://kirujs.dev/docs/components/transition
|
|
27
27
|
*/
|
|
28
28
|
export const Transition: Kiru.FC<TransitionProps> = (props) => {
|
|
29
|
-
const
|
|
29
|
+
const $ = setup<typeof Transition>()
|
|
30
|
+
const tState = $.derive<TransitionState>((p) => p.initialState || "exited")
|
|
31
|
+
const inState = $.derive((p) => unwrap(p.in, true))
|
|
30
32
|
let timeoutRef: number | undefined
|
|
33
|
+
let onTransitionEnd = props.onTransitionEnd
|
|
34
|
+
let duration = props.duration
|
|
31
35
|
|
|
32
36
|
const setTransitionState = (transitionState: TransitionState) => {
|
|
33
37
|
clearTimeout(timeoutRef)
|
|
34
38
|
tState.value = transitionState
|
|
35
39
|
if (transitionState === "entered" || transitionState === "exited") {
|
|
36
|
-
|
|
40
|
+
onTransitionEnd?.(transitionState)
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
const queueStateChange = (transitionState: "entered" | "exited") => {
|
|
41
45
|
timeoutRef = window.setTimeout(
|
|
42
46
|
() => setTransitionState(transitionState),
|
|
43
|
-
getTiming(transitionState,
|
|
47
|
+
getTiming(transitionState, duration)
|
|
44
48
|
)
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
const newIn = unwrap(props.in, true)
|
|
51
|
+
const unsub = inState.subscribe((newIn) => {
|
|
49
52
|
const current = tState.peek()
|
|
50
53
|
if (newIn && current !== "entered" && current !== "entering") {
|
|
51
54
|
setTransitionState("entering")
|
|
@@ -56,10 +59,12 @@ export const Transition: Kiru.FC<TransitionProps> = (props) => {
|
|
|
56
59
|
}
|
|
57
60
|
})
|
|
58
61
|
|
|
59
|
-
onCleanup(() => clearTimeout(timeoutRef))
|
|
62
|
+
onCleanup(() => (unsub(), clearTimeout(timeoutRef)))
|
|
60
63
|
|
|
61
|
-
return (
|
|
62
|
-
|
|
64
|
+
return (props) => {
|
|
65
|
+
duration = props.duration
|
|
66
|
+
onTransitionEnd = props.onTransitionEnd
|
|
67
|
+
return props.element(tState.value)
|
|
63
68
|
}
|
|
64
69
|
}
|
|
65
70
|
|
package/src/error.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { $KIRU_ERROR } from "./constants.js"
|
|
1
|
+
import { $DEV_FILE_LINK, $KIRU_ERROR } from "./constants.js"
|
|
2
2
|
import { __DEV__ } from "./env.js"
|
|
3
|
-
import { findParent, noop } from "./utils/index.js"
|
|
4
3
|
|
|
5
4
|
type KiruErrorOptions =
|
|
6
5
|
| string
|
|
@@ -16,8 +15,6 @@ export class KiruError extends Error {
|
|
|
16
15
|
[$KIRU_ERROR] = true
|
|
17
16
|
/** Indicates whether the error is fatal and should crash the application */
|
|
18
17
|
fatal?: boolean
|
|
19
|
-
/** Present if vNode is provided */
|
|
20
|
-
customNodeStack?: string
|
|
21
18
|
constructor(optionsOrMessage: KiruErrorOptions) {
|
|
22
19
|
const message =
|
|
23
20
|
typeof optionsOrMessage === "string"
|
|
@@ -26,18 +23,21 @@ export class KiruError extends Error {
|
|
|
26
23
|
super(message)
|
|
27
24
|
if (typeof optionsOrMessage !== "string") {
|
|
28
25
|
if (__DEV__ && optionsOrMessage?.vNode) {
|
|
29
|
-
|
|
26
|
+
const stack = createVNodeStack(optionsOrMessage.vNode)
|
|
27
|
+
this.message = `${message}
|
|
28
|
+
${stack.map((item) => ` at ${item}`).join("\n")}
|
|
29
|
+
`
|
|
30
30
|
}
|
|
31
31
|
this.fatal = optionsOrMessage?.fatal
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
static isKiruError(error: unknown): error is KiruError {
|
|
36
|
-
return error instanceof Error &&
|
|
36
|
+
return error instanceof Error && $KIRU_ERROR in error
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
function
|
|
40
|
+
function createVNodeStack(vNode: Kiru.VNode) {
|
|
41
41
|
let n = vNode
|
|
42
42
|
let componentFns: string[] = []
|
|
43
43
|
while (n) {
|
|
@@ -45,24 +45,16 @@ function captureErrorStack(vNode: Kiru.VNode) {
|
|
|
45
45
|
if (typeof n.type === "function") {
|
|
46
46
|
componentFns.push(getComponentErrorDisplayText(n.type))
|
|
47
47
|
} else if (typeof n.type === "string") {
|
|
48
|
-
componentFns.push(n.type)
|
|
48
|
+
componentFns.push(`<${n.type}>`)
|
|
49
49
|
}
|
|
50
50
|
n = n.parent
|
|
51
51
|
}
|
|
52
|
-
const componentNode = (
|
|
53
|
-
typeof vNode.type === "function"
|
|
54
|
-
? vNode
|
|
55
|
-
: findParent(vNode, (n) => typeof n.type === "function")
|
|
56
|
-
) as (Kiru.VNode & { type: Function }) | null
|
|
57
|
-
return `The above error occurred in the <${getFunctionName(
|
|
58
|
-
componentNode?.type || noop
|
|
59
|
-
)}> component:
|
|
60
52
|
|
|
61
|
-
|
|
53
|
+
return componentFns
|
|
62
54
|
}
|
|
63
55
|
|
|
64
56
|
function getComponentErrorDisplayText(fn: Function) {
|
|
65
|
-
let str = getFunctionName(fn)
|
|
57
|
+
let str = `<${getFunctionName(fn)}>`
|
|
66
58
|
if (__DEV__) {
|
|
67
59
|
const fileLink = getComponentFileLink(fn)
|
|
68
60
|
if (fileLink) {
|
|
@@ -77,5 +69,5 @@ function getFunctionName(fn: Function) {
|
|
|
77
69
|
}
|
|
78
70
|
|
|
79
71
|
function getComponentFileLink(fn: Function) {
|
|
80
|
-
return fn
|
|
72
|
+
return (fn as any)[$DEV_FILE_LINK] ?? null
|
|
81
73
|
}
|
package/src/headlessRender.ts
CHANGED
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
assertValidElementProps,
|
|
8
8
|
isPrimitiveChild,
|
|
9
9
|
isValidTextChild,
|
|
10
|
+
isStreamDataThrowValue,
|
|
10
11
|
} from "./utils/index.js"
|
|
11
|
-
import { isStreamDataThrowValue } from "./statefulPromise.js"
|
|
12
12
|
import { Signal } from "./signals/base.js"
|
|
13
13
|
import { $ERROR_BOUNDARY, voidElements, $STREAM_DATA } from "./constants.js"
|
|
14
14
|
import { __DEV__ } from "./env.js"
|
|
@@ -16,14 +16,14 @@ import type { ErrorBoundaryNode } from "./types.utils"
|
|
|
16
16
|
|
|
17
17
|
export interface HeadlessRenderContext {
|
|
18
18
|
write(chunk: string): void
|
|
19
|
-
onStreamData?: (data: Kiru.
|
|
19
|
+
onStreamData?: (data: Kiru.StatefulPromise<unknown>[]) => void
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export function headlessRender(
|
|
23
23
|
ctx: HeadlessRenderContext,
|
|
24
24
|
el: unknown,
|
|
25
|
-
parent: Kiru.VNode | null,
|
|
26
|
-
idx: number
|
|
25
|
+
parent: Kiru.VNode | null = null,
|
|
26
|
+
idx: number = 0
|
|
27
27
|
): void {
|
|
28
28
|
if (el === null) return
|
|
29
29
|
if (el === undefined) return
|
|
@@ -66,7 +66,7 @@ export function headlessRender(
|
|
|
66
66
|
if (isExoticType(type)) {
|
|
67
67
|
if (type === $ERROR_BOUNDARY) {
|
|
68
68
|
let boundaryBuffer = ""
|
|
69
|
-
const streamPromises = new Set<Kiru.
|
|
69
|
+
const streamPromises = new Set<Kiru.StatefulPromise<unknown>>()
|
|
70
70
|
const boundaryCtx: HeadlessRenderContext = {
|
|
71
71
|
write(chunk) {
|
|
72
72
|
boundaryBuffer += chunk
|
package/src/hmr.ts
CHANGED
|
@@ -98,6 +98,8 @@ export function createHmrContext() {
|
|
|
98
98
|
if (currentModuleMemory === null)
|
|
99
99
|
throw new Error("[kiru]: HMR could not register: No active module")
|
|
100
100
|
|
|
101
|
+
// TODO: we should call destroy() on unmatched old entries
|
|
102
|
+
|
|
101
103
|
let dirtyNodes = new Set<Kiru.VNode>()
|
|
102
104
|
for (const [name, newEntry] of Object.entries(hotVarRegistrationEntries)) {
|
|
103
105
|
const oldEntry = currentModuleMemory.hotVars.get(name)
|
|
@@ -120,10 +122,10 @@ export function createHmrContext() {
|
|
|
120
122
|
isGenericHmrAcceptor(oldEntry.value) &&
|
|
121
123
|
isGenericHmrAcceptor(newEntry.value)
|
|
122
124
|
) {
|
|
123
|
-
|
|
124
|
-
oldEntry.value[$HMR_ACCEPT]
|
|
125
|
+
performHmrAccept(
|
|
126
|
+
oldEntry.value[$HMR_ACCEPT],
|
|
127
|
+
newEntry.value[$HMR_ACCEPT]
|
|
125
128
|
)
|
|
126
|
-
oldEntry.value[$HMR_ACCEPT].destroy()
|
|
127
129
|
continue
|
|
128
130
|
}
|
|
129
131
|
if (oldEntry.type === "component" && newEntry.type === "component") {
|
|
@@ -192,3 +194,11 @@ export function onHmr(callback: () => void): void {
|
|
|
192
194
|
window.__kiru.HMRContext.onHmr(callback)
|
|
193
195
|
}
|
|
194
196
|
}
|
|
197
|
+
|
|
198
|
+
export function performHmrAccept<T>(
|
|
199
|
+
oldThing: HMRAccept<T>,
|
|
200
|
+
newThing: HMRAccept<T>
|
|
201
|
+
) {
|
|
202
|
+
newThing.inject(oldThing.provide())
|
|
203
|
+
oldThing.destroy()
|
|
204
|
+
}
|
package/src/index.ts
CHANGED
package/src/renderToString.ts
CHANGED