@shivaedev/effect-contract 0.3.0 → 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.
- package/CHANGELOG.md +25 -0
- package/README.md +332 -55
- package/dist/bind.d.ts +23 -12
- package/dist/bind.d.ts.map +1 -1
- package/dist/bind.js +19 -9
- package/dist/bind.js.map +1 -1
- package/dist/contract.d.ts +23 -20
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +13 -8
- package/dist/contract.js.map +1 -1
- package/dist/keys.d.ts +19 -11
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +8 -1
- package/dist/keys.js.map +1 -1
- package/dist/live.d.ts +35 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +60 -0
- package/dist/live.js.map +1 -0
- package/dist/makeLiveServer.d.ts +20 -0
- package/dist/makeLiveServer.d.ts.map +1 -0
- package/dist/makeLiveServer.js +26 -0
- package/dist/makeLiveServer.js.map +1 -0
- package/dist/operation.d.ts +37 -25
- package/dist/operation.d.ts.map +1 -1
- package/dist/operation.js +7 -4
- package/dist/operation.js.map +1 -1
- package/dist/rejection.d.ts +27 -27
- package/dist/rejection.d.ts.map +1 -1
- package/dist/rejection.js.map +1 -1
- package/dist/resume.d.ts +17 -0
- package/dist/resume.d.ts.map +1 -0
- package/dist/resume.js +28 -0
- package/dist/resume.js.map +1 -0
- package/docs/north-star.md +45 -0
- package/docs/roadmap.md +26 -0
- package/package.json +62 -12
- package/src/bind.ts +71 -36
- package/src/contract.ts +59 -39
- package/src/keys.ts +21 -14
- package/src/live.ts +81 -0
- package/src/makeLiveServer.ts +32 -0
- package/src/operation.ts +69 -42
- package/src/rejection.ts +40 -37
- package/src/resume.ts +44 -0
package/dist/contract.d.ts
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export type
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
readonly
|
|
8
|
-
readonly
|
|
1
|
+
import type { Schema } from "effect";
|
|
2
|
+
import { Rpc, RpcGroup, type RpcMiddleware, type RpcSchema } from "effect/unstable/rpc";
|
|
3
|
+
import type { CommandShape, OperationShape, QueryShape, StreamShape } from "./operation.ts";
|
|
4
|
+
export type Tag<TContract extends string, TName extends string> = `${TContract}.${TName}`;
|
|
5
|
+
export type OperationRpc<TContract extends string, TOperation> = TOperation extends OperationShape ? TOperation extends StreamShape ? Rpc.Rpc<Tag<TContract, TOperation["name"]>, TOperation["payload"], RpcSchema.Stream<TOperation["success"], TOperation["error"]>, Schema.Never> : Rpc.Rpc<Tag<TContract, TOperation["name"]>, TOperation["payload"], TOperation["success"], TOperation["error"]> : never;
|
|
6
|
+
export interface Declared<TName extends string, TQueries extends readonly QueryShape[], TCommands extends readonly CommandShape[], TStreams extends readonly StreamShape[] = readonly []> {
|
|
7
|
+
readonly commands: TCommands;
|
|
8
|
+
readonly name: TName;
|
|
9
|
+
readonly queries: TQueries;
|
|
10
|
+
readonly streams: TStreams;
|
|
9
11
|
}
|
|
10
|
-
export interface Contract<
|
|
11
|
-
readonly declaration: Declared<
|
|
12
|
-
middleware: <
|
|
12
|
+
export interface Contract<TName extends string, TQueries extends readonly QueryShape[], TCommands extends readonly CommandShape[], TRpcs extends Rpc.Any = OperationRpc<TName, TQueries[number] | TCommands[number]>, TStreams extends readonly StreamShape[] = readonly []> extends RpcGroup.RpcGroup<TRpcs> {
|
|
13
|
+
readonly declaration: Declared<TName, TQueries, TCommands, TStreams>;
|
|
14
|
+
middleware: <TM extends RpcMiddleware.AnyService>(middleware: TM) => Contract<TName, TQueries, TCommands, Rpc.AddMiddleware<TRpcs, TM>, TStreams>;
|
|
13
15
|
}
|
|
14
|
-
type Duplicated<
|
|
15
|
-
infer
|
|
16
|
-
...infer
|
|
17
|
-
] ? (
|
|
18
|
-
type Unique<
|
|
19
|
-
export declare function contract<const
|
|
20
|
-
readonly queries?:
|
|
21
|
-
readonly commands?:
|
|
22
|
-
|
|
16
|
+
type Duplicated<TOperations extends readonly OperationShape[], TSeen extends string = never> = TOperations extends readonly [
|
|
17
|
+
infer THead extends OperationShape,
|
|
18
|
+
...infer TTail extends readonly OperationShape[]
|
|
19
|
+
] ? (THead["name"] extends TSeen ? THead["name"] : never) | Duplicated<TTail, TSeen | THead["name"]> : never;
|
|
20
|
+
type Unique<TOperations extends readonly OperationShape[]> = [Duplicated<TOperations>] extends [never] ? unknown : `Operation names must be unique; duplicated: ${Duplicated<TOperations>}`;
|
|
21
|
+
export declare function contract<const TName extends string, const TQueries extends readonly QueryShape[] = readonly [], const TCommands extends readonly CommandShape[] = readonly [], const TStreams extends readonly StreamShape[] = readonly []>(name: TName, operations: {
|
|
22
|
+
readonly queries?: TQueries & Unique<TQueries>;
|
|
23
|
+
readonly commands?: TCommands & Unique<[...TQueries, ...TCommands]>;
|
|
24
|
+
readonly streams?: TStreams & Unique<[...TQueries, ...TCommands, ...TStreams]>;
|
|
25
|
+
}): Contract<TName, TQueries, TCommands, OperationRpc<TName, TQueries[number] | TCommands[number] | TStreams[number]>, TStreams>;
|
|
23
26
|
export {};
|
|
24
27
|
//# sourceMappingURL=contract.d.ts.map
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE5F,MAAM,MAAM,GAAG,CAAC,SAAS,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,IAAI,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC;AAE1F,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,MAAM,EAAE,UAAU,IAAI,UAAU,SAAS,cAAc,GAC/F,UAAU,SAAS,WAAW,GAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAC9I,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,GAC/G,KAAK,CAAC;AAET,MAAM,WAAW,QAAQ,CACxB,KAAK,SAAS,MAAM,EACpB,QAAQ,SAAS,SAAS,UAAU,EAAE,EACtC,SAAS,SAAS,SAAS,YAAY,EAAE,EACzC,QAAQ,SAAS,SAAS,WAAW,EAAE,GAAG,SAAS,EAAE;IAErD,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ,CACxB,KAAK,SAAS,MAAM,EACpB,QAAQ,SAAS,SAAS,UAAU,EAAE,EACtC,SAAS,SAAS,SAAS,YAAY,EAAE,EACzC,KAAK,SAAS,GAAG,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EACjF,QAAQ,SAAS,SAAS,WAAW,EAAE,GAAG,SAAS,EAAE,CACpD,SAAQ,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrE,UAAU,EAAE,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,KAAK,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;CAClJ;AAED,KAAK,UAAU,CAAC,WAAW,SAAS,SAAS,cAAc,EAAE,EAAE,KAAK,SAAS,MAAM,GAAG,KAAK,IAAI,WAAW,SAAS,SAAS;IAC3H,MAAM,KAAK,SAAS,cAAc;IAClC,GAAG,MAAM,KAAK,SAAS,SAAS,cAAc,EAAE;CAChD,GACE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAChG,KAAK,CAAC;AAET,KAAK,MAAM,CAAC,WAAW,SAAS,SAAS,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACnG,OAAO,GACP,+CAA+C,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;AA2B5E,wBAAgB,QAAQ,CACvB,KAAK,CAAC,KAAK,SAAS,MAAM,EAC1B,KAAK,CAAC,QAAQ,SAAS,SAAS,UAAU,EAAE,GAAG,SAAS,EAAE,EAC1D,KAAK,CAAC,SAAS,SAAS,SAAS,YAAY,EAAE,GAAG,SAAS,EAAE,EAC7D,KAAK,CAAC,QAAQ,SAAS,SAAS,WAAW,EAAE,GAAG,SAAS,EAAE,EAE3D,IAAI,EAAE,KAAK,EACX,UAAU,EAAE;IACX,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;CAC/E,GACC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC"}
|
package/dist/contract.js
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { Rpc, RpcGroup } from "effect/unstable/rpc";
|
|
2
|
-
|
|
2
|
+
function assertUnique(operations) {
|
|
3
3
|
const duplicated = operations.map(({ name }) => name).filter((name, index, names) => names.indexOf(name) !== index);
|
|
4
4
|
if (duplicated.length > 0) {
|
|
5
5
|
throw new Error(`Operation names must be unique; duplicated: ${[...new Set(duplicated)].join(", ")}`);
|
|
6
6
|
}
|
|
7
|
-
}
|
|
8
|
-
|
|
7
|
+
}
|
|
8
|
+
function withDeclaration(group, declaration) {
|
|
9
9
|
const nativeMiddleware = group.middleware.bind(group);
|
|
10
10
|
return Object.assign(group, {
|
|
11
11
|
declaration,
|
|
12
12
|
middleware: (middleware) => withDeclaration(nativeMiddleware(middleware), declaration),
|
|
13
13
|
});
|
|
14
|
-
}
|
|
14
|
+
}
|
|
15
15
|
export function contract(name, operations) {
|
|
16
|
-
const { queries = [], commands = [] } = operations;
|
|
17
|
-
assertUnique([...queries, ...commands]);
|
|
18
|
-
const rpcs = [...queries, ...commands].map((operation) => Rpc.make(`${name}.${operation.name}`, {
|
|
19
|
-
|
|
16
|
+
const { queries = [], commands = [], streams = [] } = operations;
|
|
17
|
+
assertUnique([...queries, ...commands, ...streams]);
|
|
18
|
+
const rpcs = [...queries, ...commands, ...streams].map((operation) => Rpc.make(`${name}.${operation.name}`, {
|
|
19
|
+
error: operation.error,
|
|
20
|
+
payload: operation.payload,
|
|
21
|
+
stream: operation.kind === "stream",
|
|
22
|
+
success: operation.success,
|
|
23
|
+
}));
|
|
24
|
+
return withDeclaration(RpcGroup.make(...rpcs), { commands, name, queries, streams });
|
|
20
25
|
}
|
|
21
26
|
//# sourceMappingURL=contract.js.map
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAsC,MAAM,qBAAqB,CAAC;AA6CxF,SAAS,YAAY,CAAC,UAAqC;IAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IACpH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;AACF,CAAC;AAYD,SAAS,eAAe,CAAC,KAAY,EAAE,WAAwB;IAC9D,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC3B,WAAW;QACX,UAAU,EAAE,CAAC,UAAoC,EAAE,EAAE,CAAC,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;KAChH,CAAC,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,QAAQ,CACvB,IAAY,EACZ,UAAgJ;IAEhJ,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,UAAU,CAAC;IACjE,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACpE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE;QACrC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,IAAI,KAAK,QAAQ;QACnC,OAAO,EAAE,SAAS,CAAC,OAAO;KAC1B,CAAC,CACF,CAAC;IACF,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AACtF,CAAC"}
|
package/dist/keys.d.ts
CHANGED
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Schema } from "effect";
|
|
2
2
|
export type Identity = string | number;
|
|
3
|
-
export interface ListKey<
|
|
3
|
+
export interface ListKey<TName extends string = string> {
|
|
4
4
|
readonly _tag: "List";
|
|
5
|
-
readonly collection:
|
|
5
|
+
readonly collection: TName;
|
|
6
6
|
}
|
|
7
|
-
export interface ItemKey<
|
|
7
|
+
export interface ItemKey<TName extends string = string> {
|
|
8
8
|
readonly _tag: "Item";
|
|
9
|
-
readonly collection:
|
|
9
|
+
readonly collection: TName;
|
|
10
10
|
readonly id: Identity;
|
|
11
11
|
}
|
|
12
12
|
export type Key = ListKey | ItemKey;
|
|
13
|
-
export
|
|
14
|
-
readonly
|
|
15
|
-
readonly
|
|
16
|
-
|
|
13
|
+
export declare const Key: Schema.Union<readonly [Schema.Struct<{
|
|
14
|
+
readonly _tag: Schema.Literal<"List">;
|
|
15
|
+
readonly collection: Schema.String;
|
|
16
|
+
}>, Schema.Struct<{
|
|
17
|
+
readonly _tag: Schema.Literal<"Item">;
|
|
18
|
+
readonly collection: Schema.String;
|
|
19
|
+
readonly id: Schema.Union<readonly [Schema.String, Schema.Number]>;
|
|
20
|
+
}>]>;
|
|
21
|
+
export interface Collection<TName extends string, TId extends Identity> {
|
|
22
|
+
readonly item: (id: TId) => ItemKey<TName>;
|
|
23
|
+
readonly list: ListKey<TName>;
|
|
24
|
+
readonly name: TName;
|
|
17
25
|
}
|
|
18
|
-
export declare const collection: <const
|
|
26
|
+
export declare const collection: <const TName extends string, TId extends Schema.Top & {
|
|
19
27
|
readonly Type: Identity;
|
|
20
|
-
}>(name:
|
|
28
|
+
}>(name: TName, _id: TId) => Collection<TName, TId["Type"]>;
|
|
21
29
|
export declare const readKeys: (keys: readonly Key[]) => readonly string[];
|
|
22
30
|
export declare const invalidationKeys: (keys: readonly Key[]) => readonly string[];
|
|
23
31
|
//# sourceMappingURL=keys.d.ts.map
|
package/dist/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,OAAO,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;CACtB;AAED,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpC,eAAO,MAAM,GAAG;;;;;;;IAGd,CAAC;AAEH,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,MAAM,EAAE,GAAG,SAAS,QAAQ;IACrE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,GAAI,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,CAAC,GAAG,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,QACpG,KAAK,OACN,GAAG,KACN,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAI9B,CAAC;AAMH,eAAO,MAAM,QAAQ,SAAU,SAAS,GAAG,EAAE,KAAG,SAAS,MAAM,EAAiC,CAAC;AAEjG,eAAO,MAAM,gBAAgB,SAAU,SAAS,GAAG,EAAE,KAAG,SAAS,MAAM,EAEtE,CAAC"}
|
package/dist/keys.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export const Key = Schema.Union([
|
|
3
|
+
Schema.Struct({ _tag: Schema.Literal("List"), collection: Schema.String }),
|
|
4
|
+
Schema.Struct({ _tag: Schema.Literal("Item"), collection: Schema.String, id: Schema.Union([Schema.String, Schema.Number]) }),
|
|
5
|
+
]);
|
|
1
6
|
export const collection = (name, _id) => ({
|
|
2
7
|
item: (id) => ({ _tag: "Item", collection: name, id }),
|
|
3
8
|
list: { _tag: "List", collection: name },
|
|
4
9
|
name,
|
|
5
10
|
});
|
|
6
|
-
|
|
11
|
+
function own(key) {
|
|
12
|
+
return key._tag === "List" ? key.collection : `${key.collection}:${key.id}`;
|
|
13
|
+
}
|
|
7
14
|
export const readKeys = (keys) => [...new Set(keys.map(own))];
|
|
8
15
|
export const invalidationKeys = (keys) => [
|
|
9
16
|
...new Set(keys.flatMap((key) => (key._tag === "List" ? [key.collection] : [own(key), key.collection]))),
|
package/dist/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAiBhC,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1E,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;CAC5H,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,UAAU,GAAG,CACzB,IAAW,EACX,GAAQ,EACyB,EAAE,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACtD,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;IACxC,IAAI;CACJ,CAAC,CAAC;AAEH,SAAS,GAAG,CAAC,GAAQ;IACpB,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAoB,EAAqB,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEjG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAoB,EAAqB,EAAE,CAAC;IAC5E,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;CACxG,CAAC"}
|
package/dist/live.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Cause, type Duration, Option, Schema, Stream } from "effect";
|
|
2
|
+
import * as Atom from "effect/unstable/reactivity/Atom";
|
|
3
|
+
import { Key } from "./keys.ts";
|
|
4
|
+
export declare const LiveHint: Schema.Union<readonly [Schema.Struct<{
|
|
5
|
+
readonly _tag: Schema.Literal<"Changed">;
|
|
6
|
+
readonly keys: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
|
|
7
|
+
readonly _tag: Schema.Literal<"List">;
|
|
8
|
+
readonly collection: Schema.String;
|
|
9
|
+
}>, Schema.Struct<{
|
|
10
|
+
readonly _tag: Schema.Literal<"Item">;
|
|
11
|
+
readonly collection: Schema.String;
|
|
12
|
+
readonly id: Schema.Union<readonly [Schema.String, Schema.Number]>;
|
|
13
|
+
}>]>>;
|
|
14
|
+
}>, Schema.Struct<{
|
|
15
|
+
readonly _tag: Schema.Literal<"Resync">;
|
|
16
|
+
}>]>;
|
|
17
|
+
export type LiveHint = typeof LiveHint.Type;
|
|
18
|
+
export interface LiveStatus<E> {
|
|
19
|
+
readonly connection: "connecting" | "live" | "reconnecting";
|
|
20
|
+
readonly failure: Option.Option<Cause.Cause<E>>;
|
|
21
|
+
readonly needsResync: boolean;
|
|
22
|
+
readonly pending: number;
|
|
23
|
+
}
|
|
24
|
+
export interface LiveOptions<E, R> {
|
|
25
|
+
readonly resume?: Atom.Atom<unknown>;
|
|
26
|
+
readonly resyncKeys: readonly Key[];
|
|
27
|
+
readonly retryDelay?: Duration.Input;
|
|
28
|
+
readonly stream: Stream.Stream<LiveHint, E, R>;
|
|
29
|
+
}
|
|
30
|
+
export declare function live<R, E, TRuntimeError>(runtime: Atom.AtomRuntime<R, TRuntimeError>, options: LiveOptions<E, R>): {
|
|
31
|
+
connection: Atom.Atom<import("effect/unstable/reactivity/AsyncResult").AsyncResult<void, TRuntimeError>>;
|
|
32
|
+
paused: Atom.Writable<boolean, boolean>;
|
|
33
|
+
status: Atom.Writable<LiveStatus<E>, LiveStatus<E>>;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAU,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,KAAK,IAAI,MAAM,iCAAiC,CAAC;AAExD,OAAO,EAAoB,GAAG,EAAY,MAAM,WAAW,CAAC;AAE5D,eAAO,MAAM,QAAQ;;;;;;;;;;;;IAGnB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAC5C,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,GAAG,cAAc,CAAC;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,WAAW,CAAC,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAC/C;AAID,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;;;;EAuDhH"}
|
package/dist/live.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Effect, Option, Schema, Stream } from "effect";
|
|
2
|
+
import * as Atom from "effect/unstable/reactivity/Atom";
|
|
3
|
+
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
4
|
+
import { invalidationKeys, Key, readKeys } from "./keys.js";
|
|
5
|
+
export const LiveHint = Schema.Union([
|
|
6
|
+
Schema.Struct({ _tag: Schema.Literal("Changed"), keys: Schema.Array(Key) }),
|
|
7
|
+
Schema.Struct({ _tag: Schema.Literal("Resync") }),
|
|
8
|
+
]);
|
|
9
|
+
const MAX_PENDING = 256;
|
|
10
|
+
export function live(runtime, options) {
|
|
11
|
+
const paused = Atom.make(false);
|
|
12
|
+
const status = Atom.make({ connection: "connecting", failure: Option.none(), needsResync: true, pending: 0 });
|
|
13
|
+
const connection = runtime
|
|
14
|
+
.atom((get) => Effect.gen(function* () {
|
|
15
|
+
get.mount(status);
|
|
16
|
+
const reactivity = yield* Reactivity.Reactivity;
|
|
17
|
+
function update(value) {
|
|
18
|
+
get.set(status, { ...get.once(status), ...value });
|
|
19
|
+
}
|
|
20
|
+
function resync() {
|
|
21
|
+
if (get.once(paused)) {
|
|
22
|
+
update({ needsResync: true });
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
reactivity.invalidateUnsafe(readKeys(options.resyncKeys));
|
|
26
|
+
update({ needsResync: false, pending: 0 });
|
|
27
|
+
}
|
|
28
|
+
get.subscribe(paused, (value) => {
|
|
29
|
+
if (!value) {
|
|
30
|
+
resync();
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
if (options.resume !== undefined) {
|
|
34
|
+
// A subscription alone does not initialize a derived signal's dependencies.
|
|
35
|
+
get.once(options.resume);
|
|
36
|
+
get.subscribe(options.resume, resync);
|
|
37
|
+
}
|
|
38
|
+
const attempt = Effect.suspend(() => {
|
|
39
|
+
let isFirst = true;
|
|
40
|
+
function observe(hint) {
|
|
41
|
+
update({ connection: "live", failure: Option.none() });
|
|
42
|
+
if (get.once(paused)) {
|
|
43
|
+
update({ needsResync: true, pending: Math.min(MAX_PENDING, get.once(status).pending + 1) });
|
|
44
|
+
}
|
|
45
|
+
else if (isFirst || hint._tag === "Resync") {
|
|
46
|
+
resync();
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
reactivity.invalidateUnsafe(invalidationKeys(hint.keys));
|
|
50
|
+
}
|
|
51
|
+
isFirst = false;
|
|
52
|
+
}
|
|
53
|
+
return options.stream.pipe(Stream.runForEach((hint) => Effect.sync(() => observe(hint))), Effect.scoped, Effect.catchCause((failure) => Effect.sync(() => update({ failure: Option.some(failure) }))), Effect.andThen(Effect.sync(() => update({ connection: "reconnecting", needsResync: true }))), Effect.andThen(Effect.sleep(options.retryDelay ?? "1 second")));
|
|
54
|
+
});
|
|
55
|
+
yield* Effect.forever(attempt);
|
|
56
|
+
}))
|
|
57
|
+
.pipe(Atom.setIdleTTL(0));
|
|
58
|
+
return { connection, paused, status };
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=live.js.map
|
package/dist/live.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Effect, Stream } from "effect";
|
|
2
|
+
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
3
|
+
import { type Key } from "./keys.ts";
|
|
4
|
+
export declare const makeLiveServer: Effect.Effect<{
|
|
5
|
+
resync: Effect.Effect<void, never, never>;
|
|
6
|
+
stream: (keys: readonly Key[]) => Stream.Stream<{
|
|
7
|
+
readonly _tag: "Changed";
|
|
8
|
+
readonly keys: readonly ({
|
|
9
|
+
readonly _tag: "List";
|
|
10
|
+
readonly collection: string;
|
|
11
|
+
} | {
|
|
12
|
+
readonly _tag: "Item";
|
|
13
|
+
readonly collection: string;
|
|
14
|
+
readonly id: string | number;
|
|
15
|
+
})[];
|
|
16
|
+
} | {
|
|
17
|
+
readonly _tag: "Resync";
|
|
18
|
+
}, never, never>;
|
|
19
|
+
}, never, Reactivity.Reactivity>;
|
|
20
|
+
//# sourceMappingURL=makeLiveServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeLiveServer.d.ts","sourceRoot":"","sources":["../src/makeLiveServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,WAAW,CAAC;AAG/C,eAAO,MAAM,cAAc;;mBAIJ,SAAS,GAAG,EAAE;;;;;;;;;;;;;gCAsBnC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Effect, Stream } from "effect";
|
|
2
|
+
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
3
|
+
import { readKeys } from "./keys.js";
|
|
4
|
+
export const makeLiveServer = Effect.gen(function* () {
|
|
5
|
+
const reactivity = yield* Reactivity.Reactivity;
|
|
6
|
+
const resyncKey = `@shivaedev/effect-contract/resync/${crypto.randomUUID()}`;
|
|
7
|
+
let generation = 0;
|
|
8
|
+
function stream(keys) {
|
|
9
|
+
return Stream.unwrap(Effect.sync(() => {
|
|
10
|
+
let seen = -1;
|
|
11
|
+
return reactivity.stream([...readKeys(keys), resyncKey], Effect.sync(() => {
|
|
12
|
+
if (seen !== generation) {
|
|
13
|
+
seen = generation;
|
|
14
|
+
return { _tag: "Resync" };
|
|
15
|
+
}
|
|
16
|
+
return { _tag: "Changed", keys };
|
|
17
|
+
}));
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
const resync = Effect.sync(() => {
|
|
21
|
+
generation += 1;
|
|
22
|
+
reactivity.invalidateUnsafe([resyncKey]);
|
|
23
|
+
});
|
|
24
|
+
return { resync, stream };
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=makeLiveServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeLiveServer.js","sourceRoot":"","sources":["../src/makeLiveServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG/C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAChD,MAAM,SAAS,GAAG,qCAAqC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IAC7E,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,SAAS,MAAM,CAAC,IAAoB;QACnC,OAAO,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;YACd,OAAO,UAAU,CAAC,MAAM,CACvB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAC9B,MAAM,CAAC,IAAI,CAAC,GAAa,EAAE;gBAC1B,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;oBACzB,IAAI,GAAG,UAAU,CAAC;oBAClB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC3B,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAClC,CAAC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CACF,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QAC/B,UAAU,IAAI,CAAC,CAAC;QAChB,UAAU,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC"}
|
package/dist/operation.d.ts
CHANGED
|
@@ -2,11 +2,11 @@ import { Schema } from "effect";
|
|
|
2
2
|
import type { Bivariant } from "@shivaedev/types/bivariant.ts";
|
|
3
3
|
import type { Key } from "./keys.ts";
|
|
4
4
|
import { type MatchingTags, type Reject, type RejectionSpecs, type Rejections, type RejectionUnion } from "./rejection.ts";
|
|
5
|
-
export type PayloadSchema<
|
|
5
|
+
export type PayloadSchema<TPayload extends Schema.Top | Schema.Struct.Fields> = TPayload extends Schema.Struct.Fields ? Schema.Struct<TPayload> : TPayload;
|
|
6
6
|
type NoRejections = Record<never, never>;
|
|
7
7
|
export interface OperationShape {
|
|
8
8
|
readonly error: Schema.Top;
|
|
9
|
-
readonly kind: "query" | "command";
|
|
9
|
+
readonly kind: "query" | "command" | "stream";
|
|
10
10
|
readonly name: string;
|
|
11
11
|
readonly payload: Schema.Top;
|
|
12
12
|
readonly Rejection: object;
|
|
@@ -18,37 +18,49 @@ export interface QueryShape extends OperationShape {
|
|
|
18
18
|
readonly kind: "query";
|
|
19
19
|
reads: Bivariant<(payload: unknown) => readonly Key[]>;
|
|
20
20
|
}
|
|
21
|
+
export interface StreamShape extends OperationShape {
|
|
22
|
+
readonly kind: "stream";
|
|
23
|
+
reads: Bivariant<(payload: unknown) => readonly Key[]>;
|
|
24
|
+
}
|
|
21
25
|
export interface CommandShape extends OperationShape {
|
|
22
26
|
invalidates: Bivariant<(payload: unknown, result: unknown) => readonly Key[]>;
|
|
23
27
|
readonly kind: "command";
|
|
24
28
|
}
|
|
25
|
-
interface Operation<
|
|
26
|
-
readonly error: RejectionUnion<
|
|
27
|
-
readonly name:
|
|
28
|
-
readonly payload:
|
|
29
|
-
readonly Rejection: Rejections<
|
|
30
|
-
readonly reject: Reject<
|
|
31
|
-
readonly rejections:
|
|
32
|
-
readonly success:
|
|
29
|
+
interface Operation<TName extends string, TPayload extends Schema.Top, TSuccess extends Schema.Top, TSpecs extends RejectionSpecs> extends OperationShape {
|
|
30
|
+
readonly error: RejectionUnion<TSpecs>;
|
|
31
|
+
readonly name: TName;
|
|
32
|
+
readonly payload: TPayload;
|
|
33
|
+
readonly Rejection: Rejections<TSpecs>;
|
|
34
|
+
readonly reject: Reject<TSpecs>;
|
|
35
|
+
readonly rejections: TSpecs;
|
|
36
|
+
readonly success: TSuccess;
|
|
33
37
|
}
|
|
34
|
-
export interface Query<
|
|
38
|
+
export interface Query<TName extends string, TPayload extends Schema.Top, TSuccess extends Schema.Top, TSpecs extends RejectionSpecs> extends Operation<TName, TPayload, TSuccess, TSpecs> {
|
|
35
39
|
readonly kind: "query";
|
|
36
|
-
reads: (payload:
|
|
40
|
+
reads: (payload: TPayload["Type"]) => readonly Key[];
|
|
37
41
|
}
|
|
38
|
-
export interface
|
|
39
|
-
|
|
42
|
+
export interface Streaming<TName extends string, TPayload extends Schema.Top, TSuccess extends Schema.Top, TSpecs extends RejectionSpecs> extends Operation<TName, TPayload, TSuccess, TSpecs> {
|
|
43
|
+
readonly kind: "stream";
|
|
44
|
+
reads: (payload: TPayload["Type"]) => readonly Key[];
|
|
45
|
+
}
|
|
46
|
+
export interface Command<TName extends string, TPayload extends Schema.Top, TSuccess extends Schema.Top, TSpecs extends RejectionSpecs> extends Operation<TName, TPayload, TSuccess, TSpecs> {
|
|
47
|
+
invalidates: (payload: TPayload["Type"], result: TSuccess["Type"]) => readonly Key[];
|
|
40
48
|
readonly kind: "command";
|
|
41
49
|
}
|
|
42
|
-
interface Declaration<
|
|
43
|
-
readonly payload?:
|
|
44
|
-
readonly rejections?:
|
|
45
|
-
readonly success?:
|
|
46
|
-
}
|
|
47
|
-
export declare function query<const
|
|
48
|
-
readonly reads: (payload: PayloadSchema<
|
|
49
|
-
}): NoInfer<Query<
|
|
50
|
-
export declare function command<const
|
|
51
|
-
readonly invalidates: (payload: PayloadSchema<
|
|
52
|
-
}): NoInfer<Command<
|
|
50
|
+
interface Declaration<TPayload extends Schema.Top | Schema.Struct.Fields, TSuccess extends Schema.Top, TSpecs extends RejectionSpecs> {
|
|
51
|
+
readonly payload?: TPayload;
|
|
52
|
+
readonly rejections?: TSpecs & MatchingTags<TSpecs>;
|
|
53
|
+
readonly success?: TSuccess;
|
|
54
|
+
}
|
|
55
|
+
export declare function query<const TName extends string, TPayload extends Schema.Top | Schema.Struct.Fields = Schema.Void, TSuccess extends Schema.Top = Schema.Void, const TSpecs extends RejectionSpecs = NoRejections>(name: TName, declaration: Declaration<TPayload, TSuccess, TSpecs> & {
|
|
56
|
+
readonly reads: (payload: PayloadSchema<TPayload>["Type"]) => readonly Key[];
|
|
57
|
+
}): NoInfer<Query<TName, PayloadSchema<TPayload>, TSuccess, TSpecs>>;
|
|
58
|
+
export declare function command<const TName extends string, TPayload extends Schema.Top | Schema.Struct.Fields = Schema.Void, TSuccess extends Schema.Top = Schema.Void, const TSpecs extends RejectionSpecs = NoRejections>(name: TName, declaration: Declaration<TPayload, TSuccess, TSpecs> & {
|
|
59
|
+
readonly invalidates: (payload: PayloadSchema<TPayload>["Type"], result: TSuccess["Type"]) => readonly Key[];
|
|
60
|
+
}): NoInfer<Command<TName, PayloadSchema<TPayload>, TSuccess, TSpecs>>;
|
|
61
|
+
export declare function stream<const TName extends string, TPayload extends Schema.Top | Schema.Struct.Fields = Schema.Void, TSuccess extends Schema.Top = Schema.Void, const TSpecs extends RejectionSpecs = NoRejections>(name: TName, declaration: Declaration<TPayload, TSuccess, TSpecs> & {
|
|
62
|
+
readonly success: TSuccess;
|
|
63
|
+
readonly reads: (payload: PayloadSchema<TPayload>["Type"]) => readonly Key[];
|
|
64
|
+
}): NoInfer<Streaming<TName, PayloadSchema<TPayload>, TSuccess, TSpecs>>;
|
|
53
65
|
export {};
|
|
54
66
|
//# sourceMappingURL=operation.d.ts.map
|
package/dist/operation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAgB,MAAM,gBAAgB,CAAC;AAEzI,MAAM,MAAM,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"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"}
|
package/dist/operation.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
2
|
import { rejectionSet } from "./rejection.js";
|
|
3
|
-
|
|
3
|
+
function payloadSchema(payload) {
|
|
4
4
|
if (payload === undefined) {
|
|
5
5
|
return Schema.Void;
|
|
6
6
|
}
|
|
7
7
|
return Schema.isSchema(payload) ? payload : Schema.Struct(payload);
|
|
8
|
-
}
|
|
9
|
-
|
|
8
|
+
}
|
|
9
|
+
function operation(kind, name, declaration) {
|
|
10
10
|
const { payload, success, rejections = {} } = declaration;
|
|
11
11
|
return {
|
|
12
12
|
kind,
|
|
@@ -16,11 +16,14 @@ const operation = (kind, name, declaration) => {
|
|
|
16
16
|
success: success ?? Schema.Void,
|
|
17
17
|
...rejectionSet(rejections),
|
|
18
18
|
};
|
|
19
|
-
}
|
|
19
|
+
}
|
|
20
20
|
export function query(name, declaration) {
|
|
21
21
|
return { ...operation("query", name, declaration), reads: declaration.reads };
|
|
22
22
|
}
|
|
23
23
|
export function command(name, declaration) {
|
|
24
24
|
return { ...operation("command", name, declaration), invalidates: declaration.invalidates };
|
|
25
25
|
}
|
|
26
|
+
export function stream(name, declaration) {
|
|
27
|
+
return { ...operation("stream", name, declaration), reads: declaration.reads };
|
|
28
|
+
}
|
|
26
29
|
//# sourceMappingURL=operation.js.map
|
package/dist/operation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAA6F,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAA6F,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA2EzI,SAAS,aAAa,CAAC,OAAyB;IAC/C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAuC,IAAW,EAAE,IAAY,EAAE,WAAkB;IACrG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,WAAW,CAAC;IAC1D,OAAO;QACN,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;QAC/B,UAAU;QACV,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI;QAC/B,GAAG,YAAY,CAAC,UAAU,CAAC;KAC3B,CAAC;AACH,CAAC;AAaD,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,WAA6E;IAChH,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;AAC/E,CAAC;AAaD,MAAM,UAAU,OAAO,CACtB,IAAY,EACZ,WAAoG;IAEpG,OAAO,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;AAC7F,CAAC;AAcD,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,WAA6E;IACjH,OAAO,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;AAChF,CAAC"}
|
package/dist/rejection.d.ts
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
import { type Cause, Effect, Schema } from "effect";
|
|
2
|
-
export type RejectionValue<
|
|
3
|
-
export type RejectionClass<
|
|
2
|
+
export type RejectionValue<TTag extends string, TFields extends Schema.Struct.Fields> = Schema.TaggedStruct<TTag, TFields>["Type"] & Cause.YieldableError;
|
|
3
|
+
export type RejectionClass<TTag extends string, TFields extends Schema.Struct.Fields> = Schema.Class<RejectionValue<TTag, TFields>, Schema.TaggedStruct<TTag, TFields>, Cause.YieldableError>;
|
|
4
4
|
export type TaggedRejection = Schema.Top & (new (...args: never) => {
|
|
5
5
|
readonly _tag: string;
|
|
6
6
|
});
|
|
7
7
|
export interface RejectionSpecs {
|
|
8
8
|
readonly [tag: string]: Schema.Struct.Fields | TaggedRejection;
|
|
9
9
|
}
|
|
10
|
-
export type Rejections<
|
|
11
|
-
readonly [
|
|
10
|
+
export type Rejections<TSpecs extends RejectionSpecs> = {
|
|
11
|
+
readonly [TTag in keyof TSpecs & string]: TSpecs[TTag] extends TaggedRejection ? TSpecs[TTag] : TSpecs[TTag] extends Schema.Struct.Fields ? RejectionClass<TTag, TSpecs[TTag]> : never;
|
|
12
12
|
};
|
|
13
|
-
export type RejectedBy<
|
|
14
|
-
[
|
|
15
|
-
}[keyof
|
|
16
|
-
export type Reject<
|
|
17
|
-
readonly [
|
|
13
|
+
export type RejectedBy<TSpecs extends RejectionSpecs> = {
|
|
14
|
+
[TTag in keyof TSpecs & string]: Rejections<TSpecs>[TTag]["Type"];
|
|
15
|
+
}[keyof TSpecs & string];
|
|
16
|
+
export type Reject<TSpecs extends RejectionSpecs> = {
|
|
17
|
+
readonly [TTag in keyof TSpecs & string]: Rejections<TSpecs>[TTag] extends new (...args: infer TArguments) => infer TValue ? (...args: TArguments) => Effect.Effect<never, TValue> : never;
|
|
18
18
|
};
|
|
19
|
-
export type RejectionUnion<
|
|
20
|
-
export type MatchingTags<
|
|
21
|
-
readonly [
|
|
22
|
-
readonly _tag:
|
|
23
|
-
} ?
|
|
19
|
+
export type RejectionUnion<TSpecs extends RejectionSpecs> = [keyof TSpecs & string] extends [never] ? Schema.Never : Schema.Union<readonly Rejections<TSpecs>[keyof TSpecs & string][]>;
|
|
20
|
+
export type MatchingTags<TSpecs extends RejectionSpecs> = {
|
|
21
|
+
readonly [TTag in keyof TSpecs]: TSpecs[TTag] extends TaggedRejection ? TSpecs[TTag]["Type"] extends {
|
|
22
|
+
readonly _tag: TTag;
|
|
23
|
+
} ? TSpecs[TTag] : `The rejection class under "${TTag & string}" must have that _tag` : TSpecs[TTag];
|
|
24
24
|
};
|
|
25
|
-
export interface RejectionSet<
|
|
26
|
-
readonly error: RejectionUnion<
|
|
27
|
-
readonly Rejection: Rejections<
|
|
28
|
-
readonly reject: Reject<
|
|
25
|
+
export interface RejectionSet<TSpecs extends RejectionSpecs> {
|
|
26
|
+
readonly error: RejectionUnion<TSpecs>;
|
|
27
|
+
readonly Rejection: Rejections<TSpecs>;
|
|
28
|
+
readonly reject: Reject<TSpecs>;
|
|
29
29
|
}
|
|
30
|
-
export declare function rejectionSet<const
|
|
31
|
-
export type FieldRejection<
|
|
32
|
-
field: Schema.Literals<readonly
|
|
30
|
+
export declare function rejectionSet<const TSpecs extends RejectionSpecs>(specs: TSpecs): RejectionSet<TSpecs>;
|
|
31
|
+
export type FieldRejection<TField extends string> = Readonly<{
|
|
32
|
+
field: Schema.Literals<readonly TField[]>;
|
|
33
33
|
message: Schema.String;
|
|
34
34
|
}>;
|
|
35
|
-
export declare function fieldRejection<const
|
|
36
|
-
readonly fields:
|
|
37
|
-
}): FieldRejection<keyof
|
|
38
|
-
export declare function fieldRejection<const
|
|
39
|
-
readonly fields:
|
|
40
|
-
}, fields: readonly
|
|
35
|
+
export declare function fieldRejection<const TFields extends Schema.Struct.Fields>(struct: {
|
|
36
|
+
readonly fields: TFields;
|
|
37
|
+
}): FieldRejection<keyof TFields & string>;
|
|
38
|
+
export declare function fieldRejection<const TFields extends Schema.Struct.Fields, const TField extends keyof TFields & string>(struct: {
|
|
39
|
+
readonly fields: TFields;
|
|
40
|
+
}, fields: readonly TField[]): FieldRejection<TField>;
|
|
41
41
|
//# sourceMappingURL=rejection.d.ts.map
|