Skip to content

Commit

Permalink
fix: update service-worker preset
Browse files Browse the repository at this point in the history
  • Loading branch information
pi0 committed Apr 7, 2022
1 parent 3cde549 commit ce3aaf6
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 24 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -238,13 +238,13 @@ Currently supported presets:
- `aws-lambda`
- `azure`, `azure-functions`
- `base-worker`
- `browser-worker`
- `cli`
- `cloudflare`
- `firebase`
- `netlify`
- `nitro-dev`, `nitro-prerender`
- `node`, `node-server`, `node-cli`
- `service-worker`
- `vercel`
You can build nitro project against a specific preset using `NITRO_PRESET=name npx nitropack build`
Expand Down
5 changes: 4 additions & 1 deletion src/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,11 @@ export async function loadOptions (userConfig: NitroConfig = {}): Promise<NitroO
cwd: userConfig.rootDir,
resolve (id: string) {
type PT = Map<String, NitroConfig>
const matchedPreset = (PRESETS as any as PT)[id] || (PRESETS as any as PT)[camelCase(id)]
let matchedPreset = (PRESETS as any as PT)[id] || (PRESETS as any as PT)[camelCase(id)]
if (matchedPreset) {
if (typeof matchedPreset === 'function') {
matchedPreset = matchedPreset()
}
return {
config: matchedPreset
}
Expand Down
10 changes: 5 additions & 5 deletions src/presets/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
export * from './aws-lambda'
export * from './azure-functions'
export * from './azure'
export * from './browser-worker'
export * from './base-worker'
export * from './cloudflare'
export * from './firebase'
export * from './aws-lambda'
export * from './netlify'
export * from './node'
export * from './nitro-dev'
export * from './nitro-prerender'
export * from './node-server'
export * from './node-cli'
export * from './node-server'
export * from './node'
export * from './service-worker'
export * from './vercel'
export * from './base-worker'
33 changes: 17 additions & 16 deletions src/presets/browser-worker.ts → src/presets/service-worker.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
import { existsSync, promises as fsp } from 'fs'
import { resolve } from 'pathe'
import { joinURL } from 'ufo'
import { prettyPath } from '../utils'
import { defineNitroPreset } from '../preset'
import type { Nitro } from '../types'

export const browserWorker = defineNitroPreset((_input) => {
// TODO
const baseURL = '/'

const script = `<script>
const scriptTemplate = (baseURL = '/') => `
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('${joinURL(baseURL, 'sw.js')}');
});
}
</script>`
</script>
`

// TEMP FIX
const html = `<!DOCTYPE html>
const htmlTemplate = (baseURL = '/') => `<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
Expand All @@ -43,25 +39,31 @@ if ('serviceWorker' in navigator) {
</head>
<body>
Loading...
Initializing nitro service worker...
</body>
</html>`

export const serviceWorker = defineNitroPreset(() => {
return {
extends: 'base-worker',
entry: '#nitro/entries/service-worker',
entry: '#nitro/entries/browser-worker',
output: {
serverDir: '{{ output.dir }}/public/_server'
},
commands: {
preview: 'npx serve ./public'
},
hooks: {
'nitro:document' (tmpl) {
tmpl.contents = tmpl.contents.replace('</body>', script + '</body>')
// Try to inject initialize script
tmpl.contents = tmpl.contents.replace('</body>', scriptTemplate('/') + '</body>')
},
async 'nitro:compiled' (nitro: Nitro) {
await fsp.writeFile(resolve(nitro.options.output.publicDir, 'sw.js'), `self.importScripts('${joinURL(baseURL, '_server/index.mjs')}');`, 'utf8')
// Write sw.js file
await fsp.writeFile(resolve(nitro.options.output.publicDir, 'sw.js'), `self.importScripts('${joinURL(nitro.options.baseURL, '_server/index.mjs')}');`, 'utf8')

// Temp fix
// Write fallback initializer files
const html = htmlTemplate(nitro.options.baseURL)
if (!existsSync(resolve(nitro.options.output.publicDir, 'index.html'))) {
await fsp.writeFile(resolve(nitro.options.output.publicDir, 'index.html'), html, 'utf8')
}
Expand All @@ -71,7 +73,6 @@ if ('serviceWorker' in navigator) {
if (!existsSync(resolve(nitro.options.output.publicDir, '404.html'))) {
await fsp.writeFile(resolve(nitro.options.output.publicDir, '404.html'), html, 'utf8')
}
nitro.logger.info('Ready to deploy to static hosting:', prettyPath(nitro.options.output.publicDir as string))
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/types/nitro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export interface NitroHooks {

type DeepPartial<T> = T extends Record<string, any> ? { [P in keyof T]?: DeepPartial<T[P]> | T[P] } : T

export type NitroPreset = NitroConfig | ((input: NitroConfig) => NitroConfig)
export type NitroPreset = NitroConfig | (() => NitroConfig)

export interface NitroConfig extends DeepPartial<NitroOptions> {
extends?: string | string[] | NitroPreset
Expand Down

0 comments on commit ce3aaf6

Please sign in to comment.