<const Shapes extends StoreShapes>(
shapes: Shapes
): StoreContractValue<Shapes>
<
const Shapes extends StoreShapes,
const Custom extends Readonly<Record<string, unknown>>
>(
shapes: Shapes,
methods: (shapes: ShapeHandles<Shapes>) => Custom
): StoreContractValue<Shapes, Custom>Declare store shapes and optional custom methods.
Part 1 declares row shapes (each becomes store.<shape>.append / .read with the
baked-in read payload). Part 2 optionally adds flat aliases, bare Effects, or effect
functions — not readWith helpers.
export const const contract: {
<const Shapes extends StoreShapes>(
shapes: Shapes
): StoreContractValue<Shapes>
<
const Shapes extends StoreShapes,
const Custom extends Readonly<
Record<string, unknown>
>
>(
shapes: Shapes,
methods: (
shapes: ShapeHandles<Shapes>
) => Custom
): StoreContractValue<Shapes, Custom>
}
Declare store shapes and optional custom methods.
Part 1 declares row shapes (each becomes store.<shape>.append / .read with the
baked-in read payload). Part 2 optionally adds flat aliases, bare Effects, or effect
functions — not readWith helpers.
contract: {
<const function (type parameter) Shapes in <const Shapes extends StoreShapes>(shapes: Shapes): StoreContractValue<Shapes>Shapes extends type StoreShapes = {
readonly [x: string]: StoreShapeInput;
}
StoreShapes>(
shapes: const Shapes extends StoreShapesshapes: function (type parameter) Shapes in <const Shapes extends StoreShapes>(shapes: Shapes): StoreContractValue<Shapes>Shapes,
): type StoreContractValue<Shapes extends StoreShapes = Readonly<Record<string, StoreShapeInput>>, Custom extends Readonly<Record<string, unknown>> = Readonly<Record<never, never>>> = StoreContractDef<Shapes, Custom> & PipeableStoreContractValue<function (type parameter) Shapes in <const Shapes extends StoreShapes>(shapes: Shapes): StoreContractValue<Shapes>Shapes>;
<
const function (type parameter) Shapes in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): StoreContractValue<Shapes, Custom>Shapes extends type StoreShapes = {
readonly [x: string]: StoreShapeInput;
}
StoreShapes,
const function (type parameter) Custom in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): StoreContractValue<Shapes, Custom>Custom extends type Readonly<T> = {
readonly [P in keyof T]: T[P]
}
Make all properties in T readonly
Readonly<type Record<K extends keyof any, T> = {
[P in K]: T
}
Construct a type with a set of properties K of type T
Record<string, unknown>>,
>(
shapes: const Shapes extends StoreShapesshapes: function (type parameter) Shapes in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): StoreContractValue<Shapes, Custom>Shapes,
methods: (shapes: ShapeHandles<Shapes>) => Custommethods: (shapes: ShapeHandles<Shapes>shapes: type ShapeHandles<Shapes extends StoreShapes> = { readonly [K in keyof Shapes & string as PublicShapeKey<K>]: Shapes[K] extends StoreShapeInputLeaf ? ShapeHandle<NormalizeShape<Shapes[K]>> : Shapes[K] extends StoreShapeTree ? ShapeHandles<Shapes[K]> : never; }Recursive handle tree passed to a contract's methods function: a leaf shape → its
ShapeHandle
({ schema, readPayload, append, read }), a sub-tree → nested
ShapeHandles
. So shapes.sensors.temperature.append navigates the tree.
Underscore-prefixed shapes (e.g. platform _logs) are omitted — same privacy as Effect
_-fields.
ShapeHandles<function (type parameter) Shapes in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): StoreContractValue<Shapes, Custom>Shapes>) => function (type parameter) Custom in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): StoreContractValue<Shapes, Custom>Custom,
): type StoreContractValue<Shapes extends StoreShapes = Readonly<Record<string, StoreShapeInput>>, Custom extends Readonly<Record<string, unknown>> = Readonly<Record<never, never>>> = StoreContractDef<Shapes, Custom> & PipeableStoreContractValue<function (type parameter) Shapes in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): StoreContractValue<Shapes, Custom>Shapes, function (type parameter) Custom in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): StoreContractValue<Shapes, Custom>Custom>;
} = ((shapes: Readonly<
Record<string, StoreShapeInput>
>
shapes: type StoreShapes = {
readonly [x: string]: StoreShapeInput;
}
StoreShapes, methods: | ((
handles: ShapeHandles<StoreShapes>
) => Readonly<Record<string, unknown>>)
| undefined
methods?: (handles: ShapeHandles<
Readonly<Record<string, StoreShapeInput>>
>
handles: type ShapeHandles<Shapes extends StoreShapes> = { readonly [K in keyof Shapes & string as PublicShapeKey<K>]: Shapes[K] extends StoreShapeInputLeaf ? ShapeHandle<NormalizeShape<Shapes[K]>> : Shapes[K] extends StoreShapeTree ? ShapeHandles<Shapes[K]> : never; }Recursive handle tree passed to a contract's methods function: a leaf shape → its
ShapeHandle
({ schema, readPayload, append, read }), a sub-tree → nested
ShapeHandles
. So shapes.sensors.temperature.append navigates the tree.
Underscore-prefixed shapes (e.g. platform _logs) are omitted — same privacy as Effect
_-fields.
ShapeHandles<type StoreShapes = {
readonly [x: string]: StoreShapeInput;
}
StoreShapes>) => type Readonly<T> = {
readonly [P in keyof T]: T[P]
}
Make all properties in T readonly
Readonly<type Record<K extends keyof any, T> = {
[P in K]: T
}
Construct a type with a set of properties K of type T
Record<string, unknown>>) =>
methods: | ((
handles: ShapeHandles<StoreShapes>
) => Readonly<Record<string, unknown>>)
| undefined
methods === var undefinedundefined
? makeStoreContractValue<Readonly<Record<string, StoreShapeInput>>>(shapes: Readonly<Record<string, StoreShapeInput>>): StoreContractValue<Readonly<Record<string, StoreShapeInput>>, Readonly<Record<never, never>>> (+1 overload)makeStoreContractValue(shapes: Readonly<
Record<string, StoreShapeInput>
>
shapes)
: makeStoreContractValue<Readonly<Record<string, StoreShapeInput>>, Readonly<Record<string, unknown>>>(shapes: Readonly<Record<string, StoreShapeInput>>, methods: (handles: ShapeHandles<Readonly<Record<string, StoreShapeInput>>>) => Readonly<Record<string, unknown>>): StoreContractValue<Readonly<Record<string, StoreShapeInput>>, Readonly<Record<string, unknown>>> (+1 overload)makeStoreContractValue(shapes: Readonly<
Record<string, StoreShapeInput>
>
shapes, methods: (
handles: ShapeHandles<StoreShapes>
) => Readonly<Record<string, unknown>>
methods)) as never;