Skip to content

Commit 6806f22

Browse files
feat: callback on file
1 parent eb563d9 commit 6806f22

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

index.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,13 @@ module.exports = (src, options = {}) => {
3030

3131
const walker = new Walker(walkerOptions);
3232

33-
walker.walk(src, (node) => {
33+
const ast = typeof src === 'string' ? walker.parse(src) : src;
34+
35+
if (options.onFile) {
36+
options.onFile({ options, src, ast, walker });
37+
}
38+
39+
walker.walk(ast, (node) => {
3440
switch (node.type) {
3541
case 'ImportExpression':
3642
if (!options.skipAsyncImports && node.source && node.source.value) {
@@ -83,6 +89,11 @@ module.exports = (src, options = {}) => {
8389
}
8490
});
8591

92+
93+
if (options.onAfterFile) {
94+
options.onAfterFile({ options, src, ast, walker, dependencies });
95+
}
96+
8697
return dependencies;
8798
};
8899

test/test.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,48 @@ describe('detective-typescript', () => {
3737
assert.equal(deps[0], 'mylib');
3838
});
3939

40+
it('calls onFile callback', () => {
41+
let onFileCalledArgs;
42+
const onFile = (...args) => {
43+
onFileCalledArgs = args;
44+
}
45+
46+
const src = 'import {foo, bar} from "mylib";'
47+
48+
detective(src, { onFile });
49+
50+
assert.ok(onFileCalledArgs);
51+
assert.ok(onFileCalledArgs[0]);
52+
assert.equal(onFileCalledArgs[0].src, src);
53+
assert.ok(typeof onFileCalledArgs[0].ast === 'object');
54+
assert.ok(typeof onFileCalledArgs[0].walker === 'object');
55+
56+
assert.ok(typeof onFileCalledArgs[0].options === 'object');
57+
assert.equal(onFileCalledArgs[0].options.onFile, onFile);
58+
});
59+
60+
it('calls onAfterFile callback', () => {
61+
let onAfterFileCalledArgs;
62+
const onAfterFile = (...args) => {
63+
onAfterFileCalledArgs = args;
64+
}
65+
66+
const src = 'import {foo, bar} from "mylib";'
67+
68+
detective(src, { onAfterFile });
69+
70+
assert.ok(onAfterFileCalledArgs);
71+
assert.ok(onAfterFileCalledArgs[0]);
72+
assert.equal(onAfterFileCalledArgs[0].src, src);
73+
assert.ok(typeof onAfterFileCalledArgs[0].ast === 'object');
74+
assert.ok(typeof onAfterFileCalledArgs[0].walker === 'object');
75+
assert.ok(Array.isArray(onAfterFileCalledArgs[0].dependencies));
76+
77+
assert.ok(typeof onAfterFileCalledArgs[0].options === 'object');
78+
assert.equal(onAfterFileCalledArgs[0].options.onAfterFile, onAfterFile);
79+
});
80+
81+
4082
it('retrieves the re-export dependencies of modules', () => {
4183
const deps = detective('export {foo, bar} from "mylib";');
4284
assert.equal(deps.length, 1);

0 commit comments

Comments
 (0)