bimba-cli 0.7.26 → 0.7.27
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/package.json +1 -1
- package/plugin.js +37 -7
package/package.json
CHANGED
package/plugin.js
CHANGED
|
@@ -22,7 +22,7 @@ export let stats = {
|
|
|
22
22
|
const _activeCompileErrors = new Map();
|
|
23
23
|
|
|
24
24
|
function normalizeCompilePath(filepath) {
|
|
25
|
-
let value = String(filepath || '');
|
|
25
|
+
let value = String(filepath || '').split(/[?#]/)[0];
|
|
26
26
|
if (dir.isAbsolute(value)) {
|
|
27
27
|
const rel = dir.relative(process.cwd(), value);
|
|
28
28
|
if (!rel.startsWith('..')) value = rel;
|
|
@@ -30,6 +30,21 @@ function normalizeCompilePath(filepath) {
|
|
|
30
30
|
return value.replaceAll('\\', '/');
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
function physicalCompileKey(filepath) {
|
|
34
|
+
try {
|
|
35
|
+
const stat = fs.statSync(filepath);
|
|
36
|
+
if (!stat.isFile()) return null;
|
|
37
|
+
const real = fs.realpathSync(filepath).replaceAll('\\', '/');
|
|
38
|
+
return `fs:${stat.dev}:${stat.ino}:${real}`;
|
|
39
|
+
} catch(_) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function compileErrorKey(filepath) {
|
|
45
|
+
return physicalCompileKey(filepath) || `path:${normalizeCompilePath(filepath)}`;
|
|
46
|
+
}
|
|
47
|
+
|
|
33
48
|
function compileErrorMessage(error) {
|
|
34
49
|
return error?.message || String(error);
|
|
35
50
|
}
|
|
@@ -53,15 +68,25 @@ function compileErrorSignature(errors) {
|
|
|
53
68
|
}
|
|
54
69
|
|
|
55
70
|
function shouldPrintCompileError(filepath, errors) {
|
|
56
|
-
const key =
|
|
71
|
+
const key = compileErrorKey(filepath);
|
|
57
72
|
const signature = compileErrorSignature(errors);
|
|
58
73
|
const previous = _activeCompileErrors.get(key);
|
|
59
|
-
_activeCompileErrors.set(key, { signature, time: Date.now() });
|
|
74
|
+
_activeCompileErrors.set(key, { file: normalizeCompilePath(filepath), signature, time: Date.now() });
|
|
60
75
|
return previous?.signature !== signature;
|
|
61
76
|
}
|
|
62
77
|
|
|
63
78
|
function clearCompileError(filepath) {
|
|
64
|
-
_activeCompileErrors.delete(
|
|
79
|
+
_activeCompileErrors.delete(compileErrorKey(filepath));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function printCompileError(error) {
|
|
83
|
+
try {
|
|
84
|
+
printerr(error);
|
|
85
|
+
} catch(_) {
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log(' ' + theme.error(' ' + compileErrorMessage(error) + ' '));
|
|
88
|
+
console.log('');
|
|
89
|
+
}
|
|
65
90
|
}
|
|
66
91
|
|
|
67
92
|
// Target platform for the Imba compiler: 'browser' or 'node'
|
|
@@ -98,11 +123,16 @@ export const imbaPlugin = {
|
|
|
98
123
|
// if no cached version read and compile it with the imba compiler
|
|
99
124
|
const file = await Bun.file(path).text();
|
|
100
125
|
const platform = target === 'node' || target === 'bun' ? 'node' : 'browser';
|
|
101
|
-
|
|
126
|
+
let out
|
|
127
|
+
try {
|
|
128
|
+
out = compiler.compile(file, {
|
|
102
129
|
sourcePath: path,
|
|
103
130
|
platform: platform,
|
|
104
131
|
comments: false
|
|
105
|
-
|
|
132
|
+
})
|
|
133
|
+
} catch (error) {
|
|
134
|
+
out = { js: '', errors: [error] }
|
|
135
|
+
}
|
|
106
136
|
|
|
107
137
|
// the file has been successfully compiled
|
|
108
138
|
if (!out.errors?.length) {
|
|
@@ -121,7 +151,7 @@ export const imbaPlugin = {
|
|
|
121
151
|
if (shouldPrint) {
|
|
122
152
|
stats.reported++;
|
|
123
153
|
for (let i = 0; i < out.errors.length; i++) {
|
|
124
|
-
if(out.errors[i])
|
|
154
|
+
if(out.errors[i]) printCompileError(out.errors[i]);
|
|
125
155
|
}
|
|
126
156
|
}
|
|
127
157
|
stats.errors++;
|