@rivetkit/effect 0.0.0-main.9d355a2 → 0.0.0-main.b2d3b94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Actor.d.ts +2 -3
- package/dist/Actor.d.ts.map +1 -1
- package/dist/Actor.js +2 -2
- package/dist/Actor.js.map +1 -1
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +6 -4
- package/dist/Client.js.map +1 -1
- package/dist/Registry.d.ts +69 -7
- package/dist/Registry.d.ts.map +1 -1
- package/dist/Registry.js +93 -40
- package/dist/Registry.js.map +1 -1
- package/dist/RivetError.d.ts +45 -3
- package/dist/RivetError.d.ts.map +1 -1
- package/dist/RivetError.js +112 -0
- package/dist/RivetError.js.map +1 -1
- package/dist/RivetLogger.d.ts +41 -0
- package/dist/RivetLogger.d.ts.map +1 -0
- package/dist/RivetLogger.js +41 -0
- package/dist/RivetLogger.js.map +1 -0
- package/dist/State.d.ts +92 -56
- package/dist/State.d.ts.map +1 -1
- package/dist/State.js +51 -57
- package/dist/State.js.map +1 -1
- package/dist/internal/ActorInstanceManager.d.ts.map +1 -1
- package/dist/internal/ActorInstanceManager.js +4 -4
- package/dist/internal/ActorInstanceManager.js.map +1 -1
- package/dist/internal/ActorStateAdapter.d.ts +1 -1
- package/dist/internal/ActorStateAdapter.d.ts.map +1 -1
- package/dist/internal/ActorStateAdapter.js +2 -7
- package/dist/internal/ActorStateAdapter.js.map +1 -1
- package/dist/internal/StateOptions.d.ts +1 -0
- package/dist/internal/StateOptions.d.ts.map +1 -1
- package/dist/internal/logging.d.ts +6 -7
- package/dist/internal/logging.d.ts.map +1 -1
- package/dist/internal/logging.js +78 -102
- package/dist/internal/logging.js.map +1 -1
- package/dist/mod.d.ts +1 -1
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +1 -1
- package/dist/mod.js.map +1 -1
- package/package.json +8 -3
- package/src/Actor.test-d.ts +38 -0
- package/src/Actor.ts +29 -4
- package/src/Client.test.ts +21 -18
- package/src/Client.ts +6 -4
- package/src/Registry.test.ts +7 -11
- package/src/Registry.ts +116 -50
- package/src/RivetError.test.ts +11 -0
- package/src/RivetError.ts +119 -0
- package/src/RivetLogger.ts +60 -0
- package/src/State.test.ts +163 -4
- package/src/State.ts +293 -97
- package/src/internal/ActorInstanceManager.ts +4 -10
- package/src/internal/ActorStateAdapter.ts +5 -11
- package/src/internal/StateOptions.ts +4 -0
- package/src/internal/logging.test.ts +65 -88
- package/src/internal/logging.ts +103 -143
- package/src/mod.ts +1 -1
- package/dist/Logger.d.ts +0 -29
- package/dist/Logger.d.ts.map +0 -1
- package/dist/Logger.js +0 -31
- package/dist/Logger.js.map +0 -1
- package/src/Logger.ts +0 -43
|
@@ -7,7 +7,9 @@ export const make = Effect.fnUntraced(function* ({ wakeHandler, stateAdapter, ma
|
|
|
7
7
|
const scope = yield* Scope.make();
|
|
8
8
|
return yield* Effect.gen(function* () {
|
|
9
9
|
const state = stateAdapter
|
|
10
|
-
? yield* stateAdapter
|
|
10
|
+
? yield* stateAdapter
|
|
11
|
+
.makeStateView(c)
|
|
12
|
+
.pipe(Effect.provideService(Scope.Scope, scope))
|
|
11
13
|
: undefined;
|
|
12
14
|
const context = makeContext(c, scope);
|
|
13
15
|
const actionHandlers = yield* wakeHandler(makeWakeOptions(c, state)).pipe(Effect.provide(context));
|
|
@@ -23,9 +25,7 @@ export const make = Effect.fnUntraced(function* ({ wakeHandler, stateAdapter, ma
|
|
|
23
25
|
return {
|
|
24
26
|
get: (actorId) => instances.get(actorId),
|
|
25
27
|
onWake: async (c) => {
|
|
26
|
-
await runPromise(makeInstance(c)
|
|
27
|
-
instances.set(c.actorId, instance);
|
|
28
|
-
}))));
|
|
28
|
+
instances.set(c.actorId, await runPromise(makeInstance(c)));
|
|
29
29
|
},
|
|
30
30
|
onStateChange: stateAdapter
|
|
31
31
|
? (c, newState) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorInstanceManager.js","sourceRoot":"","sources":["../../src/internal/ActorInstanceManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAc,QAAQ,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAuC5E,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAK7C,EACD,WAAW,EACX,YAAY,EACZ,WAAW,EACX,eAAe,GAgBf;IACA,MAAM,SAAS,GAAG,IAAI,GAAG,EAGtB,CAAC;IAEJ,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAO,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEnD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC/C,CAAyC;QAEzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,MAAM,KAAK,GAAG,YAAY;gBACzB,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"ActorInstanceManager.js","sourceRoot":"","sources":["../../src/internal/ActorInstanceManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect, type Fiber, Schema } from "effect";
|
|
2
2
|
import * as State from "../State.ts";
|
|
3
3
|
import type * as StateOptions from "./StateOptions.ts";
|
|
4
|
-
export type ActorState<StateDefinition extends StateOptions.Any> = State.State<StateOptions.Decoded<StateDefinition>, Schema.SchemaError
|
|
4
|
+
export type ActorState<StateDefinition extends StateOptions.Any> = State.State<StateOptions.Decoded<StateDefinition>, Schema.SchemaError, StateOptions.Services<StateDefinition>>;
|
|
5
5
|
type StateInstance<StateDefinition extends StateOptions.Any> = {
|
|
6
6
|
readonly runFork: <A, E>(effect: Effect.Effect<A, E, any>, options?: Effect.RunOptions) => Fiber.Fiber<A, E>;
|
|
7
7
|
readonly state?: ActorState<StateDefinition>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorStateAdapter.d.ts","sourceRoot":"","sources":["../../src/internal/ActorStateAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ActorStateAdapter.d.ts","sourceRoot":"","sources":["../../src/internal/ActorStateAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,UAAU,CAAC,eAAe,SAAS,YAAY,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAC7E,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,EACrC,MAAM,CAAC,WAAW,EAClB,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CACtC,CAAC;AAEF,KAAK,aAAa,CAAC,eAAe,SAAS,YAAY,CAAC,GAAG,IAAI;IAC9D,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAChC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,KACvB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,eAAe,SAAS,YAAY,CAAC,GAAG,IAAI;IAC/D,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE;QAC3B,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;KAC7C,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7D,QAAQ,CAAC,kBAAkB,EAAE,MAAM,OAAO,CACzC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CACrC,CAAC;IACF,QAAQ,CAAC,aAAa,EAAE,CACvB,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,QAAQ,EAAE,OAAO,KACb,IAAI,CAAC;CACV,CAAC;AAEF,eAAO,MAAM,IAAI,GAChB,eAAe,SAAS,YAAY,CAAC,GAAG,uFAiDvC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Effect, Schema
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
2
|
import * as State from "../State.js";
|
|
3
3
|
export const make = Effect.fnUntraced(function* (stateOptions) {
|
|
4
4
|
const services = yield* Effect.context();
|
|
@@ -16,12 +16,7 @@ export const make = Effect.fnUntraced(function* (stateOptions) {
|
|
|
16
16
|
publishChange: (instance, newState) => {
|
|
17
17
|
instance.runFork(Effect.gen(function* () {
|
|
18
18
|
const state = yield* Effect.fromNullishOr(instance.state).pipe(Effect.orDie);
|
|
19
|
-
yield*
|
|
20
|
-
const decoded = yield* stateCodec
|
|
21
|
-
.decodeUnknown(newState)
|
|
22
|
-
.pipe(Effect.orDie);
|
|
23
|
-
State.publishUnsafe(state, decoded);
|
|
24
|
-
}));
|
|
19
|
+
yield* state[State.RuntimeTypeId].publishEffect(stateCodec.decodeUnknown(newState).pipe(Effect.orDie));
|
|
25
20
|
}));
|
|
26
21
|
},
|
|
27
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorStateAdapter.js","sourceRoot":"","sources":["../../src/internal/ActorStateAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"ActorStateAdapter.js","sourceRoot":"","sources":["../../src/internal/ActorStateAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AA8BrC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAG9C,YAA6B;IAE7B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAO,CAAC;IAE9C,MAAM,UAAU,GAAG;QAClB,aAAa,EAAE,MAAM,CAAC,mBAAmB,CACxC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CACvC;QACD,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KACpE,CAAC;IAEF,OAAO;QACN,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CACpB,KAAK,CAAC,IAAI,CACT,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EACvC,CAAC,IAAI,EAAE,EAAE,CACR,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC;QACnB,CAAC,CAAC,CACF,EACD,MAAM,CAAC,MAAM,CACb,CACF,CAAC,IAAI,CACL,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAoC,CAAC,CAC3D;QACF,kBAAkB,EAAE,GAAG,EAAE,CACxB,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC9B,UAAU;aACR,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;aACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACpB;QACF,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACrC,QAAQ,CAAC,OAAO,CACf,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACnB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CACxC,QAAQ,CAAC,KAAK,CACd,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,aAAa,CAC9C,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACrD,CAAC;YACH,CAAC,CAAC,CACF,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -7,6 +7,7 @@ export interface Any {
|
|
|
7
7
|
readonly schema: Schema.Top;
|
|
8
8
|
readonly initialValue: () => unknown;
|
|
9
9
|
}
|
|
10
|
+
export type Services<State extends Any> = State["schema"]["DecodingServices"] | State["schema"]["EncodingServices"];
|
|
10
11
|
export type Encoded<State extends Any> = State["schema"]["Encoded"] | ([State] extends [never] ? undefined : never);
|
|
11
12
|
export type Decoded<State extends Any> = State["schema"]["Type"];
|
|
12
13
|
//# sourceMappingURL=StateOptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StateOptions.d.ts","sourceRoot":"","sources":["../../src/internal/StateOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,WAAW,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG;IACxD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,GAAG;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,GAAG,IAClC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAC1B,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC;AAEjD,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"StateOptions.d.ts","sourceRoot":"","sources":["../../src/internal/StateOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,WAAW,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG;IACxD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,GAAG;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,GAAG,IACnC,KAAK,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GACnC,KAAK,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAEvC,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,GAAG,IAClC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAC1B,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC;AAEjD,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import { Context, Effect, Logger
|
|
1
|
+
import { Context, Effect, Logger } from "effect";
|
|
2
2
|
import type * as Rivetkit from "rivetkit";
|
|
3
|
-
import
|
|
3
|
+
import * as RivetkitLog from "rivetkit/log";
|
|
4
4
|
type ActorLogContext = {
|
|
5
5
|
readonly name: string;
|
|
6
6
|
readonly key: Rivetkit.ActorKey;
|
|
7
7
|
readonly actorId: string;
|
|
8
8
|
};
|
|
9
|
-
declare const BaseLogger_base: Context.ServiceClass<BaseLogger, "@rivetkit/effect/
|
|
9
|
+
declare const BaseLogger_base: Context.ServiceClass<BaseLogger, "@rivetkit/effect/RivetLogger/BaseLogger", RivetkitLog.Logger>;
|
|
10
10
|
export declare class BaseLogger extends BaseLogger_base {
|
|
11
11
|
}
|
|
12
|
-
export declare const
|
|
13
|
-
export declare const
|
|
14
|
-
export declare const getOrCreateBaseLogger: Effect.Effect<PinoLogger>;
|
|
12
|
+
export declare const makeDefaultBaseLogger: Effect.Effect<RivetkitLog.Logger>;
|
|
13
|
+
export declare const getOrCreateBaseLogger: Effect.Effect<RivetkitLog.Logger>;
|
|
15
14
|
export declare function makeActorLogAnnotations(context: ActorLogContext): {
|
|
16
15
|
readonly actor: string;
|
|
17
16
|
readonly key: string;
|
|
18
17
|
readonly actorId: string;
|
|
19
18
|
};
|
|
20
19
|
export declare function serializeActorKey(key: Rivetkit.ActorKey): string;
|
|
21
|
-
export declare function
|
|
20
|
+
export declare function makeLogger(baseLogger: RivetkitLog.Logger): Logger.Logger<unknown, void>;
|
|
22
21
|
export {};
|
|
23
22
|
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/internal/logging.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/internal/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,OAAO,EACP,MAAM,EACN,MAAM,EAMN,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,KAAK,QAAQ,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAK5C,KAAK,eAAe,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB,CAAC;;AAEF,qBAAa,UAAW,SAAQ,eAGc;CAAG;AAuCjD,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAUjE,CAAC;AAEJ,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAQjE,CAAC;AAEJ,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB,CAMA;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAgBhE;AAED,wBAAgB,UAAU,CACzB,UAAU,EAAE,WAAW,CAAC,MAAM,GAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CA4B9B"}
|
package/dist/internal/logging.js
CHANGED
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { Config, Context, Effect, Logger, Option, Predicate, Record as EffectRecord, References, } from "effect";
|
|
2
|
+
import * as RivetkitLog from "rivetkit/log";
|
|
3
3
|
const EMPTY_KEY = "/";
|
|
4
4
|
const KEY_SEPARATOR = "/";
|
|
5
|
-
export class BaseLogger extends Context.Service()("@rivetkit/effect/
|
|
5
|
+
export class BaseLogger extends Context.Service()("@rivetkit/effect/RivetLogger/BaseLogger") {
|
|
6
6
|
}
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
Trace: "trace",
|
|
10
|
-
Debug: "debug",
|
|
11
|
-
Info: "info",
|
|
12
|
-
Warn: "warn",
|
|
13
|
-
Error: "error",
|
|
14
|
-
Fatal: "fatal",
|
|
15
|
-
None: "silent",
|
|
16
|
-
};
|
|
17
|
-
export const toPinoLevel = (logLevel) => PinoLevelByEffectLevel[logLevel];
|
|
18
|
-
const EffectLevelByPinoLevel = {
|
|
7
|
+
const RivetkitLogLevels = RivetkitLog.LogLevelSchema.options;
|
|
8
|
+
const EffectLevelByRivetkitLevel = {
|
|
19
9
|
trace: "Trace",
|
|
20
10
|
debug: "Debug",
|
|
21
11
|
info: "Info",
|
|
@@ -24,32 +14,30 @@ const EffectLevelByPinoLevel = {
|
|
|
24
14
|
fatal: "Fatal",
|
|
25
15
|
silent: "None",
|
|
26
16
|
};
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
17
|
+
const RivetkitLevelByEffectLevel = {
|
|
18
|
+
...Object.fromEntries(RivetkitLogLevels.map((level) => [
|
|
19
|
+
EffectLevelByRivetkitLevel[level],
|
|
20
|
+
level,
|
|
21
|
+
])),
|
|
22
|
+
All: "trace",
|
|
23
|
+
};
|
|
24
|
+
const rivetLogLevelFromEnv = Config.string("RIVET_LOG_LEVEL").pipe(Effect.option, Effect.map((maybeRivetLogLevel) => {
|
|
25
|
+
if (Option.isNone(maybeRivetLogLevel))
|
|
26
|
+
return Option.none();
|
|
27
|
+
const parsed = RivetkitLog.LogLevelSchema.safeParse(maybeRivetLogLevel.value.toLowerCase());
|
|
28
|
+
return parsed.success ? Option.some(parsed.data) : Option.none();
|
|
33
29
|
}));
|
|
34
|
-
const logLevelFromEnv = Config.logLevel("RIVET_LOG_LEVEL").pipe(Config.orElse(() => pinoLogLevelFromEnv), Effect.option);
|
|
35
30
|
export const makeDefaultBaseLogger = Effect.gen(function* () {
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
: envLogLevel._tag === "Some"
|
|
42
|
-
? envLogLevel.value
|
|
43
|
-
: yield* References.MinimumLogLevel;
|
|
44
|
-
return yield* Effect.sync(() => {
|
|
45
|
-
configureDefaultLogger(toPinoLevel(logLevel));
|
|
46
|
-
return getBaseLogger();
|
|
47
|
-
});
|
|
31
|
+
const maybeRivetLogLevel = yield* rivetLogLevelFromEnv;
|
|
32
|
+
const logLevel = Option.isSome(maybeRivetLogLevel)
|
|
33
|
+
? maybeRivetLogLevel.value
|
|
34
|
+
: RivetkitLevelByEffectLevel[yield* References.MinimumLogLevel];
|
|
35
|
+
return yield* Effect.sync(() => RivetkitLog.makeDefaultLogger(logLevel));
|
|
48
36
|
});
|
|
49
37
|
export const getOrCreateBaseLogger = Effect.gen(function* () {
|
|
50
|
-
const
|
|
51
|
-
if (
|
|
52
|
-
return
|
|
38
|
+
const maybeBaseLogger = yield* Effect.serviceOption(BaseLogger);
|
|
39
|
+
if (Option.isSome(maybeBaseLogger)) {
|
|
40
|
+
return maybeBaseLogger.value;
|
|
53
41
|
}
|
|
54
42
|
return yield* makeDefaultBaseLogger;
|
|
55
43
|
});
|
|
@@ -75,51 +63,62 @@ export function serializeActorKey(key) {
|
|
|
75
63
|
})
|
|
76
64
|
.join(KEY_SEPARATOR);
|
|
77
65
|
}
|
|
78
|
-
function
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
66
|
+
export function makeLogger(baseLogger) {
|
|
67
|
+
return Logger.make((options) => {
|
|
68
|
+
if (options.logLevel === "None")
|
|
69
|
+
return;
|
|
70
|
+
const rivetkitLevel = RivetkitLevelByEffectLevel[options.logLevel];
|
|
71
|
+
const structured = Logger.formatStructured.log(options);
|
|
72
|
+
const { msg, fields: messageFields } = extractMessage(structured.message);
|
|
73
|
+
const fields = {
|
|
74
|
+
...messageFields,
|
|
75
|
+
...structured.annotations,
|
|
76
|
+
fiberId: structured.fiberId,
|
|
77
|
+
};
|
|
78
|
+
if (!EffectRecord.isEmptyRecord(structured.spans)) {
|
|
79
|
+
fields.spans = structured.spans;
|
|
80
|
+
}
|
|
81
|
+
if (structured.cause !== undefined) {
|
|
82
|
+
fields.cause = structured.cause;
|
|
83
|
+
}
|
|
84
|
+
const logger = baseLogger[rivetkitLevel];
|
|
85
|
+
if (msg === undefined) {
|
|
86
|
+
logger.call(baseLogger, fields);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
logger.call(baseLogger, fields, msg);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
83
92
|
}
|
|
84
|
-
function
|
|
93
|
+
function extractMessage(message) {
|
|
85
94
|
const values = Array.isArray(message) ? message : [message];
|
|
86
|
-
if (values.length === 0) {
|
|
87
|
-
return { msg: undefined, fields: {} };
|
|
88
|
-
}
|
|
89
|
-
const [first, ...rest] = values;
|
|
90
95
|
const fields = {};
|
|
96
|
+
const args = [];
|
|
91
97
|
let msg;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const firstFields = first;
|
|
98
|
-
for (const [key, value] of Object.entries(firstFields)) {
|
|
99
|
-
if (key === "msg") {
|
|
100
|
-
if (value !== undefined) {
|
|
101
|
-
msg = String(value);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
fields[key] = structuredValue(value);
|
|
106
|
-
}
|
|
98
|
+
for (const [index, value] of values.entries()) {
|
|
99
|
+
if (Predicate.isError(value)) {
|
|
100
|
+
fields.error = value;
|
|
101
|
+
if (index === 0)
|
|
102
|
+
msg = value.message;
|
|
107
103
|
}
|
|
108
|
-
|
|
109
|
-
else if (first !== undefined) {
|
|
110
|
-
msg = String(first);
|
|
111
|
-
}
|
|
112
|
-
const args = [];
|
|
113
|
-
for (const value of rest) {
|
|
114
|
-
if (value instanceof Error) {
|
|
104
|
+
else if (isStructuredError(value)) {
|
|
115
105
|
fields.error = value;
|
|
106
|
+
if (index === 0)
|
|
107
|
+
msg = value.error;
|
|
116
108
|
}
|
|
117
|
-
else if (value
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
109
|
+
else if (Predicate.isObject(value)) {
|
|
110
|
+
if (index === 0) {
|
|
111
|
+
const { msg: valueMsg, ...rest } = value;
|
|
112
|
+
Object.assign(fields, rest);
|
|
113
|
+
if (valueMsg !== undefined)
|
|
114
|
+
msg = String(valueMsg);
|
|
122
115
|
}
|
|
116
|
+
else {
|
|
117
|
+
Object.assign(fields, value);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (index === 0) {
|
|
121
|
+
msg = value === undefined ? undefined : String(value);
|
|
123
122
|
}
|
|
124
123
|
else {
|
|
125
124
|
args.push(value);
|
|
@@ -130,33 +129,10 @@ function extractMessageAndFields(message) {
|
|
|
130
129
|
}
|
|
131
130
|
return { msg, fields };
|
|
132
131
|
}
|
|
133
|
-
|
|
134
|
-
return
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
const spans = {};
|
|
140
|
-
for (const [label, startTime] of fiber.getRef(References.CurrentLogSpans)) {
|
|
141
|
-
spans[label] = date.getTime() - startTime;
|
|
142
|
-
}
|
|
143
|
-
if (Object.keys(spans).length > 0) {
|
|
144
|
-
fields.spans = spans;
|
|
145
|
-
}
|
|
146
|
-
if (cause.reasons.length > 0) {
|
|
147
|
-
fields.cause = Cause.pretty(cause);
|
|
148
|
-
}
|
|
149
|
-
const pinoLevel = toPinoLevel(logLevel);
|
|
150
|
-
if (pinoLevel === "silent") {
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const logger = baseLogger[pinoLevel];
|
|
154
|
-
if (msg === undefined) {
|
|
155
|
-
logger.call(baseLogger, fields);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
logger.call(baseLogger, fields, msg);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
132
|
+
function isStructuredError(value) {
|
|
133
|
+
return (Predicate.hasProperty(value, "error") &&
|
|
134
|
+
Predicate.hasProperty(value, "name") &&
|
|
135
|
+
Predicate.isString(value.error) &&
|
|
136
|
+
Predicate.isString(value.name));
|
|
161
137
|
}
|
|
162
138
|
//# sourceMappingURL=logging.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/internal/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/internal/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,MAAM,EACN,SAAS,EACT,MAAM,IAAI,YAAY,EAEtB,UAAU,GACV,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAE5C,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,aAAa,GAAG,GAAG,CAAC;AAQ1B,MAAM,OAAO,UAAW,SAAQ,OAAO,CAAC,OAAO,EAG5C,CAAC,yCAAyC,CAAC;CAAG;AAEjD,MAAM,iBAAiB,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC;AAE7D,MAAM,0BAA0B,GAAG;IAClC,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,MAAM;CAId,CAAC;AAEF,MAAM,0BAA0B,GAAG;IAClC,GAAG,MAAM,CAAC,WAAW,CACpB,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAChC,0BAA0B,CAAC,KAAK,CAAC;QACjC,KAAK;KACL,CAAC,CACF;IACD,GAAG,EAAE,OAAO;CACuC,CAAC;AAErD,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,EAAE;IACjC,IAAI,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IAE5D,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,SAAS,CAClD,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,CACtC,CAAC;IACF,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GACjC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACjD,CAAC,CAAC,kBAAkB,CAAC,KAAK;QAC1B,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAEjE,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAC9B,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACvC,CAAC;AACH,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,qBAAqB,GACjC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,eAAe,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,qBAAqB,CAAC;AACrC,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,uBAAuB,CAAC,OAAwB;IAK/D,OAAO;QACN,KAAK,EAAE,OAAO,CAAC,IAAI;QACnB,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;KACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAsB;IACvD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,GAAG;SACR,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI;aACT,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,KAAK,aAAa,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;SACD,IAAI,CAAC,aAAa,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,UAA8B;IAE9B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM;YAAE,OAAO;QACxC,MAAM,aAAa,GAAG,0BAA0B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,cAAc,CACpD,UAAU,CAAC,OAAO,CAClB,CAAC;QACF,MAAM,MAAM,GAA4B;YACvC,GAAG,aAAa;YAChB,GAAG,UAAU,CAAC,WAAW;YACzB,OAAO,EAAE,UAAU,CAAC,OAAO;SAC3B,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QACjC,CAAC;QACD,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QACjC,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB;IAIvC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,IAAI,GAAuB,CAAC;IAE5B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,IAAI,KAAK,KAAK,CAAC;gBAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;QACtC,CAAC;aAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,IAAI,KAAK,KAAK,CAAC;gBAAE,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;QACpC,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACjB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC5B,IAAI,QAAQ,KAAK,SAAS;oBAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9B,CAAC;QACF,CAAC;aAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACxB,GAAG,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACF,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB,CACzB,KAAc;IAEd,OAAO,CACN,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;QACrC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;QACpC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAC9B,CAAC;AACH,CAAC"}
|
package/dist/mod.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export * as Action from "./Action.ts";
|
|
2
2
|
export * as Actor from "./Actor.ts";
|
|
3
3
|
export * as Client from "./Client.ts";
|
|
4
|
-
export * as Logger from "./Logger.ts";
|
|
5
4
|
export * as Registry from "./Registry.ts";
|
|
5
|
+
export * as RivetLogger from "./RivetLogger.ts";
|
|
6
6
|
export * as RivetError from "./RivetError.ts";
|
|
7
7
|
export * as State from "./State.ts";
|
|
8
8
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC"}
|
package/dist/mod.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export * as Action from "./Action.js";
|
|
2
2
|
export * as Actor from "./Actor.js";
|
|
3
3
|
export * as Client from "./Client.js";
|
|
4
|
-
export * as Logger from "./Logger.js";
|
|
5
4
|
export * as Registry from "./Registry.js";
|
|
5
|
+
export * as RivetLogger from "./RivetLogger.js";
|
|
6
6
|
export * as RivetError from "./RivetError.js";
|
|
7
7
|
export * as State from "./State.js";
|
|
8
8
|
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rivetkit/effect",
|
|
3
|
-
"version": "0.0.0-main.
|
|
3
|
+
"version": "0.0.0-main.b2d3b94",
|
|
4
4
|
"description": "Effect SDK for Rivet Actors",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"effect": "^4.0.0-beta.66",
|
|
34
|
-
"rivetkit": "0.0.0-main.
|
|
34
|
+
"rivetkit": "0.0.0-main.b2d3b94"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@arethetypeswrong/cli": "^0.18.3",
|
|
@@ -40,8 +40,13 @@
|
|
|
40
40
|
"@types/node": "^22.18.1",
|
|
41
41
|
"@vitest/coverage-v8": "^4.1.7",
|
|
42
42
|
"publint": "^0.3.21",
|
|
43
|
-
"rivetkit": "0.0.0-main.
|
|
43
|
+
"rivetkit": "0.0.0-main.b2d3b94",
|
|
44
44
|
"typescript": "^5.9.2",
|
|
45
45
|
"vitest": "^4.1.5"
|
|
46
|
+
},
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "https://github.com/rivet-dev/actors.git",
|
|
50
|
+
"directory": "rivetkit-typescript/packages/effect"
|
|
46
51
|
}
|
|
47
52
|
}
|
package/src/Actor.test-d.ts
CHANGED
|
@@ -76,6 +76,13 @@ const ServiceDependentActor = Actor.make("ServiceDependentActor", {
|
|
|
76
76
|
actions: [ServiceDependentAction],
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
+
const ServiceDependentState = {
|
|
80
|
+
schema: Schema.Struct({
|
|
81
|
+
count: ServiceDependentNumber,
|
|
82
|
+
}),
|
|
83
|
+
initialValue: () => ({ count: 0 }),
|
|
84
|
+
};
|
|
85
|
+
|
|
79
86
|
const TransformedState = {
|
|
80
87
|
schema: Schema.Struct({
|
|
81
88
|
when: Schema.DateFromString,
|
|
@@ -182,6 +189,31 @@ describe("Actor.make(...).toLayer", () => {
|
|
|
182
189
|
);
|
|
183
190
|
});
|
|
184
191
|
|
|
192
|
+
test("state schema services surface in State effects and actor layers", () => {
|
|
193
|
+
const layer = TestActor.toLayer(
|
|
194
|
+
(wakeOptions) => {
|
|
195
|
+
type StateGetServices = Effect.Services<
|
|
196
|
+
typeof wakeOptions.state.get
|
|
197
|
+
>;
|
|
198
|
+
|
|
199
|
+
expectTypeOf<SomeDep>().toExtend<StateGetServices>();
|
|
200
|
+
|
|
201
|
+
return {
|
|
202
|
+
Ping: () =>
|
|
203
|
+
wakeOptions.state.get.pipe(
|
|
204
|
+
Effect.map((current) => current.count),
|
|
205
|
+
Effect.orDie,
|
|
206
|
+
),
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
{ state: ServiceDependentState },
|
|
210
|
+
);
|
|
211
|
+
type LayerServices = Layer.Services<typeof layer>;
|
|
212
|
+
type LayerHasSomeDep = SomeDep extends LayerServices ? true : false;
|
|
213
|
+
|
|
214
|
+
expectTypeOf<LayerHasSomeDep>().toEqualTypeOf<true>();
|
|
215
|
+
});
|
|
216
|
+
|
|
185
217
|
test("wake options carry the transformed state type", () => {
|
|
186
218
|
TestActor.toLayer(
|
|
187
219
|
(wakeOptions) => {
|
|
@@ -256,6 +288,12 @@ describe("Actor.make(...).toLayer", () => {
|
|
|
256
288
|
expectTypeOf(
|
|
257
289
|
wakeOptions.rawRivetkitContext.db,
|
|
258
290
|
).toEqualTypeOf<RawAccess>();
|
|
291
|
+
expectTypeOf(
|
|
292
|
+
wakeOptions.rawRivetkitContext.db.transaction(
|
|
293
|
+
async () => {},
|
|
294
|
+
{ name: "effect-operation", timeout: 1_000 },
|
|
295
|
+
),
|
|
296
|
+
).toEqualTypeOf<Promise<void>>();
|
|
259
297
|
|
|
260
298
|
return {
|
|
261
299
|
Ping: () => Effect.succeed(0),
|
package/src/Actor.ts
CHANGED
|
@@ -175,7 +175,8 @@ type WakeOptionsFor<
|
|
|
175
175
|
: {
|
|
176
176
|
readonly state: State.State<
|
|
177
177
|
StateOptions.Decoded<StateDefinition>,
|
|
178
|
-
Schema.SchemaError
|
|
178
|
+
Schema.SchemaError,
|
|
179
|
+
StateOptions.Services<StateDefinition>
|
|
179
180
|
>;
|
|
180
181
|
});
|
|
181
182
|
|
|
@@ -232,6 +233,7 @@ type ToLayerRequirements<
|
|
|
232
233
|
| ExcludeBuiltInWakeServices<R, State>
|
|
233
234
|
| ExcludeBuiltInWakeServices<RX, State>
|
|
234
235
|
| UnknownToNever<ActionHandlerServices<ActionHandlers>>
|
|
236
|
+
| UnknownToNever<StateOptions.Services<State>>
|
|
235
237
|
| UnknownToNever<Action.ServicesServer<Actions>>
|
|
236
238
|
| UnknownToNever<Action.ServicesClient<Actions>>
|
|
237
239
|
| Registry.Registry;
|
|
@@ -334,9 +336,9 @@ const Proto: Omit<Actor<any, any>, "name" | "actions"> = {
|
|
|
334
336
|
>(wake),
|
|
335
337
|
options,
|
|
336
338
|
}).pipe(
|
|
337
|
-
Effect.
|
|
339
|
+
Effect.tap((rivetKitActor) =>
|
|
338
340
|
Registry.Registry.pipe(
|
|
339
|
-
Effect.
|
|
341
|
+
Effect.tap((registry) =>
|
|
340
342
|
Effect.sync(() =>
|
|
341
343
|
registry.rivetkitActors.set(
|
|
342
344
|
this.name,
|
|
@@ -375,6 +377,29 @@ export const make = <
|
|
|
375
377
|
return self;
|
|
376
378
|
};
|
|
377
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Normalizes any supported actor wake declaration into a wake function.
|
|
382
|
+
*
|
|
383
|
+
* @remarks
|
|
384
|
+
* {@link Actor.toLayer|`Actor.toLayer()`} accepts several equivalent shapes so actor
|
|
385
|
+
* implementations can choose the amount of initialization they need:
|
|
386
|
+
*
|
|
387
|
+
* - a plain action-handler object
|
|
388
|
+
* - an `Effect` that builds an action-handler object
|
|
389
|
+
* - a wake function that receives `wakeOptions` and returns handlers
|
|
390
|
+
* - a wake function that returns an `Effect` of handlers
|
|
391
|
+
* - an `Effect` that builds one of those wake functions
|
|
392
|
+
*
|
|
393
|
+
* This helper resolves those forms lazily for each actor wake and returns a
|
|
394
|
+
* single `(wakeOptions) => Effect<handlers>` representation. It does not run a
|
|
395
|
+
* wake function until the returned function is invoked, so per-wake resources,
|
|
396
|
+
* services, and state are scoped to the specific actor instance that is waking.
|
|
397
|
+
*
|
|
398
|
+
* @param wake - A supported wake declaration shape.
|
|
399
|
+
* @returns A function that resolves action handlers for one actor wake.
|
|
400
|
+
*
|
|
401
|
+
* @internal
|
|
402
|
+
*/
|
|
378
403
|
export function toWakeHandler<
|
|
379
404
|
ActionHandlers extends object,
|
|
380
405
|
R,
|
|
@@ -443,7 +468,7 @@ export function toWakeHandler<
|
|
|
443
468
|
|
|
444
469
|
return wakeEffect.pipe(
|
|
445
470
|
Effect.flatMap((resolvedWake) => {
|
|
446
|
-
if (
|
|
471
|
+
if (Predicate.isFunction(resolvedWake)) {
|
|
447
472
|
const actionHandlers = resolvedWake(wakeOptions);
|
|
448
473
|
return Effect.isEffect(actionHandlers)
|
|
449
474
|
? actionHandlers
|