@vite-pwa/create-pwa
Version:
PWA Templates
25 lines (21 loc) • 4.87 kB
JavaScript
import o from"node:fs";import e from"node:path";import k from"node:process";import{p as $,a as b,b as h,g as j,e as P}from"../shared/create-pwa.DNW-qV5p.mjs";import{e as w,a as W,i as F,P as R,S as A,V as x,W as d}from"../index.mjs";import{d as N}from"../shared/create-pwa.Dr0vPKPn.mjs";import"fs";import"node:url";import"child_process";import"path";import"readline";import"events";async function C(i){const{cdProjectName:n,templateDir:r,rootPath:s,prompt:a,customServiceWorker:l,pwaAssets:v}=i,t=o.existsSync(e.resolve(s,"tsconfig.json")),u=o.existsSync(e.resolve(s,"jsconfig.json"));if(t||u){const c=o.readFileSync(e.resolve(s,"src","app.d.ts"),"utf-8");o.writeFileSync(e.resolve(s,"src","app.d.ts"),`import 'vite-plugin-pwa/svelte';
import 'vite-plugin-pwa/info';
import 'vite-plugin-pwa/pwa-assets';
${c}`,"utf-8")}const S=o.readFileSync(e.resolve(s,"src","app.html"),"utf-8");o.writeFileSync(e.resolve(s,"src","app.html"),S.replace('<link rel="icon" href="%sveltekit.assets%/favicon.png" />',""),"utf-8"),o.rmSync(e.resolve(s,"static","favicon.png")),o.copyFileSync(e.resolve(r,"static","favicon.svg"),e.resolve(s,"static","favicon.svg"));const g=o.existsSync(e.resolve(s,"src","routes","+layout.svelte")),m=e.resolve(s,"src","routes","+layout.svelte");o.copyFileSync(e.resolve(r,"src","routes",`${g?"app-layout":"layout"}.svelte`),m),t&&w(m,c=>(c=c.replace(/<script>/,'<script lang="ts">'),c.replace("let { children } = $props();",`
interface Props {
children?: import('svelte').Snippet;
}
let { children }: Props = $props();`))),o.copyFileSync(e.resolve(r,"src","routes","+page.ts"),e.resolve(s,"src","routes",`+page.${t?"t":"j"}s`)),O(t,u,i),o.copyFileSync(e.resolve(r,"pwa-assets.config.ts"),e.resolve(s,`pwa-assets.config.${t?"t":"j"}s`)),l&&(o.copyFileSync(e.resolve(r,"svelte.config.js"),e.resolve(s,"svelte.config.js")),a?o.copyFileSync(e.resolve(r,"src",`prompt-sw.${t?"t":"j"}s`),e.resolve(s,"src",`service-worker.${t?"t":"j"}s`)):o.copyFileSync(e.resolve(r,"src",`claims-sw.${t?"t":"j"}s`),e.resolve(s,"src",`service-worker.${t?"t":"j"}s`))),D(s,t,g,i);const f=JSON.parse(o.readFileSync(e.join(s,"package.json"),"utf-8"));f.devDependencies??={};const y=[["@vite-pwa/assets-generator",R],["@vite-pwa/sveltekit",A],["vite-plugin-pwa",x],["workbox-window",d]];l&&y.push(["workbox-core",d],["workbox-precaching",d],["workbox-routing",d],["workbox-strategies",d]),W("devDependencies",y,f,!0);const p=await N({cwd:s}).then(c=>c?.name||"npm");switch(F(i,p==="npm",f,!0),o.writeFileSync(e.join(s,"package.json"),JSON.stringify(f,null,2),"utf-8"),console.log(`
PWA configuration done. Now run:
`),s!==k.cwd()&&console.log(` cd ${n.includes(" ")?`"${n}"`:n}`),p){case"yarn":console.log(" yarn"),v||console.log(" yarn generate-pwa-icons"),console.log(" yarn dev");break;default:console.log(` ${p} install`),v||console.log(` ${p} run generate-pwa-icons`),console.log(` ${p} run dev`);break}console.log()}function O(i,n,r){const{templateDir:s,rootPath:a,reloadSW:l,offline:v}=r;let t=o.readFileSync(e.join(s,"src","lib",`PWABadge-${i?"t":"j"}s.svelte`),"utf-8");return!i&&!n&&(t=t.replace("<script>",`<script>
/// <reference types="vite-plugin-pwa/svelte" />
`)),v||(t=t.replace("const { offlineReady, needRefresh, updateServiceWorker } = useRegisterSW({","const { needRefresh, updateServiceWorker } = useRegisterSW({").replace("offlineReady.set(false)","").replace("let toast = $derived($offlineReady || $needRefresh)","let toast = $derived($needRefresh)").replace("let message = $derived($offlineReady ? 'App ready to work offline' : ($needRefresh ? 'New content available, click on reload button to update.' : ''))","let message = $derived($needRefresh ? 'New content available, click on reload button to update.' : '')")),l?t=t.replace("PERIODIC_SYNC_COMMENT","check for updates every hour").replace("const period = 0","const period = 60 * 60 * 1000"):t=t.replace("PERIODIC_SYNC_COMMENT",`periodic sync is disabled, change the value to enable it, the period is in milliseconds
// You can remove onRegisteredSW callback and registerPeriodicSync function`),o.writeFileSync(e.resolve(a,"src","lib","PWABadge.svelte"),t,"utf-8"),t}function D(i,n,r,s){const a=$(`
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [
sveltekit()
]
})
`),l=r?["client/**/*.{js,css,ico,png,svg,webp,woff,woff2}"]:["client/**/*.{js,css,ico,png,svg,webp}"];b(a,{from:"@vite-pwa/sveltekit",imported:"SvelteKitPWA",constructor:"SvelteKitPWA",options:h(n,s,"src",{swName:"service-worker",workbox:{globPatterns:l,cleanupOutdatedCaches:!0,clientsClaim:!0},injectManifest:{globPatterns:l},devOptions:{enabled:!1,suppressWarnings:!0,navigateFallback:"/",navigateFallbackAllowlist:[/^\/$/],type:"module"}})}),w(`${i}/vite.config.${n?"t":"j"}s`,()=>j(a,P).code)}export{C as customize};