UNPKG

1.15 kBJavaScriptView Raw
1'use strict';
2
3const {
4 transformFileSync
5} = require('@babel/core');
6
7const {
8 getNode,
9 getId,
10 getName
11} = require('./utils');
12
13const {
14 TEST_ID
15} = require('./const');
16
17const config = require('./config');
18
19const getParser = () => {
20 const exports = {};
21 return {
22 exports,
23 plugin: ({
24 types: t
25 }) => ({
26 visitor: {
27 JSXElement(p, {
28 file
29 }) {
30 const data = getNode(t, p);
31 if (!data) return;
32 const {
33 filename
34 } = file.opts;
35 const name = getName(data);
36 const id = getId(filename, name);
37 exports[name] = {
38 [TEST_ID]: id
39 };
40 }
41
42 }
43 })
44 };
45};
46
47const cache = {};
48
49const resolve = path => {
50 if (!cache[path]) {
51 const parser = getParser();
52 transformFileSync(path, {
53 babelrc: false,
54 plugins: [...config.syntaxes, [parser.plugin]]
55 });
56 cache[path] = parser.exports;
57 }
58
59 return cache[path];
60};
61
62const resolveBy = resolver => path => resolve(resolver(path));
63
64module.exports = resolve;
65module.exports.default = resolve;
66module.exports.resolveBy = resolveBy;
\No newline at end of file