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 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(url.endsWith('.json') || compareUrls(url, location.href))
54
- })).then(list => {
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 'refresh':
45
+ case 'escape':
46
+ sessionStorage.setItem('updated', '1')
64
47
  location.reload()
65
48
  break
66
49
  }
@@ -6,7 +6,37 @@
6
6
  /** 控制信息存储地址(必须以`/`结尾) */
7
7
  const CTRL_PATH = 'https://id.v3/'
8
8
 
9
- self.addEventListener('install', () => self.skipWaiting())
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 dbVersion = {
111
- write: (id) => caches.open(CACHE_NAME)
112
- .then(cache => cache.put(CTRL_PATH, new Response(JSON.stringify(id)))),
113
- read: () => caches.match(CTRL_PATH).then(response => response?.json())
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
- return dbVersion.read().then(oldVersion => {
117
- const {info, global} = json
118
- const escape = '@$$[escape]'
119
- const newVersion = {global, local: info[0].version, escape}
120
- //新用户不进行更新操作
121
- if (!oldVersion) {
122
- dbVersion.write(newVersion)
123
- return newVersion
124
- }
125
- // noinspection JSIncompatibleTypesComparison
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 {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hexo-swpp",
3
- "version": "2.4.0",
3
+ "version": "2.4.1",
4
4
  "main": "index.js",
5
5
  "dependencies": {
6
6
  "hexo-log": "^3.0.0",