Skip to content

Commit a899336

Browse files
committed
refactor: replace textExtensions with customLoaders and enhance test cases
1 parent 4f4b532 commit a899336

3 files changed

Lines changed: 51 additions & 4 deletions

File tree

.changeset/upgrade.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
esbuild-raw-plugin: minor
3+
---
4+
5+
### ✨ Enhancements
6+
7+
- Replaced `textExtensions` with `customLoaders` for fine-grained extension-to-loader mapping.
8+
- Introduced `name` option for overriding the plugin name (useful for debugging or deduplication).
9+
- Added support for multiple query-based loaders: `?text`, `?base64`, `?dataurl`, `?file`, `?binary`.
10+
- Improved fallback logic for resolving files: now tries extensions or `index.[ext]` for folders.
11+
- Regex-based `onLoad` filtering boosts performance (leveraging Go-native ESBuild internals).
12+
13+
### 🛠 Internal Refactors
14+
15+
- Code refactored for better readability and maintainability.
16+
- Error messages are now clearer and more actionable.
17+
- Switched to consistent plugin naming (`"esbuild-raw-plugin"` instead of randomized suffix).

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ node_modules
33
.turbo
44
*.log
55
.next
6-
dist
6+
dist*
77
dist-ssr
88
*.local
99
.env

lib/__tests__/index.test.ts

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ describe("Raw plugin", () => {
4646
test("textExtensions", async ({ expect }) => {
4747
await esbuild.build({
4848
...buildOptions,
49-
plugins: [raw({ textExtensions: [".md"] })],
49+
plugins: [raw({ customLoaders: { md: "text" } })],
5050
entryPoints: [path.resolve(__dirname, "test3.ts")],
5151
});
5252

@@ -56,15 +56,45 @@ describe("Raw plugin", () => {
5656
expect(fileContent).toBe(generatedCodeContent);
5757
});
5858

59+
test("uses custom loader if provided", async ({ expect }) => {
60+
await esbuild.build({
61+
...buildOptions,
62+
entryPoints: [path.resolve(__dirname, "test-loader.ts")],
63+
plugins: [raw({ loader: "base64" })],
64+
outdir: "__tests__/dist2",
65+
});
66+
const fileContent = fs.readFileSync(path.resolve(__dirname, "../src/index.ts"));
67+
// @ts-ignore
68+
const generatedCodeContent = (await import("./dist2/test-loader.js")).getText();
69+
expect(generatedCodeContent).toBe(fileContent.toString("base64"));
70+
});
71+
72+
test("uses customLoaders mapping for extension", async ({ expect }) => {
73+
await esbuild.build({
74+
...buildOptions,
75+
plugins: [raw({ customLoaders: { md: "text" } })],
76+
entryPoints: [path.resolve(__dirname, "test3.ts")],
77+
outdir: "__tests__/dist3",
78+
});
79+
const fileContent = fs.readFileSync(path.resolve(__dirname, "test.md"), "utf-8");
80+
// @ts-ignore
81+
const generatedCodeContent = (await import("./dist3/test3.js")).getText();
82+
expect(generatedCodeContent).toBe(fileContent);
83+
});
84+
85+
test("uses custom plugin name if provided", ({ expect }) => {
86+
const plugin = raw({ name: "custom-plugin-name" });
87+
expect(plugin.name).toBe("custom-plugin-name");
88+
});
5989
test("custom loader", async ({ expect }) => {
6090
await esbuild.build({
6191
...buildOptions,
6292
entryPoints: [path.resolve(__dirname, "test-loader.ts")],
6393
plugins: [raw({ loader: "base64" })],
6494
});
65-
const fileContent = fs.readFileSync(path.resolve(__dirname, "../src/index.ts"), "utf-8");
95+
const fileContent = fs.readFileSync(path.resolve(__dirname, "../src/index.ts"));
6696
// @ts-ignore
6797
const generatedCodeContent = (await import("./dist/test-loader.js")).getText();
68-
expect(fileContent).toBe(atob(generatedCodeContent));
98+
expect(generatedCodeContent).toBe(fileContent.toString("base64"));
6999
});
70100
});

0 commit comments

Comments
 (0)