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,34 +1,34 @@
1
- const headFactory = require("./head.js");
2
-
3
- const head = headFactory();
4
-
5
- // 聊天
6
- module.exports = {
7
- test: /^\/chart\//,
8
- handler(request, response, wsHandler) {
9
- let url = decodeURIComponent(request.url);
10
-
11
- let requestData = "";
12
-
13
- request.on('data', (chunk) => {
14
- requestData += chunk;
15
- });
16
-
17
- request.on('end', () => {
18
-
19
- if (/sendMsg$/.test(url)) {
20
- wsHandler.notifyBrowser({
21
- payloadData: requestData
22
- });
23
- }
24
-
25
- head["Content-Type"] = "application/json;charset=utf-8";
26
- response.writeHead(200, head);
27
- response.write(JSON.stringify({
28
- code: "000000"
29
- }));
30
- response.end();
31
-
32
- });
33
- }
1
+ const headFactory = require("./head.js");
2
+
3
+ const head = headFactory();
4
+
5
+ // 聊天
6
+ module.exports = {
7
+ test: /^\/chart\//,
8
+ handler(request, response, wsHandler) {
9
+ let url = decodeURIComponent(request.url);
10
+
11
+ let requestData = "";
12
+
13
+ request.on('data', (chunk) => {
14
+ requestData += chunk;
15
+ });
16
+
17
+ request.on('end', () => {
18
+
19
+ if (/sendMsg$/.test(url)) {
20
+ wsHandler.notifyBrowser({
21
+ payloadData: requestData
22
+ });
23
+ }
24
+
25
+ head["Content-Type"] = "application/json;charset=utf-8";
26
+ response.writeHead(200, head);
27
+ response.write(JSON.stringify({
28
+ code: "000000"
29
+ }));
30
+ response.end();
31
+
32
+ });
33
+ }
34
34
  };
@@ -1,18 +1,18 @@
1
- const { readFileSync } = require("fs");
2
- const { join } = require("path");
3
- const { existsSync } = require("fs");
4
-
5
- module.exports = function (filpath) {
6
-
7
- let node_modulesPath = join(__dirname, "../../../node_modules");
8
-
9
- while (!existsSync(join(node_modulesPath, filpath)) && node_modulesPath != join(node_modulesPath, "../")) {
10
- node_modulesPath = join(node_modulesPath, "../");
11
- }
12
-
13
- let source = readFileSync(join(node_modulesPath, filpath), {
14
- encoding: "utf8"
15
- });
16
-
17
- return source;
1
+ const { readFileSync } = require("fs");
2
+ const { join } = require("path");
3
+ const { existsSync } = require("fs");
4
+
5
+ module.exports = function (filpath) {
6
+
7
+ let node_modulesPath = join(__dirname, "../../../node_modules");
8
+
9
+ while (!existsSync(join(node_modulesPath, filpath)) && node_modulesPath != join(node_modulesPath, "../")) {
10
+ node_modulesPath = join(node_modulesPath, "../");
11
+ }
12
+
13
+ let source = readFileSync(join(node_modulesPath, filpath), {
14
+ encoding: "utf8"
15
+ });
16
+
17
+ return source;
18
18
  };
@@ -1,9 +1,9 @@
1
- const pkg = require("../../../package.json");
2
-
3
- module.exports = function () {
4
- return {
5
- 'Access-Control-Allow-Origin': '*',
6
- 'Server': 'Powered by OIPage:website@' + pkg.version,
7
- 'Content-Type': 'text/plain;charset=utf-8'
8
- };
1
+ const pkg = require("../../../package.json");
2
+
3
+ module.exports = function () {
4
+ return {
5
+ 'Access-Control-Allow-Origin': '*',
6
+ 'Server': 'Powered by OIPage:website@' + pkg.version,
7
+ 'Content-Type': 'text/plain;charset=utf-8'
8
+ };
9
9
  };
@@ -1,9 +1,9 @@
1
- const OIPageZipaperIntercept = require("./oipage-zipaper-intercept.js");
2
- const OIPageVISLiteIntercept = require("./oipage-vislite-intercept.js");
3
- const ChartIntercept = require("./chart.js");
4
-
5
- module.exports = [
6
- OIPageZipaperIntercept,
7
- OIPageVISLiteIntercept,
8
- ChartIntercept
1
+ const OIPageZipaperIntercept = require("./oipage-zipaper-intercept.js");
2
+ const OIPageVISLiteIntercept = require("./oipage-vislite-intercept.js");
3
+ const ChartIntercept = require("./chart.js");
4
+
5
+ module.exports = [
6
+ OIPageZipaperIntercept,
7
+ OIPageVISLiteIntercept,
8
+ ChartIntercept
9
9
  ];
@@ -1,31 +1,31 @@
1
- const headFactory = require("./head.js");
2
- const getPackage = require("./getPackage.js");
3
-
4
- const head = headFactory();
5
-
6
- // VISLite库
7
- module.exports = {
8
- test: /^vislite$/,
9
- handler(request, response) {
10
- head["Content-Type"] = "application/javascript;charset=utf-8";
11
- head["ETag"] = "VISLite@v" + require("vislite/package.json").version;
12
-
13
- if (request.headers["if-none-match"] === head["ETag"]) {
14
- response.writeHead('304', head);
15
- response.end();
16
- console.log("<i> \x1b[1m\x1b[32m[OIPage-http-server] Cache File: VISLite\x1b[0m " + new Date().toLocaleString() + "\x1b[33m\x1b[1m 304\x1b[0m");;
17
- return;
18
- }
19
-
20
- response.writeHead(200, head);
21
-
22
- let source =getPackage("vislite/lib/index.umd.min.js");
23
-
24
- response.write(`let module = { exports: {} };
25
- let exports = module.exports;
26
- ${source}
27
- export let Canvas = module.exports.Canvas;
28
- `);
29
- response.end();
30
- }
1
+ const headFactory = require("./head.js");
2
+ const getPackage = require("./getPackage.js");
3
+
4
+ const head = headFactory();
5
+
6
+ // VISLite库
7
+ module.exports = {
8
+ test: /^vislite$/,
9
+ handler(request, response) {
10
+ head["Content-Type"] = "application/javascript;charset=utf-8";
11
+ head["ETag"] = "VISLite@v" + require("vislite/package.json").version;
12
+
13
+ if (request.headers["if-none-match"] === head["ETag"]) {
14
+ response.writeHead('304', head);
15
+ response.end();
16
+ console.log("<i> \x1b[1m\x1b[32m[OIPage-http-server] Cache File: VISLite\x1b[0m " + new Date().toLocaleString() + "\x1b[33m\x1b[1m 304\x1b[0m");;
17
+ return;
18
+ }
19
+
20
+ response.writeHead(200, head);
21
+
22
+ let source =getPackage("vislite/lib/index.umd.min.js");
23
+
24
+ response.write(`let module = { exports: {} };
25
+ let exports = module.exports;
26
+ ${source}
27
+ export let Canvas = module.exports.Canvas;
28
+ `);
29
+ response.end();
30
+ }
31
31
  };
@@ -1,37 +1,37 @@
1
- const headFactory = require("./head.js");
2
- const getPackage = require("./getPackage.js");
3
-
4
- const head = headFactory();
5
-
6
- // Zipaper框架
7
- module.exports = {
8
- test: /^zipaper$/,
9
- handler(request, response) {
10
- head["Content-Type"] = "application/javascript;charset=utf-8";
11
- head["ETag"] = "Zipaper@v" + require("zipaper/package.json").version;
12
-
13
- if (request.headers["if-none-match"] === head["ETag"]) {
14
- response.writeHead('304', head);
15
- response.end();
16
- console.log("<i> \x1b[1m\x1b[32m[OIPage-http-server] Cache File: Zipaper\x1b[0m " + new Date().toLocaleString() + "\x1b[33m\x1b[1m 304\x1b[0m");;
17
- return;
18
- }
19
-
20
- response.writeHead(200, head);
21
-
22
- let source = getPackage("zipaper/dist/Zipaper.min.js");
23
-
24
- response.write(`let module = { exports: {} };
25
- let exports = module.exports;
26
- ${source}
27
- export let createApp = exports.createApp;
28
- export let defineDirective = exports.defineDirective;
29
- export let defineElement = exports.defineElement;
30
- export let defineRouter = exports.defineRouter;
31
- export let ref = exports.ref;
32
- export let reactive = exports.reactive;
33
- export let watcher = exports.watcher;
34
- `);
35
- response.end();
36
- }
1
+ const headFactory = require("./head.js");
2
+ const getPackage = require("./getPackage.js");
3
+
4
+ const head = headFactory();
5
+
6
+ // Zipaper框架
7
+ module.exports = {
8
+ test: /^zipaper$/,
9
+ handler(request, response) {
10
+ head["Content-Type"] = "application/javascript;charset=utf-8";
11
+ head["ETag"] = "Zipaper@v" + require("zipaper/package.json").version;
12
+
13
+ if (request.headers["if-none-match"] === head["ETag"]) {
14
+ response.writeHead('304', head);
15
+ response.end();
16
+ console.log("<i> \x1b[1m\x1b[32m[OIPage-http-server] Cache File: Zipaper\x1b[0m " + new Date().toLocaleString() + "\x1b[33m\x1b[1m 304\x1b[0m");;
17
+ return;
18
+ }
19
+
20
+ response.writeHead(200, head);
21
+
22
+ let source = getPackage("zipaper/dist/Zipaper.min.js");
23
+
24
+ response.write(`let module = { exports: {} };
25
+ let exports = module.exports;
26
+ ${source}
27
+ export let createApp = exports.createApp;
28
+ export let defineDirective = exports.defineDirective;
29
+ export let defineElement = exports.defineElement;
30
+ export let defineRouter = exports.defineRouter;
31
+ export let ref = exports.ref;
32
+ export let reactive = exports.reactive;
33
+ export let watcher = exports.watcher;
34
+ `);
35
+ response.end();
36
+ }
37
37
  };
@@ -1,12 +1,12 @@
1
- const OIPageScssLoader = require("./oipage-scss-loader.js");
2
- const OIPageHtmlLoader = require("./oipage-html-loader.js");
3
-
4
- module.exports = {
5
- rules: [{
6
- test: /\.scss$/,
7
- use: OIPageScssLoader
8
- }, {
9
- test: /\.html$/,
10
- use: OIPageHtmlLoader
11
- }]
1
+ const OIPageScssLoader = require("./oipage-scss-loader.js");
2
+ const OIPageHtmlLoader = require("./oipage-html-loader.js");
3
+
4
+ module.exports = {
5
+ rules: [{
6
+ test: /\.scss$/,
7
+ use: OIPageScssLoader
8
+ }, {
9
+ test: /\.html$/,
10
+ use: OIPageHtmlLoader
11
+ }]
12
12
  };
@@ -1,8 +1,8 @@
1
- const { parseTemplate } = require("xhtml-to-json");
2
-
3
- module.exports = function (source) {
4
- if (this.entry) return source;
5
-
6
- this.setFileType("application/javascript");
7
- return `export default ${JSON.stringify(parseTemplate(source).toJson())}`;
1
+ const { parseTemplate } = require("xhtml-to-json");
2
+
3
+ module.exports = function (source) {
4
+ if (this.entry) return source;
5
+
6
+ this.setFileType("application/javascript");
7
+ return `export default ${JSON.stringify(parseTemplate(source).toJson())}`;
8
8
  };
@@ -1,150 +1,150 @@
1
- // 参考:https://github.com/zxl20070701/zxl20070701.github.io/blob/master/bin/loader/scss.js
2
- let toSelector = function (preSelectorArray, deep) {
3
- let selectors = preSelectorArray[0], i, j, k;
4
- for (i = 1; i < deep; i++) {
5
- let temp = [];
6
- for (j = 0; j < selectors.length; j++) {
7
- for (k = 0; k < preSelectorArray[i].length; k++) {
8
- temp.push(selectors[j] + preSelectorArray[i][k]);
9
- }
10
- }
11
- selectors = temp;
12
- }
13
- return "\n" + (selectors.join(',')) + "{\n";
14
- };
15
- let analyseBlock = function (source) {
16
- let i = -1, currentChar = null;
17
- let next = function () {
18
- currentChar = i++ < source.length - 1 ? source[i] : null;
19
- return currentChar;
20
- }
21
- let nextNValue = function (n) {
22
- return source.substring(i, n + i > source.length ? source.length : n + i);
23
- }
24
- let blocks = [];
25
- let currentBlock = "";
26
- next();
27
- while (true) {
28
- while (new RegExp("[\\x20\\t\\r\\n\\f]").test(currentChar)) {
29
- next();
30
- }
31
- if (currentChar == null) break;
32
- if (nextNValue(2) == '/*') {
33
-
34
- next();
35
- next();
36
- currentBlock = "/*";
37
-
38
- while (nextNValue(2) != '*/' && currentChar != null) {
39
- currentBlock += currentChar;
40
- next();
41
- }
42
- if (currentChar == null) {
43
- throw new Error('The comment is not closed.');
44
- }
45
- currentBlock += "*/";
46
- next();
47
- next();
48
- blocks.push({
49
- value: currentBlock,
50
- type: "comment-double"
51
- });
52
- }
53
- else if (nextNValue(2) == '//') {
54
- currentBlock = '';
55
-
56
- while (currentChar != '\n' && currentChar != null) {
57
- currentBlock += currentChar;
58
- next();
59
- }
60
-
61
- blocks.push({
62
- value: currentBlock,
63
- type: "comment-single"
64
- });
65
-
66
- }
67
- else if (currentChar == '}') {
68
-
69
- blocks.push({
70
- value: "}",
71
- type: "end"
72
- });
73
-
74
- next();
75
-
76
- }
77
- else {
78
-
79
- currentBlock = '';
80
- while (currentChar != '{' && currentChar != ';' && currentChar != null) {
81
- currentBlock += currentChar;
82
- next();
83
- }
84
- if (currentChar == null) {
85
- throw new Error('Statement or code block missing closure.');
86
- }
87
- blocks.push({
88
- value: currentBlock + currentChar,
89
- type: {
90
- '{': "begin",
91
- ';': 'statement'
92
- }[currentChar]
93
- });
94
- next();
95
- }
96
- }
97
- return blocks;
98
- };
99
- module.exports = function (source) {
100
- this.setFileType("application/javascript");
101
- let blocks = analyseBlock(source + "");
102
- let i, j, cssCode = "", preSelectorArray = [], deep = 0;
103
- for (i = 0; i < blocks.length; i++) {
104
- if (blocks[i].type == 'comment-double') {
105
- cssCode += blocks[i].value;
106
- }
107
- else if (blocks[i].type == 'comment-single') {
108
- cssCode += "\n/* " + blocks[i].value + " */\n";
109
- }
110
- else if (blocks[i].type == 'begin') {
111
- let preSplit = blocks[i].value.split(',');
112
- let preSelect = [];
113
- for (j = 0; j < preSplit.length; j++) {
114
- preSelect[j] = preSplit[j].replace(/\{$/, '').trim();
115
- if (/^&/.test(preSelect[j])) {
116
- preSelect[j] = preSelect[j].replace(/^&/, '');
117
- } else {
118
- preSelect[j] = " " + preSelect[j];
119
- }
120
- }
121
- preSelectorArray[deep] = preSelect;
122
- deep += 1;
123
- }
124
- else if (blocks[i].type == 'end') {
125
- deep -= 1;
126
- }
127
- else if (blocks[i].type == 'statement') {
128
- j = 1;
129
- let preType = blocks[i - j].type;
130
- while (['comment-double', 'comment-single'].indexOf(preType) > -1) {
131
- j += 1;
132
- preType = blocks[i - j].type;
133
- }
134
- if (['end', 'begin'].indexOf(preType) > -1) {
135
- cssCode += toSelector(preSelectorArray, deep);
136
- }
137
- cssCode += "\n" + blocks[i].value + "\n";
138
- j = 1;
139
- let nextType = blocks[i + j].type;
140
- while (['comment-double', 'comment-single'].indexOf(nextType) > -1) {
141
- j += 1;
142
- nextType = blocks[i + j].type;
143
- }
144
- if (['end', 'begin'].indexOf(nextType) > -1) {
145
- cssCode += "\n}\n";
146
- }
147
- }
148
- }
149
- return `export default ${JSON.stringify(cssCode)}`;
1
+ // 参考:https://github.com/zxl20070701/zxl20070701.github.io/blob/master/bin/loader/scss.js
2
+ let toSelector = function (preSelectorArray, deep) {
3
+ let selectors = preSelectorArray[0], i, j, k;
4
+ for (i = 1; i < deep; i++) {
5
+ let temp = [];
6
+ for (j = 0; j < selectors.length; j++) {
7
+ for (k = 0; k < preSelectorArray[i].length; k++) {
8
+ temp.push(selectors[j] + preSelectorArray[i][k]);
9
+ }
10
+ }
11
+ selectors = temp;
12
+ }
13
+ return "\n" + (selectors.join(',')) + "{\n";
14
+ };
15
+ let analyseBlock = function (source) {
16
+ let i = -1, currentChar = null;
17
+ let next = function () {
18
+ currentChar = i++ < source.length - 1 ? source[i] : null;
19
+ return currentChar;
20
+ }
21
+ let nextNValue = function (n) {
22
+ return source.substring(i, n + i > source.length ? source.length : n + i);
23
+ }
24
+ let blocks = [];
25
+ let currentBlock = "";
26
+ next();
27
+ while (true) {
28
+ while (new RegExp("[\\x20\\t\\r\\n\\f]").test(currentChar)) {
29
+ next();
30
+ }
31
+ if (currentChar == null) break;
32
+ if (nextNValue(2) == '/*') {
33
+
34
+ next();
35
+ next();
36
+ currentBlock = "/*";
37
+
38
+ while (nextNValue(2) != '*/' && currentChar != null) {
39
+ currentBlock += currentChar;
40
+ next();
41
+ }
42
+ if (currentChar == null) {
43
+ throw new Error('The comment is not closed.');
44
+ }
45
+ currentBlock += "*/";
46
+ next();
47
+ next();
48
+ blocks.push({
49
+ value: currentBlock,
50
+ type: "comment-double"
51
+ });
52
+ }
53
+ else if (nextNValue(2) == '//') {
54
+ currentBlock = '';
55
+
56
+ while (currentChar != '\n' && currentChar != null) {
57
+ currentBlock += currentChar;
58
+ next();
59
+ }
60
+
61
+ blocks.push({
62
+ value: currentBlock,
63
+ type: "comment-single"
64
+ });
65
+
66
+ }
67
+ else if (currentChar == '}') {
68
+
69
+ blocks.push({
70
+ value: "}",
71
+ type: "end"
72
+ });
73
+
74
+ next();
75
+
76
+ }
77
+ else {
78
+
79
+ currentBlock = '';
80
+ while (currentChar != '{' && currentChar != ';' && currentChar != null) {
81
+ currentBlock += currentChar;
82
+ next();
83
+ }
84
+ if (currentChar == null) {
85
+ throw new Error('Statement or code block missing closure.');
86
+ }
87
+ blocks.push({
88
+ value: currentBlock + currentChar,
89
+ type: {
90
+ '{': "begin",
91
+ ';': 'statement'
92
+ }[currentChar]
93
+ });
94
+ next();
95
+ }
96
+ }
97
+ return blocks;
98
+ };
99
+ module.exports = function (source) {
100
+ this.setFileType("application/javascript");
101
+ let blocks = analyseBlock(source + "");
102
+ let i, j, cssCode = "", preSelectorArray = [], deep = 0;
103
+ for (i = 0; i < blocks.length; i++) {
104
+ if (blocks[i].type == 'comment-double') {
105
+ cssCode += blocks[i].value;
106
+ }
107
+ else if (blocks[i].type == 'comment-single') {
108
+ cssCode += "\n/* " + blocks[i].value + " */\n";
109
+ }
110
+ else if (blocks[i].type == 'begin') {
111
+ let preSplit = blocks[i].value.split(',');
112
+ let preSelect = [];
113
+ for (j = 0; j < preSplit.length; j++) {
114
+ preSelect[j] = preSplit[j].replace(/\{$/, '').trim();
115
+ if (/^&/.test(preSelect[j])) {
116
+ preSelect[j] = preSelect[j].replace(/^&/, '');
117
+ } else {
118
+ preSelect[j] = " " + preSelect[j];
119
+ }
120
+ }
121
+ preSelectorArray[deep] = preSelect;
122
+ deep += 1;
123
+ }
124
+ else if (blocks[i].type == 'end') {
125
+ deep -= 1;
126
+ }
127
+ else if (blocks[i].type == 'statement') {
128
+ j = 1;
129
+ let preType = blocks[i - j].type;
130
+ while (['comment-double', 'comment-single'].indexOf(preType) > -1) {
131
+ j += 1;
132
+ preType = blocks[i - j].type;
133
+ }
134
+ if (['end', 'begin'].indexOf(preType) > -1) {
135
+ cssCode += toSelector(preSelectorArray, deep);
136
+ }
137
+ cssCode += "\n" + blocks[i].value + "\n";
138
+ j = 1;
139
+ let nextType = blocks[i + j].type;
140
+ while (['comment-double', 'comment-single'].indexOf(nextType) > -1) {
141
+ j += 1;
142
+ nextType = blocks[i + j].type;
143
+ }
144
+ if (['end', 'begin'].indexOf(nextType) > -1) {
145
+ cssCode += "\n}\n";
146
+ }
147
+ }
148
+ }
149
+ return `export default ${JSON.stringify(cssCode)}`;
150
150
  };
@@ -1,20 +1,20 @@
1
- interface animationResult {
2
-
3
- /**
4
- * 一个函数,调用该函数,可以提前结束动画
5
- */
6
- stop(): void
7
- }
8
-
9
- interface animationFun {
10
- (deep: number): void
11
- }
12
-
13
- /**
14
- * 轮询动画
15
- */
16
- export interface animationType {
17
- (doback: animationFun, duration?: number, callback?: animationFun): animationResult
18
- }
19
-
1
+ interface animationResult {
2
+
3
+ /**
4
+ * 一个函数,调用该函数,可以提前结束动画
5
+ */
6
+ stop(): void
7
+ }
8
+
9
+ interface animationFun {
10
+ (deep: number): void
11
+ }
12
+
13
+ /**
14
+ * 轮询动画
15
+ */
16
+ export interface animationType {
17
+ (doback: animationFun, duration?: number, callback?: animationFun): animationResult
18
+ }
19
+
20
20
  export let animation: animationType