-
Notifications
You must be signed in to change notification settings - Fork 232
/
Copy pathgenerate-submodules.ts
63 lines (51 loc) · 1.8 KB
/
generate-submodules.ts
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
import fs from 'fs'
import path from 'path'
type Template = (submodule: string) => string
const templates = {
index: {
'.js': (submodule: string) => `module.exports = require('../lib/${submodule}')`,
'.d.ts': (submodule: string) => `export * from '../lib/${submodule}'`
},
pure: {
'.js': (submodule: string) => `module.exports = require('../lib/${submodule}/pure')`,
'.d.ts': (submodule: string) => `export * from '../lib/${submodule}/pure'`
}
}
const submodules = ['dom', 'native', 'server', 'pure']
function cleanDirectory(directory: string) {
const files = fs.readdirSync(directory)
files.forEach((file) => fs.unlinkSync(path.join(directory, file)))
}
function makeDirectory(submodule: string) {
const submoduleDir = path.join(process.cwd(), submodule)
if (fs.existsSync(submoduleDir)) {
cleanDirectory(submoduleDir)
} else {
fs.mkdirSync(submoduleDir)
}
return submoduleDir
}
function requiredFile(submodule: string) {
return ([name]: [string, unknown]) => {
return name !== submodule
}
}
function makeFile(directory: string, submodule: string) {
return ([name, extensions]: [string, Record<string, Template>]) => {
Object.entries(extensions).forEach(([extension, template]) => {
const fileName = `${name}${extension}`
console.log(` - ${fileName}`)
const filePath = path.join(directory, fileName)
fs.writeFileSync(filePath, template(submodule))
})
}
}
function makeFiles(directory: string, submodule: string) {
Object.entries(templates).filter(requiredFile(submodule)).forEach(makeFile(directory, submodule))
}
function createSubmodule(submodule: string) {
console.log(`Generating submodule: ${submodule}`)
const submoduleDir = makeDirectory(submodule)
makeFiles(submoduleDir, submodule)
}
submodules.forEach(createSubmodule)