over-zero 0.0.60 → 0.0.62
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/index.cjs +876 -34
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.native.cjs +884 -0
- package/dist/cjs/index.native.cjs.map +1 -0
- package/dist/cjs/server.cjs +531 -11
- package/dist/cjs/server.cjs.map +1 -0
- package/dist/esm/chunk-H7ZB7VXX.mjs +852 -0
- package/dist/esm/chunk-H7ZB7VXX.mjs.map +1 -0
- package/dist/esm/index.cjs +884 -0
- package/dist/esm/index.cjs.map +1 -0
- package/dist/esm/index.d.cts +205 -0
- package/dist/esm/index.d.ts +205 -0
- package/dist/esm/index.mjs +43 -17
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.cjs +884 -0
- package/dist/esm/index.native.cjs.map +1 -0
- package/dist/esm/index.native.d.cts +6 -0
- package/dist/esm/index.native.d.ts +6 -0
- package/dist/esm/index.native.mjs +43 -0
- package/dist/esm/index.native.mjs.map +1 -0
- package/{types/createZeroServer.d.ts → dist/esm/server.d.ts} +83 -16
- package/dist/esm/server.mjs +511 -2
- package/dist/esm/server.mjs.map +1 -1
- package/package.json +45 -24
- package/src/cli.ts +2 -2
- package/src/helpers/createMutators.ts +2 -1
- package/src/where.ts +2 -1
- package/dist/cjs/cli.cjs +0 -405
- package/dist/cjs/cli.js +0 -397
- package/dist/cjs/cli.js.map +0 -6
- package/dist/cjs/cli.native.js +0 -505
- package/dist/cjs/cli.native.js.map +0 -1
- package/dist/cjs/createPermissions.cjs +0 -82
- package/dist/cjs/createPermissions.js +0 -77
- package/dist/cjs/createPermissions.js.map +0 -6
- package/dist/cjs/createPermissions.native.js +0 -107
- package/dist/cjs/createPermissions.native.js.map +0 -1
- package/dist/cjs/createUseQuery.cjs +0 -59
- package/dist/cjs/createUseQuery.js +0 -34
- package/dist/cjs/createUseQuery.js.map +0 -6
- package/dist/cjs/createUseQuery.native.js +0 -70
- package/dist/cjs/createUseQuery.native.js.map +0 -1
- package/dist/cjs/createZeroClient.cjs +0 -162
- package/dist/cjs/createZeroClient.js +0 -126
- package/dist/cjs/createZeroClient.js.map +0 -6
- package/dist/cjs/createZeroClient.native.js +0 -214
- package/dist/cjs/createZeroClient.native.js.map +0 -1
- package/dist/cjs/createZeroServer.cjs +0 -148
- package/dist/cjs/createZeroServer.js +0 -126
- package/dist/cjs/createZeroServer.js.map +0 -6
- package/dist/cjs/createZeroServer.native.js +0 -170
- package/dist/cjs/createZeroServer.native.js.map +0 -1
- package/dist/cjs/helpers/batchQuery.cjs +0 -49
- package/dist/cjs/helpers/batchQuery.js +0 -38
- package/dist/cjs/helpers/batchQuery.js.map +0 -6
- package/dist/cjs/helpers/batchQuery.native.js +0 -49
- package/dist/cjs/helpers/batchQuery.native.js.map +0 -1
- package/dist/cjs/helpers/createMutators.cjs +0 -89
- package/dist/cjs/helpers/createMutators.js +0 -85
- package/dist/cjs/helpers/createMutators.js.map +0 -6
- package/dist/cjs/helpers/createMutators.native.js +0 -131
- package/dist/cjs/helpers/createMutators.native.js.map +0 -1
- package/dist/cjs/helpers/didRunPermissionCheck.cjs +0 -30
- package/dist/cjs/helpers/didRunPermissionCheck.js +0 -26
- package/dist/cjs/helpers/didRunPermissionCheck.js.map +0 -6
- package/dist/cjs/helpers/didRunPermissionCheck.native.js +0 -39
- package/dist/cjs/helpers/didRunPermissionCheck.native.js.map +0 -1
- package/dist/cjs/helpers/ensureLoggedIn.cjs +0 -33
- package/dist/cjs/helpers/ensureLoggedIn.js +0 -25
- package/dist/cjs/helpers/ensureLoggedIn.js.map +0 -6
- package/dist/cjs/helpers/ensureLoggedIn.native.js +0 -36
- package/dist/cjs/helpers/ensureLoggedIn.native.js.map +0 -1
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.cjs +0 -30
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.js +0 -24
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.js.map +0 -6
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.native.js +0 -33
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.native.js.map +0 -1
- package/dist/cjs/helpers/mutatorContext.cjs +0 -40
- package/dist/cjs/helpers/mutatorContext.js +0 -36
- package/dist/cjs/helpers/mutatorContext.js.map +0 -6
- package/dist/cjs/helpers/mutatorContext.native.js +0 -43
- package/dist/cjs/helpers/mutatorContext.native.js.map +0 -1
- package/dist/cjs/helpers/prettyFormatZeroQuery.cjs +0 -107
- package/dist/cjs/helpers/prettyFormatZeroQuery.js +0 -92
- package/dist/cjs/helpers/prettyFormatZeroQuery.js.map +0 -6
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js +0 -119
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +0 -1
- package/dist/cjs/helpers/useZeroDebug.cjs +0 -68
- package/dist/cjs/helpers/useZeroDebug.js +0 -49
- package/dist/cjs/helpers/useZeroDebug.js.map +0 -6
- package/dist/cjs/helpers/useZeroDebug.native.js +0 -81
- package/dist/cjs/helpers/useZeroDebug.native.js.map +0 -1
- package/dist/cjs/index.js +0 -35
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/index.native.js +0 -45
- package/dist/cjs/index.native.js.map +0 -1
- package/dist/cjs/mutations.cjs +0 -51
- package/dist/cjs/mutations.js +0 -44
- package/dist/cjs/mutations.js.map +0 -6
- package/dist/cjs/mutations.native.js +0 -56
- package/dist/cjs/mutations.native.js.map +0 -1
- package/dist/cjs/queryRegistry.cjs +0 -33
- package/dist/cjs/queryRegistry.js +0 -28
- package/dist/cjs/queryRegistry.js.map +0 -6
- package/dist/cjs/queryRegistry.native.js +0 -36
- package/dist/cjs/queryRegistry.native.js.map +0 -1
- package/dist/cjs/resolveQuery.cjs +0 -41
- package/dist/cjs/resolveQuery.js +0 -40
- package/dist/cjs/resolveQuery.js.map +0 -6
- package/dist/cjs/resolveQuery.native.js +0 -46
- package/dist/cjs/resolveQuery.native.js.map +0 -1
- package/dist/cjs/run.cjs +0 -48
- package/dist/cjs/run.js +0 -37
- package/dist/cjs/run.js.map +0 -6
- package/dist/cjs/run.native.js +0 -52
- package/dist/cjs/run.native.js.map +0 -1
- package/dist/cjs/server.js +0 -15
- package/dist/cjs/server.js.map +0 -6
- package/dist/cjs/server.native.js +0 -21
- package/dist/cjs/server.native.js.map +0 -1
- package/dist/cjs/serverWhere.cjs +0 -29
- package/dist/cjs/serverWhere.js +0 -24
- package/dist/cjs/serverWhere.js.map +0 -6
- package/dist/cjs/serverWhere.native.js +0 -32
- package/dist/cjs/serverWhere.native.js.map +0 -1
- package/dist/cjs/state.cjs +0 -49
- package/dist/cjs/state.js +0 -37
- package/dist/cjs/state.js.map +0 -6
- package/dist/cjs/state.native.js +0 -54
- package/dist/cjs/state.native.js.map +0 -1
- package/dist/cjs/types.cjs +0 -16
- package/dist/cjs/types.js +0 -14
- package/dist/cjs/types.js.map +0 -6
- package/dist/cjs/types.native.js +0 -19
- package/dist/cjs/types.native.js.map +0 -1
- package/dist/cjs/where.cjs +0 -41
- package/dist/cjs/where.js +0 -38
- package/dist/cjs/where.js.map +0 -6
- package/dist/cjs/where.native.js +0 -48
- package/dist/cjs/where.native.js.map +0 -1
- package/dist/cjs/zeroRunner.cjs +0 -34
- package/dist/cjs/zeroRunner.js +0 -32
- package/dist/cjs/zeroRunner.js.map +0 -6
- package/dist/cjs/zeroRunner.native.js +0 -37
- package/dist/cjs/zeroRunner.native.js.map +0 -1
- package/dist/cjs/zql.cjs +0 -31
- package/dist/cjs/zql.js +0 -26
- package/dist/cjs/zql.js.map +0 -6
- package/dist/cjs/zql.native.js +0 -35
- package/dist/cjs/zql.native.js.map +0 -1
- package/dist/esm/cli.js +0 -383
- package/dist/esm/cli.js.map +0 -6
- package/dist/esm/cli.mjs +0 -384
- package/dist/esm/cli.mjs.map +0 -1
- package/dist/esm/cli.native.js +0 -481
- package/dist/esm/cli.native.js.map +0 -1
- package/dist/esm/createPermissions.js +0 -66
- package/dist/esm/createPermissions.js.map +0 -6
- package/dist/esm/createPermissions.mjs +0 -59
- package/dist/esm/createPermissions.mjs.map +0 -1
- package/dist/esm/createPermissions.native.js +0 -81
- package/dist/esm/createPermissions.native.js.map +0 -1
- package/dist/esm/createUseQuery.js +0 -21
- package/dist/esm/createUseQuery.js.map +0 -6
- package/dist/esm/createUseQuery.mjs +0 -36
- package/dist/esm/createUseQuery.mjs.map +0 -1
- package/dist/esm/createUseQuery.native.js +0 -44
- package/dist/esm/createUseQuery.native.js.map +0 -1
- package/dist/esm/createZeroClient.js +0 -135
- package/dist/esm/createZeroClient.js.map +0 -6
- package/dist/esm/createZeroClient.mjs +0 -139
- package/dist/esm/createZeroClient.mjs.map +0 -1
- package/dist/esm/createZeroClient.native.js +0 -188
- package/dist/esm/createZeroClient.native.js.map +0 -1
- package/dist/esm/createZeroServer.js +0 -121
- package/dist/esm/createZeroServer.js.map +0 -6
- package/dist/esm/createZeroServer.mjs +0 -125
- package/dist/esm/createZeroServer.mjs.map +0 -1
- package/dist/esm/createZeroServer.native.js +0 -144
- package/dist/esm/createZeroServer.native.js.map +0 -1
- package/dist/esm/helpers/batchQuery.js +0 -22
- package/dist/esm/helpers/batchQuery.js.map +0 -6
- package/dist/esm/helpers/batchQuery.mjs +0 -26
- package/dist/esm/helpers/batchQuery.mjs.map +0 -1
- package/dist/esm/helpers/batchQuery.native.js +0 -23
- package/dist/esm/helpers/batchQuery.native.js.map +0 -1
- package/dist/esm/helpers/createMutators.js +0 -70
- package/dist/esm/helpers/createMutators.js.map +0 -6
- package/dist/esm/helpers/createMutators.mjs +0 -66
- package/dist/esm/helpers/createMutators.mjs.map +0 -1
- package/dist/esm/helpers/createMutators.native.js +0 -105
- package/dist/esm/helpers/createMutators.native.js.map +0 -1
- package/dist/esm/helpers/didRunPermissionCheck.js +0 -10
- package/dist/esm/helpers/didRunPermissionCheck.js.map +0 -6
- package/dist/esm/helpers/didRunPermissionCheck.mjs +0 -6
- package/dist/esm/helpers/didRunPermissionCheck.mjs.map +0 -1
- package/dist/esm/helpers/didRunPermissionCheck.native.js +0 -12
- package/dist/esm/helpers/didRunPermissionCheck.native.js.map +0 -1
- package/dist/esm/helpers/ensureLoggedIn.js +0 -10
- package/dist/esm/helpers/ensureLoggedIn.js.map +0 -6
- package/dist/esm/helpers/ensureLoggedIn.mjs +0 -10
- package/dist/esm/helpers/ensureLoggedIn.mjs.map +0 -1
- package/dist/esm/helpers/ensureLoggedIn.native.js +0 -10
- package/dist/esm/helpers/ensureLoggedIn.native.js.map +0 -1
- package/dist/esm/helpers/getQueryOrMutatorAuthData.js +0 -9
- package/dist/esm/helpers/getQueryOrMutatorAuthData.js.map +0 -6
- package/dist/esm/helpers/getQueryOrMutatorAuthData.mjs +0 -7
- package/dist/esm/helpers/getQueryOrMutatorAuthData.mjs.map +0 -1
- package/dist/esm/helpers/getQueryOrMutatorAuthData.native.js +0 -7
- package/dist/esm/helpers/getQueryOrMutatorAuthData.native.js.map +0 -1
- package/dist/esm/helpers/mutatorContext.js +0 -20
- package/dist/esm/helpers/mutatorContext.js.map +0 -6
- package/dist/esm/helpers/mutatorContext.mjs +0 -15
- package/dist/esm/helpers/mutatorContext.mjs.map +0 -1
- package/dist/esm/helpers/mutatorContext.native.js +0 -15
- package/dist/esm/helpers/mutatorContext.native.js.map +0 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.js +0 -76
- package/dist/esm/helpers/prettyFormatZeroQuery.js.map +0 -6
- package/dist/esm/helpers/prettyFormatZeroQuery.mjs +0 -84
- package/dist/esm/helpers/prettyFormatZeroQuery.mjs.map +0 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js +0 -93
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +0 -1
- package/dist/esm/helpers/useZeroDebug.js +0 -35
- package/dist/esm/helpers/useZeroDebug.js.map +0 -6
- package/dist/esm/helpers/useZeroDebug.mjs +0 -45
- package/dist/esm/helpers/useZeroDebug.mjs.map +0 -1
- package/dist/esm/helpers/useZeroDebug.native.js +0 -55
- package/dist/esm/helpers/useZeroDebug.native.js.map +0 -1
- package/dist/esm/index.js +0 -20
- package/dist/esm/index.js.map +0 -6
- package/dist/esm/index.native.js +0 -17
- package/dist/esm/index.native.js.map +0 -1
- package/dist/esm/mutations.js +0 -28
- package/dist/esm/mutations.js.map +0 -6
- package/dist/esm/mutations.mjs +0 -28
- package/dist/esm/mutations.mjs.map +0 -1
- package/dist/esm/mutations.native.js +0 -30
- package/dist/esm/mutations.native.js.map +0 -1
- package/dist/esm/queryRegistry.js +0 -12
- package/dist/esm/queryRegistry.js.map +0 -6
- package/dist/esm/queryRegistry.mjs +0 -9
- package/dist/esm/queryRegistry.mjs.map +0 -1
- package/dist/esm/queryRegistry.native.js +0 -9
- package/dist/esm/queryRegistry.native.js.map +0 -1
- package/dist/esm/resolveQuery.js +0 -24
- package/dist/esm/resolveQuery.js.map +0 -6
- package/dist/esm/resolveQuery.mjs +0 -18
- package/dist/esm/resolveQuery.mjs.map +0 -1
- package/dist/esm/resolveQuery.native.js +0 -20
- package/dist/esm/resolveQuery.native.js.map +0 -1
- package/dist/esm/run.js +0 -22
- package/dist/esm/run.js.map +0 -6
- package/dist/esm/run.mjs +0 -24
- package/dist/esm/run.mjs.map +0 -1
- package/dist/esm/run.native.js +0 -25
- package/dist/esm/run.native.js.map +0 -1
- package/dist/esm/server.js +0 -2
- package/dist/esm/server.js.map +0 -6
- package/dist/esm/server.native.js +0 -2
- package/dist/esm/server.native.js.map +0 -1
- package/dist/esm/serverWhere.js +0 -8
- package/dist/esm/serverWhere.js.map +0 -6
- package/dist/esm/serverWhere.mjs +0 -6
- package/dist/esm/serverWhere.mjs.map +0 -1
- package/dist/esm/serverWhere.native.js +0 -6
- package/dist/esm/serverWhere.native.js.map +0 -1
- package/dist/esm/state.js +0 -21
- package/dist/esm/state.js.map +0 -6
- package/dist/esm/state.mjs +0 -22
- package/dist/esm/state.mjs.map +0 -1
- package/dist/esm/state.native.js +0 -24
- package/dist/esm/state.native.js.map +0 -1
- package/dist/esm/types.js +0 -1
- package/dist/esm/types.js.map +0 -6
- package/dist/esm/types.mjs +0 -2
- package/dist/esm/types.mjs.map +0 -1
- package/dist/esm/types.native.js +0 -2
- package/dist/esm/types.native.js.map +0 -1
- package/dist/esm/where.js +0 -23
- package/dist/esm/where.js.map +0 -6
- package/dist/esm/where.mjs +0 -17
- package/dist/esm/where.mjs.map +0 -1
- package/dist/esm/where.native.js +0 -21
- package/dist/esm/where.native.js.map +0 -1
- package/dist/esm/zeroRunner.js +0 -16
- package/dist/esm/zeroRunner.js.map +0 -6
- package/dist/esm/zeroRunner.mjs +0 -10
- package/dist/esm/zeroRunner.mjs.map +0 -1
- package/dist/esm/zeroRunner.native.js +0 -10
- package/dist/esm/zeroRunner.native.js.map +0 -1
- package/dist/esm/zql.js +0 -10
- package/dist/esm/zql.js.map +0 -6
- package/dist/esm/zql.mjs +0 -8
- package/dist/esm/zql.mjs.map +0 -1
- package/dist/esm/zql.native.js +0 -9
- package/dist/esm/zql.native.js.map +0 -1
- package/types/cli.d.ts +0 -3
- package/types/cli.d.ts.map +0 -1
- package/types/createPermissions.d.ts +0 -10
- package/types/createPermissions.d.ts.map +0 -1
- package/types/createUseQuery.d.ts +0 -20
- package/types/createUseQuery.d.ts.map +0 -1
- package/types/createZeroClient.d.ts +0 -35
- package/types/createZeroClient.d.ts.map +0 -1
- package/types/createZeroServer.d.ts.map +0 -1
- package/types/helpers/batchQuery.d.ts +0 -7
- package/types/helpers/batchQuery.d.ts.map +0 -1
- package/types/helpers/createMutators.d.ts +0 -10
- package/types/helpers/createMutators.d.ts.map +0 -1
- package/types/helpers/didRunPermissionCheck.d.ts +0 -4
- package/types/helpers/didRunPermissionCheck.d.ts.map +0 -1
- package/types/helpers/ensureLoggedIn.d.ts +0 -3
- package/types/helpers/ensureLoggedIn.d.ts.map +0 -1
- package/types/helpers/getQueryOrMutatorAuthData.d.ts +0 -3
- package/types/helpers/getQueryOrMutatorAuthData.d.ts.map +0 -1
- package/types/helpers/mutatorContext.d.ts +0 -5
- package/types/helpers/mutatorContext.d.ts.map +0 -1
- package/types/helpers/prettyFormatZeroQuery.d.ts +0 -3
- package/types/helpers/prettyFormatZeroQuery.d.ts.map +0 -1
- package/types/helpers/useZeroDebug.d.ts +0 -3
- package/types/helpers/useZeroDebug.d.ts.map +0 -1
- package/types/index.d.ts +0 -17
- package/types/index.d.ts.map +0 -1
- package/types/mutations.d.ts +0 -20
- package/types/mutations.d.ts.map +0 -1
- package/types/queryRegistry.d.ts +0 -3
- package/types/queryRegistry.d.ts.map +0 -1
- package/types/resolveQuery.d.ts +0 -11
- package/types/resolveQuery.d.ts.map +0 -1
- package/types/run.d.ts +0 -7
- package/types/run.d.ts.map +0 -1
- package/types/server.d.ts +0 -2
- package/types/server.d.ts.map +0 -1
- package/types/serverWhere.d.ts +0 -5
- package/types/serverWhere.d.ts.map +0 -1
- package/types/state.d.ts +0 -8
- package/types/state.d.ts.map +0 -1
- package/types/types.d.ts +0 -78
- package/types/types.d.ts.map +0 -1
- package/types/where.d.ts +0 -6
- package/types/where.d.ts.map +0 -1
- package/types/zeroRunner.d.ts +0 -6
- package/types/zeroRunner.d.ts.map +0 -1
- package/types/zql.d.ts +0 -3
- package/types/zql.d.ts.map +0 -1
package/dist/esm/server.mjs
CHANGED
|
@@ -1,2 +1,511 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// src/createZeroServer.ts
|
|
2
|
+
import { mustGetQuery } from "@rocicorp/zero";
|
|
3
|
+
import { PushProcessor } from "@rocicorp/zero/pg";
|
|
4
|
+
import { handleQueryRequest as zeroHandleQueryRequest } from "@rocicorp/zero/server";
|
|
5
|
+
import { zeroNodePg } from "@rocicorp/zero/server/adapters/pg";
|
|
6
|
+
import { assertString, randomId } from "@take-out/helpers";
|
|
7
|
+
import { Pool } from "pg";
|
|
8
|
+
|
|
9
|
+
// src/createPermissions.ts
|
|
10
|
+
import { ensure, EnsureError } from "@take-out/helpers";
|
|
11
|
+
|
|
12
|
+
// src/helpers/didRunPermissionCheck.ts
|
|
13
|
+
import { globalValue } from "@take-out/helpers";
|
|
14
|
+
var PermissionCheckRan = globalValue(
|
|
15
|
+
`over-zero:permissions-check`,
|
|
16
|
+
() => /* @__PURE__ */ new WeakMap()
|
|
17
|
+
);
|
|
18
|
+
var setDidRunPermissionCheck = (ctx) => {
|
|
19
|
+
return PermissionCheckRan.set(ctx, true);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// src/helpers/mutatorContext.ts
|
|
23
|
+
import { createAsyncContext } from "@take-out/helpers";
|
|
24
|
+
var asyncContext = createAsyncContext();
|
|
25
|
+
function mutatorContext() {
|
|
26
|
+
const currentContext = asyncContext.get();
|
|
27
|
+
if (!currentContext) {
|
|
28
|
+
throw new Error("mutatorContext must be called within a mutator");
|
|
29
|
+
}
|
|
30
|
+
return currentContext;
|
|
31
|
+
}
|
|
32
|
+
function isInZeroMutation() {
|
|
33
|
+
return !!asyncContext.get();
|
|
34
|
+
}
|
|
35
|
+
function runWithContext(context, fn) {
|
|
36
|
+
return asyncContext.run(context, fn);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// src/helpers/prettyFormatZeroQuery.ts
|
|
40
|
+
import { ellipsis } from "@take-out/helpers";
|
|
41
|
+
var prettyFormatZeroQuery = (query, mode = "full") => {
|
|
42
|
+
const astObject = query["_completeAst"]?.();
|
|
43
|
+
if (!astObject) return "";
|
|
44
|
+
if (mode === "minimal") {
|
|
45
|
+
return prettyFormatMinimal(astObject);
|
|
46
|
+
}
|
|
47
|
+
return prettyFormatFull(astObject);
|
|
48
|
+
};
|
|
49
|
+
var prettyFormatFull = (astObject, indent = 0) => {
|
|
50
|
+
if (!astObject || !astObject.table) return "";
|
|
51
|
+
const spaces = " ".repeat(indent);
|
|
52
|
+
let query = astObject.table;
|
|
53
|
+
let hasChainedMethods = false;
|
|
54
|
+
if (astObject.where) {
|
|
55
|
+
const whereClause = formatWhere(astObject.where);
|
|
56
|
+
if (hasChainedMethods) {
|
|
57
|
+
query += `
|
|
58
|
+
${spaces} ${whereClause}`;
|
|
59
|
+
} else {
|
|
60
|
+
query += whereClause;
|
|
61
|
+
hasChainedMethods = true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (astObject.limit) {
|
|
65
|
+
const limitClause = `.limit(${astObject.limit})`;
|
|
66
|
+
if (hasChainedMethods) {
|
|
67
|
+
query += `
|
|
68
|
+
${spaces} ${limitClause}`;
|
|
69
|
+
} else {
|
|
70
|
+
query += limitClause;
|
|
71
|
+
hasChainedMethods = true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (astObject.orderBy && astObject.orderBy.length > 0) {
|
|
75
|
+
const orderClauses = astObject.orderBy.map(([field, direction]) => `${field}, ${direction}`).join(", ");
|
|
76
|
+
const orderByClause = `.orderBy(${orderClauses})`;
|
|
77
|
+
if (hasChainedMethods) {
|
|
78
|
+
query += `
|
|
79
|
+
${spaces} ${orderByClause}`;
|
|
80
|
+
} else {
|
|
81
|
+
query += orderByClause;
|
|
82
|
+
hasChainedMethods = true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (astObject.related && astObject.related.length > 0) {
|
|
86
|
+
astObject.related.forEach((rel) => {
|
|
87
|
+
if (rel.subquery) {
|
|
88
|
+
const alias = rel.subquery.alias || rel.subquery.table;
|
|
89
|
+
const subQuery = prettyFormatFull(rel.subquery, indent + 1);
|
|
90
|
+
query += `
|
|
91
|
+
${spaces} .related(${alias}, q => q.${subQuery}`;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
const closingParens = ")".repeat(astObject.related.length);
|
|
95
|
+
query += `
|
|
96
|
+
${spaces}${closingParens}`;
|
|
97
|
+
}
|
|
98
|
+
return query;
|
|
99
|
+
};
|
|
100
|
+
var prettyFormatMinimal = (astObject) => {
|
|
101
|
+
if (!astObject || !astObject.table) return "";
|
|
102
|
+
let query = astObject.table;
|
|
103
|
+
if (astObject.where) {
|
|
104
|
+
query += formatWhere(astObject.where).replace(".where(", "(");
|
|
105
|
+
}
|
|
106
|
+
if (astObject.related && astObject.related.length > 0) {
|
|
107
|
+
const subQueries = collectSubQueryTables(astObject.related);
|
|
108
|
+
const count = subQueries.length;
|
|
109
|
+
const tableNames = subQueries.join(", ");
|
|
110
|
+
query += ` (+${count}: ${ellipsis(tableNames, 30)})`;
|
|
111
|
+
}
|
|
112
|
+
return query;
|
|
113
|
+
};
|
|
114
|
+
var collectSubQueryTables = (related) => {
|
|
115
|
+
const tables = [];
|
|
116
|
+
related.forEach((rel) => {
|
|
117
|
+
if (rel.subquery) {
|
|
118
|
+
const tableName = rel.subquery.alias || rel.subquery.table;
|
|
119
|
+
tables.push(tableName);
|
|
120
|
+
if (rel.subquery.related && rel.subquery.related.length > 0) {
|
|
121
|
+
tables.push(...collectSubQueryTables(rel.subquery.related));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
return tables;
|
|
126
|
+
};
|
|
127
|
+
var formatWhere = (where) => {
|
|
128
|
+
if (!where) return "";
|
|
129
|
+
if (where.type === "simple") {
|
|
130
|
+
const column = where.left?.name || where.left;
|
|
131
|
+
const value = where.right?.value !== void 0 ? where.right.value : where.right;
|
|
132
|
+
const op = where.op || "=";
|
|
133
|
+
if (column === "id" && op === "=" && (typeof value === "string" || typeof value === "number")) {
|
|
134
|
+
return `(${value})`;
|
|
135
|
+
}
|
|
136
|
+
if (op === "=") {
|
|
137
|
+
return `.where(${column}, ${value})`;
|
|
138
|
+
}
|
|
139
|
+
return `.where(${column}, ${op}, ${value})`;
|
|
140
|
+
}
|
|
141
|
+
if (where.type === "and" && where.conditions) {
|
|
142
|
+
let result = "";
|
|
143
|
+
where.conditions.forEach((condition, index) => {
|
|
144
|
+
if (index === 0) {
|
|
145
|
+
result += formatWhere(condition);
|
|
146
|
+
} else {
|
|
147
|
+
result += `.and(${formatWhere(condition).slice(1)})`;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
if (where.type === "or" && where.conditions) {
|
|
153
|
+
let result = "";
|
|
154
|
+
where.conditions.forEach((condition, index) => {
|
|
155
|
+
if (index === 0) {
|
|
156
|
+
result += formatWhere(condition);
|
|
157
|
+
} else {
|
|
158
|
+
result += `.or(${formatWhere(condition).slice(1)})`;
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
return "";
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// src/state.ts
|
|
167
|
+
import { createBuilder } from "@rocicorp/zero";
|
|
168
|
+
var schema = null;
|
|
169
|
+
var zql = null;
|
|
170
|
+
var authData;
|
|
171
|
+
var errMessage = `Haven't called createZeroClient or createZeroServer yet!`;
|
|
172
|
+
var getZQL = () => {
|
|
173
|
+
if (!zql) throw new Error(errMessage);
|
|
174
|
+
return zql;
|
|
175
|
+
};
|
|
176
|
+
var setSchema = (_) => {
|
|
177
|
+
schema = _;
|
|
178
|
+
zql = createBuilder(_);
|
|
179
|
+
};
|
|
180
|
+
var setAuthData = (_) => {
|
|
181
|
+
authData = _;
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
// src/where.ts
|
|
185
|
+
import { isServer } from "@tamagui/constants";
|
|
186
|
+
import { globalValue as globalValue2 } from "@take-out/helpers";
|
|
187
|
+
var WhereTableNameMap = globalValue2(
|
|
188
|
+
`over-zero:where-table-map`,
|
|
189
|
+
() => /* @__PURE__ */ new WeakMap()
|
|
190
|
+
);
|
|
191
|
+
function getWhereTableName(where) {
|
|
192
|
+
return WhereTableNameMap.get(where);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// src/createPermissions.ts
|
|
196
|
+
function createPermissions({
|
|
197
|
+
environment,
|
|
198
|
+
schema: schema2
|
|
199
|
+
}) {
|
|
200
|
+
function buildPermissionQuery(authData2, eb, permissionWhere, objOrId) {
|
|
201
|
+
const tableName = getWhereTableName(permissionWhere);
|
|
202
|
+
if (!tableName) {
|
|
203
|
+
throw new Error(`Must use PermissionWhere for buildPermissionQuery`);
|
|
204
|
+
}
|
|
205
|
+
const tableSchema = schema2.tables[tableName];
|
|
206
|
+
if (!tableSchema) {
|
|
207
|
+
throw new Error(`No schema?`);
|
|
208
|
+
}
|
|
209
|
+
const primaryKeys = tableSchema.primaryKey;
|
|
210
|
+
const permissionReturn = permissionWhere(eb, authData2);
|
|
211
|
+
if (permissionReturn == null) {
|
|
212
|
+
throw new Error(`No permission defined for ${tableName}`);
|
|
213
|
+
}
|
|
214
|
+
if (permissionReturn === true) {
|
|
215
|
+
return eb.cmpLit(true, "=", true);
|
|
216
|
+
}
|
|
217
|
+
if (permissionReturn === false) {
|
|
218
|
+
return eb.cmpLit(true, "=", false);
|
|
219
|
+
}
|
|
220
|
+
const primaryKeyWheres = [];
|
|
221
|
+
for (const key of primaryKeys) {
|
|
222
|
+
const value = typeof objOrId === "string" ? objOrId : objOrId[key];
|
|
223
|
+
primaryKeyWheres.push(eb.cmp(key, value));
|
|
224
|
+
}
|
|
225
|
+
return eb.and(permissionReturn, ...primaryKeyWheres);
|
|
226
|
+
}
|
|
227
|
+
const can = async (where, obj) => {
|
|
228
|
+
if (environment === "server") {
|
|
229
|
+
const ctx = mutatorContext();
|
|
230
|
+
const tableName = getWhereTableName(where);
|
|
231
|
+
if (!tableName) {
|
|
232
|
+
throw new Error(`Must use where('table') style where to pass to can()`);
|
|
233
|
+
}
|
|
234
|
+
await ensurePermission(ctx.tx, ctx.authData, tableName, where, obj);
|
|
235
|
+
setDidRunPermissionCheck(ctx);
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
async function ensurePermission(tx, authData2, tableName, where, obj) {
|
|
239
|
+
if (authData2?.role === "admin") {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const zqlBuilder = getZQL();
|
|
243
|
+
const queryBase = zqlBuilder[tableName];
|
|
244
|
+
let query = null;
|
|
245
|
+
try {
|
|
246
|
+
query = queryBase.where((eb) => {
|
|
247
|
+
return buildPermissionQuery(authData2, eb, where, obj);
|
|
248
|
+
}).one();
|
|
249
|
+
ensure(await tx.run(query));
|
|
250
|
+
} catch (err) {
|
|
251
|
+
const errorTitle = `${tableName} with auth id: ${authData2?.id}`;
|
|
252
|
+
if (err instanceof EnsureError) {
|
|
253
|
+
let msg = `[permission] \u{1F6AB} Not Allowed: ${errorTitle}`;
|
|
254
|
+
if (process.env.NODE_ENV === "development" && query) {
|
|
255
|
+
msg += `
|
|
256
|
+
${prettyFormatZeroQuery(query)}`;
|
|
257
|
+
}
|
|
258
|
+
throw new Error(msg);
|
|
259
|
+
}
|
|
260
|
+
throw new Error(`Error running permission ${errorTitle}
|
|
261
|
+
${err}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
can,
|
|
266
|
+
buildPermissionQuery
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// src/helpers/createMutators.ts
|
|
271
|
+
import { isBrowser, isServer as isServer2 } from "@tamagui/constants";
|
|
272
|
+
import { mapObject, time } from "@take-out/helpers";
|
|
273
|
+
function createMutators({
|
|
274
|
+
environment,
|
|
275
|
+
authData: authData2,
|
|
276
|
+
createServerActions,
|
|
277
|
+
asyncTasks = [],
|
|
278
|
+
can,
|
|
279
|
+
models
|
|
280
|
+
}) {
|
|
281
|
+
const serverActions = createServerActions?.();
|
|
282
|
+
const modelMutators = mapObject(models, (val) => val.mutate);
|
|
283
|
+
function withContext(fn) {
|
|
284
|
+
return async (tx, ...args) => {
|
|
285
|
+
const mutationContext = {
|
|
286
|
+
tx,
|
|
287
|
+
authData: authData2,
|
|
288
|
+
environment,
|
|
289
|
+
can,
|
|
290
|
+
server: environment === "server" ? {
|
|
291
|
+
actions: serverActions || {},
|
|
292
|
+
asyncTasks: asyncTasks || {}
|
|
293
|
+
} : void 0
|
|
294
|
+
};
|
|
295
|
+
return await runWithContext(mutationContext, () => {
|
|
296
|
+
return fn(mutationContext, ...args);
|
|
297
|
+
});
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
function withDevelopmentLogging(name, fn) {
|
|
301
|
+
if (process.env.NODE_ENV !== "development" && !process.env.IS_TESTING) {
|
|
302
|
+
return fn;
|
|
303
|
+
}
|
|
304
|
+
return async (...args) => {
|
|
305
|
+
const startTime = performance.now();
|
|
306
|
+
try {
|
|
307
|
+
if (isServer2) {
|
|
308
|
+
console.info(`[mutator] ${name} start`);
|
|
309
|
+
}
|
|
310
|
+
const result = await fn(...args);
|
|
311
|
+
const duration = (performance.now() - startTime).toFixed(2);
|
|
312
|
+
if (isBrowser) {
|
|
313
|
+
console.groupCollapsed(`[mutator] ${name} completed in ${duration}ms`);
|
|
314
|
+
console.info("\u2192", args[1]);
|
|
315
|
+
console.info("\u2190", result);
|
|
316
|
+
console.trace();
|
|
317
|
+
console.groupEnd();
|
|
318
|
+
} else {
|
|
319
|
+
console.info(`[mutator] ${name} completed in ${duration}ms`);
|
|
320
|
+
}
|
|
321
|
+
return result;
|
|
322
|
+
} catch (error) {
|
|
323
|
+
const duration = (performance.now() - startTime).toFixed(2);
|
|
324
|
+
console.groupCollapsed(`[mutator] ${name} failed after ${duration}ms`);
|
|
325
|
+
console.error("error:", error);
|
|
326
|
+
console.info("arguments:", JSON.stringify(args[1], null, 2));
|
|
327
|
+
console.info("stack trace:", new Error().stack);
|
|
328
|
+
console.groupEnd();
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
function withTimeoutGuard(name, fn, timeoutMs = time.ms.minutes(1)) {
|
|
334
|
+
return async (...args) => {
|
|
335
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
336
|
+
setTimeout(() => {
|
|
337
|
+
reject(new Error(`[mutator] ${name} timeout after ${timeoutMs}ms`));
|
|
338
|
+
}, timeoutMs);
|
|
339
|
+
});
|
|
340
|
+
return Promise.race([fn(...args), timeoutPromise]);
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function decorateMutators(modules) {
|
|
344
|
+
const result = {};
|
|
345
|
+
for (const [moduleName, moduleExports] of Object.entries(modules)) {
|
|
346
|
+
result[moduleName] = {};
|
|
347
|
+
for (const [name, exportValue] of Object.entries(moduleExports)) {
|
|
348
|
+
if (typeof exportValue === "function") {
|
|
349
|
+
const fullName = `${moduleName}.${name}`;
|
|
350
|
+
result[moduleName][name] = withDevelopmentLogging(
|
|
351
|
+
fullName,
|
|
352
|
+
withTimeoutGuard(fullName, withContext(exportValue))
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return result;
|
|
358
|
+
}
|
|
359
|
+
return decorateMutators(modelMutators);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// src/zeroRunner.ts
|
|
363
|
+
var runner = null;
|
|
364
|
+
function setRunner(r) {
|
|
365
|
+
runner = r;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// src/run.ts
|
|
369
|
+
var customQueriesRef = null;
|
|
370
|
+
function setCustomQueries(queries) {
|
|
371
|
+
customQueriesRef = queries;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// src/createZeroServer.ts
|
|
375
|
+
function createZeroServer({
|
|
376
|
+
createServerActions,
|
|
377
|
+
database,
|
|
378
|
+
schema: schema2,
|
|
379
|
+
models,
|
|
380
|
+
queries
|
|
381
|
+
}) {
|
|
382
|
+
setSchema(schema2);
|
|
383
|
+
const dbString = assertString(database, `createZeroServer "database"`);
|
|
384
|
+
const zeroDb = zeroNodePg(
|
|
385
|
+
schema2,
|
|
386
|
+
new Pool({
|
|
387
|
+
connectionString: dbString,
|
|
388
|
+
// handle self-signed certificates in production
|
|
389
|
+
ssl: dbString.includes("sslmode=require") ? { rejectUnauthorized: false } : void 0
|
|
390
|
+
})
|
|
391
|
+
);
|
|
392
|
+
const permissions = createPermissions({
|
|
393
|
+
environment: "server",
|
|
394
|
+
schema: schema2
|
|
395
|
+
});
|
|
396
|
+
const processor = new PushProcessor(zeroDb);
|
|
397
|
+
const handleMutationRequest = async ({
|
|
398
|
+
authData: authData2,
|
|
399
|
+
request,
|
|
400
|
+
skipAsyncTasks
|
|
401
|
+
}) => {
|
|
402
|
+
const asyncTasks = [];
|
|
403
|
+
const mutators = createMutators({
|
|
404
|
+
asyncTasks,
|
|
405
|
+
can: permissions.can,
|
|
406
|
+
createServerActions,
|
|
407
|
+
environment: "server",
|
|
408
|
+
models,
|
|
409
|
+
authData: authData2
|
|
410
|
+
});
|
|
411
|
+
const response = await processor.process(mutators, request);
|
|
412
|
+
if (!skipAsyncTasks && asyncTasks.length) {
|
|
413
|
+
const id = randomId();
|
|
414
|
+
console.info(`[push] complete, running async tasks ${asyncTasks.length} id ${id}`);
|
|
415
|
+
Promise.all(asyncTasks.map((task) => task())).then(() => {
|
|
416
|
+
console.info(`[push] async tasks complete ${id}`);
|
|
417
|
+
}).catch((err) => {
|
|
418
|
+
console.error(`[push] error: async tasks failed \u{1F61E}`, err);
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
return {
|
|
422
|
+
response,
|
|
423
|
+
asyncTasks
|
|
424
|
+
};
|
|
425
|
+
};
|
|
426
|
+
const handleQueryRequest = async ({
|
|
427
|
+
authData: authData2,
|
|
428
|
+
request
|
|
429
|
+
}) => {
|
|
430
|
+
if (!queries) {
|
|
431
|
+
throw new Error(
|
|
432
|
+
"No queries registered with createZeroServer. Pass the syncedQueries registry to createZeroServer via the queries option."
|
|
433
|
+
);
|
|
434
|
+
}
|
|
435
|
+
setAuthData(authData2 || {});
|
|
436
|
+
const response = await zeroHandleQueryRequest(
|
|
437
|
+
(name, args) => {
|
|
438
|
+
const query2 = mustGetQuery(queries, name);
|
|
439
|
+
return query2.fn({ args, ctx: authData2 });
|
|
440
|
+
},
|
|
441
|
+
schema2,
|
|
442
|
+
request
|
|
443
|
+
);
|
|
444
|
+
return {
|
|
445
|
+
response
|
|
446
|
+
};
|
|
447
|
+
};
|
|
448
|
+
const mutate = async (run, authData2) => {
|
|
449
|
+
const asyncTasks = [];
|
|
450
|
+
const mutators = createMutators({
|
|
451
|
+
models,
|
|
452
|
+
environment: "server",
|
|
453
|
+
asyncTasks,
|
|
454
|
+
authData: {
|
|
455
|
+
id: "",
|
|
456
|
+
email: "admin@start.chat",
|
|
457
|
+
role: "admin",
|
|
458
|
+
...authData2
|
|
459
|
+
},
|
|
460
|
+
createServerActions,
|
|
461
|
+
can: permissions.can
|
|
462
|
+
});
|
|
463
|
+
await transaction(async (tx) => {
|
|
464
|
+
await run(tx, mutators);
|
|
465
|
+
});
|
|
466
|
+
await Promise.all(asyncTasks.map((t) => t()));
|
|
467
|
+
};
|
|
468
|
+
async function transaction(query2) {
|
|
469
|
+
try {
|
|
470
|
+
if (isInZeroMutation()) {
|
|
471
|
+
const { tx } = mutatorContext();
|
|
472
|
+
return await query2(tx);
|
|
473
|
+
}
|
|
474
|
+
const output = await zeroDb.transaction(query2, dummyTransactionInput);
|
|
475
|
+
return output;
|
|
476
|
+
} catch (err) {
|
|
477
|
+
console.error(`Error running transaction(): ${err}`);
|
|
478
|
+
throw err;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
function query(cb) {
|
|
482
|
+
return transaction(async (tx) => {
|
|
483
|
+
return cb(tx.query);
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
if (queries) {
|
|
487
|
+
setCustomQueries(queries);
|
|
488
|
+
}
|
|
489
|
+
setRunner((queryObj) => {
|
|
490
|
+
return transaction(async (tx) => {
|
|
491
|
+
return tx.run(queryObj);
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
const dummyTransactionInput = {
|
|
495
|
+
clientGroupID: "unused",
|
|
496
|
+
clientID: "unused",
|
|
497
|
+
mutationID: 42,
|
|
498
|
+
upstreamSchema: "unused"
|
|
499
|
+
};
|
|
500
|
+
return {
|
|
501
|
+
handleMutationRequest,
|
|
502
|
+
handleQueryRequest,
|
|
503
|
+
transaction,
|
|
504
|
+
mutate,
|
|
505
|
+
query
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
export {
|
|
509
|
+
createZeroServer
|
|
510
|
+
};
|
|
511
|
+
//# sourceMappingURL=server.mjs.map
|
package/dist/esm/server.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../src/server.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc","ignoreList":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/createZeroServer.ts","../../src/createPermissions.ts","../../src/helpers/didRunPermissionCheck.ts","../../src/helpers/mutatorContext.ts","../../src/helpers/prettyFormatZeroQuery.ts","../../src/state.ts","../../src/where.ts","../../src/helpers/createMutators.ts","../../src/zeroRunner.ts","../../src/run.ts"],"sourcesContent":["import { mustGetQuery } from '@rocicorp/zero'\nimport { PushProcessor } from '@rocicorp/zero/pg'\nimport { handleQueryRequest as zeroHandleQueryRequest } from '@rocicorp/zero/server'\nimport { zeroNodePg } from '@rocicorp/zero/server/adapters/pg'\nimport { assertString, randomId } from '@take-out/helpers'\nimport { Pool } from 'pg'\n\nimport { createPermissions } from './createPermissions'\nimport { createMutators } from './helpers/createMutators'\nimport { isInZeroMutation, mutatorContext } from './helpers/mutatorContext'\nimport { setCustomQueries } from './run'\nimport { setAuthData, setSchema } from './state'\nimport { setRunner } from './zeroRunner'\n\nimport type {\n AsyncAction,\n AuthData,\n GenericModels,\n GetZeroMutators,\n Transaction,\n} from './types'\nimport type {\n AnyQueryRegistry,\n HumanReadable,\n Query,\n Schema as ZeroSchema,\n} from '@rocicorp/zero'\nimport type { TransactionProviderInput } from '@rocicorp/zero/pg'\n\nexport function createZeroServer<\n Schema extends ZeroSchema,\n Models extends GenericModels,\n ServerActions extends Record<string, unknown>,\n>({\n createServerActions,\n database,\n schema,\n models,\n queries,\n}: {\n /**\n * The DB connection string, same as ZERO_UPSTREAM_DB\n */\n database: string\n schema: Schema\n models: Models\n createServerActions: () => ServerActions\n queries?: AnyQueryRegistry\n}) {\n setSchema(schema)\n\n const dbString = assertString(database, `createZeroServer \"database\"`)\n\n const zeroDb = zeroNodePg(\n schema,\n new Pool({\n connectionString: dbString,\n // handle self-signed certificates in production\n ssl: dbString.includes('sslmode=require')\n ? { rejectUnauthorized: false }\n : undefined,\n })\n )\n\n const permissions = createPermissions<Schema>({\n environment: 'server',\n schema,\n })\n\n const processor = new PushProcessor(zeroDb)\n\n const handleMutationRequest = async ({\n authData,\n request,\n skipAsyncTasks,\n }: {\n authData: AuthData | null\n request: Request\n skipAsyncTasks?: boolean\n }) => {\n // since mutations do DB work in transaction, avoid any async tasks during\n const asyncTasks: AsyncAction[] = []\n\n const mutators = createMutators({\n asyncTasks,\n can: permissions.can,\n createServerActions,\n environment: 'server',\n models,\n authData,\n })\n\n // @ts-expect-error type is ok but config in monorepo\n const response = await processor.process(mutators, request)\n\n // now finish\n if (!skipAsyncTasks && asyncTasks.length) {\n const id = randomId()\n console.info(`[push] complete, running async tasks ${asyncTasks.length} id ${id}`)\n Promise.all(asyncTasks.map((task) => task()))\n .then(() => {\n console.info(`[push] async tasks complete ${id}`)\n })\n .catch((err) => {\n console.error(`[push] error: async tasks failed 😞`, err)\n })\n }\n\n return {\n response,\n asyncTasks,\n }\n }\n\n const handleQueryRequest = async ({\n authData,\n request,\n }: {\n authData: AuthData | null\n request: Request\n }) => {\n if (!queries) {\n throw new Error(\n 'No queries registered with createZeroServer. ' +\n 'Pass the syncedQueries registry to createZeroServer via the queries option.'\n )\n }\n\n // set authData globally for permission checks in query functions\n setAuthData(authData || ({} as AuthData))\n\n const response = await zeroHandleQueryRequest(\n (name, args) => {\n const query = (mustGetQuery as any)(queries, name)\n return query.fn({ args, ctx: authData })\n },\n schema,\n request\n )\n\n return {\n response,\n }\n }\n\n const mutate = async (\n run: (tx: Transaction, mutators: GetZeroMutators<Models>) => Promise<void>,\n authData?: Pick<AuthData, 'email' | 'id'> & Partial<AuthData>\n ) => {\n const asyncTasks: Array<() => Promise<void>> = []\n\n const mutators = createMutators({\n models,\n environment: 'server',\n asyncTasks,\n authData: {\n id: '',\n email: 'admin@start.chat',\n role: 'admin',\n ...authData,\n },\n createServerActions,\n can: permissions.can,\n })\n\n await transaction(async (tx) => {\n await run(tx, mutators)\n })\n\n await Promise.all(asyncTasks.map((t) => t()))\n }\n\n async function transaction<\n CB extends (tx: Transaction) => Promise<any>,\n Returns extends CB extends (tx: Transaction) => Promise<infer X> ? X : never,\n >(query: CB): Promise<Returns> {\n try {\n if (isInZeroMutation()) {\n const { tx } = mutatorContext()\n return await query(tx)\n }\n // @ts-expect-error type\n const output = await zeroDb.transaction(query, dummyTransactionInput)\n return output\n } catch (err) {\n console.error(`Error running transaction(): ${err}`)\n throw err\n }\n }\n\n function query<R>(\n cb: (q: Transaction['query']) => Query<any, Schema, R>\n ): Promise<HumanReadable<R>> {\n return transaction(async (tx) => {\n return cb(tx.query)\n }) as any\n }\n\n // register for global run() helper\n if (queries) {\n setCustomQueries(queries)\n }\n\n // server uses transaction-based execution\n setRunner((queryObj) => {\n return transaction(async (tx) => {\n return tx.run(queryObj)\n })\n })\n\n // This is needed temporarily and will be cleaned up in the future.\n const dummyTransactionInput: TransactionProviderInput = {\n clientGroupID: 'unused',\n clientID: 'unused',\n mutationID: 42,\n upstreamSchema: 'unused',\n }\n\n return {\n handleMutationRequest,\n handleQueryRequest,\n transaction,\n mutate,\n query,\n }\n}\n","import { ensure, EnsureError } from '@take-out/helpers'\n\nimport { setDidRunPermissionCheck } from './helpers/didRunPermissionCheck'\nimport { mutatorContext } from './helpers/mutatorContext'\nimport { prettyFormatZeroQuery } from './helpers/prettyFormatZeroQuery'\nimport { getZQL } from './state'\nimport { getWhereTableName } from './where'\n\nimport type { AuthData, Can, TableName, Transaction, Where } from './types'\nimport type {\n Condition,\n ExpressionBuilder,\n Query,\n Schema as ZeroSchema,\n} from '@rocicorp/zero'\n\nexport function createPermissions<Schema extends ZeroSchema>({\n environment,\n schema,\n}: {\n environment: 'client' | 'server'\n schema: Schema\n}) {\n type PermissionReturn = Condition | boolean\n\n type PermissionsWhere<Table extends TableName = TableName> = Where<\n Table,\n PermissionReturn\n >\n\n function buildPermissionQuery<PermissionWhere extends PermissionsWhere>(\n authData: AuthData | null,\n eb: ExpressionBuilder<any, any>,\n permissionWhere: PermissionWhere,\n // TODO until i can get a working PickPrimaryKeys<'message'>\n objOrId: Record<string, any> | string\n ) {\n const tableName = getWhereTableName(permissionWhere)\n\n if (!tableName) {\n throw new Error(`Must use PermissionWhere for buildPermissionQuery`)\n }\n\n const tableSchema = schema.tables[tableName]\n\n if (!tableSchema) {\n throw new Error(`No schema?`)\n }\n\n const primaryKeys = tableSchema.primaryKey\n const permissionReturn = permissionWhere(eb, authData)\n\n if (permissionReturn == null) {\n throw new Error(`No permission defined for ${tableName}`)\n }\n\n if (permissionReturn === true) {\n return eb.cmpLit(true, '=', true)\n }\n\n if (permissionReturn === false) {\n return eb.cmpLit(true, '=', false)\n }\n\n const primaryKeyWheres: Condition[] = []\n\n for (const key of primaryKeys) {\n const value = typeof objOrId === 'string' ? objOrId : objOrId[key]\n primaryKeyWheres.push(eb.cmp(key as any, value))\n }\n\n return eb.and(permissionReturn, ...primaryKeyWheres)\n }\n\n const can: Can = async (where, obj) => {\n // on client we always allow! we only check on server (like zero does)\n if (environment === 'server') {\n const ctx = mutatorContext()\n const tableName = getWhereTableName(where)\n if (!tableName) {\n throw new Error(`Must use where('table') style where to pass to can()`)\n }\n await ensurePermission(ctx.tx, ctx.authData, tableName, where, obj)\n setDidRunPermissionCheck(ctx)\n }\n }\n\n async function ensurePermission(\n tx: Transaction,\n authData: AuthData | null,\n tableName: TableName,\n where: Where,\n obj: any // TODO until i can get a working PickPrimaryKeys<'message'>\n ): Promise<void> {\n if (authData?.role === 'admin') {\n // admin role can do any mutation\n return\n }\n\n const zqlBuilder = getZQL() as any\n const queryBase = zqlBuilder[tableName] as Query<any, any>\n let query: Query<any, any, any> | null = null\n\n try {\n query = queryBase\n .where((eb) => {\n return buildPermissionQuery(authData, eb, where, obj)\n })\n .one()\n\n ensure(await tx.run(query))\n } catch (err) {\n const errorTitle = `${tableName} with auth id: ${authData?.id}`\n\n if (err instanceof EnsureError) {\n let msg = `[permission] 🚫 Not Allowed: ${errorTitle}`\n if (process.env.NODE_ENV === 'development' && query) {\n msg += `\\n ${prettyFormatZeroQuery(query)}`\n }\n throw new Error(msg)\n }\n\n throw new Error(`Error running permission ${errorTitle}\\n${err}`)\n }\n }\n\n return {\n can,\n buildPermissionQuery,\n }\n}\n","import { globalValue } from '@take-out/helpers'\n\nimport type { MutatorContext } from '../types'\n\nconst PermissionCheckRan = globalValue(\n `over-zero:permissions-check`,\n () => new WeakMap<MutatorContext, boolean>()\n)\n\nexport const getDidRunPermissionCheck = (ctx: MutatorContext) => {\n return PermissionCheckRan.get(ctx)\n}\n\nexport const setDidRunPermissionCheck = (ctx: MutatorContext) => {\n return PermissionCheckRan.set(ctx, true)\n}\n","import { createAsyncContext } from '@take-out/helpers'\n\nimport type { MutatorContext } from '../types'\n\nconst asyncContext = createAsyncContext<MutatorContext>()\n\nexport function mutatorContext(): MutatorContext {\n const currentContext = asyncContext.get()\n if (!currentContext) {\n throw new Error('mutatorContext must be called within a mutator')\n }\n\n return currentContext\n}\n\nexport function isInZeroMutation() {\n return !!asyncContext.get()\n}\n\nexport function runWithContext<T>(\n context: MutatorContext,\n fn: () => T | Promise<T>\n): Promise<T> {\n return asyncContext.run(context, fn)\n}\n","import { ellipsis } from '@take-out/helpers'\n\nimport type { Query } from '@rocicorp/zero'\n\nexport const prettyFormatZeroQuery = (\n query: Query<any, any, any>,\n mode: 'full' | 'minimal' = 'full'\n): string => {\n const astObject = query['_completeAst']?.()\n\n if (!astObject) return ''\n\n if (mode === 'minimal') {\n return prettyFormatMinimal(astObject)\n }\n return prettyFormatFull(astObject)\n}\n\nconst prettyFormatFull = (astObject: any, indent = 0): string => {\n if (!astObject || !astObject.table) return ''\n\n const spaces = ' '.repeat(indent)\n let query = astObject.table\n let hasChainedMethods = false\n\n // Add where conditions\n if (astObject.where) {\n const whereClause = formatWhere(astObject.where)\n if (hasChainedMethods) {\n query += `\\n${spaces} ${whereClause}`\n } else {\n query += whereClause\n hasChainedMethods = true\n }\n }\n\n // Add limit\n if (astObject.limit) {\n const limitClause = `.limit(${astObject.limit})`\n if (hasChainedMethods) {\n query += `\\n${spaces} ${limitClause}`\n } else {\n query += limitClause\n hasChainedMethods = true\n }\n }\n\n // Add orderBy\n if (astObject.orderBy && astObject.orderBy.length > 0) {\n const orderClauses = astObject.orderBy\n .map(([field, direction]: [string, string]) => `${field}, ${direction}`)\n .join(', ')\n const orderByClause = `.orderBy(${orderClauses})`\n if (hasChainedMethods) {\n query += `\\n${spaces} ${orderByClause}`\n } else {\n query += orderByClause\n hasChainedMethods = true\n }\n }\n\n // Add related queries\n if (astObject.related && astObject.related.length > 0) {\n astObject.related.forEach((rel: any) => {\n if (rel.subquery) {\n const alias = rel.subquery.alias || rel.subquery.table\n const subQuery = prettyFormatFull(rel.subquery, indent + 1)\n query += `\\n${spaces} .related(${alias}, q => q.${subQuery}`\n }\n })\n\n // Add closing parentheses\n const closingParens = ')'.repeat(astObject.related.length)\n query += `\\n${spaces}${closingParens}`\n }\n\n return query\n}\n\nconst prettyFormatMinimal = (astObject: any): string => {\n if (!astObject || !astObject.table) return ''\n\n let query = astObject.table\n\n // Add where conditions only\n if (astObject.where) {\n query += formatWhere(astObject.where).replace('.where(', '(')\n }\n\n // Add sub-queries info if present\n if (astObject.related && astObject.related.length > 0) {\n const subQueries = collectSubQueryTables(astObject.related)\n const count = subQueries.length\n const tableNames = subQueries.join(', ')\n query += ` (+${count}: ${ellipsis(tableNames, 30)})`\n }\n\n return query\n}\n\nconst collectSubQueryTables = (related: any[]): string[] => {\n const tables: string[] = []\n\n related.forEach((rel: any) => {\n if (rel.subquery) {\n const tableName = rel.subquery.alias || rel.subquery.table\n tables.push(tableName)\n\n // Recursively collect nested sub-queries\n if (rel.subquery.related && rel.subquery.related.length > 0) {\n tables.push(...collectSubQueryTables(rel.subquery.related))\n }\n }\n })\n\n return tables\n}\n\nconst formatWhere = (where: any): string => {\n if (!where) return ''\n\n if (where.type === 'simple') {\n const column = where.left?.name || where.left\n const value = where.right?.value !== undefined ? where.right.value : where.right\n const op = where.op || '='\n\n // Special case: if column is \"id\" and op is \"=\" and value is a single item, show just the value\n if (\n column === 'id' &&\n op === '=' &&\n (typeof value === 'string' || typeof value === 'number')\n ) {\n return `(${value})`\n }\n\n if (op === '=') {\n return `.where(${column}, ${value})`\n }\n return `.where(${column}, ${op}, ${value})`\n }\n\n if (where.type === 'and' && where.conditions) {\n let result = ''\n where.conditions.forEach((condition: any, index: number) => {\n if (index === 0) {\n result += formatWhere(condition)\n } else {\n result += `.and(${formatWhere(condition).slice(1)})` // Remove the leading dot\n }\n })\n return result\n }\n\n if (where.type === 'or' && where.conditions) {\n let result = ''\n where.conditions.forEach((condition: any, index: number) => {\n if (index === 0) {\n result += formatWhere(condition)\n } else {\n result += `.or(${formatWhere(condition).slice(1)})` // Remove the leading dot\n }\n })\n return result\n }\n\n return ''\n}\n","import { createBuilder, type Schema } from '@rocicorp/zero'\n\nimport type { AuthData, QueryBuilder } from './types'\n\nlet schema: Schema | null = null\nlet zql: QueryBuilder | null = null\nlet authData: AuthData | null | undefined\n\nconst errMessage = `Haven't called createZeroClient or createZeroServer yet!`\n\nexport const getZQL = () => {\n if (!zql) throw new Error(errMessage)\n return zql\n}\n\nexport const getSchema = () => {\n if (!schema) throw new Error(errMessage)\n return schema\n}\n\nexport const setSchema = (_: Schema) => {\n schema = _\n zql = createBuilder(_) as QueryBuilder\n}\n\nexport const getAuthData = () => {\n return authData || null\n}\n\nexport const setAuthData = (_: AuthData) => {\n authData = _\n}\n","import { isServer } from '@tamagui/constants'\nimport { globalValue } from '@take-out/helpers'\n\nimport { getQueryOrMutatorAuthData } from './helpers/getQueryOrMutatorAuthData'\n\nimport type { TableName, Where } from './types'\nimport type { Condition, ExpressionBuilder } from '@rocicorp/zero'\n\nexport function where<Table extends TableName, Builder extends Where<Table>>(\n tableName: Table,\n builder: Builder,\n isServerOnly?: boolean\n): Where<Table, Condition>\n\nexport function where<Table extends TableName, Builder extends Where = Where<Table>>(\n builder: Builder\n): Where<Table, Condition>\n\nexport function where<Table extends TableName, Builder extends Where<Table>>(\n a: Table | Builder,\n b?: Builder,\n isServerOnly = false\n): Where<Table, any> | Builder {\n const whereFn = (b || a) as any\n\n const wrappedWhereFn = ((\n a: ExpressionBuilder<any, any>,\n b = getQueryOrMutatorAuthData()\n ) => {\n if (!isServer && isServerOnly) {\n // on client (web or native) where conditions always pass\n return a.and()\n }\n\n const result = whereFn(a, b)\n if (typeof result === 'boolean') {\n if (result) {\n return a.cmpLit(0, '=', 0)\n } else {\n return a.cmpLit(1, '=', 0)\n }\n }\n return result\n }) as Builder\n\n if (b) {\n WhereTableNameMap.set(wrappedWhereFn, a as Table)\n }\n\n return wrappedWhereFn\n}\n\n// permissions where:\n\nconst WhereTableNameMap = globalValue(\n `over-zero:where-table-map`,\n () => new WeakMap<Where, TableName>()\n)\n\nexport function getWhereTableName(where: Where) {\n return WhereTableNameMap.get(where)\n}\n","import { isBrowser, isServer } from '@tamagui/constants'\nimport { mapObject, time } from '@take-out/helpers'\n\nimport { runWithContext } from './mutatorContext'\n\nimport type {\n AuthData,\n Can,\n GenericModels,\n GetZeroMutators,\n MutatorContext,\n Transaction,\n} from '../types'\n\nexport function createMutators<Models extends GenericModels>({\n environment,\n authData,\n createServerActions,\n asyncTasks = [],\n can,\n models,\n}: {\n environment: 'server' | 'client'\n authData: AuthData | null\n can: Can\n models: Models\n asyncTasks?: Array<() => Promise<void>>\n createServerActions?: () => Record<string, any>\n}): GetZeroMutators<Models> {\n const serverActions = createServerActions?.()\n\n const modelMutators = mapObject(models, (val) => val.mutate) as {\n [K in keyof typeof models]: (typeof models)[K]['mutate']\n }\n\n function withContext<Args extends any[]>(fn: (...args: Args) => Promise<void>) {\n return async (tx: Transaction, ...args: Args): Promise<void> => {\n const mutationContext: MutatorContext = {\n tx,\n authData,\n environment,\n can,\n server:\n environment === 'server'\n ? ({\n actions: serverActions || {},\n asyncTasks: asyncTasks || {},\n } as MutatorContext['server'])\n : undefined,\n }\n\n return await runWithContext(mutationContext, () => {\n // @ts-expect-error type shenanigan\n // map to our mutations() helper\n return fn(mutationContext, ...args)\n })\n }\n }\n\n function withDevelopmentLogging<Args extends any[]>(\n name: string,\n fn: (...args: Args) => Promise<void>\n ) {\n if (process.env.NODE_ENV !== 'development' && !process.env.IS_TESTING) {\n return fn\n }\n\n return async (...args: Args): Promise<void> => {\n const startTime = performance.now()\n\n try {\n if (isServer) {\n console.info(`[mutator] ${name} start`)\n }\n const result = await fn(...args)\n const duration = (performance.now() - startTime).toFixed(2)\n if (isBrowser) {\n console.groupCollapsed(`[mutator] ${name} completed in ${duration}ms`)\n console.info('→', args[1])\n console.info('←', result)\n console.trace()\n console.groupEnd()\n } else {\n // TODO in prod just track\n console.info(`[mutator] ${name} completed in ${duration}ms`)\n }\n return result\n } catch (error) {\n const duration = (performance.now() - startTime).toFixed(2)\n console.groupCollapsed(`[mutator] ${name} failed after ${duration}ms`)\n console.error('error:', error)\n console.info('arguments:', JSON.stringify(args[1], null, 2))\n console.info('stack trace:', new Error().stack)\n console.groupEnd()\n throw error\n }\n }\n }\n\n function withTimeoutGuard<Args extends any[]>(\n name: string,\n fn: (...args: Args) => Promise<void>,\n // don't want this too high - zero runs mutations in order and waits for the last to finish it seems\n // so if one mutation gets stuck it will just sit there\n timeoutMs: number = time.ms.minutes(1)\n ) {\n return async (...args: Args): Promise<void> => {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new Error(`[mutator] ${name} timeout after ${timeoutMs}ms`))\n }, timeoutMs)\n })\n\n return Promise.race([fn(...args), timeoutPromise])\n }\n }\n\n function decorateMutators<T extends Record<string, Record<string, any>>>(modules: T) {\n const result: any = {}\n\n for (const [moduleName, moduleExports] of Object.entries(modules)) {\n result[moduleName] = {}\n for (const [name, exportValue] of Object.entries(moduleExports)) {\n if (typeof exportValue === 'function') {\n const fullName = `${moduleName}.${name}`\n result[moduleName][name] = withDevelopmentLogging(\n fullName,\n withTimeoutGuard(fullName, withContext(exportValue))\n )\n }\n }\n }\n\n return result\n }\n\n return decorateMutators(modelMutators)\n}\n","import type {\n HumanReadable,\n Query,\n RunOptions,\n Schema as ZeroSchema,\n} from '@rocicorp/zero'\n\nexport type { RunOptions }\n\nexport type ZeroRunner = <TReturn>(\n query: Query<any, ZeroSchema, TReturn>,\n options?: RunOptions\n) => Promise<HumanReadable<TReturn>>\n\nlet runner: ZeroRunner | null = null\n\nexport function setRunner(r: ZeroRunner) {\n runner = r\n}\n\nexport function getRunner(): ZeroRunner {\n if (!runner) {\n throw new Error(\n 'Zero runner not initialized. Ensure ProvideZero is mounted (client) or createZeroServer is called (server).'\n )\n }\n return runner\n}\n","import { resolveQuery, type PlainQueryFn } from './resolveQuery'\nimport { getRunner, type RunOptions } from './zeroRunner'\n\nimport type {\n AnyQueryRegistry,\n HumanReadable,\n Query,\n Schema as ZeroSchema,\n} from '@rocicorp/zero'\n\nlet customQueriesRef: AnyQueryRegistry | null = null\n\nexport function setCustomQueries(queries: AnyQueryRegistry) {\n customQueriesRef = queries\n}\n\nfunction getCustomQueries(): AnyQueryRegistry {\n if (!customQueriesRef) {\n throw new Error(\n 'Custom queries not initialized. Ensure createZeroClient or createZeroServer has been called.'\n )\n }\n return customQueriesRef\n}\n\n// run a query once and return results (non-reactive)\nexport function run<\n Schema extends ZeroSchema,\n TArg,\n TTable extends keyof Schema['tables'] & string,\n TReturn,\n>(\n fn: PlainQueryFn<TArg, Query<TTable, Schema, TReturn>>,\n params: TArg,\n options?: RunOptions\n): Promise<HumanReadable<TReturn>>\n\nexport function run<\n Schema extends ZeroSchema,\n TTable extends keyof Schema['tables'] & string,\n TReturn,\n>(\n fn: PlainQueryFn<void, Query<TTable, Schema, TReturn>>,\n options?: RunOptions\n): Promise<HumanReadable<TReturn>>\n\nexport function run(\n fnArg: any,\n paramsOrOptions?: any,\n optionsArg?: RunOptions\n): Promise<any> {\n const hasParams =\n optionsArg !== undefined || (paramsOrOptions && !('type' in paramsOrOptions))\n const params = hasParams ? paramsOrOptions : undefined\n const options = hasParams ? optionsArg : paramsOrOptions\n\n const customQueries = getCustomQueries()\n const queryRequest = resolveQuery({ customQueries, fn: fnArg, params })\n const runner = getRunner()\n\n return runner(queryRequest as any, options)\n}\n"],"mappings":"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","names":["globalValue","globalValue","schema","authData","isServer","authData","isServer","schema","authData","query"]}
|