/
index.js
124 lines (103 loc) · 3.71 KB
/
index.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
const chokidar = require('chokidar')
const fs = require('fs-extra')
const path = require('path')
const babel = require('babel-core')
require('babel-polyfill')
const watcher = chokidar.watch('.', {
ignored: /node_modules|coverage|cli|dev|.git|.DS_Store/,
persistent: true
})
var dest = process.argv[2]
if (!dest || !fs.existsSync(path.resolve(dest))) {
console.error('Invalid destination')
process.exit(0)
}
function findTarget (src) {
var paths = src.split('/')
const type = paths.shift()
const source = paths.shift()
const original = paths.join('/')
let compile = (!fs.lstatSync(path.resolve(src)).isDirectory() && path.extname(src) === '.js' && source && (type === 'src' || source === 'src'))
var target = path.resolve(dest)
var targetSrc = path.resolve(dest)
switch (type) {
case 'blockchain':
target = path.join(dest, 'node_modules', 'react-blockchain-chunky', compile ? 'lib' : (source || ''), original)
targetSrc = path.join(dest, 'node_modules', 'react-blockchain-chunky', (source || ''), original)
break
case 'desktop':
target = path.join(dest, 'node_modules', 'react-electron-chunky', compile ? 'lib' : (source || ''), original)
targetSrc = path.join(dest, 'node_modules', 'react-electron-chunky', (source || ''), original)
break
case 'cloud':
target = path.join(dest, 'node_modules', 'react-cloud-chunky', compile ? 'lib' : (source || ''), original)
targetSrc = path.join(dest, 'node_modules', 'react-cloud-chunky', (source || ''), original)
break
case 'web':
target = path.join(dest, 'node_modules', 'react-dom-chunky', compile ? 'lib' : (source || ''), original)
targetSrc = path.join(dest, 'node_modules', 'react-dom-chunky', (source || ''), original)
break
case 'mobile':
target = path.join(dest, 'node_modules', 'react-native-chunky', compile ? 'lib' : (source || ''), original)
targetSrc = path.join(dest, 'node_modules', 'react-native-chunky', (source || ''), original)
break
case 'src':
target = path.join(dest, 'node_modules', 'react-chunky', 'lib', (source || ''), original)
targetSrc = path.join(dest, 'node_modules', 'react-chunky', (source || ''), original)
break
default:
target = path.join(dest, 'node_modules', 'react-chunky', src)
targetSrc = path.join(dest, 'node_modules', 'react-chunky', src)
}
return ({ target, targetSrc, compile })
}
function transpile (src, target) {
const code = babel.transformFileSync(path.resolve(src), {
sourceRoot: path.join(process.cwd(), 'node_modules'),
plugins: ['styled-jsx/babel', 'transform-react-jsx', 'transform-es2015-destructuring', 'transform-object-rest-spread'],
presets: ['react', 'env']
}).code
if (fs.existsSync(target)) {
fs.removeSync(target)
}
if (!fs.existsSync(path.dirname(target))) {
fs.mkdirsSync(path.dirname(target))
}
fs.writeFileSync(target, code)
}
function add (src) {
const { target, targetSrc, compile } = findTarget(src)
if (!target) {
return
}
if (fs.existsSync(target)) {
return
}
if (compile) {
transpile(src, target)
}
fs.copySync(src, targetSrc)
}
function update (src, remove) {
const { target, targetSrc, compile } = findTarget(src)
if (!target) {
return
}
if (remove) {
fs.removeSync(target)
console.log('Removed', src, 'from', target)
return
}
if (compile) {
transpile(src, target)
}
fs.copySync(src, targetSrc)
console.log(compile ? 'Transpiled' : 'Moved', src, 'to', target)
}
console.log('*** Started ***')
watcher
.on('add', src => add(src))
.on('addDir', src => add(src))
.on('change', src => update(src))
.on('unlink', src => update(src, true))
.on('unlinkDir', src => update(src, true))