@swirls/looms 0.3.0 → 0.4.0
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 +9 -0
- package/dist/agent/debugger/agent-chat.js +3 -30
- package/dist/agent/debugger/streaming-text.d.ts +6 -0
- package/dist/agent/debugger/streaming-text.js +33 -0
- package/dist/agent/module.d.ts +413 -413
- package/dist/core/attempts.d.ts +8 -0
- package/dist/core/attempts.js +27 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +1 -0
- package/dist/core/projection.d.ts +5 -4
- package/dist/{react → core}/register.d.ts +9 -8
- package/dist/debugger/app/assets/index-D--9esm9.js +22 -0
- package/dist/debugger/app/assets/routes-Dakrdusf.js +47 -0
- package/dist/debugger/app/index.html +1 -1
- package/dist/evaluator/effects.d.ts +33 -33
- package/dist/evaluator/module.d.ts +66 -66
- package/dist/react/derived.d.ts +26 -8
- package/dist/react/derived.js +23 -26
- package/dist/react/index.d.ts +3 -3
- package/dist/react/index.js +2 -2
- package/dist/react/react.d.ts +7 -8
- package/dist/react/react.js +4 -4
- package/dist/react/store.d.ts +4 -5
- package/package.json +2 -2
- package/dist/debugger/app/assets/index-BevQYa-U.js +0 -22
- package/dist/debugger/app/assets/routes-B17Om93i.js +0 -47
- /package/dist/{react → core}/register.js +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AnyEventEnvelope } from './register';
|
|
2
|
+
/** The effect a `runtime.effect.retry.scheduled` event retries, or `undefined` for other events. */
|
|
3
|
+
export declare function retriedEffectId(event: AnyEventEnvelope): string | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* Drops ephemeral events from effect attempts that a later retry in `events` superseded. Durable
|
|
6
|
+
* events and ephemeral events from the current attempt are kept.
|
|
7
|
+
*/
|
|
8
|
+
export declare function dropSupersededAttempts<E extends AnyEventEnvelope>(events: readonly E[]): readonly E[];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
import { protocolCatalog } from './protocol.js';
|
|
3
|
+
const RETRY_SCHEDULED = 'runtime.effect.retry.scheduled';
|
|
4
|
+
const isRetryPayload = Schema.is(protocolCatalog.entries['effect.retry.scheduled']);
|
|
5
|
+
/** The effect a `runtime.effect.retry.scheduled` event retries, or `undefined` for other events. */
|
|
6
|
+
export function retriedEffectId(event) {
|
|
7
|
+
return event.type === RETRY_SCHEDULED && isRetryPayload(event.payload)
|
|
8
|
+
? event.payload.effectId
|
|
9
|
+
: undefined;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Drops ephemeral events from effect attempts that a later retry in `events` superseded. Durable
|
|
13
|
+
* events and ephemeral events from the current attempt are kept.
|
|
14
|
+
*/
|
|
15
|
+
export function dropSupersededAttempts(events) {
|
|
16
|
+
const lastRetry = new Map();
|
|
17
|
+
events.forEach((event, index) => {
|
|
18
|
+
const effectId = retriedEffectId(event);
|
|
19
|
+
if (effectId !== undefined) {
|
|
20
|
+
lastRetry.set(effectId, index);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
if (lastRetry.size === 0) {
|
|
24
|
+
return events;
|
|
25
|
+
}
|
|
26
|
+
return events.filter((event, index) => !event.ephemeral || !event.effectId || (lastRetry.get(event.effectId) ?? -1) < index);
|
|
27
|
+
}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export * from './fold';
|
|
|
15
15
|
export * from './replay';
|
|
16
16
|
export * from './fork';
|
|
17
17
|
export * from './projection';
|
|
18
|
+
export * from './attempts';
|
|
19
|
+
export type * from './register';
|
|
18
20
|
export * from './module';
|
|
19
21
|
export * from './kind';
|
|
20
22
|
export * from './module-scope';
|
package/dist/core/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Schema, Stream, type Effect } from 'effect';
|
|
2
2
|
import type { EventEnvelope } from './envelope';
|
|
3
|
+
import type { AnyEventEnvelope, RegisteredEvent } from './register';
|
|
3
4
|
import type { InferSchemaOutput, SchemaInput } from './schema';
|
|
4
5
|
import type { RunState, ThreadRecord } from './state';
|
|
5
6
|
export interface ProjectionDefinition<S = unknown> {
|
|
@@ -8,17 +9,17 @@ export interface ProjectionDefinition<S = unknown> {
|
|
|
8
9
|
initialState: S;
|
|
9
10
|
reduce(state: S, event: EventEnvelope): S;
|
|
10
11
|
}
|
|
11
|
-
export declare function defineProjection<S = unknown>(def: {
|
|
12
|
+
export declare function defineProjection<S = unknown, TEvent extends AnyEventEnvelope = RegisteredEvent>(def: {
|
|
12
13
|
readonly name: string;
|
|
13
14
|
readonly shape?: undefined;
|
|
14
15
|
readonly initialState: S;
|
|
15
|
-
reduce(state: S, event:
|
|
16
|
+
reduce(state: S, event: TEvent): S;
|
|
16
17
|
}): ProjectionDefinition<S>;
|
|
17
|
-
export declare function defineProjection<TShape extends SchemaInput>(def: {
|
|
18
|
+
export declare function defineProjection<TShape extends SchemaInput, TEvent extends AnyEventEnvelope = RegisteredEvent>(def: {
|
|
18
19
|
readonly name: string;
|
|
19
20
|
readonly shape: TShape;
|
|
20
21
|
readonly initialState: InferSchemaOutput<TShape>;
|
|
21
|
-
reduce(state: NoInfer<InferSchemaOutput<TShape>>, event:
|
|
22
|
+
reduce(state: NoInfer<InferSchemaOutput<TShape>>, event: TEvent): InferSchemaOutput<TShape>;
|
|
22
23
|
}): ProjectionDefinition<InferSchemaOutput<TShape>>;
|
|
23
24
|
export declare function foldProjection<S>(projection: ProjectionDefinition<S>, events: readonly EventEnvelope[], initial?: S): S;
|
|
24
25
|
/** Fold a projection over events, skipping ephemeral ones. */
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { EventsOf } from './compose';
|
|
2
|
+
import type { EventEnvelope } from './envelope';
|
|
2
3
|
/** Looser event bound so catalog-inferred payloads (including Schema.Type) are accepted. */
|
|
3
4
|
export type AnyEventEnvelope = EventEnvelope<string, any>;
|
|
4
5
|
/**
|
|
5
|
-
* Application-level type registry for Looms
|
|
6
|
+
* Application-level type registry for Looms.
|
|
6
7
|
*
|
|
7
|
-
* Augment this interface
|
|
8
|
-
* `
|
|
8
|
+
* Augment this interface once to bind your event union. `defineProjection` reducers and the
|
|
9
|
+
* `@swirls/looms/react` hooks and stores use it as their default event type:
|
|
9
10
|
*
|
|
10
11
|
* ```ts
|
|
11
12
|
* declare module '@swirls/looms/react' {
|
|
@@ -15,7 +16,7 @@ export type AnyEventEnvelope = EventEnvelope<string, any>;
|
|
|
15
16
|
* }
|
|
16
17
|
* ```
|
|
17
18
|
*
|
|
18
|
-
* You may register either:
|
|
19
|
+
* Augmenting `@swirls/looms/core` works the same way. You may register either:
|
|
19
20
|
* - `events`: an explicit event union
|
|
20
21
|
* - `modules`: a module array / creator function (via `EventsOf`)
|
|
21
22
|
* - `catalog`: an event catalog or catalog array (via `EventsOf`)
|
|
@@ -24,8 +25,8 @@ export interface LoomsRegister {
|
|
|
24
25
|
}
|
|
25
26
|
export type RegisteredEvent = LoomsRegister extends {
|
|
26
27
|
events: infer E;
|
|
27
|
-
} ? E
|
|
28
|
+
} ? Extract<E, AnyEventEnvelope> : LoomsRegister extends {
|
|
28
29
|
modules: infer M;
|
|
29
|
-
} ? EventsOf<M
|
|
30
|
+
} ? Extract<EventsOf<M>, AnyEventEnvelope> : LoomsRegister extends {
|
|
30
31
|
catalog: infer C;
|
|
31
|
-
} ? EventsOf<C
|
|
32
|
+
} ? Extract<EventsOf<C>, AnyEventEnvelope> : EventEnvelope;
|