@workflow/builders 4.0.1-beta.21 → 4.0.1-beta.23
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/dist/apply-swc-transform.d.ts.map +1 -1
- package/dist/apply-swc-transform.js +4 -1
- package/dist/apply-swc-transform.js.map +1 -1
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +64 -22
- package/dist/base-builder.js.map +1 -1
- package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
- package/dist/discover-entries-esbuild-plugin.js +5 -2
- package/dist/discover-entries-esbuild-plugin.js.map +1 -1
- package/dist/node-module-esbuild-plugin.d.ts +37 -0
- package/dist/node-module-esbuild-plugin.d.ts.map +1 -1
- package/dist/node-module-esbuild-plugin.js +284 -17
- package/dist/node-module-esbuild-plugin.js.map +1 -1
- package/dist/node-module-esbuild-plugin.test.js +347 -146
- package/dist/node-module-esbuild-plugin.test.js.map +1 -1
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +12 -1
- package/dist/swc-esbuild-plugin.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,49 +1,60 @@
|
|
|
1
|
+
import { mkdtempSync, readFileSync, realpathSync, rmSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join, relative, resolve } from 'node:path';
|
|
4
|
+
// Resolve symlinks in tmpdir to avoid macOS /var -> /private/var issues
|
|
5
|
+
const realTmpdir = realpathSync(tmpdir());
|
|
1
6
|
import * as esbuild from 'esbuild';
|
|
2
7
|
import { describe, expect, it } from 'vitest';
|
|
3
|
-
import { createNodeModuleErrorPlugin } from './node-module-esbuild-plugin.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
await expect(esbuild.build({
|
|
13
|
-
stdin: {
|
|
14
|
-
contents: testCode,
|
|
15
|
-
resolveDir: process.cwd(),
|
|
16
|
-
sourcefile: 'test-workflow.ts',
|
|
17
|
-
loader: 'ts',
|
|
18
|
-
},
|
|
8
|
+
import { createNodeModuleErrorPlugin, escapeRegExp, getImportedIdentifier, getPackageName, getViolationLocation, } from './node-module-esbuild-plugin.js';
|
|
9
|
+
async function buildWorkflowWithViolation(source, overrides = {}) {
|
|
10
|
+
const tempDir = mkdtempSync(join(realTmpdir, 'node-module-plugin-test-'));
|
|
11
|
+
const entryFile = join(tempDir, 'workflow.ts');
|
|
12
|
+
writeFileSync(entryFile, source);
|
|
13
|
+
const relativeEntry = relative(process.cwd(), entryFile);
|
|
14
|
+
try {
|
|
15
|
+
await esbuild.build({
|
|
16
|
+
entryPoints: [entryFile],
|
|
19
17
|
bundle: true,
|
|
20
18
|
write: false,
|
|
21
19
|
platform: 'neutral',
|
|
22
|
-
plugins: [createNodeModuleErrorPlugin()],
|
|
23
20
|
logLevel: 'silent',
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
plugins: [createNodeModuleErrorPlugin(), ...(overrides.plugins ?? [])],
|
|
22
|
+
...overrides,
|
|
23
|
+
});
|
|
24
|
+
throw new Error('Expected build to fail');
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (error && typeof error === 'object' && 'errors' in error) {
|
|
28
|
+
return {
|
|
29
|
+
failure: error,
|
|
30
|
+
relativeEntry,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
describe('workflow-node-module-error plugin', () => {
|
|
40
|
+
it('should error on fs import', async () => {
|
|
27
41
|
const testCode = `
|
|
28
|
-
import {
|
|
42
|
+
import { readFile } from "fs";
|
|
29
43
|
export function workflow() {
|
|
30
|
-
return
|
|
44
|
+
return readFile("test.txt");
|
|
31
45
|
}
|
|
32
46
|
`;
|
|
33
|
-
await
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
plugins: [createNodeModuleErrorPlugin()],
|
|
45
|
-
logLevel: 'silent',
|
|
46
|
-
})).rejects.toThrow(/Cannot use Node\.js module "path"/);
|
|
47
|
+
const { failure, relativeEntry } = await buildWorkflowWithViolation(testCode);
|
|
48
|
+
expect(failure.errors).toHaveLength(1);
|
|
49
|
+
const violation = failure.errors[0];
|
|
50
|
+
expect(violation.text).toContain('You are attempting to use "fs" which is a Node.js module');
|
|
51
|
+
expect(violation.location).toMatchObject({
|
|
52
|
+
file: relativeEntry,
|
|
53
|
+
suggestion: 'Move this function into a step function.',
|
|
54
|
+
});
|
|
55
|
+
expect(violation.location?.line).toBeGreaterThan(0);
|
|
56
|
+
expect(violation.location?.column).toBeGreaterThanOrEqual(0);
|
|
57
|
+
expect(violation.location?.lineText).toContain('readFile');
|
|
47
58
|
});
|
|
48
59
|
it('should error on node: prefixed imports', async () => {
|
|
49
60
|
const testCode = `
|
|
@@ -52,20 +63,15 @@ describe('workflow-node-module-error plugin', () => {
|
|
|
52
63
|
return readFile;
|
|
53
64
|
}
|
|
54
65
|
`;
|
|
55
|
-
await
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
platform: 'neutral',
|
|
65
|
-
format: 'cjs',
|
|
66
|
-
plugins: [createNodeModuleErrorPlugin()],
|
|
67
|
-
logLevel: 'silent',
|
|
68
|
-
})).rejects.toThrow(/Cannot use Node\.js module/);
|
|
66
|
+
const { failure, relativeEntry } = await buildWorkflowWithViolation(testCode, { format: 'cjs' });
|
|
67
|
+
expect(failure.errors).toHaveLength(1);
|
|
68
|
+
const violation = failure.errors[0];
|
|
69
|
+
expect(violation.text).toContain('You are attempting to use "node:fs" which is a Node.js module');
|
|
70
|
+
expect(violation.location).toMatchObject({
|
|
71
|
+
file: relativeEntry,
|
|
72
|
+
suggestion: 'Move this function into a step function.',
|
|
73
|
+
});
|
|
74
|
+
expect(violation.location?.lineText).toContain('readFile');
|
|
69
75
|
});
|
|
70
76
|
it('should error on multiple Node.js imports', async () => {
|
|
71
77
|
const testCode = `
|
|
@@ -75,124 +81,319 @@ describe('workflow-node-module-error plugin', () => {
|
|
|
75
81
|
return readFile(join("a", "b"));
|
|
76
82
|
}
|
|
77
83
|
`;
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
84
|
+
const { failure, relativeEntry } = await buildWorkflowWithViolation(testCode, { format: 'cjs' });
|
|
85
|
+
expect(failure.errors).toHaveLength(2);
|
|
86
|
+
const packages = failure.errors.map((error) => ({
|
|
87
|
+
text: error.text,
|
|
88
|
+
location: error.location,
|
|
89
|
+
}));
|
|
90
|
+
const fsViolation = packages.find((pkg) => pkg.text.includes('"fs"'));
|
|
91
|
+
const pathViolation = packages.find((pkg) => pkg.text.includes('"path"'));
|
|
92
|
+
expect(fsViolation?.text).toContain('which is a Node.js module');
|
|
93
|
+
expect(pathViolation?.text).toContain('which is a Node.js module');
|
|
94
|
+
expect(fsViolation?.location).toMatchObject({
|
|
95
|
+
file: relativeEntry,
|
|
96
|
+
suggestion: 'Move this function into a step function.',
|
|
91
97
|
});
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
expect(fsViolation?.location?.lineText).toContain('readFile');
|
|
99
|
+
expect(pathViolation?.location).toMatchObject({
|
|
100
|
+
file: relativeEntry,
|
|
101
|
+
suggestion: 'Move this function into a step function.',
|
|
102
|
+
});
|
|
103
|
+
expect(pathViolation?.location?.lineText).toContain('join');
|
|
104
|
+
});
|
|
105
|
+
it('should show top-level package name for nested Node.js imports', async () => {
|
|
106
|
+
// This test validates that when a package in node_modules internally uses
|
|
107
|
+
// Node.js built-in modules, the error message shows the top-level package name
|
|
108
|
+
// (e.g., "fake-package") instead of the internal built-in (e.g., "stream").
|
|
109
|
+
//
|
|
110
|
+
// We create a real node_modules directory structure to simulate this scenario.
|
|
111
|
+
const tempDir = mkdtempSync(join(realTmpdir, 'node-module-plugin-test-'));
|
|
112
|
+
const nodeModulesDir = join(tempDir, 'node_modules', 'fake-package');
|
|
113
|
+
const { mkdirSync } = await import('node:fs');
|
|
114
|
+
mkdirSync(nodeModulesDir, { recursive: true });
|
|
115
|
+
const fakePackageCode = `
|
|
116
|
+
import { Stream } from "stream";
|
|
117
|
+
export function fakePackage() {
|
|
118
|
+
return new Stream();
|
|
119
|
+
}
|
|
120
|
+
`;
|
|
121
|
+
writeFileSync(join(nodeModulesDir, 'index.js'), fakePackageCode);
|
|
122
|
+
writeFileSync(join(nodeModulesDir, 'package.json'), JSON.stringify({ name: 'fake-package', main: 'index.js' }));
|
|
123
|
+
const testCode = `
|
|
124
|
+
import { fakePackage } from "fake-package";
|
|
125
|
+
export function workflow() {
|
|
126
|
+
return fakePackage();
|
|
127
|
+
}
|
|
128
|
+
`;
|
|
129
|
+
const entryFile = join(tempDir, 'workflow.ts');
|
|
130
|
+
writeFileSync(entryFile, testCode);
|
|
131
|
+
const relativeEntry = relative(process.cwd(), entryFile);
|
|
94
132
|
try {
|
|
95
|
-
await
|
|
133
|
+
await esbuild.build({
|
|
134
|
+
entryPoints: [entryFile],
|
|
135
|
+
bundle: true,
|
|
136
|
+
write: false,
|
|
137
|
+
platform: 'neutral',
|
|
138
|
+
logLevel: 'silent',
|
|
139
|
+
plugins: [createNodeModuleErrorPlugin()],
|
|
140
|
+
});
|
|
141
|
+
throw new Error('Expected build to fail');
|
|
96
142
|
}
|
|
97
143
|
catch (error) {
|
|
98
|
-
|
|
99
|
-
|
|
144
|
+
if (error && typeof error === 'object' && 'errors' in error) {
|
|
145
|
+
const failure = error;
|
|
146
|
+
expect(failure.errors).toHaveLength(1);
|
|
147
|
+
const violation = failure.errors[0];
|
|
148
|
+
// Should mention the top-level package "fake-package", not the internal "stream" module
|
|
149
|
+
expect(violation.text).toContain('"fake-package"');
|
|
150
|
+
expect(violation.text).toContain('which depends on Node.js modules');
|
|
151
|
+
expect(violation.text).not.toContain('"stream"');
|
|
152
|
+
expect(violation.location).toMatchObject({
|
|
153
|
+
file: relativeEntry,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
100
162
|
}
|
|
101
163
|
});
|
|
102
|
-
it('should
|
|
164
|
+
it('should find usage of namespace imports', async () => {
|
|
103
165
|
const testCode = `
|
|
104
|
-
|
|
105
|
-
import { someFunction } from "some-random-package";
|
|
166
|
+
import * as fs from "fs";
|
|
106
167
|
export function workflow() {
|
|
107
|
-
return "
|
|
168
|
+
return fs.readFile("test.txt");
|
|
108
169
|
}
|
|
109
170
|
`;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
},
|
|
119
|
-
bundle: true,
|
|
120
|
-
write: false,
|
|
121
|
-
platform: 'neutral',
|
|
122
|
-
plugins: [createNodeModuleErrorPlugin()],
|
|
123
|
-
logLevel: 'silent',
|
|
124
|
-
external: ['some-random-package'], // Mark as external so it doesn't fail resolution
|
|
125
|
-
})).resolves.toBeDefined();
|
|
171
|
+
const { failure, relativeEntry } = await buildWorkflowWithViolation(testCode);
|
|
172
|
+
expect(failure.errors).toHaveLength(1);
|
|
173
|
+
const violation = failure.errors[0];
|
|
174
|
+
expect(violation.text).toContain('"fs" which is a Node.js module');
|
|
175
|
+
expect(violation.location).toMatchObject({
|
|
176
|
+
file: relativeEntry,
|
|
177
|
+
});
|
|
178
|
+
expect(violation.location?.lineText).toContain('fs.readFile');
|
|
126
179
|
});
|
|
127
|
-
it('should
|
|
128
|
-
// This is the false positive case from the real issue:
|
|
129
|
-
// "eventsource-parser/stream" should NOT be flagged as the built-in "stream" module
|
|
180
|
+
it('should find usage of default imports', async () => {
|
|
130
181
|
const testCode = `
|
|
131
|
-
import
|
|
182
|
+
import fs from "fs";
|
|
132
183
|
export function workflow() {
|
|
133
|
-
return "
|
|
184
|
+
return fs.readFile("test.txt");
|
|
134
185
|
}
|
|
135
186
|
`;
|
|
136
|
-
await
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
write: false,
|
|
145
|
-
platform: 'neutral',
|
|
146
|
-
plugins: [createNodeModuleErrorPlugin()],
|
|
147
|
-
logLevel: 'silent',
|
|
148
|
-
external: ['eventsource-parser'], // Mark as external so it doesn't fail resolution
|
|
149
|
-
})).resolves.toBeDefined();
|
|
187
|
+
const { failure, relativeEntry } = await buildWorkflowWithViolation(testCode);
|
|
188
|
+
expect(failure.errors).toHaveLength(1);
|
|
189
|
+
const violation = failure.errors[0];
|
|
190
|
+
expect(violation.text).toContain('"fs" which is a Node.js module');
|
|
191
|
+
expect(violation.location).toMatchObject({
|
|
192
|
+
file: relativeEntry,
|
|
193
|
+
});
|
|
194
|
+
expect(violation.location?.lineText).toContain('fs.readFile');
|
|
150
195
|
});
|
|
151
|
-
it('should
|
|
152
|
-
// This simulates what happens when a package like @supabase/supabase-js
|
|
153
|
-
// internally imports Node.js built-ins. The key is that the import path
|
|
154
|
-
// needs to look like it's coming from node_modules
|
|
196
|
+
it('should find usage of aliased imports', async () => {
|
|
155
197
|
const testCode = `
|
|
156
|
-
|
|
157
|
-
import { fakePackage } from "./fake-package";
|
|
198
|
+
import { readFile as read } from "fs";
|
|
158
199
|
export function workflow() {
|
|
159
|
-
return
|
|
200
|
+
return read("test.txt");
|
|
160
201
|
}
|
|
161
202
|
`;
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
203
|
+
const { failure, relativeEntry } = await buildWorkflowWithViolation(testCode);
|
|
204
|
+
expect(failure.errors).toHaveLength(1);
|
|
205
|
+
const violation = failure.errors[0];
|
|
206
|
+
expect(violation.text).toContain('"fs" which is a Node.js module');
|
|
207
|
+
expect(violation.location).toMatchObject({
|
|
208
|
+
file: relativeEntry,
|
|
209
|
+
});
|
|
210
|
+
// Should point to the aliased identifier "read", not "readFile"
|
|
211
|
+
expect(violation.location?.lineText).toContain('read(');
|
|
212
|
+
});
|
|
213
|
+
it('should not error when import is unused (tree-shaken)', async () => {
|
|
214
|
+
// Note: esbuild tree-shakes unused imports, so they never trigger resolution.
|
|
215
|
+
// This is expected behavior - if the import isn't used, the module won't be bundled.
|
|
216
|
+
const testCode = `
|
|
217
|
+
import { readFile } from "fs";
|
|
218
|
+
export function workflow() {
|
|
219
|
+
return "no fs usage";
|
|
167
220
|
}
|
|
168
221
|
`;
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
222
|
+
const tempDir = mkdtempSync(join(realTmpdir, 'node-module-plugin-test-'));
|
|
223
|
+
const entryFile = join(tempDir, 'workflow.ts');
|
|
224
|
+
writeFileSync(entryFile, testCode);
|
|
225
|
+
try {
|
|
226
|
+
// Build should succeed because unused imports are tree-shaken
|
|
227
|
+
const result = await esbuild.build({
|
|
228
|
+
entryPoints: [entryFile],
|
|
229
|
+
bundle: true,
|
|
230
|
+
write: false,
|
|
231
|
+
platform: 'neutral',
|
|
232
|
+
logLevel: 'silent',
|
|
233
|
+
plugins: [createNodeModuleErrorPlugin()],
|
|
234
|
+
});
|
|
235
|
+
expect(result.errors).toHaveLength(0);
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
it('should error on Bun module imports', async () => {
|
|
242
|
+
const testCode = `
|
|
243
|
+
import { serve } from "bun";
|
|
244
|
+
export function workflow() {
|
|
245
|
+
return serve({ port: 3000 });
|
|
246
|
+
}
|
|
247
|
+
`;
|
|
248
|
+
const { failure, relativeEntry } = await buildWorkflowWithViolation(testCode);
|
|
249
|
+
expect(failure.errors).toHaveLength(1);
|
|
250
|
+
const violation = failure.errors[0];
|
|
251
|
+
expect(violation.text).toContain('"bun" which is a Bun module');
|
|
252
|
+
expect(violation.text).toContain('Bun modules are not available');
|
|
253
|
+
expect(violation.location).toMatchObject({
|
|
254
|
+
file: relativeEntry,
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
it('should error on Bun subpath imports', async () => {
|
|
258
|
+
const testCode = `
|
|
259
|
+
import { Database } from "bun:sqlite";
|
|
260
|
+
export function workflow() {
|
|
261
|
+
return new Database("test.db");
|
|
262
|
+
}
|
|
263
|
+
`;
|
|
264
|
+
const { failure, relativeEntry } = await buildWorkflowWithViolation(testCode);
|
|
265
|
+
expect(failure.errors).toHaveLength(1);
|
|
266
|
+
const violation = failure.errors[0];
|
|
267
|
+
expect(violation.text).toContain('"bun:sqlite" which is a Bun module');
|
|
268
|
+
expect(violation.text).toContain('Bun modules are not available');
|
|
269
|
+
expect(violation.location).toMatchObject({
|
|
270
|
+
file: relativeEntry,
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
describe('workflow-node-module-error helper functions', () => {
|
|
275
|
+
describe('getPackageName', () => {
|
|
276
|
+
it('should get the package name from simple node_modules path', () => {
|
|
277
|
+
const packageName = getPackageName('/Users/adrianlam/GitHub/workflow/node_modules/node-fetch/src/index.js');
|
|
278
|
+
expect(packageName).toBe('node-fetch');
|
|
279
|
+
});
|
|
280
|
+
it('should get the package name from pnpm nested path', () => {
|
|
281
|
+
const packageName = getPackageName('/Users/adrianlam/GitHub/workflow/node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/index.js');
|
|
282
|
+
expect(packageName).toBe('node-fetch');
|
|
283
|
+
});
|
|
284
|
+
it('should get scoped package name', () => {
|
|
285
|
+
const packageName = getPackageName('/project/node_modules/@supabase/supabase-js/dist/index.js');
|
|
286
|
+
expect(packageName).toBe('@supabase/supabase-js');
|
|
287
|
+
});
|
|
288
|
+
it('should return null for paths without node_modules', () => {
|
|
289
|
+
const packageName = getPackageName('/Users/adrianlam/GitHub/workflow/src/index.js');
|
|
290
|
+
expect(packageName).toBeNull();
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
describe('escapeRegExp', () => {
|
|
294
|
+
it('should escape regex special characters', () => {
|
|
295
|
+
expect(escapeRegExp('test.file')).toBe('test\\.file');
|
|
296
|
+
expect(escapeRegExp('test*file')).toBe('test\\*file');
|
|
297
|
+
expect(escapeRegExp('test+file')).toBe('test\\+file');
|
|
298
|
+
expect(escapeRegExp('test?file')).toBe('test\\?file');
|
|
299
|
+
expect(escapeRegExp('test^file')).toBe('test\\^file');
|
|
300
|
+
expect(escapeRegExp('test$file')).toBe('test\\$file');
|
|
301
|
+
});
|
|
302
|
+
it('should escape brackets and braces', () => {
|
|
303
|
+
expect(escapeRegExp('test{file}')).toBe('test\\{file\\}');
|
|
304
|
+
expect(escapeRegExp('test[file]')).toBe('test\\[file\\]');
|
|
305
|
+
expect(escapeRegExp('test(file)')).toBe('test\\(file\\)');
|
|
306
|
+
});
|
|
307
|
+
it('should escape pipes and backslashes', () => {
|
|
308
|
+
expect(escapeRegExp('test|file')).toBe('test\\|file');
|
|
309
|
+
expect(escapeRegExp('test\\file')).toBe('test\\\\file');
|
|
310
|
+
});
|
|
311
|
+
it('should handle strings without special characters', () => {
|
|
312
|
+
expect(escapeRegExp('testfile')).toBe('testfile');
|
|
313
|
+
expect(escapeRegExp('test-file')).toBe('test-file');
|
|
314
|
+
});
|
|
315
|
+
it('should handle package names with special characters', () => {
|
|
316
|
+
expect(escapeRegExp('@supabase/supabase-js')).toBe('@supabase/supabase-js');
|
|
317
|
+
expect(escapeRegExp('package.name')).toBe('package\\.name');
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
describe('getImportedIdentifier', () => {
|
|
321
|
+
it('should extract namespace import identifier', () => {
|
|
322
|
+
expect(getImportedIdentifier('* as fs')).toBe('fs');
|
|
323
|
+
expect(getImportedIdentifier('* as path')).toBe('path');
|
|
324
|
+
});
|
|
325
|
+
it('should extract first named import', () => {
|
|
326
|
+
expect(getImportedIdentifier('{ readFile }')).toBe('readFile');
|
|
327
|
+
expect(getImportedIdentifier('{ readFile, writeFile }')).toBe('readFile');
|
|
328
|
+
});
|
|
329
|
+
it('should extract aliased named import', () => {
|
|
330
|
+
expect(getImportedIdentifier('{ readFile as read }')).toBe('read');
|
|
331
|
+
expect(getImportedIdentifier('{ readFile as read, writeFile }')).toBe('read');
|
|
332
|
+
});
|
|
333
|
+
it('should extract default import', () => {
|
|
334
|
+
expect(getImportedIdentifier('fs')).toBe('fs');
|
|
335
|
+
expect(getImportedIdentifier('myDefault')).toBe('myDefault');
|
|
336
|
+
});
|
|
337
|
+
it('should extract first identifier from mixed imports', () => {
|
|
338
|
+
// The function checks for braces first, so it extracts from named imports
|
|
339
|
+
expect(getImportedIdentifier('fs, { readFile }')).toBe('readFile');
|
|
340
|
+
expect(getImportedIdentifier('defaultExport, { named }')).toBe('named');
|
|
341
|
+
});
|
|
342
|
+
it('should handle whitespace variations', () => {
|
|
343
|
+
expect(getImportedIdentifier(' { readFile } ')).toBe('readFile');
|
|
344
|
+
expect(getImportedIdentifier('{readFile}')).toBe('readFile');
|
|
345
|
+
expect(getImportedIdentifier('{ readFile , writeFile }')).toBe('readFile');
|
|
346
|
+
});
|
|
347
|
+
it('should handle complex named imports', () => {
|
|
348
|
+
expect(getImportedIdentifier('type { ReadStream }')).toBe('ReadStream');
|
|
349
|
+
expect(getImportedIdentifier('{ default as fs }')).toBe('fs');
|
|
350
|
+
});
|
|
351
|
+
it('should return undefined for edge cases', () => {
|
|
352
|
+
expect(getImportedIdentifier('*')).toBeUndefined();
|
|
353
|
+
expect(getImportedIdentifier('')).toBeUndefined();
|
|
354
|
+
// Empty braces should return undefined since there's no valid identifier
|
|
355
|
+
expect(getImportedIdentifier('{}')).toBeUndefined();
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
describe('getViolationLocation', () => {
|
|
359
|
+
it('should find violation location for package name that appears in file', async () => {
|
|
360
|
+
// Use the actual monorepo root as cwd
|
|
361
|
+
const cwd = process.cwd();
|
|
362
|
+
const testFile = 'src/node-module-esbuild-plugin.test.ts';
|
|
363
|
+
// Test with 'vitest' which is actually imported in this file
|
|
364
|
+
const location = await getViolationLocation(cwd, testFile, 'vitest');
|
|
365
|
+
// The function should find 'vitest' in the import statement
|
|
366
|
+
expect(location).toBeDefined();
|
|
367
|
+
expect(location?.file).toBe(testFile);
|
|
368
|
+
const contents = readFileSync(resolve(cwd, testFile), 'utf8');
|
|
369
|
+
const lines = contents.split(/\r?\n/);
|
|
370
|
+
const expectedLine = lines.findIndex((line) => line.includes(`describe(`)) + 1;
|
|
371
|
+
expect(location?.line).toBe(expectedLine);
|
|
372
|
+
expect(location?.column).toBe(0);
|
|
373
|
+
expect(location?.lineText).toContain(`describe(`);
|
|
374
|
+
expect(location?.length).toBe(8);
|
|
375
|
+
});
|
|
376
|
+
it('should return undefined for non-existent files', async () => {
|
|
377
|
+
const cwd = process.cwd();
|
|
378
|
+
const location = await getViolationLocation(cwd, 'non-existent-file.ts', 'some-package');
|
|
379
|
+
expect(location).toBeUndefined();
|
|
380
|
+
});
|
|
381
|
+
it('should return undefined for files without the package import', async () => {
|
|
382
|
+
const cwd = process.cwd();
|
|
383
|
+
const testFile = 'src/node-module-esbuild-plugin.test.ts';
|
|
384
|
+
// This package is not imported in the test file
|
|
385
|
+
const location = await getViolationLocation(cwd, testFile, 'non-existent-package');
|
|
386
|
+
expect(location).toBeUndefined();
|
|
387
|
+
});
|
|
388
|
+
it('should return undefined when import is unused even if it can be parsed', async () => {
|
|
389
|
+
const cwd = process.cwd();
|
|
390
|
+
const testFile = 'src/node-module-esbuild-plugin.test.ts';
|
|
391
|
+
// Test with 'node:http' which is imported in this file but never used
|
|
392
|
+
const location = await getViolationLocation(cwd, testFile, 'node:http');
|
|
393
|
+
// Since the identifier is never referenced (only imported), we should
|
|
394
|
+
// not produce a location preview.
|
|
395
|
+
expect(location).toBeUndefined();
|
|
396
|
+
});
|
|
196
397
|
});
|
|
197
398
|
});
|
|
198
399
|
//# sourceMappingURL=node-module-esbuild-plugin.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-module-esbuild-plugin.test.js","sourceRoot":"","sources":["../src/node-module-esbuild-plugin.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node-module-esbuild-plugin.test.js","sourceRoot":"","sources":["../src/node-module-esbuild-plugin.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAMlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;
|
|
1
|
+
{"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAMlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAsCD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAsMjE"}
|
|
@@ -11,7 +11,18 @@ const NODE_RESOLVE_OPTIONS = {
|
|
|
11
11
|
importsFields: ['imports'],
|
|
12
12
|
conditionNames: ['node', 'require'],
|
|
13
13
|
descriptionFiles: ['package.json'],
|
|
14
|
-
extensions: [
|
|
14
|
+
extensions: [
|
|
15
|
+
'.ts',
|
|
16
|
+
'.tsx',
|
|
17
|
+
'.mts',
|
|
18
|
+
'.cts',
|
|
19
|
+
'.cjs',
|
|
20
|
+
'.mjs',
|
|
21
|
+
'.js',
|
|
22
|
+
'.jsx',
|
|
23
|
+
'.json',
|
|
24
|
+
'.node',
|
|
25
|
+
],
|
|
15
26
|
enforceExtensions: false,
|
|
16
27
|
symlinks: true,
|
|
17
28
|
mainFields: ['main'],
|