1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | import extract from './extract';
|
9 | import generate from 'babel-generator';
|
10 | import path from 'path';
|
11 | import transform from './transform';
|
12 |
|
13 | function isNodeModule(filename) {
|
14 | return filename.includes('node_modules') && !filename.includes('packages/node_modules');
|
15 | }
|
16 |
|
17 | function inject(module, filename) {
|
18 | const code = generate(extract(transform, filename), {
|
19 | compact: false,
|
20 | quotes: 'single'
|
21 | }).code;
|
22 |
|
23 | if (process.env.JSDOCTRINETEST_VERBOSE) {
|
24 | console.log(filename);
|
25 | console.log(code);
|
26 | console.log();
|
27 | }
|
28 | module._compile(code, filename);
|
29 | }
|
30 |
|
31 | function enableSpecInjection() {
|
32 | let dir;
|
33 | const load = require.extensions['.js'];
|
34 | require.extensions['.js'] = function loadWithSpecs(m, filename) {
|
35 | if (isNodeModule(filename)) {
|
36 | return load(m, filename);
|
37 | }
|
38 |
|
39 |
|
40 | if (!dir) {
|
41 | dir = path.dirname(filename);
|
42 | }
|
43 |
|
44 | if (!filename.includes(dir)) {
|
45 | return load(m, filename);
|
46 | }
|
47 |
|
48 | return inject(m, filename);
|
49 | };
|
50 | }
|
51 |
|
52 | enableSpecInjection();
|