Skip to content

Commit e6d3c0f

Browse files
authored
fix: web manifest added twice in sw precache manifest (#38)
1 parent 5edaa19 commit e6d3c0f

File tree

1 file changed

+51
-39
lines changed

1 file changed

+51
-39
lines changed

src/config.ts

Lines changed: 51 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,18 @@ export function configureSvelteKitOptions(
5454
if (!config.modifyURLPrefix)
5555
config.globPatterns = buildGlobPatterns(config.globPatterns)
5656

57-
if (!config.manifestTransforms)
58-
config.manifestTransforms = [createManifestTransform(base, kit)]
57+
if (!config.manifestTransforms) {
58+
config.manifestTransforms = [createManifestTransform(
59+
base,
60+
options.strategies === 'injectManifest'
61+
? undefined
62+
: (options.manifestFilename ?? 'manifest.webmanifest'),
63+
kit,
64+
)]
65+
}
5966
}
6067

61-
function createManifestTransform(base: string, options?: KitOptions): ManifestTransform {
68+
function createManifestTransform(base: string, webManifestName?: string, options?: KitOptions): ManifestTransform {
6269
return async (entries) => {
6370
const defaultAdapterFallback = 'prerendered/fallback.html'
6471
const suffix = options?.trailingSlash === 'always' ? '/' : ''
@@ -72,50 +79,55 @@ function createManifestTransform(base: string, options?: KitOptions): ManifestTr
7279
}
7380

7481
// the fallback will be always in .svelte-kit/output/prerendered/fallback.html
75-
const manifest = entries.filter(({ url }) => !(excludeFallback && url === defaultAdapterFallback)).map((e) => {
76-
let url = e.url
77-
// client assets in `.svelte-kit/output/client` folder.
78-
// SSG pages in `.svelte-kit/output/prerendered/pages` folder.
79-
// fallback page in `.svelte-kit/output/prerendered` folder (fallback.html is the default).
80-
if (url.startsWith('client/'))
81-
url = url.slice(7)
82-
83-
else if (url.startsWith('prerendered/pages/'))
84-
url = url.slice(18)
85-
86-
else if (url === defaultAdapterFallback)
87-
url = adapterFallback!
88-
89-
if (url.endsWith('.html')) {
90-
if (url.startsWith('/'))
91-
url = url.slice(1)
92-
93-
if (url === 'index.html') {
94-
url = base
95-
}
96-
else {
97-
const idx = url.lastIndexOf('/')
98-
if (idx > -1) {
99-
// abc/index.html -> abc/?
100-
if (url.endsWith('/index.html'))
101-
url = `${url.slice(0, idx)}${suffix}`
102-
// abc/def.html -> abc/def/?
103-
else
104-
url = `${url.substring(0, url.lastIndexOf('.'))}${suffix}`
82+
const manifest = entries
83+
.filter(({ url }) => !(excludeFallback && url === defaultAdapterFallback))
84+
.map((e) => {
85+
let url = e.url
86+
// client assets in `.svelte-kit/output/client` folder.
87+
// SSG pages in `.svelte-kit/output/prerendered/pages` folder.
88+
// fallback page in `.svelte-kit/output/prerendered` folder (fallback.html is the default).
89+
if (url.startsWith('client/'))
90+
url = url.slice(7)
91+
92+
else if (url.startsWith('prerendered/pages/'))
93+
url = url.slice(18)
94+
95+
else if (url === defaultAdapterFallback)
96+
url = adapterFallback!
97+
98+
if (url.endsWith('.html')) {
99+
if (url.startsWith('/'))
100+
url = url.slice(1)
101+
102+
if (url === 'index.html') {
103+
url = base
105104
}
106105
else {
106+
const idx = url.lastIndexOf('/')
107+
if (idx > -1) {
108+
// abc/index.html -> abc/?
109+
if (url.endsWith('/index.html'))
110+
url = `${url.slice(0, idx)}${suffix}`
111+
// abc/def.html -> abc/def/?
112+
else
113+
url = `${url.substring(0, url.lastIndexOf('.'))}${suffix}`
114+
}
115+
else {
107116
// xxx.html -> xxx/?
108-
url = `${url.substring(0, url.lastIndexOf('.'))}${suffix}`
117+
url = `${url.substring(0, url.lastIndexOf('.'))}${suffix}`
118+
}
109119
}
110120
}
111-
}
112121

113-
e.url = url
122+
e.url = url
123+
124+
return e
125+
})
114126

115-
return e
116-
})
127+
if (!webManifestName)
128+
return { manifest }
117129

118-
return { manifest }
130+
return { manifest: manifest.filter(e => e.url !== webManifestName) }
119131
}
120132
}
121133

0 commit comments

Comments
 (0)