Open search-royal-road in Script Kit

/*
# Search novel in [royalroad.com](https://www.royalroad.com/)
*/
// Name: Search Royal Road
// Description: Search novel in royalroad.com
// Author: Ricardo Gonçalves Bassete
import '@johnlindquist/kit'
import { load } from 'cheerio'
import { Choice } from '@johnlindquist/kit/types/core.js'
const baseURL = 'https://www.royalroad.com'
const target = await arg('Search novel', async input => {
const searchUrl = `${baseURL}/fictions/search?title=${input}&globalFilters=true`
const pageData = await fetch(searchUrl).then(res => res.text())
const $ = load(pageData)
const choices: Choice[] = $('div.fiction-list')
.find('.fiction-list-item')
.get()
.map(el => {
const novelPath = $(el).find('figure a').attr('href')
const imgPath = $(el).find('figure a img').attr('src')
const name = $(el).find('.fiction-title').text().replaceAll('\n', '').trim()
const stats = $(el).find('.stats div').get()
const rating = $(stats[1]).find('span').attr('title')
const views = $(stats[3]).find('span').text()
const chapCount = $(stats[4]).find('span').text()
const lastUpdate = $(stats[5]).find('time').text()
const novelData = [`Rating: ${rating} / 5`, views, chapCount, `Last Update: ${lastUpdate}`]
return {
name,
value: `${baseURL}${novelPath}`,
img: imgPath.endsWith('nocover-new-min.png') ? `${baseURL}/dist/img/nocover-new-min.png` : imgPath,
height: 250,
description: novelData.join(' | '),
}
})
return choices
})
open(target)