on-zero 0.2.10 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli.cjs +0 -0
- package/dist/cjs/cli.native.js +0 -0
- package/dist/cjs/createPermissions.native.js.map +1 -1
- package/dist/cjs/createSchemaFromDrizzle.cjs +30 -0
- package/dist/cjs/createSchemaFromDrizzle.native.js +33 -0
- package/dist/cjs/createSchemaFromDrizzle.native.js.map +1 -0
- package/dist/cjs/createUseQuery.cjs +1 -1
- package/dist/cjs/createUseQuery.native.js +1 -1
- package/dist/cjs/createZeroClient.cjs +1 -1
- package/dist/cjs/createZeroClient.native.js +1 -1
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroServer.native.js.map +1 -1
- package/dist/cjs/generate.cjs +64 -12
- package/dist/cjs/generate.native.js +114 -12
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -1
- package/dist/cjs/index.native.js +1 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/mutations.cjs +1 -1
- package/dist/cjs/mutations.native.js +1 -1
- package/dist/cjs/mutations.native.js.map +1 -1
- package/dist/cjs/server.native.js +1 -18
- package/dist/cjs/server.native.js.map +1 -1
- package/dist/cjs/vite-plugin.cjs +1 -1
- package/dist/cjs/vite-plugin.native.js +1 -1
- package/dist/cjs/vite-plugin.native.js.map +1 -1
- package/dist/esm/cli.mjs +0 -0
- package/dist/esm/cli.native.js +0 -0
- package/dist/esm/createPermissions.mjs.map +1 -1
- package/dist/esm/createPermissions.native.js.map +1 -1
- package/dist/esm/createSchemaFromDrizzle.mjs +5 -0
- package/dist/esm/createSchemaFromDrizzle.mjs.map +1 -0
- package/dist/esm/createSchemaFromDrizzle.native.js +5 -0
- package/dist/esm/createSchemaFromDrizzle.native.js.map +1 -0
- package/dist/esm/createUseQuery.mjs +2 -2
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +2 -2
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +2 -2
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +2 -2
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroServer.mjs.map +1 -1
- package/dist/esm/createZeroServer.native.js.map +1 -1
- package/dist/esm/generate.mjs +64 -13
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +114 -13
- package/dist/esm/generate.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.native.js.map +1 -1
- package/dist/esm/index.js +19 -24
- package/dist/esm/index.js.map +1 -6
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +1 -0
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/mutations.mjs +1 -1
- package/dist/esm/mutations.mjs.map +1 -1
- package/dist/esm/mutations.native.js +1 -1
- package/dist/esm/mutations.native.js.map +1 -1
- package/dist/esm/server.native.js +1 -1
- package/dist/esm/server.native.js.map +1 -1
- package/dist/esm/vite-plugin.mjs +1 -1
- package/dist/esm/vite-plugin.mjs.map +1 -1
- package/dist/esm/vite-plugin.native.js +1 -1
- package/dist/esm/vite-plugin.native.js.map +1 -1
- package/package.json +10 -4
- package/readme.md +80 -54
- package/src/createPermissions.ts +4 -9
- package/src/createSchemaFromDrizzle.ts +3 -0
- package/src/createUseQuery.tsx +4 -4
- package/src/createZeroClient.tsx +14 -14
- package/src/createZeroServer.ts +12 -12
- package/src/generate.test.ts +32 -32
- package/src/generate.ts +208 -55
- package/src/helpers/batchQuery.ts +1 -1
- package/src/helpers/createMutators.ts +7 -6
- package/src/helpers/didRunPermissionCheck.ts +1 -1
- package/src/helpers/mutatorContext.ts +2 -2
- package/src/helpers/prettyFormatZeroQuery.ts +1 -1
- package/src/helpers/queryContext.ts +1 -1
- package/src/helpers/useZeroDebug.ts +2 -2
- package/src/index.ts +2 -0
- package/src/mutations.ts +33 -7
- package/src/queryRegistry.ts +1 -1
- package/src/resolveQuery.ts +3 -3
- package/src/run.ts +5 -5
- package/src/server.native.ts +3 -0
- package/src/serverWhere.ts +2 -2
- package/src/types.ts +4 -2
- package/src/vite-plugin.ts +2 -2
- package/src/where.ts +5 -5
- package/src/zeroRunner.ts +2 -2
- package/types/createPermissions.d.ts +1 -1
- package/types/createPermissions.d.ts.map +1 -1
- package/types/createSchemaFromDrizzle.d.ts +4 -0
- package/types/createSchemaFromDrizzle.d.ts.map +1 -0
- package/types/createUseQuery.d.ts.map +1 -1
- package/types/createZeroServer.d.ts +11 -11
- package/types/generate.d.ts +29 -0
- package/types/generate.d.ts.map +1 -1
- package/types/helpers/createMutators.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/mutations.d.ts +4 -1
- package/types/mutations.d.ts.map +1 -1
- package/types/resolveQuery.d.ts +1 -1
- package/types/resolveQuery.d.ts.map +1 -1
- package/types/server.native.d.ts +1 -0
- package/types/server.native.d.ts.map +1 -0
- package/types/types.d.ts.map +1 -1
- package/dist/cjs/cli.js +0 -42
- package/dist/cjs/cli.js.map +0 -6
- package/dist/cjs/constants.js +0 -23
- package/dist/cjs/constants.js.map +0 -6
- package/dist/cjs/createPermissions.js +0 -92
- package/dist/cjs/createPermissions.js.map +0 -6
- package/dist/cjs/createUseQuery.js +0 -35
- package/dist/cjs/createUseQuery.js.map +0 -6
- package/dist/cjs/createZeroClient.js +0 -178
- package/dist/cjs/createZeroClient.js.map +0 -6
- package/dist/cjs/createZeroServer.js +0 -189
- package/dist/cjs/createZeroServer.js.map +0 -6
- package/dist/cjs/generate.js +0 -811
- package/dist/cjs/generate.js.map +0 -6
- package/dist/cjs/generate.test.js +0 -404
- package/dist/cjs/generate.test.js.map +0 -6
- package/dist/cjs/helpers/batchQuery.js +0 -41
- package/dist/cjs/helpers/batchQuery.js.map +0 -6
- package/dist/cjs/helpers/createMutators.js +0 -118
- package/dist/cjs/helpers/createMutators.js.map +0 -6
- package/dist/cjs/helpers/didRunPermissionCheck.js +0 -26
- package/dist/cjs/helpers/didRunPermissionCheck.js.map +0 -6
- package/dist/cjs/helpers/ensureLoggedIn.js +0 -25
- package/dist/cjs/helpers/ensureLoggedIn.js.map +0 -6
- package/dist/cjs/helpers/getAuth.js +0 -31
- package/dist/cjs/helpers/getAuth.js.map +0 -6
- package/dist/cjs/helpers/mutatorContext.js +0 -44
- package/dist/cjs/helpers/mutatorContext.js.map +0 -6
- package/dist/cjs/helpers/prettyFormatZeroQuery.js +0 -92
- package/dist/cjs/helpers/prettyFormatZeroQuery.js.map +0 -6
- package/dist/cjs/helpers/queryContext.js +0 -33
- package/dist/cjs/helpers/queryContext.js.map +0 -6
- package/dist/cjs/helpers/useZeroDebug.js +0 -49
- package/dist/cjs/helpers/useZeroDebug.js.map +0 -6
- package/dist/cjs/index.js +0 -40
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/modelRegistry.js +0 -32
- package/dist/cjs/modelRegistry.js.map +0 -6
- package/dist/cjs/mutations.js +0 -70
- package/dist/cjs/mutations.js.map +0 -6
- package/dist/cjs/queryRegistry.js +0 -32
- package/dist/cjs/queryRegistry.js.map +0 -6
- package/dist/cjs/resolveQuery.js +0 -40
- package/dist/cjs/resolveQuery.js.map +0 -6
- package/dist/cjs/run.js +0 -42
- package/dist/cjs/run.js.map +0 -6
- package/dist/cjs/server.js +0 -15
- package/dist/cjs/server.js.map +0 -6
- package/dist/cjs/serverWhere.js +0 -24
- package/dist/cjs/serverWhere.js.map +0 -6
- package/dist/cjs/serverWhere.test.js +0 -52
- package/dist/cjs/serverWhere.test.js.map +0 -6
- package/dist/cjs/state.js +0 -48
- package/dist/cjs/state.js.map +0 -6
- package/dist/cjs/types.js +0 -14
- package/dist/cjs/types.js.map +0 -6
- package/dist/cjs/usePermission.test.js +0 -29
- package/dist/cjs/usePermission.test.js.map +0 -6
- package/dist/cjs/vite-plugin.js +0 -89
- package/dist/cjs/vite-plugin.js.map +0 -6
- package/dist/cjs/where.js +0 -50
- package/dist/cjs/where.js.map +0 -6
- package/dist/cjs/zeroRunner.js +0 -35
- package/dist/cjs/zeroRunner.js.map +0 -6
- package/dist/cjs/zql.js +0 -26
- package/dist/cjs/zql.js.map +0 -6
- package/dist/esm/cli.js +0 -44
- package/dist/esm/cli.js.map +0 -6
- package/dist/esm/constants.js +0 -7
- package/dist/esm/constants.js.map +0 -6
- package/dist/esm/createPermissions.js +0 -81
- package/dist/esm/createPermissions.js.map +0 -6
- package/dist/esm/createUseQuery.js +0 -22
- package/dist/esm/createUseQuery.js.map +0 -6
- package/dist/esm/createZeroClient.js +0 -185
- package/dist/esm/createZeroClient.js.map +0 -6
- package/dist/esm/createZeroServer.js +0 -192
- package/dist/esm/createZeroServer.js.map +0 -6
- package/dist/esm/generate.js +0 -789
- package/dist/esm/generate.js.map +0 -6
- package/dist/esm/generate.test.js +0 -408
- package/dist/esm/generate.test.js.map +0 -6
- package/dist/esm/helpers/batchQuery.js +0 -25
- package/dist/esm/helpers/batchQuery.js.map +0 -6
- package/dist/esm/helpers/createMutators.js +0 -96
- package/dist/esm/helpers/createMutators.js.map +0 -6
- package/dist/esm/helpers/didRunPermissionCheck.js +0 -10
- package/dist/esm/helpers/didRunPermissionCheck.js.map +0 -6
- package/dist/esm/helpers/ensureLoggedIn.js +0 -10
- package/dist/esm/helpers/ensureLoggedIn.js.map +0 -6
- package/dist/esm/helpers/getAuth.js +0 -17
- package/dist/esm/helpers/getAuth.js.map +0 -6
- package/dist/esm/helpers/mutatorContext.js +0 -28
- package/dist/esm/helpers/mutatorContext.js.map +0 -6
- package/dist/esm/helpers/prettyFormatZeroQuery.js +0 -76
- package/dist/esm/helpers/prettyFormatZeroQuery.js.map +0 -6
- package/dist/esm/helpers/queryContext.js +0 -17
- package/dist/esm/helpers/queryContext.js.map +0 -6
- package/dist/esm/helpers/useZeroDebug.js +0 -35
- package/dist/esm/helpers/useZeroDebug.js.map +0 -6
- package/dist/esm/modelRegistry.js +0 -16
- package/dist/esm/modelRegistry.js.map +0 -6
- package/dist/esm/mutations.js +0 -56
- package/dist/esm/mutations.js.map +0 -6
- package/dist/esm/queryRegistry.js +0 -16
- package/dist/esm/queryRegistry.js.map +0 -6
- package/dist/esm/resolveQuery.js +0 -24
- package/dist/esm/resolveQuery.js.map +0 -6
- package/dist/esm/run.js +0 -27
- package/dist/esm/run.js.map +0 -6
- package/dist/esm/server.js +0 -2
- package/dist/esm/server.js.map +0 -6
- package/dist/esm/serverWhere.js +0 -8
- package/dist/esm/serverWhere.js.map +0 -6
- package/dist/esm/serverWhere.test.js +0 -55
- package/dist/esm/serverWhere.test.js.map +0 -6
- package/dist/esm/state.js +0 -33
- package/dist/esm/state.js.map +0 -6
- package/dist/esm/types.js +0 -1
- package/dist/esm/types.js.map +0 -6
- package/dist/esm/usePermission.test.js +0 -33
- package/dist/esm/usePermission.test.js.map +0 -6
- package/dist/esm/vite-plugin.js +0 -74
- package/dist/esm/vite-plugin.js.map +0 -6
- package/dist/esm/where.js +0 -36
- package/dist/esm/where.js.map +0 -6
- package/dist/esm/zeroRunner.js +0 -19
- package/dist/esm/zeroRunner.js.map +0 -6
- package/dist/esm/zql.js +0 -10
- package/dist/esm/zql.js.map +0 -6
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: !0 });
|
|
8
|
-
}, __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from == "object" || typeof from == "function")
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
|
15
|
-
var createPermissions_exports = {};
|
|
16
|
-
__export(createPermissions_exports, {
|
|
17
|
-
PermissionError: () => PermissionError,
|
|
18
|
-
createPermissions: () => createPermissions
|
|
19
|
-
});
|
|
20
|
-
module.exports = __toCommonJS(createPermissions_exports);
|
|
21
|
-
var import_helpers = require("@take-out/helpers"), import_didRunPermissionCheck = require("./helpers/didRunPermissionCheck"), import_mutatorContext = require("./helpers/mutatorContext"), import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery"), import_state = require("./state"), import_where = require("./where");
|
|
22
|
-
class PermissionError extends Error {
|
|
23
|
-
constructor(message) {
|
|
24
|
-
super(message), this.name = "PermissionError";
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function createPermissions({
|
|
28
|
-
environment,
|
|
29
|
-
schema,
|
|
30
|
-
adminRoleMode = "all"
|
|
31
|
-
}) {
|
|
32
|
-
function buildPermissionQuery(authData, eb, permissionWhere, objOrId, tableNameOverride) {
|
|
33
|
-
if ((adminRoleMode === "all" || adminRoleMode === "queries") && authData?.role === "admin")
|
|
34
|
-
return eb.cmpLit(!0, "=", !0);
|
|
35
|
-
const tableName = tableNameOverride || (0, import_where.getWhereTableName)(permissionWhere);
|
|
36
|
-
if (!tableName)
|
|
37
|
-
throw new Error("Must use PermissionWhere for buildPermissionQuery");
|
|
38
|
-
const tableSchema = schema.tables[tableName];
|
|
39
|
-
if (!tableSchema)
|
|
40
|
-
throw new Error("No schema?");
|
|
41
|
-
const primaryKeys = tableSchema.primaryKey;
|
|
42
|
-
let permissionReturn;
|
|
43
|
-
try {
|
|
44
|
-
permissionReturn = permissionWhere(eb, authData);
|
|
45
|
-
} catch (err) {
|
|
46
|
-
return process.env.NODE_ENV === "development" && err?.name !== "EnsureError" && console.warn(`[permission] ${tableName} threw:`, err), eb.cmpLit(!0, "=", !1);
|
|
47
|
-
}
|
|
48
|
-
if (permissionReturn == null)
|
|
49
|
-
throw new Error(`No permission defined for ${tableName}`);
|
|
50
|
-
if (permissionReturn === !0)
|
|
51
|
-
return eb.cmpLit(!0, "=", !0);
|
|
52
|
-
if (permissionReturn === !1)
|
|
53
|
-
return eb.cmpLit(!0, "=", !1);
|
|
54
|
-
const primaryKeyWheres = [];
|
|
55
|
-
for (const key of primaryKeys) {
|
|
56
|
-
const value = typeof objOrId == "string" ? objOrId : objOrId[key];
|
|
57
|
-
primaryKeyWheres.push(eb.cmp(key, value));
|
|
58
|
-
}
|
|
59
|
-
return eb.and(permissionReturn, ...primaryKeyWheres);
|
|
60
|
-
}
|
|
61
|
-
const can = async (where, obj) => {
|
|
62
|
-
if (environment === "server") {
|
|
63
|
-
const ctx = (0, import_mutatorContext.mutatorContext)(), tableName = (0, import_where.getWhereTableName)(where);
|
|
64
|
-
if (!tableName)
|
|
65
|
-
throw new Error("Must use where('table') style where to pass to can()");
|
|
66
|
-
await ensurePermission(ctx.tx, ctx.authData, tableName, where, obj), (0, import_didRunPermissionCheck.setDidRunPermissionCheck)(ctx);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
async function ensurePermission(tx, authData, tableName, where, obj) {
|
|
70
|
-
if ((adminRoleMode === "all" || adminRoleMode === "mutations") && authData?.role === "admin")
|
|
71
|
-
return;
|
|
72
|
-
const queryBase = (0, import_state.getZQL)()[tableName];
|
|
73
|
-
let query = null;
|
|
74
|
-
try {
|
|
75
|
-
query = queryBase.where((eb) => buildPermissionQuery(authData, eb, where, obj)).one(), (0, import_helpers.ensure)(await tx.run(query));
|
|
76
|
-
} catch (err) {
|
|
77
|
-
const errorTitle = `${tableName} with auth id: ${authData?.id}`;
|
|
78
|
-
if (err?.name === "EnsureError") {
|
|
79
|
-
let msg = `[permission] \u{1F6AB} Not Allowed: ${errorTitle}`;
|
|
80
|
-
throw process.env.NODE_ENV === "development" && query && (msg += `
|
|
81
|
-
${(0, import_prettyFormatZeroQuery.prettyFormatZeroQuery)(query)}`), new PermissionError(msg);
|
|
82
|
-
}
|
|
83
|
-
throw new Error(`Error running permission ${errorTitle}
|
|
84
|
-
${err}`);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return {
|
|
88
|
-
can,
|
|
89
|
-
buildPermissionQuery
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=createPermissions.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/createPermissions.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAuB,8BAEvB,+BAAyC,4CACzC,wBAA+B,qCAC/B,+BAAsC,4CACtC,eAAuB,oBACvB,eAAkC;AAU3B,MAAM,wBAAwB,MAAM;AAAA,EACzC,YAAY,SAAiB;AAC3B,UAAM,OAAO,GACb,KAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,kBAA6C;AAAA,EAC3D;AAAA,EACA;AAAA,EACA,gBAAgB;AAClB,GAIG;AAQD,WAAS,qBACP,UACA,IACA,iBAEA,SACA,mBACA;AAGA,SAD2B,kBAAkB,SAAS,kBAAkB,cAC9C,UAAU,SAAS;AAC3C,aAAO,GAAG,OAAO,IAAM,KAAK,EAAI;AAGlC,UAAM,YAAY,yBAAqB,gCAAkB,eAAe;AAExE,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,mDAAmD;AAGrE,UAAM,cAAc,OAAO,OAAO,SAAS;AAE3C,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,YAAY;AAG9B,UAAM,cAAc,YAAY;AAEhC,QAAI;AACJ,QAAI;AACF,yBAAmB,gBAAgB,IAAI,QAAQ;AAAA,IACjD,SAAS,KAAK;AAGZ,aACE,QAAQ,IAAI,aAAa,iBACxB,KAAa,SAAS,iBAEvB,QAAQ,KAAK,gBAAgB,SAAS,WAAW,GAAG,GAE/C,GAAG,OAAO,IAAM,KAAK,EAAK;AAAA,IACnC;AAEA,QAAI,oBAAoB;AACtB,YAAM,IAAI,MAAM,6BAA6B,SAAS,EAAE;AAG1D,QAAI,qBAAqB;AACvB,aAAO,GAAG,OAAO,IAAM,KAAK,EAAI;AAGlC,QAAI,qBAAqB;AACvB,aAAO,GAAG,OAAO,IAAM,KAAK,EAAK;AAGnC,UAAM,mBAAgC,CAAC;AAEvC,eAAW,OAAO,aAAa;AAC7B,YAAM,QAAQ,OAAO,WAAY,WAAW,UAAU,QAAQ,GAAG;AACjE,uBAAiB,KAAK,GAAG,IAAI,KAAY,KAAK,CAAC;AAAA,IACjD;AAEA,WAAO,GAAG,IAAI,kBAAkB,GAAG,gBAAgB;AAAA,EACrD;AAEA,QAAM,MAAW,OAAO,OAAO,QAAQ;AAErC,QAAI,gBAAgB,UAAU;AAC5B,YAAM,UAAM,sCAAe,GACrB,gBAAY,gCAAkB,KAAK;AACzC,UAAI,CAAC;AACH,cAAM,IAAI,MAAM,sDAAsD;AAExE,YAAM,iBAAiB,IAAI,IAAI,IAAI,UAAU,WAAW,OAAO,GAAG,OAClE,uDAAyB,GAAG;AAAA,IAC9B;AAAA,EACF;AAEA,iBAAe,iBACb,IACA,UACA,WACA,OACA,KACe;AAGf,SAD6B,kBAAkB,SAAS,kBAAkB,gBAC9C,UAAU,SAAS;AAC7C;AAIF,UAAM,gBADa,qBAAO,EACG,SAAS;AACtC,QAAI,QAAqC;AAEzC,QAAI;AACF,cAAQ,UACL,MAAM,CAAC,OACC,qBAAqB,UAAU,IAAI,OAAO,GAAG,CACrD,EACA,IAAI,OAEP,uBAAO,MAAM,GAAG,IAAI,KAAK,CAAC;AAAA,IAC5B,SAAS,KAAK;AACZ,YAAM,aAAa,GAAG,SAAS,kBAAkB,UAAU,EAAE;AAE7D,UAAK,KAAa,SAAS,eAAe;AACxC,YAAI,MAAM,uCAAgC,UAAU;AACpD,cAAI,QAAQ,IAAI,aAAa,iBAAiB,UAC5C,OAAO;AAAA,OAAM,oDAAsB,KAAK,CAAC,KAErC,IAAI,gBAAgB,GAAG;AAAA,MAC/B;AAEA,YAAM,IAAI,MAAM,4BAA4B,UAAU;AAAA,EAAK,GAAG,EAAE;AAAA,IAClE;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: !0 });
|
|
8
|
-
}, __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from == "object" || typeof from == "function")
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
|
15
|
-
var createUseQuery_exports = {};
|
|
16
|
-
__export(createUseQuery_exports, {
|
|
17
|
-
createUseQuery: () => createUseQuery
|
|
18
|
-
});
|
|
19
|
-
module.exports = __toCommonJS(createUseQuery_exports);
|
|
20
|
-
var import_react = require("@rocicorp/zero/react"), import_react2 = require("react"), import_useZeroDebug = require("./helpers/useZeroDebug"), import_resolveQuery = require("./resolveQuery");
|
|
21
|
-
const EMPTY_RESPONSE = [null, { type: "unknown" }];
|
|
22
|
-
function createUseQuery({
|
|
23
|
-
DisabledContext,
|
|
24
|
-
customQueries
|
|
25
|
-
}) {
|
|
26
|
-
function useQuery(...args) {
|
|
27
|
-
const disableMode = (0, import_react2.use)(DisabledContext), lastRef = (0, import_react2.useRef)(EMPTY_RESPONSE), [fn, paramsOrOptions, optionsArg] = args, { queryRequest, options } = (0, import_react2.useMemo)(() => {
|
|
28
|
-
const hasParams = optionsArg !== void 0 || paramsOrOptions && typeof paramsOrOptions == "object" && !("enabled" in paramsOrOptions) && !("ttl" in paramsOrOptions), params = hasParams ? paramsOrOptions : void 0, opts = hasParams ? optionsArg : paramsOrOptions;
|
|
29
|
-
return { queryRequest: (0, import_resolveQuery.resolveQuery)({ customQueries, fn, params }), options: opts };
|
|
30
|
-
}, [fn, paramsOrOptions, optionsArg]), out = (0, import_react.useQuery)(queryRequest, options);
|
|
31
|
-
return process.env.NODE_ENV === "development" && process.env.DEBUG_ZERO_QUERIES === "1" && (0, import_useZeroDebug.useZeroDebug)(queryRequest, options, out), disableMode ? disableMode === "last-value" ? lastRef.current : EMPTY_RESPONSE : (lastRef.current = out, out);
|
|
32
|
-
}
|
|
33
|
-
return useQuery;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=createUseQuery.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/createUseQuery.tsx"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyC,iCACzCA,gBAAmD,kBAEnD,sBAA6B,mCAC7B,sBAAgD;AAqChD,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC;AAE1C,SAAS,eAA0C;AAAA,EACxD;AAAA,EACA;AACF,GAGyB;AACvB,WAAS,YAAY,MAAkB;AACrC,UAAM,kBAAc,mBAAI,eAAe,GACjC,cAAU,sBAAY,cAAc,GACpC,CAAC,IAAI,iBAAiB,UAAU,IAAI,MAEpC,EAAE,cAAc,QAAQ,QAAI,uBAAQ,MAAM;AAE9C,YAAM,YACJ,eAAe,UACd,mBACC,OAAO,mBAAoB,YAC3B,EAAE,aAAa,oBACf,EAAE,SAAS,kBAET,SAAS,YAAY,kBAAkB,QACvC,OAAO,YAAY,aAAa;AAItC,aAAO,EAAE,kBAFY,kCAAa,EAAE,eAAe,IAAI,OAAO,CAAC,GAExC,SAAS,KAAK;AAAA,IACvC,GAAG,CAAC,IAAI,iBAAiB,UAAU,CAAC,GAE9B,UAAM,aAAAC,UAAa,cAAc,OAAO;AAQ9C,WANI,QAAQ,IAAI,aAAa,iBACvB,QAAQ,IAAI,uBAAuB,WAErC,kCAAa,cAAc,SAAS,GAAG,GAGtC,cAKD,gBAAgB,eACX,QAAQ,UAGV,kBARL,QAAQ,UAAU,KACX;AAAA,EAQX;AAEA,SAAO;AACT;",
|
|
5
|
-
"names": ["import_react", "zeroUseQuery"]
|
|
6
|
-
}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: !0 });
|
|
8
|
-
}, __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from == "object" || typeof from == "function")
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
|
15
|
-
var createZeroClient_exports = {};
|
|
16
|
-
__export(createZeroClient_exports, {
|
|
17
|
-
createZeroClient: () => createZeroClient
|
|
18
|
-
});
|
|
19
|
-
module.exports = __toCommonJS(createZeroClient_exports);
|
|
20
|
-
var import_zero = require("@rocicorp/zero"), import_react = require("@rocicorp/zero/react"), import_helpers = require("@take-out/helpers"), import_react2 = require("react"), import_createPermissions = require("./createPermissions"), import_createUseQuery = require("./createUseQuery"), import_createMutators = require("./helpers/createMutators"), import_getAuth = require("./helpers/getAuth"), import_modelRegistry = require("./modelRegistry"), import_queryRegistry = require("./queryRegistry"), import_resolveQuery = require("./resolveQuery"), import_run = require("./run"), import_state = require("./state"), import_where = require("./where"), import_zeroRunner = require("./zeroRunner"), import_zql = require("./zql"), import_jsx_runtime = require("react/jsx-runtime");
|
|
21
|
-
function createZeroClient({
|
|
22
|
-
schema,
|
|
23
|
-
models,
|
|
24
|
-
groupedQueries,
|
|
25
|
-
permissionStrategy = "optimistic"
|
|
26
|
-
}) {
|
|
27
|
-
(0, import_state.setSchema)(schema), (0, import_state.getEnvironment)() === null && (0, import_state.setEnvironment)("client");
|
|
28
|
-
const permissionsHelpers = (0, import_createPermissions.createPermissions)({
|
|
29
|
-
schema,
|
|
30
|
-
environment: "client"
|
|
31
|
-
}), wrappedNamespaces = {};
|
|
32
|
-
for (const [namespace, queries] of Object.entries(groupedQueries)) {
|
|
33
|
-
wrappedNamespaces[namespace] = {};
|
|
34
|
-
for (const [name, fn] of Object.entries(queries))
|
|
35
|
-
(0, import_queryRegistry.registerQuery)(fn, `${namespace}.${name}`), wrappedNamespaces[namespace][name] = (0, import_zero.defineQuery)(
|
|
36
|
-
({ args }) => fn(args)
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
const permissionCheckFns = {}, createPermissionCheckFn = (table) => {
|
|
40
|
-
const fn = (args) => {
|
|
41
|
-
const perm = (0, import_modelRegistry.getMutationsPermissions)(table), base = import_zql.zql[table];
|
|
42
|
-
if (!args.objOrId)
|
|
43
|
-
return base.where((eb) => eb.cmpLit(!0, "=", !1)).one();
|
|
44
|
-
if (permissionStrategy === "optimistic") {
|
|
45
|
-
const rawPerm = perm && ((0, import_where.getRawWhere)(perm) || perm);
|
|
46
|
-
return base.where((eb) => {
|
|
47
|
-
(0, import_where.setEvaluatingPermission)(!0);
|
|
48
|
-
try {
|
|
49
|
-
return permissionsHelpers.buildPermissionQuery(
|
|
50
|
-
(0, import_getAuth.getAuth)(),
|
|
51
|
-
eb,
|
|
52
|
-
rawPerm || ((e) => e.and()),
|
|
53
|
-
args.objOrId,
|
|
54
|
-
table
|
|
55
|
-
);
|
|
56
|
-
} finally {
|
|
57
|
-
(0, import_where.setEvaluatingPermission)(!1);
|
|
58
|
-
}
|
|
59
|
-
}).one();
|
|
60
|
-
}
|
|
61
|
-
return permissionStrategy === "optimistic-deny" ? base.where((eb) => eb.cmpLit(!0, "=", !1)).one() : base.where((eb) => permissionsHelpers.buildPermissionQuery(
|
|
62
|
-
(0, import_getAuth.getAuth)(),
|
|
63
|
-
eb,
|
|
64
|
-
perm || ((e) => e.and()),
|
|
65
|
-
args.objOrId,
|
|
66
|
-
table
|
|
67
|
-
)).one();
|
|
68
|
-
};
|
|
69
|
-
return permissionCheckFns[table] = fn, (0, import_queryRegistry.registerQuery)(fn, `permission.${table}`), fn;
|
|
70
|
-
};
|
|
71
|
-
wrappedNamespaces.permission = {};
|
|
72
|
-
for (const [table] of (0, import_modelRegistry.getAllMutationsPermissions)()) {
|
|
73
|
-
const fn = createPermissionCheckFn(table);
|
|
74
|
-
wrappedNamespaces.permission[table] = (0, import_zero.defineQuery)(({ args }) => fn(args));
|
|
75
|
-
}
|
|
76
|
-
const customQueries = (0, import_zero.defineQueries)(wrappedNamespaces);
|
|
77
|
-
(0, import_run.setCustomQueries)(customQueries);
|
|
78
|
-
const DisabledContext = (0, import_react2.createContext)(!1);
|
|
79
|
-
let latestZeroInstance = null;
|
|
80
|
-
const zero = new Proxy({}, {
|
|
81
|
-
get(_, key) {
|
|
82
|
-
if (latestZeroInstance === null)
|
|
83
|
-
throw new Error(
|
|
84
|
-
"Zero instance not initialized. Ensure ZeroProvider is mounted before accessing 'zero'."
|
|
85
|
-
);
|
|
86
|
-
return Reflect.get(latestZeroInstance, key, latestZeroInstance);
|
|
87
|
-
}
|
|
88
|
-
}), zeroEvents = (0, import_helpers.createEmitter)("zero", null), AuthDataContext = (0, import_react2.createContext)({}), useQuery = (0, import_createUseQuery.createUseQuery)({
|
|
89
|
-
DisabledContext,
|
|
90
|
-
customQueries
|
|
91
|
-
});
|
|
92
|
-
function usePermission(table, objOrId, enabled = typeof objOrId < "u", debug = !1) {
|
|
93
|
-
const disableMode = (0, import_react2.use)(DisabledContext), lastRef = (0, import_react2.useRef)(null), checkFn = permissionCheckFns[table], _uid = (0, import_getAuth.getAuth)()?.id || "anon", [data, status] = useQuery(
|
|
94
|
-
checkFn,
|
|
95
|
-
{ objOrId, _uid },
|
|
96
|
-
{ enabled: !!(!disableMode && enabled && objOrId && checkFn) }
|
|
97
|
-
);
|
|
98
|
-
if (debug && console.info("usePermission()", { table, objOrId, data, status }), !objOrId) return !1;
|
|
99
|
-
const result = status.type === "unknown" ? null : !!data;
|
|
100
|
-
return disableMode ? disableMode === "last-value" ? lastRef.current : null : (lastRef.current = result, result);
|
|
101
|
-
}
|
|
102
|
-
const ProvideZero = ({
|
|
103
|
-
children,
|
|
104
|
-
authData: authDataIn,
|
|
105
|
-
disable,
|
|
106
|
-
...props
|
|
107
|
-
}) => {
|
|
108
|
-
const authData = authDataIn ?? null;
|
|
109
|
-
(0, import_state.setAuthData)(authData);
|
|
110
|
-
const mutators = (0, import_react2.useMemo)(() => (0, import_createMutators.createMutators)({
|
|
111
|
-
models,
|
|
112
|
-
environment: "client",
|
|
113
|
-
authData,
|
|
114
|
-
can: permissionsHelpers.can
|
|
115
|
-
}), [authData]);
|
|
116
|
-
return disable ? children : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthDataContext.Provider, { value: authData, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
117
|
-
import_react.ZeroProvider,
|
|
118
|
-
{
|
|
119
|
-
schema,
|
|
120
|
-
kvStore: "mem",
|
|
121
|
-
mutators,
|
|
122
|
-
...props,
|
|
123
|
-
children: [
|
|
124
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SetZeroInstance, {}),
|
|
125
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConnectionMonitor, { zeroEvents }),
|
|
126
|
-
children
|
|
127
|
-
]
|
|
128
|
-
}
|
|
129
|
-
) });
|
|
130
|
-
}, SetZeroInstance = () => {
|
|
131
|
-
const zeroInstance = (0, import_react.useZero)();
|
|
132
|
-
return zeroInstance !== latestZeroInstance && (latestZeroInstance = zeroInstance, (0, import_zeroRunner.setRunner)((query, options) => zeroInstance.run(query, options))), null;
|
|
133
|
-
}, ConnectionMonitor = (0, import_react2.memo)(
|
|
134
|
-
({
|
|
135
|
-
zeroEvents: zeroEvents2
|
|
136
|
-
}) => {
|
|
137
|
-
const state = (0, import_react.useConnectionState)(), prevState = (0, import_react2.useRef)(state.name);
|
|
138
|
-
return (0, import_react2.useEffect)(() => {
|
|
139
|
-
if (state.name !== prevState.current) {
|
|
140
|
-
const reason = "reason" in state ? state.reason : "";
|
|
141
|
-
if (prevState.current = state.name, state.name === "error" || state.name === "needs-auth") {
|
|
142
|
-
const message = typeof reason == "string" ? reason : state.name;
|
|
143
|
-
zeroEvents2.emit({
|
|
144
|
-
type: "error",
|
|
145
|
-
message
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}, [state, zeroEvents2]), null;
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
function preload(fnArg, paramsOrOptions, optionsArg) {
|
|
153
|
-
const hasParams = optionsArg !== void 0 || paramsOrOptions && !("ttl" in paramsOrOptions), params = hasParams ? paramsOrOptions : void 0, options = hasParams ? optionsArg : paramsOrOptions, queryRequest = (0, import_resolveQuery.resolveQuery)({ customQueries, fn: fnArg, params });
|
|
154
|
-
return zero.preload(queryRequest, options);
|
|
155
|
-
}
|
|
156
|
-
function getQuery(fn, params) {
|
|
157
|
-
return (0, import_resolveQuery.resolveQuery)({ customQueries, fn, params });
|
|
158
|
-
}
|
|
159
|
-
function ControlQueries({
|
|
160
|
-
children,
|
|
161
|
-
action = "disable",
|
|
162
|
-
whenDisabled = "empty"
|
|
163
|
-
}) {
|
|
164
|
-
const mode = action === "enable" ? !1 : whenDisabled;
|
|
165
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DisabledContext.Provider, { value: mode, children });
|
|
166
|
-
}
|
|
167
|
-
return {
|
|
168
|
-
zeroEvents,
|
|
169
|
-
ProvideZero,
|
|
170
|
-
ControlQueries,
|
|
171
|
-
useQuery,
|
|
172
|
-
usePermission,
|
|
173
|
-
zero,
|
|
174
|
-
preload,
|
|
175
|
-
getQuery
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=createZeroClient.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/createZeroClient.tsx"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": ["import_react", "zeroEvents"]
|
|
6
|
-
}
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: !0 });
|
|
8
|
-
}, __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from == "object" || typeof from == "function")
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
|
15
|
-
var createZeroServer_exports = {};
|
|
16
|
-
__export(createZeroServer_exports, {
|
|
17
|
-
createZeroServer: () => createZeroServer
|
|
18
|
-
});
|
|
19
|
-
module.exports = __toCommonJS(createZeroServer_exports);
|
|
20
|
-
var import_zero = require("@rocicorp/zero"), import_pg = require("@rocicorp/zero/pg"), import_server = require("@rocicorp/zero/server"), import_pg2 = require("@rocicorp/zero/server/adapters/pg"), import_helpers = require("@take-out/helpers"), import_pg3 = require("pg"), import_createPermissions = require("./createPermissions"), import_createMutators = require("./helpers/createMutators"), import_mutatorContext = require("./helpers/mutatorContext"), import_queryContext = require("./helpers/queryContext"), import_modelRegistry = require("./modelRegistry"), import_run = require("./run"), import_state = require("./state"), import_where = require("./where"), import_zeroRunner = require("./zeroRunner");
|
|
21
|
-
function createZeroServer({
|
|
22
|
-
createServerActions,
|
|
23
|
-
database,
|
|
24
|
-
pool: externalPool,
|
|
25
|
-
schema,
|
|
26
|
-
models,
|
|
27
|
-
queries,
|
|
28
|
-
mutations: mutationValidators,
|
|
29
|
-
validateQuery,
|
|
30
|
-
validateMutation,
|
|
31
|
-
defaultAllowAdminRole = "all",
|
|
32
|
-
defaultMutateAuthData = {}
|
|
33
|
-
}) {
|
|
34
|
-
(0, import_state.setSchema)(schema), (0, import_state.setEnvironment)("server");
|
|
35
|
-
let pool;
|
|
36
|
-
if (externalPool)
|
|
37
|
-
pool = externalPool;
|
|
38
|
-
else {
|
|
39
|
-
const dbString = (0, import_helpers.assertString)(database, 'createZeroServer "database"'), pgPool = new import_pg3.Pool({
|
|
40
|
-
connectionString: dbString,
|
|
41
|
-
// handle self-signed certificates in production
|
|
42
|
-
ssl: dbString.includes("sslmode=require") ? { rejectUnauthorized: !1 } : void 0
|
|
43
|
-
});
|
|
44
|
-
pgPool.on("error", (error) => {
|
|
45
|
-
console.error("[on-zero] pool error", error.message);
|
|
46
|
-
}), pgPool.on("connect", (client) => {
|
|
47
|
-
client.on("error", (error) => {
|
|
48
|
-
console.error("[on-zero] client error", error.message);
|
|
49
|
-
});
|
|
50
|
-
}), pool = pgPool;
|
|
51
|
-
}
|
|
52
|
-
const zeroDb = (0, import_pg2.zeroNodePg)(schema, pool), permissions = (0, import_createPermissions.createPermissions)({
|
|
53
|
-
environment: "server",
|
|
54
|
-
schema,
|
|
55
|
-
adminRoleMode: defaultAllowAdminRole
|
|
56
|
-
}), processor = new import_pg.PushProcessor(zeroDb), handleMutationRequest = async ({
|
|
57
|
-
authData,
|
|
58
|
-
request,
|
|
59
|
-
skipAsyncTasks
|
|
60
|
-
}) => {
|
|
61
|
-
const asyncTasks = [], mutators = (0, import_createMutators.createMutators)({
|
|
62
|
-
asyncTasks,
|
|
63
|
-
can: permissions.can,
|
|
64
|
-
createServerActions,
|
|
65
|
-
environment: "server",
|
|
66
|
-
models,
|
|
67
|
-
authData,
|
|
68
|
-
validateMutation,
|
|
69
|
-
mutationValidators
|
|
70
|
-
}), response = await processor.process(mutators, request);
|
|
71
|
-
return !skipAsyncTasks && asyncTasks.length && Promise.all(asyncTasks.map((task) => (0, import_mutatorContext.runWithAuthScope)(authData, task))).catch(
|
|
72
|
-
(err) => {
|
|
73
|
-
console.error("[push] async tasks failed", err);
|
|
74
|
-
}
|
|
75
|
-
), {
|
|
76
|
-
response,
|
|
77
|
-
asyncTasks
|
|
78
|
-
};
|
|
79
|
-
}, handleQueryRequest = async ({
|
|
80
|
-
authData,
|
|
81
|
-
request
|
|
82
|
-
}) => {
|
|
83
|
-
if (!queries)
|
|
84
|
-
throw new Error(
|
|
85
|
-
"No queries registered with createZeroServer. Pass the syncedQueries registry to createZeroServer via the queries option."
|
|
86
|
-
);
|
|
87
|
-
return {
|
|
88
|
-
response: await (0, import_queryContext.runWithQueryContext)(
|
|
89
|
-
{ authData: authData || {} },
|
|
90
|
-
() => (0, import_server.handleQueryRequest)(
|
|
91
|
-
(name, args) => {
|
|
92
|
-
if (name.startsWith("permission.")) {
|
|
93
|
-
const table = name.slice(11), { objOrId } = args, perm = (0, import_modelRegistry.getMutationsPermissions)(table);
|
|
94
|
-
if (!perm)
|
|
95
|
-
throw new Error(`[permission] no permission defined for table: ${table}`);
|
|
96
|
-
(0, import_where.setEvaluatingPermission)(!0);
|
|
97
|
-
try {
|
|
98
|
-
return (0, import_state.getZQL)()[table].where((eb) => permissions.buildPermissionQuery(
|
|
99
|
-
authData,
|
|
100
|
-
eb,
|
|
101
|
-
perm,
|
|
102
|
-
objOrId,
|
|
103
|
-
table
|
|
104
|
-
)).one();
|
|
105
|
-
} finally {
|
|
106
|
-
(0, import_where.setEvaluatingPermission)(!1);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return validateQuery && validateQuery({ authData, queryName: name, params: args }), (0, import_zero.mustGetQuery)(queries, name).fn({ args, ctx: authData });
|
|
110
|
-
},
|
|
111
|
-
schema,
|
|
112
|
-
request
|
|
113
|
-
)
|
|
114
|
-
)
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
|
-
async function runMutate(modelName, mutatorName, mutatorArg, options) {
|
|
118
|
-
let authData = options?.authData;
|
|
119
|
-
if (!authData) {
|
|
120
|
-
const scoped = (0, import_mutatorContext.getScopedAuthData)();
|
|
121
|
-
scoped && (authData = scoped);
|
|
122
|
-
}
|
|
123
|
-
const asyncTasks = [], mutator = (0, import_createMutators.createMutators)({
|
|
124
|
-
models,
|
|
125
|
-
environment: "server",
|
|
126
|
-
asyncTasks,
|
|
127
|
-
authData: {
|
|
128
|
-
...defaultMutateAuthData,
|
|
129
|
-
...authData
|
|
130
|
-
},
|
|
131
|
-
createServerActions,
|
|
132
|
-
can: permissions.can,
|
|
133
|
-
validateMutation,
|
|
134
|
-
mutationValidators
|
|
135
|
-
})[modelName][mutatorName];
|
|
136
|
-
if (await transaction(async (tx) => {
|
|
137
|
-
await mutator(tx, mutatorArg);
|
|
138
|
-
}), asyncTasks.length) {
|
|
139
|
-
const resolvedAuth = authData ?? null, promise = Promise.all(
|
|
140
|
-
asyncTasks.map((t) => (0, import_mutatorContext.runWithAuthScope)(resolvedAuth, t))
|
|
141
|
-
);
|
|
142
|
-
options?.awaitEffects ? await promise : promise.catch((err) => {
|
|
143
|
-
console.error("[mutate] async tasks failed", err);
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
const mutate = new Proxy({}, {
|
|
148
|
-
get(_, modelName) {
|
|
149
|
-
return new Proxy(
|
|
150
|
-
{},
|
|
151
|
-
{
|
|
152
|
-
get(_2, mutatorName) {
|
|
153
|
-
return (arg, options) => runMutate(modelName, mutatorName, arg, options);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
async function transaction(query2) {
|
|
160
|
-
try {
|
|
161
|
-
if ((0, import_mutatorContext.isInZeroMutation)()) {
|
|
162
|
-
const { tx } = (0, import_mutatorContext.mutatorContext)();
|
|
163
|
-
return await query2(tx);
|
|
164
|
-
}
|
|
165
|
-
return await zeroDb.transaction(query2, dummyTransactionInput);
|
|
166
|
-
} catch (err) {
|
|
167
|
-
throw err?.name !== "PermissionError" && console.error(`Error running transaction(): ${err}`), err;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
function query(cb, authData) {
|
|
171
|
-
const run = () => transaction(async (tx) => tx.run(cb((0, import_state.getZQL)())));
|
|
172
|
-
return authData !== void 0 ? (0, import_queryContext.runWithQueryContext)({ authData }, run) : run();
|
|
173
|
-
}
|
|
174
|
-
queries && (0, import_run.setCustomQueries)(queries), (0, import_zeroRunner.setRunner)((queryObj) => transaction(async (tx) => tx.run(queryObj)));
|
|
175
|
-
const dummyTransactionInput = {
|
|
176
|
-
clientGroupID: "unused",
|
|
177
|
-
clientID: "unused",
|
|
178
|
-
mutationID: 42,
|
|
179
|
-
upstreamSchema: "unused"
|
|
180
|
-
};
|
|
181
|
-
return {
|
|
182
|
-
handleMutationRequest,
|
|
183
|
-
handleQueryRequest,
|
|
184
|
-
transaction,
|
|
185
|
-
mutate,
|
|
186
|
-
query
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
//# sourceMappingURL=createZeroServer.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/createZeroServer.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": ["import_pg", "zeroHandleQueryRequest", "_", "query"]
|
|
6
|
-
}
|