/
build.js
64 lines (62 loc) · 2.07 KB
/
build.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
61
62
63
64
import { getOptions } from 'loader-utils';
import { readStory } from './dependencies-lookup/readAsObject';
import { getRidOfUselessFilePrefixes } from './dependencies-lookup/getRidOfUselessFilePrefixes';
import getParser from './abstract-syntax-tree/parsers';
import { endOfImports } from './abstract-syntax-tree/traverse-helpers';
export function insertAfterImports(classLoader, insert, source) {
const options = getOptions(classLoader) || {};
let ast;
try {
ast = getParser(options.parser || classLoader.extension || 'javascript').parse(source);
} catch (e) {
// if not working, then we will fallback to not adding anything
// perhaps the code was not written in javascript
return source;
}
if (!ast) return `${insert}${source}`;
const endOfImportsIndex = endOfImports(ast);
const result = `${source.substring(0, endOfImportsIndex)}\n${insert}\n${source.substring(
endOfImportsIndex
)}`;
return result;
}
export function transform(inputSource) {
return readStory(this, inputSource)
.then(getRidOfUselessFilePrefixes)
.then(
({
prefix,
resource,
source,
sourceJson,
addsMap,
dependencies,
localDependencies,
idsToFrameworks,
}) => {
const preamble = `
/* eslint-disable */
// @ts-ignore
var withSourceLoader = require('@storybook/source-loader/preview').withSource;
// @ts-ignore
var addSourceDecorator = require("@storybook/source-loader/preview").addSource;
// @ts-ignore
var __SOURCE_PREFIX__ = "${prefix.replace(/\\([^\\ ])/g, '\\\\$1')}";
// @ts-ignore
var __STORY__ = ${sourceJson};
// @ts-ignore
var __ADDS_MAP__ = ${JSON.stringify(addsMap)};
// @ts-ignore
var __MAIN_FILE_LOCATION__ = ${JSON.stringify(resource)};
// @ts-ignore
var __MODULE_DEPENDENCIES__ = ${JSON.stringify(dependencies)};
// @ts-ignore
var __LOCAL_DEPENDENCIES__ = ${JSON.stringify(localDependencies)};
// @ts-ignore
var __IDS_TO_FRAMEWORKS__ = ${JSON.stringify(idsToFrameworks)};
`;
return insertAfterImports(this, preamble, source);
// return `${preamble}${source}`;
}
);
}