UNPKG

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