full running

This commit is contained in:
polv committed 2020-12-16 09:29:57 +07:00
1 parent 3daa9f82e7
commit 4fb41de0f1
8 files changed
+139 -8

No files matched your search

+33 -4
View File
@@ -2,15 +2,24 @@ import type { ITheme } from '~/server/theme'
export const THEME: ITheme = JSON.parse(process.env.THEME!)
export const api = async (
export async function api<T = any>(
url: string,
opts: RequestInit & {
params?: Record<string, any>
} = {}
) => {
): Promise<
| T
| {
error: {
statusCode: number
message: unknown
}
}
> {
if (!url.startsWith('/api')) {
return {
error: {
statusCode: 500,
message: 'malformed API route',
},
}
@@ -24,6 +33,9 @@ export const api = async (
baseURL.pathname = url
Object.entries(opts.params || {}).map(([k, v]) => {
if (v) {
/**
* Arrays will be comma separated, and empty strings will be discarded.
*/
baseURL.searchParams.set(k, v)
}
})
@@ -34,8 +46,25 @@ export const api = async (
/**
* Does not rely on `r.ok`, but rather, errorhandler
*/
return r.json()
} catch (_) {}
const data = await r.json()
/**
* Transform to Nuxt-compatible style
*/
if (data.error) {
return {
error: {
statusCode: r.status,
message: data,
},
}
}
return data
} catch (e) {
// eslint-disable-next-line no-console
console.error(e)
}
return {
error: {
+48
View File
@@ -0,0 +1,48 @@
/* eslint-disable camelcase */
import { THEME } from './global'
export type Theme = 'light' | 'dark'
export interface CommentsConfig {
host: string
site_id: string
url?: string
max_shown_comments?: number
theme?: Theme
page_title?: string
node?: string | HTMLElement
locale?: string
// eslint-disable-next-line @typescript-eslint/no-explicit-any
__colors__?: any
}
declare global {
interface Window {
remark_config: CommentsConfig
REMARK42: {
changeTheme(theme: Theme): void
destroy?: () => void
createInstance: (
remark_config: CommentsConfig
) =>
| {
changeTheme(theme: Theme): void
destroy(): void
}
| undefined
}
}
}
if (process.browser && THEME?.comment?.remark42) {
;(function (c) {
for (let i = 0; i < c.length; i++) {
const d = document
const s = d.createElement('script')
s.src = THEME.comment.remark42.host + '/web/' + c[i] + '.js'
s.defer = true
;(d.head || d.body).appendChild(s)
}
})(['embed'])
}