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
@@ -1,29 +1,28 @@
1
- import { createLocalStorage, ensure, EnsureError } from "@vxrn/helpers";
1
+ import { ANYONE_CAN, definePermissions } from "@rocicorp/zero";
2
+ import { ensure, EnsureError, objectEntries } from "@vxrn/helpers";
3
+ import { runWithContext } from "./helpers/context.native.js";
2
4
  import { prettyFormatZeroQuery } from "./helpers/prettyFormatZeroQuery.native.js";
3
- function createPermissions(schema, getContext) {
4
- runEnvironmentSafetyCheck();
5
- var permissionCache = createLocalStorage("permissions-cache", {
6
- storageLimit: 24
7
- });
8
- function where(a, b) {
9
- return b && WhereTableNameMap.set(b, a), b || a;
10
- }
11
- var WhereTableNameMap = /* @__PURE__ */new WeakMap();
12
- function getWhereTableName(where2) {
13
- return WhereTableNameMap.get(where2);
14
- }
15
- var fallbackActions = {
16
- select: "read",
17
- insert: "write",
18
- update: "write",
19
- upsert: "write",
20
- delete: "write"
21
- };
5
+ import { getWhereTableName } from "./where.native.js";
6
+ function createPermissions(param) {
7
+ var {
8
+ environment,
9
+ schema,
10
+ models,
11
+ getContext
12
+ } = param,
13
+ fallbackActions = {
14
+ select: "read",
15
+ insert: "write",
16
+ update: "write",
17
+ upsert: "write",
18
+ delete: "write"
19
+ };
22
20
  function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
23
21
  var tableName = getWhereTableName(permissionWhere);
24
22
  if (!tableName) throw new Error("Must use PermissionWhere for buildPermissionQuery");
25
- var tableSchema = schema.tables[tableName],
26
- primaryKeys = tableSchema.primaryKey,
23
+ var tableSchema = schema.tables[tableName];
24
+ if (!tableSchema) throw new Error("No schema?");
25
+ var primaryKeys = tableSchema.primaryKey,
27
26
  permissionQueryBuilder = permissionWhere(eb, authData),
28
27
  fallbackAction = fallbackActions[action],
29
28
  permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
@@ -51,13 +50,13 @@ function createPermissions(schema, getContext) {
51
50
  }
52
51
  return eb.and(permissionCondition, ...primaryKeyWheres);
53
52
  }
54
- async function can(where2, action, obj) {
53
+ async function can(where, action, obj) {
55
54
  var ctx = getContext(),
56
- tableName = getWhereTableName(where2);
55
+ tableName = getWhereTableName(where);
57
56
  if (!tableName) throw new Error("Must use where('table') style where to pass to can()");
58
- process.env.VITE_ENVIRONMENT === "ssr" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where2, action, obj), ctx.didCanPermissionsRun = !0);
57
+ environment === "server" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where, action, obj), ctx.didCanPermissionsRun = !0);
59
58
  }
60
- async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
59
+ async function ensurePermission(tx, authData, tableName, where, actionIn, obj) {
61
60
  if (authData?.role !== "admin") {
62
61
  var action = String(actionIn),
63
62
  name = `${tableName}.${action}`,
@@ -65,7 +64,7 @@ function createPermissions(schema, getContext) {
65
64
  query = null;
66
65
  try {
67
66
  query = queryBase.where(function (eb) {
68
- return buildPermissionQuery(authData, eb, where2, action, obj);
67
+ return buildPermissionQuery(authData, eb, where, action, obj);
69
68
  }).one(), ensure(await query);
70
69
  } catch (err) {
71
70
  var errorTitle = `${name} with auth id: ${authData?.id}`;
@@ -79,51 +78,38 @@ ${err}`);
79
78
  }
80
79
  }
81
80
  }
82
- function usePermission(table, action, objOrId) {
83
- var enabled = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : typeof objOrId < "u",
84
- debug = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : !1,
85
- keyBase = `${table}${action}`,
86
- key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`,
87
- _permissionCache_get,
88
- cacheVal = (_permissionCache_get = permissionCache.get(key)) !== null && _permissionCache_get !== void 0 ? _permissionCache_get : permissionCache.get(keyBase),
89
- authData = useAuthData(),
90
- permission = modelPermissions[table],
91
- query = function () {
92
- var baseQuery = zero.query[table].one();
93
- return enabled ? baseQuery.where(function (eb) {
94
- return buildPermissionQuery(authData, eb, permission, action, objOrId);
95
- }) : baseQuery;
96
- }(),
97
- [data, status] = useQuery(query, {
98
- enabled: !!(enabled && authData && objOrId)
99
- });
100
- debug && console.info("usePermission()", {
101
- data,
102
- status,
103
- action,
104
- authData,
105
- permission
106
- }, prettyFormatZeroQuery(query));
107
- var result = data,
108
- allowed = !!result;
109
- return objOrId ? allowed : !1;
110
- }
81
+ var readPermissions = definePermissions(schema, async function () {
82
+ var permissionsEntries = await Promise.all(objectEntries(models).map(async function (param2) {
83
+ var [key, model] = param2;
84
+ return await runWithContext({
85
+ authData: {
86
+ id: "",
87
+ role: void 0,
88
+ email: ""
89
+ }
90
+ }, function () {
91
+ return [key, {
92
+ row: {
93
+ select: [function (authData, eb) {
94
+ var out = model.permissions(eb, authData).read;
95
+ return out === !0 ? eb.and() : out === !1 ? eb.cmpLit(!0, "=", !1) : out;
96
+ }],
97
+ // we have permissions on these through our model system with custom mutators:
98
+ insert: ANYONE_CAN,
99
+ update: ANYONE_CAN,
100
+ delete: ANYONE_CAN
101
+ }
102
+ }];
103
+ });
104
+ })),
105
+ permissions = Object.fromEntries(permissionsEntries);
106
+ return permissions;
107
+ });
111
108
  return {
112
- where,
113
109
  can,
114
- usePermission
110
+ buildPermissionQuery,
111
+ readPermissions
115
112
  };
116
113
  }
117
- function runEnvironmentSafetyCheck() {
118
- typeof document < "u" || typeof navigator < "u" && navigator.product === "ReactNative" || process.env.VITE_ENVIRONMENT !== "ssr" && console.error(`\u274C\u274C\u274C\u274C
119
-
120
- ERROR: VITE_ENVIRONMENT is not set to "ssr" on server, which means permissions checks won't run when they should
121
- This is makes Zero entirely insecure and needs to be fixed immediately.
122
-
123
- This is likely a One framework issue, unless the user Vite config is overwriting the value.
124
- One automatically sets this value.
125
-
126
- `);
127
- }
128
114
  export { createPermissions };
129
115
  //# sourceMappingURL=createPermissions.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createLocalStorage","ensure","EnsureError","prettyFormatZeroQuery","createPermissions","schema","getContext","runEnvironmentSafetyCheck","permissionCache","storageLimit","where","a","b","WhereTableNameMap","set","WeakMap","getWhereTableName","where2","get","fallbackActions","select","insert","update","upsert","delete","buildPermissionQuery","authData","eb","permissionWhere","action","objOrId","tableName","Error","tableSchema","tables","primaryKeys","primaryKey","permissionQueryBuilder","fallbackAction","permissionCondition","cmpLit","primaryKeyWheres","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","key","value","push","cmp","err","return","and","can","obj","ctx","process","env","VITE_ENVIRONMENT","ensurePermission","tx","didCanPermissionsRun","actionIn","role","String","name","queryBase","query","one","errorTitle","id","msg","NODE_ENV","usePermission","table","enabled","arguments","length","debug","keyBase","JSON","stringify","_permissionCache_get","cacheVal","useAuthData","permission","modelPermissions","baseQuery","zero","data","status","useQuery","console","info","result","allowed","document","navigator","product","error"],"sources":["../../src/createPermissions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ANYONE_CAN","definePermissions","ensure","EnsureError","objectEntries","runWithContext","prettyFormatZeroQuery","getWhereTableName","createPermissions","param","environment","schema","models","getContext","fallbackActions","select","insert","update","upsert","delete","buildPermissionQuery","authData","eb","permissionWhere","action","objOrId","tableName","Error","tableSchema","tables","primaryKeys","primaryKey","permissionQueryBuilder","fallbackAction","permissionCondition","cmpLit","primaryKeyWheres","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","key","value","push","cmp","err","return","and","can","where","obj","ctx","ensurePermission","tx","didCanPermissionsRun","actionIn","role","String","name","queryBase","query","one","errorTitle","id","msg","process","env","NODE_ENV","readPermissions","permissionsEntries","Promise","all","map","param2","model","email","row","out","permissions","read","Object","fromEntries"],"sources":["../../src/createPermissions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,99 @@
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 createZero({
11
+ schema,
12
+ models,
13
+ disable
14
+ }) {
15
+ const modelPermissions = mapObject(models, (val) => val.permissions), permissionsHelpers = createPermissions({
16
+ schema,
17
+ models,
18
+ getContext: context,
19
+ environment: "client"
20
+ }), permissionCache = createLocalStorage("permissions-cache", {
21
+ storageLimit: 24
22
+ }), zeroEvents = createEmitter("zero", null), AuthDataContext = createContext({}), useAuthData = () => use(AuthDataContext);
23
+ function usePermission(table, action, objOrId, enabled = typeof objOrId < "u", debug = !1) {
24
+ 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 = (() => {
25
+ let baseQuery = zero.query[table].one();
26
+ return enabled ? baseQuery.where((eb) => permissionsHelpers.buildPermissionQuery(
27
+ authData,
28
+ eb,
29
+ permission,
30
+ action,
31
+ objOrId
32
+ )) : baseQuery;
33
+ })(), [data, status] = useQuery(query, {
34
+ enabled: !!(enabled && authData && objOrId)
35
+ });
36
+ debug && console.info(
37
+ "usePermission()",
38
+ { data, status, action, authData, permission },
39
+ prettyFormatZeroQuery(query)
40
+ );
41
+ const allowed = !!data;
42
+ return objOrId ? allowed : !1;
43
+ }
44
+ let latestZeroInstance = null;
45
+ const zero = new Proxy({}, {
46
+ get(_, key) {
47
+ return Reflect.get(latestZeroInstance, key, latestZeroInstance);
48
+ }
49
+ }), useQuery = (query, options) => {
50
+ if (disable)
51
+ return [null, { type: "unknown" }];
52
+ const out = zeroUseQuery(query, options);
53
+ return process.env.NODE_ENV === "development" && useZeroDebug(query, options, out), out;
54
+ }, ProvideZero = ({
55
+ children,
56
+ authData,
57
+ ...props
58
+ }) => {
59
+ const mutators = useMemo(() => createMutators({
60
+ models,
61
+ environment: "client",
62
+ authData,
63
+ can: permissionsHelpers.can
64
+ }), [models, authData]);
65
+ return disable ? children : /* @__PURE__ */ jsx(AuthDataContext.Provider, { value: authData, children: /* @__PURE__ */ jsxs(
66
+ ZeroProvider,
67
+ {
68
+ schema,
69
+ kvStore: "mem",
70
+ onError: (error) => {
71
+ console.error("Zero Error:", error), zeroEvents.emit({
72
+ type: "error",
73
+ message: error
74
+ });
75
+ },
76
+ mutators,
77
+ ...props,
78
+ children: [
79
+ /* @__PURE__ */ jsx(SetZeroInstance, {}),
80
+ children
81
+ ]
82
+ }
83
+ ) });
84
+ }, SetZeroInstance = () => {
85
+ const zero2 = useZero();
86
+ return zero2 !== latestZeroInstance && (latestZeroInstance = zero2), null;
87
+ };
88
+ return {
89
+ zeroEvents,
90
+ ProvideZero,
91
+ useQuery,
92
+ usePermission,
93
+ zero
94
+ };
95
+ }
96
+ export {
97
+ createZero
98
+ };
99
+ //# sourceMappingURL=createZero.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createZero.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 createZero({
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 { createZero };
105
+ //# sourceMappingURL=createZero.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","createZero","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/createZero.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 createZero(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 { createZero };
119
+ //# sourceMappingURL=createZero.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","createZero","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/createZero.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}