forked from react-cosmos/react-cosmos
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprepare-modules.js
60 lines (48 loc) · 1.46 KB
/
prepare-modules.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import importModule from 'react-cosmos-utils/lib/import-module';
import { getComponents } from 'react-cosmos-voyager2/lib/client/get-components';
const { keys } = Object;
const rawFixtureModules = require('./components/__fixtures__/**/*.js', {
mode: 'hash',
resolve: ['path']
});
export function prepareOldSchoolFixtures() {
const fixtureModules = getNormalizedModules(rawFixtureModules);
const fixtureFiles = getFixtureFilesFromModules(fixtureModules);
const components = getComponents({ fixtureFiles, fixtureModules });
return getOldSchoolFixturesFromNewStyleComponents(components);
}
function getNormalizedModules(modules) {
return keys(modules).reduce(
(acc, relPath) => ({
...acc,
[relToAbsPath(relPath)]: importModule(modules[relPath])
}),
{}
);
}
function getFixtureFilesFromModules(modules) {
return keys(modules).map(filePath => {
return {
filePath,
components: []
};
});
}
function getOldSchoolFixturesFromNewStyleComponents(newStyleComponents) {
const fixtures = {};
newStyleComponents.forEach(c => {
const componentName = getObjectPath(c);
fixtures[componentName] = {};
c.fixtures.forEach(f => {
const fixtureName = getObjectPath(f);
fixtures[componentName][fixtureName] = f.source;
});
});
return fixtures;
}
function relToAbsPath(relPath) {
return relPath.slice(1);
}
function getObjectPath(obj) {
return obj.namespace ? `${obj.namespace}/${obj.name}` : obj.name;
}