Skip to content

Commit 93011e0

Browse files
committed
feat: use AST approach
1 parent f81ebf9 commit 93011e0

File tree

3 files changed

+432
-140
lines changed

3 files changed

+432
-140
lines changed

packages/parse/__tests__/collect.test.ts

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
1-
import { collectSourceFiles, FileMap, CollectOptions } from '../src/collect';
1+
import { SourceCollector, FileMap, CollectOptions } from '../src/collect';
2+
3+
describe('SourceCollector', () => {
4+
let collector: SourceCollector;
5+
let collectorWithoutContent: SourceCollector;
6+
let collectorWithCustomExtensions: SourceCollector;
7+
8+
beforeAll(() => {
9+
collector = new SourceCollector();
10+
collectorWithoutContent = new SourceCollector({ includeContent: false });
11+
collectorWithCustomExtensions = new SourceCollector({ extensions: ['.custom', '.ts'] });
12+
});
213

3-
describe('collectSourceFiles', () => {
414
describe('basic functionality', () => {
515
it('should collect a single file with no imports', () => {
616
const files = [{ path: 'main.ts', content: 'const x = 1;' }];
717

8-
const result = collectSourceFiles('main.ts', files);
18+
const result = collector.collect('main.ts', files);
919

1020
expect(result).toEqual({
1121
'main.ts': 'const x = 1;',
@@ -15,7 +25,7 @@ describe('collectSourceFiles', () => {
1525
it('should return empty object when entry file not found', () => {
1626
const files = [{ path: 'other.ts', content: 'const x = 1;' }];
1727

18-
const result = collectSourceFiles('main.ts', files);
28+
const result = collector.collect('main.ts', files);
1929

2030
expect(result).toEqual({});
2131
});
@@ -28,7 +38,7 @@ describe('collectSourceFiles', () => {
2838
{ path: 'helper.ts', content: 'export const foo = 1;' },
2939
];
3040

31-
const result = collectSourceFiles('main.ts', files);
41+
const result = collector.collect('main.ts', files);
3242

3343
expect(result).toEqual({
3444
'main.ts': 'import { foo } from "./helper";',
@@ -46,7 +56,7 @@ describe('collectSourceFiles', () => {
4656
{ path: 'utils/shared.ts', content: 'export const bar = 1;' },
4757
];
4858

49-
const result = collectSourceFiles('main.ts', files);
59+
const result = collector.collect('main.ts', files);
5060

5161
expect(result).toEqual({
5262
'main.ts': 'import { foo } from "./utils/helper";',
@@ -61,7 +71,7 @@ describe('collectSourceFiles', () => {
6171
{ path: 'utils/helper.ts', content: 'export const foo = 1;' },
6272
];
6373

64-
const result = collectSourceFiles('src/main.ts', files);
74+
const result = collector.collect('src/main.ts', files);
6575

6676
expect(result).toEqual({
6777
'src/main.ts': 'import { foo } from "../utils/helper";',
@@ -92,7 +102,7 @@ describe('collectSourceFiles', () => {
92102
{ path: 'helper6.ts', content: 'export const baz = 1;' },
93103
];
94104

95-
const result = collectSourceFiles('main.ts', files);
105+
const result = collector.collect('main.ts', files);
96106
const keys = Object.keys(result);
97107

98108
expect(keys).toHaveLength(7);
@@ -118,7 +128,7 @@ describe('collectSourceFiles', () => {
118128
{ path: 'helper.ts', content: 'export const foo = 1;' },
119129
];
120130

121-
const result = collectSourceFiles('main.ts', files);
131+
const result = collector.collect('main.ts', files);
122132
const keys = Object.keys(result);
123133

124134
expect(keys).toHaveLength(2);
@@ -135,7 +145,7 @@ describe('collectSourceFiles', () => {
135145
{ path: 'helper.ts', content: 'export const foo = 1;' },
136146
];
137147

138-
const result = collectSourceFiles('main.ts', files);
148+
const result = collector.collect('main.ts', files);
139149

140150
expect(result).toEqual({
141151
'main.ts': 'import { foo } from "./helper";',
@@ -149,7 +159,7 @@ describe('collectSourceFiles', () => {
149159
{ path: 'helper.jsx', content: 'export const foo = 1;' },
150160
];
151161

152-
const result = collectSourceFiles('main.ts', files);
162+
const result = collector.collect('main.ts', files);
153163

154164
expect(result).toEqual({
155165
'main.ts': 'import { foo } from "./helper";',
@@ -163,11 +173,7 @@ describe('collectSourceFiles', () => {
163173
{ path: 'helper.custom', content: 'export const foo = 1;' },
164174
];
165175

166-
const options: CollectOptions = {
167-
extensions: ['.custom', '.ts'],
168-
};
169-
170-
const result = collectSourceFiles('main.ts', files, options);
176+
const result = collectorWithCustomExtensions.collect('main.ts', files);
171177

172178
expect(result).toEqual({
173179
'main.ts': 'import { foo } from "./helper";',
@@ -182,7 +188,7 @@ describe('collectSourceFiles', () => {
182188
{ path: 'helper.ts', content: 'export const foo = "with-ext";' },
183189
];
184190

185-
const result = collectSourceFiles('main.ts', files);
191+
const result = collector.collect('main.ts', files);
186192

187193
expect(result['helper']).toBe('export const foo = "exact";');
188194
});
@@ -195,7 +201,7 @@ describe('collectSourceFiles', () => {
195201
{ path: 'b.ts', content: 'import { a } from "./a"; export const b = 2;' },
196202
];
197203

198-
const result = collectSourceFiles('a.ts', files);
204+
const result = collector.collect('a.ts', files);
199205

200206
expect(result).toEqual({
201207
'a.ts': 'import { b } from "./b"; export const a = 1;',
@@ -208,7 +214,7 @@ describe('collectSourceFiles', () => {
208214
{ path: 'main.ts', content: 'import { foo } from "./main"; export const foo = 1;' },
209215
];
210216

211-
const result = collectSourceFiles('main.ts', files);
217+
const result = collector.collect('main.ts', files);
212218

213219
expect(result).toEqual({
214220
'main.ts': 'import { foo } from "./main"; export const foo = 1;',
@@ -223,11 +229,7 @@ describe('collectSourceFiles', () => {
223229
{ path: 'helper.ts', content: 'export const foo = 1;' },
224230
];
225231

226-
const options: CollectOptions = {
227-
includeContent: false,
228-
};
229-
230-
const result = collectSourceFiles('main.ts', files, options);
232+
const result = collectorWithoutContent.collect('main.ts', files);
231233

232234
expect(result).toEqual({
233235
'main.ts': '',
@@ -238,8 +240,9 @@ describe('collectSourceFiles', () => {
238240
it('should use default options when not provided', () => {
239241
const files = [{ path: 'main.ts', content: 'const x = 1;' }];
240242

241-
const result1 = collectSourceFiles('main.ts', files);
242-
const result2 = collectSourceFiles('main.ts', files, {});
243+
const result1 = collector.collect('main.ts', files);
244+
const collector2 = new SourceCollector({});
245+
const result2 = collector2.collect('main.ts', files);
243246

244247
expect(result1).toEqual(result2);
245248
});
@@ -249,7 +252,7 @@ describe('collectSourceFiles', () => {
249252
it('should handle empty file content', () => {
250253
const files = [{ path: 'main.ts', content: '' }];
251254

252-
const result = collectSourceFiles('main.ts', files);
255+
const result = collector.collect('main.ts', files);
253256

254257
expect(result).toEqual({
255258
'main.ts': '',
@@ -261,7 +264,7 @@ describe('collectSourceFiles', () => {
261264
{ path: 'main.ts', content: '// This is a comment\n/* Block comment */' },
262265
];
263266

264-
const result = collectSourceFiles('main.ts', files);
267+
const result = collector.collect('main.ts', files);
265268

266269
expect(result).toEqual({
267270
'main.ts': '// This is a comment\n/* Block comment */',
@@ -282,7 +285,7 @@ describe('collectSourceFiles', () => {
282285
{ path: 'helper.ts', content: 'export const foo = 1;' },
283286
];
284287

285-
const result = collectSourceFiles('main.ts', files);
288+
const result = collector.collect('main.ts', files);
286289
const keys = Object.keys(result);
287290

288291
expect(keys).toHaveLength(2);
@@ -304,7 +307,7 @@ describe('collectSourceFiles', () => {
304307
{ path: 'helper.ts', content: 'export const foo = 1;' },
305308
];
306309

307-
const result = collectSourceFiles('main.ts', files);
310+
const result = collector.collect('main.ts', files);
308311
const keys = Object.keys(result);
309312

310313
// Should only collect the real import, not the ones in comments/strings
@@ -320,7 +323,7 @@ describe('collectSourceFiles', () => {
320323
{ path: 'absolute/helper.ts', content: 'export const foo = 1;' },
321324
];
322325

323-
const result = collectSourceFiles('main.ts', files);
326+
const result = collector.collect('main.ts', files);
324327

325328
expect(result).toEqual({
326329
'main.ts': 'import { foo } from "/absolute/helper";',
@@ -331,7 +334,7 @@ describe('collectSourceFiles', () => {
331334
it('should handle missing intermediate directories', () => {
332335
const files = [{ path: 'main.ts', content: 'import { foo } from "./missing/helper";' }];
333336

334-
const result = collectSourceFiles('main.ts', files);
337+
const result = collector.collect('main.ts', files);
335338

336339
expect(result).toEqual({
337340
'main.ts': 'import { foo } from "./missing/helper";',
@@ -354,7 +357,7 @@ describe('collectSourceFiles', () => {
354357
{ path: 'src/components/types.ts', content: 'export interface Props {}' },
355358
];
356359

357-
const result = collectSourceFiles('src/components/Button/index.ts', files);
360+
const result = collector.collect('src/components/Button/index.ts', files);
358361
const keys = Object.keys(result);
359362

360363
expect(keys).toHaveLength(4);
@@ -382,7 +385,7 @@ describe('collectSourceFiles', () => {
382385
{ path: 'helper.ts', content: 'export const helper = {};' },
383386
];
384387

385-
const result = collectSourceFiles('main.ts', files);
388+
const result = collector.collect('main.ts', files);
386389
const keys = Object.keys(result);
387390

388391
expect(keys).toHaveLength(5);

0 commit comments

Comments
 (0)