<const Shapes extends StoreShapes>(shapes: Shapes): <
const Base extends StoreContractValue
>(
base: Base
) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>
<const Custom extends Readonly<Record<string, unknown>>>(
methods: (shapes: ShapeHandles<StoreShapes>) => Custom
): <const Base extends StoreContractValue>(
base: Base
) => StoreContractValue<Base["shapes"], Base["custom"] & Custom>
<
const Shapes extends StoreShapes,
const Custom extends Readonly<Record<string, unknown>>
>(
shapes: Shapes,
methods: (shapes: ShapeHandles<Shapes>) => Custom
): <const Base extends StoreContractValue>(
base: Base
) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>
<const Shapes extends StoreShapes, const Base extends StoreContractValue>(
shapes: Shapes,
base: Base
): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>
<
const Base extends StoreContractValue,
const Custom extends Readonly<Record<string, unknown>>
>(
methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom,
base: Base
): StoreContractValue<Base["shapes"], Base["custom"] & Custom>
<
const Shapes extends StoreShapes,
const Base extends StoreContractValue,
const Custom extends Readonly<Record<string, unknown>>
>(
shapes: Shapes,
methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom,
base: Base
): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Extend an existing contract with more shapes, more custom methods, or both — the composable counterpart to contract (which builds one from scratch).
Concrete-preservation guarantee. When a methods builder is supplied together with its
base (the data-first forms extend(methods, base) and extend(shapes, methods, base)), the
builder's return Custom is inferred at its exact type and merged as Base["custom"] & Custom.
Each method therefore keeps its precise signature all the way onto effects — e.g.
completed: (entry, success, elapsed) => Effect<void, StoreWriteError, Storage>, never a widened
Record<string, unknown>. The methods builder receives the base's shape handles
(ShapeHandles over Base["shapes"], plus any newly declared shapes), so event.append
/ event.read are typed for the base's own row schemas.
The pipeable / data-last forms (extend(methods) and extend(shapes, methods)) still preserve
the builder's return Custom concretely, but — because the base is not yet known when the
builder is written — its shape handles are typed generically (the newly declared shapes only,
for extend(shapes, methods)). Prefer the data-first forms when methods must read base shapes.
export const const extend: {
<const Shapes extends StoreShapes>(
shapes: Shapes
): <const Base extends StoreContractValue>(
base: Base
) => StoreContractValue<
Base["shapes"] & Shapes,
Base["custom"]
>
<
const Custom extends Readonly<
Record<string, unknown>
>
>(
methods: (
shapes: ShapeHandles<StoreShapes>
) => Custom
): <const Base extends StoreContractValue>(
base: Base
) => StoreContractValue<
Base["shapes"],
Base["custom"] & Custom
>
<
const Shapes extends StoreShapes,
const Custom extends Readonly<
Record<string, unknown>
>
>(
shapes: Shapes,
methods: (
shapes: ShapeHandles<Shapes>
) => Custom
): <const Base extends StoreContractValue>(
base: Base
) => StoreContractValue<
Base["shapes"] & Shapes,
Base["custom"] & Custom
>
<
const Shapes extends StoreShapes,
const Base extends StoreContractValue
>(
shapes: Shapes,
base: Base
): StoreContractValue<
Base["shapes"] & Shapes,
Base["custom"]
>
<
const Base extends StoreContractValue,
const Custom extends Readonly<
Record<string, unknown>
>
>(
methods: (
shapes: ShapeHandles<Base["shapes"]>
) => Custom,
base: Base
): StoreContractValue<
Base["shapes"],
Base["custom"] & Custom
>
<
const Shapes extends StoreShapes,
const Base extends StoreContractValue,
const Custom extends Readonly<
Record<string, unknown>
>
>(
shapes: Shapes,
methods: (
shapes: ShapeHandles<
Base["shapes"] & Shapes
>
) => Custom,
base: Base
): StoreContractValue<
Base["shapes"] & Shapes,
Base["custom"] & Custom
>
}
Extend an existing contract with more shapes, more custom methods, or both — the composable
counterpart to
contract
(which builds one from scratch).
Concrete-preservation guarantee. When a methods builder is supplied together with its
base (the data-first forms extend(methods, base) and extend(shapes, methods, base)), the
builder's return Custom is inferred at its exact type and merged as Base["custom"] & Custom.
Each method therefore keeps its precise signature all the way onto
effects
— e.g.
completed: (entry, success, elapsed) => Effect<void, StoreWriteError, Storage>, never a widened
Record<string, unknown>. The methods builder receives the base's shape handles
(
ShapeHandles
over Base["shapes"], plus any newly declared shapes), so event.append
/ event.read are typed for the base's own row schemas.
The pipeable / data-last forms (extend(methods) and extend(shapes, methods)) still preserve
the builder's return Custom concretely, but — because the base is not yet known when the
builder is written — its shape handles are typed generically (the newly declared shapes only,
for extend(shapes, methods)). Prefer the data-first forms when methods must read base shapes.
extend: {
<const function (type parameter) Shapes in <const Shapes extends StoreShapes>(shapes: Shapes): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Shapes extends import StoreShapesStoreShapes>(
shapes: const Shapes extends StoreShapesshapes: function (type parameter) Shapes in <const Shapes extends StoreShapes>(shapes: Shapes): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Shapes,
): <const function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Base extends import StoreContractValueStoreContractValue>(
base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Base,
) => import StoreContractValueStoreContractValue<function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Base["shapes"] & function (type parameter) Shapes in <const Shapes extends StoreShapes>(shapes: Shapes): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Shapes, function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Base["custom"]>;
<const function (type parameter) Custom in <const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<StoreShapes>) => Custom): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"], Base["custom"] & 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>>>(
methods: (
shapes: ShapeHandles<StoreShapes>
) => Custom
methods: (shapes: ShapeHandles<StoreShapes>shapes: import ShapeHandlesShapeHandles<import StoreShapesStoreShapes>) => function (type parameter) Custom in <const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<StoreShapes>) => Custom): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"], Base["custom"] & Custom>Custom,
): <const function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base extends import StoreContractValueStoreContractValue>(
base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base,
) => import StoreContractValueStoreContractValue<function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base["shapes"], function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base["custom"] & function (type parameter) Custom in <const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<StoreShapes>) => Custom): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"], Base["custom"] & Custom>Custom>;
<
const function (type parameter) Shapes in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Shapes extends import StoreShapesStoreShapes,
const function (type parameter) Custom in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & 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): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Shapes,
methods: (shapes: ShapeHandles<Shapes>) => Custommethods: (shapes: ShapeHandles<Shapes>shapes: import ShapeHandlesShapeHandles<function (type parameter) Shapes in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & 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): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Custom,
): <const function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base extends import StoreContractValueStoreContractValue>(
base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base,
) => import StoreContractValueStoreContractValue<function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base["shapes"] & function (type parameter) Shapes in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Shapes, function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base["custom"] & function (type parameter) Custom in <const Shapes extends StoreShapes, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Shapes>) => Custom): <const Base extends StoreContractValue>(base: Base) => StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Custom>;
<const function (type parameter) Shapes in <const Shapes extends StoreShapes, const Base extends StoreContractValue>(shapes: Shapes, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Shapes extends import StoreShapesStoreShapes, const function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue>(shapes: Shapes, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Base extends import StoreContractValueStoreContractValue>(
shapes: const Shapes extends StoreShapesshapes: function (type parameter) Shapes in <const Shapes extends StoreShapes, const Base extends StoreContractValue>(shapes: Shapes, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Shapes,
base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue>(shapes: Shapes, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Base,
): import StoreContractValueStoreContractValue<function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue>(shapes: Shapes, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Base["shapes"] & function (type parameter) Shapes in <const Shapes extends StoreShapes, const Base extends StoreContractValue>(shapes: Shapes, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Shapes, function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue>(shapes: Shapes, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"]>Base["custom"]>;
<
const function (type parameter) Base in <const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom, base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base extends import StoreContractValueStoreContractValue,
const function (type parameter) Custom in <const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom, base: Base): StoreContractValue<Base["shapes"], Base["custom"] & 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>>,
>(
methods: (
shapes: ShapeHandles<Base["shapes"]>
) => Custom
methods: (shapes: ShapeHandles<Base["shapes"]>shapes: import ShapeHandlesShapeHandles<function (type parameter) Base in <const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom, base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base["shapes"]>) => function (type parameter) Custom in <const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom, base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Custom,
base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom, base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base,
): import StoreContractValueStoreContractValue<function (type parameter) Base in <const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom, base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base["shapes"], function (type parameter) Base in <const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom, base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Base["custom"] & function (type parameter) Custom in <const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(methods: (shapes: ShapeHandles<Base["shapes"]>) => Custom, base: Base): StoreContractValue<Base["shapes"], Base["custom"] & Custom>Custom>;
<
const function (type parameter) Shapes in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Shapes extends import StoreShapesStoreShapes,
const function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base extends import StoreContractValueStoreContractValue,
const function (type parameter) Custom in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & 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 Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Shapes,
methods: (
shapes: ShapeHandles<Base["shapes"] & Shapes>
) => Custom
methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>shapes: import ShapeHandlesShapeHandles<function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base["shapes"] & function (type parameter) Shapes in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Shapes>) => function (type parameter) Custom in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Custom,
base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base,
): import StoreContractValueStoreContractValue<function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base["shapes"] & function (type parameter) Shapes in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Shapes, function (type parameter) Base in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Base["custom"] & function (type parameter) Custom in <const Shapes extends StoreShapes, const Base extends StoreContractValue, const Custom extends Readonly<Record<string, unknown>>>(shapes: Shapes, methods: (shapes: ShapeHandles<Base["shapes"] & Shapes>) => Custom, base: Base): StoreContractValue<Base["shapes"] & Shapes, Base["custom"] & Custom>Custom>;
} = ((first: unknownfirst: unknown, second: unknownsecond?: unknown, third: unknownthird?: unknown) => {
if (const isMethodsFn: (
value: unknown
) => value is StoreMethodsFn<StoreShapes>
isMethodsFn(first: unknownfirst) && second: unknownsecond === var undefinedundefined) {
return <const function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Shapes extends StoreShapes ? Base["shapes"] & Shapes : Base["shapes"], MergedCustom<Base, Shapes extends StoreShapes ? any : any>>Base extends import StoreContractValueStoreContractValue>(base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Shapes extends StoreShapes ? Base["shapes"] & Shapes : Base["shapes"], MergedCustom<Base, Shapes extends StoreShapes ? any : any>>Base) => const extendCore: <Base, undefined>(
base: Base,
shapes?: undefined,
methods?: any
) => StoreContractValue<
undefined extends StoreShapes
? Base["shapes"] & undefined
: Base["shapes"],
MergedCustom<
Base,
undefined extends StoreShapes
?
| StoreMethodsFn<
Base["shapes"] & undefined
>
| undefined
: StoreMethodsFn<Base["shapes"]> | undefined
>
>
extendCore(base: const Base extends StoreContractValuebase, var undefinedundefined, first: StoreMethodsFn<StoreShapes>first);
}
if (const isShapeRecord: (
value: unknown
) => value is StoreShapes
isShapeRecord(first: anyfirst) && const isMethodsFn: (
value: unknown
) => value is StoreMethodsFn<StoreShapes>
isMethodsFn(second: unknownsecond) && third: unknownthird === var undefinedundefined) {
return <const function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Shapes extends StoreShapes ? Base["shapes"] & Shapes : Base["shapes"], MergedCustom<Base, Shapes extends StoreShapes ? any : any>>Base extends import StoreContractValueStoreContractValue>(base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Shapes extends StoreShapes ? Base["shapes"] & Shapes : Base["shapes"], MergedCustom<Base, Shapes extends StoreShapes ? any : any>>Base) =>
const extendCore: <Base, StoreShapes>(
base: Base,
shapes?: any,
methods?: any
) => StoreContractValue<
StoreShapes extends StoreShapes
? Base["shapes"] & StoreShapes
: Base["shapes"],
MergedCustom<
Base,
StoreShapes extends StoreShapes
?
| StoreMethodsFn<
Base["shapes"] & StoreShapes
>
| undefined
: StoreMethodsFn<Base["shapes"]> | undefined
>
>
extendCore(base: const Base extends StoreContractValuebase, first: StoreShapesfirst, second: StoreMethodsFn<StoreShapes>second as import StoreMethodsFnStoreMethodsFn<function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Shapes extends StoreShapes ? Base["shapes"] & Shapes : Base["shapes"], MergedCustom<Base, Shapes extends StoreShapes ? any : any>>Base["shapes"] & typeof first: StoreShapesfirst>);
}
if (const isShapeRecord: (
value: unknown
) => value is StoreShapes
isShapeRecord(first: anyfirst) && second: unknownsecond === var undefinedundefined) {
return <const function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Shapes extends StoreShapes ? Base["shapes"] & Shapes : Base["shapes"], MergedCustom<Base, Shapes extends StoreShapes ? any : any>>Base extends import StoreContractValueStoreContractValue>(base: const Base extends StoreContractValuebase: function (type parameter) Base in <const Base extends StoreContractValue>(base: Base): StoreContractValue<Shapes extends StoreShapes ? Base["shapes"] & Shapes : Base["shapes"], MergedCustom<Base, Shapes extends StoreShapes ? any : any>>Base) => const extendCore: <Base, StoreShapes>(
base: Base,
shapes?: any,
methods?: any
) => StoreContractValue<
StoreShapes extends StoreShapes
? Base["shapes"] & StoreShapes
: Base["shapes"],
MergedCustom<
Base,
StoreShapes extends StoreShapes
?
| StoreMethodsFn<
Base["shapes"] & StoreShapes
>
| undefined
: StoreMethodsFn<Base["shapes"]> | undefined
>
>
extendCore(base: const Base extends StoreContractValuebase, first: StoreShapesfirst);
}
if (const isMethodsFn: (
value: unknown
) => value is StoreMethodsFn<StoreShapes>
isMethodsFn(first: anyfirst) && import isStoreContractValueisStoreContractValue(second: unknownsecond)) {
return const extendCore: <unknown, undefined>(
base: unknown,
shapes?: undefined,
methods?: any
) => StoreContractValue<
undefined extends StoreShapes
? unknown & undefined
: unknown,
MergedCustom<
unknown,
undefined extends StoreShapes
?
| StoreMethodsFn<unknown & undefined>
| undefined
: StoreMethodsFn<unknown> | undefined
>
>
extendCore(second: unknownsecond, var undefinedundefined, first: StoreMethodsFn<StoreShapes>first);
}
if (const isShapeRecord: (
value: unknown
) => value is StoreShapes
isShapeRecord(first: anyfirst) && const isMethodsFn: (
value: unknown
) => value is StoreMethodsFn<StoreShapes>
isMethodsFn(second: unknownsecond) && import isStoreContractValueisStoreContractValue(third: unknownthird)) {
return const extendCore: <unknown, StoreShapes>(
base: unknown,
shapes?: any,
methods?: any
) => StoreContractValue<
StoreShapes extends StoreShapes
? unknown & StoreShapes
: unknown,
MergedCustom<
unknown,
StoreShapes extends StoreShapes
?
| StoreMethodsFn<unknown & StoreShapes>
| undefined
: StoreMethodsFn<unknown> | undefined
>
>
extendCore(third: unknownthird, first: StoreShapesfirst, second: StoreMethodsFn<StoreShapes>second);
}
if (const isShapeRecord: (
value: unknown
) => value is StoreShapes
isShapeRecord(first: anyfirst) && import isStoreContractValueisStoreContractValue(second: unknownsecond)) {
return const extendCore: <unknown, StoreShapes>(
base: unknown,
shapes?: any,
methods?: any
) => StoreContractValue<
StoreShapes extends StoreShapes
? unknown & StoreShapes
: unknown,
MergedCustom<
unknown,
StoreShapes extends StoreShapes
?
| StoreMethodsFn<unknown & StoreShapes>
| undefined
: StoreMethodsFn<unknown> | undefined
>
>
extendCore(second: unknownsecond, first: StoreShapesfirst);
}
throw new var Error: ErrorConstructor
new (message?: string, options?: ErrorOptions) => Error (+1 overload)
Error("Store.extend: invalid arguments");
}) as never;