@shivaedev/effect-prisma 0.8.0 → 0.9.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.
- package/CHANGELOG.md +18 -0
- package/README.md +198 -155
- package/dist/database.d.ts +5 -5
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +12 -8
- package/dist/database.js.map +1 -1
- package/dist/databaseTypes.d.ts +17 -17
- package/dist/databaseTypes.d.ts.map +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/internal/adapters/transaction-settlement.d.ts.map +1 -1
- package/dist/internal/adapters/transaction-settlement.js +9 -7
- package/dist/internal/adapters/transaction-settlement.js.map +1 -1
- package/dist/internal/client-lifecycle.d.ts.map +1 -1
- package/dist/internal/contract-normalization.d.ts.map +1 -1
- package/dist/internal/database-facade.d.ts +11 -11
- package/dist/internal/database-facade.d.ts.map +1 -1
- package/dist/internal/database-facade.js.map +1 -1
- package/dist/internal/database-factory.d.ts +1 -1
- package/dist/internal/database-factory.d.ts.map +1 -1
- package/dist/internal/database-factory.js +2 -2
- package/dist/internal/database-factory.js.map +1 -1
- package/dist/internal/dynamic.d.ts.map +1 -1
- package/dist/internal/dynamic.js +3 -1
- package/dist/internal/dynamic.js.map +1 -1
- package/dist/internal/executor.d.ts +6 -6
- package/dist/internal/executor.d.ts.map +1 -1
- package/dist/internal/promise.d.ts.map +1 -1
- package/dist/internal/query-execution.d.ts.map +1 -1
- package/dist/internal/recipe.d.ts.map +1 -1
- package/dist/internal/recipe.js +10 -10
- package/dist/internal/recipe.js.map +1 -1
- package/dist/internal/relation-plan.d.ts.map +1 -1
- package/dist/internal/relation-result.d.ts.map +1 -1
- package/dist/internal/relation-result.js +6 -2
- package/dist/internal/relation-result.js.map +1 -1
- package/dist/internal/relation-runtime.d.ts +1 -1
- package/dist/internal/relation-runtime.d.ts.map +1 -1
- package/dist/internal/relation-runtime.js +11 -6
- package/dist/internal/relation-runtime.js.map +1 -1
- package/dist/internal/relation-stream.d.ts +1 -1
- package/dist/internal/relation-stream.d.ts.map +1 -1
- package/dist/internal/relation-stream.js +9 -7
- package/dist/internal/relation-stream.js.map +1 -1
- package/dist/internal/sqlite-datetime.d.ts.map +1 -1
- package/dist/internal/sqlite-datetime.js +11 -9
- package/dist/internal/sqlite-datetime.js.map +1 -1
- package/dist/internal/sqlite-pragmas.d.ts.map +1 -1
- package/dist/internal/testing.d.ts +5 -5
- package/dist/internal/testing.d.ts.map +1 -1
- package/dist/internal/testing.js.map +1 -1
- package/dist/internal/transaction.d.ts +6 -6
- package/dist/internal/transaction.d.ts.map +1 -1
- package/dist/internal/transaction.js +5 -3
- package/dist/internal/transaction.js.map +1 -1
- package/dist/relation/include.d.ts +20 -20
- package/dist/relation/include.d.ts.map +1 -1
- package/dist/relation.d.ts +23 -23
- package/dist/relation.d.ts.map +1 -1
- package/dist/sqlite.d.ts.map +1 -1
- package/dist/sqlite.js +8 -6
- package/dist/sqlite.js.map +1 -1
- package/docs/north-star.md +47 -0
- package/docs/roadmap.md +32 -0
- package/package.json +27 -23
- package/src/database.ts +29 -23
- package/src/databaseTypes.ts +31 -31
- package/src/internal/adapters/transaction-settlement.ts +9 -8
- package/src/internal/database-facade.ts +27 -27
- package/src/internal/database-factory.ts +12 -12
- package/src/internal/dynamic.ts +3 -1
- package/src/internal/executor.ts +6 -6
- package/src/internal/recipe.ts +10 -10
- package/src/internal/relation-result.ts +6 -3
- package/src/internal/relation-runtime.ts +25 -20
- package/src/internal/relation-stream.ts +5 -4
- package/src/internal/sqlite-datetime.ts +11 -9
- package/src/internal/testing.ts +8 -8
- package/src/internal/transaction.ts +16 -15
- package/src/relation/include.ts +48 -48
- package/src/relation.ts +38 -38
- package/src/sqlite.ts +8 -6
|
@@ -3,13 +3,15 @@ const zonelessDatetime = /^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}(?::\d{2})?(?:\.\d
|
|
|
3
3
|
// SQLite computes `datetime('now')`, the default `prisma-next db init` generates, in UTC but writes it as `YYYY-MM-DD HH:MM:SS`
|
|
4
4
|
// with no zone, and `new Date` reads that form as local time. Values with a zone and date-only values already read as UTC.
|
|
5
5
|
export const normalizeSqliteDatetime = (value) => value.replace(zonelessDatetime, "$1T$2Z");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
function decodeAsUtc(codec) {
|
|
7
|
+
return {
|
|
8
|
+
decode: (wire, context) => codec.decode(typeof wire === "string" ? normalizeSqliteDatetime(wire) : wire, context),
|
|
9
|
+
decodeJson: (json) => codec.decodeJson(typeof json === "string" ? normalizeSqliteDatetime(json) : json),
|
|
10
|
+
encode: (value, context) => codec.encode(value, context),
|
|
11
|
+
encodeJson: (value) => codec.encodeJson(value),
|
|
12
|
+
id: sqliteDatetimeCodecId,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
13
15
|
// The registry resolves codecs for rows and included relations alike, and Prisma Next rejects a second descriptor for a registered
|
|
14
16
|
// codec id, so wrapping the registry is the one way to cover every read. It must run before the first query, which reads the
|
|
15
17
|
// registry off the context. Codecs are matched by reference because a materialized codec's `id` accessor throws.
|
|
@@ -17,7 +19,7 @@ export const decodeSqliteDatetimesAsUtc = (context) => {
|
|
|
17
19
|
const registry = context.contractCodecs;
|
|
18
20
|
const descriptors = context.codecDescriptors;
|
|
19
21
|
const utcCodecs = new WeakMap();
|
|
20
|
-
|
|
22
|
+
function wrap(codec) {
|
|
21
23
|
const existing = utcCodecs.get(codec);
|
|
22
24
|
if (existing !== undefined) {
|
|
23
25
|
return existing;
|
|
@@ -25,7 +27,7 @@ export const decodeSqliteDatetimesAsUtc = (context) => {
|
|
|
25
27
|
const utc = decodeAsUtc(codec);
|
|
26
28
|
utcCodecs.set(codec, utc);
|
|
27
29
|
return utc;
|
|
28
|
-
}
|
|
30
|
+
}
|
|
29
31
|
const utcRegistry = {
|
|
30
32
|
forCodecRef: (reference) => {
|
|
31
33
|
const codec = registry.forCodecRef(reference);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-datetime.js","sourceRoot":"","sources":["../../src/internal/sqlite-datetime.ts"],"names":[],"mappings":"AAQA,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAElD,MAAM,gBAAgB,GAAG,8DAA8D,CAAC;AAExF,gIAAgI;AAChI,2HAA2H;AAC3H,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAE5G,
|
|
1
|
+
{"version":3,"file":"sqlite-datetime.js","sourceRoot":"","sources":["../../src/internal/sqlite-datetime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-pragmas.d.ts","sourceRoot":"","sources":["../../src/internal/sqlite-pragmas.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,aAAa,CAAC;AAGtC,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"sqlite-pragmas.d.ts","sourceRoot":"","sources":["../../src/internal/sqlite-pragmas.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,aAAa,CAAC;AAGtC,eAAO,MAAM,oBAAoB,SAAU,MAAM,KAAG,IAMnD,CAAC;AAGF,eAAO,MAAM,kBAAkB,SAAU,MAAM,WAAW,SAAS,MAAM,EAAE,KAAG,IAa7E,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { Effect } from "effect";
|
|
2
2
|
import type { PrismaError } from "#error.ts";
|
|
3
3
|
export declare const DatabaseTestingTypeId: unique symbol;
|
|
4
|
-
export interface DatabaseTesting<
|
|
5
|
-
readonly withTestTransaction: <A, E, R>(program: Effect.Effect<A, E, R> & (
|
|
4
|
+
export interface DatabaseTesting<TDatabaseId> {
|
|
5
|
+
readonly withTestTransaction: <A, E, R>(program: Effect.Effect<A, E, R> & (TDatabaseId extends R ? unknown : never)) => Effect.Effect<A, E | PrismaError, TDatabaseId | Exclude<R, TDatabaseId>>;
|
|
6
6
|
}
|
|
7
|
-
export interface DatabaseWithTesting<
|
|
8
|
-
readonly [DatabaseTestingTypeId]: DatabaseTesting<
|
|
7
|
+
export interface DatabaseWithTesting<TDatabaseId> {
|
|
8
|
+
readonly [DatabaseTestingTypeId]: DatabaseTesting<TDatabaseId>;
|
|
9
9
|
}
|
|
10
|
-
export declare const getDatabaseTesting: <
|
|
10
|
+
export declare const getDatabaseTesting: <TDatabaseId>(database: object) => DatabaseTesting<TDatabaseId>;
|
|
11
11
|
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/internal/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAA+D,CAAC;AAE3G,MAAM,WAAW,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/internal/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAA+D,CAAC;AAE3G,MAAM,WAAW,eAAe,CAAC,WAAW;IAC3C,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACrC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,KACvE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB,CAAC,WAAW;IAC/C,QAAQ,CAAC,CAAC,qBAAqB,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;CAC/D;AAQD,eAAO,MAAM,kBAAkB,GAAI,WAAW,YAAY,MAAM,KAAG,eAAe,CAAC,WAAW,CAQ7F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/internal/testing.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAkB,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;AAc3G,SAAS,UAAU,CAAC,OAAe;IAClC,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/internal/testing.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAkB,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;AAc3G,SAAS,UAAU,CAAC,OAAe;IAClC,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAc,QAAgB,EAAgC,EAAE;IACjG,MAAM,OAAO,GAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAEtE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,KAAK,UAAU,EAAE,CAAC;QAC1H,MAAM,IAAI,SAAS,CAAC,uEAAuE,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO,UAAU,CAAc,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC"}
|
|
@@ -3,16 +3,16 @@ import { Effect, Exit, Semaphore } from "effect";
|
|
|
3
3
|
import type { PrismaError } from "#error.ts";
|
|
4
4
|
import { type SettledConnection, type SettledTransaction } from "#internal/adapters/transaction-settlement.ts";
|
|
5
5
|
import type { AnySqlContract, DatabaseExecutor } from "./executor.ts";
|
|
6
|
-
export type TransactionOrm<
|
|
6
|
+
export type TransactionOrm<TContract extends AnySqlContract> = ReturnType<typeof orm<TContract>>;
|
|
7
7
|
export declare const withTransactionSemaphore: <A, E, R>(semaphore: Semaphore.Semaphore | undefined, transaction: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
8
|
-
export interface TransactionResource<
|
|
8
|
+
export interface TransactionResource<TModels extends object, TContract extends AnySqlContract> {
|
|
9
9
|
readonly connection: SettledConnection;
|
|
10
|
-
readonly executor: DatabaseExecutor<
|
|
10
|
+
readonly executor: DatabaseExecutor<TModels, TContract> & {
|
|
11
11
|
readonly querySemaphore: Semaphore.Semaphore;
|
|
12
12
|
};
|
|
13
13
|
readonly transaction: SettledTransaction;
|
|
14
14
|
}
|
|
15
|
-
export declare const acquireTransaction: <
|
|
16
|
-
export declare const releaseTransaction: <
|
|
17
|
-
export declare const releaseTestTransaction: <
|
|
15
|
+
export declare const acquireTransaction: <TModels extends object, TContract extends AnySqlContract>(current: DatabaseExecutor<TModels, TContract>, models: (orm: TransactionOrm<TContract>) => TModels, mode: "test" | "transaction") => Effect.Effect<TransactionResource<TModels, TContract>, PrismaError>;
|
|
16
|
+
export declare const releaseTransaction: <TModels extends object, TContract extends AnySqlContract, A, E>(resource: TransactionResource<TModels, TContract>, exit: Exit.Exit<A, E>) => Effect.Effect<void, PrismaError>;
|
|
17
|
+
export declare const releaseTestTransaction: <TModels extends object, TContract extends AnySqlContract, A, E>(resource: TransactionResource<TModels, TContract>, exit: Exit.Exit<A, E>) => Effect.Effect<void, PrismaError>;
|
|
18
18
|
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAoB,MAAM,8CAA8C,CAAC;AACjI,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtE,MAAM,MAAM,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAoB,MAAM,8CAA8C,CAAC;AACjI,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtE,MAAM,MAAM,cAAc,CAAC,SAAS,SAAS,cAAc,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjG,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,aACpC,SAAS,CAAC,SAAS,GAAG,SAAS,eAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACjC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAgF,CAAC;AAEzG,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,MAAM,EAAE,SAAS,SAAS,cAAc;IAC5F,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG;QACzD,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC;KAC7C,CAAC;IACF,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;CACzC;AAED,eAAO,MAAM,kBAAkB,GAAI,OAAO,SAAS,MAAM,EAAE,SAAS,SAAS,cAAc,WACjF,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,UACrC,CAAC,GAAG,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK,OAAO,QAC7C,MAAM,GAAG,aAAa,KAC1B,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,WAAW,CAgClE,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAAI,OAAO,SAAS,MAAM,EAAE,SAAS,SAAS,cAAc,EAAE,CAAC,EAAE,CAAC,YACtF,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,QAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAA4C,CAAC;AAE/E,eAAO,MAAM,sBAAsB,GAAI,OAAO,SAAS,MAAM,EAAE,SAAS,SAAS,cAAc,EAAE,CAAC,EAAE,CAAC,YAC1F,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,QAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAA6C,CAAC"}
|
|
@@ -36,7 +36,9 @@ export const acquireTransaction = (current, models, mode) => fromPrismaPromise(a
|
|
|
36
36
|
});
|
|
37
37
|
export const releaseTransaction = (resource, exit) => settleTransaction(resource, exit, true);
|
|
38
38
|
export const releaseTestTransaction = (resource, exit) => settleTransaction(resource, exit, false);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
function settleTransaction(resource, exit, commitOnSuccess) {
|
|
40
|
+
return Effect.uninterruptible(Effect.sync(() => {
|
|
41
|
+
resource.executor.liveness.open = false;
|
|
42
|
+
}).pipe(Effect.andThen(resource.executor.querySemaphore.withPermit(fromPrismaPromise(() => settleConnection(resource, commitOnSuccess && Exit.isSuccess(exit)))))));
|
|
43
|
+
}
|
|
42
44
|
//# sourceMappingURL=transaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAmD,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAEjI,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,SAA0C,EAC1C,WAAmC,EACV,EAAE,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAUzG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAmD,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAEjI,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,SAA0C,EAC1C,WAAmC,EACV,EAAE,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAUzG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,OAA6C,EAC7C,MAAmD,EACnD,IAA4B,EAC0C,EAAE,CACxE,iBAAiB,CAAC,KAAK,IAAI,EAAE;IAC5B,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC;IAE/D,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,cAAc,GAAG,GAAG,CAAC;YAC1B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;YAC/B,OAAO,EAAE,WAAW;SACpB,CAAC,CAAC;QAEH,OAAO;YACN,UAAU;YACV,QAAQ,EAAE;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE;oBACT,UAAU,EAAE,4BAA4B;oBACxC,IAAI,EAAE,IAAI;iBACV;gBACD,IAAI;gBACJ,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;gBAC9B,cAAc,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;gBACvC,mBAAmB,EAAE,EAAE;gBACvB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;aAClD;YACD,WAAW;SACX,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,QAAiD,EACjD,IAAqB,EACc,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,QAAiD,EACjD,IAAqB,EACc,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAEhF,SAAS,iBAAiB,CACzB,QAAiD,EACjD,IAAqB,EACrB,eAAwB;IAExB,OAAO,MAAM,CAAC,eAAe,CAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QAChB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;IACzC,CAAC,CAAC,CAAC,IAAI,CACN,MAAM,CAAC,OAAO,CACb,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACzI,CACD,CACD,CAAC;AACH,CAAC"}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import type { DefaultModelRow, Collection as PrismaCollection, RelationNames } from "@prisma-next/sql-orm-client";
|
|
2
2
|
import type { Relation, RelationQuery } from "#relation.ts";
|
|
3
3
|
import type { AnyPostgresContract, IncludedRelationValue, IsToManyRelation, RelatedModelNameOf } from "./include-metadata.ts";
|
|
4
|
-
type Simplify<
|
|
5
|
-
[
|
|
4
|
+
type Simplify<TValue> = {
|
|
5
|
+
[TKey in keyof TValue]: TValue[TKey];
|
|
6
6
|
};
|
|
7
|
-
type QueryValue<
|
|
8
|
-
type AcceptRelatedQuery<
|
|
9
|
-
RelationQuery<infer _Value, infer
|
|
10
|
-
] ? [
|
|
11
|
-
type IncludedQueryValue<
|
|
12
|
-
type QueryShapeValue<
|
|
13
|
-
readonly [
|
|
7
|
+
type QueryValue<TQuery> = TQuery extends RelationQuery<infer TValue, infer _Contract, infer _Model, infer _DatabaseId> ? TValue : never;
|
|
8
|
+
type AcceptRelatedQuery<TQuery, TContract extends AnyPostgresContract, TModel extends string, TDatabaseId> = [TQuery] extends [
|
|
9
|
+
RelationQuery<infer _Value, infer TQueryContract, infer TQueryModel, infer TQueryDatabaseId>
|
|
10
|
+
] ? [TQueryContract] extends [TContract] ? [TContract] extends [TQueryContract] ? [TQueryDatabaseId] extends [TDatabaseId] ? [TDatabaseId] extends [TQueryDatabaseId] ? TQueryModel extends TModel ? unknown : never : never : never : never : never : never;
|
|
11
|
+
type IncludedQueryValue<TQuery, TContract extends AnyPostgresContract, TModel extends string, TRelationName extends string> = QueryValue<TQuery> extends ReadonlyArray<infer TRow> ? IncludedRelationValue<TContract, TModel, TRelationName, TRow> : QueryValue<TQuery>;
|
|
12
|
+
type QueryShapeValue<TShape extends Readonly<Record<string, unknown>>> = {
|
|
13
|
+
readonly [TKey in keyof TShape]: QueryValue<TShape[TKey]>;
|
|
14
14
|
};
|
|
15
|
-
type AcceptRelatedQueryShape<
|
|
16
|
-
readonly [
|
|
15
|
+
type AcceptRelatedQueryShape<TShape extends Readonly<Record<string, unknown>>, TContract extends AnyPostgresContract, TModel extends string, TDatabaseId> = {
|
|
16
|
+
readonly [TKey in keyof TShape]: TShape[TKey] & AcceptRelatedQuery<TShape[TKey], TContract, TModel, TDatabaseId>;
|
|
17
17
|
};
|
|
18
|
-
type WithIncludedRelation<
|
|
19
|
-
readonly [
|
|
20
|
-
}>,
|
|
21
|
-
interface IncludeOverloads<
|
|
22
|
-
<
|
|
23
|
-
<
|
|
24
|
-
<
|
|
18
|
+
type WithIncludedRelation<TCollection, TContract extends AnyPostgresContract, TModel extends string, TRelationName extends string, TValue> = TCollection extends PrismaCollection<TContract, TModel, infer TRow, infer TState> ? PrismaCollection<TContract, TModel, Simplify<TRow & {
|
|
19
|
+
readonly [TKey in TRelationName]: TValue;
|
|
20
|
+
}>, TState> : never;
|
|
21
|
+
interface IncludeOverloads<TCollection, TContract extends AnyPostgresContract, TModel extends string, TDatabaseId> {
|
|
22
|
+
<TRelationName extends RelationNames<TContract, TModel>>(relationName: TRelationName): Relation<WithIncludedRelation<TCollection, TContract, TModel, TRelationName, IncludedRelationValue<TContract, TModel, TRelationName, DefaultModelRow<TContract, RelatedModelNameOf<TContract, TModel, TRelationName>>>>, TContract, TModel, TDatabaseId>;
|
|
23
|
+
<TRelationName extends RelationNames<TContract, TModel>, TQuery>(relationName: TRelationName, query: TQuery & AcceptRelatedQuery<TQuery, TContract, RelatedModelNameOf<TContract, TModel, TRelationName>, TDatabaseId>): Relation<WithIncludedRelation<TCollection, TContract, TModel, TRelationName, IncludedQueryValue<TQuery, TContract, TModel, TRelationName>>, TContract, TModel, TDatabaseId>;
|
|
24
|
+
<TRelationName extends RelationNames<TContract, TModel>, TShape extends Readonly<Record<string, unknown>>>(relationName: TRelationName, shape: IsToManyRelation<TContract, TModel, TRelationName> extends true ? keyof TShape extends never ? never : TShape & AcceptRelatedQueryShape<TShape, TContract, RelatedModelNameOf<TContract, TModel, TRelationName>, TDatabaseId> : never): Relation<WithIncludedRelation<TCollection, TContract, TModel, TRelationName, QueryShapeValue<TShape>>, TContract, TModel, TDatabaseId>;
|
|
25
25
|
}
|
|
26
|
-
export type IncludeMethod<
|
|
27
|
-
include: IncludeOverloads<
|
|
26
|
+
export type IncludeMethod<TCollection, TContract, TModel extends string, TDatabaseId> = TContract extends AnyPostgresContract ? TCollection extends PrismaCollection<TContract, TModel, infer _Row, infer _State> ? {
|
|
27
|
+
include: IncludeOverloads<TCollection, TContract, TModel, TDatabaseId>;
|
|
28
28
|
} : Record<never, never> : Record<never, never>;
|
|
29
29
|
export {};
|
|
30
30
|
//# sourceMappingURL=include.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"include.d.ts","sourceRoot":"","sources":["../../src/relation/include.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,IAAI,gBAAgB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAClH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE9H,KAAK,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"include.d.ts","sourceRoot":"","sources":["../../src/relation/include.ts"],"names":[],"mappings":"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"}
|
package/dist/relation.d.ts
CHANGED
|
@@ -2,34 +2,34 @@ import type { Effect } from "effect";
|
|
|
2
2
|
import type { PrismaRelationMethods } from "#relation/prisma-methods.ts";
|
|
3
3
|
import type { PrismaError } from "./error.ts";
|
|
4
4
|
type AnyFunction = (...arguments_: readonly never[]) => unknown;
|
|
5
|
-
export type CollectionResult<
|
|
6
|
-
all: () => infer
|
|
7
|
-
} ? Awaited<
|
|
8
|
-
type NormalizeTerminal<
|
|
9
|
-
type WrapReturn<
|
|
10
|
-
type WrapFunction<
|
|
11
|
-
(...arguments_: infer
|
|
12
|
-
(...arguments_: infer
|
|
13
|
-
(...arguments_: infer
|
|
14
|
-
(...arguments_: infer
|
|
15
|
-
(...arguments_: infer
|
|
16
|
-
(...arguments_: infer
|
|
17
|
-
} ? ((...arguments_:
|
|
18
|
-
type FunctionKeys<
|
|
19
|
-
[
|
|
20
|
-
}[keyof
|
|
5
|
+
export type CollectionResult<TCollection> = TCollection extends {
|
|
6
|
+
all: () => infer TResult;
|
|
7
|
+
} ? Awaited<TResult> : never;
|
|
8
|
+
type NormalizeTerminal<TName, TResult> = TName extends "first" ? import("effect").Option.Option<Exclude<TResult, null>> : TResult;
|
|
9
|
+
type WrapReturn<TName, TResult, TContract, TModel extends string, TDatabaseId> = TResult extends PromiseLike<infer TValue> ? Effect.Effect<NormalizeTerminal<TName, Awaited<TValue>>, PrismaError> : TResult extends object ? Relation<TResult, TContract, TModel, TDatabaseId> : never;
|
|
10
|
+
type WrapFunction<TName, TFunction, TContract, TModel extends string, TDatabaseId> = TFunction extends {
|
|
11
|
+
(...arguments_: infer TArguments1): infer TResult1;
|
|
12
|
+
(...arguments_: infer TArguments2): infer TResult2;
|
|
13
|
+
(...arguments_: infer TArguments3): infer TResult3;
|
|
14
|
+
(...arguments_: infer TArguments4): infer TResult4;
|
|
15
|
+
(...arguments_: infer TArguments5): infer TResult5;
|
|
16
|
+
(...arguments_: infer TArguments6): infer TResult6;
|
|
17
|
+
} ? ((...arguments_: TArguments1) => WrapReturn<TName, TResult1, TContract, TModel, TDatabaseId>) & ((...arguments_: TArguments2) => WrapReturn<TName, TResult2, TContract, TModel, TDatabaseId>) & ((...arguments_: TArguments3) => WrapReturn<TName, TResult3, TContract, TModel, TDatabaseId>) & ((...arguments_: TArguments4) => WrapReturn<TName, TResult4, TContract, TModel, TDatabaseId>) & ((...arguments_: TArguments5) => WrapReturn<TName, TResult5, TContract, TModel, TDatabaseId>) & ((...arguments_: TArguments6) => WrapReturn<TName, TResult6, TContract, TModel, TDatabaseId>) : never;
|
|
18
|
+
type FunctionKeys<TValue> = {
|
|
19
|
+
[TKey in keyof TValue]-?: TValue[TKey] extends AnyFunction ? TKey : never;
|
|
20
|
+
}[keyof TValue];
|
|
21
21
|
type ExplicitPrismaMethod = "aggregate" | "avg" | "combine" | "count" | "cursor" | "delete" | "deleteAll" | "deleteCount" | "distinct" | "distinctOn" | "groupBy" | "include" | "max" | "min" | "select" | "sum" | "variant";
|
|
22
|
-
type RelationMethods<
|
|
23
|
-
readonly [
|
|
22
|
+
type RelationMethods<TCollection, TContract, TModel extends string, TDatabaseId> = {
|
|
23
|
+
readonly [TKey in Exclude<FunctionKeys<TCollection>, ExplicitPrismaMethod>]: WrapFunction<TKey, TCollection[TKey], TContract, TModel, TDatabaseId>;
|
|
24
24
|
};
|
|
25
25
|
declare const RelationQueryTypeId: unique symbol;
|
|
26
|
-
export type RelationQuery<
|
|
26
|
+
export type RelationQuery<TValue, TContract, TModel extends string, TDatabaseId> = Effect.Effect<TValue, PrismaError> & {
|
|
27
27
|
readonly [RelationQueryTypeId]: {
|
|
28
|
-
readonly contract:
|
|
29
|
-
readonly database: (database:
|
|
30
|
-
readonly model:
|
|
28
|
+
readonly contract: TContract;
|
|
29
|
+
readonly database: (database: TDatabaseId) => TDatabaseId;
|
|
30
|
+
readonly model: TModel;
|
|
31
31
|
};
|
|
32
32
|
};
|
|
33
|
-
export type Relation<
|
|
33
|
+
export type Relation<TCollection, TContract = undefined, TModel extends string = string, TDatabaseId = undefined> = RelationQuery<CollectionResult<TCollection>, TContract, TModel, TDatabaseId> & RelationMethods<TCollection, TContract, TModel, TDatabaseId> & PrismaRelationMethods<TCollection, TContract, TModel, TDatabaseId>;
|
|
34
34
|
export {};
|
|
35
35
|
//# sourceMappingURL=relation.d.ts.map
|
package/dist/relation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,KAAK,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,SAAS,KAAK,EAAE,KAAK,OAAO,CAAC;AAEhE,MAAM,MAAM,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA,OAAe,EAAqB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,EAAiB,MAAM,mBAAmB,CAAC;AAI7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAyB,CAAC;AAE5E,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,KAAK,oBAAoB,CAAC,QAAQ,SAAS,cAAc,IACtD;IACA,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;CAC7B,GACD;IACA,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEL,MAAM,WAAW,wBAAwB,CAAC,QAAQ,SAAS,cAAc,EAAE,UAAU,SAAS,MAAM,CACnG,SAAQ,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;CAC5H;
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA,OAAe,EAAqB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,EAAiB,MAAM,mBAAmB,CAAC;AAI7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAyB,CAAC;AAE5E,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,KAAK,oBAAoB,CAAC,QAAQ,SAAS,cAAc,IACtD;IACA,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;CAC7B,GACD;IACA,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEL,MAAM,WAAW,wBAAwB,CAAC,QAAQ,SAAS,cAAc,EAAE,UAAU,SAAS,MAAM,CACnG,SAAQ,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;CAC5H;AAWD,eAAO,MAAM,kBAAkB,GAC7B,KAAK,CAAC,QAAQ,SAAS,cAAc,QACrC,KAAK,CAAC,UAAU,SAAS,MAAM,cACnB,yBAAyB,CAAC,UAAU,CAAC,WACxC,oBAAoB,CAAC,QAAQ,CAAC,KACrC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CA2C/C,CAAC"}
|
package/dist/sqlite.js
CHANGED
|
@@ -7,12 +7,14 @@ import { fromPrismaPromise } from "#internal/promise.ts";
|
|
|
7
7
|
import { decodeSqliteDatetimesAsUtc } from "#internal/sqlite-datetime.ts";
|
|
8
8
|
import { applySqlitePragmas, assertFileBackedPath } from "#internal/sqlite-pragmas.ts";
|
|
9
9
|
export const defaultSqlitePragmas = ["journal_mode=WAL"];
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
})
|
|
10
|
+
function clientOptions({ path, extensions, middleware, verifyMarker }) {
|
|
11
|
+
return {
|
|
12
|
+
path,
|
|
13
|
+
...(extensions === undefined ? {} : { extensions }),
|
|
14
|
+
...(middleware === undefined ? {} : { middleware }),
|
|
15
|
+
...(verifyMarker === undefined ? {} : { verifyMarker }),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
16
18
|
export const makeSqliteDatabase = () => (identifier, options) => {
|
|
17
19
|
return makeSqlDatabase(identifier, (layerOptions) => {
|
|
18
20
|
assertFileBackedPath(layerOptions.path);
|
package/dist/sqlite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAA6C,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAc,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGvF,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,kBAAkB,CAAC,CAAC;AAsB5E,
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAA6C,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAc,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGvF,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,kBAAkB,CAAC,CAAC;AAsB5E,SAAS,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAA8B;IAChG,OAAO;QACN,IAAI;QACJ,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;QACnD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;QACnD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACvD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAC9B,GAA0C,EAAE,CAC5C,CACC,UAAiD,EACjD,OAAuC,EACU,EAAE;IAGnD,OAAO,eAAe,CAAmD,UAAU,EAAE,CAAC,YAAY,EAAE,EAAE;QACrG,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxC,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC;QAEpF,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,GACX,OAAO,CAAC,QAAQ,KAAK,SAAS;YAC7B,CAAC,CAAC,MAAM,CAAW;gBACjB,GAAG,SAAS;gBACZ,YAAY,EAAE,OAAO,CAAC,YAAY;aAClC,CAAC;YACH,CAAC,CAAC,MAAM,CAAW;gBACjB,GAAG,SAAS;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC1B,CAAC,CAAC;QAEN,0BAA0B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE3C,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAC7B,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE;YACnC,2DAA2D;YAC3D,MAAM,MAAM,GAAG,cAAc,CAAS,MAAM,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChD,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,OAAO;gBACN,MAAM;gBACN,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE;oBACT,UAAU,EAAE,yBAAyB;oBACrC,IAAI,EAAE,IAAI;iBACV;gBACD,IAAI,EAAE,MAAM;gBACZ,MAAM;gBACN,cAAc,EAAE,eAAe;gBAC/B,mBAAmB,EAAE,SAAS;gBAC9B,oBAAoB,EAAE,eAAe;aACrC,CAAC;QACH,CAAC,CAAC,CACF,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# North star
|
|
2
|
+
|
|
3
|
+
## The problem
|
|
4
|
+
|
|
5
|
+
An application with a Prisma Next contract already has a model vocabulary and generated query types. Effect services around that client still need a reliable boundary: queries must be Effects, database failures must remain inspectable, client ownership must fit a scope and a transaction must reach every participating query without passing an unrelated client through every method.
|
|
6
|
+
|
|
7
|
+
Tests have the same problem. A test should exercise the generated queries and real database, then discard its writes, whether it succeeds or fails. Rebuilding that transaction harness in every application spreads the most delicate part of persistence across code that is easy to get wrong.
|
|
8
|
+
|
|
9
|
+
This package owns that bridge. It serves applications that use Prisma Next while `effect-sql` owns the framework's native persistence and migration path. Prisma Classic is a separate integration: `effect-changes-prisma` binds change channels to its interactive transactions.
|
|
10
|
+
|
|
11
|
+
## The ideal
|
|
12
|
+
|
|
13
|
+
A generated contract becomes one exported Database definition. Application services yield it, describe queries with its models and compose ordinary Effects. A transaction provides the same definition for its body. Repositories need no public executor service and no second model declaration.
|
|
14
|
+
|
|
15
|
+
A query description can be reused or branched without changing another caller's query. A query captured from the root facade finds the active transaction when executed. A value made inside a transaction cannot silently fall back to the root client after that transaction ends or cross into a sibling transaction.
|
|
16
|
+
|
|
17
|
+
Types must carry the contract through filters, writes, selections and relation loading. Two databases sharing a contract still have separate identities. A convenience that loses a field type, a nullable relation or a database boundary costs more than the lines it saves.
|
|
18
|
+
|
|
19
|
+
## What good looks like
|
|
20
|
+
|
|
21
|
+
- One Database service is visible to application code. Its private coordination preserves Effect dependency and scope semantics.
|
|
22
|
+
- Query failures preserve database information needed for a domain decision. Unrecognized failures stay defects rather than being recast as expected database errors.
|
|
23
|
+
- Transaction settlement waits for in-flight work, then commits or rolls back and releases the connection. No permit is released while interrupted work is still using its connection.
|
|
24
|
+
- Every branch of a query remains independent. Included queries come from the correct model, Database and transaction owner.
|
|
25
|
+
- A database test drives real rows through the same public facade and rolls back afterwards. Test helpers compose with `effect-test` rather than building another runner.
|
|
26
|
+
- Documentation says exactly which tests establish a claim. Controlled collection tests, SQLite tests and real PostgreSQL tests each establish their own boundary.
|
|
27
|
+
|
|
28
|
+
## Trade-offs
|
|
29
|
+
|
|
30
|
+
**Effect semantics before upstream coverage.** Preserve typed errors, scoped ownership and exact model types first. Add a Prisma Next feature only when its public types and lifecycle fit; excluding an operation is preferable to weakening it into a generic dynamic escape hatch.
|
|
31
|
+
|
|
32
|
+
**One transaction connection before apparent parallelism.** Concurrent Effects may describe independent work, but queries on one transaction connection need coordination. A transaction Stream may buffer rows so downstream work can use that connection. That spends memory to preserve a clear lifetime and avoid a query waiting on its own occupied connection.
|
|
33
|
+
|
|
34
|
+
**SQLite's engine limits before an identical performance promise.** The same facade does not make PostgreSQL and a synchronous SQLite driver equivalent. Coordinate one SQLite Layer's finite queries and transaction lifetimes; do not promise coordination across independently created clients.
|
|
35
|
+
|
|
36
|
+
**One supported composition before hidden identity machinery.** Applications export and reuse one definition per identifier and provide one live Layer for it. Do not invent cross-runtime registries to make duplicate definitions look safe.
|
|
37
|
+
|
|
38
|
+
## What it leaves out
|
|
39
|
+
|
|
40
|
+
- Authoring application contracts, schema changes, migrations or domain repositories.
|
|
41
|
+
- A new query language or a second authored model next to Prisma Next's contract.
|
|
42
|
+
- Prisma Classic client adaptation, commit-bound change tracking, auth policy or a tRPC transport.
|
|
43
|
+
- Nested independent rollback promises without driver savepoint support.
|
|
44
|
+
- Model variants or broader upstream parity obtained by weakening public types.
|
|
45
|
+
- Coordination of multiple SQLite Layers against the same file.
|
|
46
|
+
|
|
47
|
+
The maintainer owns feature breadth and the backend support policy. Their open choices and the package's current work live in `roadmap.md`.
|
package/docs/roadmap.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
This file owns effect-prisma's implementation status and backend questions. The framework roadmap owns application adoption and work that composes multiple packages; it does not repeat this package's feature checklist.
|
|
4
|
+
|
|
5
|
+
## Built
|
|
6
|
+
|
|
7
|
+
| Capability | Evidence |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| Prisma Next Database definitions and generated model types, including distinct identities for the same contract | `src/database.typecheck.test.ts`, `src/databaseTypes.typecheck.test.ts` |
|
|
10
|
+
| Immutable, reusable Relations, typed filtering and selection, first/exists/count | `src/internal/relation.spec.ts`, `src/database.typecheck.test.ts` |
|
|
11
|
+
| Related rows, nullable to-one values, nested/refined includes, counts and named projections | `src/database.test.ts`, `src/sqliteQueries.spec.ts`, `src/relation.typecheck.test.ts` |
|
|
12
|
+
| Bulk create/update/delete and count/grouped aggregates | `src/database.test.ts`, `src/sqliteQueries.spec.ts` |
|
|
13
|
+
| Commit/rollback transactions with nested reuse, context guards, query serialization and safe settlement | `src/databaseTransaction.spec.ts`, `src/sqliteTransaction.spec.ts`, `src/internal/transaction.test.ts` |
|
|
14
|
+
| Reusable Streams, incremental root reads and buffered transaction reads | `src/internal/relation.spec.ts`, `src/internal/transactionConcurrency.spec.ts`, database transaction suites |
|
|
15
|
+
| Typed query failures and preservation of unknown rejections as defects | `src/database.test.ts`, `src/sqlite.test.ts`, `src/internal/relation.spec.ts` |
|
|
16
|
+
| PostgreSQL timestamp declarations normalized to Date without overwriting unsupported forms | `src/bin/normalize-contract.test.ts`, `src/database.test.ts`, compiler tests |
|
|
17
|
+
| File-backed SQLite facade, WAL setup, UTC datetime decoding and coordinated query/transaction access | `src/sqlite.test.ts`, `src/sqliteIsolation.spec.ts`, `src/internal/sqlite-datetime.test.ts` |
|
|
18
|
+
| Rollback-only transaction primitive and Vitest facade built on effect-test | `src/databaseTesting.spec.ts`, `src/sqliteTesting.spec.ts`, `src/sqliteIsolation.spec.ts` |
|
|
19
|
+
|
|
20
|
+
SQLite remains experimental. PostgreSQL tests require `PLATFORM_EFFECT_PRISMA_TEST_DATABASE_URL`; a skipped PostgreSQL suite establishes no PostgreSQL behavior. Compiler tests cover cursor/distinct/distinct-on and single-row mutation types without establishing their runtime result semantics.
|
|
21
|
+
|
|
22
|
+
## Next
|
|
23
|
+
|
|
24
|
+
The repository does not name a next package implementation milestone. Before expanding the facade or promoting a backend, the maintainer needs to choose the intended support scope below. Framework adoption is separate work, tracked in the framework roadmap.
|
|
25
|
+
|
|
26
|
+
The existing compatibility boundary is narrow: maintain the generated-contract adaptation, transaction ownership and rollback test path without making native SQL applications depend on Prisma Next.
|
|
27
|
+
|
|
28
|
+
## Open questions
|
|
29
|
+
|
|
30
|
+
- How much ongoing Prisma Next feature work should this compatibility path receive alongside `effect-sql`? Keeping it maintained, freezing its feature scope and expanding toward upstream parity are different commitments; the repository has not chosen between them.
|
|
31
|
+
- What evidence and consumer need would promote SQLite beyond experimental support? The current facade has file-backed integration tests and coordination within one Layer, but no commitment to multi-client coordination or broader deployment guarantees.
|
|
32
|
+
- Should model variants and the other excluded Prisma Next collection operations ever join this facade? The draft design prefers exact types and transaction semantics over feature breadth; the maintainer owns whether broader parity is a goal.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/effect-prisma",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Effect-native PostgreSQL queries and transactions for Prisma Next",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/effect-prisma#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"sideEffects": false,
|
|
16
16
|
"type": "module",
|
|
17
17
|
"imports": {
|
|
18
|
-
"#test/*": "./test/*",
|
|
18
|
+
"#test/*": "./src/test-support/*",
|
|
19
19
|
"#*.ts": {
|
|
20
20
|
"source": "./src/*.ts",
|
|
21
21
|
"types": "./dist/*.d.ts",
|
|
@@ -38,37 +38,41 @@
|
|
|
38
38
|
"files": [
|
|
39
39
|
"dist",
|
|
40
40
|
"src",
|
|
41
|
+
"!src/**/*.test.ts",
|
|
42
|
+
"!src/**/*.spec.ts",
|
|
43
|
+
"!src/**/test-support",
|
|
44
|
+
"docs",
|
|
41
45
|
"CHANGELOG.md",
|
|
42
46
|
"README.md"
|
|
43
47
|
],
|
|
44
48
|
"dependencies": {
|
|
45
|
-
"@prisma-next/contract": "0.
|
|
46
|
-
"@prisma-next/postgres": "0.
|
|
47
|
-
"@prisma-next/sql-contract": "0.
|
|
48
|
-
"@prisma-next/sql-orm-client": "0.
|
|
49
|
-
"@prisma-next/sql-relational-core": "0.
|
|
50
|
-
"@prisma-next/sql-runtime": "0.
|
|
51
|
-
"@prisma-next/sqlite": "0.
|
|
52
|
-
"@shivaedev/effect-test": "0.
|
|
49
|
+
"@prisma-next/contract": "0.16.0",
|
|
50
|
+
"@prisma-next/postgres": "0.16.0",
|
|
51
|
+
"@prisma-next/sql-contract": "0.16.0",
|
|
52
|
+
"@prisma-next/sql-orm-client": "0.16.0",
|
|
53
|
+
"@prisma-next/sql-relational-core": "0.16.0",
|
|
54
|
+
"@prisma-next/sql-runtime": "0.16.0",
|
|
55
|
+
"@prisma-next/sqlite": "0.16.0",
|
|
56
|
+
"@shivaedev/effect-test": "0.5.0"
|
|
53
57
|
},
|
|
54
58
|
"devDependencies": {
|
|
55
|
-
"@effect/vitest": "4.0.
|
|
56
|
-
"@prisma-next/adapter-postgres": "0.
|
|
57
|
-
"@prisma-next/adapter-sqlite": "0.
|
|
58
|
-
"@prisma-next/cli": "0.
|
|
59
|
-
"@prisma-next/target-postgres": "0.
|
|
60
|
-
"@prisma-next/target-sqlite": "0.
|
|
61
|
-
"@shivaedev/quality": "0.
|
|
62
|
-
"@types/node": "24.
|
|
59
|
+
"@effect/vitest": "4.0.4",
|
|
60
|
+
"@prisma-next/adapter-postgres": "0.16.0",
|
|
61
|
+
"@prisma-next/adapter-sqlite": "0.16.0",
|
|
62
|
+
"@prisma-next/cli": "0.16.0",
|
|
63
|
+
"@prisma-next/target-postgres": "0.16.0",
|
|
64
|
+
"@prisma-next/target-sqlite": "0.16.0",
|
|
65
|
+
"@shivaedev/quality": "0.22.0",
|
|
66
|
+
"@types/node": "24.19.1",
|
|
63
67
|
"@types/pg": "8.20.0",
|
|
64
68
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
65
|
-
"effect": "4.0.
|
|
69
|
+
"effect": "4.0.4",
|
|
66
70
|
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
67
|
-
"vitest": "
|
|
71
|
+
"vitest": "5.0.3"
|
|
68
72
|
},
|
|
69
73
|
"peerDependencies": {
|
|
70
|
-
"@effect/vitest": "4.0.
|
|
71
|
-
"effect": "4.0.
|
|
74
|
+
"@effect/vitest": "4.0.4",
|
|
75
|
+
"effect": "4.0.4"
|
|
72
76
|
},
|
|
73
77
|
"peerDependenciesMeta": {
|
|
74
78
|
"@effect/vitest": {
|
|
@@ -83,7 +87,7 @@
|
|
|
83
87
|
"provenance": true
|
|
84
88
|
},
|
|
85
89
|
"scripts": {
|
|
86
|
-
"build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" &&
|
|
90
|
+
"build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" && tsc --project tsconfig.build.json",
|
|
87
91
|
"ready": "pnpm typecheck && pnpm test && pnpm build",
|
|
88
92
|
"test": "vitest run",
|
|
89
93
|
"typecheck": "tsc --noEmit"
|