oipage 1.8.0-alpha.0 → 1.8.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.
Files changed (93) hide show
  1. package/.github/FUNDING.yml +11 -11
  2. package/AUTHORS.txt +6 -6
  3. package/CHANGELOG +3 -2
  4. package/LICENSE +20 -20
  5. package/bin/WebSocket/decodeWsFrame.js +43 -43
  6. package/bin/WebSocket/encodeWsFrame.js +28 -28
  7. package/bin/WebSocket/headersToJSON.js +26 -26
  8. package/bin/WebSocket/index.js +80 -80
  9. package/bin/data/mineTypes.json +104 -104
  10. package/bin/disk.js +42 -42
  11. package/bin/intercept.js +15 -15
  12. package/bin/network.js +21 -21
  13. package/bin/run +4 -1
  14. package/bin/serve.js +4 -4
  15. package/bin/template/404.html +186 -186
  16. package/bin/tools/deleteEmptyFolder.js +23 -23
  17. package/bin/tools/format.js +75 -75
  18. package/bin/tools/network.js +42 -42
  19. package/bin/tools/resolve404.js +83 -83
  20. package/bin/tools/resolveImport.js +88 -88
  21. package/bin/website-htmls/components/ui-select-file/index.html +7 -7
  22. package/bin/website-htmls/components/ui-select-file/index.js +37 -37
  23. package/bin/website-htmls/components/ui-select-file/index.scss +44 -44
  24. package/bin/website-htmls/dialogs/imageSize/index.html +54 -54
  25. package/bin/website-htmls/dialogs/imageSize/index.js +53 -53
  26. package/bin/website-htmls/dialogs/imageSize/index.scss +138 -138
  27. package/bin/website-htmls/dialogs/index.js +52 -52
  28. package/bin/website-htmls/images/addFile.svg +1 -1
  29. package/bin/website-htmls/images/img-to-pdf.svg +1 -1
  30. package/bin/website-htmls/index.html +17 -17
  31. package/bin/website-htmls/main.js +13 -13
  32. package/bin/website-htmls/pages/App/index.html +6 -6
  33. package/bin/website-htmls/pages/App/index.js +22 -22
  34. package/bin/website-htmls/pages/App/index.scss +43 -43
  35. package/bin/website-htmls/pages/appStore/index.html +5 -5
  36. package/bin/website-htmls/pages/appStore/index.js +19 -19
  37. package/bin/website-htmls/pages/chart/index.html +8 -8
  38. package/bin/website-htmls/pages/chart/index.js +72 -72
  39. package/bin/website-htmls/pages/chart/index.scss +73 -73
  40. package/bin/website-htmls/pages/home/index.html +21 -21
  41. package/bin/website-htmls/pages/home/index.js +19 -19
  42. package/bin/website-htmls/pages/image-editor/index.html +27 -27
  43. package/bin/website-htmls/pages/image-editor/index.js +106 -106
  44. package/bin/website-htmls/pages/image-editor/index.scss +47 -47
  45. package/bin/website-htmls/pages/img-to-pdf/index.html +3 -3
  46. package/bin/website-htmls/pages/img-to-pdf/index.js +44 -44
  47. package/bin/website-htmls/pages/img-to-pdf/index.scss +4 -4
  48. package/bin/website-htmls/router.config.js +26 -26
  49. package/bin/website-htmls/styles/normalize.css +94 -94
  50. package/bin/website-plugins/intercept/chart.js +33 -33
  51. package/bin/website-plugins/intercept/getPackage.js +17 -17
  52. package/bin/website-plugins/intercept/head.js +8 -8
  53. package/bin/website-plugins/intercept/index.js +8 -8
  54. package/bin/website-plugins/intercept/oipage-vislite-intercept.js +30 -30
  55. package/bin/website-plugins/intercept/oipage-zipaper-intercept.js +36 -36
  56. package/bin/website-plugins/loader/index.js +11 -11
  57. package/bin/website-plugins/loader/oipage-html-loader.js +7 -7
  58. package/bin/website-plugins/loader/oipage-scss-loader.js +149 -149
  59. package/nodejs/animation/index.d.ts +19 -19
  60. package/nodejs/animation/index.js +120 -112
  61. package/nodejs/cmdlog/index.d.ts +20 -20
  62. package/nodejs/cmdlog/index.js +75 -75
  63. package/nodejs/disk/index.d.ts +47 -47
  64. package/nodejs/disk/index.js +166 -165
  65. package/nodejs/format/index.d.ts +29 -29
  66. package/nodejs/format/index.js +107 -107
  67. package/nodejs/json/index.d.ts +9 -9
  68. package/nodejs/json/index.js +206 -206
  69. package/nodejs/logform/index.d.ts +18 -18
  70. package/nodejs/logform/index.js +94 -94
  71. package/nodejs/reader/index.d.ts +32 -32
  72. package/nodejs/reader/index.js +20 -20
  73. package/nodejs/throttle/index.d.ts +30 -30
  74. package/nodejs/throttle/index.js +50 -50
  75. package/package.json +3 -3
  76. package/web/XMLHttpRequest/index.d.ts +17 -17
  77. package/web/XMLHttpRequest/index.js +60 -60
  78. package/web/animation/index.d.ts +19 -19
  79. package/web/animation/index.js +120 -112
  80. package/web/format/index.d.ts +29 -29
  81. package/web/format/index.js +107 -107
  82. package/web/json/index.d.ts +9 -9
  83. package/web/json/index.js +206 -206
  84. package/web/onReady/index.d.ts +7 -7
  85. package/web/onReady/index.js +8 -8
  86. package/web/performChunk/index.d.ts +4 -4
  87. package/web/performChunk/index.js +19 -19
  88. package/web/reader/index.d.ts +32 -32
  89. package/web/reader/index.js +20 -20
  90. package/web/style/index.d.ts +21 -21
  91. package/web/style/index.js +19 -19
  92. package/web/throttle/index.d.ts +30 -30
  93. package/web/throttle/index.js +50 -50
@@ -1,105 +1,105 @@
1
- {
2
- "html": "text/html",
3
- "htm": "text/html",
4
- "shtml": "text/html",
5
- "css": "text/css",
6
- "xml": "text/xml",
7
- "gif": "image/gif",
8
- "jpeg": "image/jpeg",
9
- "jpg": "image/jpeg",
10
- "js": "application/javascript",
11
- "atom": "application/atom+xml",
12
- "rss": "application/rss+xml",
13
- "mml": "text/mathml",
14
- "txt": "text/plain",
15
- "jad": "text/vnd.sun.j2me.app-descriptor",
16
- "wml": "text/vnd.wap.wml",
17
- "htc": "text/x-component",
18
- "png": "image/png",
19
- "tif": "image/tiff",
20
- "tiff": "image/tiff",
21
- "wbmp": "image/vnd.wap.wbmp",
22
- "ico": "image/x-icon",
23
- "jng": "image/x-jng",
24
- "bmp": "image/x-ms-bmp",
25
- "svg": "image/svg+xml",
26
- "svgz": "image/svg+xml",
27
- "webp": "image/webp",
28
- "woff": "application/font-woff",
29
- "jar": "application/java-archive",
30
- "war": "application/java-archive",
31
- "ear": "application/java-archive",
32
- "json": "application/json",
33
- "hqx": "application/mac-binhex40",
34
- "doc": "application/msword",
35
- "pdf": "application/pdf",
36
- "ps": "application/postscript",
37
- "eps": "application/postscript",
38
- "ai": "application/postscript",
39
- "rtf": "application/rtf",
40
- "m3u8": "application/vnd.apple.mpegurl",
41
- "xls": "application/vnd.ms-excel",
42
- "eot": "application/vnd.ms-fontobject",
43
- "ppt": "application/vnd.ms-powerpoint",
44
- "wmlc": "application/vnd.wap.wmlc",
45
- "kml": "application/vnd.google-earth.kml+xml",
46
- "kmz": "application/vnd.google-earth.kmz",
47
- "7z": "application/x-7z-compressed",
48
- "cco": "application/x-cocoa",
49
- "jardiff": "application/x-java-archive-diff",
50
- "jnlp": "application/x-java-jnlp-file",
51
- "run": "application/x-makeself",
52
- "pl": "application/x-perl",
53
- "pm": "application/x-perl",
54
- "prc": "application/x-pilot",
55
- "pdb": "application/x-pilot",
56
- "rar": "application/x-rar-compressed",
57
- "rpm": "application/x-redhat-package-manager",
58
- "sea": "application/x-sea",
59
- "swf": "application/x-shockwave-flash",
60
- "sit": "application/x-stuffit",
61
- "tcl": "application/x-tcl",
62
- "tk": "application/x-tcl",
63
- "der": "application/x-x509-ca-cert",
64
- "pem": "application/x-x509-ca-cert",
65
- "crt": "application/x-x509-ca-cert",
66
- "xpi": "application/x-xpinstall",
67
- "xhtml": "application/xhtml+xml",
68
- "xspf": "application/xspf+xml",
69
- "zip": "application/zip",
70
- "bin": "application/octet-stream",
71
- "exe": "application/octet-stream",
72
- "dll": "application/octet-stream",
73
- "deb": "application/octet-stream",
74
- "dmg": "application/octet-stream",
75
- "iso": "application/octet-stream",
76
- "img": "application/octet-stream",
77
- "msi": "application/octet-stream",
78
- "msp": "application/octet-stream",
79
- "msm": "application/octet-stream",
80
- "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
81
- "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
82
- "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
83
- "mid": "audio/midi",
84
- "midi": "audio/midi",
85
- "kar": "audio/midi",
86
- "mp3": "audio/mpeg",
87
- "ogg": "audio/ogg",
88
- "m4a": "audio/x-m4a",
89
- "ra": "audio/x-realaudio",
90
- "3gpp": "video/3gpp",
91
- "3gp": "video/3gpp",
92
- "ts": "video/mp2t",
93
- "mp4": "video/mp4",
94
- "mpeg": "video/mpeg",
95
- "mpg": "video/mpeg",
96
- "mov": "video/quicktime",
97
- "webm": "video/webm",
98
- "flv": "video/x-flv",
99
- "m4v": "video/x-m4v",
100
- "mng": "video/x-mng",
101
- "asx": "video/x-ms-asf",
102
- "asf": "video/x-ms-asf",
103
- "wmv": "video/x-ms-wmv",
104
- "avi": "video/x-msvideo"
1
+ {
2
+ "html": "text/html",
3
+ "htm": "text/html",
4
+ "shtml": "text/html",
5
+ "css": "text/css",
6
+ "xml": "text/xml",
7
+ "gif": "image/gif",
8
+ "jpeg": "image/jpeg",
9
+ "jpg": "image/jpeg",
10
+ "js": "application/javascript",
11
+ "atom": "application/atom+xml",
12
+ "rss": "application/rss+xml",
13
+ "mml": "text/mathml",
14
+ "txt": "text/plain",
15
+ "jad": "text/vnd.sun.j2me.app-descriptor",
16
+ "wml": "text/vnd.wap.wml",
17
+ "htc": "text/x-component",
18
+ "png": "image/png",
19
+ "tif": "image/tiff",
20
+ "tiff": "image/tiff",
21
+ "wbmp": "image/vnd.wap.wbmp",
22
+ "ico": "image/x-icon",
23
+ "jng": "image/x-jng",
24
+ "bmp": "image/x-ms-bmp",
25
+ "svg": "image/svg+xml",
26
+ "svgz": "image/svg+xml",
27
+ "webp": "image/webp",
28
+ "woff": "application/font-woff",
29
+ "jar": "application/java-archive",
30
+ "war": "application/java-archive",
31
+ "ear": "application/java-archive",
32
+ "json": "application/json",
33
+ "hqx": "application/mac-binhex40",
34
+ "doc": "application/msword",
35
+ "pdf": "application/pdf",
36
+ "ps": "application/postscript",
37
+ "eps": "application/postscript",
38
+ "ai": "application/postscript",
39
+ "rtf": "application/rtf",
40
+ "m3u8": "application/vnd.apple.mpegurl",
41
+ "xls": "application/vnd.ms-excel",
42
+ "eot": "application/vnd.ms-fontobject",
43
+ "ppt": "application/vnd.ms-powerpoint",
44
+ "wmlc": "application/vnd.wap.wmlc",
45
+ "kml": "application/vnd.google-earth.kml+xml",
46
+ "kmz": "application/vnd.google-earth.kmz",
47
+ "7z": "application/x-7z-compressed",
48
+ "cco": "application/x-cocoa",
49
+ "jardiff": "application/x-java-archive-diff",
50
+ "jnlp": "application/x-java-jnlp-file",
51
+ "run": "application/x-makeself",
52
+ "pl": "application/x-perl",
53
+ "pm": "application/x-perl",
54
+ "prc": "application/x-pilot",
55
+ "pdb": "application/x-pilot",
56
+ "rar": "application/x-rar-compressed",
57
+ "rpm": "application/x-redhat-package-manager",
58
+ "sea": "application/x-sea",
59
+ "swf": "application/x-shockwave-flash",
60
+ "sit": "application/x-stuffit",
61
+ "tcl": "application/x-tcl",
62
+ "tk": "application/x-tcl",
63
+ "der": "application/x-x509-ca-cert",
64
+ "pem": "application/x-x509-ca-cert",
65
+ "crt": "application/x-x509-ca-cert",
66
+ "xpi": "application/x-xpinstall",
67
+ "xhtml": "application/xhtml+xml",
68
+ "xspf": "application/xspf+xml",
69
+ "zip": "application/zip",
70
+ "bin": "application/octet-stream",
71
+ "exe": "application/octet-stream",
72
+ "dll": "application/octet-stream",
73
+ "deb": "application/octet-stream",
74
+ "dmg": "application/octet-stream",
75
+ "iso": "application/octet-stream",
76
+ "img": "application/octet-stream",
77
+ "msi": "application/octet-stream",
78
+ "msp": "application/octet-stream",
79
+ "msm": "application/octet-stream",
80
+ "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
81
+ "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
82
+ "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
83
+ "mid": "audio/midi",
84
+ "midi": "audio/midi",
85
+ "kar": "audio/midi",
86
+ "mp3": "audio/mpeg",
87
+ "ogg": "audio/ogg",
88
+ "m4a": "audio/x-m4a",
89
+ "ra": "audio/x-realaudio",
90
+ "3gpp": "video/3gpp",
91
+ "3gp": "video/3gpp",
92
+ "ts": "video/mp2t",
93
+ "mp4": "video/mp4",
94
+ "mpeg": "video/mpeg",
95
+ "mpg": "video/mpeg",
96
+ "mov": "video/quicktime",
97
+ "webm": "video/webm",
98
+ "flv": "video/x-flv",
99
+ "m4v": "video/x-m4v",
100
+ "mng": "video/x-mng",
101
+ "asx": "video/x-ms-asf",
102
+ "asf": "video/x-ms-asf",
103
+ "wmv": "video/x-ms-wmv",
104
+ "avi": "video/x-msvideo"
105
105
  }
package/bin/disk.js CHANGED
@@ -1,43 +1,43 @@
1
- const { join } = require("path");
2
- const { deleteDisk, copyDisk, moveDisk, linkDisk } = require("../nodejs/disk");
3
- const deleteEmptyFolder = require("./tools/deleteEmptyFolder");
4
-
5
- module.exports = function (config) {
6
- let isForce = false;
7
-
8
- // 判断是否开启强制执行
9
- for (let i = 0; i < config.value.length; i++) {
10
- if (config.value[i].name === "--force") isForce = true;
11
- }
12
-
13
- // 执行一个个任务
14
- for (let i = 0; i < config.value.length; i++) {
15
-
16
- // 删除文件或文件夹
17
- if (config.value[i].name === "--delete") {
18
- for (let j = 0; j < config.value[i].value.length; j++) {
19
- deleteDisk(config.value[i].value[j]);
20
- }
21
- }
22
-
23
- // 移动文件或文件夹
24
- else if (config.value[i].name === "--move") {
25
- moveDisk(config.value[i].value[0], config.value[i].value[1], isForce);
26
- }
27
-
28
- // 复制文件或文件夹
29
- else if (config.value[i].name === "--copy") {
30
- copyDisk(config.value[i].value[0], config.value[i].value[1], isForce);
31
- }
32
-
33
- // 创建磁盘链接
34
- else if (config.value[i].name === "--link") {
35
- linkDisk(config.value[i].value[0], config.value[i].value[1], isForce);
36
- }
37
-
38
- // 删除空文件夹
39
- else if (config.value[i].name === "--delempty") {
40
- deleteEmptyFolder(join(process.cwd(), config.value[i].value[0]));
41
- }
42
- }
1
+ const { join } = require("path");
2
+ const { deleteDisk, copyDisk, moveDisk, linkDisk } = require("../nodejs/disk");
3
+ const deleteEmptyFolder = require("./tools/deleteEmptyFolder");
4
+
5
+ module.exports = function (config) {
6
+ let isForce = false;
7
+
8
+ // 判断是否开启强制执行
9
+ for (let i = 0; i < config.value.length; i++) {
10
+ if (config.value[i].name === "--force") isForce = true;
11
+ }
12
+
13
+ // 执行一个个任务
14
+ for (let i = 0; i < config.value.length; i++) {
15
+
16
+ // 删除文件或文件夹
17
+ if (config.value[i].name === "--delete") {
18
+ for (let j = 0; j < config.value[i].value.length; j++) {
19
+ deleteDisk(config.value[i].value[j]);
20
+ }
21
+ }
22
+
23
+ // 移动文件或文件夹
24
+ else if (config.value[i].name === "--move") {
25
+ moveDisk(config.value[i].value[0], config.value[i].value[1], isForce);
26
+ }
27
+
28
+ // 复制文件或文件夹
29
+ else if (config.value[i].name === "--copy") {
30
+ copyDisk(config.value[i].value[0], config.value[i].value[1], isForce);
31
+ }
32
+
33
+ // 创建磁盘链接
34
+ else if (config.value[i].name === "--link") {
35
+ linkDisk(config.value[i].value[0], config.value[i].value[1], isForce);
36
+ }
37
+
38
+ // 删除空文件夹
39
+ else if (config.value[i].name === "--delempty") {
40
+ deleteEmptyFolder(join(process.cwd(), config.value[i].value[0]));
41
+ }
42
+ }
43
43
  };
package/bin/intercept.js CHANGED
@@ -1,16 +1,16 @@
1
- exports.doIntercept = function (url, intercept, request, response, wsHandler) {
2
- for (let item of intercept) {
3
- if (item.test.test(url)) {
4
- item.handler(request, response, wsHandler);
5
- return true;
6
- }
7
- }
8
- }
9
-
10
- exports.testIntercept = function (url, intercept) {
11
- for (let item of intercept) {
12
- if (item.test.test(url)) {
13
- return true;
14
- }
15
- }
1
+ exports.doIntercept = function (url, intercept, request, response, wsHandler) {
2
+ for (let item of intercept) {
3
+ if (item.test.test(url)) {
4
+ item.handler(request, response, wsHandler);
5
+ return true;
6
+ }
7
+ }
8
+ }
9
+
10
+ exports.testIntercept = function (url, intercept) {
11
+ for (let item of intercept) {
12
+ if (item.test.test(url)) {
13
+ return true;
14
+ }
15
+ }
16
16
  }
package/bin/network.js CHANGED
@@ -1,22 +1,22 @@
1
- const networkInfo = require("./tools/network");
2
-
3
- module.exports = function (config) {
4
- let info = networkInfo(true);
5
-
6
- // 执行一个个任务
7
- for (let i = 0; i < config.value.length; i++) {
8
-
9
- // 打印信息
10
- if (config.value[i].name === "--log") {
11
-
12
- for (let iptype of ["IPv4", "IPv6"]) {
13
- console.log("\n" + iptype);
14
- for (let i = 0; i < info[iptype].length; i++) {
15
- console.log(" \x1b[1m\x1b[32m" + info[iptype][i].address + "\x1b[0m " + info[iptype][i].mac);
16
- }
17
- }
18
-
19
- console.log("");
20
- }
21
- }
1
+ const networkInfo = require("./tools/network");
2
+
3
+ module.exports = function (config) {
4
+ let info = networkInfo(true);
5
+
6
+ // 执行一个个任务
7
+ for (let i = 0; i < config.value.length; i++) {
8
+
9
+ // 打印信息
10
+ if (config.value[i].name === "--log") {
11
+
12
+ for (let iptype of ["IPv4", "IPv6"]) {
13
+ console.log("\n" + iptype);
14
+ for (let i = 0; i < info[iptype].length; i++) {
15
+ console.log(" \x1b[1m\x1b[32m" + info[iptype][i].address + "\x1b[0m " + info[iptype][i].mac);
16
+ }
17
+ }
18
+
19
+ console.log("");
20
+ }
21
+ }
22
22
  };
package/bin/run CHANGED
@@ -25,7 +25,8 @@ if (process.argv[2] === "serve") {
25
25
  open: false,
26
26
  cache: true,
27
27
  proxy: {},
28
- intercept: []
28
+ intercept: [],
29
+ 404: null
29
30
  },
30
31
  module: {
31
32
  rules: []
@@ -56,6 +57,8 @@ if (process.argv[2] === "serve") {
56
57
  if (argvObj["--cache"]) config.devServer.cache = argvObj["--cache"][0] === "true";
57
58
  if (argvObj["--open"]) config.devServer.open = argvObj["--open"][0] || true;
58
59
 
60
+ console.log(config)
61
+
59
62
  require("./serve.js")(config);
60
63
  }
61
64
 
package/bin/serve.js CHANGED
@@ -4,12 +4,11 @@ const { createServer } = require('http');
4
4
  const packageValue = require("../package.json");
5
5
  const network = require("./tools/network.js");
6
6
  const mineTypes = require("./data/mineTypes.json");
7
- const resolve404 = require("./tools/resolve404.js");
8
7
  const resolveImportFactory = require("./tools/resolveImport.js");
9
8
  const openBrowser = require("./tools/openBrowser.js");
10
9
  const { doIntercept } = require("./intercept.js");
11
10
  const proxy = require("./proxy.js");
12
-
11
+ const resolve404_default = require("./tools/resolve404.js");
13
12
  const websiteIntercept = require("./website-plugins/intercept/index.js");
14
13
  const websiteLoader = require("./website-plugins/loader/index.js");
15
14
 
@@ -19,6 +18,7 @@ const WebSocketClass = require("./WebSocket/index.js");
19
18
  module.exports = function (config) {
20
19
  let startTime = new Date().valueOf();
21
20
 
21
+ const resolve404 = config.devServer["404"] || resolve404_default;
22
22
  const cache = "cache" in config.devServer ? config.devServer.cache : true;
23
23
  const port = +config.devServer.port; // 端口号
24
24
  const basePath = (/^\./.test(config.devServer.baseUrl)) ? join(process.cwd(), config.devServer.baseUrl) : config.devServer.baseUrl; // 服务器根路径
@@ -98,7 +98,7 @@ module.exports = function (config) {
98
98
  if (lastModified === ifModifiedSince) {
99
99
  response.writeHead('304', responseHeader);
100
100
  response.end();
101
- console.log("<i> \x1b[1m\x1b[32m[" + name + "] Cache File: " + url + "\x1b[0m " + new Date().toLocaleString() + "\x1b[33m\x1b[1m 304" + (isXHR ? " 请求" : "") + "\x1b[0m");
101
+ console.log("<i> \x1b[1m\x1b[32m[" + name + "] Cache File: " + url + "\x1b[0m " + new Date().toLocaleString() + "\x1b[33m\x1b[1m 304" + (isXHR ? " "+request.method : "") + "\x1b[0m");
102
102
  return;
103
103
  }
104
104
  }
@@ -149,7 +149,7 @@ module.exports = function (config) {
149
149
  createReadStream(filePath).pipe(response);
150
150
  }
151
151
 
152
- console.log("<i> \x1b[1m\x1b[32m[" + name + "] " + sendType + " File: " + url + '\x1b[0m ' + new Date().toLocaleString() + "\x1b[33m\x1b[1m" + (isXHR ? " 请求" : "") + "\x1b[0m");
152
+ console.log("<i> \x1b[1m\x1b[32m[" + name + "] " + sendType + " File: " + url + '\x1b[0m ' + new Date().toLocaleString() + "\x1b[33m\x1b[1m" + (isXHR ? " "+request.method : "") + "\x1b[0m");
153
153
  }
154
154
 
155
155
  // 否则就是404