docs(prettier): update usage

This commit is contained in:
Benjamin Canac
2024-10-21 10:55:10 +02:00
parent 4bf81be364
commit b14afbebe9
2 changed files with 27 additions and 24 deletions

View File

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

View File

@@ -1,8 +1,4 @@
/* eslint-disable no-undef */ /* eslint-disable no-undef */
import('https://unpkg.com/prettier@3.0.3/standalone.js')
import('https://unpkg.com/prettier@3.0.3/plugins/html.js')
import('https://unpkg.com/prettier@3.0.3/plugins/markdown.js')
self.onmessage = async function (event) { self.onmessage = async function (event) {
self.postMessage({ self.postMessage({
uid: event.data.uid, uid: event.data.uid,
@@ -18,6 +14,14 @@ function handleMessage (message) {
} }
async function handleFormatMessage (message) { async function handleFormatMessage (message) {
if (!globalThis.prettier) {
await Promise.all([
import('https://unpkg.com/prettier@3.3.3/standalone.js'),
import('https://unpkg.com/prettier@3.3.3/plugins/html.js'),
import('https://unpkg.com/prettier@3.3.3/plugins/markdown.js')
])
}
const { options, source } = message const { options, source } = message
const formatted = await prettier.format(source, { const formatted = await prettier.format(source, {
parser: 'markdown', parser: 'markdown',