UNPKG

1.61 kBJavaScriptView Raw
1const { format } = require('prettier')
2const { transform } = require('babel-core')
3const createIndex = require('./createIndex')
4const templates = require('./templates')
5const composite = require('./templates/composite')
6const {
7 stringifyObject,
8 getExtensionImport,
9 getComp,
10 getSystemFuncs
11} = require('./templates/util')
12
13const compile = code =>
14 transform(code, {
15 presets: [
16 require('babel-preset-env'),
17 require('babel-preset-stage-0'),
18 require('babel-preset-react')
19 ]
20 }).code
21
22const parse = conf =>
23 Object.assign({}, conf, {
24 systemFunctions: getSystemFuncs(conf.system || []),
25 extensionImport: getExtensionImport(conf.type),
26 type: getComp(conf.type || 'div'),
27 style: stringifyObject(conf.style || {}),
28 props: stringifyObject(conf.props || {})
29 })
30
31module.exports = (config, options = {}) => {
32 const components = Array.isArray(config) ? config : config.components
33 const { library = 'styled-components', harmony } = options
34
35 const template = templates[library] || templates['styled-components']
36
37 const index = {
38 name: 'index',
39 module: harmony ? createIndex(components) : compile(createIndex(components))
40 }
41
42 const mods = components.map(conf => {
43 const parsed = parse(conf)
44 const code = isComposite(parsed) ? composite(parsed) : template(parsed)
45 const mod = harmony
46 ? format(code, {
47 semi: false,
48 singleQuote: true
49 })
50 : compile(code)
51
52 return {
53 name: conf.name,
54 module: mod
55 }
56 })
57
58 return [index, ...mods]
59}
60
61const isComposite = comp => comp.imports && comp.jsx