hexo-swpp 2.4.0 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/sw-dom.js +5 -22
- package/lib/sw-template.js +52 -33
- package/lib/swBuilder.js +2 -0
- package/package.json +1 -1
package/lib/sw-dom.js
CHANGED
|
@@ -19,22 +19,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
19
19
|
}
|
|
20
20
|
resolve(false)
|
|
21
21
|
})
|
|
22
|
-
const compareUrls = (arg0, arg1) => {
|
|
23
|
-
if (
|
|
24
|
-
(arg0.endsWith('/') && arg1.endsWith('/')) ||
|
|
25
|
-
(arg0.endsWith('/index.html') && arg1.endsWith('/index.html'))
|
|
26
|
-
) {
|
|
27
|
-
let count = 0
|
|
28
|
-
for (let i = arg0.length - 1, k = arg1.length - 1; arg0[i] === arg1[k]; --i, --k) {
|
|
29
|
-
if (arg0[i] === '/' && ++count === 2) return true
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return false
|
|
33
|
-
}
|
|
34
22
|
if (!checkServiceWorker()) return
|
|
35
23
|
if (sessionStorage.getItem('updated')) {
|
|
36
|
-
// ${onSuccess}
|
|
37
24
|
sessionStorage.removeItem('updated')
|
|
25
|
+
// ${onSuccess}
|
|
38
26
|
} else postMessage2SW('update')
|
|
39
27
|
navigator.serviceWorker.addEventListener('message', event => {
|
|
40
28
|
const data = event.data
|
|
@@ -50,17 +38,12 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
50
38
|
return pjaxUpdate(url)
|
|
51
39
|
if (url.endsWith('.css'))
|
|
52
40
|
return pjaxUpdate(url)
|
|
53
|
-
return Promise.resolve(
|
|
54
|
-
})).then(
|
|
55
|
-
for (let it of list) {
|
|
56
|
-
if (it) return location.reload()
|
|
57
|
-
}
|
|
58
|
-
sessionStorage.removeItem('updated')
|
|
59
|
-
// ${onSuccess}
|
|
60
|
-
})
|
|
41
|
+
return Promise.resolve()
|
|
42
|
+
})).then(() => location.reload())
|
|
61
43
|
} else location.reload()
|
|
62
44
|
break
|
|
63
|
-
case '
|
|
45
|
+
case 'escape':
|
|
46
|
+
sessionStorage.setItem('updated', '1')
|
|
64
47
|
location.reload()
|
|
65
48
|
break
|
|
66
49
|
}
|
package/lib/sw-template.js
CHANGED
|
@@ -6,7 +6,37 @@
|
|
|
6
6
|
/** 控制信息存储地址(必须以`/`结尾) */
|
|
7
7
|
const CTRL_PATH = 'https://id.v3/'
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
/** 控制信息读写操作 */
|
|
10
|
+
const dbVersion = {
|
|
11
|
+
write: (id) => caches.open(CACHE_NAME)
|
|
12
|
+
.then(cache => cache.put(CTRL_PATH, new Response(JSON.stringify(id)))),
|
|
13
|
+
read: () => caches.match(CTRL_PATH).then(response => response?.json())
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
self.addEventListener('install', () => {
|
|
17
|
+
self.skipWaiting()
|
|
18
|
+
const escape = '@$$[escape]'
|
|
19
|
+
dbVersion.read().then(oldVersion => {
|
|
20
|
+
if (oldVersion && oldVersion.escape !== escape) {
|
|
21
|
+
oldVersion.escape = escape
|
|
22
|
+
const rules = new VersionList()
|
|
23
|
+
rules.refresh = true
|
|
24
|
+
// noinspection JSUnresolvedVariable
|
|
25
|
+
Promise.all([
|
|
26
|
+
dbVersion.write(oldVersion),
|
|
27
|
+
deleteCache(rules),
|
|
28
|
+
updateJson(true)
|
|
29
|
+
]).then(
|
|
30
|
+
args => clients.matchAll().then(
|
|
31
|
+
list => list.forEach(client => client.postMessage({
|
|
32
|
+
type: 'escape',
|
|
33
|
+
version: args[2].version
|
|
34
|
+
}))
|
|
35
|
+
)
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
})
|
|
10
40
|
|
|
11
41
|
// noinspection JSFileReferences
|
|
12
42
|
const { cacheList, fetchFile, getSpareUrls } = require('../sw-rules')
|
|
@@ -63,7 +93,7 @@
|
|
|
63
93
|
self.addEventListener('message', event => {
|
|
64
94
|
// [debug message]
|
|
65
95
|
if (event.data === 'update') {
|
|
66
|
-
updateJson().then(info =>
|
|
96
|
+
updateJson(false).then(info =>
|
|
67
97
|
// noinspection JSUnresolvedVariable
|
|
68
98
|
event.source.postMessage({
|
|
69
99
|
type: 'update',
|
|
@@ -85,9 +115,10 @@
|
|
|
85
115
|
|
|
86
116
|
/**
|
|
87
117
|
* 根据JSON删除缓存
|
|
118
|
+
* @param skip {boolean} 是否跳过更新
|
|
88
119
|
* @returns {Promise<{version, list}>}
|
|
89
120
|
*/
|
|
90
|
-
function updateJson() {
|
|
121
|
+
function updateJson(skip) {
|
|
91
122
|
/**
|
|
92
123
|
* 解析elements,并把结果输出到list中
|
|
93
124
|
* @return boolean 是否刷新全站缓存
|
|
@@ -105,36 +136,25 @@
|
|
|
105
136
|
return true
|
|
106
137
|
}
|
|
107
138
|
/** 解析字符串 */
|
|
108
|
-
const parseJson = json => {
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
139
|
+
const parseJson = json => dbVersion.read().then(oldVersion => {
|
|
140
|
+
const {info, global} = json
|
|
141
|
+
const newVersion = {global, local: info[0].version, escape: oldVersion.escape}
|
|
142
|
+
//新用户不进行更新操作
|
|
143
|
+
if (!oldVersion || skip) {
|
|
144
|
+
dbVersion.write(newVersion)
|
|
145
|
+
return newVersion
|
|
114
146
|
}
|
|
115
147
|
let list = new VersionList()
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if (
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
let refresh =
|
|
127
|
-
escape !== 0 && escape !== oldVersion.escape ? true : parseChange(list, info, oldVersion.local)
|
|
128
|
-
dbVersion.write(newVersion)
|
|
129
|
-
//如果需要清理全站
|
|
130
|
-
if (refresh) {
|
|
131
|
-
if (global === oldVersion.global)
|
|
132
|
-
list.clean(new CacheChangeExpression({'flag': 'all'}))
|
|
133
|
-
else list.refresh = true
|
|
134
|
-
}
|
|
135
|
-
return {list: list, version: newVersion}
|
|
136
|
-
})
|
|
137
|
-
}
|
|
148
|
+
let refresh = parseChange(list, info, oldVersion.local)
|
|
149
|
+
dbVersion.write(newVersion)
|
|
150
|
+
// [debug escape]
|
|
151
|
+
//如果需要清理全站
|
|
152
|
+
if (refresh) {
|
|
153
|
+
if (global !== oldVersion.global) list.refresh = true
|
|
154
|
+
else list.clean(new CacheChangeExpression({'flag': 'all'}))
|
|
155
|
+
}
|
|
156
|
+
return {list, version: newVersion}
|
|
157
|
+
})
|
|
138
158
|
return fetchFile(new Request('/update.json'), false)
|
|
139
159
|
.then(response => {
|
|
140
160
|
if (checkResponse(response))
|
|
@@ -156,7 +176,6 @@
|
|
|
156
176
|
function VersionList() {
|
|
157
177
|
|
|
158
178
|
const list = []
|
|
159
|
-
const refresh = false
|
|
160
179
|
|
|
161
180
|
/**
|
|
162
181
|
* 推送一个表达式
|
|
@@ -181,7 +200,7 @@
|
|
|
181
200
|
* @return {boolean}
|
|
182
201
|
*/
|
|
183
202
|
this.match = url => {
|
|
184
|
-
if (refresh) return true
|
|
203
|
+
if (this.refresh) return true
|
|
185
204
|
else {
|
|
186
205
|
for (let it of list) {
|
|
187
206
|
if (it.match(url)) return true
|
package/lib/swBuilder.js
CHANGED
|
@@ -128,6 +128,8 @@ module.exports = (hexo, config, pluginConfig, rules) => {
|
|
|
128
128
|
console.debug(\`put cache: \${key}\`)
|
|
129
129
|
`).replaceAll('// [debug message]', `
|
|
130
130
|
console.debug(\`receive: \${event.data}\`)
|
|
131
|
+
`).replaceAll('// [debug escape]', `
|
|
132
|
+
console.debug(\`escape: \${aid}\`)
|
|
131
133
|
`)
|
|
132
134
|
}
|
|
133
135
|
return {
|