diff --git a/.prettierrc b/.prettierrc index 6d058ca..b2095be 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,4 @@ { - "singleQuote": true, - "trailingComma": "all", - "arrowParens": "always" + "semi": false, + "singleQuote": true } diff --git a/api/services/appstore/[query].ts b/api/services/appstore/[query].ts index 436178e..1c7248d 100644 --- a/api/services/appstore/[query].ts +++ b/api/services/appstore/[query].ts @@ -1,39 +1,39 @@ -import {send, sendError, fetch} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import { send, sendError, fetch } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' interface App { - trackId: string; - trackName: string; - kind: string; - version: string; - price: string; - trackViewUrl: string; + trackId: string + trackName: string + kind: string + version: string + price: string + trackViewUrl: string } interface AppStoreResponse { - results: App[]; + results: App[] } export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query, country} = req.query; + const { query, country } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } - const term = encodeURIComponent(query); - const countryCode = country || 'us'; - const limit = 10; + const term = encodeURIComponent(query) + const countryCode = country || 'us' + const limit = 10 try { const response = await fetch( `https://itunes.apple.com/search?media=software&entity=software,iPadSoftware,macSoftware&country=${countryCode}&limit=${limit}&term=${term}`, - 'GET', - ); - const body: AppStoreResponse = await response.json(); + 'GET' + ) + const body: AppStoreResponse = await response.json() const apps = body.results.map((app) => ({ id: app.trackId, name: app.trackName, @@ -41,9 +41,9 @@ export default async function handler( version: app.version, price: app.price, viewURL: app.trackViewUrl, - })); - send(res, {result: apps || []}); + })) + send(res, { result: apps || [] }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/debian/[query].ts b/api/services/debian/[query].ts index 7c423de..df824d7 100644 --- a/api/services/debian/[query].ts +++ b/api/services/debian/[query].ts @@ -1,29 +1,29 @@ -import {send, sendError, fetch} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import { send, sendError, fetch } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } if (/[^a-zA-Z0-9_-]/.test(query)) { - return sendError(res, new Error('Invalid characters')); + return sendError(res, new Error('Invalid characters')) } try { const response = await fetch( `https://packages.debian.org/buster/${encodeURIComponent(query)}`, - 'GET', - ); - const body = await response.text(); - const availability = body.includes('No such package'); - send(res, {availability}); + 'GET' + ) + const body = await response.text() + const availability = body.includes('No such package') + send(res, { availability }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/dns/[query].ts b/api/services/dns/[query].ts index b4c2a0a..e6f21cd 100644 --- a/api/services/dns/[query].ts +++ b/api/services/dns/[query].ts @@ -1,34 +1,34 @@ -import dns from 'dns'; -import {send, sendError} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import dns from 'dns' +import { send, sendError } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' function resolvePromise(hostname: string): Promise { return new Promise((resolve, reject) => { dns.resolve4(hostname, function (err, addresses) { - if (err) return reject(err); - resolve(addresses); - }); - }); + if (err) return reject(err) + resolve(addresses) + }) + }) } export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } try { - const response = await resolvePromise(query); - const availability = response && response.length > 0 ? false : true; - send(res, {availability}); + const response = await resolvePromise(query) + const availability = response && response.length > 0 ? false : true + send(res, { availability }) } catch (err) { if (err.code === 'ENODATA' || err.code === 'ENOTFOUND') { - return send(res, {availability: true}); + return send(res, { availability: true }) } - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/domain/[query].ts b/api/services/domain/[query].ts index 8b4b441..1ea600f 100644 --- a/api/services/domain/[query].ts +++ b/api/services/domain/[query].ts @@ -1,22 +1,22 @@ -import whois from 'whois-json'; -import {send, sendError} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import whois from 'whois-json' +import { send, sendError } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } try { - const response = await whois(query, {follow: 3, verbose: true}); - const availability = response[0].data.domainName ? false : true; - send(res, {availability}); + const response = await whois(query, { follow: 3, verbose: true }) + const availability = response[0].data.domainName ? false : true + send(res, { availability }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/existence/[query].ts b/api/services/existence/[query].ts index fe325ce..136cd21 100644 --- a/api/services/existence/[query].ts +++ b/api/services/existence/[query].ts @@ -1,30 +1,30 @@ -import isURL from 'validator/lib/isURL'; -import {send, sendError, fetch} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import isURL from 'validator/lib/isURL' +import { send, sendError, fetch } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('no query given')); + return sendError(res, new Error('no query given')) } if (!isURL(query)) { - return sendError(res, new Error('Invalid URL: ' + query)); + return sendError(res, new Error('Invalid URL: ' + query)) } try { - const response = await fetch(`https://${query}`); - const availability = response.status === 404; - send(res, {availability}); + const response = await fetch(`https://${query}`) + const availability = response.status === 404 + send(res, { availability }) } catch (err) { - console.log(err.code); + console.log(err.code) if (err.code === 'ENOTFOUND') { - return send(res, {availability: true}); + return send(res, { availability: true }) } - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/gitlab/[query].ts b/api/services/gitlab/[query].ts index 824577d..b4f729c 100644 --- a/api/services/gitlab/[query].ts +++ b/api/services/gitlab/[query].ts @@ -1,28 +1,28 @@ -import {send, sendError} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; -import nodeFetch from 'node-fetch'; +import { send, sendError } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' +import nodeFetch from 'node-fetch' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } if (/[^a-zA-Z0-9_-]/.test(query)) { - return sendError(res, new Error('Invalid characters')); + return sendError(res, new Error('Invalid characters')) } try { const response = await nodeFetch(`https://gitlab.com/${query}`, { redirect: 'manual', - }); - const availability = response.status === 302; - send(res, {availability}); + }) + const availability = response.status === 302 + send(res, { availability }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/launchpad/[query].ts b/api/services/launchpad/[query].ts index d3bdead..650b6b0 100644 --- a/api/services/launchpad/[query].ts +++ b/api/services/launchpad/[query].ts @@ -1,30 +1,30 @@ -import {send, sendError, fetch} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import { send, sendError, fetch } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } if (/[^a-zA-Z0-9_-]/.test(query)) { - return sendError(res, new Error('Invalid characters')); + return sendError(res, new Error('Invalid characters')) } try { const response = await fetch( `https://api.launchpad.net/devel/ubuntu/+source/${encodeURIComponent( - query, + query )}`, - 'GET', - ); - const availability = response.status !== 200; - send(res, {availability}); + 'GET' + ) + const availability = response.status !== 200 + send(res, { availability }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/npm-org/[query].ts b/api/services/npm-org/[query].ts index 37531b9..7b33a83 100644 --- a/api/services/npm-org/[query].ts +++ b/api/services/npm-org/[query].ts @@ -1,24 +1,24 @@ -import npmName from 'npm-name'; -import {send, sendError} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import npmName from 'npm-name' +import { send, sendError } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } try { - const availability = await npmName(`@${query}`); - send(res, {availability}); + const availability = await npmName(`@${query}`) + send(res, { availability }) } catch (err) { if (err.code === 'ENOTFOUND') { - return send(res, {availability: true}); + return send(res, { availability: true }) } - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/npm/[query].ts b/api/services/npm/[query].ts index d04cbad..b4c0ff7 100644 --- a/api/services/npm/[query].ts +++ b/api/services/npm/[query].ts @@ -1,21 +1,21 @@ -import npmName from 'npm-name'; -import {send, sendError} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import npmName from 'npm-name' +import { send, sendError } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } try { - const availability = await npmName(query); - send(res, {availability}); + const availability = await npmName(query) + send(res, { availability }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/nta/[query].ts b/api/services/nta/[query].ts index 1b261f8..c0ceee0 100644 --- a/api/services/nta/[query].ts +++ b/api/services/nta/[query].ts @@ -1,42 +1,42 @@ -import {send, sendError, fetch} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import { send, sendError, fetch } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' -const APPLICATION_ID = process.env.NTA_APPLICATION_ID; +const APPLICATION_ID = process.env.NTA_APPLICATION_ID export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } const encodedQuery = encodeURIComponent( query.replace(/[A-Za-z0-9]/g, (str) => - String.fromCharCode(str.charCodeAt(0) + 0xfee0), - ), - ); + String.fromCharCode(str.charCodeAt(0) + 0xfee0) + ) + ) try { const response = await fetch( `https://api.houjin-bangou.nta.go.jp/4/name?id=${APPLICATION_ID}&name=${encodedQuery}&mode=1&target=1&type=02`, - 'GET', - ); - const body: string[] = (await response.text()).split('\n').slice(0, -1); + 'GET' + ) + const body: string[] = (await response.text()).split('\n').slice(0, -1) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const header = body.shift()!.split(','); + const header = body.shift()!.split(',') const result = body.map((csv) => { const entry = csv.split(',').map((item) => item .replace(/(^"|"$)/g, '') .replace(/[A-Za-z0-9]/g, (str) => - String.fromCharCode(str.charCodeAt(0) - 0xfee0), + String.fromCharCode(str.charCodeAt(0) - 0xfee0) ) // eslint-disable-next-line no-irregular-whitespace - .replace(/ /g, ' '), - ); + .replace(/ /g, ' ') + ) return { index: entry[0], @@ -73,8 +73,8 @@ export default async function handler( excluded: entry[29], processSection: entry[2], modifiedSection: entry[3], - }; - }); + } + }) send(res, { meta: { @@ -91,8 +91,8 @@ export default async function handler( englishName: entry.englishName, })) .slice(10) || [], - }); + }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/slack/[query].ts b/api/services/slack/[query].ts index 8bc32af..2250af3 100644 --- a/api/services/slack/[query].ts +++ b/api/services/slack/[query].ts @@ -1,27 +1,27 @@ -import {send, sendError, fetch} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import { send, sendError, fetch } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } if (/[^a-zA-Z0-9_-]/.test(query)) { - return sendError(res, new Error('Invalid characters')); + return sendError(res, new Error('Invalid characters')) } try { const response = await fetch( - `https://${encodeURIComponent(query)}.slack.com`, - ); - const availability = response.status !== 200; - send(res, {availability}); + `https://${encodeURIComponent(query)}.slack.com` + ) + const availability = response.status !== 200 + send(res, { availability }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/spectrum/[query].ts b/api/services/spectrum/[query].ts index 321fd95..b4de03c 100644 --- a/api/services/spectrum/[query].ts +++ b/api/services/spectrum/[query].ts @@ -1,31 +1,31 @@ -import {send, sendError, fetch} from '../../../util/http'; -import {NowRequest, NowResponse} from '@vercel/node'; +import { send, sendError, fetch } from '../../../util/http' +import { NowRequest, NowResponse } from '@vercel/node' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const {query} = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } if (/[^a-zA-Z0-9_-]/.test(query)) { - return sendError(res, new Error('Invalid characters')); + return sendError(res, new Error('Invalid characters')) } try { const response = await fetch( `https://spectrum.chat/${encodeURIComponent(query)}`, - 'GET', - ); - const body = await response.text(); + 'GET' + ) + const body = await response.text() const availability = body.includes( - 'You may be trying to view something that is deleted', - ); - send(res, {availability}); + 'You may be trying to view something that is deleted' + ) + send(res, { availability }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/api/services/twitter/[query].ts b/api/services/twitter/[query].ts index 381bb7a..65a167c 100644 --- a/api/services/twitter/[query].ts +++ b/api/services/twitter/[query].ts @@ -1,28 +1,28 @@ -import { NowRequest, NowResponse } from '@vercel/node'; -import { fetch, send, sendError } from '../../../util/http'; +import { NowRequest, NowResponse } from '@vercel/node' +import { fetch, send, sendError } from '../../../util/http' export default async function handler( req: NowRequest, - res: NowResponse, + res: NowResponse ): Promise { - const { query } = req.query; + const { query } = req.query if (!query || typeof query !== 'string') { - return sendError(res, new Error('No query given')); + return sendError(res, new Error('No query given')) } if (/[^a-zA-Z0-9_]/.test(query)) { - return sendError(res, new Error('Invalid characters')); + return sendError(res, new Error('Invalid characters')) } try { const response = await fetch( `https://api.twitter.com/i/users/username_available.json?username=${query}`, - 'GET', - ).then((res) => res.json()); - const availability = response.valid; - send(res, { availability }); + 'GET' + ).then((res) => res.json()) + const availability = response.valid + send(res, { availability }) } catch (err) { - sendError(res, err); + sendError(res, err) } } diff --git a/public/index.html b/public/index.html index 115fa29..f9a022a 100644 --- a/public/index.html +++ b/public/index.html @@ -59,5 +59,11 @@
+ diff --git a/src/App.test.tsx b/src/App.test.tsx index 259004b..950f4a6 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -1,8 +1,8 @@ -import { render } from '@testing-library/react'; -import 'mutationobserver-shim'; -import React, { Suspense } from 'react'; -import { BrowserRouter as Router } from 'react-router-dom'; -import App from './App'; +import { render } from '@testing-library/react' +import 'mutationobserver-shim' +import React, { Suspense } from 'react' +import { BrowserRouter as Router } from 'react-router-dom' +import App from './App' it('renders welcome message', async () => { const { findByText } = render( @@ -10,8 +10,8 @@ it('renders welcome message', async () => { - , - ); - const text = await findByText('Grab a slick name for your new app'); - expect(text).toBeTruthy(); -}); + + ) + const text = await findByText('Grab a slick name for your new app') + expect(text).toBeTruthy() +}) diff --git a/src/App.tsx b/src/App.tsx index e67362a..bd821b0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,14 +1,14 @@ -import React from 'react'; -import { Redirect, Route, Switch } from 'react-router-dom'; -import Footer from './components/Footer'; -import Home from './pages/Home'; -import Search from './pages/Search'; -import { GlobalStyle } from './theme'; -import { useOpenSearch } from './util/hooks'; -import { isStandalone } from './util/pwa'; +import React from 'react' +import { Redirect, Route, Switch } from 'react-router-dom' +import Footer from './components/Footer' +import Home from './pages/Home' +import Search from './pages/Search' +import { GlobalStyle } from './theme' +import { useOpenSearch } from './util/hooks' +import { isStandalone } from './util/pwa' export default function App() { - const OpenSearch = useOpenSearch('/opensearch.xml'); + const OpenSearch = useOpenSearch('/opensearch.xml') return ( <> @@ -31,5 +31,5 @@ export default function App() { {!isStandalone() &&