Update
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
import { dirname, join } from "node:path";
|
||||
import type * as esbuild from "esbuild";
|
||||
import { CssSyntaxError } from "postcss";
|
||||
import { type Compile, type StyleMap, pkgName } from "./shared";
|
||||
import { type Compile, type StyleMap, type StyleMapEntry, pkgName } from "./shared";
|
||||
import type { BuildStyleFile } from "./index";
|
||||
|
||||
const PLUGIN_NAME = "tailwind";
|
||||
@ -43,7 +43,6 @@ export const esbuildPlugin = ({
|
||||
}
|
||||
|
||||
if (!styleMap.has(path)) return;
|
||||
|
||||
const styles = styleMap.get(path)!;
|
||||
|
||||
try {
|
||||
@ -51,47 +50,51 @@ export const esbuildPlugin = ({
|
||||
return { contents, loader };
|
||||
} catch (e) {
|
||||
if (e instanceof CssSyntaxError) {
|
||||
const lines = e.source!.split("\n");
|
||||
const cls = lines
|
||||
.at(e.line! - 2)!
|
||||
.slice(1, -1)
|
||||
.trim();
|
||||
|
||||
const entry = styles.find(s => s.key === cls)!;
|
||||
if (!entry) {
|
||||
console.error(e);
|
||||
throw new Error("Could not find entry for CSS");
|
||||
}
|
||||
|
||||
const { location: loc } = entry;
|
||||
const errLoc: Partial<esbuild.Location> = {
|
||||
file: loc.filename,
|
||||
line: loc.start.line,
|
||||
column: loc.start.column,
|
||||
length: loc.end.column - loc.start.column,
|
||||
lineText: loc.text,
|
||||
};
|
||||
|
||||
const doesNotExist = e.reason.match(/The `(.+)` class does not exist/)?.[1];
|
||||
if (doesNotExist) {
|
||||
const index = loc.text.indexOf(doesNotExist, loc.start.column);
|
||||
if (index !== -1) {
|
||||
errLoc.column = index;
|
||||
errLoc.length = doesNotExist.length;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
errors: [
|
||||
{
|
||||
text: e.reason,
|
||||
location: errLoc,
|
||||
},
|
||||
],
|
||||
};
|
||||
return buildError(e, styles);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
function buildError(e: CssSyntaxError, styles: StyleMapEntry[]) {
|
||||
const lines = e.source!.split("\n");
|
||||
const cls = lines
|
||||
.at(e.line! - 2)!
|
||||
.slice(1, -1)
|
||||
.trim();
|
||||
|
||||
const entry = styles.find(s => s.key === cls)!;
|
||||
if (!entry) {
|
||||
console.error(e);
|
||||
throw new Error("Could not find entry for CSS");
|
||||
}
|
||||
|
||||
const { location: loc } = entry;
|
||||
const errLoc: Partial<esbuild.Location> = {
|
||||
file: loc.filename,
|
||||
line: loc.start.line,
|
||||
column: loc.start.column,
|
||||
length: loc.end.column - loc.start.column,
|
||||
lineText: loc.text,
|
||||
};
|
||||
|
||||
const doesNotExist = e.reason.match(/The `(.+)` class does not exist/)?.[1];
|
||||
if (doesNotExist) {
|
||||
const index = loc.text.indexOf(doesNotExist, loc.start.column);
|
||||
if (index !== -1) {
|
||||
errLoc.column = index;
|
||||
errLoc.length = doesNotExist.length;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
errors: [
|
||||
{
|
||||
text: e.reason,
|
||||
location: errLoc,
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user