oipage 1.7.0 → 1.8.0-alpha.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 (101) hide show
  1. package/.github/FUNDING.yml +11 -11
  2. package/AUTHORS.txt +6 -6
  3. package/CHANGELOG +9 -1
  4. package/LICENSE +20 -20
  5. package/README.md +1 -9
  6. package/bin/WebSocket/decodeWsFrame.js +43 -43
  7. package/bin/WebSocket/encodeWsFrame.js +28 -28
  8. package/bin/WebSocket/headersToJSON.js +26 -26
  9. package/bin/WebSocket/index.js +80 -80
  10. package/bin/data/mineTypes.json +104 -104
  11. package/bin/disk.js +42 -42
  12. package/bin/help.js +3 -0
  13. package/bin/intercept.js +15 -15
  14. package/bin/network.js +21 -21
  15. package/bin/run +5 -3
  16. package/bin/serve.d.ts +7 -0
  17. package/bin/serve.js +9 -1
  18. package/bin/template/404.html +186 -186
  19. package/bin/tools/deleteEmptyFolder.js +23 -23
  20. package/bin/tools/format.js +75 -75
  21. package/bin/tools/network.js +42 -42
  22. package/bin/tools/openBrowser.js +26 -0
  23. package/bin/tools/resolve404.js +83 -83
  24. package/bin/tools/resolveImport.js +88 -88
  25. package/bin/website-htmls/components/ui-select-file/index.html +7 -7
  26. package/bin/website-htmls/components/ui-select-file/index.js +37 -37
  27. package/bin/website-htmls/components/ui-select-file/index.scss +44 -44
  28. package/bin/website-htmls/dialogs/imageSize/index.html +54 -54
  29. package/bin/website-htmls/dialogs/imageSize/index.js +53 -53
  30. package/bin/website-htmls/dialogs/imageSize/index.scss +138 -138
  31. package/bin/website-htmls/dialogs/index.js +52 -52
  32. package/bin/website-htmls/images/addFile.svg +1 -1
  33. package/bin/website-htmls/images/img-to-pdf.svg +1 -1
  34. package/bin/website-htmls/index.html +17 -17
  35. package/bin/website-htmls/main.js +13 -13
  36. package/bin/website-htmls/pages/App/index.html +6 -6
  37. package/bin/website-htmls/pages/App/index.js +22 -22
  38. package/bin/website-htmls/pages/App/index.scss +43 -43
  39. package/bin/website-htmls/pages/appStore/index.html +5 -24
  40. package/bin/website-htmls/pages/appStore/index.js +19 -19
  41. package/bin/website-htmls/pages/appStore/index.scss +6 -4
  42. package/bin/website-htmls/pages/chart/index.html +8 -8
  43. package/bin/website-htmls/pages/chart/index.js +72 -72
  44. package/bin/website-htmls/pages/chart/index.scss +73 -72
  45. package/bin/website-htmls/pages/home/index.html +22 -0
  46. package/bin/website-htmls/pages/home/index.js +20 -0
  47. package/bin/website-htmls/pages/home/index.scss +29 -0
  48. package/bin/website-htmls/pages/image-editor/index.html +27 -27
  49. package/bin/website-htmls/pages/image-editor/index.js +106 -106
  50. package/bin/website-htmls/pages/image-editor/index.scss +47 -45
  51. package/bin/website-htmls/pages/img-to-pdf/index.html +3 -3
  52. package/bin/website-htmls/pages/img-to-pdf/index.js +44 -44
  53. package/bin/website-htmls/pages/img-to-pdf/index.scss +4 -4
  54. package/bin/website-htmls/router.config.js +26 -19
  55. package/bin/website-htmls/styles/normalize.css +94 -94
  56. package/bin/website-plugins/intercept/chart.js +33 -33
  57. package/bin/website-plugins/intercept/getPackage.js +17 -17
  58. package/bin/website-plugins/intercept/head.js +8 -8
  59. package/bin/website-plugins/intercept/index.js +8 -8
  60. package/bin/website-plugins/intercept/oipage-vislite-intercept.js +30 -30
  61. package/bin/website-plugins/intercept/oipage-zipaper-intercept.js +36 -36
  62. package/bin/website-plugins/loader/index.js +11 -11
  63. package/bin/website-plugins/loader/oipage-html-loader.js +7 -7
  64. package/bin/website-plugins/loader/oipage-scss-loader.js +149 -149
  65. package/nodejs/animation/index.d.ts +19 -19
  66. package/nodejs/animation/index.js +112 -112
  67. package/nodejs/cmdlog/index.d.ts +20 -20
  68. package/nodejs/cmdlog/index.js +75 -75
  69. package/nodejs/disk/index.d.ts +47 -47
  70. package/nodejs/disk/index.js +165 -165
  71. package/nodejs/format/index.d.ts +29 -29
  72. package/nodejs/format/index.js +107 -107
  73. package/nodejs/json/index.d.ts +9 -9
  74. package/nodejs/json/index.js +206 -206
  75. package/nodejs/logform/index.d.ts +18 -18
  76. package/nodejs/logform/index.js +94 -94
  77. package/nodejs/reader/index.d.ts +32 -32
  78. package/nodejs/reader/index.js +20 -20
  79. package/nodejs/throttle/index.d.ts +30 -30
  80. package/nodejs/throttle/index.js +50 -50
  81. package/package.json +1 -1
  82. package/web/XMLHttpRequest/index.d.ts +17 -17
  83. package/web/XMLHttpRequest/index.js +60 -60
  84. package/web/animation/index.d.ts +19 -19
  85. package/web/animation/index.js +112 -112
  86. package/web/format/index.d.ts +29 -29
  87. package/web/format/index.js +107 -107
  88. package/web/json/index.d.ts +9 -9
  89. package/web/json/index.js +206 -206
  90. package/web/onReady/index.d.ts +7 -7
  91. package/web/onReady/index.js +8 -8
  92. package/web/performChunk/index.d.ts +4 -4
  93. package/web/performChunk/index.js +19 -19
  94. package/web/reader/index.d.ts +32 -32
  95. package/web/reader/index.js +20 -20
  96. package/web/style/index.d.ts +21 -21
  97. package/web/style/index.js +19 -19
  98. package/web/throttle/index.d.ts +30 -30
  99. package/web/throttle/index.js +50 -50
  100. package/snipping/chart.png +0 -0
  101. package/snipping/image-editor.png +0 -0
@@ -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/help.js CHANGED
@@ -11,6 +11,9 @@ OIPage@v${packageValue.version}
11
11
  默认8080
12
12
  --baseUrl [文件夹地址]
13
13
  服务器根目录
14
+ --open
15
+ 自动打开浏览器
16
+ (也可以设置打开地址,比如 oipage-cli serve --open docs/index.html)
14
17
  --config|-c [配置文件地址]
15
18
  设置配置文件,相对地址是相对当前命令行
16
19
  --cache [true|false]
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
@@ -22,6 +22,7 @@ if (process.argv[2] === "serve") {
22
22
  devServer: {
23
23
  port: 8080,
24
24
  baseUrl: "./",
25
+ open: false,
25
26
  cache: true,
26
27
  proxy: {},
27
28
  intercept: []
@@ -50,9 +51,10 @@ if (process.argv[2] === "serve") {
50
51
  }
51
52
  }
52
53
 
53
- if ((argvObj["--port"] || [])[0]) config.devServer.port = (argvObj["--port"] || [])[0];
54
- if ((argvObj["--baseUrl"] || [])[0]) config.devServer.baseUrl = (argvObj["--baseUrl"] || [])[0];
55
- if ((argvObj["--cache"] || [])[0]) config.devServer.cache = (argvObj["--cache"] || [])[0] === "true";
54
+ if (argvObj["--port"]) config.devServer.port = argvObj["--port"][0];
55
+ if (argvObj["--baseUrl"]) config.devServer.baseUrl = argvObj["--baseUrl"][0];
56
+ if (argvObj["--cache"]) config.devServer.cache = argvObj["--cache"][0] === "true";
57
+ if (argvObj["--open"]) config.devServer.open = argvObj["--open"][0] || true;
56
58
 
57
59
  require("./serve.js")(config);
58
60
  }
package/bin/serve.d.ts CHANGED
@@ -1,6 +1,13 @@
1
1
 
2
2
  interface DevServerType {
3
3
 
4
+ /**
5
+ * 是否自动打开浏览器,默认false,true表示打开
6
+ *
7
+ * 也可以是一段地址,比如设置open=“docs/index.html”
8
+ */
9
+ open?: boolean | string
10
+
4
11
  /**
5
12
  * 服务器端口号
6
13
  */
package/bin/serve.js CHANGED
@@ -6,6 +6,7 @@ const network = require("./tools/network.js");
6
6
  const mineTypes = require("./data/mineTypes.json");
7
7
  const resolve404 = require("./tools/resolve404.js");
8
8
  const resolveImportFactory = require("./tools/resolveImport.js");
9
+ const openBrowser = require("./tools/openBrowser.js");
9
10
  const { doIntercept } = require("./intercept.js");
10
11
  const proxy = require("./proxy.js");
11
12
 
@@ -175,6 +176,13 @@ module.exports = function (config) {
175
176
  for (let ipv4Item of networkValue.IPv4) console.log('<i> \x1b[1m\x1b[32m[' + name + '] On Your Network (IPv4):\x1b[36m http://' + ipv4Item.address + ':' + port + '/\x1b[0m');
176
177
  for (let ipv6Item of networkValue.IPv6) console.log('<i> \x1b[1m\x1b[32m[' + name + '] On Your Network (IPv6): \x1b[36mhttp://[' + ipv6Item.address + ']:' + port + '/\x1b[0m');
177
178
  console.log('<i> \x1b[1m\x1b[32m[' + name + '] Content not from ' + (config.name || "OIPage") + ' is served from \x1b[36m"' + basePath + '" \x1b[0mdirectory');
179
+
180
+ if (typeof config.devServer.open === "string" || config.devServer.open) {
181
+ let url = 'http://localhost:' + port + "/" + (typeof config.devServer.open === "string" ? config.devServer.open : "");
182
+ openBrowser(url);
183
+ console.log('<i> \x1b[1m\x1b[32m[' + name + '] Open: \x1b[36m' + url + '\x1b[0m');
184
+ }
185
+
178
186
  if (!cache) console.log('<i> \x1b[1m\x1b[32m[' + name + '] Cancel 304 Cache!\x1b[0m');
179
- console.log('\n' + (config.name || "OIPage") + ' ' + version + ' compiled \x1b[1m\x1b[32msuccessfully\x1b[0m in ' + (new Date().valueOf() - startTime) + ' ms\n')
187
+ console.log('\n' + (config.name || "OIPage") + ' ' + version + ' compiled \x1b[1m\x1b[32msuccessfully\x1b[0m in ' + (new Date().valueOf() - startTime) + ' ms\n');
180
188
  };