@w6w/react 0.6.0 → 0.9.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/README.md +183 -44
- package/dist/mod.d.ts +3 -3
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +4 -3
- package/dist/mod.js.map +1 -1
- package/dist/src/W6WProvider.d.ts +89 -39
- package/dist/src/W6WProvider.d.ts.map +1 -1
- package/dist/src/W6WProvider.js +104 -57
- package/dist/src/W6WProvider.js.map +1 -1
- package/dist/src/adapter.d.ts +157 -2
- package/dist/src/adapter.d.ts.map +1 -1
- package/dist/src/adapter.js +116 -1
- package/dist/src/adapter.js.map +1 -1
- package/dist/src/hooks.d.ts +90 -11
- package/dist/src/hooks.d.ts.map +1 -1
- package/dist/src/hooks.js +181 -42
- package/dist/src/hooks.js.map +1 -1
- package/dist/src/single-flight.d.ts +33 -0
- package/dist/src/single-flight.d.ts.map +1 -0
- package/dist/src/single-flight.js +71 -0
- package/dist/src/single-flight.js.map +1 -0
- package/dist/src/version.js +1 -1
- package/package.json +13 -4
package/dist/src/hooks.d.ts
CHANGED
|
@@ -1,21 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The hook set — one small primitive underneath (`useAsync`
|
|
3
|
-
* mutation primitive), every
|
|
4
|
-
* `
|
|
5
|
-
* anywhere (`package.json` carries none — see README).
|
|
2
|
+
* The hook set — one small primitive underneath (`useAsync` for reads, a
|
|
3
|
+
* private mutation primitive for writes), every hook a thin wrapper over the
|
|
4
|
+
* provider's `W6WClient`. No react-query or any other data-fetching
|
|
5
|
+
* dependency anywhere (`package.json` carries none — see README).
|
|
6
6
|
*
|
|
7
7
|
* Built only over the PUBLIC, non-`console` surface (`me`, `documents`,
|
|
8
|
-
* `vars`, `connections`, `workflows`, `run`) — `console.*` is
|
|
9
|
-
* and unstable (see README), so no hook here reaches for it.
|
|
8
|
+
* `vars`, `connections`, `workflows`, `functions`, `run`) — `console.*` is
|
|
9
|
+
* studio-internal and unstable (see README), so no hook here reaches for it.
|
|
10
|
+
* The workflow and Function definition lifecycles moved onto that public
|
|
11
|
+
* surface at contract `0.5.0`, which is why hooks for them live here now
|
|
12
|
+
* rather than being unreachable without `console.*`.
|
|
10
13
|
*
|
|
11
|
-
* Cancellation
|
|
12
|
-
* (
|
|
13
|
-
*
|
|
14
|
-
*
|
|
14
|
+
* Cancellation and sharing: every read method a hook here calls takes an
|
|
15
|
+
* optional `signal` (`@w6w/sdk`'s `CallOptions`, threaded to the injected
|
|
16
|
+
* `fetch`'s own `RequestInit.signal`, `node/src/http.ts`). Reads are
|
|
17
|
+
* single-flighted per client (`single-flight.ts`): hooks asking for the same
|
|
18
|
+
* thing (same hook, same arguments) while a request is in flight share ONE
|
|
19
|
+
* request and one `AbortController`, and nothing is kept once it settles. The
|
|
20
|
+
* controller is refcounted — it aborts only when the LAST subscriber has gone
|
|
21
|
+
* (unmount, `identityKey`/client switch, `ready: false`) and stayed gone past
|
|
22
|
+
* a microtask, so React StrictMode's synchronous cleanup -> remount (or a
|
|
23
|
+
* second consumer) re-attaches to the flight instead of aborting and
|
|
24
|
+
* re-firing it. A stale request's resolution or rejection can never commit
|
|
25
|
+
* into a hook that has moved on, and a genuinely abandoned request is told to
|
|
26
|
+
* stop rather than merely ignored.
|
|
27
|
+
*
|
|
28
|
+
* Every read hook also gates on `ready` (`<W6WProvider ready={...}>`,
|
|
29
|
+
* default `true`): while `false`, `useAsync` never calls the fetcher at all
|
|
30
|
+
* and reports `loading: true`.
|
|
15
31
|
*
|
|
16
32
|
* @module
|
|
17
33
|
*/
|
|
18
|
-
import type { ConnectionSummary, Doc, DocumentCreateInput, DocumentOptions, DocumentPatch, Me, RunEnvelope, RunInput, Var, VarCreateInput, VarPatch, WorkflowListOptions, WorkflowRunOptions, WorkflowRunResult, WorkflowSummary } from "@w6w/sdk";
|
|
34
|
+
import type { ConnectionSummary, Doc, DocumentCreateInput, DocumentOptions, DocumentPatch, FunctionDefinition, FunctionDetail, FunctionSummary, Me, RunEnvelope, RunInput, Var, VarCreateInput, VarPatch, WorkflowDefinition, WorkflowDetail, WorkflowListOptions, WorkflowRunOptions, WorkflowRunResult, WorkflowSaveResult, WorkflowSummary, WorkflowWriteOptions } from "@w6w/sdk";
|
|
19
35
|
/** What every read hook returns. */
|
|
20
36
|
export interface ReadResult<T> {
|
|
21
37
|
/** The last successfully fetched value, or `undefined` before the first resolves. */
|
|
@@ -46,6 +62,19 @@ export declare function useVars(): ReadResult<Var[]>;
|
|
|
46
62
|
export declare function useVar(id: string): ReadResult<Var>;
|
|
47
63
|
export declare function useConnections(): ReadResult<ConnectionSummary[]>;
|
|
48
64
|
export declare function useWorkflows(options?: WorkflowListOptions): ReadResult<WorkflowSummary[]>;
|
|
65
|
+
/**
|
|
66
|
+
* One workflow's stored definition, plus the two things that are not in it.
|
|
67
|
+
*
|
|
68
|
+
* `data.updatedAt` is the optimistic-concurrency token: hand it to
|
|
69
|
+
* {@linkcode useUpdateWorkflow}'s `ifUnmodifiedSince` and a save that would
|
|
70
|
+
* clobber someone else's edit is refused instead of winning silently. That is
|
|
71
|
+
* the whole reason this is a read hook and not just a fetch — the token has to
|
|
72
|
+
* survive from the read to the write, and a component that re-reads on every
|
|
73
|
+
* render would keep handing itself a fresh one.
|
|
74
|
+
*/
|
|
75
|
+
export declare function useWorkflow(id: string): ReadResult<WorkflowDetail>;
|
|
76
|
+
export declare function useFunctions(): ReadResult<FunctionSummary[]>;
|
|
77
|
+
export declare function useFunction(id: string): ReadResult<FunctionDetail>;
|
|
49
78
|
export declare function useCreateDocument(): MutationResult<[DocumentCreateInput, DocumentOptions?], Doc>;
|
|
50
79
|
export declare function useUpdateDocument(): MutationResult<[
|
|
51
80
|
string,
|
|
@@ -67,4 +96,54 @@ export declare function useDeleteVar(): MutationResult<[string], void>;
|
|
|
67
96
|
*/
|
|
68
97
|
export declare function useRunWorkflow(): MutationResult<[string, WorkflowRunOptions?], WorkflowRunResult>;
|
|
69
98
|
export declare function useRun(): MutationResult<[RunInput], RunEnvelope>;
|
|
99
|
+
/**
|
|
100
|
+
* ── The definition lifecycle ──
|
|
101
|
+
*
|
|
102
|
+
* Ten hooks over the same ten SDK methods, and three properties they inherit
|
|
103
|
+
* from it rather than invent:
|
|
104
|
+
*
|
|
105
|
+
* 1. **`create` mints the id.** The server requires one in the body and never
|
|
106
|
+
* generates it, so `create({name, steps})` works and the `wf_…`/`fn_…` id
|
|
107
|
+
* comes back in the result.
|
|
108
|
+
* 2. **`update` is a full replacement, not a patch.** This is the one place
|
|
109
|
+
* these differ from `useUpdateDocument`/`useUpdateVar`, whose second
|
|
110
|
+
* argument is a `Patch` of the fields to change. Here it is the whole
|
|
111
|
+
* definition: read with {@linkcode useWorkflow} / {@linkcode useFunction},
|
|
112
|
+
* spread, change, send. A component that passed only the changed fields
|
|
113
|
+
* would delete the rest.
|
|
114
|
+
* 3. **Deleting a workflow is two calls**, `archive` then `delete`. No hook
|
|
115
|
+
* here chains them — a UI that offers "delete" should offer the archive
|
|
116
|
+
* step too, because that is the step a user can still change their mind
|
|
117
|
+
* after.
|
|
118
|
+
*
|
|
119
|
+
* None of them refetch a list on success, matching every other mutation hook
|
|
120
|
+
* in this file: this lane carries no cache to invalidate (no react-query, by
|
|
121
|
+
* design — see README), so a component pairs the mutation with the read hook's
|
|
122
|
+
* own `refetch`.
|
|
123
|
+
*/
|
|
124
|
+
export declare function useCreateWorkflow(): MutationResult<[
|
|
125
|
+
WorkflowDefinition,
|
|
126
|
+
WorkflowWriteOptions?
|
|
127
|
+
], WorkflowSaveResult>;
|
|
128
|
+
export declare function useUpdateWorkflow(): MutationResult<[
|
|
129
|
+
string,
|
|
130
|
+
WorkflowDefinition,
|
|
131
|
+
WorkflowWriteOptions?
|
|
132
|
+
], WorkflowSaveResult>;
|
|
133
|
+
export declare function useArchiveWorkflow(): MutationResult<[string], WorkflowDefinition>;
|
|
134
|
+
export declare function useDeleteWorkflow(): MutationResult<[string], void>;
|
|
135
|
+
export declare function useCreateFunction(): MutationResult<[
|
|
136
|
+
FunctionDefinition
|
|
137
|
+
], {
|
|
138
|
+
id: string;
|
|
139
|
+
key: string;
|
|
140
|
+
}>;
|
|
141
|
+
export declare function useUpdateFunction(): MutationResult<[
|
|
142
|
+
string,
|
|
143
|
+
FunctionDefinition
|
|
144
|
+
], {
|
|
145
|
+
id: string;
|
|
146
|
+
key: string;
|
|
147
|
+
}>;
|
|
148
|
+
export declare function useDeleteFunction(): MutationResult<[string], void>;
|
|
70
149
|
//# sourceMappingURL=hooks.d.ts.map
|
package/dist/src/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/src/hooks.js
CHANGED
|
@@ -1,39 +1,100 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
-
import { useW6WClient } from "./W6WProvider.js";
|
|
2
|
+
import { useW6WClient, useW6WProviderContext } from "./W6WProvider.js";
|
|
3
|
+
import { subscribe } from "./single-flight.js";
|
|
3
4
|
/**
|
|
4
|
-
* Shared plumbing behind every read hook: fetch
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
5
|
+
* Shared plumbing behind every read hook: fetch on mount, on every
|
|
6
|
+
* `fetcher`/`client`/`ready` change, and on an imperative `refetch()`; drop
|
|
7
|
+
* any result that is no longer current.
|
|
8
|
+
*
|
|
9
|
+
* `fetcher` must be a `useCallback`-stabilized function taking the call's
|
|
10
|
+
* `AbortSignal` — each hook below owns that decision by listing exactly the
|
|
11
|
+
* values its own fetch depends on (including `client`), so this primitive's
|
|
12
|
+
* own dependency array stays exhaustive and needs no lint override. `client`
|
|
13
|
+
* is passed SEPARATELY (not inferred from `fetcher`'s identity) because it is
|
|
14
|
+
* the one thing that decides whether a reset is a "client change" (blank the
|
|
15
|
+
* stale data before refetching — R-7) or an ordinary same-client refetch
|
|
16
|
+
* (keep today's behaviour: loading flips true, previous data stays visible
|
|
17
|
+
* until the new result lands).
|
|
18
|
+
*
|
|
19
|
+
* Sequencing: a monotonic per-call generation number, bumped on every real
|
|
20
|
+
* fetch. Only the call whose generation is still the LATEST when it settles
|
|
21
|
+
* is allowed to commit — a superseded call (a newer one started, whether by
|
|
22
|
+
* `client` changing or by `refetch()`) can never write `state`, on resolution
|
|
23
|
+
* OR rejection. The previous call's `AbortController` is also aborted before
|
|
24
|
+
* the new one starts, and on unmount, so a genuinely abandoned request is
|
|
25
|
+
* told to stop rather than merely ignored.
|
|
26
|
+
*
|
|
27
|
+
* `ready === false` short-circuits before any of that: the fetcher is never
|
|
28
|
+
* called, any in-flight call is aborted, and state reports
|
|
29
|
+
* `{data: undefined, error: undefined, loading: true}`.
|
|
30
|
+
*
|
|
31
|
+
* A rejection named `ConfigError` (`@w6w/sdk`'s `requireToken` — no token yet,
|
|
32
|
+
* P-6) is reported as `loading: true`, not `error` — the same floor as
|
|
33
|
+
* `ready: false`, since from a caller's point of view "no credential yet" and
|
|
34
|
+
* "not ready yet" are the same state.
|
|
35
|
+
*
|
|
36
|
+
* `key` identifies the read for sharing: `JSON.stringify([method, ...args])`
|
|
37
|
+
* over the SDK method and EVERY argument `fetcher` closes over. `refetch()`
|
|
38
|
+
* starts a fresh flight (replacing the key's slot) and never aborts a flight
|
|
39
|
+
* another subscriber still holds.
|
|
10
40
|
*/
|
|
11
|
-
function useAsync(fetcher) {
|
|
41
|
+
function useAsync(key, fetcher, client, ready) {
|
|
12
42
|
const [state, setState] = useState({
|
|
13
43
|
data: undefined,
|
|
14
44
|
error: undefined,
|
|
15
45
|
loading: true,
|
|
16
46
|
});
|
|
17
47
|
const mountedRef = useRef(true);
|
|
48
|
+
const generationRef = useRef(0);
|
|
49
|
+
const subRef = useRef(null);
|
|
50
|
+
const clientRef = useRef(client);
|
|
18
51
|
useEffect(() => {
|
|
19
52
|
mountedRef.current = true;
|
|
20
53
|
return () => {
|
|
21
54
|
mountedRef.current = false;
|
|
55
|
+
subRef.current?.detach();
|
|
56
|
+
subRef.current = null;
|
|
22
57
|
};
|
|
23
58
|
}, []);
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
59
|
+
const run = useCallback((fresh = false) => {
|
|
60
|
+
const clientChanged = clientRef.current !== client;
|
|
61
|
+
clientRef.current = client;
|
|
62
|
+
// Abort whatever this hook had in flight — superseded by this call,
|
|
63
|
+
// whether it is a real fetch or a `ready: false` short-circuit.
|
|
64
|
+
subRef.current?.detach();
|
|
65
|
+
subRef.current = null;
|
|
66
|
+
if (!ready) {
|
|
67
|
+
// Bump the generation too, not just abort the controller — a rejection
|
|
68
|
+
// from the just-aborted call must never land after this point and flip
|
|
69
|
+
// `loading` back to `false` out from under the `ready: false` floor.
|
|
70
|
+
++generationRef.current;
|
|
71
|
+
setState({ data: undefined, error: undefined, loading: true });
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const generation = ++generationRef.current;
|
|
75
|
+
const sub = subscribe(client, key, fetcher, fresh);
|
|
76
|
+
subRef.current = sub;
|
|
77
|
+
setState((s) => clientChanged
|
|
78
|
+
? { data: undefined, error: undefined, loading: true }
|
|
79
|
+
: { ...s, loading: true });
|
|
80
|
+
sub.promise.then((data) => {
|
|
81
|
+
if (!mountedRef.current || generation !== generationRef.current)
|
|
82
|
+
return;
|
|
83
|
+
setState({ data, error: undefined, loading: false });
|
|
29
84
|
}, (error) => {
|
|
30
|
-
if (mountedRef.current)
|
|
31
|
-
|
|
85
|
+
if (!mountedRef.current || generation !== generationRef.current)
|
|
86
|
+
return;
|
|
87
|
+
if (error instanceof Error && error.name === "ConfigError") {
|
|
88
|
+
setState({ data: undefined, error: undefined, loading: true });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
setState({ data: undefined, error, loading: false });
|
|
32
92
|
});
|
|
33
|
-
}, [fetcher]);
|
|
93
|
+
}, [key, fetcher, client, ready]);
|
|
34
94
|
useEffect(() => {
|
|
35
|
-
|
|
36
|
-
}, [
|
|
95
|
+
run();
|
|
96
|
+
}, [run]);
|
|
97
|
+
const refetch = useCallback(() => run(true), [run]);
|
|
37
98
|
return { data: state.data, error: state.error, loading: state.loading, refetch };
|
|
38
99
|
}
|
|
39
100
|
/**
|
|
@@ -66,48 +127,73 @@ function useMutationResource(mutator) {
|
|
|
66
127
|
}
|
|
67
128
|
// ── reads ────────────────────────────────────────────────────────────────
|
|
68
129
|
export function useMe() {
|
|
69
|
-
const client =
|
|
70
|
-
const fetcher = useCallback(() => client.me(), [client]);
|
|
71
|
-
return useAsync(fetcher);
|
|
130
|
+
const { client, ready } = useW6WProviderContext();
|
|
131
|
+
const fetcher = useCallback((signal) => client.me({ signal }), [client]);
|
|
132
|
+
return useAsync(JSON.stringify(["me"]), fetcher, client, ready);
|
|
72
133
|
}
|
|
73
134
|
export function useDocuments(options) {
|
|
74
|
-
const client =
|
|
135
|
+
const { client, ready } = useW6WProviderContext();
|
|
75
136
|
const project = options?.project;
|
|
76
|
-
const fetcher = useCallback(() => client.documents.list(
|
|
77
|
-
return useAsync(fetcher);
|
|
137
|
+
const fetcher = useCallback((signal) => client.documents.list({ project, signal }), [client, project]);
|
|
138
|
+
return useAsync(JSON.stringify(["documents.list", project ?? null]), fetcher, client, ready);
|
|
78
139
|
}
|
|
79
140
|
export function useDocument(id, options) {
|
|
80
|
-
const client =
|
|
141
|
+
const { client, ready } = useW6WProviderContext();
|
|
81
142
|
const project = options?.project;
|
|
82
|
-
const fetcher = useCallback(() => client.documents.get(id,
|
|
83
|
-
return useAsync(fetcher);
|
|
143
|
+
const fetcher = useCallback((signal) => client.documents.get(id, { project, signal }), [client, id, project]);
|
|
144
|
+
return useAsync(JSON.stringify(["documents.get", id, project ?? null]), fetcher, client, ready);
|
|
84
145
|
}
|
|
85
146
|
export function useDocumentByKey(key, options) {
|
|
86
|
-
const client =
|
|
147
|
+
const { client, ready } = useW6WProviderContext();
|
|
87
148
|
const project = options?.project;
|
|
88
|
-
const fetcher = useCallback(() => client.documents.getByKey(key,
|
|
89
|
-
return useAsync(fetcher);
|
|
149
|
+
const fetcher = useCallback((signal) => client.documents.getByKey(key, { project, signal }), [client, key, project]);
|
|
150
|
+
return useAsync(JSON.stringify(["documents.getByKey", key, project ?? null]), fetcher, client, ready);
|
|
90
151
|
}
|
|
91
152
|
export function useVars() {
|
|
92
|
-
const client =
|
|
93
|
-
const fetcher = useCallback(() => client.vars.list(), [client]);
|
|
94
|
-
return useAsync(fetcher);
|
|
153
|
+
const { client, ready } = useW6WProviderContext();
|
|
154
|
+
const fetcher = useCallback((signal) => client.vars.list({ signal }), [client]);
|
|
155
|
+
return useAsync(JSON.stringify(["vars.list"]), fetcher, client, ready);
|
|
95
156
|
}
|
|
96
157
|
export function useVar(id) {
|
|
97
|
-
const client =
|
|
98
|
-
const fetcher = useCallback(() => client.vars.get(id), [client, id]);
|
|
99
|
-
return useAsync(fetcher);
|
|
158
|
+
const { client, ready } = useW6WProviderContext();
|
|
159
|
+
const fetcher = useCallback((signal) => client.vars.get(id, { signal }), [client, id]);
|
|
160
|
+
return useAsync(JSON.stringify(["vars.get", id]), fetcher, client, ready);
|
|
100
161
|
}
|
|
101
162
|
export function useConnections() {
|
|
102
|
-
const client =
|
|
103
|
-
const fetcher = useCallback(() => client.connections.list(), [client]);
|
|
104
|
-
return useAsync(fetcher);
|
|
163
|
+
const { client, ready } = useW6WProviderContext();
|
|
164
|
+
const fetcher = useCallback((signal) => client.connections.list({ signal }), [client]);
|
|
165
|
+
return useAsync(JSON.stringify(["connections.list"]), fetcher, client, ready);
|
|
105
166
|
}
|
|
106
167
|
export function useWorkflows(options) {
|
|
107
|
-
const client =
|
|
168
|
+
const { client, ready } = useW6WProviderContext();
|
|
108
169
|
const project = options?.project;
|
|
109
|
-
const fetcher = useCallback(() => client.workflows.list(
|
|
110
|
-
return useAsync(fetcher);
|
|
170
|
+
const fetcher = useCallback((signal) => client.workflows.list({ project, signal }), [client, project]);
|
|
171
|
+
return useAsync(JSON.stringify(["workflows.list", project ?? null]), fetcher, client, ready);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* One workflow's stored definition, plus the two things that are not in it.
|
|
175
|
+
*
|
|
176
|
+
* `data.updatedAt` is the optimistic-concurrency token: hand it to
|
|
177
|
+
* {@linkcode useUpdateWorkflow}'s `ifUnmodifiedSince` and a save that would
|
|
178
|
+
* clobber someone else's edit is refused instead of winning silently. That is
|
|
179
|
+
* the whole reason this is a read hook and not just a fetch — the token has to
|
|
180
|
+
* survive from the read to the write, and a component that re-reads on every
|
|
181
|
+
* render would keep handing itself a fresh one.
|
|
182
|
+
*/
|
|
183
|
+
export function useWorkflow(id) {
|
|
184
|
+
const { client, ready } = useW6WProviderContext();
|
|
185
|
+
const fetcher = useCallback((signal) => client.workflows.get(id, { signal }), [client, id]);
|
|
186
|
+
return useAsync(JSON.stringify(["workflows.get", id]), fetcher, client, ready);
|
|
187
|
+
}
|
|
188
|
+
export function useFunctions() {
|
|
189
|
+
const { client, ready } = useW6WProviderContext();
|
|
190
|
+
const fetcher = useCallback((signal) => client.functions.list({ signal }), [client]);
|
|
191
|
+
return useAsync(JSON.stringify(["functions.list"]), fetcher, client, ready);
|
|
192
|
+
}
|
|
193
|
+
export function useFunction(id) {
|
|
194
|
+
const { client, ready } = useW6WProviderContext();
|
|
195
|
+
const fetcher = useCallback((signal) => client.functions.get(id, { signal }), [client, id]);
|
|
196
|
+
return useAsync(JSON.stringify(["functions.get", id]), fetcher, client, ready);
|
|
111
197
|
}
|
|
112
198
|
// ── mutations ────────────────────────────────────────────────────────────
|
|
113
199
|
export function useCreateDocument() {
|
|
@@ -151,4 +237,57 @@ export function useRun() {
|
|
|
151
237
|
const client = useW6WClient();
|
|
152
238
|
return useMutationResource((input) => client.run(input));
|
|
153
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* ── The definition lifecycle ──
|
|
242
|
+
*
|
|
243
|
+
* Ten hooks over the same ten SDK methods, and three properties they inherit
|
|
244
|
+
* from it rather than invent:
|
|
245
|
+
*
|
|
246
|
+
* 1. **`create` mints the id.** The server requires one in the body and never
|
|
247
|
+
* generates it, so `create({name, steps})` works and the `wf_…`/`fn_…` id
|
|
248
|
+
* comes back in the result.
|
|
249
|
+
* 2. **`update` is a full replacement, not a patch.** This is the one place
|
|
250
|
+
* these differ from `useUpdateDocument`/`useUpdateVar`, whose second
|
|
251
|
+
* argument is a `Patch` of the fields to change. Here it is the whole
|
|
252
|
+
* definition: read with {@linkcode useWorkflow} / {@linkcode useFunction},
|
|
253
|
+
* spread, change, send. A component that passed only the changed fields
|
|
254
|
+
* would delete the rest.
|
|
255
|
+
* 3. **Deleting a workflow is two calls**, `archive` then `delete`. No hook
|
|
256
|
+
* here chains them — a UI that offers "delete" should offer the archive
|
|
257
|
+
* step too, because that is the step a user can still change their mind
|
|
258
|
+
* after.
|
|
259
|
+
*
|
|
260
|
+
* None of them refetch a list on success, matching every other mutation hook
|
|
261
|
+
* in this file: this lane carries no cache to invalidate (no react-query, by
|
|
262
|
+
* design — see README), so a component pairs the mutation with the read hook's
|
|
263
|
+
* own `refetch`.
|
|
264
|
+
*/
|
|
265
|
+
export function useCreateWorkflow() {
|
|
266
|
+
const client = useW6WClient();
|
|
267
|
+
return useMutationResource((definition, options) => client.workflows.create(definition, options));
|
|
268
|
+
}
|
|
269
|
+
export function useUpdateWorkflow() {
|
|
270
|
+
const client = useW6WClient();
|
|
271
|
+
return useMutationResource((id, definition, options) => client.workflows.update(id, definition, options));
|
|
272
|
+
}
|
|
273
|
+
export function useArchiveWorkflow() {
|
|
274
|
+
const client = useW6WClient();
|
|
275
|
+
return useMutationResource((id) => client.workflows.archive(id));
|
|
276
|
+
}
|
|
277
|
+
export function useDeleteWorkflow() {
|
|
278
|
+
const client = useW6WClient();
|
|
279
|
+
return useMutationResource((id) => client.workflows.delete(id));
|
|
280
|
+
}
|
|
281
|
+
export function useCreateFunction() {
|
|
282
|
+
const client = useW6WClient();
|
|
283
|
+
return useMutationResource((definition) => client.functions.create(definition));
|
|
284
|
+
}
|
|
285
|
+
export function useUpdateFunction() {
|
|
286
|
+
const client = useW6WClient();
|
|
287
|
+
return useMutationResource((id, definition) => client.functions.update(id, definition));
|
|
288
|
+
}
|
|
289
|
+
export function useDeleteFunction() {
|
|
290
|
+
const client = useW6WClient();
|
|
291
|
+
return useMutationResource((id) => client.functions.delete(id));
|
|
292
|
+
}
|
|
154
293
|
//# sourceMappingURL=hooks.js.map
|
package/dist/src/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-flight store behind the read hooks: identical in-flight reads (same
|
|
3
|
+
* client, same key) share ONE request, and nothing outlives it.
|
|
4
|
+
*
|
|
5
|
+
* Scoping: one `Map` per `W6WClient` object, held in a `WeakMap` — never a
|
|
6
|
+
* bare module-level map and never keyed by `baseUrl`/token, so two providers
|
|
7
|
+
* with identical props (different tenants) cannot see each other's data.
|
|
8
|
+
*
|
|
9
|
+
* Lifetime: an entry exists only while its request is pending. It is deleted
|
|
10
|
+
* on resolve OR reject (only if it is still the mapped entry), so a consumer
|
|
11
|
+
* that mounts after the flight settled sends a fresh request — no staleness.
|
|
12
|
+
*
|
|
13
|
+
* Abort: refcounted. The shared `AbortController` aborts only when the last
|
|
14
|
+
* subscriber has detached AND stayed detached past a microtask grace. React
|
|
15
|
+
* StrictMode's synchronous cleanup -> remount re-attaches inside that grace,
|
|
16
|
+
* so it re-joins the flight instead of abort + refire.
|
|
17
|
+
*
|
|
18
|
+
* @module
|
|
19
|
+
*/
|
|
20
|
+
/** One subscriber's hold on a shared flight. */
|
|
21
|
+
export interface Subscription<T> {
|
|
22
|
+
/** The shared request's result — the same promise for every subscriber. */
|
|
23
|
+
readonly promise: Promise<T>;
|
|
24
|
+
/** Release this subscriber's hold. Idempotent. */
|
|
25
|
+
detach(): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Join the pending flight for `(client, key)`, or start one with `start`.
|
|
29
|
+
* `fresh` always starts a new flight and takes over the key's slot; the entry
|
|
30
|
+
* it replaces keeps running for whoever still holds it.
|
|
31
|
+
*/
|
|
32
|
+
export declare function subscribe<T>(client: object, key: string, start: (signal: AbortSignal) => Promise<T>, fresh?: boolean): Subscription<T>;
|
|
33
|
+
//# sourceMappingURL=single-flight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-flight.d.ts","sourceRoot":"","sources":["../../src/single-flight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,gDAAgD;AAChD,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,kDAAkD;IAClD,MAAM,IAAI,IAAI,CAAC;CAChB;AAID;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,KAAK,UAAQ,GACZ,YAAY,CAAC,CAAC,CAAC,CAyCjB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-flight store behind the read hooks: identical in-flight reads (same
|
|
3
|
+
* client, same key) share ONE request, and nothing outlives it.
|
|
4
|
+
*
|
|
5
|
+
* Scoping: one `Map` per `W6WClient` object, held in a `WeakMap` — never a
|
|
6
|
+
* bare module-level map and never keyed by `baseUrl`/token, so two providers
|
|
7
|
+
* with identical props (different tenants) cannot see each other's data.
|
|
8
|
+
*
|
|
9
|
+
* Lifetime: an entry exists only while its request is pending. It is deleted
|
|
10
|
+
* on resolve OR reject (only if it is still the mapped entry), so a consumer
|
|
11
|
+
* that mounts after the flight settled sends a fresh request — no staleness.
|
|
12
|
+
*
|
|
13
|
+
* Abort: refcounted. The shared `AbortController` aborts only when the last
|
|
14
|
+
* subscriber has detached AND stayed detached past a microtask grace. React
|
|
15
|
+
* StrictMode's synchronous cleanup -> remount re-attaches inside that grace,
|
|
16
|
+
* so it re-joins the flight instead of abort + refire.
|
|
17
|
+
*
|
|
18
|
+
* @module
|
|
19
|
+
*/
|
|
20
|
+
const stores = new WeakMap();
|
|
21
|
+
/**
|
|
22
|
+
* Join the pending flight for `(client, key)`, or start one with `start`.
|
|
23
|
+
* `fresh` always starts a new flight and takes over the key's slot; the entry
|
|
24
|
+
* it replaces keeps running for whoever still holds it.
|
|
25
|
+
*/
|
|
26
|
+
export function subscribe(client, key, start, fresh = false) {
|
|
27
|
+
let map = stores.get(client);
|
|
28
|
+
if (!map) {
|
|
29
|
+
map = new Map();
|
|
30
|
+
stores.set(client, map);
|
|
31
|
+
}
|
|
32
|
+
const slots = map;
|
|
33
|
+
let entry = fresh ? undefined : slots.get(key);
|
|
34
|
+
if (!entry) {
|
|
35
|
+
const controller = new AbortController();
|
|
36
|
+
const created = {
|
|
37
|
+
promise: start(controller.signal),
|
|
38
|
+
controller,
|
|
39
|
+
refs: 0,
|
|
40
|
+
};
|
|
41
|
+
const settle = () => {
|
|
42
|
+
if (slots.get(key) === created)
|
|
43
|
+
slots.delete(key);
|
|
44
|
+
};
|
|
45
|
+
created.promise.then(settle, settle);
|
|
46
|
+
slots.set(key, created);
|
|
47
|
+
entry = created;
|
|
48
|
+
}
|
|
49
|
+
const held = entry;
|
|
50
|
+
held.refs++;
|
|
51
|
+
let detached = false;
|
|
52
|
+
return {
|
|
53
|
+
promise: held.promise,
|
|
54
|
+
detach() {
|
|
55
|
+
if (detached)
|
|
56
|
+
return;
|
|
57
|
+
detached = true;
|
|
58
|
+
held.refs--;
|
|
59
|
+
if (held.refs > 0)
|
|
60
|
+
return;
|
|
61
|
+
queueMicrotask(() => {
|
|
62
|
+
if (held.refs > 0)
|
|
63
|
+
return;
|
|
64
|
+
if (slots.get(key) === held)
|
|
65
|
+
slots.delete(key);
|
|
66
|
+
held.controller.abort();
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=single-flight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-flight.js","sourceRoot":"","sources":["../../src/single-flight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAgBH,MAAM,MAAM,GAAG,IAAI,OAAO,EAAuC,CAAC;AAElE;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,MAAc,EACd,GAAW,EACX,KAA0C,EAC1C,KAAK,GAAG,KAAK;IAEb,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC;IAElB,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAA0B,CAAC;IACzE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAa;YACxB,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YACjC,UAAU;YACV,IAAI,EAAE,CAAC;SACR,CAAC;QACF,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO;gBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAyB,CAAC,CAAC;QAC1C,KAAK,GAAG,OAAO,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,CAAC;IAEZ,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM;YACJ,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;gBAAE,OAAO;YAC1B,cAAc,CAAC,GAAG,EAAE;gBAClB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;oBAAE,OAAO;gBAC1B,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;oBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/src/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@w6w/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.9",
|
|
4
4
|
"description": "React bindings for @w6w/sdk — a <W6WProvider>, a small hook set, and a structural adapter for @w6w/ui's W6WApi contract.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -10,7 +10,13 @@
|
|
|
10
10
|
},
|
|
11
11
|
"homepage": "https://github.com/w6w-io/w6w-wrappers/tree/main/react#readme",
|
|
12
12
|
"bugs": "https://github.com/w6w-io/w6w-wrappers/issues",
|
|
13
|
-
"keywords": [
|
|
13
|
+
"keywords": [
|
|
14
|
+
"w6w",
|
|
15
|
+
"workflow",
|
|
16
|
+
"react",
|
|
17
|
+
"sdk",
|
|
18
|
+
"hooks"
|
|
19
|
+
],
|
|
14
20
|
"type": "module",
|
|
15
21
|
"types": "./dist/mod.d.ts",
|
|
16
22
|
"main": "./dist/mod.js",
|
|
@@ -20,7 +26,9 @@
|
|
|
20
26
|
"import": "./dist/mod.js"
|
|
21
27
|
}
|
|
22
28
|
},
|
|
23
|
-
"files": [
|
|
29
|
+
"files": [
|
|
30
|
+
"dist"
|
|
31
|
+
],
|
|
24
32
|
"sideEffects": false,
|
|
25
33
|
"engines": {
|
|
26
34
|
"node": ">=18"
|
|
@@ -36,11 +44,12 @@
|
|
|
36
44
|
"react": ">=18"
|
|
37
45
|
},
|
|
38
46
|
"dependencies": {
|
|
39
|
-
"@w6w/sdk": "^0.
|
|
47
|
+
"@w6w/sdk": "^0.9.9"
|
|
40
48
|
},
|
|
41
49
|
"devDependencies": {
|
|
42
50
|
"@biomejs/biome": "^1.9.4",
|
|
43
51
|
"@types/react": "^18.3.17",
|
|
52
|
+
"@w6w/ui": "github:w6w-io/w6w-ui#76c11dfbd750fe8227ccdef6600726e26ea0e268",
|
|
44
53
|
"jsdom": "^30.0.1",
|
|
45
54
|
"react": "^18.3.1",
|
|
46
55
|
"react-dom": "^18.3.1",
|