@m00rl0ck/simple-builder 1.0.5 → 1.0.7

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/dev-server.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import http from 'http';
2
2
  import fs from 'fs';
3
3
  import path from 'path';
4
- import { build } from './index.js';
4
+ import { build, watch } from './index.js';
5
5
 
6
6
  const PORT = 3000;
7
7
  const ROOT = process.cwd();
@@ -107,6 +107,20 @@ const server = http.createServer((req, res) => {
107
107
  serveFile(req, res);
108
108
  });
109
109
 
110
+
111
+ // ======================
112
+ // 🚀 Build
113
+ // ======================
114
+
115
+ export function build({ watch, isProd }) {
116
+ if (!!watch) {
117
+ return watch();
118
+ } else {
119
+ return build({ isProd });
120
+ }
121
+ }
122
+
123
+
110
124
  // ======================
111
125
  // ▶️ START
112
126
  // ======================
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import { minifyJS } from './minify.js';
3
+ import { minifyJS } from './minify-js.js';
4
4
  import { minifyCSS } from './minify-css.js';
5
5
  import { bundle } from './bundler.js';
6
6
 
@@ -96,7 +96,7 @@ function buildHTML(isProd) {
96
96
  // 👀 WATCH MODE
97
97
  // ======================
98
98
 
99
- function watch() {
99
+ export function watch() {
100
100
  console.log('👀 Watch mode ON...\n');
101
101
 
102
102
  fs.watch(SRC_DIR, { recursive: true }, (eventType, filename) => {
package/minify-js.js ADDED
@@ -0,0 +1,135 @@
1
+ export function minifyJS(code) {
2
+ let out = '';
3
+ let i = 0;
4
+
5
+ let inString = false;
6
+ let stringChar = '';
7
+ let inTemplate = false;
8
+ let inRegex = false;
9
+ let inSingleComment = false;
10
+ let inMultiComment = false;
11
+
12
+ while (i < code.length) {
13
+ const c = code[i];
14
+ const next = code[i + 1];
15
+
16
+ // ======================
17
+ // COMMENTS
18
+ // ======================
19
+
20
+ if (inSingleComment) {
21
+ if (c === '\n') {
22
+ inSingleComment = false;
23
+ }
24
+ i++;
25
+ continue;
26
+ }
27
+
28
+ if (inMultiComment) {
29
+ if (c === '*' && next === '/') {
30
+ inMultiComment = false;
31
+ i += 2;
32
+ } else {
33
+ i++;
34
+ }
35
+ continue;
36
+ }
37
+
38
+ if (!inString && !inTemplate && !inRegex) {
39
+ if (c === '/' && next === '/') {
40
+ inSingleComment = true;
41
+ i += 2;
42
+ continue;
43
+ }
44
+
45
+ if (c === '/' && next === '*') {
46
+ inMultiComment = true;
47
+ i += 2;
48
+ continue;
49
+ }
50
+ }
51
+
52
+ // ======================
53
+ // STRINGS
54
+ // ======================
55
+
56
+ if (!inTemplate && !inRegex && (c === '"' || c === "'")) {
57
+ if (inString && c === stringChar && code[i - 1] !== '\\') {
58
+ inString = false;
59
+ } else if (!inString) {
60
+ inString = true;
61
+ stringChar = c;
62
+ }
63
+ out += c;
64
+ i++;
65
+ continue;
66
+ }
67
+
68
+ // ======================
69
+ // TEMPLATE
70
+ // ======================
71
+
72
+ if (!inString && !inRegex && c === '`') {
73
+ inTemplate = !inTemplate;
74
+ out += c;
75
+ i++;
76
+ continue;
77
+ }
78
+
79
+ // ======================
80
+ // REGEX (simplified)
81
+ // ======================
82
+
83
+ if (!inString && !inTemplate && c === '/' && !inRegex) {
84
+ // naive check: після ( або = або : або , → regex
85
+ const prev = out.trim().slice(-1);
86
+ if (!prev || '({[=,:;!&|?'.includes(prev)) {
87
+ inRegex = true;
88
+ out += c;
89
+ i++;
90
+ continue;
91
+ }
92
+ }
93
+
94
+ if (inRegex) {
95
+ if (c === '/' && code[i - 1] !== '\\') {
96
+ inRegex = false;
97
+ }
98
+ out += c;
99
+ i++;
100
+ continue;
101
+ }
102
+
103
+ // ======================
104
+ // WHITESPACE
105
+ // ======================
106
+
107
+ if (!inString && !inTemplate && !inRegex) {
108
+ if (/\s/.test(c)) {
109
+ const prev = out[out.length - 1];
110
+ const nextChar = code[i + 1];
111
+
112
+ // не додаємо зайві пробіли
113
+ if (
114
+ prev &&
115
+ /[a-zA-Z0-9_$]/.test(prev) &&
116
+ /[a-zA-Z0-9_$]/.test(nextChar)
117
+ ) {
118
+ out += ' ';
119
+ }
120
+
121
+ i++;
122
+ continue;
123
+ }
124
+ }
125
+
126
+ // ======================
127
+ // DEFAULT
128
+ // ======================
129
+
130
+ out += c;
131
+ i++;
132
+ }
133
+
134
+ return out.trim();
135
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m00rl0ck/simple-builder",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "Zero-dependency JS and CSS bundler with dev server and minifier",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -24,7 +24,7 @@
24
24
  "bundler.js",
25
25
  "dev-server.js",
26
26
  "index.js",
27
- "minify.js",
27
+ "minify-js.js",
28
28
  "minify-css.js"
29
29
  ]
30
30
  }