oipage 0.2.0 → 0.3.1-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 (45) hide show
  1. package/.github/FUNDING.yml +11 -11
  2. package/AUTHORS.txt +6 -6
  3. package/CHANGELOG +62 -43
  4. package/LICENSE +20 -20
  5. package/README.md +122 -122
  6. package/bin/options.js +73 -73
  7. package/bin/run +208 -208
  8. package/browserjs/getStyle/index.d.ts +10 -10
  9. package/browserjs/getStyle/index.js +12 -12
  10. package/browserjs/index.d.ts +12 -12
  11. package/browserjs/index.js +8 -8
  12. package/browserjs/onReady/index.d.ts +7 -7
  13. package/browserjs/onReady/index.js +7 -7
  14. package/browserjs/setStyle/index.d.ts +9 -9
  15. package/browserjs/setStyle/index.js +4 -4
  16. package/corejs/animation/index.d.ts +11 -11
  17. package/corejs/animation/index.js +101 -101
  18. package/corejs/index.d.ts +9 -9
  19. package/corejs/index.js +6 -6
  20. package/corejs/throttle/index.d.ts +30 -30
  21. package/corejs/throttle/index.js +49 -49
  22. package/nodejs/core/file.js +162 -127
  23. package/nodejs/core/image.js +4 -4
  24. package/nodejs/core/log.js +89 -89
  25. package/nodejs/core/network.js +39 -39
  26. package/nodejs/core/options.js +48 -48
  27. package/nodejs/core/remote.js +60 -60
  28. package/nodejs/core/responseFileList.js +27 -27
  29. package/nodejs/core/server.js +198 -175
  30. package/nodejs/data/404.js +51 -51
  31. package/nodejs/data/mime.types.js +111 -111
  32. package/nodejs/form/common.js +2 -2
  33. package/nodejs/form/index.js +79 -79
  34. package/nodejs/form/select.js +9 -9
  35. package/nodejs/index.js +57 -57
  36. package/nodejs/loader/simpleScss.js +247 -247
  37. package/nodejs/loader/xhtml.js +520 -520
  38. package/nodejs/reader/plain.js +20 -20
  39. package/package.json +33 -33
  40. package/stylecss/index.css +3 -3
  41. package/stylecss/normalize.css +93 -93
  42. package/stylecss/rasterize.css +317 -317
  43. package/stylecss/skeleton.css +16 -16
  44. package/types/get-options.d.ts +5 -5
  45. package/types/index.d.ts +186 -186
@@ -1,60 +1,60 @@
1
- const https = require('https');
2
- const http = require('http');
3
-
4
- exports.get = function (url, options = {}) {
5
- return new Promise((resolve, reject) => {
6
-
7
- let handler = /^https/.test(url) ? https : http;
8
-
9
- handler.get(url, res => {
10
- res.on('data', (data) => {
11
- if (options.json) {
12
- resolve(JSON.parse(data.toString('utf8')));
13
- } else {
14
- resolve(data);
15
- }
16
- });
17
- }).on('error', (e) => {
18
- reject(e);
19
- });
20
- });
21
- };
22
-
23
- exports.post = function (url, options = {}) {
24
- return new Promise((resolve, reject) => {
25
-
26
- let handler = /^https/.test(url) ? https : http;
27
-
28
- let execArray = /https*:\/\/([^\/]+)(.+)?/.exec(url);
29
- let hostport = execArray[1].split(":");
30
-
31
- const req = handler.request({
32
- hostname: hostport[0],
33
- port: hostport[1] || 80,
34
- path: execArray[2] || "/",
35
- method: "POST",
36
- headers: options.header || {}
37
- }, (res) => {
38
- res.setEncoding('utf8');
39
-
40
- let data = "";
41
- res.on('data', (chunk) => {
42
- data += chunk;
43
- });
44
- res.on('end', () => {
45
- if (options.json) {
46
- resolve(JSON.parse(data.toString('utf8')));
47
- } else {
48
- resolve(data);
49
- }
50
- });
51
- });
52
-
53
- req.write(options.params || "{}");
54
-
55
- req.on('error', (e) => {
56
- reject(e);
57
- });
58
- req.end();
59
- });
60
- };
1
+ const https = require('https');
2
+ const http = require('http');
3
+
4
+ exports.get = function (url, options = {}) {
5
+ return new Promise((resolve, reject) => {
6
+
7
+ let handler = /^https/.test(url) ? https : http;
8
+
9
+ handler.get(url, res => {
10
+ res.on('data', (data) => {
11
+ if (options.json) {
12
+ resolve(JSON.parse(data.toString('utf8')));
13
+ } else {
14
+ resolve(data);
15
+ }
16
+ });
17
+ }).on('error', (e) => {
18
+ reject(e);
19
+ });
20
+ });
21
+ };
22
+
23
+ exports.post = function (url, options = {}) {
24
+ return new Promise((resolve, reject) => {
25
+
26
+ let handler = /^https/.test(url) ? https : http;
27
+
28
+ let execArray = /https*:\/\/([^\/]+)(.+)?/.exec(url);
29
+ let hostport = execArray[1].split(":");
30
+
31
+ const req = handler.request({
32
+ hostname: hostport[0],
33
+ port: hostport[1] || 80,
34
+ path: execArray[2] || "/",
35
+ method: "POST",
36
+ headers: options.header || {}
37
+ }, (res) => {
38
+ res.setEncoding('utf8');
39
+
40
+ let data = "";
41
+ res.on('data', (chunk) => {
42
+ data += chunk;
43
+ });
44
+ res.on('end', () => {
45
+ if (options.json) {
46
+ resolve(JSON.parse(data.toString('utf8')));
47
+ } else {
48
+ resolve(data);
49
+ }
50
+ });
51
+ });
52
+
53
+ req.write(options.params || "{}");
54
+
55
+ req.on('error', (e) => {
56
+ reject(e);
57
+ });
58
+ req.end();
59
+ });
60
+ };
@@ -1,28 +1,28 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
-
4
- const Template_404 = require('../data/404');
5
-
6
- // 读取当前路径下的文件,方便服务器404的时候导航
7
- module.exports = function (fullUrl) {
8
-
9
- let files, content = fullUrl;
10
- try {
11
- files = fs.readdirSync(fullUrl);
12
- } catch (e) {
13
- try {
14
- content = path.resolve(fullUrl, '../');
15
- files = fs.readdirSync(content);
16
- } catch (e) {
17
- files = [];
18
- }
19
- }
20
-
21
- let template = "<a href='../'>..</a>";
22
- for (let i in files) {
23
- let isDirectory = fs.lstatSync(path.join(content, files[i])).isDirectory();
24
- template += "<a class='" + (isDirectory ? "folder" : "file") + "' href='./" + files[i] + (isDirectory ? "/" : "") + "'>" + files[i] + "</a>";
25
- }
26
-
27
- return Template_404(template);
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const Template_404 = require('../data/404');
5
+
6
+ // 读取当前路径下的文件,方便服务器404的时候导航
7
+ module.exports = function (fullUrl) {
8
+
9
+ let files, content = fullUrl;
10
+ try {
11
+ files = fs.readdirSync(fullUrl);
12
+ } catch (e) {
13
+ try {
14
+ content = path.resolve(fullUrl, '../');
15
+ files = fs.readdirSync(content);
16
+ } catch (e) {
17
+ files = [];
18
+ }
19
+ }
20
+
21
+ let template = "<a href='../'>..</a>";
22
+ for (let i in files) {
23
+ let isDirectory = fs.lstatSync(path.join(content, files[i])).isDirectory();
24
+ template += "<a class='" + (isDirectory ? "folder" : "file") + "' href='./" + files[i] + (isDirectory ? "/" : "") + "'>" + files[i] + "</a>";
25
+ }
26
+
27
+ return Template_404(template);
28
28
  };
@@ -1,176 +1,199 @@
1
- const http = require('http');
2
- const fs = require('fs');
3
-
4
- const mineTypes = require('../data/mime.types.js');
5
- const { log, warn, error } = require('./log.js');
6
- const responseFileList = require('./responseFileList.js');
7
- const path = require('path');
8
-
9
- const jsonfile = JSON.parse(fs.readFileSync(path.join(__dirname, '../../package.json')));
10
-
11
- module.exports = function (config = {}) {
12
-
13
- let port = config.port || 20000; // 端口号
14
- let handler = typeof config.handler == 'function' ? config.handler : function () { return false; };
15
- let suffixs = Array.isArray(config.suffix) ? config.suffix : [".html", ".htm", ".js", ".json", ".css"];
16
-
17
- let proxy = [];
18
- if (config.proxy) {
19
- for (let item of config.proxy) {
20
- let target = /(https*):\/\/([^/:]+):*(\d+)*(.*)/.exec(item.target) || [];
21
- proxy.push({
22
- test: item.test,
23
- target: {
24
- protocol: target[1], // 使用的协议
25
- hostname: target[2], // 请求发送至的服务器的域名或 IP 地址
26
- port: target[3] || 80, // 端口号
27
- path: target[4] || "", // 路径前缀
28
- }
29
- });
30
- }
31
- }
32
-
33
- let basePath = path.join(process.cwd(), config.basePath || "./"); // 服务器根路径
34
-
35
- let index = 0;
36
- let Server = http.createServer(function (request, response) {
37
- try {
38
- let requestData = "";
39
-
40
- request.on('data', (chunk) => {
41
- requestData += chunk;
42
- });
43
-
44
- request.on('end', () => {
45
- let url = decodeURIComponent(request.url);
46
-
47
- url = url.split("?")[0];
48
-
49
- // 请求的文件路径
50
- let filePath = path.join(basePath, url == "/" ? "index.html" : url.replace(/^\//, ""));
51
-
52
- log("[" + index++ + "]" + url);
53
-
54
- let getFileInfo = function (filePath) {
55
- let dotName = /\./.test(filePath) ? filePath.match(/\.([^.]+)$/)[1] : "";
56
- let type = mineTypes[dotName];
57
- if (fs.existsSync(filePath) && !fs.lstatSync(filePath).isDirectory()) {
58
- return {
59
- type,
60
- path: filePath
61
- };
62
- } else {
63
- for (let suffix of suffixs) {
64
- if (fs.existsSync(filePath + suffix) && !fs.lstatSync(filePath + suffix).isDirectory()) {
65
- type = mineTypes[suffix.replace(/^\./, "")];
66
- return {
67
- type,
68
- path: filePath + suffix
69
- };
70
- }
71
- }
72
- }
73
- };
74
-
75
- // 自定义拦截
76
- if (handler.call({
77
- data: requestData,
78
- base: basePath,
79
- getFileInfo,
80
- filePath
81
- }, request, response)) return;
82
-
83
- // proxy拦截
84
- for (let item of proxy) {
85
- if (item.test.test(url)) {
86
- let _path = item.target.path + (url.replace(item.test, ""));
87
-
88
- warn(" ↳ [" + request.method + "] " + item.target.protocol + "://" + item.target.hostname + ":" + item.target.port + _path);
89
-
90
- // https://www.nodeapp.cn/http.html#http_http_request_options_callback
91
- const req = http.request({
92
- hostname: item.target.hostname,
93
- port: item.target.port,
94
- path: _path,
95
- method: request.method,
96
- headers: request.headers
97
- }, (res) => {
98
- res.setEncoding('utf8');
99
-
100
- let responseData = "";
101
- res.on('data', (chunk) => {
102
- responseData += chunk;
103
- });
104
- res.on('end', () => {
105
- let responseHeaders = res.headers;
106
- responseHeaders['proxy-server'] = "Powered by OIPage@" + jsonfile.version;
107
- responseHeaders['Access-Control-Allow-Origin'] = '*';
108
- response.writeHead(res.statusCode, responseHeaders);
109
- response.write(responseData);
110
- response.end();
111
- });
112
- });
113
-
114
- req.on('error', (e) => {
115
- error(` 转发的时候遇到问题: ${e.message}`);
116
- response.writeHead('500', {
117
- 'Content-type': "text/plain;charset=utf-8",
118
- 'Access-Control-Allow-Origin': '*',
119
- "proxy-server": "Powered by OIPage@" + jsonfile.version
120
- });
121
- response.write(e + "");
122
- response.end();
123
- });
124
-
125
- req.write(requestData);
126
- req.end();
127
-
128
- return;
129
- }
130
- }
131
-
132
- let is404 = true;
133
- let doResponse = function (type, filePath) {
134
- response.writeHead(200, {
135
- 'Content-type': (type || "text/plain") + ";charset=utf-8",
136
- 'Access-Control-Allow-Origin': '*',
137
- 'Server': "Powered by OIPage@" + jsonfile.version
138
- });
139
- response.write(fs.readFileSync(filePath));
140
- is404 = false;
141
- };
142
-
143
- let fileInfo = getFileInfo(filePath);
144
- if (fileInfo) { // 如果文件存在
145
- doResponse(fileInfo.type, fileInfo.path);
146
- }
147
-
148
- if (is404) {
149
- response.writeHead(404, {
150
- 'Content-type': "text/html;charset=utf-8",
151
- 'Access-Control-Allow-Origin': '*',
152
- 'Server': "Powered by OIPage@" + jsonfile.version
153
- });
154
- response.write(responseFileList(filePath));
155
- }
156
-
157
- response.end();
158
- });
159
- } catch (e) {
160
- error(e);
161
-
162
- response.writeHead(500, {
163
- 'Content-type': "text/plain;charset=utf-8",
164
- 'Access-Control-Allow-Origin': '*',
165
- 'Server': "Powered by OIPage@" + jsonfile.version
166
- });
167
- response.write(e + "");
168
-
169
- response.end();
170
- }
171
-
172
- });
173
-
174
- Server.listen(port);
175
- log('server running on port:' + port);
1
+ const http = require('http');
2
+ const fs = require('fs');
3
+
4
+ const mineTypes = require('../data/mime.types.js');
5
+ const { log, warn, error } = require('./log.js');
6
+ const responseFileList = require('./responseFileList.js');
7
+ const path = require('path');
8
+ const network = require('./network.js');
9
+
10
+ const jsonfile = JSON.parse(fs.readFileSync(path.join(__dirname, '../../package.json')));
11
+
12
+ module.exports = function (config = {}) {
13
+
14
+ let port = config.port || 20000; // 端口号
15
+ let handler = typeof config.handler == 'function' ? config.handler : function () { return false; };
16
+ let suffixs = Array.isArray(config.suffix) ? config.suffix : [".html", ".htm", ".js", ".json", ".css"];
17
+
18
+ let proxy = [];
19
+ if (config.proxy) {
20
+ for (let item of config.proxy) {
21
+ let target = /(https*):\/\/([^/:]+):*(\d+)*(.*)/.exec(item.target) || [];
22
+ proxy.push({
23
+ test: item.test,
24
+ target: {
25
+ protocol: target[1], // 使用的协议
26
+ hostname: target[2], // 请求发送至的服务器的域名或 IP 地址
27
+ port: target[3] || 80, // 端口号
28
+ path: target[4] || "", // 路径前缀
29
+ }
30
+ });
31
+ }
32
+ }
33
+
34
+ let basePath = path.join(process.cwd(), config.basePath || "./"); // 服务器根路径
35
+
36
+ let index = 0;
37
+ let Server = http.createServer(function (request, response) {
38
+ try {
39
+ let requestData = "";
40
+
41
+ request.on('data', (chunk) => {
42
+ requestData += chunk;
43
+ });
44
+
45
+ request.on('end', () => {
46
+ let url = decodeURIComponent(request.url);
47
+
48
+ url = url.split("?")[0];
49
+
50
+ // 请求的文件路径
51
+ let filePath = path.join(basePath, url == "/" ? "index.html" : url.replace(/^\//, ""));
52
+
53
+ log("[" + index++ + "]" + url);
54
+
55
+ let getFileInfo = function (filePath) {
56
+ let dotName = /\./.test(filePath) ? filePath.match(/\.([^.]+)$/)[1] : "";
57
+ let type = mineTypes[dotName];
58
+ if (fs.existsSync(filePath) && !fs.lstatSync(filePath).isDirectory()) {
59
+ return {
60
+ type,
61
+ path: filePath
62
+ };
63
+ } else {
64
+ for (let suffix of suffixs) {
65
+ if (fs.existsSync(filePath + suffix) && !fs.lstatSync(filePath + suffix).isDirectory()) {
66
+ type = mineTypes[suffix.replace(/^\./, "")];
67
+ return {
68
+ type,
69
+ path: filePath + suffix
70
+ };
71
+ }
72
+ }
73
+ }
74
+ };
75
+
76
+ // 自定义拦截
77
+ if (handler.call({
78
+ data: requestData,
79
+ base: basePath,
80
+ getFileInfo,
81
+ filePath
82
+ }, request, response)) return;
83
+
84
+ // proxy拦截
85
+ for (let item of proxy) {
86
+ if (item.test.test(url)) {
87
+ let _path = item.target.path + (url.replace(item.test, ""));
88
+
89
+ warn(" ↳ [" + request.method + "] " + item.target.protocol + "://" + item.target.hostname + ":" + item.target.port + _path);
90
+
91
+ // https://www.nodeapp.cn/http.html#http_http_request_options_callback
92
+ const req = http.request({
93
+ hostname: item.target.hostname,
94
+ port: item.target.port,
95
+ path: _path,
96
+ method: request.method,
97
+ headers: request.headers
98
+ }, (res) => {
99
+ res.setEncoding('utf8');
100
+
101
+ let responseData = "";
102
+ res.on('data', (chunk) => {
103
+ responseData += chunk;
104
+ });
105
+ res.on('end', () => {
106
+ let responseHeaders = res.headers;
107
+ responseHeaders['proxy-server'] = "Powered by OIPage@" + jsonfile.version;
108
+ responseHeaders['Access-Control-Allow-Origin'] = '*';
109
+ response.writeHead(res.statusCode, responseHeaders);
110
+ response.write(responseData);
111
+ response.end();
112
+ });
113
+ });
114
+
115
+ req.on('error', (e) => {
116
+ error(` 转发的时候遇到问题: ${e.message}`);
117
+ response.writeHead('500', {
118
+ 'Content-type': "text/plain;charset=utf-8",
119
+ 'Access-Control-Allow-Origin': '*',
120
+ "proxy-server": "Powered by OIPage@" + jsonfile.version
121
+ });
122
+ response.write(e + "");
123
+ response.end();
124
+ });
125
+
126
+ req.write(requestData);
127
+ req.end();
128
+
129
+ return;
130
+ }
131
+ }
132
+
133
+ let is404 = true, needEnd = true;
134
+ let doResponse = function (type, filePath) {
135
+
136
+ let fileInfo = fs.statSync(filePath);
137
+
138
+ response.writeHead(200, {
139
+ 'Content-type': (type || "text/plain") + ";charset=utf-8",
140
+ 'Access-Control-Allow-Origin': '*',
141
+ 'Content-Length': fileInfo.size,
142
+ 'Server': "Powered by OIPage@" + jsonfile.version
143
+ });
144
+ if (fileInfo.size < 10 * 1024 * 1024) {
145
+ response.write(fs.readFileSync(filePath));
146
+ } else {
147
+ fs.createReadStream(filePath).pipe(response);
148
+ needEnd = false;
149
+ }
150
+ is404 = false;
151
+ };
152
+
153
+ let fileInfo = getFileInfo(filePath);
154
+ if (fileInfo) { // 如果文件存在
155
+ doResponse(fileInfo.type, fileInfo.path);
156
+ }
157
+
158
+ if (is404) {
159
+ response.writeHead(404, {
160
+ 'Content-type': "text/html;charset=utf-8",
161
+ 'Access-Control-Allow-Origin': '*',
162
+ 'Server': "Powered by OIPage@" + jsonfile.version
163
+ });
164
+ response.write(responseFileList(filePath));
165
+ }
166
+
167
+ if (needEnd) response.end();
168
+ });
169
+ } catch (e) {
170
+ error(e);
171
+
172
+ response.writeHead(500, {
173
+ 'Content-type': "text/plain;charset=utf-8",
174
+ 'Access-Control-Allow-Origin': '*',
175
+ 'Server': "Powered by OIPage@" + jsonfile.version
176
+ });
177
+ response.write(e + "");
178
+
179
+ response.end();
180
+ }
181
+
182
+ });
183
+
184
+ Server.listen(port);
185
+
186
+ // 打印启动成功信息
187
+
188
+ log('\n<i> [OIPage-server] Project is running at:');
189
+ log('<i> [OIPage-server] Loopback: http://localhost:' + port + '/');
190
+
191
+ let networkInfo = network();
192
+
193
+ // 打印IPv4地址
194
+ for (let ipv4 of networkInfo.IPv4) {
195
+ log('<i> [OIPage-server] On Your Network (IPv4): http://' + ipv4.address + ':' + port + '/');
196
+ }
197
+
198
+ log('\nOIPage Server compiled successfully\n');
176
199
  };