( type: 'event' | 'function', rawInput: string | undefined, availableFragments: Record<string, T>, abiName: string, prompt: Prompt | null )
| 237 | |
| 238 | // Selected fragments |
| 239 | export async function prepareInputFragments<T extends ConstructorFragment | Fragment>( |
| 240 | type: 'event' | 'function', |
| 241 | rawInput: string | undefined, |
| 242 | availableFragments: Record<string, T>, |
| 243 | abiName: string, |
| 244 | prompt: Prompt | null |
| 245 | ): Promise<Record<string, T>> { |
| 246 | if (!rawInput) { |
| 247 | if (!prompt) { |
| 248 | // No items selected or |
| 249 | return {}; |
| 250 | } |
| 251 | |
| 252 | const selected = await prompt({ |
| 253 | message: `Select ${type}`, |
| 254 | type: 'string', |
| 255 | options: Object.keys(availableFragments), |
| 256 | multiple: true, |
| 257 | }); |
| 258 | |
| 259 | return Object.entries(availableFragments) |
| 260 | .filter(([key]) => selected.includes(key)) |
| 261 | .reduce( |
| 262 | (acc, [key, value]) => { |
| 263 | acc[key as string] = value; |
| 264 | return acc; |
| 265 | }, |
| 266 | {} as Record<string, T> |
| 267 | ); |
| 268 | } |
| 269 | |
| 270 | if (rawInput === '*') { |
| 271 | return availableFragments; |
| 272 | } |
| 273 | |
| 274 | const selectedFragments: Record<string, T> = {}; |
| 275 | rawInput.split(',').forEach((input) => { |
| 276 | const casedInput = input.trim().toLowerCase(); |
| 277 | const matchFragment = Object.entries(availableFragments).find((entry) => { |
| 278 | const [key, value] = entry; |
| 279 | if (casedInput === availableFragments[key].name.toLowerCase()) { |
| 280 | selectedFragments[key] = availableFragments[key]; |
| 281 | return value; |
| 282 | } |
| 283 | }); |
| 284 | |
| 285 | if (!matchFragment) { |
| 286 | throw new Error(`'${input}' is not a valid ${type} on ${abiName}`); |
| 287 | } |
| 288 | }); |
| 289 | |
| 290 | return selectedFragments; |
| 291 | } |
| 292 | function filterExistingFragments<T extends Fragment | ConstructorFragment>( |
| 293 | fragments: Record<string, T>, |
| 294 | existingMethods: string[] |
no test coverage detected