@zmdb/react-native 1.0.0-beta.1

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 ADDED
@@ -0,0 +1,65 @@
1
+ # @zmdb/react-native
2
+
3
+ `@zmdb/react-native` adds explicit AppState and connectivity policy around the `@zmdb/react` generated-client hooks. It supplies no NetInfo, AsyncStorage, SecureStore, Keychain, retry engine, cache,
4
+ or credential implementation.
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ yarn add @zmdb/react-native@1.0.0-beta.1 @zmdb/react@1.0.0-beta.1 react@19 react-native@0.87
10
+ ```
11
+
12
+ ## Bind the native services
13
+
14
+ React Native's `AppState` can be passed directly. Adapt the application's chosen connectivity and credential services to the two small structural ports:
15
+
16
+ ```ts
17
+ import { AppState } from 'react-native';
18
+ import { createZmdbReactNative } from '@zmdb/react-native';
19
+ import type { ApiClient } from './generated/http-client.generated.js';
20
+ import { connectivity } from './native-connectivity.js';
21
+ import { credentials } from './native-credentials.js';
22
+
23
+ export const apiNative = createZmdbReactNative<ApiClient, string>({
24
+ appState: AppState,
25
+ connectivity,
26
+ credentials,
27
+ backgroundPolicy: 'abort-and-refresh',
28
+ offlinePolicy: 'refuse',
29
+ bindingName: 'AccountApi',
30
+ });
31
+ ```
32
+
33
+ Render the same generated client used by the web application:
34
+
35
+ ```ts
36
+ import { createElement } from 'react';
37
+
38
+ createElement(apiNative.ZmdbClientProvider, { client: api }, createElement(App));
39
+ ```
40
+
41
+ The query and mutation signatures remain the `@zmdb/react` signatures:
42
+
43
+ ```ts
44
+ const account = apiNative.useZmdbQuery((client, signal) => client.getAccount({ id: accountId }, { signal }), [accountId]);
45
+ ```
46
+
47
+ ## Policies
48
+
49
+ - `backgroundPolicy: 'continue'` leaves requests alone.
50
+ - `backgroundPolicy: 'abort'` aborts active queries and mutations without replay.
51
+ - `backgroundPolicy: 'abort-and-refresh'` also refreshes mounted queries once after foregrounding; mutations are never replayed.
52
+ - `offlinePolicy: 'refuse'` throws `NativeOfflineError` before dispatch.
53
+ - `offlinePolicy: 'queue'` waits for the injected connectivity port and dispatches once.
54
+
55
+ `useCredentialStore()` returns the exact injected credential port. The package does not select or bundle a storage implementation.
56
+
57
+ ## Metro
58
+
59
+ This package owns device lifecycle only. Configure the ahead-of-time transform through `@zmdb/compiler/metro`; there is deliberately no `@zmdb/react-native/metro` export.
60
+
61
+ Full project documentation is at **https://ambasta.github.io/zmdb/**.
62
+
63
+ ## License
64
+
65
+ GNU General Public License v3.0 or later (GPL-3.0-or-later).
@@ -0,0 +1,57 @@
1
+ import type { ClientRuntime } from '@zmdb/client';
2
+ import type { ZmdbReactBindings } from '@zmdb/react';
3
+ export type { MutationRunner, MutationState, QueryLoader, QueryState, ZmdbClientProviderProps, ZmdbReactBindings, } from '@zmdb/react';
4
+ export type NativeBackgroundPolicy = 'abort' | 'abort-and-refresh' | 'continue';
5
+ export type NativeConnectivityState = 'offline' | 'online';
6
+ export type NativeOfflinePolicy = 'queue' | 'refuse';
7
+ export type NativeAppStateStatus = string | null | undefined;
8
+ export interface NativeSubscription {
9
+ remove(): void;
10
+ }
11
+ /**
12
+ * React Native's AppState object satisfies this shape directly. Tests and
13
+ * non-device renderers can supply the same two-member structural port.
14
+ */
15
+ export interface NativeAppState {
16
+ readonly currentState: NativeAppStateStatus;
17
+ addEventListener(type: 'change', listener: (state: NativeAppStateStatus) => void): NativeSubscription;
18
+ }
19
+ /**
20
+ * Application-owned bridge for NetInfo, another connectivity library, or a
21
+ * platform service. The adapter deliberately imports none of them.
22
+ */
23
+ export interface NativeConnectivity {
24
+ readonly currentState: NativeConnectivityState;
25
+ subscribe(listener: (state: NativeConnectivityState) => void): () => void;
26
+ }
27
+ /**
28
+ * Application-owned bridge for AsyncStorage, Keychain, SecureStore, or another
29
+ * native credential implementation. Writing null clears the selected value.
30
+ */
31
+ export interface NativeCredentialStore<Credential> {
32
+ read(): PromiseLike<Credential | null>;
33
+ write(value: Credential | null): PromiseLike<void>;
34
+ }
35
+ export interface ZmdbReactNativeOptions<Credential> {
36
+ readonly appState: NativeAppState;
37
+ readonly backgroundPolicy: NativeBackgroundPolicy;
38
+ readonly connectivity: NativeConnectivity;
39
+ readonly credentials: NativeCredentialStore<Credential>;
40
+ readonly offlinePolicy: NativeOfflinePolicy;
41
+ readonly bindingName?: string;
42
+ }
43
+ export interface ZmdbReactNativeBindings<Client extends object, Credential> extends ZmdbReactBindings<Client> {
44
+ useCredentialStore(): NativeCredentialStore<Credential>;
45
+ useConnectivity(): NativeConnectivity;
46
+ }
47
+ export declare class NativeOfflineError extends Error {
48
+ readonly name = "NativeOfflineError";
49
+ constructor(bindingName: string);
50
+ }
51
+ export declare class NativeBackgroundError extends Error {
52
+ readonly name = "NativeBackgroundError";
53
+ readonly state: NativeAppStateStatus;
54
+ constructor(bindingName: string, state: NativeAppStateStatus);
55
+ }
56
+ export declare function createZmdbReactNative<Client extends object = ClientRuntime, Credential = string>(options: ZmdbReactNativeOptions<Credential>): ZmdbReactNativeBindings<Client, Credential>;
57
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAMV,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AAIrB,YAAY,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,UAAU,EACV,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,mBAAmB,GAAG,UAAU,CAAC;AAChF,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,CAAC;AACrD,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAAG,kBAAkB,CAAC;CACvG;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAC/C,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3E;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB,CAAC,UAAU;IAC/C,IAAI,IAAI,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,sBAAsB,CAAC,UAAU;IAChD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB,CAAC,MAAM,SAAS,MAAM,EAAE,UAAU,CAAE,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IAC3G,kBAAkB,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACxD,eAAe,IAAI,kBAAkB,CAAC;CACvC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAkB,IAAI,wBAAwB;IAE9C,YAAY,WAAW,EAAE,MAAM,EAE9B;CACF;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA2B;IACjD,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IAErC,YAAY,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAG3D;CACF;AAmJD,wBAAgB,qBAAqB,CAAC,MAAM,SAAS,MAAM,GAAG,aAAa,EAAE,UAAU,GAAG,MAAM,EAC9F,OAAO,EAAE,sBAAsB,CAAC,UAAU,CAAC,GAC1C,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,CA4E7C"}
package/dist/index.js ADDED
@@ -0,0 +1,200 @@
1
+ import { createZmdbReact } from '@zmdb/react';
2
+ import { createContext, createElement, useCallback, useContext, useEffect, useRef } from 'react';
3
+ export class NativeOfflineError extends Error {
4
+ name = 'NativeOfflineError';
5
+ constructor(bindingName) {
6
+ super(`${bindingName} refused the request because native connectivity is offline`);
7
+ }
8
+ }
9
+ export class NativeBackgroundError extends Error {
10
+ name = 'NativeBackgroundError';
11
+ state;
12
+ constructor(bindingName, state) {
13
+ super(`${bindingName} aborted the request because AppState changed to ${String(state)}`);
14
+ this.state = state;
15
+ }
16
+ }
17
+ function once(cleanup) {
18
+ let complete = false;
19
+ return () => {
20
+ if (complete)
21
+ return;
22
+ complete = true;
23
+ cleanup();
24
+ };
25
+ }
26
+ function isActive(state) {
27
+ return state === 'active';
28
+ }
29
+ function createCoordinator(options, bindingName) {
30
+ const queries = new Set();
31
+ const mutations = new Set();
32
+ const refreshes = new Set();
33
+ let currentState = options.appState.currentState;
34
+ let refreshOnForeground = false;
35
+ const abortRequests = (state) => {
36
+ if (options.backgroundPolicy === 'continue')
37
+ return;
38
+ if (options.backgroundPolicy === 'abort-and-refresh' && refreshes.size > 0) {
39
+ refreshOnForeground = true;
40
+ }
41
+ const reason = new NativeBackgroundError(bindingName, state);
42
+ for (const controller of [...queries, ...mutations]) {
43
+ if (!controller.signal.aborted)
44
+ controller.abort(reason);
45
+ }
46
+ };
47
+ const onAppState = (state) => {
48
+ const wasActive = isActive(currentState);
49
+ currentState = state;
50
+ const active = isActive(state);
51
+ if (wasActive && !active)
52
+ abortRequests(state);
53
+ if (!wasActive && active && refreshOnForeground) {
54
+ refreshOnForeground = false;
55
+ for (const refresh of refreshes)
56
+ void refresh().catch(() => undefined);
57
+ }
58
+ };
59
+ const requestLifecycle = {
60
+ register(kind, controller) {
61
+ const selected = kind === 'query' ? queries : mutations;
62
+ selected.add(controller);
63
+ const release = once(() => {
64
+ selected.delete(controller);
65
+ controller.signal.removeEventListener('abort', release);
66
+ });
67
+ controller.signal.addEventListener('abort', release, { once: true });
68
+ if (controller.signal.aborted)
69
+ release();
70
+ if (!isActive(currentState) && options.backgroundPolicy !== 'continue' && !controller.signal.aborted) {
71
+ if (kind === 'query' && options.backgroundPolicy === 'abort-and-refresh')
72
+ refreshOnForeground = true;
73
+ controller.abort(new NativeBackgroundError(bindingName, currentState));
74
+ }
75
+ return release;
76
+ },
77
+ };
78
+ return {
79
+ connectivity: options.connectivity,
80
+ credentials: options.credentials,
81
+ requestLifecycle,
82
+ activate() {
83
+ const subscription = options.appState.addEventListener('change', onAppState);
84
+ const mountedState = options.appState.currentState;
85
+ if (mountedState !== currentState)
86
+ onAppState(mountedState);
87
+ else if (!isActive(mountedState))
88
+ abortRequests(mountedState);
89
+ return once(() => {
90
+ subscription.remove();
91
+ });
92
+ },
93
+ registerRefresh(refresh) {
94
+ refreshes.add(refresh);
95
+ return once(() => {
96
+ refreshes.delete(refresh);
97
+ });
98
+ },
99
+ };
100
+ }
101
+ function aborted(signal) {
102
+ return Promise.reject(signal.reason);
103
+ }
104
+ function waitForConnectivity(connectivity, signal) {
105
+ if (connectivity.currentState === 'online')
106
+ return Promise.resolve();
107
+ if (signal.aborted)
108
+ return aborted(signal);
109
+ return new Promise((resolve, reject) => {
110
+ let complete = false;
111
+ let unsubscribe;
112
+ const finish = (action) => {
113
+ if (complete)
114
+ return;
115
+ complete = true;
116
+ signal.removeEventListener('abort', onAbort);
117
+ unsubscribe?.();
118
+ unsubscribe = undefined;
119
+ action();
120
+ };
121
+ const onAbort = () => {
122
+ finish(() => reject(signal.reason));
123
+ };
124
+ const onConnectivity = (state) => {
125
+ if (state === 'online')
126
+ finish(resolve);
127
+ };
128
+ signal.addEventListener('abort', onAbort, { once: true });
129
+ const selectedUnsubscribe = connectivity.subscribe(onConnectivity);
130
+ if (complete)
131
+ selectedUnsubscribe();
132
+ else
133
+ unsubscribe = selectedUnsubscribe;
134
+ if (signal.aborted)
135
+ onAbort();
136
+ else if (connectivity.currentState === 'online')
137
+ finish(resolve);
138
+ });
139
+ }
140
+ async function dispatchWhenAvailable(connectivity, offlinePolicy, bindingName, signal, dispatch) {
141
+ if (signal.aborted)
142
+ return aborted(signal);
143
+ if (connectivity.currentState === 'offline') {
144
+ if (offlinePolicy === 'refuse')
145
+ throw new NativeOfflineError(bindingName);
146
+ await waitForConnectivity(connectivity, signal);
147
+ }
148
+ if (signal.aborted)
149
+ return aborted(signal);
150
+ return dispatch();
151
+ }
152
+ export function createZmdbReactNative(options) {
153
+ const bindingName = options.bindingName ?? '@zmdb/react-native';
154
+ const react = createZmdbReact(bindingName);
155
+ const NativeContext = createContext(undefined);
156
+ function useNativeContext() {
157
+ const coordinator = useContext(NativeContext);
158
+ if (coordinator !== undefined)
159
+ return coordinator;
160
+ throw new Error(`${bindingName} native services are unavailable; render this hook under ${bindingName}.ZmdbClientProvider`);
161
+ }
162
+ function ZmdbClientProvider(props) {
163
+ const coordinator = useRef(undefined);
164
+ if (coordinator.current === undefined)
165
+ coordinator.current = createCoordinator(options, bindingName);
166
+ const selectedCoordinator = coordinator.current;
167
+ useEffect(() => selectedCoordinator.activate(), [selectedCoordinator]);
168
+ return createElement(NativeContext.Provider, { value: selectedCoordinator }, createElement(react.ZmdbClientProvider, {
169
+ client: props.client,
170
+ requestLifecycle: selectedCoordinator.requestLifecycle,
171
+ }, props.children));
172
+ }
173
+ function useZmdbQuery(load, dependencies) {
174
+ const coordinator = useNativeContext();
175
+ const guardedLoad = useCallback((client, signal) => dispatchWhenAvailable(coordinator.connectivity, options.offlinePolicy, bindingName, signal, () => load(client, signal)), [coordinator, ...dependencies]);
176
+ const query = react.useZmdbQuery(guardedLoad, [guardedLoad]);
177
+ useEffect(() => coordinator.registerRefresh(query.refresh), [coordinator, query.refresh]);
178
+ return query;
179
+ }
180
+ function useZmdbMutation(run) {
181
+ const coordinator = useNativeContext();
182
+ const guardedRun = useCallback((client, input, signal) => dispatchWhenAvailable(coordinator.connectivity, options.offlinePolicy, bindingName, signal, () => run(client, input, signal)), [coordinator, run]);
183
+ return react.useZmdbMutation(guardedRun);
184
+ }
185
+ function useCredentialStore() {
186
+ return useNativeContext().credentials;
187
+ }
188
+ function useConnectivity() {
189
+ return useNativeContext().connectivity;
190
+ }
191
+ return Object.freeze({
192
+ ZmdbClientProvider,
193
+ useZmdbClient: react.useZmdbClient,
194
+ useZmdbMutation,
195
+ useZmdbQuery,
196
+ useCredentialStore,
197
+ useConnectivity,
198
+ });
199
+ }
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@zmdb/react-native",
3
+ "version": "1.0.0-beta.1",
4
+ "description": "React Native AppState, connectivity, and credential-store lifecycle bindings over @zmdb/react.",
5
+ "keywords": [
6
+ "client",
7
+ "mobile",
8
+ "react",
9
+ "react-native",
10
+ "typescript",
11
+ "zmdb"
12
+ ],
13
+ "homepage": "https://github.com/ambasta/zmdb#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/ambasta/zmdb/issues"
16
+ },
17
+ "license": "GPL-3.0-or-later",
18
+ "author": "zmdb contributors",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/ambasta/zmdb.git",
22
+ "directory": "packages/react-native"
23
+ },
24
+ "type": "module",
25
+ "sideEffects": false,
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js"
30
+ }
31
+ },
32
+ "publishConfig": {
33
+ "access": "public",
34
+ "tag": "beta"
35
+ },
36
+ "scripts": {
37
+ "build": "node ../../scripts/build-package.mjs",
38
+ "test": "vitest run"
39
+ },
40
+ "dependencies": {
41
+ "@zmdb/client": "1.0.0-beta.1",
42
+ "@zmdb/react": "1.0.0-beta.1"
43
+ },
44
+ "peerDependencies": {
45
+ "react": ">=19.2.8 <20.0.0",
46
+ "react-native": ">=0.87.1 <0.88.0"
47
+ },
48
+ "engines": {
49
+ "node": ">=26"
50
+ },
51
+ "main": "./dist/index.js",
52
+ "types": "./dist/index.d.ts"
53
+ }