over-zero 0.0.0 → 0.0.2

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 (204) hide show
  1. package/dist/cjs/createPermissions.cjs +43 -57
  2. package/dist/cjs/createPermissions.js +46 -48
  3. package/dist/cjs/createPermissions.js.map +2 -2
  4. package/dist/cjs/createPermissions.native.js +46 -53
  5. package/dist/cjs/createPermissions.native.js.map +2 -2
  6. package/dist/cjs/createZero.cjs +128 -0
  7. package/dist/cjs/createZero.js +107 -0
  8. package/dist/cjs/createZero.js.map +6 -0
  9. package/dist/cjs/createZero.native.js +115 -0
  10. package/dist/cjs/createZero.native.js.map +6 -0
  11. package/dist/cjs/createZeroClient.cjs +128 -0
  12. package/dist/cjs/createZeroClient.js +103 -0
  13. package/dist/cjs/createZeroClient.js.map +6 -0
  14. package/dist/cjs/createZeroClient.native.js +115 -0
  15. package/dist/cjs/createZeroClient.native.js.map +6 -0
  16. package/dist/cjs/createZeroServer.cjs +131 -0
  17. package/dist/cjs/createZeroServer.js +108 -0
  18. package/dist/cjs/createZeroServer.js.map +6 -0
  19. package/dist/cjs/createZeroServer.native.js +107 -0
  20. package/dist/cjs/createZeroServer.native.js.map +6 -0
  21. package/dist/cjs/helpers/context.js.map +1 -1
  22. package/dist/cjs/helpers/context.native.js.map +1 -1
  23. package/dist/cjs/helpers/createMutators.cjs +11 -11
  24. package/dist/cjs/helpers/createMutators.js +9 -7
  25. package/dist/cjs/helpers/createMutators.js.map +1 -1
  26. package/dist/cjs/helpers/createMutators.native.js +8 -6
  27. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  28. package/dist/cjs/helpers/ensureLoggedIn.cjs +1 -1
  29. package/dist/cjs/helpers/ensureLoggedIn.js +1 -1
  30. package/dist/cjs/helpers/ensureLoggedIn.js.map +1 -1
  31. package/dist/cjs/helpers/ensureLoggedIn.native.js +1 -1
  32. package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
  33. package/dist/cjs/helpers/getAuthData.cjs +0 -36
  34. package/dist/cjs/helpers/getAuthData.js +0 -28
  35. package/dist/cjs/helpers/getAuthData.js.map +2 -2
  36. package/dist/cjs/helpers/getAuthData.native.js +0 -31
  37. package/dist/cjs/helpers/getAuthData.native.js.map +2 -2
  38. package/dist/cjs/helpers/useAuthData.cjs +0 -32
  39. package/dist/cjs/helpers/useAuthData.js +0 -24
  40. package/dist/cjs/helpers/useAuthData.js.map +2 -2
  41. package/dist/cjs/helpers/useAuthData.native.js +0 -31
  42. package/dist/cjs/helpers/useAuthData.native.js.map +2 -2
  43. package/dist/cjs/helpers/useZeroDebug.cjs +68 -0
  44. package/dist/cjs/helpers/useZeroDebug.js +49 -0
  45. package/dist/cjs/helpers/useZeroDebug.js.map +6 -0
  46. package/dist/cjs/helpers/useZeroDebug.native.js +66 -0
  47. package/dist/cjs/helpers/useZeroDebug.native.js.map +6 -0
  48. package/dist/cjs/helpers/zeroEmitter.cjs +2 -2
  49. package/dist/cjs/helpers/zeroEmitter.js +2 -2
  50. package/dist/cjs/helpers/zeroEmitter.native.js +1 -1
  51. package/dist/cjs/helpers/zeroEmitter.native.js.map +1 -1
  52. package/dist/cjs/index.cjs +3 -1
  53. package/dist/cjs/index.js +3 -1
  54. package/dist/cjs/index.js.map +1 -1
  55. package/dist/cjs/index.native.js +6 -2
  56. package/dist/cjs/index.native.js.map +1 -1
  57. package/dist/cjs/mutations.cjs +50 -0
  58. package/dist/cjs/mutations.js +43 -0
  59. package/dist/cjs/mutations.js.map +6 -0
  60. package/dist/cjs/mutations.native.js +50 -0
  61. package/dist/cjs/mutations.native.js.map +6 -0
  62. package/dist/cjs/server.cjs +18 -0
  63. package/dist/cjs/server.js +15 -0
  64. package/dist/cjs/server.js.map +6 -0
  65. package/dist/cjs/server.native.js +20 -0
  66. package/dist/cjs/server.native.js.map +6 -0
  67. package/dist/cjs/where.cjs +33 -0
  68. package/dist/cjs/where.js +28 -0
  69. package/dist/cjs/where.js.map +6 -0
  70. package/dist/cjs/where.native.js +34 -0
  71. package/dist/cjs/where.native.js.map +6 -0
  72. package/dist/esm/createPermissions.js +48 -47
  73. package/dist/esm/createPermissions.js.map +2 -2
  74. package/dist/esm/createPermissions.mjs +41 -55
  75. package/dist/esm/createPermissions.mjs.map +1 -1
  76. package/dist/esm/createPermissions.native.js +55 -69
  77. package/dist/esm/createPermissions.native.js.map +1 -1
  78. package/dist/esm/createZero.js +99 -0
  79. package/dist/esm/createZero.js.map +6 -0
  80. package/dist/esm/createZero.mjs +105 -0
  81. package/dist/esm/createZero.mjs.map +1 -0
  82. package/dist/esm/createZero.native.js +119 -0
  83. package/dist/esm/createZero.native.js.map +1 -0
  84. package/dist/esm/createZeroClient.js +95 -0
  85. package/dist/esm/createZeroClient.js.map +6 -0
  86. package/dist/esm/createZeroClient.mjs +105 -0
  87. package/dist/esm/createZeroClient.mjs.map +1 -0
  88. package/dist/esm/createZeroClient.native.js +119 -0
  89. package/dist/esm/createZeroClient.native.js.map +1 -0
  90. package/dist/esm/createZeroServer.js +90 -0
  91. package/dist/esm/createZeroServer.js.map +6 -0
  92. package/dist/esm/createZeroServer.mjs +97 -0
  93. package/dist/esm/createZeroServer.mjs.map +1 -0
  94. package/dist/esm/createZeroServer.native.js +104 -0
  95. package/dist/esm/createZeroServer.native.js.map +1 -0
  96. package/dist/esm/helpers/context.js.map +1 -1
  97. package/dist/esm/helpers/context.mjs.map +1 -1
  98. package/dist/esm/helpers/context.native.js.map +1 -1
  99. package/dist/esm/helpers/createMutators.js +6 -7
  100. package/dist/esm/helpers/createMutators.js.map +1 -1
  101. package/dist/esm/helpers/createMutators.mjs +7 -7
  102. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  103. package/dist/esm/helpers/createMutators.native.js +9 -7
  104. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  105. package/dist/esm/helpers/ensureLoggedIn.js +1 -1
  106. package/dist/esm/helpers/ensureLoggedIn.js.map +1 -1
  107. package/dist/esm/helpers/ensureLoggedIn.mjs +1 -1
  108. package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
  109. package/dist/esm/helpers/ensureLoggedIn.native.js +1 -1
  110. package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
  111. package/dist/esm/helpers/getAuthData.js +0 -12
  112. package/dist/esm/helpers/getAuthData.js.map +2 -2
  113. package/dist/esm/helpers/getAuthData.mjs +1 -12
  114. package/dist/esm/helpers/getAuthData.mjs.map +1 -1
  115. package/dist/esm/helpers/getAuthData.native.js +1 -12
  116. package/dist/esm/helpers/getAuthData.native.js.map +1 -1
  117. package/dist/esm/helpers/useAuthData.js +0 -10
  118. package/dist/esm/helpers/useAuthData.js.map +2 -2
  119. package/dist/esm/helpers/useAuthData.mjs +1 -8
  120. package/dist/esm/helpers/useAuthData.mjs.map +1 -1
  121. package/dist/esm/helpers/useAuthData.native.js +1 -12
  122. package/dist/esm/helpers/useAuthData.native.js.map +1 -1
  123. package/dist/esm/helpers/useZeroDebug.js +35 -0
  124. package/dist/esm/helpers/useZeroDebug.js.map +6 -0
  125. package/dist/esm/helpers/useZeroDebug.mjs +45 -0
  126. package/dist/esm/helpers/useZeroDebug.mjs.map +1 -0
  127. package/dist/esm/helpers/useZeroDebug.native.js +53 -0
  128. package/dist/esm/helpers/useZeroDebug.native.js.map +1 -0
  129. package/dist/esm/helpers/zeroEmitter.js +1 -1
  130. package/dist/esm/helpers/zeroEmitter.mjs +1 -1
  131. package/dist/esm/helpers/zeroEmitter.native.js +1 -1
  132. package/dist/esm/index.js +3 -1
  133. package/dist/esm/index.js.map +1 -1
  134. package/dist/esm/index.mjs +3 -1
  135. package/dist/esm/index.mjs.map +1 -1
  136. package/dist/esm/index.native.js +3 -1
  137. package/dist/esm/index.native.js.map +1 -1
  138. package/dist/esm/mutations.js +27 -0
  139. package/dist/esm/mutations.js.map +6 -0
  140. package/dist/esm/mutations.mjs +27 -0
  141. package/dist/esm/mutations.mjs.map +1 -0
  142. package/dist/esm/mutations.native.js +29 -0
  143. package/dist/esm/mutations.native.js.map +1 -0
  144. package/dist/esm/server.js +2 -0
  145. package/dist/esm/server.js.map +6 -0
  146. package/dist/esm/server.mjs +2 -0
  147. package/dist/esm/server.mjs.map +1 -0
  148. package/dist/esm/server.native.js +2 -0
  149. package/dist/esm/server.native.js.map +1 -0
  150. package/dist/esm/where.js +12 -0
  151. package/dist/esm/where.js.map +6 -0
  152. package/dist/esm/where.mjs +9 -0
  153. package/dist/esm/where.mjs.map +1 -0
  154. package/dist/esm/where.native.js +9 -0
  155. package/dist/esm/where.native.js.map +1 -0
  156. package/package.json +12 -6
  157. package/src/createPermissions.ts +17 -77
  158. package/src/createZeroClient.tsx +29 -26
  159. package/src/createZeroServer.ts +43 -43
  160. package/src/helpers/createMutators.ts +19 -29
  161. package/src/helpers/ensureLoggedIn.ts +2 -1
  162. package/src/helpers/prettyFormatZeroQuery.ts +1 -1
  163. package/src/helpers/useZeroDebug.ts +1 -0
  164. package/src/index.ts +1 -5
  165. package/src/mutations.ts +20 -7
  166. package/src/server.ts +1 -0
  167. package/src/types.ts +74 -7
  168. package/src/where.ts +28 -0
  169. package/src/helpers/clearZeroDatabase.ts +0 -68
  170. package/src/helpers/getAuthData.tsx +0 -12
  171. package/src/helpers/useAuthData.ts +0 -13
  172. package/src/helpers/zeroEmitter.ts +0 -5
  173. package/types/createMutations.d.ts +0 -20
  174. package/types/createMutations.d.ts.map +0 -1
  175. package/types/createPermissions.d.ts +0 -37
  176. package/types/createPermissions.d.ts.map +0 -1
  177. package/types/createZeroClient.d.ts +0 -45
  178. package/types/createZeroClient.d.ts.map +0 -1
  179. package/types/createZeroServer.d.ts +0 -61
  180. package/types/createZeroServer.d.ts.map +0 -1
  181. package/types/helpers/batchQuery.d.ts +0 -7
  182. package/types/helpers/batchQuery.d.ts.map +0 -1
  183. package/types/helpers/clearZeroDatabase.d.ts +0 -2
  184. package/types/helpers/clearZeroDatabase.d.ts.map +0 -1
  185. package/types/helpers/context.d.ts +0 -5
  186. package/types/helpers/context.d.ts.map +0 -1
  187. package/types/helpers/createMutators.d.ts +0 -16
  188. package/types/helpers/createMutators.d.ts.map +0 -1
  189. package/types/helpers/ensureLoggedIn.d.ts +0 -2
  190. package/types/helpers/ensureLoggedIn.d.ts.map +0 -1
  191. package/types/helpers/getAuthData.d.ts +0 -1
  192. package/types/helpers/getAuthData.d.ts.map +0 -1
  193. package/types/helpers/prettyFormatZeroQuery.d.ts +0 -3
  194. package/types/helpers/prettyFormatZeroQuery.d.ts.map +0 -1
  195. package/types/helpers/useAuthData.d.ts +0 -1
  196. package/types/helpers/useAuthData.d.ts.map +0 -1
  197. package/types/helpers/useZeroDebug.d.ts +0 -3
  198. package/types/helpers/useZeroDebug.d.ts.map +0 -1
  199. package/types/helpers/zeroEmitter.d.ts +0 -2
  200. package/types/helpers/zeroEmitter.d.ts.map +0 -1
  201. package/types/index.d.ts +0 -9
  202. package/types/index.d.ts.map +0 -1
  203. package/types/types.d.ts +0 -21
  204. package/types/types.d.ts.map +0 -1
@@ -0,0 +1,95 @@
1
+ import { useZero, ZeroProvider, useQuery as zeroUseQuery } from "@rocicorp/zero/react";
2
+ import { createEmitter, createLocalStorage, mapObject } from "@vxrn/helpers";
3
+ import { createContext, use, useMemo } from "react";
4
+ import { createPermissions } from "./createPermissions";
5
+ import { context } from "./helpers/context";
6
+ import { createMutators } from "./helpers/createMutators";
7
+ import { prettyFormatZeroQuery } from "./helpers/prettyFormatZeroQuery";
8
+ import { useZeroDebug } from "./helpers/useZeroDebug";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ function createZeroClient({ schema, models, disable }) {
11
+ const modelPermissions = mapObject(models, (val) => val.permissions), permissionsHelpers = createPermissions({
12
+ schema,
13
+ models,
14
+ getContext: context,
15
+ environment: "client"
16
+ }), permissionCache = createLocalStorage("permissions-cache", {
17
+ storageLimit: 24
18
+ }), zeroEvents = createEmitter("zero", null), AuthDataContext = createContext({}), useAuthData = () => use(AuthDataContext);
19
+ function usePermission(table, action, objOrId, enabled = typeof objOrId < "u", debug = !1) {
20
+ const keyBase = `${String(table)}${action}`, key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`, cacheVal = permissionCache.get(key) ?? permissionCache.get(keyBase), authData = useAuthData(), permission = modelPermissions[table], query = (() => {
21
+ let baseQuery = zero.query[table].one();
22
+ return enabled ? baseQuery.where((eb) => permissionsHelpers.buildPermissionQuery(
23
+ authData,
24
+ eb,
25
+ permission,
26
+ action,
27
+ objOrId
28
+ )) : baseQuery;
29
+ })(), [data, status] = useQuery(query, {
30
+ enabled: !!(enabled && authData && objOrId)
31
+ });
32
+ debug && console.info(
33
+ "usePermission()",
34
+ { data, status, action, authData, permission },
35
+ prettyFormatZeroQuery(query)
36
+ );
37
+ const allowed = !!data;
38
+ return objOrId ? allowed : !1;
39
+ }
40
+ let latestZeroInstance = null;
41
+ const zero = new Proxy({}, {
42
+ get(_, key) {
43
+ return Reflect.get(latestZeroInstance, key, latestZeroInstance);
44
+ }
45
+ }), useQuery = (query, options) => {
46
+ if (disable)
47
+ return [null, { type: "unknown" }];
48
+ const out = zeroUseQuery(query, options);
49
+ return process.env.NODE_ENV === "development" && useZeroDebug(query, options, out), out;
50
+ }, ProvideZero = ({
51
+ children,
52
+ authData,
53
+ ...props
54
+ }) => {
55
+ const mutators = useMemo(() => createMutators({
56
+ models,
57
+ environment: "client",
58
+ authData,
59
+ can: permissionsHelpers.can
60
+ }), [models, authData]);
61
+ return disable ? children : /* @__PURE__ */ jsx(AuthDataContext.Provider, { value: authData, children: /* @__PURE__ */ jsxs(
62
+ ZeroProvider,
63
+ {
64
+ schema,
65
+ kvStore: "mem",
66
+ onError: (error) => {
67
+ console.error("Zero Error:", error), zeroEvents.emit({
68
+ type: "error",
69
+ message: error
70
+ });
71
+ },
72
+ mutators,
73
+ ...props,
74
+ children: [
75
+ /* @__PURE__ */ jsx(SetZeroInstance, {}),
76
+ children
77
+ ]
78
+ }
79
+ ) });
80
+ }, SetZeroInstance = () => {
81
+ const zero2 = useZero();
82
+ return zero2 !== latestZeroInstance && (latestZeroInstance = zero2), null;
83
+ };
84
+ return {
85
+ zeroEvents,
86
+ ProvideZero,
87
+ useQuery,
88
+ usePermission,
89
+ zero
90
+ };
91
+ }
92
+ export {
93
+ createZeroClient
94
+ };
95
+ //# sourceMappingURL=createZeroClient.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createZeroClient.tsx"],
4
+ "mappings": "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",
5
+ "names": ["zero"]
6
+ }
@@ -0,0 +1,105 @@
1
+ import { useZero, ZeroProvider, useQuery as zeroUseQuery } from "@rocicorp/zero/react";
2
+ import { createEmitter, createLocalStorage, mapObject } from "@vxrn/helpers";
3
+ import { createContext, use, useMemo } from "react";
4
+ import { createPermissions } from "./createPermissions.mjs";
5
+ import { context } from "./helpers/context.mjs";
6
+ import { createMutators } from "./helpers/createMutators.mjs";
7
+ import { prettyFormatZeroQuery } from "./helpers/prettyFormatZeroQuery.mjs";
8
+ import { useZeroDebug } from "./helpers/useZeroDebug.mjs";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ function createZeroClient({
11
+ schema,
12
+ models,
13
+ disable
14
+ }) {
15
+ const modelPermissions = mapObject(models, val => val.permissions),
16
+ permissionsHelpers = createPermissions({
17
+ schema,
18
+ models,
19
+ getContext: context,
20
+ environment: "client"
21
+ }),
22
+ permissionCache = createLocalStorage("permissions-cache", {
23
+ storageLimit: 24
24
+ }),
25
+ zeroEvents = createEmitter("zero", null),
26
+ AuthDataContext = createContext({}),
27
+ useAuthData = () => use(AuthDataContext);
28
+ function usePermission(table, action, objOrId, enabled = typeof objOrId < "u", debug = !1) {
29
+ const keyBase = `${String(table)}${action}`,
30
+ key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`,
31
+ cacheVal = permissionCache.get(key) ?? permissionCache.get(keyBase),
32
+ authData = useAuthData(),
33
+ permission = modelPermissions[table],
34
+ query = (() => {
35
+ let baseQuery = zero.query[table].one();
36
+ return enabled ? baseQuery.where(eb => permissionsHelpers.buildPermissionQuery(authData, eb, permission, action, objOrId)) : baseQuery;
37
+ })(),
38
+ [data, status] = useQuery(query, {
39
+ enabled: !!(enabled && authData && objOrId)
40
+ });
41
+ debug && console.info("usePermission()", {
42
+ data,
43
+ status,
44
+ action,
45
+ authData,
46
+ permission
47
+ }, prettyFormatZeroQuery(query));
48
+ const allowed = !!data;
49
+ return objOrId ? allowed : !1;
50
+ }
51
+ let latestZeroInstance = null;
52
+ const zero = new Proxy({}, {
53
+ get(_, key) {
54
+ return Reflect.get(latestZeroInstance, key, latestZeroInstance);
55
+ }
56
+ }),
57
+ useQuery = (query, options) => {
58
+ if (disable) return [null, {
59
+ type: "unknown"
60
+ }];
61
+ const out = zeroUseQuery(query, options);
62
+ return process.env.NODE_ENV === "development" && useZeroDebug(query, options, out), out;
63
+ },
64
+ ProvideZero = ({
65
+ children,
66
+ authData,
67
+ ...props
68
+ }) => {
69
+ const mutators = useMemo(() => createMutators({
70
+ models,
71
+ environment: "client",
72
+ authData,
73
+ can: permissionsHelpers.can
74
+ }), [models, authData]);
75
+ return disable ? children : /* @__PURE__ */jsx(AuthDataContext.Provider, {
76
+ value: authData,
77
+ children: /* @__PURE__ */jsxs(ZeroProvider, {
78
+ schema,
79
+ kvStore: "mem",
80
+ onError: error => {
81
+ console.error("Zero Error:", error), zeroEvents.emit({
82
+ type: "error",
83
+ message: error
84
+ });
85
+ },
86
+ mutators,
87
+ ...props,
88
+ children: [/* @__PURE__ */jsx(SetZeroInstance, {}), children]
89
+ })
90
+ });
91
+ },
92
+ SetZeroInstance = () => {
93
+ const zero2 = useZero();
94
+ return zero2 !== latestZeroInstance && (latestZeroInstance = zero2), null;
95
+ };
96
+ return {
97
+ zeroEvents,
98
+ ProvideZero,
99
+ useQuery,
100
+ usePermission,
101
+ zero
102
+ };
103
+ }
104
+ export { createZeroClient };
105
+ //# sourceMappingURL=createZeroClient.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useZero","ZeroProvider","useQuery","zeroUseQuery","createEmitter","createLocalStorage","mapObject","createContext","use","useMemo","createPermissions","context","createMutators","prettyFormatZeroQuery","useZeroDebug","jsx","jsxs","createZeroClient","schema","models","disable","modelPermissions","val","permissions","permissionsHelpers","getContext","environment","permissionCache","storageLimit","zeroEvents","AuthDataContext","useAuthData","usePermission","table","action","objOrId","enabled","debug","keyBase","String","key","JSON","stringify","cacheVal","get","authData","permission","query","baseQuery","zero","one","where","eb","buildPermissionQuery","data","status","console","info","allowed","latestZeroInstance","Proxy","_","Reflect","options","type","out","process","env","NODE_ENV","ProvideZero","children","props","mutators","can","Provider","value","kvStore","onError","error","emit","message","SetZeroInstance","zero2"],"sources":["../../src/createZeroClient.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,119 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useZero, ZeroProvider, useQuery as zeroUseQuery } from "@rocicorp/zero/react";
3
+ import { createEmitter, createLocalStorage, mapObject } from "@vxrn/helpers";
4
+ import { createContext, use, useMemo } from "react";
5
+ import { createPermissions } from "./createPermissions.native.js";
6
+ import { context } from "./helpers/context.native.js";
7
+ import { createMutators } from "./helpers/createMutators.native.js";
8
+ import { prettyFormatZeroQuery } from "./helpers/prettyFormatZeroQuery.native.js";
9
+ import { useZeroDebug } from "./helpers/useZeroDebug.native.js";
10
+ function createZeroClient(param) {
11
+ var {
12
+ schema,
13
+ models,
14
+ disable
15
+ } = param,
16
+ modelPermissions = mapObject(models, function (val) {
17
+ return val.permissions;
18
+ }),
19
+ permissionsHelpers = createPermissions({
20
+ schema,
21
+ models,
22
+ getContext: context,
23
+ environment: "client"
24
+ }),
25
+ permissionCache = createLocalStorage("permissions-cache", {
26
+ storageLimit: 24
27
+ }),
28
+ zeroEvents = createEmitter("zero", null),
29
+ AuthDataContext = /* @__PURE__ */createContext({}),
30
+ useAuthData = function () {
31
+ return use(AuthDataContext);
32
+ };
33
+ function usePermission(table, action, objOrId) {
34
+ var enabled = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : typeof objOrId < "u",
35
+ debug = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : !1,
36
+ keyBase = `${String(table)}${action}`,
37
+ key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`,
38
+ _permissionCache_get,
39
+ cacheVal = (_permissionCache_get = permissionCache.get(key)) !== null && _permissionCache_get !== void 0 ? _permissionCache_get : permissionCache.get(keyBase),
40
+ authData = useAuthData(),
41
+ permission = modelPermissions[table],
42
+ query = function () {
43
+ var baseQuery = zero.query[table].one();
44
+ return enabled ? baseQuery.where(function (eb) {
45
+ return permissionsHelpers.buildPermissionQuery(authData, eb, permission, action, objOrId);
46
+ }) : baseQuery;
47
+ }(),
48
+ [data, status] = useQuery(query, {
49
+ enabled: !!(enabled && authData && objOrId)
50
+ });
51
+ debug && console.info("usePermission()", {
52
+ data,
53
+ status,
54
+ action,
55
+ authData,
56
+ permission
57
+ }, prettyFormatZeroQuery(query));
58
+ var result = data,
59
+ allowed = !!result;
60
+ return objOrId ? allowed : !1;
61
+ }
62
+ var latestZeroInstance = null,
63
+ zero = new Proxy({}, {
64
+ get(_, key) {
65
+ return Reflect.get(latestZeroInstance, key, latestZeroInstance);
66
+ }
67
+ }),
68
+ useQuery = function (query, options) {
69
+ if (disable) return [null, {
70
+ type: "unknown"
71
+ }];
72
+ var out = zeroUseQuery(query, options);
73
+ return process.env.NODE_ENV === "development" && useZeroDebug(query, options, out), out;
74
+ },
75
+ ProvideZero = function (param2) {
76
+ var {
77
+ children,
78
+ authData,
79
+ ...props
80
+ } = param2,
81
+ mutators = useMemo(function () {
82
+ return createMutators({
83
+ models,
84
+ environment: "client",
85
+ authData,
86
+ can: permissionsHelpers.can
87
+ });
88
+ }, [models, authData]);
89
+ return disable ? children : /* @__PURE__ */_jsx(AuthDataContext.Provider, {
90
+ value: authData,
91
+ children: /* @__PURE__ */_jsxs(ZeroProvider, {
92
+ schema,
93
+ kvStore: "mem",
94
+ onError: function (error) {
95
+ console.error("Zero Error:", error), zeroEvents.emit({
96
+ type: "error",
97
+ message: error
98
+ });
99
+ },
100
+ mutators,
101
+ ...props,
102
+ children: [/* @__PURE__ */_jsx(SetZeroInstance, {}), children]
103
+ })
104
+ });
105
+ },
106
+ SetZeroInstance = function () {
107
+ var zero2 = useZero();
108
+ return zero2 !== latestZeroInstance && (latestZeroInstance = zero2), null;
109
+ };
110
+ return {
111
+ zeroEvents,
112
+ ProvideZero,
113
+ useQuery,
114
+ usePermission,
115
+ zero
116
+ };
117
+ }
118
+ export { createZeroClient };
119
+ //# sourceMappingURL=createZeroClient.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","useZero","ZeroProvider","useQuery","zeroUseQuery","createEmitter","createLocalStorage","mapObject","createContext","use","useMemo","createPermissions","context","createMutators","prettyFormatZeroQuery","useZeroDebug","createZeroClient","param","schema","models","disable","modelPermissions","val","permissions","permissionsHelpers","getContext","environment","permissionCache","storageLimit","zeroEvents","AuthDataContext","useAuthData","usePermission","table","action","objOrId","enabled","arguments","length","debug","keyBase","String","key","JSON","stringify","_permissionCache_get","cacheVal","get","authData","permission","query","baseQuery","zero","one","where","eb","buildPermissionQuery","data","status","console","info","result","allowed","latestZeroInstance","Proxy","_","Reflect","options","type","out","process","env","NODE_ENV","ProvideZero","param2","children","props","mutators","can","Provider","value","kvStore","onError","error","emit","message","SetZeroInstance","zero2"],"sources":["../../src/createZeroClient.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,90 @@
1
+ import { PostgresJSConnection, PushProcessor } from "@rocicorp/zero/pg";
2
+ import { ZQLDatabase } from "@rocicorp/zero/server";
3
+ import { assertString, randomId } from "@vxrn/helpers";
4
+ import postgres from "postgres";
5
+ import { createPermissions } from "./createPermissions";
6
+ import { context, isInZeroMutation } from "./helpers/context";
7
+ import { createMutators } from "./helpers/createMutators";
8
+ function createZeroServer({
9
+ createServerActions,
10
+ schema,
11
+ models
12
+ }) {
13
+ const dbString = assertString(process.env.ZERO_UPSTREAM_DB), zeroServerDatabase = new ZQLDatabase(
14
+ new PostgresJSConnection(postgres(dbString)),
15
+ schema
16
+ ), permissions = createPermissions({
17
+ environment: "server",
18
+ schema,
19
+ models,
20
+ getContext: context
21
+ }), processor = new PushProcessor(zeroServerDatabase), handleMutationRequest = async ({
22
+ authData,
23
+ request,
24
+ skipAsyncTasks
25
+ }) => {
26
+ const asyncTasks = [], mutators = createMutators({
27
+ asyncTasks,
28
+ can: permissions.can,
29
+ createServerActions,
30
+ environment: "server",
31
+ models,
32
+ authData
33
+ }), response = await processor.process(mutators, request);
34
+ if (!skipAsyncTasks && asyncTasks.length) {
35
+ const id = randomId();
36
+ console.info(`[push] complete, running async tasks ${asyncTasks.length} id ${id}`), Promise.all(asyncTasks.map((task) => task())).then(() => {
37
+ console.info(`[push] async tasks complete ${id}`);
38
+ }).catch((err) => {
39
+ console.error("[push] error: async tasks failed \u{1F61E}", err);
40
+ });
41
+ }
42
+ return {
43
+ response,
44
+ asyncTasks
45
+ };
46
+ }, serverMutate = async (run, authData) => {
47
+ const asyncTasks = [], mutators = createMutators({
48
+ models,
49
+ environment: "server",
50
+ asyncTasks,
51
+ authData: {
52
+ id: "",
53
+ email: "admin@start.chat",
54
+ role: "admin",
55
+ ...authData
56
+ },
57
+ createServerActions,
58
+ can: permissions.can
59
+ });
60
+ await serverTransaction(async (tx) => {
61
+ await run(tx, mutators);
62
+ }), await Promise.all(asyncTasks.map((t) => t()));
63
+ }, serverQuery = serverTransaction, dummyTransactionInput = {
64
+ clientGroupID: "unused",
65
+ clientID: "unused",
66
+ mutationID: 42,
67
+ upstreamSchema: "unused"
68
+ };
69
+ async function serverTransaction(query) {
70
+ try {
71
+ if (isInZeroMutation()) {
72
+ const { tx } = context();
73
+ return await query(tx);
74
+ }
75
+ return await zeroServerDatabase.transaction(query, dummyTransactionInput);
76
+ } catch (err) {
77
+ throw console.error(`Error running serverTransaction(): ${err}`), err;
78
+ }
79
+ }
80
+ return {
81
+ handleMutationRequest,
82
+ transaction: serverTransaction,
83
+ mutate: serverMutate,
84
+ query: serverQuery
85
+ };
86
+ }
87
+ export {
88
+ createZeroServer
89
+ };
90
+ //# sourceMappingURL=createZeroServer.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createZeroServer.ts"],
4
+ "mappings": "AAEA,SAAS,sBAAsB,qBAAqB;AACpD,SAAS,mBAAmB;AAC5B,SAAS,cAAc,gBAAgB;AACvC,OAAO,cAAc;AACrB,SAAS,yBAAyB;AAClC,SAAS,SAAS,wBAAwB;AAC1C,SAAS,sBAAsB;AASxB,SAAS,iBAId;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,WAAW,aAAa,QAAQ,IAAI,gBAAgB,GAEpD,qBAAqB,IAAI;AAAA,IAC7B,IAAI,qBAAqB,SAAS,QAAQ,CAAC;AAAA,IAC3C;AAAA,EACF,GAEM,cAAc,kBAA0B;AAAA,IAC5C,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,CAAC,GAEK,YAAY,IAAI,cAAc,kBAAkB,GAEhD,wBAAwB,OAAO;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAIM;AAEJ,UAAM,aAA4B,CAAC,GAE7B,WAAW,eAAe;AAAA,MAC9B;AAAA,MACA,KAAK,YAAY;AAAA,MACjB;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IACF,CAAC,GAGK,WAAW,MAAM,UAAU,QAAQ,UAAU,OAAO;AAG1D,QAAI,CAAC,kBAAkB,WAAW,QAAQ;AACxC,YAAM,KAAK,SAAS;AACpB,cAAQ,KAAK,wCAAwC,WAAW,MAAM,OAAO,EAAE,EAAE,GACjF,QAAQ,IAAI,WAAW,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EACzC,KAAK,MAAM;AACV,gBAAQ,KAAK,+BAA+B,EAAE,EAAE;AAAA,MAClD,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,gBAAQ,MAAM,8CAAuC,GAAG;AAAA,MAC1D,CAAC;AAAA,IACL;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAEM,eAAe,OACnB,KACA,aACG;AACH,UAAM,aAAyC,CAAC,GAE1C,WAAW,eAAe;AAAA,MAC9B;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA,UAAU;AAAA,QACR,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,GAAG;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK,YAAY;AAAA,IACnB,CAAC;AAED,UAAM,kBAAkB,OAAO,OAAO;AACpC,YAAM,IAAI,IAAI,QAAQ;AAAA,IACxB,CAAC,GAED,MAAM,QAAQ,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,EAC9C,GAIM,cAAc,mBAGd,wBAAkD;AAAA,IACtD,eAAe;AAAA,IACf,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAEA,iBAAe,kBAGb,OAA6B;AAC7B,QAAI;AACF,UAAI,iBAAiB,GAAG;AACtB,cAAM,EAAE,GAAG,IAAI,QAAQ;AACvB,eAAO,MAAM,MAAM,EAAE;AAAA,MACvB;AAGA,aADe,MAAM,mBAAmB,YAAY,OAAO,qBAAqB;AAAA,IAElF,SAAS,KAAK;AACZ,oBAAQ,MAAM,sCAAsC,GAAG,EAAE,GACnD;AAAA,IACR;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF;",
5
+ "names": []
6
+ }
@@ -0,0 +1,97 @@
1
+ import { PostgresJSConnection, PushProcessor } from "@rocicorp/zero/pg";
2
+ import { ZQLDatabase } from "@rocicorp/zero/server";
3
+ import { assertString, randomId } from "@vxrn/helpers";
4
+ import postgres from "postgres";
5
+ import { createPermissions } from "./createPermissions.mjs";
6
+ import { context, isInZeroMutation } from "./helpers/context.mjs";
7
+ import { createMutators } from "./helpers/createMutators.mjs";
8
+ function createZeroServer({
9
+ createServerActions,
10
+ schema,
11
+ models
12
+ }) {
13
+ const dbString = assertString(process.env.ZERO_UPSTREAM_DB),
14
+ zeroServerDatabase = new ZQLDatabase(new PostgresJSConnection(postgres(dbString)), schema),
15
+ permissions = createPermissions({
16
+ environment: "server",
17
+ schema,
18
+ models,
19
+ getContext: context
20
+ }),
21
+ processor = new PushProcessor(zeroServerDatabase),
22
+ handleMutationRequest = async ({
23
+ authData,
24
+ request,
25
+ skipAsyncTasks
26
+ }) => {
27
+ const asyncTasks = [],
28
+ mutators = createMutators({
29
+ asyncTasks,
30
+ can: permissions.can,
31
+ createServerActions,
32
+ environment: "server",
33
+ models,
34
+ authData
35
+ }),
36
+ response = await processor.process(mutators, request);
37
+ if (!skipAsyncTasks && asyncTasks.length) {
38
+ const id = randomId();
39
+ console.info(`[push] complete, running async tasks ${asyncTasks.length} id ${id}`), Promise.all(asyncTasks.map(task => task())).then(() => {
40
+ console.info(`[push] async tasks complete ${id}`);
41
+ }).catch(err => {
42
+ console.error("[push] error: async tasks failed \u{1F61E}", err);
43
+ });
44
+ }
45
+ return {
46
+ response,
47
+ asyncTasks
48
+ };
49
+ },
50
+ serverMutate = async (run, authData) => {
51
+ const asyncTasks = [],
52
+ mutators = createMutators({
53
+ models,
54
+ environment: "server",
55
+ asyncTasks,
56
+ authData: {
57
+ id: "",
58
+ email: "admin@start.chat",
59
+ role: "admin",
60
+ ...authData
61
+ },
62
+ createServerActions,
63
+ can: permissions.can
64
+ });
65
+ await serverTransaction(async tx => {
66
+ await run(tx, mutators);
67
+ }), await Promise.all(asyncTasks.map(t => t()));
68
+ },
69
+ serverQuery = serverTransaction,
70
+ dummyTransactionInput = {
71
+ clientGroupID: "unused",
72
+ clientID: "unused",
73
+ mutationID: 42,
74
+ upstreamSchema: "unused"
75
+ };
76
+ async function serverTransaction(query) {
77
+ try {
78
+ if (isInZeroMutation()) {
79
+ const {
80
+ tx
81
+ } = context();
82
+ return await query(tx);
83
+ }
84
+ return await zeroServerDatabase.transaction(query, dummyTransactionInput);
85
+ } catch (err) {
86
+ throw console.error(`Error running serverTransaction(): ${err}`), err;
87
+ }
88
+ }
89
+ return {
90
+ handleMutationRequest,
91
+ transaction: serverTransaction,
92
+ mutate: serverMutate,
93
+ query: serverQuery
94
+ };
95
+ }
96
+ export { createZeroServer };
97
+ //# sourceMappingURL=createZeroServer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PostgresJSConnection","PushProcessor","ZQLDatabase","assertString","randomId","postgres","createPermissions","context","isInZeroMutation","createMutators","createZeroServer","createServerActions","schema","models","dbString","process","env","ZERO_UPSTREAM_DB","zeroServerDatabase","permissions","environment","getContext","processor","handleMutationRequest","authData","request","skipAsyncTasks","asyncTasks","mutators","can","response","length","id","console","info","Promise","all","map","task","then","catch","err","error","serverMutate","run","email","role","serverTransaction","tx","t","serverQuery","dummyTransactionInput","clientGroupID","clientID","mutationID","upstreamSchema","query","transaction","mutate"],"sources":["../../src/createZeroServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ import { PostgresJSConnection, PushProcessor } from "@rocicorp/zero/pg";
2
+ import { ZQLDatabase } from "@rocicorp/zero/server";
3
+ import { assertString, randomId } from "@vxrn/helpers";
4
+ import postgres from "postgres";
5
+ import { createPermissions } from "./createPermissions.native.js";
6
+ import { context, isInZeroMutation } from "./helpers/context.native.js";
7
+ import { createMutators } from "./helpers/createMutators.native.js";
8
+ function createZeroServer(param) {
9
+ var {
10
+ createServerActions,
11
+ schema,
12
+ models
13
+ } = param,
14
+ dbString = assertString(process.env.ZERO_UPSTREAM_DB),
15
+ zeroServerDatabase = new ZQLDatabase(new PostgresJSConnection(postgres(dbString)), schema),
16
+ permissions = createPermissions({
17
+ environment: "server",
18
+ schema,
19
+ models,
20
+ getContext: context
21
+ }),
22
+ processor = new PushProcessor(zeroServerDatabase),
23
+ handleMutationRequest = async function (param2) {
24
+ var {
25
+ authData,
26
+ request,
27
+ skipAsyncTasks
28
+ } = param2,
29
+ asyncTasks = [],
30
+ mutators = createMutators({
31
+ asyncTasks,
32
+ can: permissions.can,
33
+ createServerActions,
34
+ environment: "server",
35
+ models,
36
+ authData
37
+ }),
38
+ response = await processor.process(mutators, request);
39
+ if (!skipAsyncTasks && asyncTasks.length) {
40
+ var id = randomId();
41
+ console.info(`[push] complete, running async tasks ${asyncTasks.length} id ${id}`), Promise.all(asyncTasks.map(function (task) {
42
+ return task();
43
+ })).then(function () {
44
+ console.info(`[push] async tasks complete ${id}`);
45
+ }).catch(function (err) {
46
+ console.error("[push] error: async tasks failed \u{1F61E}", err);
47
+ });
48
+ }
49
+ return {
50
+ response,
51
+ asyncTasks
52
+ };
53
+ },
54
+ serverMutate = async function (run, authData) {
55
+ var asyncTasks = [],
56
+ mutators = createMutators({
57
+ models,
58
+ environment: "server",
59
+ asyncTasks,
60
+ authData: {
61
+ id: "",
62
+ email: "admin@start.chat",
63
+ role: "admin",
64
+ ...authData
65
+ },
66
+ createServerActions,
67
+ can: permissions.can
68
+ });
69
+ await serverTransaction(async function (tx) {
70
+ await run(tx, mutators);
71
+ }), await Promise.all(asyncTasks.map(function (t) {
72
+ return t();
73
+ }));
74
+ },
75
+ serverQuery = serverTransaction,
76
+ dummyTransactionInput = {
77
+ clientGroupID: "unused",
78
+ clientID: "unused",
79
+ mutationID: 42,
80
+ upstreamSchema: "unused"
81
+ };
82
+ async function serverTransaction(query) {
83
+ try {
84
+ if (isInZeroMutation()) {
85
+ var {
86
+ tx
87
+ } = context();
88
+ return await query(tx);
89
+ }
90
+ var output = await zeroServerDatabase.transaction(query, dummyTransactionInput);
91
+ return output;
92
+ } catch (err) {
93
+ throw console.error(`Error running serverTransaction(): ${err}`), err;
94
+ }
95
+ }
96
+ return {
97
+ handleMutationRequest,
98
+ transaction: serverTransaction,
99
+ mutate: serverMutate,
100
+ query: serverQuery
101
+ };
102
+ }
103
+ export { createZeroServer };
104
+ //# sourceMappingURL=createZeroServer.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PostgresJSConnection","PushProcessor","ZQLDatabase","assertString","randomId","postgres","createPermissions","context","isInZeroMutation","createMutators","createZeroServer","param","createServerActions","schema","models","dbString","process","env","ZERO_UPSTREAM_DB","zeroServerDatabase","permissions","environment","getContext","processor","handleMutationRequest","param2","authData","request","skipAsyncTasks","asyncTasks","mutators","can","response","length","id","console","info","Promise","all","map","task","then","catch","err","error","serverMutate","run","email","role","serverTransaction","tx","t","serverQuery","dummyTransactionInput","clientGroupID","clientID","mutationID","upstreamSchema","query","output","transaction","mutate"],"sources":["../../src/createZeroServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}