docs(ComponentCard): show all props for the code (#797)

Co-authored-by: Benjamin Canac <canacb1@gmail.com>
This commit is contained in:
KeJun
2023-10-15 23:52:20 +08:00
committed by GitHub
parent 9f4d88e0aa
commit 8867936e01
16 changed files with 157 additions and 99 deletions

67
docs/plugins/prettier.ts Normal file
View File

@@ -0,0 +1,67 @@
import type { Options } from 'prettier'
import PrettierWorker from '@/workers/prettier.js?worker&inline'
export interface SimplePrettier {
format: (source: string, options?: Options) => Promise<string>;
}
function createPrettierWorkerApi (worker: Worker): SimplePrettier {
let counter = 0
const handlers = {}
worker.addEventListener('message', (event) => {
const { uid, message, error } = event.data
if (!handlers[uid]) {
return
}
const [resolve, reject] = handlers[uid]
delete handlers[uid]
if (error) {
reject(error)
} else {
resolve(message)
}
})
function postMessage<T> (message) {
const uid = ++counter
return new Promise<T>((resolve, reject) => {
handlers[uid] = [resolve, reject]
worker.postMessage({ uid, message })
})
}
return {
format (source: string, options?: Options) {
return postMessage({ type: 'format', source, options })
}
}
}
export default defineNuxtPlugin({
async setup () {
let prettier: SimplePrettier
if (process.server) {
const prettierModule = await import('prettier')
prettier = {
format (source, options = {
parser: 'markdown'
}) {
return prettierModule.format(source, options)
}
}
} else {
const worker = new PrettierWorker()
prettier = createPrettierWorkerApi(worker)
}
return {
provide: {
prettier
}
}
}
})