PdaNode.ts 752 B

1234567891011121314151617181920212223242526272829
  1. import type { PdaNode, PdaSeedNode } from '@kinobi-so/node-types';
  2. import { camelCase, DocsInput, parseDocs } from './shared';
  3. export type PdaNodeInput<TSeeds extends PdaSeedNode[] = PdaSeedNode[]> = Omit<
  4. PdaNode<TSeeds>,
  5. 'docs' | 'kind' | 'name'
  6. > & {
  7. readonly docs?: DocsInput;
  8. readonly name: string;
  9. };
  10. export function pdaNode<const TSeeds extends PdaSeedNode[]>(input: PdaNodeInput<TSeeds>): PdaNode<TSeeds> {
  11. if (!input.name) {
  12. // TODO: Coded error.
  13. throw new Error('PdaNode must have a name.');
  14. }
  15. return Object.freeze({
  16. kind: 'pdaNode',
  17. // Data.
  18. name: camelCase(input.name),
  19. docs: parseDocs(input.docs),
  20. // Children.
  21. seeds: input.seeds,
  22. });
  23. }