forked from shashkovdanil/clean-publish
-
Notifications
You must be signed in to change notification settings - Fork 0
/
core.js
126 lines (113 loc) · 2.66 KB
/
core.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
125
126
const path = require('path')
const spawn = require('cross-spawn')
const {
omit,
pick
} = require('ramda')
const {
regExpIndexOf,
multiCp,
writeJson,
readJson,
readdir,
mkdtemp,
remove
} = require('./utils')
const IGNORE_FILES = require('./exception/ignore-files')
const IGNORE_FIELDS = require('./exception/ignore-fields')
const NPM_SCRIPTS = require('./exception/npm-scripts')
function readPackageJSON () {
return readJson('package.json')
}
function writePackageJSON (directoryName, packageJSON) {
return writeJson(
path.join(directoryName, 'package.json'),
packageJSON,
{ spaces: 2 }
)
}
function clearPackageJSON (packageJson, inputIgnoreFields) {
const ignoreFields = inputIgnoreFields
? IGNORE_FIELDS.concat(inputIgnoreFields)
: IGNORE_FIELDS
let clearedScripts = { }
if (packageJson.scripts) {
clearedScripts = {
scripts: pick(NPM_SCRIPTS, packageJson.scripts)
}
}
const cleanPackageJSON = omit(ignoreFields, Object.assign(
{},
packageJson,
clearedScripts
))
for (const i in cleanPackageJSON) {
if (typeof cleanPackageJSON[i] === 'object') {
if (Object.keys(cleanPackageJSON[i]).length === 0) {
delete cleanPackageJSON[i]
}
}
}
return cleanPackageJSON
}
function clearFilesList (files, inputIgnoreFiles) {
const ignoreFiles = inputIgnoreFiles
? IGNORE_FILES.concat(inputIgnoreFiles)
: IGNORE_FILES
const filteredFiles = files.filter(file => (
regExpIndexOf(ignoreFiles, file) === false
))
return filteredFiles
}
function publish (cwd, packageManager, access) {
return new Promise((resolve, reject) => {
const args = access
? ['publish', '--access', access]
: ['publish']
spawn(packageManager, args, {
stdio: 'inherit',
cwd
}).on('close', (code, signal) => {
resolve({
code,
signal
})
}).on('error', reject)
})
}
function readSrcDirectory () {
return readdir('./')
}
function createTempDirectory () {
return mkdtemp('tmp')
}
function removeTempDirectory (directoryName) {
return remove(directoryName)
}
function copyFiles (files, drectoryName) {
return multiCp(files.map(file => ({
from: path.join('./', file),
to: path.join(drectoryName, file)
})))
}
function runScript (script, ...args) {
return new Promise((resolve, reject) => {
spawn(script, args, { stdio: 'inherit' })
.on('close', code => {
resolve(code === 0)
})
.on('error', reject)
})
}
module.exports = {
readPackageJSON,
writePackageJSON,
clearPackageJSON,
clearFilesList,
publish,
readSrcDirectory,
createTempDirectory,
removeTempDirectory,
copyFiles,
runScript
}