import { getTags } from './comment-parser'; import { tts, TTS } from './hookOnCalculator'; export const transactionOptions = Object.keys(tts).map(key => ({ label: key, value: key as keyof TTS, })); export type SetHookData = { Invoke: { value: keyof TTS; label: string; }[]; Fee: string; HookNamespace: string; HookParameters: { HookParameter: { HookParameterName: string; HookParameterValue: string; }; $metaData?: any; }[]; // HookGrants: { // HookGrant: { // Authorize: string; // HookHash: string; // }; // }[]; }; export const getParameters = (content?: string) => { const fieldTags = ["field", "param", "arg", "argument"]; const tags = getTags(content) .filter(tag => fieldTags.includes(tag.tag)) .filter(tag => !!tag.name); const paramters: SetHookData["HookParameters"] = tags.map(tag => ({ HookParameter: { HookParameterName: tag.name, HookParameterValue: tag.default || "", }, $metaData: { description: tag.description, required: !tag.optional }, })); return paramters; }; export const getInvokeOptions = (content?: string) => { const invokeTags = ["invoke", "invoke-on"]; const options = getTags(content) .filter(tag => invokeTags.includes(tag.tag)) .reduce((cumm, curr) => { const combined = curr.type || `${curr.name} ${curr.description}` const opts = combined.split(' ') return cumm.concat(opts as any) }, [] as (keyof TTS)[]) .filter(opt => Object.keys(tts).includes(opt)) const invokeOptions: SetHookData['Invoke'] = options.map(opt => ({ label: opt, value: opt })) // default if (!invokeOptions.length) { const payment = transactionOptions.find(tx => tx.value === "ttPAYMENT") if (payment) return [payment] } return invokeOptions; };