UNPKG

@harmoniclabs/plu-ts-onchain

Version:

An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript

25 lines (24 loc) 1.7 kB
import { PType } from "../../PType/index.js"; import { PData } from "../../PTypes/PData/PData.js"; import { PList } from "../../PTypes/PList.js"; import { SopInstance } from "../../PTypes/PSoP/psop.js"; import { Term } from "../../Term/index.js"; import { SopCtorDef, SopDefinition } from "../../type_system/index.js"; import { TermList } from "../std/UtilityTerms/TermList.js"; import { UtilityTermOf } from "../std/UtilityTerms/addUtilityForType.js"; export type RawStructCtorCallback = (mathcedCtorsFields: Term<PList<PData>>) => Term<PType>; export type EmptyObject = { [x: string | number | symbol]: never; }; export type MatchRest<PReturnT extends PType> = { _: (continuation: (mathcedCtorsFields: TermList<PData>) => Term<PReturnT>) => UtilityTermOf<PReturnT>; }; export type TypedPMatchOptions<SDef extends SopDefinition, PReturnT extends PType> = { [Ctor in keyof SDef as `on${Capitalize<string & Ctor>}`]: (cb: (mathcedCtorsFields: SopInstance<SDef[Ctor]>) => Term<PReturnT>) => Omit<SDef, Ctor> extends EmptyObject ? UtilityTermOf<PReturnT> : TypedPMatchOptions<Omit<SDef, Ctor>, PReturnT>; } & MatchRest<PReturnT>; export type MathcedCtorsFields<SCtorDef extends SopCtorDef> = SopInstance<SCtorDef>; export type PMatchOptions<SDef extends SopDefinition> = { [Ctor in keyof SDef as `on${Capitalize<string & Ctor>}`]: <PReturnT extends PType>(cb: (mathcedCtorsFields: MathcedCtorsFields<SDef[Ctor]>) => Term<PReturnT>) => Omit<SDef, Ctor> extends EmptyObject ? UtilityTermOf<PReturnT> : TypedPMatchOptions<Omit<SDef, Ctor>, PReturnT>; } & { _: <PReturnT extends PType>(continuation: (mathcedCtorsFields: TermList<PData>) => Term<PReturnT>) => UtilityTermOf<PReturnT>; };