@shivaedev/platform 0.3.8 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/README.md +41 -2
  3. package/dist/better-auth/adapter.d.ts +2 -2
  4. package/dist/better-auth/adapter.d.ts.map +1 -1
  5. package/dist/better-auth/adapter.js +39 -95
  6. package/dist/better-auth/adapter.js.map +1 -1
  7. package/dist/better-auth/relation.d.ts +7 -27
  8. package/dist/better-auth/relation.d.ts.map +1 -1
  9. package/dist/better-auth/relation.js +2 -84
  10. package/dist/better-auth/relation.js.map +1 -1
  11. package/dist/better-auth/row-adapter.d.ts +8 -0
  12. package/dist/better-auth/row-adapter.d.ts.map +1 -0
  13. package/dist/better-auth/row-adapter.js +45 -0
  14. package/dist/better-auth/row-adapter.js.map +1 -0
  15. package/dist/better-auth/where.d.ts +22 -0
  16. package/dist/better-auth/where.d.ts.map +1 -0
  17. package/dist/better-auth/where.js +93 -0
  18. package/dist/better-auth/where.js.map +1 -0
  19. package/dist/better-auth.d.ts +1 -1
  20. package/dist/errors/rejected-field.d.ts +7 -0
  21. package/dist/errors/rejected-field.d.ts.map +1 -0
  22. package/dist/errors/rejected-field.js +5 -0
  23. package/dist/errors/rejected-field.js.map +1 -0
  24. package/dist/errors/taxonomy.d.ts +40 -0
  25. package/dist/errors/taxonomy.d.ts.map +1 -0
  26. package/dist/errors/taxonomy.js +18 -0
  27. package/dist/errors/taxonomy.js.map +1 -0
  28. package/dist/errors.d.ts +3 -0
  29. package/dist/errors.d.ts.map +1 -0
  30. package/dist/errors.js +3 -0
  31. package/dist/errors.js.map +1 -0
  32. package/dist/node-http/subscription-signal.d.ts.map +1 -1
  33. package/dist/node-http/subscription-signal.js +6 -1
  34. package/dist/node-http/subscription-signal.js.map +1 -1
  35. package/dist/node-http.d.ts +1 -1
  36. package/dist/rpc/identity.d.ts +15 -0
  37. package/dist/rpc/identity.d.ts.map +1 -0
  38. package/dist/rpc/identity.js +8 -0
  39. package/dist/rpc/identity.js.map +1 -0
  40. package/dist/rpc/middleware.d.ts +15 -0
  41. package/dist/rpc/middleware.d.ts.map +1 -0
  42. package/dist/rpc/middleware.js +12 -0
  43. package/dist/rpc/middleware.js.map +1 -0
  44. package/dist/rpc-server/adapters/better-auth-sessions.d.ts +4 -0
  45. package/dist/rpc-server/adapters/better-auth-sessions.d.ts.map +1 -0
  46. package/dist/rpc-server/adapters/better-auth-sessions.js +11 -0
  47. package/dist/rpc-server/adapters/better-auth-sessions.js.map +1 -0
  48. package/dist/rpc-server/origin.d.ts +15 -0
  49. package/dist/rpc-server/origin.d.ts.map +1 -0
  50. package/dist/rpc-server/origin.js +12 -0
  51. package/dist/rpc-server/origin.js.map +1 -0
  52. package/dist/rpc-server/redact-cause.d.ts +6 -0
  53. package/dist/rpc-server/redact-cause.d.ts.map +1 -0
  54. package/dist/rpc-server/redact-cause.js +28 -0
  55. package/dist/rpc-server/redact-cause.js.map +1 -0
  56. package/dist/rpc-server/redact.d.ts +3 -0
  57. package/dist/rpc-server/redact.d.ts.map +1 -0
  58. package/dist/rpc-server/redact.js +46 -0
  59. package/dist/rpc-server/redact.js.map +1 -0
  60. package/dist/rpc-server/sensitive.d.ts +5 -0
  61. package/dist/rpc-server/sensitive.d.ts.map +1 -0
  62. package/dist/rpc-server/sensitive.js +49 -0
  63. package/dist/rpc-server/sensitive.js.map +1 -0
  64. package/dist/rpc-server/session.d.ts +21 -0
  65. package/dist/rpc-server/session.d.ts.map +1 -0
  66. package/dist/rpc-server/session.js +28 -0
  67. package/dist/rpc-server/session.js.map +1 -0
  68. package/dist/rpc-server/tracing.d.ts +9 -0
  69. package/dist/rpc-server/tracing.d.ts.map +1 -0
  70. package/dist/rpc-server/tracing.js +32 -0
  71. package/dist/rpc-server/tracing.js.map +1 -0
  72. package/dist/rpc-server/transport.d.ts +4 -0
  73. package/dist/rpc-server/transport.d.ts.map +1 -0
  74. package/dist/rpc-server/transport.js +4 -0
  75. package/dist/rpc-server/transport.js.map +1 -0
  76. package/dist/rpc-server.d.ts +9 -0
  77. package/dist/rpc-server.d.ts.map +1 -0
  78. package/dist/rpc-server.js +9 -0
  79. package/dist/rpc-server.js.map +1 -0
  80. package/dist/rpc.d.ts +3 -0
  81. package/dist/rpc.d.ts.map +1 -0
  82. package/dist/rpc.js +3 -0
  83. package/dist/rpc.js.map +1 -0
  84. package/dist/runtime/make.d.ts +1 -1
  85. package/dist/runtime/make.d.ts.map +1 -1
  86. package/dist/runtime/make.js +10 -9
  87. package/dist/runtime/make.js.map +1 -1
  88. package/dist/runtime/types.d.ts.map +1 -1
  89. package/dist/runtime.d.ts +2 -2
  90. package/dist/testing/types.d.ts.map +1 -1
  91. package/dist/testing/vitest.d.ts +1 -1
  92. package/dist/testing/vitest.d.ts.map +1 -1
  93. package/dist/testing/vitest.js +7 -9
  94. package/dist/testing/vitest.js.map +1 -1
  95. package/dist/testing.d.ts +2 -2
  96. package/package.json +28 -8
  97. package/src/better-auth/adapter.ts +50 -190
  98. package/src/better-auth/relation.ts +21 -163
  99. package/src/better-auth/row-adapter.ts +78 -0
  100. package/src/better-auth/where.ts +118 -0
  101. package/src/better-auth.ts +1 -1
  102. package/src/errors/rejected-field.ts +13 -0
  103. package/src/errors/taxonomy.ts +18 -0
  104. package/src/errors.ts +2 -0
  105. package/src/node-http/subscription-signal.ts +10 -15
  106. package/src/node-http.ts +1 -1
  107. package/src/rpc/identity.ts +11 -0
  108. package/src/rpc/middleware.ts +15 -0
  109. package/src/rpc-server/adapters/better-auth-sessions.ts +22 -0
  110. package/src/rpc-server/origin.ts +29 -0
  111. package/src/rpc-server/redact-cause.ts +41 -0
  112. package/src/rpc-server/redact.ts +42 -0
  113. package/src/rpc-server/sensitive.ts +60 -0
  114. package/src/rpc-server/session.ts +54 -0
  115. package/src/rpc-server/tracing.ts +56 -0
  116. package/src/rpc-server/transport.ts +8 -0
  117. package/src/rpc-server.ts +15 -0
  118. package/src/rpc.ts +2 -0
  119. package/src/runtime/make.ts +20 -27
  120. package/src/runtime/types.ts +3 -12
  121. package/src/runtime.ts +2 -2
  122. package/src/testing/types.ts +7 -32
  123. package/src/testing/vitest.ts +59 -89
  124. package/src/testing.ts +2 -2
package/CHANGELOG.md CHANGED
@@ -1,6 +1,30 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 0.4.1 - 2026-09-26
4
+
5
+ ### Changed
6
+
7
+ - Pin the optional `better-auth` peer dependency to exactly 1.6.25, the version
8
+ the package is tested against, instead of `^1.6.25`.
9
+
10
+ ## 0.4.0 - 2026-09-26
11
+
12
+ ### Added
13
+
14
+ - `@shivaedev/platform/errors`: browser-safe Schema error classes shared by native
15
+ RPC contracts, effect-contract rejections and form field rejections.
16
+ - `@shivaedev/platform/rpc`: browser-safe request id and identity services plus
17
+ the `RequestTracing`, `Authenticated` and `MaybeAuthenticated` middleware tags.
18
+ - `@shivaedev/platform/rpc-server`: middleware layers for request ids, log and
19
+ span annotation, redacted failure logging, Better Auth sessions and an explicit
20
+ Origin policy. The Origin policy and session provider see only the transport
21
+ request's headers, not headers set inside RPC messages; `transportHeaders`
22
+ gives application middleware the same view.
23
+
24
+ ### Changed
25
+
26
+ - Require Effect Prisma 0.6.4 and Effect tRPC 0.4.0, which adds declared
27
+ rejections to tRPC error data.
4
28
 
5
29
  ## 0.3.8 - 2026-09-26
6
30
 
package/README.md CHANGED
@@ -7,8 +7,9 @@ database, transport, and test framework.
7
7
  Generic Prisma and tRPC integrations remain available separately from
8
8
  `@shivaedev/effect-prisma` and `@shivaedev/effect-trpc`.
9
9
 
10
- `effect` is the only required peer, and the `runtime` and `node-http` entries
11
- need nothing else. Install the optional peers for the entries that use them:
10
+ `effect` is the only required peer. The `runtime`, `node-http`, `errors`, `rpc`
11
+ and `rpc-server` entries need nothing else. Install the optional peers for the
12
+ entries that use them:
12
13
 
13
14
  - `better-auth`: `better-auth` and `@shivaedev/effect-prisma`
14
15
  - `testing`: `@shivaedev/effect-prisma`, `@shivaedev/effect-trpc`,
@@ -75,6 +76,44 @@ session policy, and authorization remain application configuration. Native
75
76
  experimental Better Auth joins are not supported; the standard adapter join
76
77
  fallback remains available.
77
78
 
79
+ ## Errors and native RPC request context
80
+
81
+ `@shivaedev/platform/errors` exports browser-safe `Schema.TaggedError` classes:
82
+ `NotFound`, `Unauthorized`, `Forbidden`, `BadRequest` and `Conflict` (both with an
83
+ optional `field`), `PreconditionFailed` and `AuthUnavailable`. Use them as native
84
+ RPC error schemas or effect-contract rejections. `rejectedField(error)` extracts
85
+ `{ field, message }` from any field rejection so a form can show it.
86
+
87
+ `@shivaedev/platform/rpc` declares the `RequestTracing`, `Authenticated` and
88
+ `MaybeAuthenticated` middleware and the `RequestId`, `Identity` and
89
+ `OptionalIdentity` services they provide. It is browser-safe, so shared `RpcGroup`
90
+ declarations can use it. Implement the middleware on the server with
91
+ `@shivaedev/platform/rpc-server`:
92
+
93
+ ```ts
94
+ import { Authenticated, RequestTracing } from "@shivaedev/platform/rpc"
95
+ import { authenticatedLayer, betterAuthSessions, requestTracingLayer, trustedOrigins } from "@shivaedev/platform/rpc-server"
96
+
97
+ const Api = RpcGroup.make(/* ... */).middleware(Authenticated).middleware(RequestTracing)
98
+
99
+ const Middleware = Layer.mergeAll(
100
+ requestTracingLayer(),
101
+ authenticatedLayer({
102
+ provider: betterAuthSessions((headers) => auth.api.getSession({ headers })),
103
+ origin: trustedOrigins({ allow: ["https://app.example"], missing: "reject" }),
104
+ }),
105
+ )
106
+ ```
107
+
108
+ Each RPC gets its own request id and resolves its own session. The Origin check
109
+ and session lookup read the HTTP request's own headers, never header pairs a
110
+ client puts inside an RPC message. An outage of the
111
+ session provider fails with `AuthUnavailable`, never as a signed-out user.
112
+ Failures log once with a redacted payload. The Origin policy is a function the
113
+ application supplies; see the
114
+ [request context guide](../../docs/framework/request-context.md) for the
115
+ trade-offs between browsers and native clients.
116
+
78
117
  ## Testing
79
118
 
80
119
  Configure the application database, tRPC caller, and test Layer once:
@@ -1,11 +1,11 @@
1
1
  import type { AnyDatabase } from "@shivaedev/effect-prisma";
2
2
  import type { DBAdapterInstance } from "better-auth";
3
- import type { PlatformRuntime } from "../runtime/types.js";
3
+ import type { PlatformRuntime } from "../runtime/types.ts";
4
4
  export interface EffectPrismaAdapterOptions {
5
5
  readonly debugLogs?: boolean;
6
6
  /** Map Better Auth model names to Prisma contract model names. */
7
7
  readonly modelName?: (model: string) => string;
8
8
  readonly usePlural?: boolean;
9
9
  }
10
- export declare const effectPrismaAdapter: <Database extends AnyDatabase, Services, BuildError>(databaseTag: Database, runtime: PlatformRuntime<Services, BuildError>, adapterOptions?: EffectPrismaAdapterOptions) => DBAdapterInstance;
10
+ export declare function effectPrismaAdapter<Database extends AnyDatabase, Services, BuildError>(databaseTag: Database, runtime: PlatformRuntime<Services, BuildError>, adapterOptions?: EffectPrismaAdapterOptions): DBAdapterInstance;
11
11
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/better-auth/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAqB,iBAAiB,EAAS,MAAM,aAAa,CAAC;AAG/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAY3D,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC7B;AA2BD,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,SAAS,WAAW,EAAE,QAAQ,EAAE,UAAU,EAClD,aAAa,QAAQ,EACrB,SAAS,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,EAC9C,iBAAgB,0BAA+B,KAC7C,iBA4KF,CAAC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/better-auth/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAqB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3D,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC7B;AAuBD,wBAAgB,mBAAmB,CAAC,QAAQ,SAAS,WAAW,EAAE,QAAQ,EAAE,UAAU,EACrF,WAAW,EAAE,QAAQ,EACrB,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,EAC9C,cAAc,CAAC,EAAE,0BAA0B,GACzC,iBAAiB,CAAC"}
@@ -1,101 +1,45 @@
1
1
  import { createAdapterFactory } from "better-auth/adapters";
2
- import { Effect, Option } from "effect";
2
+ import { Effect } from "effect";
3
3
  import { refineRelation } from "./relation.js";
4
- const modelRelation = (database, model, mapModelName) => Reflect.get(database, mapModelName(model));
5
- const defaultModelName = (model) => model.length === 0 ? model : `${model[0]?.toUpperCase()}${model.slice(1)}`;
6
- const rejectJoin = (join) => {
7
- if (join !== undefined) {
8
- throw new TypeError("The Effect Prisma Better Auth adapter does not support experimental native joins");
4
+ import { makeRowAdapter } from "./row-adapter.js";
5
+ const isFunction = (value, key) => ((typeof value === "object" && value !== null) || typeof value === "function") && typeof Reflect.get(value, key) === "function";
6
+ const isDynamicDatabase = (value) => isFunction(value, "transaction");
7
+ const isDynamicRelation = (value) => isFunction(value, "where") && isFunction(value, "select");
8
+ const modelRelation = (database, model) => {
9
+ const relation = Reflect.get(database, model);
10
+ if (!isDynamicRelation(relation)) {
11
+ throw new TypeError(`Unknown database model: ${model}`);
9
12
  }
13
+ return relation;
10
14
  };
11
- export const effectPrismaAdapter = (databaseTag, runtime, adapterOptions = {}) => (authOptions) => {
12
- const mapModelName = adapterOptions.modelName ?? defaultModelName;
13
- const databaseEffect = databaseTag;
14
- const run = (operation) => runtime.runPromise(Effect.flatMap(databaseEffect, (database) => operation(database)));
15
- let factory;
16
- factory = createAdapterFactory({
17
- config: {
18
- adapterId: "effect-prisma",
19
- adapterName: "Effect Prisma",
20
- debugLogs: adapterOptions.debugLogs ?? false,
21
- supportsArrays: true,
22
- supportsBooleans: true,
23
- supportsDates: true,
24
- supportsJSON: true,
25
- supportsNumericIds: true,
26
- supportsUUIDs: true,
27
- transaction: (callback) => run((database) => database.transaction(Effect.flatMap(Effect.context(), (services) => Effect.tryPromise({
28
- try: () => runtime.runWithServices(services, () => callback(factory(authOptions))),
29
- catch: (error) => error,
30
- })))),
31
- },
32
- adapter: ({ debugLog, getFieldAttributes }) => ({
33
- create: async ({ data, model, select }) => {
34
- debugLog("create", { model });
35
- return (await run((database) => refineRelation(modelRelation(database, model, mapModelName), {
36
- select,
37
- }).create(data)));
15
+ const defaultModelName = (model) => (model.length === 0 ? model : `${model[0]?.toUpperCase()}${model.slice(1)}`);
16
+ export function effectPrismaAdapter(databaseTag, runtime, adapterOptions = {}) {
17
+ return (authOptions) => {
18
+ const mapModelName = adapterOptions.modelName ?? defaultModelName;
19
+ const databaseEffect = Effect.flatMap(databaseTag, (database) => isDynamicDatabase(database) ? Effect.succeed(database) : Effect.die(new TypeError("The database service has no transaction")));
20
+ const run = (operation) => runtime.runPromise(Effect.flatMap(databaseEffect, operation));
21
+ const query = (model, refinement, use) => run((database) => use(refineRelation(modelRelation(database, mapModelName(model)), refinement)));
22
+ const inTransaction = (callback) => Effect.flatMap(Effect.context(), (services) => Effect.tryPromise({
23
+ try: () => runtime.runWithServices(services, callback),
24
+ catch: (error) => error,
25
+ }));
26
+ let factory;
27
+ factory = createAdapterFactory({
28
+ config: {
29
+ adapterId: "effect-prisma",
30
+ adapterName: "Effect Prisma",
31
+ debugLogs: adapterOptions.debugLogs ?? false,
32
+ supportsArrays: true,
33
+ supportsBooleans: true,
34
+ supportsDates: true,
35
+ supportsJSON: true,
36
+ supportsNumericIds: true,
37
+ supportsUUIDs: true,
38
+ transaction: (callback) => run((database) => database.transaction(inTransaction(() => callback(factory(authOptions))))),
38
39
  },
39
- findOne: async ({ join, model, select, where, }) => {
40
- rejectJoin(join);
41
- return (await run((database) => Effect.map(refineRelation(modelRelation(database, model, mapModelName), {
42
- select,
43
- where,
44
- }).first(), Option.getOrNull)));
45
- },
46
- findMany: async ({ join, limit, model, offset, select, sortBy, where, }) => {
47
- rejectJoin(join);
48
- return (await run((database) => refineRelation(modelRelation(database, model, mapModelName), {
49
- limit,
50
- offset,
51
- select,
52
- sortBy,
53
- where,
54
- })));
55
- },
56
- update: async ({ model, update, where }) => {
57
- if (where.length === 0)
58
- return null;
59
- const hasUniqueCondition = where.some((condition) => condition.connector !== "OR" &&
60
- condition.operator === "eq" &&
61
- condition.mode !== "insensitive" &&
62
- (condition.field === "id" ||
63
- getFieldAttributes({
64
- field: condition.field,
65
- model,
66
- }).unique === true));
67
- return (await run((database) => {
68
- const relation = refineRelation(modelRelation(database, model, mapModelName), { where });
69
- return hasUniqueCondition
70
- ? relation.update(update)
71
- : Effect.map(relation.updateAll(update), (rows) => rows[0] ?? null);
72
- }));
73
- },
74
- updateMany: ({ model, update, where }) => run((database) => Effect.map(refineRelation(modelRelation(database, model, mapModelName), {
75
- where,
76
- }).updateAll(update), (rows) => rows.length)),
77
- delete: ({ model, where }) => {
78
- const hasId = where.some((condition) => condition.connector !== "OR" &&
79
- condition.field === "id" &&
80
- condition.operator === "eq");
81
- return run((database) => {
82
- const relation = refineRelation(modelRelation(database, model, mapModelName), { where });
83
- return hasId
84
- ? Effect.asVoid(relation.delete())
85
- : Effect.asVoid(relation.deleteAll());
86
- });
87
- },
88
- deleteMany: ({ model, where }) => run((database) => Effect.map(refineRelation(modelRelation(database, model, mapModelName), {
89
- where,
90
- }).deleteAll(), (rows) => rows.length)),
91
- count: ({ model, where }) => run((database) => refineRelation(modelRelation(database, model, mapModelName), {
92
- where: where,
93
- }).count()),
94
- options: {
95
- usePlural: adapterOptions.usePlural ?? false,
96
- },
97
- }),
98
- });
99
- return factory(authOptions);
100
- };
40
+ adapter: makeRowAdapter(query, adapterOptions.usePlural ?? false),
41
+ });
42
+ return factory(authOptions);
43
+ };
44
+ }
101
45
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/better-auth/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/better-auth/adapter.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,6 @@
1
- import { and } from "@shivaedev/effect-prisma";
2
- import type { Where } from "better-auth";
3
1
  import type { Effect, Option } from "effect";
4
- type CleanedWhere = Required<Where>;
5
- type Expression = Parameters<typeof and>[number];
6
- interface DynamicField {
7
- eq(value: unknown): Expression;
8
- neq(value: unknown): Expression;
9
- gt(value: unknown): Expression;
10
- gte(value: unknown): Expression;
11
- lt(value: unknown): Expression;
12
- lte(value: unknown): Expression;
13
- in(value: ReadonlyArray<unknown>): Expression;
14
- notIn(value: ReadonlyArray<unknown>): Expression;
15
- like(value: string): Expression;
16
- ilike?(value: string): Expression;
17
- isNull(): Expression;
18
- isNotNull(): Expression;
19
- asc(): unknown;
20
- desc(): unknown;
21
- }
22
- export interface DynamicRelation<Requirements> {
2
+ import { type CleanedWhere, type DynamicField, type Expression } from "./where.ts";
3
+ export interface DynamicRelation<Requirements> extends Effect.Effect<ReadonlyArray<Record<string, unknown>>, unknown, Requirements> {
23
4
  where(predicate: (fields: Record<string, DynamicField>) => Expression): DynamicRelation<Requirements>;
24
5
  orderBy(ordering: (fields: Record<string, DynamicField>) => unknown): DynamicRelation<Requirements>;
25
6
  take(count: number): DynamicRelation<Requirements>;
@@ -34,14 +15,13 @@ export interface DynamicRelation<Requirements> {
34
15
  deleteAll(): Effect.Effect<ReadonlyArray<Record<string, unknown>>, unknown, Requirements>;
35
16
  }
36
17
  export declare const refineRelation: <Requirements>(relation: DynamicRelation<Requirements>, options: {
37
- readonly where?: ReadonlyArray<CleanedWhere>;
38
- readonly select?: ReadonlyArray<string>;
39
- readonly limit?: number;
40
- readonly offset?: number;
18
+ readonly where?: ReadonlyArray<CleanedWhere> | undefined;
19
+ readonly select?: ReadonlyArray<string> | undefined;
20
+ readonly limit?: number | undefined;
21
+ readonly offset?: number | undefined;
41
22
  readonly sortBy?: {
42
23
  readonly direction: "asc" | "desc";
43
24
  readonly field: string;
44
- };
25
+ } | undefined;
45
26
  }) => DynamicRelation<Requirements>;
46
- export {};
47
27
  //# sourceMappingURL=relation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/better-auth/relation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/better-auth/relation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAmB,MAAM,YAAY,CAAC;AAEpG,MAAM,WAAW,eAAe,CAAC,YAAY,CAAE,SAAQ,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC;IAClI,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACtG,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACpG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACxE,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACtF,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACrG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5G,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACvH,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/E,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;CAC1F;AAED,eAAO,MAAM,cAAc,GAAI,YAAY,EAC1C,UAAU,eAAe,CAAC,YAAY,CAAC,EACvC,SAAS;IACR,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EACb;QACA,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACtB,GACD,SAAS,CAAC;CACb,KACC,eAAe,CAAC,YAAY,CAuB9B,CAAC"}
@@ -1,87 +1,5 @@
1
- import { all, and, not, or } from "@shivaedev/effect-prisma";
2
- const escapeLike = (value) => value.replaceAll("\\", "\\\\").replaceAll("%", "\\%").replaceAll("_", "\\_");
3
- const comparison = (field, where) => {
4
- const value = where.value;
5
- if (where.mode === "insensitive" &&
6
- typeof value === "string" &&
7
- field.ilike !== undefined) {
8
- if (where.operator === "eq")
9
- return field.ilike(escapeLike(value));
10
- if (where.operator === "ne")
11
- return not(field.ilike(escapeLike(value)));
12
- }
13
- switch (where.operator) {
14
- case "eq":
15
- return value === null ? field.isNull() : field.eq(value);
16
- case "ne":
17
- return value === null ? field.isNotNull() : field.neq(value);
18
- case "lt":
19
- return field.lt(value);
20
- case "lte":
21
- return field.lte(value);
22
- case "gt":
23
- return field.gt(value);
24
- case "gte":
25
- return field.gte(value);
26
- case "in": {
27
- const values = (Array.isArray(value) ? value : [value]).filter((item) => item !== null);
28
- const ilike = field.ilike;
29
- return values.length === 0
30
- ? and(field.isNull(), field.isNotNull())
31
- : where.mode === "insensitive" &&
32
- ilike !== undefined &&
33
- values.every((item) => typeof item === "string")
34
- ? or(...values.map((item) => ilike(escapeLike(String(item)))))
35
- : field.in(values);
36
- }
37
- case "not_in": {
38
- const values = (Array.isArray(value) ? value : [value]).filter((item) => item !== null);
39
- if (values.length === 0)
40
- return undefined;
41
- const ilike = field.ilike;
42
- return where.mode === "insensitive" &&
43
- ilike !== undefined &&
44
- values.every((item) => typeof item === "string")
45
- ? and(...values.map((item) => not(ilike(escapeLike(String(item))))))
46
- : field.notIn(values);
47
- }
48
- case "contains":
49
- case "starts_with":
50
- case "ends_with": {
51
- if (typeof value !== "string") {
52
- throw new TypeError(`${where.operator} requires a string value`);
53
- }
54
- const escaped = escapeLike(value);
55
- const pattern = where.operator === "contains"
56
- ? `%${escaped}%`
57
- : where.operator === "starts_with"
58
- ? `${escaped}%`
59
- : `%${escaped}`;
60
- return where.mode === "insensitive" && field.ilike !== undefined
61
- ? field.ilike(pattern)
62
- : field.like(pattern);
63
- }
64
- }
65
- };
66
- const whereExpression = (fields, where) => {
67
- const conjunctions = [];
68
- const disjunctions = [];
69
- for (const condition of where) {
70
- const field = fields[condition.field];
71
- if (field === undefined) {
72
- throw new TypeError(`Unknown database field: ${condition.field}`);
73
- }
74
- const expression = comparison(field, condition);
75
- if (expression === undefined)
76
- continue;
77
- (condition.connector === "OR" ? disjunctions : conjunctions).push(expression);
78
- }
79
- if (disjunctions.length > 0)
80
- conjunctions.push(or(...disjunctions));
81
- if (conjunctions.length === 0)
82
- return all();
83
- return conjunctions.length === 1 ? conjunctions[0] : and(...conjunctions);
84
- };
1
+ import { all } from "@shivaedev/effect-prisma";
2
+ import { whereExpression } from "./where.js";
85
3
  export const refineRelation = (relation, options) => {
86
4
  let refined = relation;
87
5
  if (options.where !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/better-auth/relation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAiE7D,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAC5C,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAE9E,MAAM,UAAU,GAAG,CAClB,KAAmB,EACnB,KAAmB,EACM,EAAE;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IACC,KAAK,CAAC,IAAI,KAAK,aAAa;QAC5B,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,KAAK,KAAK,SAAS,EACxB,CAAC;QACF,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,IAAI;YACR,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1D,KAAK,IAAI;YACR,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9D,KAAK,IAAI;YACR,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,KAAK;YACT,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,IAAI;YACR,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,KAAK;YACT,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,CAAC,CAAC;YACX,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAC7D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CACvB,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;gBACzB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa;oBAC5B,KAAK,KAAK,SAAS;oBACnB,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;oBACjD,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9D,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAC7D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CACvB,CAAC;YACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,OAAO,KAAK,CAAC,IAAI,KAAK,aAAa;gBAClC,KAAK,KAAK,SAAS;gBACnB,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;gBAChD,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,UAAU,CAAC;QAChB,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,0BAA0B,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,OAAO,GACZ,KAAK,CAAC,QAAQ,KAAK,UAAU;gBAC5B,CAAC,CAAC,IAAI,OAAO,GAAG;gBAChB,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,aAAa;oBACjC,CAAC,CAAC,GAAG,OAAO,GAAG;oBACf,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;gBAC/D,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;gBACtB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACvB,MAAoC,EACpC,KAAkC,EACT,EAAE;IAC3B,MAAM,YAAY,GAAiB,EAAE,CAAC;IACtC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,SAAS,CAAC,2BAA2B,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,UAAU,KAAK,SAAS;YAAE,SAAS;QACvC,CAAC,SAAS,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAChE,UAAU,CACV,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IACpE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC;IAC5C,OAAO,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,QAAuC,EACvC,OASC,EAC+B,EAAE;IAClC,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YAClC,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,SAAS,CAAC,2BAA2B,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1E,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/better-auth/relation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE/C,OAAO,EAAyD,eAAe,EAAE,MAAM,YAAY,CAAC;AAiBpG,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,QAAuC,EACvC,OAWC,EAC+B,EAAE;IAClC,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YAClC,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,SAAS,CAAC,2BAA2B,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1E,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AdapterFactoryCustomizeAdapterCreator } from "better-auth/adapters";
2
+ import { Effect } from "effect";
3
+ import type { DynamicRelation, refineRelation } from "./relation.ts";
4
+ type Refinement = Parameters<typeof refineRelation>[1];
5
+ export type RelationQuery = <Value>(model: string, refinement: Refinement, use: (relation: DynamicRelation<unknown>) => Effect.Effect<Value, unknown, unknown>) => Promise<Value>;
6
+ export declare const makeRowAdapter: (query: RelationQuery, usePlural: boolean) => AdapterFactoryCustomizeAdapterCreator;
7
+ export {};
8
+ //# sourceMappingURL=row-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-adapter.d.ts","sourceRoot":"","sources":["../../src/better-auth/row-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qCAAqC,EAAiB,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOrE,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AASvD,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EACjC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAC/E,OAAO,CAAC,KAAK,CAAC,CAAC;AAgBpB,eAAO,MAAM,cAAc,GACzB,OAAO,aAAa,EAAE,WAAW,OAAO,KAAG,qCAqC3C,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { Effect, Option } from "effect";
2
+ function rowTyped(adapter) {
3
+ return adapter;
4
+ }
5
+ const rejectJoin = (join) => {
6
+ if (join !== undefined) {
7
+ throw new TypeError("The Effect Prisma Better Auth adapter does not support experimental native joins");
8
+ }
9
+ };
10
+ const namesId = (condition) => condition.connector !== "OR" && condition.field === "id" && condition.operator === "eq";
11
+ export const makeRowAdapter = (query, usePlural) => ({ debugLog, getFieldAttributes }) => {
12
+ const isUnique = (model, condition) => condition.connector !== "OR" &&
13
+ condition.operator === "eq" &&
14
+ condition.mode !== "insensitive" &&
15
+ (condition.field === "id" || getFieldAttributes({ field: condition.field, model }).unique === true);
16
+ return rowTyped({
17
+ create: ({ data, model, select }) => {
18
+ debugLog("create", { model });
19
+ return query(model, { select }, (relation) => relation.create(data));
20
+ },
21
+ findOne: ({ join, model, select, where }) => {
22
+ rejectJoin(join);
23
+ return query(model, { select, where }, (relation) => Effect.map(relation.first(), Option.getOrNull));
24
+ },
25
+ findMany: ({ join, limit, model, offset, select, sortBy, where }) => {
26
+ rejectJoin(join);
27
+ return query(model, { limit, offset, select, sortBy, where }, (relation) => relation);
28
+ },
29
+ update: ({ model, update, where }) => {
30
+ if (where.length === 0)
31
+ return Promise.resolve(null);
32
+ const unique = where.some((condition) => isUnique(model, condition));
33
+ return query(model, { where }, (relation) => unique ? relation.update(update) : Effect.map(relation.updateAll(update), (rows) => rows[0] ?? null));
34
+ },
35
+ updateMany: ({ model, update, where }) => query(model, { where }, (relation) => Effect.map(relation.updateAll(update), (rows) => rows.length)),
36
+ delete: ({ model, where }) => {
37
+ const byId = where.some(namesId);
38
+ return query(model, { where }, (relation) => (byId ? Effect.asVoid(relation.delete()) : Effect.asVoid(relation.deleteAll())));
39
+ },
40
+ deleteMany: ({ model, where }) => query(model, { where }, (relation) => Effect.map(relation.deleteAll(), (rows) => rows.length)),
41
+ count: ({ model, where }) => query(model, { where }, (relation) => relation.count()),
42
+ options: { usePlural },
43
+ });
44
+ };
45
+ //# sourceMappingURL=row-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-adapter.js","sourceRoot":"","sources":["../../src/better-auth/row-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { and } from "@shivaedev/effect-prisma";
2
+ import type { Where } from "better-auth";
3
+ export type CleanedWhere = Required<Where>;
4
+ export type Expression = Parameters<typeof and>[number];
5
+ export interface DynamicField {
6
+ eq(value: unknown): Expression;
7
+ neq(value: unknown): Expression;
8
+ gt(value: unknown): Expression;
9
+ gte(value: unknown): Expression;
10
+ lt(value: unknown): Expression;
11
+ lte(value: unknown): Expression;
12
+ in(value: ReadonlyArray<unknown>): Expression;
13
+ notIn(value: ReadonlyArray<unknown>): Expression;
14
+ like(value: string): Expression;
15
+ ilike?(value: string): Expression;
16
+ isNull(): Expression;
17
+ isNotNull(): Expression;
18
+ asc(): unknown;
19
+ desc(): unknown;
20
+ }
21
+ export declare const whereExpression: (fields: Record<string, DynamicField>, where: ReadonlyArray<CleanedWhere>) => Expression | undefined;
22
+ //# sourceMappingURL=where.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where.d.ts","sourceRoot":"","sources":["../../src/better-auth/where.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,GAAG,EAAW,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,YAAY;IAC5B,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;IAC/B,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;IAChC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;IAC/B,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;IAChC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;IAC/B,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;IAChC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;IAC9C,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;IAClC,MAAM,IAAI,UAAU,CAAC;IACrB,SAAS,IAAI,UAAU,CAAC;IACxB,GAAG,IAAI,OAAO,CAAC;IACf,IAAI,IAAI,OAAO,CAAC;CAChB;AA+ED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,aAAa,CAAC,YAAY,CAAC,KAAG,UAAU,GAAG,SAiBvH,CAAC"}