@atolljs/react 0.1.12 → 0.1.14
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/index.d.ts +39 -0
- package/dist/index.js +19 -0
- package/package.json +11 -4
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { AsyncTask, ObservableValue, PathConnector, SharedMemory, SharedSpec, SpecPath, SliceOptions } from '@atolljs/core';
|
|
2
|
+
/**
|
|
3
|
+
* Subscribe to any sdk ObservableValue (task snapshot, field observable).
|
|
4
|
+
* SSR-safe: `getServerSnapshot` reuses `get`, which yields `undefined` for
|
|
5
|
+
* fields on unbound contracts.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useObservable<T>(source: ObservableValue<T>): T;
|
|
8
|
+
/**
|
|
9
|
+
* Bind one shared-memory field to React state. Returns `undefined` until the
|
|
10
|
+
* contract is bound and the field written; re-renders on every write.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useSharedValue<S extends SharedSpec, K extends SpecPath<S>>(memory: SharedMemory<S>, key: K): (PathConnector<S, K> extends {
|
|
13
|
+
read(): infer T;
|
|
14
|
+
} ? T : never) | undefined;
|
|
15
|
+
export declare function useSharedValue<S extends SharedSpec, K extends SpecPath<S>, Sel>(memory: SharedMemory<S>, key: K, select: (value: PathConnector<S, K> extends {
|
|
16
|
+
read(): infer T;
|
|
17
|
+
} ? T : never) => Sel, options?: SliceOptions<Sel>): Sel | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Bind an AsyncTask — or a plain async function (e.g. a worker client's
|
|
20
|
+
* method), wrapped via toTask: its snapshot fields plus `run`/`runOnce`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function useTask<R>(source: AsyncTask<void, R> | (() => Promise<R>)): {
|
|
23
|
+
data: R | null;
|
|
24
|
+
pending: boolean;
|
|
25
|
+
settled: boolean;
|
|
26
|
+
elapsedMs: number | null;
|
|
27
|
+
error: unknown;
|
|
28
|
+
run: AsyncTask<void, R>['run'];
|
|
29
|
+
runOnce: AsyncTask<void, R>['runOnce'];
|
|
30
|
+
};
|
|
31
|
+
export declare function useTask<A, R>(source: AsyncTask<A, R> | ((input: A) => Promise<R>)): {
|
|
32
|
+
data: R | null;
|
|
33
|
+
pending: boolean;
|
|
34
|
+
settled: boolean;
|
|
35
|
+
elapsedMs: number | null;
|
|
36
|
+
error: unknown;
|
|
37
|
+
run: AsyncTask<A, R>['run'];
|
|
38
|
+
runOnce: AsyncTask<A, R>['runOnce'];
|
|
39
|
+
};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { useMemo, useSyncExternalStore } from "react";
|
|
3
|
+
import { observe, toTask } from "@atolljs/core";
|
|
4
|
+
function useObservable(source) {
|
|
5
|
+
return useSyncExternalStore(source.subscribe, source.get, source.get);
|
|
6
|
+
}
|
|
7
|
+
function useSharedValue(memory, key, select, options) {
|
|
8
|
+
const source = useMemo(() => observe(memory, key, select, options), [memory, key]);
|
|
9
|
+
return useObservable(source);
|
|
10
|
+
}
|
|
11
|
+
function useTask(source) {
|
|
12
|
+
const task = useMemo(() => toTask(source), [source]);
|
|
13
|
+
return { ...useObservable(task), run: task.run, runOnce: task.runOnce };
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
useObservable,
|
|
17
|
+
useSharedValue,
|
|
18
|
+
useTask
|
|
19
|
+
};
|
package/package.json
CHANGED
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atolljs/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"description": "React bindings — useObservable, useSharedValue, useTask",
|
|
5
5
|
"homepage": "https://jwhenry3.github.io/atolljs/consumer/quickstart/",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
8
|
-
".":
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
9
12
|
},
|
|
10
13
|
"files": [
|
|
11
|
-
"src"
|
|
14
|
+
"src",
|
|
15
|
+
"dist"
|
|
12
16
|
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "node ../../scripts/build-lib.mjs"
|
|
19
|
+
},
|
|
13
20
|
"publishConfig": {
|
|
14
21
|
"access": "public",
|
|
15
22
|
"registry": "https://registry.npmjs.org"
|
|
16
23
|
},
|
|
17
24
|
"peerDependencies": {
|
|
18
|
-
"@atolljs/core": "0.1.
|
|
25
|
+
"@atolljs/core": "^0.1.14",
|
|
19
26
|
"react": "^19.3.0"
|
|
20
27
|
},
|
|
21
28
|
"repository": {
|