@mearie/solid 0.3.4 → 0.4.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/index.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  let _mearie_core = require("@mearie/core");
3
3
  let solid_js = require("solid-js");
4
+ let solid_js_store = require("solid-js/store");
4
5
  let _mearie_core_stream = require("@mearie/core/stream");
5
6
 
6
7
  //#region src/client-provider.tsx
@@ -19,16 +20,19 @@ const useClient = () => {
19
20
  const createQuery = ((query, variables, options) => {
20
21
  const client = useClient();
21
22
  const initialOpts = options?.();
22
- const [data, setData] = (0, solid_js.createSignal)(initialOpts?.initialData);
23
+ const [data, setData] = (0, solid_js_store.createStore)({ value: initialOpts?.initialData });
23
24
  const [loading, setLoading] = (0, solid_js.createSignal)(!initialOpts?.skip && !initialOpts?.initialData);
24
25
  const [error, setError] = (0, solid_js.createSignal)();
25
26
  const [metadata, setMetadata] = (0, solid_js.createSignal)();
26
27
  let unsubscribe = null;
27
28
  let initialized = false;
28
- const execute = () => {
29
+ const execute = (force = false) => {
29
30
  unsubscribe?.();
30
- if (options?.()?.skip) return;
31
- if (!initialized && initialOpts?.initialData) setLoading(true);
31
+ if (!force && options?.()?.skip) {
32
+ setLoading(false);
33
+ return;
34
+ }
35
+ if (initialized || !initialOpts?.initialData) setLoading(true);
32
36
  initialized = true;
33
37
  setError(void 0);
34
38
  unsubscribe = (0, _mearie_core_stream.pipe)(client.executeQuery(query, typeof variables === "function" ? variables() : variables, options?.()), (0, _mearie_core_stream.subscribe)({ next: (result) => {
@@ -37,14 +41,19 @@ const createQuery = ((query, variables, options) => {
37
41
  setError(new _mearie_core.AggregatedError(result.errors));
38
42
  setLoading(false);
39
43
  } else {
40
- setData(() => result.data);
44
+ const patches = result.metadata?.cache?.patches;
45
+ if (patches) setData("value", (0, solid_js_store.produce)((draft) => {
46
+ const root = (0, _mearie_core.applyPatchesMutable)(draft, patches);
47
+ if (root !== void 0) return root;
48
+ }));
49
+ else setData("value", (0, solid_js_store.reconcile)(result.data));
41
50
  setLoading(false);
42
51
  setError(void 0);
43
52
  }
44
53
  } }));
45
54
  };
46
55
  const refetch = () => {
47
- (0, solid_js.untrack)(execute);
56
+ (0, solid_js.untrack)(() => execute(true));
48
57
  };
49
58
  (0, solid_js.createEffect)(() => {
50
59
  execute();
@@ -54,7 +63,7 @@ const createQuery = ((query, variables, options) => {
54
63
  });
55
64
  return {
56
65
  get data() {
57
- return data();
66
+ return data.value;
58
67
  },
59
68
  get loading() {
60
69
  return loading();
@@ -176,18 +185,23 @@ const createFragment = ((fragment, fragmentRef, options) => {
176
185
  initialData = result.data;
177
186
  initialMetadata = result.metadata;
178
187
  }
179
- const [data, setData] = (0, solid_js.createSignal)(initialData);
188
+ const [data, setData] = (0, solid_js_store.createStore)({ value: initialData });
180
189
  const [metadata, setMetadata] = (0, solid_js.createSignal)(initialMetadata);
181
190
  (0, solid_js.createEffect)(() => {
182
191
  const currentRef = fragmentRef();
183
192
  if (currentRef == null) {
184
- setData(() => null);
193
+ setData("value", (0, solid_js_store.reconcile)(null));
185
194
  setMetadata(void 0);
186
195
  return;
187
196
  }
188
197
  const unsubscribe = (0, _mearie_core_stream.pipe)(client.executeFragment(fragment, currentRef, options?.()), (0, _mearie_core_stream.subscribe)({ next: (result) => {
189
198
  setMetadata(result.metadata);
190
- if (result.data !== void 0) setData(() => result.data);
199
+ const patches = result.metadata?.cache?.patches;
200
+ if (patches) setData("value", (0, solid_js_store.produce)((draft) => {
201
+ const root = (0, _mearie_core.applyPatchesMutable)(draft, patches);
202
+ if (root !== void 0) return root;
203
+ }));
204
+ else if (result.data !== void 0) setData("value", (0, solid_js_store.reconcile)(result.data));
191
205
  } }));
192
206
  (0, solid_js.onCleanup)(() => {
193
207
  unsubscribe();
@@ -195,7 +209,7 @@ const createFragment = ((fragment, fragmentRef, options) => {
195
209
  });
196
210
  return {
197
211
  get data() {
198
- return data();
212
+ return data.value;
199
213
  },
200
214
  get metadata() {
201
215
  return metadata();
package/dist/index.mjs CHANGED
@@ -1,5 +1,6 @@
1
- import { AggregatedError } from "@mearie/core";
1
+ import { AggregatedError, applyPatchesMutable } from "@mearie/core";
2
2
  import { createContext, createEffect, createSignal, onCleanup, untrack, useContext } from "solid-js";
3
+ import { createStore, produce, reconcile } from "solid-js/store";
3
4
  import { collect, peek, pipe, subscribe, take } from "@mearie/core/stream";
4
5
 
5
6
  export * from "@mearie/core"
@@ -20,16 +21,19 @@ const useClient = () => {
20
21
  const createQuery = ((query, variables, options) => {
21
22
  const client = useClient();
22
23
  const initialOpts = options?.();
23
- const [data, setData] = createSignal(initialOpts?.initialData);
24
+ const [data, setData] = createStore({ value: initialOpts?.initialData });
24
25
  const [loading, setLoading] = createSignal(!initialOpts?.skip && !initialOpts?.initialData);
25
26
  const [error, setError] = createSignal();
26
27
  const [metadata, setMetadata] = createSignal();
27
28
  let unsubscribe = null;
28
29
  let initialized = false;
29
- const execute = () => {
30
+ const execute = (force = false) => {
30
31
  unsubscribe?.();
31
- if (options?.()?.skip) return;
32
- if (!initialized && initialOpts?.initialData) setLoading(true);
32
+ if (!force && options?.()?.skip) {
33
+ setLoading(false);
34
+ return;
35
+ }
36
+ if (initialized || !initialOpts?.initialData) setLoading(true);
33
37
  initialized = true;
34
38
  setError(void 0);
35
39
  unsubscribe = pipe(client.executeQuery(query, typeof variables === "function" ? variables() : variables, options?.()), subscribe({ next: (result) => {
@@ -38,14 +42,19 @@ const createQuery = ((query, variables, options) => {
38
42
  setError(new AggregatedError(result.errors));
39
43
  setLoading(false);
40
44
  } else {
41
- setData(() => result.data);
45
+ const patches = result.metadata?.cache?.patches;
46
+ if (patches) setData("value", produce((draft) => {
47
+ const root = applyPatchesMutable(draft, patches);
48
+ if (root !== void 0) return root;
49
+ }));
50
+ else setData("value", reconcile(result.data));
42
51
  setLoading(false);
43
52
  setError(void 0);
44
53
  }
45
54
  } }));
46
55
  };
47
56
  const refetch = () => {
48
- untrack(execute);
57
+ untrack(() => execute(true));
49
58
  };
50
59
  createEffect(() => {
51
60
  execute();
@@ -55,7 +64,7 @@ const createQuery = ((query, variables, options) => {
55
64
  });
56
65
  return {
57
66
  get data() {
58
- return data();
67
+ return data.value;
59
68
  },
60
69
  get loading() {
61
70
  return loading();
@@ -177,18 +186,23 @@ const createFragment = ((fragment, fragmentRef, options) => {
177
186
  initialData = result.data;
178
187
  initialMetadata = result.metadata;
179
188
  }
180
- const [data, setData] = createSignal(initialData);
189
+ const [data, setData] = createStore({ value: initialData });
181
190
  const [metadata, setMetadata] = createSignal(initialMetadata);
182
191
  createEffect(() => {
183
192
  const currentRef = fragmentRef();
184
193
  if (currentRef == null) {
185
- setData(() => null);
194
+ setData("value", reconcile(null));
186
195
  setMetadata(void 0);
187
196
  return;
188
197
  }
189
198
  const unsubscribe = pipe(client.executeFragment(fragment, currentRef, options?.()), subscribe({ next: (result) => {
190
199
  setMetadata(result.metadata);
191
- if (result.data !== void 0) setData(() => result.data);
200
+ const patches = result.metadata?.cache?.patches;
201
+ if (patches) setData("value", produce((draft) => {
202
+ const root = applyPatchesMutable(draft, patches);
203
+ if (root !== void 0) return root;
204
+ }));
205
+ else if (result.data !== void 0) setData("value", reconcile(result.data));
192
206
  } }));
193
207
  onCleanup(() => {
194
208
  unsubscribe();
@@ -196,7 +210,7 @@ const createFragment = ((fragment, fragmentRef, options) => {
196
210
  });
197
211
  return {
198
212
  get data() {
199
- return data();
213
+ return data.value;
200
214
  },
201
215
  get metadata() {
202
216
  return metadata();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mearie/solid",
3
- "version": "0.3.4",
3
+ "version": "0.4.0",
4
4
  "description": "Type-safe, zero-overhead GraphQL client",
5
5
  "keywords": [
6
6
  "graphql",
@@ -52,12 +52,14 @@
52
52
  "README.md"
53
53
  ],
54
54
  "dependencies": {
55
- "@mearie/core": "0.5.2"
55
+ "@mearie/core": "0.6.0"
56
56
  },
57
57
  "devDependencies": {
58
+ "happy-dom": "^20.8.3",
58
59
  "solid-js": "^1.9.11",
59
60
  "tsdown": "^0.20.3",
60
- "typescript": "^5.9.3"
61
+ "typescript": "^5.9.3",
62
+ "vite-plugin-solid": "^2.11.10"
61
63
  },
62
64
  "peerDependencies": {
63
65
  "solid-js": "^1.8.0"