swpp-backends 0.0.1-alpha.0 → 0.0.2-alpha
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/dist/SwppConfig.js +2 -0
- package/dist/UpdateJsonBuilder.js +281 -0
- package/dist/VersionAnalyzer.js +62 -0
- package/dist/fileAnalyzer.js +325 -76
- package/dist/index.js +32 -25
- package/dist/resources/sw-template.js +15 -23
- package/dist/serviceWorkerBuilder.js +18 -10
- package/dist/swppRules.js +34 -16
- package/dist/utils.js +42 -14
- package/package.json +36 -21
- package/{src/SwppConfig.ts → types/SwppConfig.d.ts} +125 -125
- package/types/UpdateJsonBuilder.d.ts +50 -0
- package/types/VersionAnalyzer.d.ts +29 -0
- package/types/fileAnalyzer.d.ts +149 -0
- package/types/index.d.ts +55 -0
- package/types/serviceWorkerBuilder.d.ts +7 -0
- package/types/swppRules.d.ts +101 -0
- package/types/utils.d.ts +41 -0
- package/gulpfile.js +0 -3
- package/src/FileAnalyzer.ts +0 -417
- package/src/ServiceWorkerBuilder.ts +0 -156
- package/src/SwppRules.ts +0 -200
- package/src/UpdateJsonBuilder.ts +0 -279
- package/src/Utils.ts +0 -195
- package/src/VersionAnalyzer.ts +0 -77
- package/src/index.ts +0 -64
- package/src/resources/sw-dom.js +0 -51
- package/src/resources/sw-template.js +0 -257
- package/tsconfig.json +0 -109
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 版本信息(可以用 JSON 序列化)
|
|
3
|
+
* @see VersionMap
|
|
4
|
+
*/
|
|
5
|
+
export interface VersionJson {
|
|
6
|
+
version: number;
|
|
7
|
+
list: VersionMap;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 版本列表
|
|
11
|
+
*
|
|
12
|
+
* + key 为文件的 URL
|
|
13
|
+
* + value {string} 为 URL 对应文件的 md5 值
|
|
14
|
+
* + value {string[]} 为 stable 文件其中包含的 URL
|
|
15
|
+
*/
|
|
16
|
+
export interface VersionMap {
|
|
17
|
+
[propName: string]: any;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 判断指定 URL 是否排除
|
|
21
|
+
*
|
|
22
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
23
|
+
*
|
|
24
|
+
* @param domain 网站域名
|
|
25
|
+
* @param url 要判断的 URL
|
|
26
|
+
*/
|
|
27
|
+
export declare function isExclude(domain: string, url: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* 判断指定 URL 是否是 stable 的
|
|
30
|
+
*
|
|
31
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
32
|
+
*/
|
|
33
|
+
export declare function isStable(url: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* 从指定 URL 加载 cache json
|
|
36
|
+
*
|
|
37
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
38
|
+
*/
|
|
39
|
+
export declare function loadVersionJson(url: string): Promise<VersionJson>;
|
|
40
|
+
/** 提交要存储到 version json 的值 */
|
|
41
|
+
export declare function submitCacheInfo(value: any): void;
|
|
42
|
+
/**
|
|
43
|
+
* 读取最后一次加载的 version json
|
|
44
|
+
*
|
|
45
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
46
|
+
* + **调用该函数前必须调用过 [loadCacheJson]**
|
|
47
|
+
*/
|
|
48
|
+
export declare function readOldVersionJson(): VersionJson;
|
|
49
|
+
/**
|
|
50
|
+
* 读取最后一次构建的 VersionJson
|
|
51
|
+
*
|
|
52
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
53
|
+
* + **调用该函数前必须调用过 [loadCacheJson]**
|
|
54
|
+
* + **执行该函数前必须调用过 [buildVersionJson]**
|
|
55
|
+
* + **执行该函数前必须调用过 [calcEjectValues]**
|
|
56
|
+
*/
|
|
57
|
+
export declare function readNewVersionJson(): VersionJson;
|
|
58
|
+
/**
|
|
59
|
+
* 读取新旧版本文件合并后的版本地图
|
|
60
|
+
*
|
|
61
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
62
|
+
* + **调用该函数前必须调用过 [loadCacheJson]**
|
|
63
|
+
* + **执行该函数前必须调用过 [buildVersionJson]**
|
|
64
|
+
* + **执行该函数前必须调用过 [calcEjectValues]**
|
|
65
|
+
*/
|
|
66
|
+
export declare function readMergeVersionMap(): VersionMap;
|
|
67
|
+
/**
|
|
68
|
+
* 构建一个 version json
|
|
69
|
+
*
|
|
70
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
71
|
+
* + **调用该函数前必须调用过 [loadCacheJson]**
|
|
72
|
+
* + **执行该函数前必须调用过 [calcEjectValues]**
|
|
73
|
+
*
|
|
74
|
+
* @param protocol 网站的网络协议
|
|
75
|
+
* @param domain 网站域名(包括二级域名)
|
|
76
|
+
* @param root 网页根目录(首页 index.html 所在目录)
|
|
77
|
+
*/
|
|
78
|
+
export declare function buildVersionJson(protocol: ('https://' | 'http://'), domain: string, root: string): Promise<VersionJson>;
|
|
79
|
+
/**
|
|
80
|
+
* 检索一个 URL 指向的文件中所有地外部链接
|
|
81
|
+
*
|
|
82
|
+
* 该函数会处理该 URL 指向的文件和文件中直接或间接包含的所有 URL
|
|
83
|
+
*
|
|
84
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
85
|
+
* + **调用该函数前必须调用过 [loadCacheJson]**
|
|
86
|
+
* + **执行该函数前必须调用过 [calcEjectValues]**
|
|
87
|
+
*
|
|
88
|
+
* @param domain 网站域名
|
|
89
|
+
* @param url 要检索的 URL
|
|
90
|
+
* @param result 存放结果的对象
|
|
91
|
+
* @param event 检索到一个 URL 时触发的事件
|
|
92
|
+
*/
|
|
93
|
+
export declare function eachAllLinkInUrl(domain: string, url: string, result: VersionMap, event?: (url: string) => void): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* 检索 HTML 文件中的所有外部链接
|
|
96
|
+
*
|
|
97
|
+
* 该函数仅处理 HTML 当中直接或间接包含的 URL,不处理文件本身
|
|
98
|
+
*
|
|
99
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
100
|
+
* + **调用该函数前必须调用过 [loadCacheJson]**
|
|
101
|
+
*
|
|
102
|
+
* @param domain 网站域名
|
|
103
|
+
* @param content HTML 文件内容
|
|
104
|
+
* @param result 存放结果的对象
|
|
105
|
+
* @param event 检索到 URL 时触发的事件
|
|
106
|
+
*/
|
|
107
|
+
export declare function eachAllLinkInHtml(domain: string, content: string, result: VersionMap, event?: (url: string) => void): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* 检索 CSS 文件中的所有外部链
|
|
110
|
+
*
|
|
111
|
+
* 该函数仅处理 CSS 当中直接或间接包含的 URL,不处理文件本身
|
|
112
|
+
*
|
|
113
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
114
|
+
* + **调用该函数前必须调用过 [loadCacheJson]**
|
|
115
|
+
*
|
|
116
|
+
* @param domain 网站域名
|
|
117
|
+
* @param content CSS 文件内容
|
|
118
|
+
* @param result 存放结果的对象
|
|
119
|
+
* @param event 当检索到一个 URL 后触发的事件
|
|
120
|
+
*/
|
|
121
|
+
export declare function eachAllLinkInCss(domain: string, content: string, result: VersionMap, event?: (url: string) => void): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* 遍历 JS 文件中地所有外部链接
|
|
124
|
+
*
|
|
125
|
+
* 该函数仅处理 JS 当中直接或间接包含的 URL,不处理文件本身
|
|
126
|
+
*
|
|
127
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
128
|
+
* + **调用该函数前必须调用过 [loadCacheJson]**
|
|
129
|
+
*
|
|
130
|
+
* @param domain 网站域名
|
|
131
|
+
* @param content JS 文件内容
|
|
132
|
+
* @param result 存放结果的对象
|
|
133
|
+
* @param event 当检索到一个 URL 后触发的事件
|
|
134
|
+
*/
|
|
135
|
+
export declare function eachAllLinkInJavaScript(domain: string, content: string, result: VersionMap, event?: (url: string) => void): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* 查询指定 URL 对应的缓存规则
|
|
138
|
+
*
|
|
139
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
140
|
+
* + **执行该函数前必须调用过 [calcEjectValues]**
|
|
141
|
+
*/
|
|
142
|
+
export declare function findCache(url: URL | string): any | null;
|
|
143
|
+
/**
|
|
144
|
+
* 替换请求
|
|
145
|
+
*
|
|
146
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
147
|
+
* + **执行该函数前必须调用过 [calcEjectValues]**
|
|
148
|
+
*/
|
|
149
|
+
export declare function replaceRequest(url: string): string;
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { readEjectData, getSource, fetchFile, replaceDevRequest, calcEjectValues } from './Utils';
|
|
2
|
+
import { isExclude, isStable, loadVersionJson, readOldVersionJson, readNewVersionJson, readMergeVersionMap, buildVersionJson, eachAllLinkInUrl, eachAllLinkInHtml, eachAllLinkInCss, eachAllLinkInJavaScript, findCache, replaceRequest, submitCacheInfo } from './FileAnalyzer';
|
|
3
|
+
import { buildServiceWorker } from './ServiceWorkerBuilder';
|
|
4
|
+
import { readRules, loadRules, addRulesMapEvent } from './SwppRules';
|
|
5
|
+
import { readUpdateJson, loadUpdateJson, submitChange, getShorthand, buildNewInfo } from './UpdateJsonBuilder';
|
|
6
|
+
import { refreshUrl, analyzer } from './VersionAnalyzer';
|
|
7
|
+
declare const _default: {
|
|
8
|
+
cache: {
|
|
9
|
+
readEjectData: typeof readEjectData;
|
|
10
|
+
readUpdateJson: typeof readUpdateJson;
|
|
11
|
+
readRules: typeof readRules;
|
|
12
|
+
readMergeVersionMap: typeof readMergeVersionMap;
|
|
13
|
+
readOldVersionJson: typeof readOldVersionJson;
|
|
14
|
+
readNewVersionJson: typeof readNewVersionJson;
|
|
15
|
+
};
|
|
16
|
+
builder: {
|
|
17
|
+
buildServiceWorker: typeof buildServiceWorker;
|
|
18
|
+
buildVersionJson: typeof buildVersionJson;
|
|
19
|
+
buildNewInfo: typeof buildNewInfo;
|
|
20
|
+
calcEjectValues: typeof calcEjectValues;
|
|
21
|
+
analyzer: typeof analyzer;
|
|
22
|
+
};
|
|
23
|
+
loader: {
|
|
24
|
+
loadRules: typeof loadRules;
|
|
25
|
+
loadUpdateJson: typeof loadUpdateJson;
|
|
26
|
+
loadVersionJson: typeof loadVersionJson;
|
|
27
|
+
};
|
|
28
|
+
event: {
|
|
29
|
+
addRulesMapEvent: typeof addRulesMapEvent;
|
|
30
|
+
refreshUrl: typeof refreshUrl;
|
|
31
|
+
submitChange: typeof submitChange;
|
|
32
|
+
submitCacheInfo: typeof submitCacheInfo;
|
|
33
|
+
};
|
|
34
|
+
utils: {
|
|
35
|
+
getSource: typeof getSource;
|
|
36
|
+
getShorthand: typeof getShorthand;
|
|
37
|
+
findCache: typeof findCache;
|
|
38
|
+
fetchFile: typeof fetchFile;
|
|
39
|
+
replaceDevRequest: typeof replaceDevRequest;
|
|
40
|
+
replaceRequest: typeof replaceRequest;
|
|
41
|
+
isStable: typeof isStable;
|
|
42
|
+
isExclude: typeof isExclude;
|
|
43
|
+
eachAllLinkInUrl: typeof eachAllLinkInUrl;
|
|
44
|
+
eachAllLinkInHtml: typeof eachAllLinkInHtml;
|
|
45
|
+
eachAllLinkInCss: typeof eachAllLinkInCss;
|
|
46
|
+
eachAllLinkInJavaScript: typeof eachAllLinkInJavaScript;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export default _default;
|
|
50
|
+
export { EjectCache } from './Utils';
|
|
51
|
+
export { VersionJson, VersionMap } from './FileAnalyzer';
|
|
52
|
+
export { ServiceWorkerConfig, SwppConfig, SwppConfigTemplate, DomConfig, VersionJsonConfig, RegisterConfig, ExternalMonitorConfig } from './SwppConfig';
|
|
53
|
+
export { SwppRules, CacheRules, SpareURLs, EjectValue } from './SwppRules';
|
|
54
|
+
export { UpdateJson, UpdateVersionInfo, FlagStr, ChangeExpression } from './UpdateJsonBuilder';
|
|
55
|
+
export { AnalyzerResult } from './VersionAnalyzer';
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Request, Response } from 'node-fetch';
|
|
2
|
+
import { SwppConfig } from './SwppConfig';
|
|
3
|
+
/**
|
|
4
|
+
* 读取最后一次构建的 rules
|
|
5
|
+
*
|
|
6
|
+
* **执行该函数前必须调用过 [loadRules]**
|
|
7
|
+
*/
|
|
8
|
+
export declare function readRules(): SwppRules;
|
|
9
|
+
/**
|
|
10
|
+
* 添加一个 rules 映射事件,这个事件允许用户修改 rules 的内容
|
|
11
|
+
*
|
|
12
|
+
* 执行时按照注册的顺序执行
|
|
13
|
+
*/
|
|
14
|
+
export declare function addRulesMapEvent(mapper: (rules: any) => void): void;
|
|
15
|
+
/**
|
|
16
|
+
* 加载 rules 文件
|
|
17
|
+
* @param root 项目根目录
|
|
18
|
+
* @param fileName rules 文件名称
|
|
19
|
+
* @param selects 附加的可选目录,优先级低于 [root]
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadRules(root: string, fileName: string, selects: string[]): SwppRules;
|
|
22
|
+
export interface SwppRules {
|
|
23
|
+
/** 配置项 */
|
|
24
|
+
config: SwppConfig;
|
|
25
|
+
/** 缓存规则 */
|
|
26
|
+
cacheRules?: {
|
|
27
|
+
[propName: string]: CacheRules;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* 修改 Request
|
|
31
|
+
* @param request 原始 request
|
|
32
|
+
* @param $eject 用于访问通过 [ejectValues] 函数插入的变量,变量名必须为 `$eject`
|
|
33
|
+
* @return 修改后的 Request,不修改的话返回 null 或不返回数据
|
|
34
|
+
*/
|
|
35
|
+
modifyRequest?: (request: Request, $eject: any) => Request | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* 获取一个 URL 对应的多个 CDN 的 URL
|
|
38
|
+
*
|
|
39
|
+
* 竞速时除了 URL 外所有参数保持一致
|
|
40
|
+
*
|
|
41
|
+
* @param url 原始 URL
|
|
42
|
+
* @return {?string[]} 返回值不包含则表示去除对原始 URL 地访问。返回 undefined 表示该 URL 不启用竞速
|
|
43
|
+
*/
|
|
44
|
+
getRaceUrls?: (url: string) => string[] | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* 获取一个 URL 对应的 URL 列表
|
|
47
|
+
*
|
|
48
|
+
* 访问顺序按列表顺序,所有 URL 访问时参数一致
|
|
49
|
+
*
|
|
50
|
+
* @param url 原始 URL
|
|
51
|
+
* @return {?SpareURLs} 返回 null 或不反悔表示对该 URL 不启用备用 URL 功能
|
|
52
|
+
*/
|
|
53
|
+
getSpareUrls?: (url: string) => SpareURLs | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* 判断是否阻塞指定响应
|
|
56
|
+
* @return {boolean} 返回 true 表示阻塞,false 表示不阻塞
|
|
57
|
+
*/
|
|
58
|
+
blockRequest?: (url: URL) => boolean;
|
|
59
|
+
/** 插入到 sw 但不在 node 中执行的代码 */
|
|
60
|
+
afterJoin?: VoidFunction;
|
|
61
|
+
/** 插入到 sw 但不在 node 中执行的代码,框架主题禁止覆盖该项 */
|
|
62
|
+
afterTheme?: VoidFunction;
|
|
63
|
+
/** 获取要插入到 sw 中的变量和常量 */
|
|
64
|
+
ejectValues?: (framework: any, rules: SwppRules) => {
|
|
65
|
+
[propName: string]: EjectValue;
|
|
66
|
+
};
|
|
67
|
+
/** 允许插入到 sw 的值 */
|
|
68
|
+
external?: string[];
|
|
69
|
+
/**
|
|
70
|
+
* 向指定的 request 发起网络请求(GET)
|
|
71
|
+
*
|
|
72
|
+
* **注意:声明该项后 swpp 内置的“CDN 竞速”“备用 URL”都将失效**
|
|
73
|
+
*
|
|
74
|
+
* @param request 请求信息
|
|
75
|
+
* @param banCache 是否禁用缓存
|
|
76
|
+
* @param spare 备用 URL
|
|
77
|
+
*/
|
|
78
|
+
fetchFile?: (request: Request, banCache: boolean, spare?: SpareURLs) => Promise<Response>;
|
|
79
|
+
}
|
|
80
|
+
export interface CacheRules {
|
|
81
|
+
/** 符合该规则的缓存在进行全局清理时是否清除 */
|
|
82
|
+
clean: boolean;
|
|
83
|
+
/** 是否检查 URL 参数(问号及问号之后的内容) */
|
|
84
|
+
search?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* 规则匹配器
|
|
87
|
+
* @param url 链接的 URL 对象(对象包括 hash 和 search,但禁止使用 hash,search 为 false 或留空时禁止使用 search)
|
|
88
|
+
* @param $eject 用于访问通过 [ejectValues] 函数插入的变量,变量名必须为 `$eject`
|
|
89
|
+
*/
|
|
90
|
+
match: (url: URL, $eject?: any) => boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface SpareURLs {
|
|
93
|
+
/** 超时时间 */
|
|
94
|
+
timeout: number;
|
|
95
|
+
/** URL 列表 */
|
|
96
|
+
list: string[];
|
|
97
|
+
}
|
|
98
|
+
export interface EjectValue {
|
|
99
|
+
prefix: string;
|
|
100
|
+
value: string | number | boolean | bigint | object | string[] | number[] | boolean[] | bigint[] | object[];
|
|
101
|
+
}
|
package/types/utils.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare function error(type: string, message: string): void;
|
|
2
|
+
export declare function warn(type: string, message: string): void;
|
|
3
|
+
export interface EjectCache {
|
|
4
|
+
strValue: string;
|
|
5
|
+
nodeEject: any;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 获取 eject values
|
|
9
|
+
*
|
|
10
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
11
|
+
*
|
|
12
|
+
* @param framework 框架对象
|
|
13
|
+
*/
|
|
14
|
+
export declare function calcEjectValues(framework: any): void;
|
|
15
|
+
/**
|
|
16
|
+
* 读取最近的已计算的 eject 数据
|
|
17
|
+
*
|
|
18
|
+
* + **执行该函数前必须调用过 [loadRules]**
|
|
19
|
+
* + **执行该函数前必须调用过 [calcEjectValues]**
|
|
20
|
+
*/
|
|
21
|
+
export declare function readEjectData(): EjectCache;
|
|
22
|
+
/**
|
|
23
|
+
* 获取指定值的 js 源码表达形式
|
|
24
|
+
* @param obj 要转换的对象
|
|
25
|
+
* @param typeChecker 类型检查器,用于筛除不希望映射的类型
|
|
26
|
+
* @param whiteList 白名单,当 obj 为 Object 时将只转换在白名单中的值(不会传递)
|
|
27
|
+
* @param isTop 是否为顶层元素,为 true 且 obj 为 Object 时将去除最外层的大括号,改为 let(不会传递)
|
|
28
|
+
*/
|
|
29
|
+
export declare function getSource(obj: any, typeChecker?: ((name: string) => boolean) | undefined, whiteList?: string[] | undefined, isTop?: boolean): string;
|
|
30
|
+
/**
|
|
31
|
+
* 拉取文件
|
|
32
|
+
*
|
|
33
|
+
* **调用该函数前必须调用过 [loadRules]**
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchFile(link: string): Promise<import("node-fetch").Response>;
|
|
36
|
+
/**
|
|
37
|
+
* 替换编译期的 URL(CDN 竞速)
|
|
38
|
+
*
|
|
39
|
+
* **调用该函数前必须调用过 [loadRules]**
|
|
40
|
+
*/
|
|
41
|
+
export declare function replaceDevRequest(link: string): string[] | string;
|
package/gulpfile.js
DELETED