swpp-backends 1.1.2 → 1.2.0
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/README.md +17 -17
- package/dist/FileAnalyzer.js +31 -42
- package/dist/index.js +1 -0
- package/package.json +1 -2
- package/types/index.d.ts +1 -0
package/README.md
CHANGED
|
@@ -6,29 +6,29 @@ swpp 的全拼为“ServiceWorkerPlusPlus”(或“ServiceWorker++”),但
|
|
|
6
6
|
|
|
7
7
|
swpp 生成的 SW 与其它插件的对比:
|
|
8
8
|
|
|
9
|
-
| |
|
|
10
|
-
|
|
11
|
-
| 本地缓存 |
|
|
12
|
-
| 缓存增量更新 |
|
|
13
|
-
| 缓存过期时间 |
|
|
14
|
-
| 缓存大小限制 |
|
|
15
|
-
| 预缓存 |
|
|
16
|
-
| Request 篡改 |
|
|
17
|
-
| URL 竞速 |
|
|
18
|
-
| 备用 URL |
|
|
19
|
-
| 阻塞响应 |
|
|
20
|
-
| 逃生门 |
|
|
21
|
-
| 跨平台 |
|
|
22
|
-
| 高度自由 |
|
|
23
|
-
| 更新 |
|
|
9
|
+
| | swpp | hexo-offline |
|
|
10
|
+
|:----------:|:-------------:|:------------:|
|
|
11
|
+
| 本地缓存 | ✔️ | ✔️ |
|
|
12
|
+
| 缓存增量更新 | ✔️ | ❌ |
|
|
13
|
+
| 缓存过期时间 | ❌<sup>1</sup> | ✔️ |
|
|
14
|
+
| 缓存大小限制 | ❌ | ✔️ |
|
|
15
|
+
| 预缓存 | ❌ | ✔️ |
|
|
16
|
+
| Request 篡改 | ✔️ | ❌ |
|
|
17
|
+
| URL 竞速 | ✔️ | ❌ |
|
|
18
|
+
| 备用 URL | ✔️ | ❌ |
|
|
19
|
+
| 阻塞响应 | ✔️ | ❌ |
|
|
20
|
+
| 逃生门 | ✔️ | ❌ |
|
|
21
|
+
| 跨平台 | ✔️ | ❌ |
|
|
22
|
+
| 高度自由 | ✔️ | ❌ |
|
|
23
|
+
| 更新 | 非常频繁 | 超过两年没有更新 |
|
|
24
|
+
|
|
25
|
+
<small> 注:上面提到的跨平台是指跨越框架(比如 Hexo、WordPress 等)。</small>
|
|
24
26
|
|
|
25
27
|
+ ✔️:支持
|
|
26
28
|
+ ❌:不支持
|
|
27
29
|
|
|
28
30
|
1. 因为有增量更新,所以没提供过期的实现,没必要
|
|
29
|
-
2. 目前只有 hexo 平台存在具体实现,其它平台的暂时还没有
|
|
30
31
|
|
|
31
|
-
注:上面提到的跨平台是指跨越框架(比如 Hexo、WordPress 等)。
|
|
32
32
|
|
|
33
33
|
目前支持的平台:
|
|
34
34
|
|
package/dist/FileAnalyzer.js
CHANGED
|
@@ -34,7 +34,6 @@ const SwppRules_1 = require("./SwppRules");
|
|
|
34
34
|
const crypto = __importStar(require("crypto"));
|
|
35
35
|
const buffer_1 = require("buffer");
|
|
36
36
|
const fast_html_parser_1 = __importDefault(require("fast-html-parser"));
|
|
37
|
-
const css_1 = __importDefault(require("css"));
|
|
38
37
|
const Utils_1 = require("./Utils");
|
|
39
38
|
/**
|
|
40
39
|
* 遍历指定目录及其子目录中包含的所有文件(不遍历文件夹)
|
|
@@ -316,7 +315,6 @@ async function eachAllLinkInUrl(domain, url, result, event) {
|
|
|
316
315
|
}
|
|
317
316
|
exports.eachAllLinkInUrl = eachAllLinkInUrl;
|
|
318
317
|
async function eachAllLinkInHtml(domain, url, content, result, event) {
|
|
319
|
-
const root = url.substring(0, url.lastIndexOf('/') + 1);
|
|
320
318
|
const taskList = [];
|
|
321
319
|
const each = (node) => {
|
|
322
320
|
let subUrl = undefined;
|
|
@@ -364,48 +362,39 @@ async function eachAllLinkInHtml(domain, url, content, result, event) {
|
|
|
364
362
|
return Promise.all(taskList);
|
|
365
363
|
}
|
|
366
364
|
async function eachAllLinkInCss(domain, url, content, result, event) {
|
|
367
|
-
const root = url.substring(0, url.lastIndexOf('/')
|
|
368
|
-
const
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
switch (rule.type) {
|
|
376
|
-
case 'declaration':
|
|
377
|
-
const value = rule.value;
|
|
378
|
-
const list = value.match(/url\(['"]?([^'")]+)['"]?\)/g)
|
|
379
|
-
?.map(it => it.replace(/(^url\(['"]?)|(['"]?\)$)/g, ''));
|
|
380
|
-
if (list) {
|
|
381
|
-
for (let url of list) {
|
|
382
|
-
if (!/^(https?:)|(\/\/)/.test(url)) {
|
|
383
|
-
if (url[0] === '/')
|
|
384
|
-
url = root + url.substring(1);
|
|
385
|
-
else
|
|
386
|
-
url = root + url;
|
|
387
|
-
}
|
|
388
|
-
taskList.push(eachAllLinkInUrl(domain, url, result, event));
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
break;
|
|
392
|
-
case 'import':
|
|
393
|
-
const url = rule.import.trim().replace(/^["']|["']$/g, '');
|
|
394
|
-
taskList.push(eachAllLinkInUrl(domain, url, result, event));
|
|
395
|
-
break;
|
|
396
|
-
}
|
|
365
|
+
const root = url.substring(0, url.lastIndexOf('/'));
|
|
366
|
+
const urls = new Set();
|
|
367
|
+
for (let i = 0; i < content.length;) {
|
|
368
|
+
const left = content.indexOf('/*', i);
|
|
369
|
+
let sub;
|
|
370
|
+
if (left < 0) {
|
|
371
|
+
sub = content.substring(i);
|
|
372
|
+
i = Number.MAX_VALUE;
|
|
397
373
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
374
|
+
else {
|
|
375
|
+
sub = content.substring(i, left);
|
|
376
|
+
const right = content.indexOf('*/', left + 2);
|
|
377
|
+
if (right < 0)
|
|
378
|
+
i = Number.MAX_VALUE;
|
|
379
|
+
else
|
|
380
|
+
i = right + 2;
|
|
381
|
+
}
|
|
382
|
+
sub.match(/(url\(.*?\))|(@import\s+['"].*?['"])|((https?:)?\/\/[^\s/$.?#].\S*)/g)
|
|
383
|
+
?.map(it => it.replace(/(^url\((['"]?))|((['"]?)\)$)|(^@import\s+['"])|(['"]$)/g, ''))
|
|
384
|
+
?.forEach(it => urls.add(it));
|
|
405
385
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
386
|
+
return Promise.all(Array.from(urls).map(it => {
|
|
387
|
+
switch (true) {
|
|
388
|
+
case it.startsWith('http'):
|
|
389
|
+
return it;
|
|
390
|
+
case it.startsWith('//'):
|
|
391
|
+
return 'http' + it;
|
|
392
|
+
case it.startsWith('/'):
|
|
393
|
+
return root + it;
|
|
394
|
+
default:
|
|
395
|
+
return root + '/' + it;
|
|
396
|
+
}
|
|
397
|
+
}).map(it => eachAllLinkInUrl(domain, it, result, event)));
|
|
409
398
|
}
|
|
410
399
|
function eachAllLinkInJavaScript(domain, _, content, result, event) {
|
|
411
400
|
const taskList = [];
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ const UpdateJsonBuilder_1 = require("./UpdateJsonBuilder");
|
|
|
8
8
|
const VersionAnalyzer_1 = require("./VersionAnalyzer");
|
|
9
9
|
// noinspection JSUnusedGlobalSymbols
|
|
10
10
|
exports.default = {
|
|
11
|
+
version: '1.2.0',
|
|
11
12
|
cache: {
|
|
12
13
|
readEjectData: Utils_1.readEjectData, readUpdateJson: UpdateJsonBuilder_1.readUpdateJson,
|
|
13
14
|
readRules: SwppRules_1.readRules, readMergeVersionMap: FileAnalyzer_1.readMergeVersionMap,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swpp-backends",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "types/index.d.ts",
|
|
6
6
|
"description": "Generate a powerful ServiceWorker for your website.",
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"typescript": "^5.1.6"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"css": "^3.0.0",
|
|
23
22
|
"fast-html-parser": "^1.0.1",
|
|
24
23
|
"hexo-log": "^4.1.0",
|
|
25
24
|
"node-fetch": "^2.6.12"
|
package/types/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { readRules, loadRules, addRulesMapEvent } from './SwppRules';
|
|
|
5
5
|
import { readUpdateJson, loadUpdateJson, submitChange, getShorthand, buildNewInfo } from './UpdateJsonBuilder';
|
|
6
6
|
import { refreshUrl, analyze } from './VersionAnalyzer';
|
|
7
7
|
declare const _default: {
|
|
8
|
+
version: string;
|
|
8
9
|
cache: {
|
|
9
10
|
readEjectData: typeof readEjectData;
|
|
10
11
|
readUpdateJson: typeof readUpdateJson;
|