autosuspense 0.1.3 → 0.1.5
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/README.md +2 -2
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -2
- package/dist/components/prefabs/defaultPrefab.d.ts +3 -0
- package/dist/components/prefabs/defaultPrefab.d.ts.map +1 -0
- package/dist/components/prefabs/defaultPrefab.js +9 -0
- package/dist/components/prefabs/prebuilt/Block.d.ts +10 -0
- package/dist/components/prefabs/prebuilt/Block.d.ts.map +1 -0
- package/dist/components/prefabs/prebuilt/Block.js +5 -0
- package/dist/components/prefabs/prebuilt/Card.d.ts +10 -0
- package/dist/components/prefabs/prebuilt/Card.d.ts.map +1 -0
- package/dist/components/prefabs/prebuilt/Card.js +5 -0
- package/dist/components/prefabs/prebuilt/List.d.ts +10 -0
- package/dist/components/prefabs/prebuilt/List.d.ts.map +1 -0
- package/dist/components/prefabs/prebuilt/List.js +5 -0
- package/dist/components/suspense/AutoSuspense.d.ts +6 -0
- package/dist/components/suspense/AutoSuspense.d.ts.map +1 -0
- package/dist/components/suspense/AutoSuspense.js +21 -0
- package/dist/components/suspense/GeneratedFallback.d.ts +5 -0
- package/dist/components/suspense/GeneratedFallback.d.ts.map +1 -0
- package/dist/components/suspense/GeneratedFallback.js +9 -0
- package/dist/hooks/useSuspenseProvider.d.ts +1 -0
- package/dist/hooks/useSuspenseProvider.d.ts.map +1 -0
- package/dist/hooks/useSuspenseProvider.js +1 -0
- package/dist/types/FallbackRegistry.d.ts +5 -3
- package/dist/types/FallbackRegistry.d.ts.map +1 -1
- package/dist/types/FallbackRegistry.js +2 -2
- package/dist/utils/renderNode.d.ts +2 -2
- package/dist/utils/renderNode.d.ts.map +1 -1
- package/dist/utils/renderNode.js +6 -2
- package/dist/utils/resolveElement.d.ts +4 -0
- package/dist/utils/resolveElement.d.ts.map +1 -0
- package/dist/utils/resolveElement.js +20 -0
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# AutoSupense
|
|
1
|
+
# AutoSupense Beta
|
|
2
2
|
AutoSuspense is a small React utility that automatically builds and composes
|
|
3
3
|
Suspense fallback UI based on your component tree without manually wiring
|
|
4
4
|
nested fallback components.
|
|
5
5
|
|
|
6
|
-
## How to use
|
|
6
|
+
## How to use:
|
|
7
7
|
1. Install this library
|
|
8
8
|
```npm i autosuspense```
|
|
9
9
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AutoSuspense } from "./AutoSuspense";
|
|
2
|
-
import { GeneratedFallback } from "./GeneratedFallback";
|
|
1
|
+
import { AutoSuspense } from "./suspense/AutoSuspense";
|
|
2
|
+
import { GeneratedFallback } from "./suspense/GeneratedFallback";
|
|
3
3
|
export { AutoSuspense, GeneratedFallback };
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/components/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { AutoSuspense } from "./AutoSuspense";
|
|
2
|
-
import { GeneratedFallback } from "./GeneratedFallback";
|
|
1
|
+
import { AutoSuspense } from "./suspense/AutoSuspense";
|
|
2
|
+
import { GeneratedFallback } from "./suspense/GeneratedFallback";
|
|
3
3
|
export { AutoSuspense, GeneratedFallback };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultPrefab.d.ts","sourceRoot":"","sources":["../../../src/components/prefabs/defaultPrefab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAI5D,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Block } from "./prebuilt/Block";
|
|
3
|
+
import { Card } from "./prebuilt/Card";
|
|
4
|
+
import { List } from "./prebuilt/List";
|
|
5
|
+
export const defaultPrefab = {
|
|
6
|
+
block: _jsx(Block, {}),
|
|
7
|
+
card: _jsx(Card, {}),
|
|
8
|
+
list: _jsx(List, {}),
|
|
9
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import "./Block.css";
|
|
3
|
+
type BlockProps = {
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
};
|
|
8
|
+
export declare const Block: React.FC<BlockProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=Block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Block.d.ts","sourceRoot":"","sources":["../../../../src/components/prefabs/prebuilt/Block.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,aAAa,CAAC;AAErB,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAMtC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import "./Card.css";
|
|
3
|
+
type CardProps = {
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
};
|
|
8
|
+
export declare const Card: React.FC<CardProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=Card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../../src/components/prefabs/prebuilt/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,YAAY,CAAC;AAEpB,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAMpC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import "./List.css";
|
|
3
|
+
type ListProps = {
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
};
|
|
8
|
+
export declare const List: React.FC<ListProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=List.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../../src/components/prefabs/prebuilt/List.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,YAAY,CAAC;AAEpB,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAMpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoSuspense.d.ts","sourceRoot":"","sources":["../../../src/components/suspense/AutoSuspense.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,eAAO,MAAM,YAAY,GAAI,uBAG1B;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAC7C,gBAqBA,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { GeneratedFallback } from "./GeneratedFallback";
|
|
4
|
+
import { FallbackContext, } from "../../types/FallbackRegistry";
|
|
5
|
+
import { defaultPrefab } from "../prefabs/defaultPrefab";
|
|
6
|
+
export const AutoSuspense = ({ children, prefab = defaultPrefab, }) => {
|
|
7
|
+
const registryRef = React.useRef({
|
|
8
|
+
nodes: new Map(),
|
|
9
|
+
currentParent: null,
|
|
10
|
+
prebuild: new Map(Object.entries(prefab)),
|
|
11
|
+
});
|
|
12
|
+
if (registryRef.current === null) {
|
|
13
|
+
registryRef.current = {
|
|
14
|
+
nodes: new Map(),
|
|
15
|
+
currentParent: null,
|
|
16
|
+
prebuild: new Map(Object.entries(prefab)),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const fallback = _jsx(GeneratedFallback, { registry: registryRef.current });
|
|
20
|
+
return (_jsx(FallbackContext.Provider, { value: registryRef.current, children: _jsx(React.Suspense, { fallback: fallback, children: children }) }));
|
|
21
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeneratedFallback.d.ts","sourceRoot":"","sources":["../../../src/components/suspense/GeneratedFallback.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAIhE,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,eASA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { buildTree } from "../../utils/buildTree";
|
|
4
|
+
import { renderNode } from "../../utils/renderNode";
|
|
5
|
+
export function GeneratedFallback({ registry, }) {
|
|
6
|
+
const tree = buildTree(registry.nodes);
|
|
7
|
+
const roots = tree.get(null) ?? [];
|
|
8
|
+
return (_jsx(React.Fragment, { children: roots.map((node) => renderNode(node, tree, registry)) }));
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=useSuspenseProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSuspenseProvider.d.ts","sourceRoot":"","sources":["../../src/hooks/useSuspenseProvider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as React from "react";
|
|
2
2
|
export type Node = {
|
|
3
3
|
id: string;
|
|
4
|
-
element:
|
|
4
|
+
element: FallbackDescriptor;
|
|
5
5
|
parent: string | null;
|
|
6
6
|
};
|
|
7
7
|
export type FallbackRegistry = {
|
|
8
8
|
nodes: Map<string, Node>;
|
|
9
9
|
currentParent: string | null;
|
|
10
|
+
prebuild: Map<string, React.ReactElement | React.ComponentType<any>>;
|
|
10
11
|
};
|
|
11
|
-
export
|
|
12
|
+
export type FallbackDescriptor = string | React.ReactElement | React.ComponentType;
|
|
13
|
+
export declare const FallbackContext: React.Context<FallbackRegistry | null>;
|
|
12
14
|
//# sourceMappingURL=FallbackRegistry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FallbackRegistry.d.ts","sourceRoot":"","sources":["../../src/types/FallbackRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"FallbackRegistry.d.ts","sourceRoot":"","sources":["../../src/types/FallbackRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,KAAK,CAAC,YAAY,GAClB,KAAK,CAAC,aAAa,CAAC;AAExB,eAAO,MAAM,eAAe,wCAE3B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
export const FallbackContext = createContext(null);
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export const FallbackContext = React.createContext(null);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { Node } from "../types/FallbackRegistry";
|
|
3
|
-
export declare function renderNode(node: Node, childMap: Map<string | null, Node[]
|
|
2
|
+
import type { FallbackRegistry, Node } from "../types/FallbackRegistry";
|
|
3
|
+
export declare function renderNode(node: Node, childMap: Map<string | null, Node[]>, registry: FallbackRegistry): React.ReactElement | null;
|
|
4
4
|
//# sourceMappingURL=renderNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderNode.d.ts","sourceRoot":"","sources":["../../src/utils/renderNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"renderNode.d.ts","sourceRoot":"","sources":["../../src/utils/renderNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAGxE,wBAAgB,UAAU,CAExB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EACpC,QAAQ,EAAE,gBAAgB,GACzB,KAAK,CAAC,YAAY,GAAG,IAAI,CAU3B"}
|
package/dist/utils/renderNode.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
2
|
+
import { resolveElement } from "./resolveElement";
|
|
3
|
+
export function renderNode(node, childMap, registry) {
|
|
3
4
|
const children = childMap.get(node.id) ?? [];
|
|
4
|
-
|
|
5
|
+
const resolvedEle = resolveElement(node.element, registry);
|
|
6
|
+
if (!resolvedEle)
|
|
7
|
+
return null;
|
|
8
|
+
return React.cloneElement(resolvedEle, { key: node.id }, children.map((child) => renderNode(child, childMap, registry)));
|
|
5
9
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { FallbackDescriptor, FallbackRegistry } from "../types/FallbackRegistry";
|
|
3
|
+
export declare function resolveElement(descriptor: FallbackDescriptor, registry: FallbackRegistry): React.ReactElement | null;
|
|
4
|
+
//# sourceMappingURL=resolveElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveElement.d.ts","sourceRoot":"","sources":["../../src/utils/resolveElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,wBAAgB,cAAc,CAC5B,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,gBAAgB,GACzB,KAAK,CAAC,YAAY,GAAG,IAAI,CAsB3B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export function resolveElement(descriptor, registry) {
|
|
3
|
+
if (React.isValidElement(descriptor)) {
|
|
4
|
+
return descriptor;
|
|
5
|
+
}
|
|
6
|
+
if (typeof descriptor === "function") {
|
|
7
|
+
return React.createElement(descriptor);
|
|
8
|
+
}
|
|
9
|
+
if (typeof descriptor === "string") {
|
|
10
|
+
const value = registry.prebuild.get(descriptor);
|
|
11
|
+
if (!value)
|
|
12
|
+
return null;
|
|
13
|
+
if (React.isValidElement(value)) {
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
const Component = value;
|
|
17
|
+
return React.createElement(Component);
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
package/package.json
CHANGED
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/index.ts","./src/components/
|
|
1
|
+
{"root":["./src/index.ts","./src/components/index.ts","./src/components/prefabs/defaultprefab.tsx","./src/components/prefabs/prebuilt/block.tsx","./src/components/prefabs/prebuilt/card.tsx","./src/components/prefabs/prebuilt/list.tsx","./src/components/suspense/autosuspense.tsx","./src/components/suspense/generatedfallback.tsx","./src/hooks/index.ts","./src/hooks/usecompatid.ts","./src/hooks/usesuspensefallback.ts","./src/hooks/usesuspenseprovider.ts","./src/types/fallbackregistry.ts","./src/utils/buildtree.ts","./src/utils/rendernode.ts","./src/utils/resolveelement.ts"],"version":"5.9.3"}
|