pleroma-fe/build/sw_plugin.js

66 lines
1.7 KiB
JavaScript
Raw Normal View History

2025-02-28 10:52:04 -05:00
import { readFile } from 'node:fs/promises'
2026-01-06 16:23:17 +02:00
import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
2025-02-28 13:29:27 -05:00
import * as esbuild from 'esbuild'
2026-01-06 16:23:17 +02:00
import { build } from 'vite'
2026-06-02 22:14:13 +03:00
import { exactRegex } from '@rolldown/pluginutils'
2026-01-08 17:26:52 +02:00
2026-01-06 16:22:52 +02:00
import {
generateServiceWorkerMessages,
i18nFiles,
} from './service_worker_messages.js'
2025-02-28 10:52:04 -05:00
2025-02-28 13:29:27 -05:00
const getSWMessagesAsText = async () => {
const messages = await generateServiceWorkerMessages()
return `export default ${JSON.stringify(messages, undefined, 2)}`
}
2025-02-28 10:52:04 -05:00
const projectRoot = dirname(dirname(fileURLToPath(import.meta.url)))
2025-03-04 18:39:20 -05:00
const getDevSwEnv = () => `self.serviceWorkerOption = { assets: [] };`
2026-01-06 16:22:52 +02:00
const getProdSwEnv = ({ assets }) =>
`self.serviceWorkerOption = { assets: ${JSON.stringify(assets)} };`
2025-03-04 18:39:20 -05:00
export const devSwPlugin = ({ swSrc, swDest }) => {
2025-02-28 13:29:27 -05:00
const swFullSrc = resolve(projectRoot, swSrc)
2025-02-28 10:52:04 -05:00
return {
name: 'dev-sw-plugin', apply: 'serve',
2026-01-06 17:32:22 +02:00
configResolved() {
/* no-op */
},
2026-01-06 16:22:52 +02:00
resolveId(id) {
2025-02-28 10:52:04 -05:00
const name = id.startsWith('/') ? id.slice(1) : id
if (name === swDest) {
2025-02-28 13:29:27 -05:00
return swFullSrc
2025-02-28 10:52:04 -05:00
}
return null
},
2026-01-06 16:22:52 +02:00
async load(id) {
2025-02-28 13:29:27 -05:00
if (id === swFullSrc) {
return readFile(swFullSrc, 'utf-8')
2025-02-28 10:52:04 -05:00
}
return null
},
}
}
export const swMessagesPlugin = () => {
2026-06-02 22:14:13 +03:00
const swMessagesName = 'virtual:pleroma-fe/service_worker_messages'
const swMessagesNameResolved = '\0' + swMessagesName
2025-02-28 10:52:04 -05:00
return {
name: 'sw-messages-plugin',
2026-06-02 22:14:13 +03:00
resolveId: {
filter: { id: exactRegex(swMessagesName) },
handler() {
2025-02-28 10:52:04 -05:00
return swMessagesNameResolved
}
},
2026-06-02 22:14:13 +03:00
load: {
filter: { id: exactRegex(swMessagesNameResolved) },
async handler () {
2025-02-28 13:29:27 -05:00
return await getSWMessagesAsText()
2025-02-28 10:52:04 -05:00
}
2026-01-06 16:22:52 +02:00
},
2025-02-28 10:52:04 -05:00
}
}