sinzmise-cetastories 2.0.0-1731066602594 → 2.0.0-1731114112124

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.
Files changed (202) hide show
  1. package/404/index.html +4033 -1
  2. package/about/index.html +4041 -1
  3. package/album/index.html +4050 -1
  4. package/archives/2021/12/index.html +3917 -1
  5. package/archives/2021/index.html +3917 -1
  6. package/archives/2022/12/index.html +3917 -1
  7. package/archives/2022/index.html +3917 -1
  8. package/archives/2023/01/index.html +4072 -1
  9. package/archives/2023/02/index.html +3917 -1
  10. package/archives/2023/03/index.html +4063 -1
  11. package/archives/2023/04/index.html +3992 -1
  12. package/archives/2023/07/index.html +4217 -1
  13. package/archives/2023/08/index.html +4067 -1
  14. package/archives/2023/09/index.html +3917 -1
  15. package/archives/2023/10/index.html +3917 -1
  16. package/archives/2023/11/index.html +3917 -1
  17. package/archives/2023/12/index.html +3918 -1
  18. package/archives/2023/index.html +4591 -1
  19. package/archives/2023/page/2/index.html +4572 -1
  20. package/archives/2023/page/3/index.html +3930 -1
  21. package/archives/2024/01/index.html +4142 -1
  22. package/archives/2024/02/index.html +3922 -1
  23. package/archives/2024/03/index.html +3916 -1
  24. package/archives/2024/04/index.html +3997 -1
  25. package/archives/2024/05/index.html +4065 -1
  26. package/archives/2024/06/index.html +3917 -1
  27. package/archives/2024/07/index.html +3917 -1
  28. package/archives/2024/08/index.html +3992 -1
  29. package/archives/2024/09/index.html +3917 -1
  30. package/archives/2024/10/index.html +3984 -1
  31. package/archives/2024/index.html +4576 -1
  32. package/archives/2024/page/2/index.html +4433 -1
  33. package/archives/index.html +4560 -1
  34. package/archives/page/2/index.html +4560 -1
  35. package/archives/page/3/index.html +4560 -1
  36. package/archives/page/4/index.html +4560 -1
  37. package/archives/page/5/index.html +4560 -1
  38. package/assets/algolia/algoliasearch.js +7182 -3
  39. package/assets/algolia/algoliasearchLite.js +4445 -3
  40. package/atom.xml +31 -31
  41. package/bbs/bbs.html +4012 -1
  42. package/bbs/bbs.js +12 -2
  43. package/bbs/index.html +4031 -1
  44. package/categories/index.html +4050 -1
  45. package/categories//344/270/252/344/272/272/345/260/217/350/256/260/index.html +4570 -1
  46. package/categories//344/270/252/344/272/272/345/260/217/350/256/260/page/2/index.html +4485 -1
  47. package/categories//346/255/214/346/233/262/346/224/266/351/233/206/index.html +3920 -1
  48. package/categories//346/270/270/346/210/217/347/233/270/345/205/263/index.html +4148 -1
  49. package/categories//347/253/231/347/202/271/346/212/230/350/205/276/index.html +4610 -1
  50. package/categories//347/253/231/347/202/271/346/212/230/350/205/276/page/2/index.html +4148 -1
  51. package/categories//351/241/271/347/233/256/346/212/230/350/205/276/index.html +4072 -1
  52. package/charts/index.html +4039 -1
  53. package/comments/index.html +4052 -1
  54. package/content.json +1 -0
  55. package/css/custom2.css +3 -2
  56. package/css/first.css +1868 -2
  57. package/css/pace/big-counter.css +39 -2
  58. package/css/pace/corner-indicator.css +72 -2
  59. package/css/pace/flash.css +76 -2
  60. package/css/pace/mac-osx.css +86 -2
  61. package/css/pace/pace.css +50 -2
  62. package/css/plane.css +59 -2
  63. package/css/style.css +8585 -2
  64. package/css/tags.css +3516 -2
  65. package/essay/index.html +4050 -1
  66. package/fcircle/index.html +4075 -1
  67. package/games +61 -19
  68. package/index.html +4717 -1
  69. package/js/app.js +1341 -2
  70. package/js/autoload.js +62 -2
  71. package/js/ceta/fancybox.css +2 -2
  72. package/js/ceta/fancybox.umd.js +2 -2
  73. package/js/ceta/iconfontInkss.js +1 -2
  74. package/js/ceta/message.css +6 -2
  75. package/js/ceta/message.js +6 -2
  76. package/js/clock.js +1 -2
  77. package/js/kslink.js +38 -2
  78. package/js/newyear.js +76 -2
  79. package/js/plane.js +2200 -2
  80. package/js/plugins/aplayer.js +186 -2
  81. package/js/plugins/parallax.js +191 -2
  82. package/js/plugins/rightMenus.js +623 -2
  83. package/js/plugins/tags/contributors.js +92 -2
  84. package/js/plugins/tags/friends.js +93 -2
  85. package/js/plugins/tags/sites.js +96 -2
  86. package/js/search/algolia.js +239 -2
  87. package/js/search/hexo.js +195 -2
  88. package/js/search/meilisearch.js +220 -2
  89. package/js/txmap.js +248 -2
  90. package/link/index.html +6180 -1
  91. package/load.html +294 -1
  92. package/music/index.html +4033 -1
  93. package/package.json +1 -1
  94. package/page/2/index.html +4578 -1
  95. package/page/3/index.html +4575 -1
  96. package/page/4/index.html +4572 -1
  97. package/page/5/index.html +3924 -1
  98. package/posts/10021/index.html +4130 -5
  99. package/posts/10045/index.html +4224 -1
  100. package/posts/10733/index.html +4125 -1
  101. package/posts/10996/index.html +4127 -5
  102. package/posts/12779/index.html +4134 -1
  103. package/posts/13624/index.html +4179 -1
  104. package/posts/15688/index.html +4133 -1
  105. package/posts/15748/index.html +4121 -5
  106. package/posts/15799/index.html +4130 -1
  107. package/posts/15842/index.html +4121 -5
  108. package/posts/16107/index.html +4111 -1
  109. package/posts/18063/index.html +4124 -1
  110. package/posts/20412/index.html +4134 -1
  111. package/posts/21375/index.html +4124 -1
  112. package/posts/22945/index.html +4169 -4
  113. package/posts/23021/index.html +4104 -1
  114. package/posts/27531/index.html +4121 -5
  115. package/posts/28536/index.html +4116 -1
  116. package/posts/28733/index.html +4168 -1
  117. package/posts/29196/index.html +4106 -1
  118. package/posts/38917/index.html +4144 -1
  119. package/posts/38964/index.html +4208 -1
  120. package/posts/42487/index.html +4135 -1
  121. package/posts/42580/index.html +4128 -1
  122. package/posts/45875/index.html +4118 -1
  123. package/posts/46640/index.html +4147 -1
  124. package/posts/48762/index.html +4109 -1
  125. package/posts/50710/index.html +4114 -1
  126. package/posts/52677/index.html +4125 -1
  127. package/posts/53662/index.html +4123 -1
  128. package/posts/54386/index.html +4116 -1
  129. package/posts/54481/index.html +4133 -1
  130. package/posts/54787/index.html +4124 -5
  131. package/posts/56467/index.html +4121 -1
  132. package/posts/57692/index.html +4143 -1
  133. package/posts/58203/index.html +4116 -1
  134. package/posts/61417/index.html +4117 -1
  135. package/posts/61712/index.html +4113 -1
  136. package/posts/646/index.html +4106 -1
  137. package/posts/64856/index.html +4120 -1
  138. package/posts/64935/index.html +4120 -1
  139. package/search.xml +78 -78
  140. package/seas/index.html +4050 -1
  141. package/sw.js +798 -2
  142. package/tags/Flash/347/233/270/345/205/263/index.html +3924 -1
  143. package/tags/Steam/346/270/270/346/210/217/index.html +3924 -1
  144. package/tags/Windows/350/275/257/344/273/266/index.html +3997 -1
  145. package/tags/index.html +4033 -1
  146. package/tags//344/270/252/344/272/272/345/260/217/350/256/260/index.html +4570 -1
  147. package/tags//344/270/252/344/272/272/345/260/217/350/256/260/page/2/index.html +4485 -1
  148. package/tags//345/205/266/345/256/203/346/270/270/346/210/217/index.html +4073 -1
  149. package/tags//345/212/240/350/275/275/345/212/250/347/224/273/index.html +3924 -1
  150. package/tags//346/202/254/346/265/256/345/256/240/347/211/251-/347/234/213/346/235/277/345/250/230/index.html +3925 -1
  151. package/tags//346/255/214/346/233/262/346/224/266/351/233/206/index.html +3920 -1
  152. package/tags//346/270/270/346/210/217/347/233/270/345/205/263/index.html +4148 -1
  153. package/tags//347/253/231/347/202/271/345/272/225/351/203/250/351/255/224/346/224/271/index.html +3924 -1
  154. package/tags//347/253/231/347/202/271/346/212/230/350/205/276/index.html +4610 -1
  155. package/tags//347/253/231/347/202/271/346/212/230/350/205/276/page/2/index.html +4148 -1
  156. package/tags//350/207/252/345/273/272/351/203/250/347/275/262/index.html +4224 -1
  157. package/tags//351/241/265/351/235/242/351/255/224/346/224/271/index.html +4075 -1
  158. package/tags//351/241/271/347/233/256/346/212/230/350/205/276/index.html +4072 -1
  159. package/update/index.html +4112 -1
  160. package/weichuncai/css/style.css +25 -2
  161. package/weichuncai/js/common.js +449 -2
  162. package/weichuncai/js/jquery.js +139 -2
  163. package/weichuncai/wcc-config.js +17 -2
  164. package/maps/assets/algolia/algoliasearch.js.map +0 -1
  165. package/maps/assets/algolia/algoliasearchLite.js.map +0 -1
  166. package/maps/bbs/bbs.js.map +0 -1
  167. package/maps/css/custom2.css.map +0 -1
  168. package/maps/css/first.css.map +0 -1
  169. package/maps/css/pace/big-counter.css.map +0 -1
  170. package/maps/css/pace/corner-indicator.css.map +0 -1
  171. package/maps/css/pace/flash.css.map +0 -1
  172. package/maps/css/pace/mac-osx.css.map +0 -1
  173. package/maps/css/pace/pace.css.map +0 -1
  174. package/maps/css/plane.css.map +0 -1
  175. package/maps/css/style.css.map +0 -1
  176. package/maps/css/tags.css.map +0 -1
  177. package/maps/js/app.js.map +0 -1
  178. package/maps/js/autoload.js.map +0 -1
  179. package/maps/js/ceta/fancybox.css.map +0 -1
  180. package/maps/js/ceta/fancybox.umd.js.map +0 -1
  181. package/maps/js/ceta/iconfontInkss.js.map +0 -1
  182. package/maps/js/ceta/message.css.map +0 -1
  183. package/maps/js/ceta/message.js.map +0 -1
  184. package/maps/js/clock.js.map +0 -1
  185. package/maps/js/kslink.js.map +0 -1
  186. package/maps/js/newyear.js.map +0 -1
  187. package/maps/js/plane.js.map +0 -1
  188. package/maps/js/plugins/aplayer.js.map +0 -1
  189. package/maps/js/plugins/parallax.js.map +0 -1
  190. package/maps/js/plugins/rightMenus.js.map +0 -1
  191. package/maps/js/plugins/tags/contributors.js.map +0 -1
  192. package/maps/js/plugins/tags/friends.js.map +0 -1
  193. package/maps/js/plugins/tags/sites.js.map +0 -1
  194. package/maps/js/search/algolia.js.map +0 -1
  195. package/maps/js/search/hexo.js.map +0 -1
  196. package/maps/js/search/meilisearch.js.map +0 -1
  197. package/maps/js/txmap.js.map +0 -1
  198. package/maps/sw.js.map +0 -1
  199. package/maps/weichuncai/css/style.css.map +0 -1
  200. package/maps/weichuncai/js/common.js.map +0 -1
  201. package/maps/weichuncai/js/jquery.js.map +0 -1
  202. package/maps/weichuncai/wcc-config.js.map +0 -1
package/sw.js CHANGED
@@ -1,2 +1,798 @@
1
- importScripts("https://jsd.cdn.storisinz.site/npm/workbox-cdn@5.1.3/workbox/workbox-sw.js"),workbox.setConfig({modulePathPrefix:"https://jsd.cdn.storisinz.site/npm/workbox-cdn@5.1.3/workbox/"});const{core:core,precaching:precaching,routing:routing,strategies:strategies,expiration:expiration,cacheableResponse:cacheableResponse,backgroundSync:backgroundSync}=workbox,{CacheFirst:CacheFirst,NetworkFirst:NetworkFirst,NetworkOnly:NetworkOnly,StaleWhileRevalidate:StaleWhileRevalidate}=strategies,{ExpirationPlugin:ExpirationPlugin}=expiration,{CacheableResponsePlugin:CacheableResponsePlugin}=cacheableResponse,cacheSuffixVersion="-000010",maxEntries=100;self.addEventListener("activate",(e=>{e.waitUntil(caches.keys().then((e=>Promise.all(e.map((e=>{if(!e.includes("-000010"))return caches.delete(e)}))))))})),core.setCacheNameDetails({prefix:"volantis",suffix:"-000010"}),core.skipWaiting(),core.clientsClaim(),precaching.cleanupOutdatedCaches(),precaching.precacheAndRoute([{url:"/css/first.css",revision:null},{url:"/css/style.css",revision:null},{url:"/js/app.js",revision:null}]),routing.registerRoute(/.*cdn\.jsdelivr\.net/,new CacheFirst({cacheName:"static-immutable-000010",fetchOptions:{mode:"cors",credentials:"omit"},plugins:[new ExpirationPlugin({maxAgeSeconds:2592e3,purgeOnQuotaError:!0})]})),routing.registerRoute(/.*m7\.music\.126\.net/,new CacheFirst({cacheName:"static-immutable-000010",fetchOptions:{mode:"cors",credentials:"omit"},plugins:[new ExpirationPlugin({maxAgeSeconds:2592e3,purgeOnQuotaError:!0})]})),routing.registerRoute(/.*baidu\.com.*/,new NetworkOnly),routing.registerRoute(/.*\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)/,new StaleWhileRevalidate),routing.registerRoute(/.*\.(css|js)/,new StaleWhileRevalidate),routing.registerRoute("/sw.js",new StaleWhileRevalidate),routing.setDefaultHandler(new NetworkFirst({networkTimeoutSeconds:3}));
2
- //# sourceMappingURL=maps/sw.js.map
1
+ // 全站打包上传 npm,sw 并发请求 cdn
2
+ const prefix = 'sinzmise-cetastories';
3
+ const cacheSuffixVersion = '00000018-0.5481051434706005';
4
+ const CACHE_NAME = prefix + '-v' + cacheSuffixVersion;
5
+ const PreCachlist = [
6
+ "/css/style.css",
7
+ "/js/app.js",
8
+ "/js/search/hexo.js",
9
+ ];
10
+ let NPMMirror = true;
11
+ const NPMPackage = "sinzmise-cetastories";
12
+ let NPMPackageVersion = "latest";
13
+ let debug = true;
14
+ // location.hostname == 'localhost' && (debug = true) && (NPMMirror = false);
15
+ const handleFetch = async (event) => {
16
+ const url = event.request.url;
17
+ if (/nocache/.test(url)) {
18
+ return NetworkOnly(event)
19
+ } else if (/@latest/.test(url)) {
20
+ return CacheFirst(event)
21
+ } else if (/cdnjs\.cloudflare\.com/.test(url)) {
22
+ return CacheAlways(event)
23
+ } else if (/music\.126\.net/.test(url)) {
24
+ return CacheAlways(event)
25
+ } else if (/qqmusic\.qq\.com/.test(url)) {
26
+ return CacheAlways(event)
27
+ } else if (/jsdelivr\.net/.test(url)) {
28
+ return CacheAlways(event)
29
+ } else if (/npm\.elemecdn\.com/.test(url)) {
30
+ return CacheAlways(event)
31
+ } else if (/unpkg\.com/.test(url)) {
32
+ return CacheAlways(event)
33
+ } else if (/.*\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)$/.test(url)) {
34
+ return CacheAlways(event)
35
+ } else if (/.*\.(css|js)$/.test(url)) {
36
+ return CacheAlways(event)
37
+ } else {
38
+ return CacheFirst(event)
39
+ }
40
+ }
41
+ const cdn = {
42
+ gh: {
43
+ jsdelivr: 'https://kkgithub.com/extdomains/cdn.jsdelivr.net/gh',
44
+ fastly: 'https://fastly.jsdelivr.net/gh',
45
+ gcore: 'https://gcore.jsdelivr.net/gh',
46
+ testingcf: 'https://testingcf.jsdelivr.net/gh',
47
+ test1: 'https://test1.jsdelivr.net/gh',
48
+ },
49
+ combine: {
50
+ jsdelivr: 'https://kkgithub.com/extdomains/cdn.jsdelivr.net/combine',
51
+ fastly: 'https://fastly.jsdelivr.net/combine',
52
+ gcore: 'https://gcore.jsdelivr.net/combine',
53
+ testingcf: 'https://testingcf.jsdelivr.net/combine',
54
+ test1: 'https://test1.jsdelivr.net/combine',
55
+ },
56
+ npm: {
57
+ jsdelivr: 'https://kkgithub.com/extdomains/cdn.jsdelivr.net/npm',
58
+ fastly: 'https://fastly.jsdelivr.net/npm',
59
+ gcore: 'https://gcore.jsdelivr.net/npm',
60
+ testingcf: 'https://testingcf.jsdelivr.net/npm',
61
+ test1: 'https://test1.jsdelivr.net/npm',
62
+ unpkg: 'https://unpkg.com',
63
+ eleme: 'https://npm.elemecdn.com',
64
+ storisinz: 'https://jsd.cdn.storisinz.site/npm',
65
+ webcache: 'https://npm.webcache.cn',
66
+ },
67
+ cdnjs: {
68
+ cdnjs: 'https://kkgithub.com/extdomains/cdnjs.cloudflare.com/ajax/libs',
69
+ baomitu: 'https://lib.baomitu.com',
70
+ bootcdn: 'https://cdn.bootcdn.net/ajax/libs',
71
+ bytedance: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M',
72
+ sustech: 'https://mirrors.sustech.edu.cn/cdnjs/ajax/libs',
73
+ }
74
+ }
75
+ const cdn_match_list = []
76
+ for (const type in cdn) {
77
+ for (const key in cdn[type]) {
78
+ cdn_match_list.push({ type: type, key: cdn[type][key] })
79
+ }
80
+ }
81
+ const _console = console;
82
+ const color = {
83
+ black: '#000000',
84
+ red: '#FF0000',
85
+ green: '#008000',
86
+ yellow: '#FFFF00',
87
+ blue: '#0000FF',
88
+ magenta: '#FF00FF',
89
+ cyan: '#00FFFF',
90
+ white: '#FFFFFF',
91
+ };
92
+ const add = (...arr) => {
93
+ let fi = [
94
+ []
95
+ ];
96
+ for (let key = 0; key < arr.length; key++) {
97
+ const [first, ...other] = arr[key];
98
+ fi[0] += first;
99
+ fi = fi.concat(other);
100
+ }
101
+ return fi;
102
+ };
103
+ const createlog = (util) => (...args) => {
104
+ // const fun = _console[util] ? _console[util] : _console.log;
105
+ const fun = util == "error" ? _console[util] : _console.log;
106
+ fun.apply(void 0, args);
107
+ };
108
+ const creategroup = (util) => (...args) => {
109
+ const fun = _console.groupCollapsed;
110
+ fun.apply(void 0, args);
111
+ };
112
+ const colorUtils = {
113
+ bold: (str) => {
114
+ if (typeof str === 'string' || typeof str === 'number') {
115
+ return `${str};font-weight: bold;`;
116
+ }
117
+ for (let key = 1; key < str.length; key++) {
118
+ str[key] += `;font-weight: bold;`;
119
+ }
120
+ return str;
121
+ }
122
+ };
123
+ const colorHash = {
124
+ log: 'black',
125
+ wait: 'cyan',
126
+ error: 'red',
127
+ warn: 'yellow',
128
+ ready: 'green',
129
+ info: 'blue',
130
+ event: 'magenta',
131
+ };
132
+ const createChalk = (name) => (...str) => {
133
+ if (typeof str[0] === 'object') {
134
+ createlog(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), ...str));
135
+ return;
136
+ }
137
+ let strArr = str;
138
+ if (typeof str === 'string' || typeof str === 'number') {
139
+ strArr = colorUtils[colorHash[name]](str);
140
+ }
141
+ createlog(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), strArr));
142
+ };
143
+ const createChalkBg = (name) => (...str) => {
144
+ if (typeof str[0] === 'object') {
145
+ createlog(name)(...add(colorUtils.bold(colorUtils[`bg${firstToUpperCase(colorHash[name])}`](`[${firstToUpperCase(name)}] `)), ...str));
146
+ return;
147
+ }
148
+ let strArr = str;
149
+ if (typeof str === 'string' || typeof str === 'number') {
150
+ strArr = colorUtils[colorHash[name]](str);
151
+ }
152
+ createlog(name)(...add(colorUtils.bold(colorUtils[`bg${firstToUpperCase(colorHash[name])}`](`[${firstToUpperCase(name)}] `)), strArr));
153
+ };
154
+ const createChalkGroup = (name) => (...str) => {
155
+ if (typeof str[0] === 'object') {
156
+ creategroup(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), ...str));
157
+ return;
158
+ }
159
+ let strArr = str;
160
+ if (typeof str === 'string' || typeof str === 'number') {
161
+ strArr = colorUtils[colorHash[name]](str);
162
+ }
163
+ creategroup(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), strArr));
164
+ };
165
+ const chalk = {
166
+ group: {
167
+ end: _console.groupEnd
168
+ },
169
+ bg: {}
170
+ };
171
+ Object.keys(colorHash).forEach(key => {
172
+ chalk[key] = createChalk(key);
173
+ chalk.group[key] = createChalkGroup(key);
174
+ chalk.bg[key] = createChalkBg(key);
175
+ });
176
+ const firstToUpperCase = (str) => str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
177
+ Object.keys(color).forEach(key => {
178
+ colorUtils[key] = (str) => {
179
+ if (typeof str === 'string' || typeof str === 'number') {
180
+ return [`%c${str}`, `color:${color[key]}`];
181
+ }
182
+ for (let i = 1; i < str.length; i++) {
183
+ str[i] += `;color:${color[key]}`;
184
+ }
185
+ return str;
186
+ };
187
+ colorUtils[`bg${firstToUpperCase(key)}`] = (str) => {
188
+ if (typeof str === 'string' || typeof str === 'number') {
189
+ return [`%c${str}`, `padding: 2px 4px; border-radius: 3px; color: ${key === 'white' ? '#000' : '#fff'}; font-weight: bold; background:${color[key]};`];
190
+ }
191
+ for (let i = 1; i < str.length; i++) {
192
+ str[i] += `;padding: 2px 4px; border-radius: 3px; font-weight: bold; background:${color[key]};`;
193
+ }
194
+ return str;
195
+ };
196
+ });
197
+ self.logger = {
198
+ add,
199
+ ...chalk,
200
+ ...colorUtils,
201
+ };
202
+
203
+ if (!debug) {
204
+ logger = {
205
+ log: () => { },
206
+ wait: () => { },
207
+ error: () => { },
208
+ warn: () => { },
209
+ ready: () => { },
210
+ info: () => { },
211
+ event: () => { },
212
+ group: {
213
+ log: () => { },
214
+ wait: () => { },
215
+ error: () => { },
216
+ warn: () => { },
217
+ ready: () => { },
218
+ info: () => { },
219
+ event: () => { },
220
+ end: () => { },
221
+ },
222
+ bg: {
223
+ log: () => { },
224
+ wait: () => { },
225
+ error: () => { },
226
+ warn: () => { },
227
+ ready: () => { },
228
+ info: () => { },
229
+ event: () => { },
230
+ }
231
+ };
232
+ console.log = () => { };
233
+ }
234
+
235
+ const generate_uuid = () => {
236
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
237
+ var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
238
+ return v.toString(16);
239
+ });
240
+ }
241
+ self.db = {
242
+ read: (key, config) => {
243
+ if (!config) { config = { type: "text" } }
244
+ return new Promise((resolve, reject) => {
245
+ caches.open(CACHE_NAME).then(cache => {
246
+ cache.match(new Request(`https://LOCALCACHE/${encodeURIComponent(key)}`)).then(function (res) {
247
+ if (!res) resolve(null)
248
+ res.text().then(text => resolve(text))
249
+ }).catch(() => {
250
+ resolve(null)
251
+ })
252
+ })
253
+ })
254
+ },
255
+ write: (key, value) => {
256
+ return new Promise((resolve, reject) => {
257
+ caches.open(CACHE_NAME).then(function (cache) {
258
+ cache.put(new Request(`https://LOCALCACHE/${encodeURIComponent(key)}`), new Response(value));
259
+ resolve()
260
+ }).catch(() => {
261
+ reject()
262
+ })
263
+ })
264
+ }
265
+ }
266
+ const compareVersion = (a, b) => {
267
+ let v1 = a.split('.');
268
+ let v2 = b.split('.');
269
+ const len = Math.max(v1.length, v2.length);
270
+ while (v1.length < len) {
271
+ v1.push('0');
272
+ }
273
+ while (v2.length < len) {
274
+ v2.push('0');
275
+ }
276
+ for (let i = 0; i < len; i++) {
277
+ const num1 = parseInt(v1[i]);
278
+ const num2 = parseInt(v2[i]);
279
+ if (num1 > num2) {
280
+ return a;
281
+ } else if (num1 < num2) {
282
+ return b;
283
+ }
284
+ }
285
+ return a;
286
+ }
287
+
288
+ const mirrors = [
289
+ `https://registry.npmjs.org/${NPMPackage}/latest`,
290
+ `https://registry.npmmirror.com/${NPMPackage}/latest`,
291
+ `https://mirrors.cloud.tencent.com/npm/${NPMPackage}/latest`
292
+ ]
293
+ const getLocalVersion = async () => {
294
+ NPMPackageVersion = await db.read('blog_version') || NPMPackageVersion
295
+ logger.bg.info(`Local Version: ${NPMPackage}@${NPMPackageVersion}`)
296
+ }
297
+ let mirror_time = 0;
298
+ const setNewestVersion = async () => {
299
+ if (!NPMMirror) {
300
+ return
301
+ }
302
+ let f = null;
303
+ if (!(mirror_time % (mirrors.length + 1))) {
304
+ f = FetchEngine(mirrors);
305
+ } else {
306
+ f = fetch(mirrors[(mirror_time % (mirrors.length + 1)) - 1]);
307
+ }
308
+ mirror_time++;
309
+ return f
310
+ .then(res => res.json())
311
+ .then(async res => {
312
+ if (!res.version) throw ('No Version Found!')
313
+ NPMPackageVersion = compareVersion(res.version, await db.read('blog_version') || NPMPackageVersion)
314
+ logger.bg.ready(`${NPMPackage}@${NPMPackageVersion}`)
315
+ await db.write('blog_version', NPMPackageVersion)
316
+ })
317
+ .catch(error => {
318
+ logger.error('[Set Newest Version] ' + (error.stack || error))
319
+ })
320
+ }
321
+ setInterval(async () => {
322
+ await setNewestVersion()
323
+ }, 60 * 1000);
324
+ setTimeout(async () => {
325
+ await setNewestVersion()
326
+ }, 5000)
327
+ const installFunction = async () => {
328
+ await getLocalVersion();
329
+ return caches.open(CACHE_NAME + "-precache")
330
+ .then(async function (cache) {
331
+ if (!await db.read('uuid')) {
332
+ await db.write('uuid', generate_uuid())
333
+ }
334
+ if (PreCachlist.length) {
335
+ logger.group.event(`Precaching ${PreCachlist.length} files.`);
336
+ let index = 0;
337
+ PreCachlist.forEach(function (url) {
338
+ cache.match(new Request(url)).then(function (response) {
339
+ if (response) {
340
+ logger.ready(`Precaching ${url}`);
341
+ } else {
342
+ logger.wait(`Precaching ${url}`);
343
+ cache.add(new Request(url));
344
+ }
345
+ index++;
346
+ if (index === PreCachlist.length) {
347
+ logger.ready(`Precached ${PreCachlist.length} files.`);
348
+ logger.group.end();
349
+ }
350
+ })
351
+ })
352
+ }
353
+ }).catch((error) => {
354
+ logger.error('[install] ' + (error.stack || error));
355
+ })
356
+ }
357
+ self.addEventListener('install', async function (event) {
358
+ logger.bg.event("service worker install event listening");
359
+ try {
360
+ self.skipWaiting();
361
+ event.waitUntil(installFunction());
362
+ logger.bg.ready('service worker install sucess!');
363
+ } catch (error) {
364
+ logger.error('[install] ' + (error.stack || error));
365
+ }
366
+ });
367
+ self.addEventListener('activate', async event => {
368
+ logger.bg.event("service worker activate event listening");
369
+ try {
370
+ event.waitUntil(
371
+ caches.keys().then((keys) => {
372
+ return Promise.all(keys.map((key) => {
373
+ if (!key.includes(cacheSuffixVersion)) {
374
+ caches.delete(key);
375
+ logger.bg.ready('Deleted Outdated Cache: ' + key);
376
+ }
377
+ }));
378
+ }).catch((error) => {
379
+ logger.error('[activate] ' + (error.stack || error));
380
+ })
381
+ );
382
+ await self.clients.claim()
383
+ logger.bg.ready('service worker activate sucess!');
384
+ } catch (error) {
385
+ logger.error('[activate] ' + (error.stack || error));
386
+ }
387
+ })
388
+ self.addEventListener('fetch', async event => {
389
+ event.respondWith(
390
+ handleFetch(event).catch((error) => {
391
+ logger.error('[fetch] ' + event.request.url + '\n[error] ' + (error.stack || error));
392
+ })
393
+ )
394
+ });
395
+
396
+
397
+ const NetworkOnly = async (event) => {
398
+ logger.group.info('NetworkOnly: ' + new URL(event.request.url).pathname);
399
+ logger.wait('service worker fetch: ' + event.request.url)
400
+ logger.group.end();
401
+ return fetch(event.request)
402
+ }
403
+ const CacheFirst = async (event) => {
404
+ return caches.match(event.request).then(function (resp) {
405
+ logger.group.info('CacheFirst: ' + new URL(event.request.url).pathname);
406
+ logger.wait('service worker fetch: ' + event.request.url)
407
+ if (resp) {
408
+ logger.group.ready(`Cache Hit`);
409
+ console.log(resp)
410
+ logger.group.end();
411
+ logger.group.end();
412
+ event.waitUntil(CacheRuntime(event.request))
413
+ return resp;
414
+ } else {
415
+ logger.warn(`Cache Miss`);
416
+ logger.group.end();
417
+ return CacheRuntime(event.request)
418
+ }
419
+ })
420
+ }
421
+ const CacheAlways = async (event) => {
422
+ return caches.match(event.request).then(function (resp) {
423
+ logger.group.info('CacheAlways: ' + new URL(event.request.url).pathname);
424
+ logger.wait('service worker fetch: ' + event.request.url)
425
+ if (resp) {
426
+ logger.group.ready(`Cache Hit`);
427
+ console.log(resp)
428
+ logger.group.end();
429
+ logger.group.end();
430
+ return resp;
431
+ } else {
432
+ logger.warn(`Cache Miss`);
433
+ logger.group.end();
434
+ return CacheRuntime(event.request)
435
+ }
436
+ })
437
+ }
438
+
439
+ const matchCache = async (event) => {
440
+ return caches.match(event.request).then(function (resp) {
441
+ logger.group.info('service worker fetch: ' + event.request.url)
442
+ if (resp) {
443
+ logger.group.ready(`Cache Hit`);
444
+ console.log(resp)
445
+ logger.group.end();
446
+ logger.group.end();
447
+ return resp;
448
+ } else {
449
+ logger.warn(`Cache Miss`);
450
+ logger.group.end();
451
+ return CacheRuntime(event.request)
452
+ }
453
+ })
454
+ }
455
+ async function CacheRuntime(request) {
456
+ const url = new URL(request.url);
457
+ let response = await matchCDN(request);
458
+ if (!response) {
459
+ response = await fetch(request).catch(() => null)
460
+ }
461
+ logger.group.event(`Cache Runtime ${url.pathname}`);
462
+ logger.wait(`Caching url: ${request.url}`);
463
+ console.log(response);
464
+
465
+ if (request.method === "GET" && (url.protocol == "https:")) {
466
+ const cache = await caches.open(CACHE_NAME + "-runtime");
467
+ cache.put(request, response.clone()).catch(error => {
468
+ logger.error('[Cache Runtime] ' + (error.stack || error));
469
+ if (error.name === 'QuotaExceededError') {
470
+ caches.delete(CACHE_NAME + "-runtime");
471
+ logger.ready("deleted cache")
472
+ }
473
+ })
474
+ logger.ready(`Cached url: ${request.url}`);
475
+ } else {
476
+ logger.warn(`Not Cached url: ${request.url}`);
477
+ }
478
+ logger.group.end();
479
+ return response;
480
+ }
481
+
482
+ const matchCDN = async (req) => {
483
+ const nav = navigator
484
+ const { saveData, effectiveType } = nav.connection || nav.mozConnection || nav.webkitConnection || {}
485
+ if (saveData || /2g/.test(effectiveType)) {
486
+ logger.warn("Slow Network: Transparent Proxy");
487
+ return fetch(req);
488
+ }
489
+ const urls = []
490
+ let urlObj = new URL(req.url)
491
+ let pathType = urlObj.pathname.split('/')[1]
492
+ let pathTestRes = "";
493
+
494
+ if (NPMMirror && new RegExp(location.origin).test(req.url)) {
495
+ logger.group.ready(`Match NPM Mirror: ` + req.url);
496
+ for (const key in cdn.npm) {
497
+ let url = cdn.npm[key] + "/" + NPMPackage + "@" + NPMPackageVersion + req.url.replace(location.origin, '')
498
+ url = fullPath(fullPath(url))
499
+ console.log(url);
500
+ urls.push(url)
501
+ }
502
+ logger.group.end()
503
+ }
504
+ if (!urls.length) {
505
+ for (const item of cdn_match_list) {
506
+ if (new RegExp(item.key).test(req.url)) {
507
+ pathType = item.type
508
+ pathTestRes = new RegExp(item.key).exec(req.url)[0]
509
+ break;
510
+ }
511
+ }
512
+ for (const type in cdn) {
513
+ if (type === pathType) {
514
+ logger.group.ready(`Match CDN ${pathType}: ` + req.url);
515
+ for (const key in cdn[type]) {
516
+ const url = cdn[type][key] + req.url.replace(pathTestRes, '')
517
+ console.log(url);
518
+ urls.push(url)
519
+ }
520
+ logger.group.end()
521
+ }
522
+ }
523
+ }
524
+
525
+ let res;
526
+ if (urls.length)
527
+ res = FetchEngine(urls)
528
+ else
529
+ res = fetch(req)
530
+ if (res && NPMMirror && new RegExp(location.origin).test(req.url)) {
531
+ const ext = fullPath(fullPath(req.url)).split('.').pop()
532
+ const contentType = getContentType(ext)
533
+ res = res
534
+ .then(res => res.arrayBuffer())
535
+ .then(buffer => new Response(buffer, {
536
+ headers: {
537
+ "Content-Type": contentType
538
+ }
539
+ }))
540
+ .catch(() => null)
541
+ }
542
+ return res
543
+ }
544
+
545
+ const fullPath = (url) => {
546
+ url = url.split('?')[0].split('#')[0]
547
+ if (url.endsWith('/')) {
548
+ url += 'index.html'
549
+ } else {
550
+ const list = url.split('/')
551
+ const last = list[list.length - 1]
552
+ if (last.indexOf('.') === -1) {
553
+ url += '.html'
554
+ }
555
+ }
556
+ return url
557
+ }
558
+ async function progress(res) {
559
+ return new Response(await res.arrayBuffer(), {
560
+ status: res.status,
561
+ headers: res.headers
562
+ })
563
+ }
564
+
565
+ function createPromiseAny() {
566
+ Promise.any = function (promises) {
567
+ return new Promise((resolve, reject) => {
568
+ promises = Array.isArray(promises) ? promises : []
569
+ let len = promises.length
570
+ let errs = []
571
+ if (len === 0) return reject(new AggregateError('All promises were rejected'))
572
+ promises.forEach((p) => {
573
+ if (p instanceof Promise) {
574
+ p.then(
575
+ (res) => resolve(res),
576
+ (err) => {
577
+ len--
578
+ errs.push(err)
579
+ if (len === 0) reject(new AggregateError(errs))
580
+ }
581
+ )
582
+ } else {
583
+ reject(p)
584
+ }
585
+ })
586
+ })
587
+ }
588
+ }
589
+
590
+ function fetchAny(reqs) {
591
+ const controller = new AbortController()
592
+
593
+ return reqs.map(req => {
594
+ return new Promise((resolve, reject) => {
595
+ fetch(req, {
596
+ signal: controller.signal
597
+ })
598
+ .then(progress)
599
+ .then(res => {
600
+ controller.abort()
601
+ if (res.status !== 200)
602
+ reject(null)
603
+ else
604
+ resolve(res)
605
+ })
606
+ .catch(() => reject(null))
607
+ })
608
+ })
609
+ }
610
+
611
+ function fetchParallel(reqs) {
612
+ const abortEvent = new Event("abortOtherInstance")
613
+ const eventTarget = new EventTarget();
614
+
615
+ return reqs.map(async req => {
616
+ const controller = new AbortController();
617
+ let tagged = false;
618
+ eventTarget.addEventListener(abortEvent.type, () => {
619
+ if (!tagged) controller.abort();
620
+ })
621
+ return new Promise((resolve, reject) => {
622
+ fetch(req, {
623
+ signal: controller.signal,
624
+ }).then(res => {
625
+ tagged = true;
626
+ eventTarget.dispatchEvent(abortEvent)
627
+ if (res.status !== 200)
628
+ reject(null)
629
+ else
630
+ resolve(res)
631
+ }).catch(() => reject(null))
632
+ })
633
+ });
634
+ }
635
+
636
+ const FetchEngine = (reqs) => {
637
+ if (!Promise.any) createPromiseAny();
638
+ return Promise.any(fetchParallel(reqs)).then(res => res)
639
+ .catch((e) => {
640
+ if (e == "AggregateError: All promises were rejected") {
641
+ return Promise.any(fetchAny(reqs))
642
+ .then((res) => res)
643
+ .catch(() => null);
644
+ }
645
+ return null;
646
+ });
647
+ };
648
+
649
+ const getContentType = (ext) => {
650
+ switch (ext) {
651
+ case 'js':
652
+ return 'text/javascript'
653
+ case 'html':
654
+ return 'text/html'
655
+ case 'css':
656
+ return 'text/css'
657
+ case 'json':
658
+ return 'application/json'
659
+ case 'webp':
660
+ return 'image/webp'
661
+ case 'jpg':
662
+ return 'image/jpg'
663
+ case 'jpeg':
664
+ return 'image/jpeg'
665
+ case 'png':
666
+ return 'image/png'
667
+ case 'gif':
668
+ return 'image/gif'
669
+ case 'xml':
670
+ return 'text/xml'
671
+ case 'xsl':
672
+ return 'text/xml'
673
+ case 'webmanifest':
674
+ return 'text/webmanifest'
675
+ case 'map':
676
+ return 'application/json'
677
+ case 'bcmap':
678
+ return 'image/vnd.wap.wbmp'
679
+ case 'wbmp':
680
+ return 'image/vnd.wap.wbmp'
681
+ case 'bmp':
682
+ return 'image/bmp'
683
+ case 'ico':
684
+ return 'image/vnd.microsoft.icon'
685
+ case 'tiff':
686
+ return 'image/tiff'
687
+ case 'tif':
688
+ return 'image/tiff'
689
+ case 'svg':
690
+ return 'image/svg+xml'
691
+ case 'svgz':
692
+ return 'image/svg+xml'
693
+ case 'woff':
694
+ return 'application/font-woff'
695
+ case 'woff2':
696
+ return 'application/font-woff2'
697
+ case 'ttf':
698
+ return 'application/font-ttf'
699
+ case 'otf':
700
+ return 'application/font-otf'
701
+ case 'eot':
702
+ return 'application/vnd.ms-fontobject'
703
+ case 'zip':
704
+ return 'application/zip'
705
+ case 'tar':
706
+ return 'application/x-tar'
707
+ case 'gz':
708
+ return 'application/gzip'
709
+ case 'bz2':
710
+ return 'application/x-bzip2'
711
+ case 'rar':
712
+ return 'application/x-rar-compressed'
713
+ case '7z':
714
+ return 'application/x-7z-compressed'
715
+ case 'doc':
716
+ return 'application/msword'
717
+ case 'docx':
718
+ return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
719
+ case 'xls':
720
+ return 'application/vnd.ms-excel'
721
+ case 'xlsx':
722
+ return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
723
+ case 'ppt':
724
+ return 'application/vnd.ms-powerpoint'
725
+ case 'pptx':
726
+ return 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
727
+ case 'pdf':
728
+ return 'application/pdf'
729
+ case 'txt':
730
+ return 'text/plain'
731
+ case 'rtf':
732
+ return 'application/rtf'
733
+ case 'mp3':
734
+ return 'audio/mpeg'
735
+ case 'wav':
736
+ return 'audio/x-wav'
737
+ case 'ogg':
738
+ return 'audio/ogg'
739
+ case 'mp4':
740
+ return 'video/mp4'
741
+ case 'm4v':
742
+ return 'video/x-m4v'
743
+ case 'mov':
744
+ return 'video/quicktime'
745
+ case 'avi':
746
+ return 'video/x-msvideo'
747
+ case 'wmv':
748
+ return 'video/x-ms-wmv'
749
+ case 'flv':
750
+ return 'video/x-flv'
751
+ case 'swf':
752
+ return 'application/x-shockwave-flash'
753
+ case 'mpg':
754
+ return 'video/mpeg'
755
+ case 'mpeg':
756
+ return 'video/mpeg'
757
+ case 'mpe':
758
+ return 'video/mpeg'
759
+ case 'mpv':
760
+ return 'video/mpeg'
761
+ case 'm2v':
762
+ return 'video/mpeg'
763
+ case 'm4a':
764
+ return 'audio/mp4'
765
+ case 'aac':
766
+ return 'audio/aac'
767
+ case 'm3u':
768
+ return 'audio/x-mpegurl'
769
+ case 'm3u8':
770
+ return 'application/vnd.apple.mpegurl'
771
+ case 'pls':
772
+ return 'audio/x-scpls'
773
+ case 'cue':
774
+ return 'application/x-cue'
775
+ case 'wma':
776
+ return 'audio/x-ms-wma'
777
+ case 'flac':
778
+ return 'audio/flac'
779
+ case 'aif':
780
+ return 'audio/x-aiff'
781
+ case 'aiff':
782
+ return 'audio/x-aiff'
783
+ case 'aifc':
784
+ return 'audio/x-aiff'
785
+ case 'au':
786
+ return 'audio/basic'
787
+ case 'snd':
788
+ return 'audio/basic'
789
+ case 'mid':
790
+ return 'audio/midi'
791
+ case 'midi':
792
+ return 'audio/midi'
793
+ case 'kar':
794
+ return 'audio/midi'
795
+ default:
796
+ return 'text/plain'
797
+ }
798
+ }