on-zero 0.16.19 → 0.16.20

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.
Files changed (120) hide show
  1. package/dist/cjs/createUseQuery.cjs +2 -1
  2. package/dist/cjs/createUseQuery.native.js +2 -1
  3. package/dist/cjs/createUseQuery.native.js.map +1 -1
  4. package/dist/cjs/createUseQueryDirect.cjs +2 -1
  5. package/dist/cjs/createUseQueryDirect.native.js +2 -1
  6. package/dist/cjs/createUseQueryDirect.native.js.map +1 -1
  7. package/dist/cjs/createZeroClient.cjs +75 -9
  8. package/dist/cjs/createZeroClient.native.js +151 -81
  9. package/dist/cjs/createZeroClient.native.js.map +1 -1
  10. package/dist/cjs/createZeroClient.recovery.test.cjs +351 -10
  11. package/dist/cjs/createZeroClient.recovery.test.native.js +412 -12
  12. package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
  13. package/dist/cjs/generate.cjs +16 -11
  14. package/dist/cjs/generate.native.js +16 -11
  15. package/dist/cjs/generate.native.js.map +1 -1
  16. package/dist/cjs/generate.test.cjs +22 -0
  17. package/dist/cjs/generate.test.native.js +22 -0
  18. package/dist/cjs/generate.test.native.js.map +1 -1
  19. package/dist/cjs/helpers/recoverZeroClient.cjs +542 -52
  20. package/dist/cjs/helpers/recoverZeroClient.native.js +721 -59
  21. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
  22. package/dist/cjs/helpers/recoverZeroClient.test.cjs +318 -0
  23. package/dist/cjs/helpers/recoverZeroClient.test.native.js +361 -0
  24. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
  25. package/dist/cjs/kvStore.cjs +30 -0
  26. package/dist/cjs/kvStore.native.js +34 -0
  27. package/dist/cjs/kvStore.native.js.map +1 -0
  28. package/dist/cjs/queryJson.cjs +58 -0
  29. package/dist/cjs/queryJson.native.js +86 -0
  30. package/dist/cjs/queryJson.native.js.map +1 -0
  31. package/dist/cjs/resolveQuery.cjs +2 -0
  32. package/dist/cjs/resolveQuery.native.js +2 -0
  33. package/dist/cjs/resolveQuery.native.js.map +1 -1
  34. package/dist/cjs/useQuery.empty.test.cjs +11 -1
  35. package/dist/cjs/useQuery.empty.test.native.js +23 -1
  36. package/dist/cjs/useQuery.empty.test.native.js.map +1 -1
  37. package/dist/cjs/useQuery.ssr.test.cjs +22 -1
  38. package/dist/cjs/useQuery.ssr.test.native.js +30 -1
  39. package/dist/cjs/useQuery.ssr.test.native.js.map +1 -1
  40. package/dist/esm/createUseQuery.mjs +2 -1
  41. package/dist/esm/createUseQuery.mjs.map +1 -1
  42. package/dist/esm/createUseQuery.native.js +2 -1
  43. package/dist/esm/createUseQuery.native.js.map +1 -1
  44. package/dist/esm/createUseQueryDirect.mjs +2 -1
  45. package/dist/esm/createUseQueryDirect.mjs.map +1 -1
  46. package/dist/esm/createUseQueryDirect.native.js +2 -1
  47. package/dist/esm/createUseQueryDirect.native.js.map +1 -1
  48. package/dist/esm/createZeroClient.mjs +76 -10
  49. package/dist/esm/createZeroClient.mjs.map +1 -1
  50. package/dist/esm/createZeroClient.native.js +152 -82
  51. package/dist/esm/createZeroClient.native.js.map +1 -1
  52. package/dist/esm/createZeroClient.recovery.test.mjs +352 -11
  53. package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -1
  54. package/dist/esm/createZeroClient.recovery.test.native.js +413 -13
  55. package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
  56. package/dist/esm/generate.mjs +16 -11
  57. package/dist/esm/generate.mjs.map +1 -1
  58. package/dist/esm/generate.native.js +16 -11
  59. package/dist/esm/generate.native.js.map +1 -1
  60. package/dist/esm/generate.test.mjs +22 -0
  61. package/dist/esm/generate.test.mjs.map +1 -1
  62. package/dist/esm/generate.test.native.js +22 -0
  63. package/dist/esm/generate.test.native.js.map +1 -1
  64. package/dist/esm/helpers/recoverZeroClient.mjs +542 -54
  65. package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
  66. package/dist/esm/helpers/recoverZeroClient.native.js +721 -61
  67. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  68. package/dist/esm/helpers/recoverZeroClient.test.mjs +319 -1
  69. package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
  70. package/dist/esm/helpers/recoverZeroClient.test.native.js +362 -1
  71. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  72. package/dist/esm/kvStore.mjs +5 -0
  73. package/dist/esm/kvStore.mjs.map +1 -0
  74. package/dist/esm/kvStore.native.js +6 -0
  75. package/dist/esm/kvStore.native.js.map +1 -0
  76. package/dist/esm/queryJson.mjs +32 -0
  77. package/dist/esm/queryJson.mjs.map +1 -0
  78. package/dist/esm/queryJson.native.js +57 -0
  79. package/dist/esm/queryJson.native.js.map +1 -0
  80. package/dist/esm/resolveQuery.mjs +2 -0
  81. package/dist/esm/resolveQuery.mjs.map +1 -1
  82. package/dist/esm/resolveQuery.native.js +2 -0
  83. package/dist/esm/resolveQuery.native.js.map +1 -1
  84. package/dist/esm/useQuery.empty.test.mjs +12 -2
  85. package/dist/esm/useQuery.empty.test.mjs.map +1 -1
  86. package/dist/esm/useQuery.empty.test.native.js +24 -2
  87. package/dist/esm/useQuery.empty.test.native.js.map +1 -1
  88. package/dist/esm/useQuery.ssr.test.mjs +23 -2
  89. package/dist/esm/useQuery.ssr.test.mjs.map +1 -1
  90. package/dist/esm/useQuery.ssr.test.native.js +31 -2
  91. package/dist/esm/useQuery.ssr.test.native.js.map +1 -1
  92. package/package.json +11 -3
  93. package/src/createUseQuery.tsx +2 -1
  94. package/src/createUseQueryDirect.tsx +2 -1
  95. package/src/createZeroClient.recovery.test.tsx +370 -7
  96. package/src/createZeroClient.tsx +100 -10
  97. package/src/generate.test.ts +31 -0
  98. package/src/generate.ts +22 -10
  99. package/src/helpers/recoverZeroClient.test.ts +323 -0
  100. package/src/helpers/recoverZeroClient.ts +896 -78
  101. package/src/kvStore.native.ts +7 -0
  102. package/src/kvStore.ts +7 -0
  103. package/src/queryJson.ts +46 -0
  104. package/src/resolveQuery.ts +2 -0
  105. package/src/useQuery.empty.test.tsx +16 -2
  106. package/src/useQuery.ssr.test.ts +23 -2
  107. package/types/createUseQuery.d.ts.map +1 -1
  108. package/types/createUseQueryDirect.d.ts.map +1 -1
  109. package/types/createZeroClient.d.ts.map +1 -1
  110. package/types/createZeroClient.recovery.test.d.ts.map +1 -1
  111. package/types/generate.d.ts.map +1 -1
  112. package/types/helpers/recoverZeroClient.d.ts +6 -0
  113. package/types/helpers/recoverZeroClient.d.ts.map +1 -1
  114. package/types/kvStore.d.ts +2 -0
  115. package/types/kvStore.d.ts.map +1 -0
  116. package/types/kvStore.native.d.ts +3 -0
  117. package/types/kvStore.native.d.ts.map +1 -0
  118. package/types/queryJson.d.ts +3 -0
  119. package/types/queryJson.d.ts.map +1 -0
  120. package/types/resolveQuery.d.ts.map +1 -1
@@ -1,4 +1,4 @@
1
- import { createSchema, number, string, table } from "@rocicorp/zero";
1
+ import { createBuilder, createSchema, number, string, table } from "@rocicorp/zero";
2
2
  import { useQuery as useRawZeroQuery } from "@rocicorp/zero/react";
3
3
  import { act } from "react";
4
4
  import { createRoot } from "react-dom/client";
@@ -18,13 +18,15 @@ const schema = createSchema({
18
18
  });
19
19
  const allTodos = _args => zql.todo.orderBy("createdAt", "desc");
20
20
  const oneTodo = args => zql.todo.where("id", args.id).one();
21
+ const optionalTodo = args => createBuilder(schema).todo.where("id", args.id ?? "x").one();
21
22
  const client = createZeroClient({
22
23
  schema,
23
24
  models: {},
24
25
  groupedQueries: {
25
26
  todo: {
26
27
  allTodos,
27
- oneTodo
28
+ oneTodo,
29
+ optionalTodo
28
30
  }
29
31
  },
30
32
  instanceName: "empty-shape-test"
@@ -80,4 +82,12 @@ test("raw zero-react useQuery stays inert under a disabled provider", () => {
80
82
  expect(data).toEqual([]);
81
83
  expect(info?.type).toBe("unknown");
82
84
  });
85
+ test("useQuery rejects a function even when JSON.stringify would preserve its memo key", () => {
86
+ renderWithDisabled(() => client.useQuery(optionalTodo, {}));
87
+ expect(() => renderWithDisabled(() =>
88
+ // @ts-expect-error a function cannot cross the query JSON boundary.
89
+ client.useQuery(optionalTodo, {
90
+ id: () => "x"
91
+ }))).toThrow("Query 'todo.optionalTodo' argument 'params.id' must be JSON: function");
92
+ });
83
93
  //# sourceMappingURL=useQuery.empty.test.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["createSchema","number","string","table","useQuery","useRawZeroQuery","act","createRoot","afterEach","beforeEach","expect","test","createZeroClient","IS_SERVER","IS_SERVER_RUNTIME","zql","jsx","globalThis","IS_REACT_ACT_ENVIRONMENT","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","_args","todo","orderBy","oneTodo","args","where","one","client","models","groupedQueries","instanceName","container","root","document","createElement","unmount","renderWithDisabled","useHook","captured","Probe","render","ProvideZero","authData","userID","disable","children","Error","toBe","data","info","Array","isArray","length","filter","toEqual","find","toBeUndefined","type","query","getQuery"],"sources":["../../src/useQuery.empty.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createBuilder","createSchema","number","string","table","useQuery","useRawZeroQuery","act","createRoot","afterEach","beforeEach","expect","test","createZeroClient","IS_SERVER","IS_SERVER_RUNTIME","zql","jsx","globalThis","IS_REACT_ACT_ENVIRONMENT","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","_args","todo","orderBy","oneTodo","args","where","one","optionalTodo","client","models","groupedQueries","instanceName","container","root","document","createElement","unmount","renderWithDisabled","useHook","captured","Probe","render","ProvideZero","authData","userID","disable","children","Error","toBe","data","info","Array","isArray","length","filter","toEqual","find","toBeUndefined","type","query","getQuery","toThrow"],"sources":["../../src/useQuery.empty.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createSchema, number, string, table } from "@rocicorp/zero";
2
+ import { createBuilder, createSchema, number, string, table } from "@rocicorp/zero";
3
3
  import { useQuery as useRawZeroQuery } from "@rocicorp/zero/react";
4
4
  import { act } from "react";
5
5
  import { createRoot } from "react-dom/client";
@@ -22,13 +22,18 @@ var allTodos = function allTodos2(_args) {
22
22
  var oneTodo = function oneTodo2(args) {
23
23
  return zql.todo.where("id", args.id).one();
24
24
  };
25
+ var optionalTodo = function optionalTodo2(args) {
26
+ var _args_id;
27
+ return createBuilder(schema).todo.where("id", (_args_id = args.id) !== null && _args_id !== void 0 ? _args_id : "x").one();
28
+ };
25
29
  var client = createZeroClient({
26
30
  schema,
27
31
  models: {},
28
32
  groupedQueries: {
29
33
  todo: {
30
34
  allTodos,
31
- oneTodo
35
+ oneTodo,
36
+ optionalTodo
32
37
  }
33
38
  },
34
39
  instanceName: "empty-shape-test"
@@ -96,4 +101,21 @@ test("raw zero-react useQuery stays inert under a disabled provider", function (
96
101
  expect(data).toEqual([]);
97
102
  expect(info === null || info === void 0 ? void 0 : info.type).toBe("unknown");
98
103
  });
104
+ test("useQuery rejects a function even when JSON.stringify would preserve its memo key", function () {
105
+ renderWithDisabled(function () {
106
+ return client.useQuery(optionalTodo, {});
107
+ });
108
+ expect(function () {
109
+ return renderWithDisabled(function () {
110
+ return (
111
+ // @ts-expect-error a function cannot cross the query JSON boundary.
112
+ client.useQuery(optionalTodo, {
113
+ id: function id() {
114
+ return "x";
115
+ }
116
+ })
117
+ );
118
+ });
119
+ }).toThrow("Query 'todo.optionalTodo' argument 'params.id' must be JSON: function");
120
+ });
99
121
  //# sourceMappingURL=useQuery.empty.test.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","createSchema","number","string","table","useQuery","useRawZeroQuery","act","createRoot","afterEach","beforeEach","expect","test","createZeroClient","IS_SERVER","IS_SERVER_RUNTIME","zql","globalThis","IS_REACT_ACT_ENVIRONMENT","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","allTodos2","_args","todo","orderBy","oneTodo","oneTodo2","args","where","one","client","models","groupedQueries","instanceName","container","root","document","createElement","unmount","renderWithDisabled","useHook","captured","Probe","Probe2","render","ProvideZero","authData","userID","disable","children","Error","toBe","data","info"],"sources":["../../src/useQuery.empty.test.tsx"],"sourcesContent":[null],"mappings":"AAQA,SAASA,GAAA,IAAAC,IAAA,QAAc,mBAAgB;AACvC,SAASC,YAAY,EAAAC,MAAA,EAAAC,MAAA,EAAAC,KAAuB;AAC5C,SAASC,QAAA,IAAWC,eAAA;AACpB,SAASC,GAAA,eAA6B;AACtC,SAASC,UAAA,QAAW,kBAAoB;AAExC,SAASC,SAAA,EAAAC,UAAA,EAAAC,MAAwB,EAAAC,IAAA;AACjC,SAASC,gBAAW,sCAAyB;AAC7C,SAASC,SAAA,EAAWC,iBAAA;AA0DZ,SAAAC,GAAA;AApDRC,UAAA,CAAWC,wBAAA,GAA2B;AAEtC,IAAAC,SAAM,GAAAf,KAAY,OAAM,EAAMgB,OAC3B;EAEHC,EAAA,EAAMlB,MAAA;EAINmB,KAAM,EAAAnB,MAAA,EAAW;EAEboB,SAAA,EAAArB,MAAA;AAAA,EACA,CAAAsB,UAAA;AACF,IAAAC,MAAA,GAAAxB,YAAA;EACFyB,MAAM,GAKNP,SAAM;AACJ,EACA;AAAS,IACTQ,QAAA,YAAgBC,UAAAC,KAAA;EAAA,OACdb,GAAQ,CAAAc,IAAA,CAAAC,OAAU,YAAQ;AAAA;AAC5B,IACAC,OAAA,YAAcC,SAAAC,IAAA;EACf,OAAAlB,GAAA,CAAAc,IAAA,CAAAK,KAAA,OAAAD,IAAA,CAAAb,EAAA,EAAAe,GAAA;AAED;AACA,IAAIC,MAAA,GAAAxB,gBAAA;EAEJY,MAAA;EACEa,MAAA;EACAC,cAAO;IACRT,IAAA;MAEDH,QAAU;MACJK;IACL;EAED;EACEQ,YAAI;AACJ;AACE,IAAAC,SAAA;AACA,IAAAC,IAAA;AAAOhC,UACT;EACA+B,SAAI,GAAME,QAAA,CAAAC,aAAA;EAIRF,IAAA,GAAKlC,UAAA,CAAAiC,SAAA;AAAA;AAGHhC,SACF;EACFF,GAAC;IACD,OAAImC,IAAA,CAAAG,OAAa;EACjB;AACF;AAEA,SAAKC,mBAAAC,OAAA;EACH,IAAAC,QAAO;EACP,IAAAC,KAAO,YAAWC,MAAKA,CAAA,EAAK;IAC7BF,QAAA,GAAAD,OAAA;IAID,OAAK;EACH;EACAxC,GAAA,aAAa;IACbmC,IAAA,CAAQS,MAAmB,gBAAcnD,IAAA,CAAAqC,MAAA,CAAAe,WAAA;MAEzCC,QAA2B;MAC3BC,MAAQ,EAAmB,MAAK;MAChCC,OAAO,EAAM,IAAI;MAClBC,QAAA,iBAAAxD,IAAA,CAAAiD,KAAA;IAED,CAAK;EACH;EAEA,IAAAD,QAAW,KAAE,cAAc,IAAAS,KAAA;EAC3B,OAAOT,QAAM;AACf;AAEApC,IAAA,CAAK;EACHD,MAAM,CAAAI,iBAAe,EAAA2C,IAAS;EAC9B/C,MAAM,CAACG,SAAM,CAAI,CAAA4C,IAAI;AACrB;AACA9C,IAAA,0EAAiC;EAClC,KAAA+C,IAAA,EAAAC,IAAA,IAAAd,kBAAA","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","createBuilder","createSchema","number","string","table","useQuery","useRawZeroQuery","act","createRoot","afterEach","beforeEach","expect","test","createZeroClient","IS_SERVER","IS_SERVER_RUNTIME","zql","globalThis","IS_REACT_ACT_ENVIRONMENT","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","allTodos2","_args","todo","orderBy","oneTodo","oneTodo2","args","where","one","optionalTodo","optionalTodo2","_args_id","client","models","groupedQueries","instanceName","container","root","document","createElement","unmount","renderWithDisabled","useHook","captured","Probe","Probe2","render","ProvideZero","authData","userID","disable","children","Error","toBe","data","info","Array","isArray","length","filter","toEqual"],"sources":["../../src/useQuery.empty.test.tsx"],"sourcesContent":[null],"mappings":"AAQA,SAASA,GAAA,IAAAC,IAAA,QAAe,mBAAsB;AAC9C,SAASC,aAAY,EAAAC,YAAA,EAAAC,MAAuB,EAAAC,MAAA,EAAAC,KAAA;AAC5C,SAASC,QAAA,IAAWC,eAAA;AACpB,SAASC,GAAA,eAA6B;AACtC,SAASC,UAAA,QAAW,kBAAoB;AAExC,SAASC,SAAA,EAAAC,UAAA,EAAAC,MAAwB,EAAAC,IAAA;AACjC,SAASC,gBAAW,sCAAyB;AAC7C,SAASC,SAAA,EAAWC,iBAAA;AA8DZ,SAAAC,GAAA;AAxDRC,UAAA,CAAWC,wBAAA,GAA2B;AAEtC,IAAAC,SAAM,GAAAf,KAAY,OAAM,EAAMgB,OAC3B;EAEHC,EAAA,EAAMlB,MAAA;EAINmB,KAAM,EAAAnB,MAAA,EAAW;EAEboB,SAAA,EAAArB,MAAA;AAAA,EACA,CAAAsB,UAAA;AACF,IAAAC,MAAA,GAAAxB,YAAA;EACFyB,MAAM,GAINP,SAAM;AAK0B,EAC9B;AAAA,IACAQ,QAAS,YAAAC,UAAAC,KAAA;EACT,OAAAb,GAAA,CAAAc,IAAA,CAAgBC,OAAA;AAAA;AAC0B,IAC1CC,OAAA,YAAAC,SAAAC,IAAA;EACA,OAAAlB,GAAA,CAAAc,IAAc,CAAAK,KAAA,OAAAD,IAAA,CAAAb,EAAA,EAAAe,GAAA;AAChB,CAAC;AAED,IAAIC,YAAA,YAAAC,cAAAJ,IAAA;EACJ,IAAIK,QAAA;EAEJ,OAAAvC,aAAiB,CAAAyB,MAAA,EAAAK,IAAA,CAAAK,KAAA,QAAAI,QAAA,GAAAL,IAAA,CAAAb,EAAA,cAAAkB,QAAA,cAAAA,QAAA,QAAAH,GAAA;AACf;AACA,IAAAI,MAAO,GAAA3B,gBAAoB;EAC5BY,MAAA;EAEDgB,MAAA,EAAU;EACRC,cAAU,EAAK;IAChBZ,IAAA;MAEDH,QAAS;MACHK,OAAA;MACJK;IACE;EACA;EACFM,YAAA;AACA;AAIE,IAAAC,SAAK;AAAA,IAAAC,IACH;AAEAnC,UACF;EACFkC,SAAC,GAAAE,QAAA,CAAAC,aAAA;EACDF,IAAI,GAAArC,UAAa,CAAAoC,SAAW;AAC5B;AACFnC,SAAA;EAEAF,GAAK;IACH,OAAOsC,IAAA,CAAAG,OAAA;EACP;AACF,CAAC;AAID,SAAKC,mBAAAC,OAAA;EACH,IAAAC,QAAO;EACP,IAAAC,KAAO,YAAcC,MAAKA,CAAA,EAAE;IAC5BF,QAAQ,GAAmBD,OAAQ;IAEnC,OAAQ,IAAmB;EAC3B;EACA3C,GAAA,aAAa;IACdsC,IAAA,CAAAS,MAAA,gBAAAvD,IAAA,CAAAyC,MAAA,CAAAe,WAAA;MAEIC,QAAA;MACHC,MAAO,QAAU;MAEjBC,OAAW,EAAE;MACbC,QAAO,EAAM,eAAW5D,IAAS,CAAAqD,KAAA;IAClC;EAED;EACE,IAAAD,QAAM,KAAQ,KAAO,SAAS,IAAAS,KAAQ;EACtC,OAAOT,QAAM;AACb;AACAvC,IAAA,gDAAiC;EAClCD,MAAA,CAAAI,iBAAA,EAAA8C,IAAA;EAEDlD,MAAK,CAAAG,SAAA,EAAA+C,IAAA;AACH;AACAjD,IAAA;EAAA,IAAO,CAAAkD,IACL,EAAAC,IAAA,IAAAd,kBAAA;IAAA,OAAmBT,MAAA,CAAAnC,QAAA,CAAAsB,QAAA;EAAA;EAAAhB,MAEjB,CAAAqD,KAAA,CAAOC,OAAA,CAAAH,IAAS,GAAAD,IAAA,KAAc,CAAE;EAAelD,MAAA,CAAAmD,IAAA,CAAAI,MAAA,EAAAL,IAAA;EAAAlD,MACjD,CAAAmD,IAAA,CAAAK,MAAA;IACA,WAAQ;EACX,IAAAC,OAAA","ignoreList":[]}
@@ -1,4 +1,5 @@
1
- import { createSchema, number, string, table } from "@rocicorp/zero";
1
+ import { createBuilder, createSchema, number, string, table } from "@rocicorp/zero";
2
+ import { addContextToQuery } from "@rocicorp/zero/bindings";
2
3
  import { expect, test } from "vitest";
3
4
  import { createZeroClient } from "./createZeroClient.mjs";
4
5
  import { zql } from "./zql.mjs";
@@ -15,13 +16,17 @@ const schema = createSchema({
15
16
  });
16
17
  const allTodos = _args => zql.todo.orderBy("createdAt", "desc");
17
18
  const oneTodo = args => zql.todo.where("id", args.id).one();
19
+ const invalidTodo = () => {
20
+ return createBuilder(schema).todo.where("id", () => "x");
21
+ };
18
22
  const client = createZeroClient({
19
23
  schema,
20
24
  models: {},
21
25
  groupedQueries: {
22
26
  todo: {
23
27
  allTodos,
24
- oneTodo
28
+ oneTodo,
29
+ invalidTodo
25
30
  }
26
31
  },
27
32
  instanceName: "ssr-shape-test"
@@ -41,4 +46,20 @@ test("useQuery SSR returns undefined for singular .one() queries", () => {
41
46
  expect(data).toBeUndefined();
42
47
  expect(info?.type).toBe("unknown");
43
48
  });
49
+ test("query arguments are refused with query and key before a request is created", () => {
50
+ expect(() => {
51
+ client.getQuery(oneTodo, {
52
+ id: () => "x"
53
+ });
54
+ }).toThrow("Query 'todo.oneTodo' argument 'params.id' must be JSON: function");
55
+ expect(client.getQuery(oneTodo, {
56
+ id: "x"
57
+ }).args).toEqual({
58
+ id: "x"
59
+ });
60
+ });
61
+ test("query filter functions are refused before materialization admits their AST", () => {
62
+ expect(() => addContextToQuery(client.getQuery(invalidTodo), {})).toThrow("Query 'todo.invalidTodo' argument 'ast.where.right.value' must be JSON: function");
63
+ expect(() => addContextToQuery(client.getQuery(allTodos), {})).not.toThrow();
64
+ });
44
65
  //# sourceMappingURL=useQuery.ssr.test.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["createSchema","number","string","table","expect","test","createZeroClient","zql","window","Error","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","_args","todo","orderBy","oneTodo","args","where","one","client","models","groupedQueries","instanceName","data","info","useQuery","Array","isArray","toBe","length","filter","toEqual","find","toBeUndefined","type"],"sources":["../../src/useQuery.ssr.test.ts"],"sourcesContent":[null],"mappings":"AAYA,SAASA,YAAA,EAAcC,MAAA,EAAQC,MAAA,EAAQC,KAAA,QAAa;AACpD,SAASC,MAAA,EAAQC,IAAA,QAAY;AAE7B,SAASC,gBAAA,QAAwB;AACjC,SAASC,GAAA,QAAW;AAGpB,IAAI,OAAOC,MAAA,KAAW,aAAa;EACjC,MAAM,IAAIC,KAAA,CAAM,6DAA6D;AAC/E;AAEA,MAAMC,SAAA,GAAYP,KAAA,CAAM,MAAM,EAC3BQ,OAAA,CAAQ;EAAEC,EAAA,EAAIV,MAAA,CAAO;EAAGW,KAAA,EAAOX,MAAA,CAAO;EAAGY,SAAA,EAAWb,MAAA,CAAO;AAAE,CAAC,EAC9Dc,UAAA,CAAW,IAAI;AAClB,MAAMC,MAAA,GAAShB,YAAA,CAAa;EAAEiB,MAAA,EAAQ,CAACP,SAAS;AAAE,CAAC;AAEnD,MAAMQ,QAAA,GAAYC,KAAA,IACfZ,GAAA,CAAwEa,IAAA,CAAKC,OAAA,CAC5E,aACA,MACF;AACF,MAAMC,OAAA,GAAWC,IAAA,IACdhB,GAAA,CAAsEa,IAAA,CACpEI,KAAA,CAAM,MAAMD,IAAA,CAAKX,EAAE,EACnBa,GAAA,CAAI;AAET,MAAMC,MAAA,GAASpB,gBAAA,CAAiB;EAC9BU,MAAA;EACAW,MAAA,EAAQ,CAAC;EACTC,cAAA,EAAgB;IACdR,IAAA,EAAM;MAAEF,QAAA;MAAUI;IAAQ;EAC5B;EACAO,YAAA,EAAc;AAChB,CAAC;AAEDxB,IAAA,CAAK,8CAA8C,MAAM;EAGvD,MAAM,CAACyB,IAAA,EAAMC,IAAI,IAAIL,MAAA,CAAOM,QAAA,CAASd,QAAQ;EAC7Cd,MAAA,CAAO6B,KAAA,CAAMC,OAAA,CAAQJ,IAAI,CAAC,EAAEK,IAAA,CAAK,IAAI;EACrC/B,MAAA,CAAQ0B,IAAA,CAAmBM,MAAM,EAAED,IAAA,CAAK,CAAC;EACzC/B,MAAA,CAAQ0B,IAAA,CAAmBO,MAAA,CAAO,MAAM,IAAI,CAAC,EAAEC,OAAA,CAAQ,EAAE;EACzDlC,MAAA,CAAQ0B,IAAA,CAAmBS,IAAA,CAAK,MAAM,IAAI,CAAC,EAAEC,aAAA,CAAc;EAC3DpC,MAAA,CAAO2B,IAAA,EAAMU,IAAI,EAAEN,IAAA,CAAK,SAAS;AACnC,CAAC;AAED9B,IAAA,CAAK,8DAA8D,MAAM;EACvE,MAAM,CAACyB,IAAA,EAAMC,IAAI,IAAIL,MAAA,CAAOM,QAAA,CAASV,OAAA,EAAS;IAAEV,EAAA,EAAI;EAAI,CAAC;EACzDR,MAAA,CAAO0B,IAAI,EAAEU,aAAA,CAAc;EAC3BpC,MAAA,CAAO2B,IAAA,EAAMU,IAAI,EAAEN,IAAA,CAAK,SAAS;AACnC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createBuilder","createSchema","number","string","table","addContextToQuery","expect","test","createZeroClient","zql","window","Error","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","_args","todo","orderBy","oneTodo","args","where","one","invalidTodo","client","models","groupedQueries","instanceName","data","info","useQuery","Array","isArray","toBe","length","filter","toEqual","find","toBeUndefined","type","getQuery","toThrow","not"],"sources":["../../src/useQuery.ssr.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
- import { createSchema, number, string, table } from "@rocicorp/zero";
1
+ import { createBuilder, createSchema, number, string, table } from "@rocicorp/zero";
2
+ import { addContextToQuery } from "@rocicorp/zero/bindings";
2
3
  import { expect, test } from "vitest";
3
4
  import { createZeroClient } from "./createZeroClient.native.js";
4
5
  import { zql } from "./zql.native.js";
@@ -19,13 +20,19 @@ var allTodos = function allTodos2(_args) {
19
20
  var oneTodo = function oneTodo2(args) {
20
21
  return zql.todo.where("id", args.id).one();
21
22
  };
23
+ var invalidTodo = function invalidTodo2() {
24
+ return createBuilder(schema).todo.where("id", function () {
25
+ return "x";
26
+ });
27
+ };
22
28
  var client = createZeroClient({
23
29
  schema,
24
30
  models: {},
25
31
  groupedQueries: {
26
32
  todo: {
27
33
  allTodos,
28
- oneTodo
34
+ oneTodo,
35
+ invalidTodo
29
36
  }
30
37
  },
31
38
  instanceName: "ssr-shape-test"
@@ -49,4 +56,26 @@ test("useQuery SSR returns undefined for singular .one() queries", function () {
49
56
  expect(data).toBeUndefined();
50
57
  expect(info === null || info === void 0 ? void 0 : info.type).toBe("unknown");
51
58
  });
59
+ test("query arguments are refused with query and key before a request is created", function () {
60
+ expect(function () {
61
+ client.getQuery(oneTodo, {
62
+ id: function id() {
63
+ return "x";
64
+ }
65
+ });
66
+ }).toThrow("Query 'todo.oneTodo' argument 'params.id' must be JSON: function");
67
+ expect(client.getQuery(oneTodo, {
68
+ id: "x"
69
+ }).args).toEqual({
70
+ id: "x"
71
+ });
72
+ });
73
+ test("query filter functions are refused before materialization admits their AST", function () {
74
+ expect(function () {
75
+ return addContextToQuery(client.getQuery(invalidTodo), {});
76
+ }).toThrow("Query 'todo.invalidTodo' argument 'ast.where.right.value' must be JSON: function");
77
+ expect(function () {
78
+ return addContextToQuery(client.getQuery(allTodos), {});
79
+ }).not.toThrow();
80
+ });
52
81
  //# sourceMappingURL=useQuery.ssr.test.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createSchema","number","string","table","expect","test","createZeroClient","zql","window","Error","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","allTodos2","_args","todo","orderBy","oneTodo","oneTodo2","args","where","one","client","models","groupedQueries","instanceName"],"sources":["../../src/useQuery.ssr.test.ts"],"sourcesContent":[null],"mappings":"AAYA,SAASA,YAAA,EAAcC,MAAA,EAAQC,MAAA,EAAQC,KAAA,QAAa;AACpD,SAASC,MAAA,EAAQC,IAAA,QAAY;AAE7B,SAASC,gBAAA,QAAwB;AACjC,SAASC,GAAA,QAAW;AAGpB,IAAI,OAAOC,MAAA,KAAW,aAAa;EACjC,MAAM,IAAIC,KAAA,CAAM,6DAA6D;AAC/E;AAEA,IAAAC,SAAM,GAAAP,KAAY,OAAM,EAAMQ,OAC3B;EAEHC,EAAA,EAAMV,MAAA;EAENW,KAAM,EAAAX,MAAA,EAAW;EAEbY,SAAA,EAAAb,MAAA;AAAA,EACA,CAAAc,UAAA;AACF,IAAAC,MAAA,GAAAhB,YAAA;EACFiB,MAAM,GAKNP,SAAM;AACJ,EACA;AAAS,IACTQ,QAAA,YAAgBC,UAAAC,KAAA;EAAA,OACdb,GAAQ,CAAAc,IAAA,CAAAC,OAAU,YAAQ;AAAA;AAC5B,IACAC,OAAA,YAAcC,SAAAC,IAAA;EACf,OAAAlB,GAAA,CAAAc,IAAA,CAAAK,KAAA,OAAAD,IAAA,CAAAb,EAAA,EAAAe,GAAA;AAED;AAGE,IAAAC,MAAO,GAAAtB,gBAAc,CAAO;EAC5BU,MAAA;EACAa,MAAA,EAAQ;EACRC,cAA2B;IAC3BT,IAAA,EAAQ;MACRH,QAAO;MACRK;IAED;EACE;EACAQ,YAAW,EAAE;AACb;AACF1B,IAAC","ignoreList":[]}
1
+ {"version":3,"names":["createBuilder","createSchema","number","string","table","addContextToQuery","expect","test","createZeroClient","zql","window","Error","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","allTodos2","_args","todo","orderBy","oneTodo","oneTodo2","args","where","one","invalidTodo","invalidTodo2","client","models","groupedQueries","instanceName","data","info","useQuery","Array","isArray","toBe","length","filter","toEqual","find","toBeUndefined"],"sources":["../../src/useQuery.ssr.test.ts"],"sourcesContent":[null],"mappings":"AAYA,SAASA,aAAA,EAAeC,YAAA,EAAcC,MAAA,EAAQC,MAAA,EAAQC,KAAA,QAAa;AACnE,SAASC,iBAAA,QAAyB;AAClC,SAASC,MAAA,EAAQC,IAAA,QAAY;AAE7B,SAASC,gBAAA,QAAwB;AACjC,SAASC,GAAA,QAAW;AAGpB,IAAI,OAAOC,MAAA,KAAW,aAAa;EACjC,MAAM,IAAIC,KAAA,CAAM,6DAA6D;AAC/E;AAEA,IAAAC,SAAM,GAAAR,KAAY,OAAM,EAAMS,OAC3B;EAEHC,EAAA,EAAMX,MAAA;EAENY,KAAM,EAAAZ,MAAA,EAAW;EAEba,SAAA,EAAAd,MAAA;AAAA,EACA,CAAAe,UAAA;AACF,IAAAC,MAAA,GAAAjB,YAAA;EACFkB,MAAM,GAKNP,SAAM;AAGN;AAEA,IAAAQ,QAAM,GAAS,SAAAC,SAAiBA,CAAAC,KAAA;EAC9B,OAAAb,GAAA,CAAAc,IAAA,CAAAC,OAAA;AAAA;AACS,IACTC,OAAA,YAAgBC,SAAAC,IAAA;EAAA,OACdlB,GAAQ,CAAAc,IAAA,CAAAK,KAAU,OAAAD,IAAS,CAAAb,EAAA,EAAAe,GAAA,CAAY;AAAA;AACzC,IACAC,WAAA,GAAc,SAAAC,aAAA;EACf,OAAA/B,aAAA,CAAAkB,MAAA,EAAAK,IAAA,CAAAK,KAAA;IAED,OAAK;EAGH;AACA;AACA,IAAAI,MAAQ,GAAAxB,gBAAiC;EACzCU,MAAA;EACAe,MAAA,EAAQ;EACRC,cAAa;IACdX,IAAA;MAEIH,QAAA;MACHK,OAAO;MACPK;IACA;EACD;EAEDK,YAAK;AACH;AAEE5B,IAAA,6CAA0C;EAC5C,IAAG,CAAA6B,IAAA,EAAQC,IAAA,IAAAL,MAAA,CAAAM,QAAA,CAAAlB,QAAA;EACXd,MAAA,CAAOiC,KAAA,CAAAC,OAAO,CAAAJ,IAAS,GAAAK,IAAS,KAAE,CAAI;EACvCnC,MAAA,CAAA8B,IAAA,CAAAM,MAAA,EAAAD,IAAA;EAEDnC,MAAK,CAAA8B,IAAA,CAAAO,MAAA;IACH,OAAO,IAAM;EAAqD,EAChE,EAAAC,OAAA;EACFtC,MAAA,CAAA8B,IAAA,CAAAS,IAAA;IACA,OAAO,IAAM;EACd,IAAAC,aAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "on-zero",
3
- "version": "0.16.19",
3
+ "version": "0.16.20",
4
4
  "description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
5
5
  "sideEffects": false,
6
6
  "files": [
@@ -77,6 +77,13 @@
77
77
  "import": "./dist/esm/multi.mjs",
78
78
  "require": "./dist/cjs/multi.cjs"
79
79
  },
80
+ "./kv-store": {
81
+ "react-native": "./dist/esm/kvStore.native.js",
82
+ "types": "./types/kvStore.d.ts",
83
+ "import": "./dist/esm/kvStore.mjs",
84
+ "require": "./dist/cjs/kvStore.cjs",
85
+ "default": "./dist/esm/kvStore.mjs"
86
+ },
80
87
  "./streaming": {
81
88
  "react-native": "./dist/esm/streaming.native.js",
82
89
  "types": "./types/streaming.d.ts",
@@ -106,7 +113,7 @@
106
113
  "chokidar": "^4.0.3",
107
114
  "citty": "^0.1.6",
108
115
  "dequal": "^2.0.3",
109
- "orez-lite": "0.16.19",
116
+ "orez-lite": "0.16.20",
110
117
  "typescript": "7.0.2",
111
118
  "valibot": "^1.1.0"
112
119
  },
@@ -139,5 +146,6 @@
139
146
  "react-dom": "^19.0.0",
140
147
  "react-native": "*",
141
148
  "vitest": "^3.1.1"
142
- }
149
+ },
150
+ "releaseSourceCommit": "ea248201d35f2c30b74a6401eda49b9bdd3d2287"
143
151
  }
@@ -4,6 +4,7 @@ import { useContext, useMemo, useRef, type Context } from 'react'
4
4
 
5
5
  import { IS_SERVER_RUNTIME } from './helpers/platform'
6
6
  import { useZeroDebug } from './helpers/useZeroDebug'
7
+ import { serializeQueryParams } from './queryJson'
7
8
  import { resolveQuery, type PlainQueryFn } from './resolveQuery'
8
9
 
9
10
  import type {
@@ -125,7 +126,7 @@ export function createUseQuery<Schema extends ZeroSchema>({
125
126
  // resolveQuery and re-create the query every render. JSON is faster than
126
127
  // generic deep-equal for the small, simple-valued objects zero calls
127
128
  // actually take, and matches what createUseQueryDirect does.
128
- const paramsKey = params === undefined ? '' : JSON.stringify(params)
129
+ const paramsKey = serializeQueryParams(fn, params)
129
130
  const queryRequest = useMemo(
130
131
  () => resolveQuery({ customQueries, fn, params }),
131
132
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -15,6 +15,7 @@ import {
15
15
  } from './createUseQuery'
16
16
  import { useEmitterValue, type Emitter } from './helpers/emitter'
17
17
  import { IS_SERVER_RUNTIME } from './helpers/platform'
18
+ import { serializeQueryParams } from './queryJson'
18
19
  import { resolveQuery } from './resolveQuery'
19
20
 
20
21
  import type {
@@ -294,7 +295,7 @@ export function createUseQueryDirect<Schema extends ZeroSchema>({
294
295
  ttl = options.ttl ?? DEFAULT_TTL_MS
295
296
  }
296
297
 
297
- const paramsKey = params === undefined ? '' : JSON.stringify(params)
298
+ const paramsKey = serializeQueryParams(fn, params)
298
299
 
299
300
  // resolve the query once so we know its singular/plural format up front —
300
301
  // the no-zero / disabled snapshot needs to match that format so .filter /