import * as S from "effect/Schema"; import { Field } from "../../Schema.ts"; import { defineAspect, type Aspect } from "../Aspect.ts"; export const isParameter = (artifact: any): artifact is Parameter => artifact?.type === "param"; export type Parameter< ID extends string = string, References extends any[] = any[], T extends Field = Field, > = Aspect; export const Parameter = defineAspect< ( name: Name, schema?: Schema, ) => ( template: TemplateStringsArray, ...references: References ) => Parameter >("param", Field); export declare namespace Parameters { export type Of< References extends any[], Fields extends S.Struct.Fields = {}, > = References extends [] ? S.Struct["Type"] : References extends [infer Artifact, ...infer Rest] ? Artifact extends Parameter ? Parameters.Of : Parameters.Of : []; }