locize-cli 10.3.2 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +8 -0
- package/add.js +46 -51
- package/bin/locize +852 -493
- package/combineSubkeyPreprocessor.js +86 -85
- package/convertToDesiredFormat.js +125 -125
- package/convertToFlatFormat.js +154 -154
- package/copyVersion.js +37 -37
- package/createBranch.js +33 -33
- package/deleteBranch.js +52 -52
- package/deleteNamespace.js +20 -20
- package/download.js +286 -284
- package/filterNamespaces.js +5 -5
- package/format.js +101 -101
- package/formats.js +10 -10
- package/get.js +40 -37
- package/getBranches.js +22 -22
- package/getJob.js +22 -22
- package/getProjectStats.js +22 -22
- package/getRemoteLanguages.js +19 -19
- package/getRemoteNamespace.js +60 -56
- package/index.js +1 -1
- package/isValidUuid.js +2 -2
- package/mergeBranch.js +55 -55
- package/migrate.js +147 -149
- package/missing.js +90 -90
- package/package.json +4 -2
- package/parseLocalLanguage.js +110 -110
- package/parseLocalLanguages.js +14 -14
- package/parseLocalReference.js +6 -6
- package/publishVersion.js +34 -34
- package/removeUndefinedFromArrays.js +8 -8
- package/removeVersion.js +34 -34
- package/request.js +32 -32
- package/shouldUnflatten.js +11 -11
- package/sortFlatResources.js +7 -7
- package/sync.js +425 -421
- package/unflatten.js +40 -40
package/filterNamespaces.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
const filterNamespaces = (opt, nss) => {
|
|
2
2
|
if (opt.namespace) {
|
|
3
|
-
nss = nss.filter((ns) => ns.namespace === opt.namespace)
|
|
3
|
+
nss = nss.filter((ns) => ns.namespace === opt.namespace)
|
|
4
4
|
}
|
|
5
5
|
if (opt.namespaces && opt.namespaces.length > 0) {
|
|
6
|
-
nss = nss.filter((ns) => opt.namespaces.indexOf(ns.namespace) > -1)
|
|
6
|
+
nss = nss.filter((ns) => opt.namespaces.indexOf(ns.namespace) > -1)
|
|
7
7
|
}
|
|
8
|
-
return nss
|
|
9
|
-
}
|
|
8
|
+
return nss
|
|
9
|
+
}
|
|
10
10
|
|
|
11
|
-
module.exports = filterNamespaces
|
|
11
|
+
module.exports = filterNamespaces
|
package/format.js
CHANGED
|
@@ -1,206 +1,206 @@
|
|
|
1
|
-
const colors = require('colors')
|
|
2
|
-
const fs = require('fs')
|
|
3
|
-
const async = require('async')
|
|
4
|
-
const path = require('path')
|
|
5
|
-
const diff = require('diff')
|
|
6
|
-
const convertToFlatFormat = require('./convertToFlatFormat')
|
|
7
|
-
const convertToDesiredFormat = require('./convertToDesiredFormat')
|
|
8
|
-
const sortFlatResources = require('./sortFlatResources')
|
|
9
|
-
const formats = require('./formats')
|
|
10
|
-
const fileExtensionsMap = formats.fileExtensionsMap
|
|
11
|
-
const acceptedFileExtensions = formats.acceptedFileExtensions
|
|
12
|
-
const reversedFileExtensionsMap = formats.reversedFileExtensionsMap
|
|
1
|
+
const colors = require('colors')
|
|
2
|
+
const fs = require('fs')
|
|
3
|
+
const async = require('async')
|
|
4
|
+
const path = require('path')
|
|
5
|
+
const diff = require('diff')
|
|
6
|
+
const convertToFlatFormat = require('./convertToFlatFormat')
|
|
7
|
+
const convertToDesiredFormat = require('./convertToDesiredFormat')
|
|
8
|
+
const sortFlatResources = require('./sortFlatResources')
|
|
9
|
+
const formats = require('./formats')
|
|
10
|
+
const fileExtensionsMap = formats.fileExtensionsMap
|
|
11
|
+
const acceptedFileExtensions = formats.acceptedFileExtensions
|
|
12
|
+
const reversedFileExtensionsMap = formats.reversedFileExtensionsMap
|
|
13
13
|
|
|
14
14
|
const handleError = (err, cb) => {
|
|
15
15
|
if (!cb && err) {
|
|
16
|
-
console.error(colors.red(err.message))
|
|
17
|
-
process.exit(1)
|
|
16
|
+
console.error(colors.red(err.message))
|
|
17
|
+
process.exit(1)
|
|
18
18
|
}
|
|
19
|
-
if (cb) cb(err)
|
|
20
|
-
}
|
|
19
|
+
if (cb) cb(err)
|
|
20
|
+
}
|
|
21
21
|
|
|
22
22
|
const getFiles = (srcpath) => {
|
|
23
|
-
|
|
23
|
+
let files = []
|
|
24
24
|
fs.readdirSync(srcpath).forEach((file) => {
|
|
25
25
|
if (fs.statSync(path.join(srcpath, file)).isDirectory()) {
|
|
26
|
-
files = files.concat(getFiles(path.join(srcpath, file)))
|
|
26
|
+
files = files.concat(getFiles(path.join(srcpath, file)))
|
|
27
27
|
} else if (acceptedFileExtensions.indexOf(path.extname(file)) > -1) {
|
|
28
|
-
files.push(path.join(srcpath, file))
|
|
28
|
+
files.push(path.join(srcpath, file))
|
|
29
29
|
}
|
|
30
|
-
})
|
|
31
|
-
return files
|
|
32
|
-
}
|
|
30
|
+
})
|
|
31
|
+
return files
|
|
32
|
+
}
|
|
33
33
|
|
|
34
|
-
function readLocalFile(opt, fPath, clb) {
|
|
35
|
-
const fExt = path.extname(fPath)
|
|
36
|
-
const namespace = path.basename(fPath, fExt)
|
|
37
|
-
const splitted = fPath.split(path.sep)
|
|
38
|
-
const lng = splitted[splitted.length - 2]
|
|
34
|
+
function readLocalFile (opt, fPath, clb) {
|
|
35
|
+
const fExt = path.extname(fPath)
|
|
36
|
+
const namespace = path.basename(fPath, fExt)
|
|
37
|
+
const splitted = fPath.split(path.sep)
|
|
38
|
+
const lng = splitted[splitted.length - 2]
|
|
39
39
|
|
|
40
40
|
fs.readFile(fPath, (err, data) => {
|
|
41
|
-
if (err) return clb(err)
|
|
41
|
+
if (err) return clb(err)
|
|
42
42
|
|
|
43
43
|
fs.stat(fPath, (err, stat) => {
|
|
44
|
-
if (err) return clb(err)
|
|
44
|
+
if (err) return clb(err)
|
|
45
45
|
|
|
46
46
|
clb(null, {
|
|
47
|
-
namespace
|
|
47
|
+
namespace,
|
|
48
48
|
path: fPath,
|
|
49
49
|
extension: fExt,
|
|
50
50
|
original: data.toString(),
|
|
51
51
|
language: lng,
|
|
52
52
|
mtime: stat.mtime
|
|
53
|
-
})
|
|
54
|
-
})
|
|
55
|
-
})
|
|
53
|
+
})
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
function readLocalFiles(opt, filePaths, clb) {
|
|
58
|
+
function readLocalFiles (opt, filePaths, clb) {
|
|
59
59
|
async.map(filePaths, (filePath, cb) => {
|
|
60
|
-
readLocalFile(opt, filePath, cb)
|
|
61
|
-
}, clb)
|
|
60
|
+
readLocalFile(opt, filePath, cb)
|
|
61
|
+
}, clb)
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
function convertAllFilesToFlatFormat(opt, files, clb) {
|
|
64
|
+
function convertAllFilesToFlatFormat (opt, files, clb) {
|
|
65
65
|
async.map(files, (file, cb) => {
|
|
66
66
|
if (fileExtensionsMap[file.extension].indexOf(opt.format) < 0) {
|
|
67
|
-
return cb(new Error(`Format mismatch! Found ${fileExtensionsMap[file.extension][0]} but requested ${opt.format}!`))
|
|
67
|
+
return cb(new Error(`Format mismatch! Found ${fileExtensionsMap[file.extension][0]} but requested ${opt.format}!`))
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
convertToFlatFormat(opt, file.original, (err, content) => {
|
|
71
71
|
if (err) {
|
|
72
|
-
err.message = 'Invalid content for "' + opt.format + '" format!\n' + (err.message || '')
|
|
73
|
-
err.message += '\n' + file.path
|
|
74
|
-
return cb(err)
|
|
72
|
+
err.message = 'Invalid content for "' + opt.format + '" format!\n' + (err.message || '')
|
|
73
|
+
err.message += '\n' + file.path
|
|
74
|
+
return cb(err)
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
file.content = sortFlatResources(content)
|
|
78
|
-
cb(null, file)
|
|
79
|
-
})
|
|
80
|
-
}, clb)
|
|
77
|
+
file.content = sortFlatResources(content)
|
|
78
|
+
cb(null, file)
|
|
79
|
+
})
|
|
80
|
+
}, clb)
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
function convertAllFilesToDesiredFormat(opt, files, clb) {
|
|
83
|
+
function convertAllFilesToDesiredFormat (opt, files, clb) {
|
|
84
84
|
async.map(files, (file, cb) => {
|
|
85
85
|
convertToDesiredFormat(opt, file.namespace, file.language, file.content, file.mtime, (err, res) => {
|
|
86
86
|
if (err) {
|
|
87
|
-
err.message = 'Invalid content for "' + opt.format + '" format!\n' + (err.message || '')
|
|
88
|
-
return cb(err)
|
|
87
|
+
err.message = 'Invalid content for "' + opt.format + '" format!\n' + (err.message || '')
|
|
88
|
+
return cb(err)
|
|
89
89
|
}
|
|
90
|
-
res = (opt.format !== 'xlsx' && !res.endsWith('\n')) ? (res + '\n') : res
|
|
91
|
-
file.converted = res
|
|
92
|
-
cb(null, file)
|
|
93
|
-
})
|
|
94
|
-
}, clb)
|
|
90
|
+
res = (opt.format !== 'xlsx' && !res.endsWith('\n')) ? (res + '\n') : res
|
|
91
|
+
file.converted = res
|
|
92
|
+
cb(null, file)
|
|
93
|
+
})
|
|
94
|
+
}, clb)
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
function writeLocalFile(opt, file, clb) {
|
|
97
|
+
function writeLocalFile (opt, file, clb) {
|
|
98
98
|
if (file.converted === file.original) {
|
|
99
|
-
if (opt.noCallback) console.log(colors.grey(`${file.path} unchanged`))
|
|
100
|
-
return clb(null)
|
|
99
|
+
if (opt.noCallback) console.log(colors.grey(`${file.path} unchanged`))
|
|
100
|
+
return clb(null)
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
const d = diff.diffLines(file.original, file.converted)
|
|
103
|
+
const d = diff.diffLines(file.original, file.converted)
|
|
104
104
|
d.forEach((part) => {
|
|
105
105
|
// green for additions, red for deletions
|
|
106
106
|
// grey for common parts
|
|
107
|
-
const color = part.added ? 'green' : part.removed ? 'red' : 'grey'
|
|
108
|
-
if (opt.noCallback) console.log(part.value[color])
|
|
109
|
-
})
|
|
107
|
+
const color = part.added ? 'green' : part.removed ? 'red' : 'grey'
|
|
108
|
+
if (opt.noCallback) console.log(part.value[color])
|
|
109
|
+
})
|
|
110
110
|
|
|
111
|
-
if (opt.noCallback) console.log(colors.yellow(`reformatting ${file.path}...`))
|
|
111
|
+
if (opt.noCallback) console.log(colors.yellow(`reformatting ${file.path}...`))
|
|
112
112
|
if (opt.dry) {
|
|
113
|
-
if (opt.noCallback) console.log(colors.yellow(`would have reformatted ${file.path}...`))
|
|
114
|
-
return clb(null, true)
|
|
113
|
+
if (opt.noCallback) console.log(colors.yellow(`would have reformatted ${file.path}...`))
|
|
114
|
+
return clb(null, true)
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
const fileContent = (opt.format !== 'xlsx' && !file.converted.endsWith('\n')) ? (file.converted + '\n') : file.converted
|
|
117
|
+
const fileContent = (opt.format !== 'xlsx' && !file.converted.endsWith('\n')) ? (file.converted + '\n') : file.converted
|
|
118
118
|
|
|
119
|
-
fs.writeFile(file.path, fileContent, (err) => clb(err, true))
|
|
119
|
+
fs.writeFile(file.path, fileContent, (err) => clb(err, true))
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
function writeLocalFiles(opt, files, clb) {
|
|
122
|
+
function writeLocalFiles (opt, files, clb) {
|
|
123
123
|
async.map(files, (file, cb) => {
|
|
124
|
-
writeLocalFile(opt, file, cb)
|
|
125
|
-
}, clb)
|
|
124
|
+
writeLocalFile(opt, file, cb)
|
|
125
|
+
}, clb)
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
function processFiles(opt, filePaths, clb) {
|
|
128
|
+
function processFiles (opt, filePaths, clb) {
|
|
129
129
|
readLocalFiles(opt, filePaths, (err, orgFiles) => {
|
|
130
|
-
if (err) return clb(err)
|
|
130
|
+
if (err) return clb(err)
|
|
131
131
|
|
|
132
132
|
if (!opt.format) {
|
|
133
133
|
if (orgFiles.length === 0) {
|
|
134
|
-
return clb(new Error('Please provide a format!'))
|
|
134
|
+
return clb(new Error('Please provide a format!'))
|
|
135
135
|
}
|
|
136
136
|
// guess format
|
|
137
|
-
opt.format = fileExtensionsMap[orgFiles[0].extension][0]
|
|
138
|
-
if (opt.noCallback) console.log(colors.bgYellow(`No format argument was passed, so guessing "${opt.format}" format.`))
|
|
137
|
+
opt.format = fileExtensionsMap[orgFiles[0].extension][0]
|
|
138
|
+
if (opt.noCallback) console.log(colors.bgYellow(`No format argument was passed, so guessing "${opt.format}" format.`))
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
convertAllFilesToFlatFormat(opt, orgFiles, (err, files) => {
|
|
142
|
-
if (err) return clb(err)
|
|
142
|
+
if (err) return clb(err)
|
|
143
143
|
|
|
144
144
|
opt.getNamespace = (o, lng, ns, cb) => {
|
|
145
|
-
const foundOrgFile = orgFiles.find((f) => f.namespace === ns && f.language === lng)
|
|
145
|
+
const foundOrgFile = orgFiles.find((f) => f.namespace === ns && f.language === lng)
|
|
146
146
|
if (!foundOrgFile) {
|
|
147
|
-
return cb(new Error(`No file found for language "${lng}" and namespace "${ns}" locally!`))
|
|
147
|
+
return cb(new Error(`No file found for language "${lng}" and namespace "${ns}" locally!`))
|
|
148
148
|
}
|
|
149
|
-
cb(null, foundOrgFile.content, foundOrgFile.mtime)
|
|
150
|
-
}
|
|
149
|
+
cb(null, foundOrgFile.content, foundOrgFile.mtime)
|
|
150
|
+
}
|
|
151
151
|
|
|
152
152
|
// just the value
|
|
153
153
|
files.forEach((f) => {
|
|
154
154
|
if (f.content) {
|
|
155
155
|
Object.keys(f.content).forEach((k) => {
|
|
156
156
|
if (f.content[k] && typeof f.content[k] === 'object' && f.content[k].value !== undefined) {
|
|
157
|
-
f.content[k] = f.content[k].value
|
|
157
|
+
f.content[k] = f.content[k].value
|
|
158
158
|
}
|
|
159
|
-
})
|
|
159
|
+
})
|
|
160
160
|
}
|
|
161
|
-
})
|
|
161
|
+
})
|
|
162
162
|
|
|
163
163
|
convertAllFilesToDesiredFormat(opt, files, (err, convertedFiles) => {
|
|
164
|
-
if (err) return clb(err)
|
|
164
|
+
if (err) return clb(err)
|
|
165
165
|
|
|
166
|
-
writeLocalFiles(opt, convertedFiles, clb)
|
|
167
|
-
})
|
|
168
|
-
})
|
|
169
|
-
})
|
|
166
|
+
writeLocalFiles(opt, convertedFiles, clb)
|
|
167
|
+
})
|
|
168
|
+
})
|
|
169
|
+
})
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
const format = (opt, cb) => {
|
|
173
173
|
if (opt.format && !reversedFileExtensionsMap[opt.format]) {
|
|
174
|
-
return handleError(new Error(`${opt.format} is not a valid format!`), cb)
|
|
174
|
+
return handleError(new Error(`${opt.format} is not a valid format!`), cb)
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
opt.noCallback = !cb
|
|
177
|
+
opt.noCallback = !cb
|
|
178
178
|
|
|
179
179
|
fs.lstat(opt.fileOrDirectory, (err, stat) => {
|
|
180
|
-
if (err) return handleError(err, cb)
|
|
180
|
+
if (err) return handleError(err, cb)
|
|
181
181
|
|
|
182
|
-
const isDirectory = stat.isDirectory()
|
|
182
|
+
const isDirectory = stat.isDirectory()
|
|
183
183
|
|
|
184
|
-
|
|
184
|
+
let filePaths = []
|
|
185
185
|
if (isDirectory) {
|
|
186
186
|
try {
|
|
187
|
-
filePaths = getFiles(opt.fileOrDirectory)
|
|
187
|
+
filePaths = getFiles(opt.fileOrDirectory)
|
|
188
188
|
} catch (err) {}
|
|
189
189
|
} else {
|
|
190
|
-
filePaths = [opt.fileOrDirectory]
|
|
190
|
+
filePaths = [opt.fileOrDirectory]
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
processFiles(opt, filePaths, (err, writeResults) => {
|
|
194
|
-
if (err) return handleError(err, cb)
|
|
194
|
+
if (err) return handleError(err, cb)
|
|
195
195
|
if (!cb) {
|
|
196
|
-
console.log(colors.green('FINISHED'))
|
|
196
|
+
console.log(colors.green('FINISHED'))
|
|
197
197
|
if (opt.dry && writeResults.find((wr) => !!wr)) {
|
|
198
|
-
process.exit(1)
|
|
198
|
+
process.exit(1)
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
|
-
if (cb) cb(null)
|
|
202
|
-
})
|
|
203
|
-
})
|
|
204
|
-
}
|
|
201
|
+
if (cb) cb(null)
|
|
202
|
+
})
|
|
203
|
+
})
|
|
204
|
+
}
|
|
205
205
|
|
|
206
|
-
module.exports = format
|
|
206
|
+
module.exports = format
|
package/formats.js
CHANGED
|
@@ -15,19 +15,19 @@ const fileExtensionsMap = {
|
|
|
15
15
|
'.php': ['laravel'],
|
|
16
16
|
'.properties': ['properties'],
|
|
17
17
|
'.xcstrings': ['xcstrings']
|
|
18
|
-
}
|
|
18
|
+
}
|
|
19
19
|
|
|
20
|
-
const acceptedFileExtensions = Object.keys(fileExtensionsMap)
|
|
20
|
+
const acceptedFileExtensions = Object.keys(fileExtensionsMap)
|
|
21
21
|
|
|
22
|
-
const reversedFileExtensionsMap = {}
|
|
22
|
+
const reversedFileExtensionsMap = {}
|
|
23
23
|
acceptedFileExtensions.forEach((ext) => {
|
|
24
24
|
fileExtensionsMap[ext].forEach((format) => {
|
|
25
|
-
reversedFileExtensionsMap[format] = ext
|
|
26
|
-
})
|
|
27
|
-
})
|
|
25
|
+
reversedFileExtensionsMap[format] = ext
|
|
26
|
+
})
|
|
27
|
+
})
|
|
28
28
|
|
|
29
29
|
module.exports = {
|
|
30
|
-
fileExtensionsMap
|
|
31
|
-
acceptedFileExtensions
|
|
32
|
-
reversedFileExtensionsMap
|
|
33
|
-
}
|
|
30
|
+
fileExtensionsMap,
|
|
31
|
+
acceptedFileExtensions,
|
|
32
|
+
reversedFileExtensionsMap
|
|
33
|
+
}
|
package/get.js
CHANGED
|
@@ -1,78 +1,81 @@
|
|
|
1
|
-
const colors = require('colors')
|
|
2
|
-
const request = require('./request')
|
|
3
|
-
const flatten = require('flat')
|
|
1
|
+
const colors = require('colors')
|
|
2
|
+
const request = require('./request')
|
|
3
|
+
const flatten = require('flat')
|
|
4
4
|
|
|
5
5
|
const get = (opt, cb) => {
|
|
6
|
-
const url = opt.
|
|
6
|
+
const url = `${opt.apiEndpoint}/{{projectId}}/{{version}}/{{lng}}/{{ns}}`
|
|
7
7
|
.replace('{{projectId}}', opt.projectId)
|
|
8
8
|
.replace('{{ver}}', opt.version)
|
|
9
9
|
.replace('{{version}}', opt.version)
|
|
10
10
|
.replace('{{language}}', opt.language)
|
|
11
11
|
.replace('{{lng}}', opt.language)
|
|
12
12
|
.replace('{{ns}}', opt.namespace)
|
|
13
|
-
.replace('{{namespace}}', opt.namespace)
|
|
13
|
+
.replace('{{namespace}}', opt.namespace)
|
|
14
14
|
|
|
15
15
|
// if (!cb) console.log(colors.yellow(`getting ${opt.key} from ${opt.version}/${opt.language}/${opt.namespace}...`));
|
|
16
16
|
|
|
17
17
|
if (opt.key && opt.key.indexOf(',') > 0 && opt.key.indexOf(' ') < 0) {
|
|
18
|
-
opt.keys = opt.key.split(',')
|
|
19
|
-
delete opt.key
|
|
18
|
+
opt.keys = opt.key.split(',')
|
|
19
|
+
delete opt.key
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
request(url
|
|
22
|
+
request(`${url}${opt.cdnType === 'standard' ? '?cache=no' : ''}`, {
|
|
23
23
|
method: 'get'
|
|
24
24
|
}, (err, res, obj) => {
|
|
25
25
|
if (err) {
|
|
26
|
-
if (!cb) console.log(colors.red(`get failed for ${opt.key || opt.keys.join(', ')} from ${opt.version}/${opt.language}/${opt.namespace}...`))
|
|
26
|
+
if (!cb) console.log(colors.red(`get failed for ${opt.key || opt.keys.join(', ')} from ${opt.version}/${opt.language}/${opt.namespace}...`))
|
|
27
27
|
if (err) {
|
|
28
|
-
if (!cb) { console.error(colors.red(err.message)); process.exit(1)
|
|
29
|
-
if (cb) cb(err)
|
|
30
|
-
return
|
|
28
|
+
if (!cb) { console.error(colors.red(err.message)); process.exit(1) }
|
|
29
|
+
if (cb) cb(err)
|
|
30
|
+
return
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (cb)
|
|
36
|
-
|
|
33
|
+
const ignore404 = res.status === 404 && opt.cdnType === 'standard'
|
|
34
|
+
if (res.status >= 300 && !ignore404) {
|
|
35
|
+
if (!cb) { console.error(colors.red(res.statusText + ' (' + res.status + ')')); process.exit(1) }
|
|
36
|
+
if (cb) cb(new Error(res.statusText + ' (' + res.status + ')'))
|
|
37
|
+
return
|
|
37
38
|
}
|
|
38
39
|
// if (!cb) console.log(colors.green(`got ${opt.opt.key || opt.keys.join(', ')} from ${opt.version}/${opt.language}/${opt.namespace}...`));
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
if (ignore404) obj = {}
|
|
42
|
+
|
|
43
|
+
const flat = flatten(obj)
|
|
41
44
|
if (opt.key) {
|
|
42
45
|
if (!flat[opt.key]) {
|
|
43
|
-
if (!cb) { console.error(colors.red(`${opt.key} not found in ${opt.version}/${opt.language}/${opt.namespace} => ${JSON.stringify(obj, null, 2)}`)); process.exit(1)
|
|
44
|
-
if (cb) cb(new Error(`${opt.key} not found in ${opt.version}/${opt.language}/${opt.namespace} => ${JSON.stringify(obj, null, 2)}`))
|
|
45
|
-
return
|
|
46
|
+
if (!cb) { console.error(colors.red(`${opt.key} not found in ${opt.version}/${opt.language}/${opt.namespace} => ${JSON.stringify(obj, null, 2)}`)); process.exit(1) }
|
|
47
|
+
if (cb) cb(new Error(`${opt.key} not found in ${opt.version}/${opt.language}/${opt.namespace} => ${JSON.stringify(obj, null, 2)}`))
|
|
48
|
+
return
|
|
46
49
|
}
|
|
47
|
-
if (!cb) console.log(flat[opt.key])
|
|
50
|
+
if (!cb) console.log(flat[opt.key])
|
|
48
51
|
}
|
|
49
52
|
if (opt.keys) {
|
|
50
|
-
const ret = {}
|
|
51
|
-
const retWitAllKeys = {}
|
|
53
|
+
const ret = {}
|
|
54
|
+
const retWitAllKeys = {}
|
|
52
55
|
opt.keys.forEach((k) => {
|
|
53
56
|
if (flat[k] !== undefined) {
|
|
54
|
-
ret[k] = flat[k]
|
|
57
|
+
ret[k] = flat[k]
|
|
55
58
|
}
|
|
56
|
-
retWitAllKeys[k] = flat[k]
|
|
57
|
-
})
|
|
58
|
-
const retKeys = Object.keys(ret)
|
|
59
|
+
retWitAllKeys[k] = flat[k]
|
|
60
|
+
})
|
|
61
|
+
const retKeys = Object.keys(ret)
|
|
59
62
|
if (retKeys.length === 0) {
|
|
60
|
-
if (!cb) { console.error(colors.red(`${opt.keys.join(', ')} not found in ${opt.version}/${opt.language}/${opt.namespace} => ${JSON.stringify(obj, null, 2)}`)); process.exit(1)
|
|
61
|
-
if (cb) cb(new Error(`${opt.keys.join(', ')} not found in ${opt.version}/${opt.language}/${opt.namespace} => ${JSON.stringify(obj, null, 2)}`))
|
|
62
|
-
return
|
|
63
|
+
if (!cb) { console.error(colors.red(`${opt.keys.join(', ')} not found in ${opt.version}/${opt.language}/${opt.namespace} => ${JSON.stringify(obj, null, 2)}`)); process.exit(1) }
|
|
64
|
+
if (cb) cb(new Error(`${opt.keys.join(', ')} not found in ${opt.version}/${opt.language}/${opt.namespace} => ${JSON.stringify(obj, null, 2)}`))
|
|
65
|
+
return
|
|
63
66
|
}
|
|
64
67
|
if (!cb) {
|
|
65
68
|
if (console.table) {
|
|
66
|
-
console.table(retWitAllKeys)
|
|
69
|
+
console.table(retWitAllKeys)
|
|
67
70
|
} else {
|
|
68
71
|
opt.keys.forEach((k) => {
|
|
69
|
-
console.log(`${k}\t=>\t${ret[k] || ''}`)
|
|
70
|
-
})
|
|
72
|
+
console.log(`${k}\t=>\t${ret[k] || ''}`)
|
|
73
|
+
})
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
|
-
if (cb) cb(null)
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
+
if (cb) cb(null)
|
|
78
|
+
})
|
|
79
|
+
}
|
|
77
80
|
|
|
78
|
-
module.exports = get
|
|
81
|
+
module.exports = get
|
package/getBranches.js
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
const colors = require('colors')
|
|
2
|
-
const request = require('./request')
|
|
1
|
+
const colors = require('colors')
|
|
2
|
+
const request = require('./request')
|
|
3
3
|
|
|
4
4
|
const getBranches = (opt, cb) => {
|
|
5
|
-
request(opt.
|
|
5
|
+
request(opt.apiEndpoint + '/branches/' + opt.projectId, {
|
|
6
6
|
method: 'get',
|
|
7
7
|
headers: {
|
|
8
|
-
|
|
8
|
+
Authorization: opt.apiKey
|
|
9
9
|
}
|
|
10
10
|
}, (err, res, obj) => {
|
|
11
11
|
if (err || (obj && (obj.errorMessage || obj.message))) {
|
|
12
|
-
if (!cb) console.log(colors.red('getting branches failed...'))
|
|
12
|
+
if (!cb) console.log(colors.red('getting branches failed...'))
|
|
13
13
|
|
|
14
14
|
if (err) {
|
|
15
|
-
if (!cb) { console.error(colors.red(err.message)); process.exit(1)
|
|
16
|
-
if (cb) cb(err)
|
|
17
|
-
return
|
|
15
|
+
if (!cb) { console.error(colors.red(err.message)); process.exit(1) }
|
|
16
|
+
if (cb) cb(err)
|
|
17
|
+
return
|
|
18
18
|
}
|
|
19
19
|
if (obj && (obj.errorMessage || obj.message)) {
|
|
20
|
-
if (!cb) { console.error(colors.red((obj.errorMessage || obj.message))); process.exit(1)
|
|
21
|
-
if (cb) cb(new Error((obj.errorMessage || obj.message)))
|
|
22
|
-
return
|
|
20
|
+
if (!cb) { console.error(colors.red((obj.errorMessage || obj.message))); process.exit(1) }
|
|
21
|
+
if (cb) cb(new Error((obj.errorMessage || obj.message)))
|
|
22
|
+
return
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
if (res.status === 404) {
|
|
26
|
-
if (!cb) { console.error(colors.yellow(res.statusText + ' (' + res.status + ')')); process.exit(1)
|
|
27
|
-
if (cb) cb(null, null)
|
|
28
|
-
return
|
|
26
|
+
if (!cb) { console.error(colors.yellow(res.statusText + ' (' + res.status + ')')); process.exit(1) }
|
|
27
|
+
if (cb) cb(null, null)
|
|
28
|
+
return
|
|
29
29
|
}
|
|
30
30
|
if (res.status >= 300) {
|
|
31
|
-
if (!cb) { console.error(colors.red(res.statusText + ' (' + res.status + ')')); process.exit(1)
|
|
32
|
-
if (cb) cb(new Error(res.statusText + ' (' + res.status + ')'))
|
|
33
|
-
return
|
|
31
|
+
if (!cb) { console.error(colors.red(res.statusText + ' (' + res.status + ')')); process.exit(1) }
|
|
32
|
+
if (cb) cb(new Error(res.statusText + ' (' + res.status + ')'))
|
|
33
|
+
return
|
|
34
34
|
}
|
|
35
|
-
if (!cb) console.log(colors.green('getting branches successful'))
|
|
36
|
-
if (cb) cb(null, obj)
|
|
37
|
-
})
|
|
38
|
-
}
|
|
35
|
+
if (!cb) console.log(colors.green('getting branches successful'))
|
|
36
|
+
if (cb) cb(null, obj)
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
39
|
|
|
40
|
-
module.exports = getBranches
|
|
40
|
+
module.exports = getBranches
|
package/getJob.js
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
const colors = require('colors')
|
|
2
|
-
const request = require('./request')
|
|
1
|
+
const colors = require('colors')
|
|
2
|
+
const request = require('./request')
|
|
3
3
|
|
|
4
4
|
const getJob = (opt, jobId, cb) => {
|
|
5
|
-
request(opt.
|
|
5
|
+
request(opt.apiEndpoint + '/jobs/' + opt.projectId + '/' + jobId, {
|
|
6
6
|
method: 'get',
|
|
7
7
|
headers: {
|
|
8
|
-
|
|
8
|
+
Authorization: opt.apiKey
|
|
9
9
|
}
|
|
10
10
|
}, (err, res, obj) => {
|
|
11
11
|
if (err || (obj && (obj.errorMessage || obj.message))) {
|
|
12
|
-
if (!cb) console.log(colors.red('getting job failed...'))
|
|
12
|
+
if (!cb) console.log(colors.red('getting job failed...'))
|
|
13
13
|
|
|
14
14
|
if (err) {
|
|
15
|
-
if (!cb) { console.error(colors.red(err.message)); process.exit(1)
|
|
16
|
-
if (cb) cb(err)
|
|
17
|
-
return
|
|
15
|
+
if (!cb) { console.error(colors.red(err.message)); process.exit(1) }
|
|
16
|
+
if (cb) cb(err)
|
|
17
|
+
return
|
|
18
18
|
}
|
|
19
19
|
if (obj && (obj.errorMessage || obj.message)) {
|
|
20
|
-
if (!cb) { console.error(colors.red((obj.errorMessage || obj.message))); process.exit(1)
|
|
21
|
-
if (cb) cb(new Error((obj.errorMessage || obj.message)))
|
|
22
|
-
return
|
|
20
|
+
if (!cb) { console.error(colors.red((obj.errorMessage || obj.message))); process.exit(1) }
|
|
21
|
+
if (cb) cb(new Error((obj.errorMessage || obj.message)))
|
|
22
|
+
return
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
if (res.status === 404) {
|
|
26
|
-
if (!cb) { console.error(colors.yellow(res.statusText + ' (' + res.status + ')')); process.exit(1)
|
|
27
|
-
if (cb) cb(null, null)
|
|
28
|
-
return
|
|
26
|
+
if (!cb) { console.error(colors.yellow(res.statusText + ' (' + res.status + ')')); process.exit(1) }
|
|
27
|
+
if (cb) cb(null, null)
|
|
28
|
+
return
|
|
29
29
|
}
|
|
30
30
|
if (res.status >= 300) {
|
|
31
|
-
if (!cb) { console.error(colors.red(res.statusText + ' (' + res.status + ')')); process.exit(1)
|
|
32
|
-
if (cb) cb(new Error(res.statusText + ' (' + res.status + ')'))
|
|
33
|
-
return
|
|
31
|
+
if (!cb) { console.error(colors.red(res.statusText + ' (' + res.status + ')')); process.exit(1) }
|
|
32
|
+
if (cb) cb(new Error(res.statusText + ' (' + res.status + ')'))
|
|
33
|
+
return
|
|
34
34
|
}
|
|
35
|
-
if (!cb) console.log(colors.green('getting job successful'))
|
|
36
|
-
if (cb) cb(null, obj)
|
|
37
|
-
})
|
|
38
|
-
}
|
|
35
|
+
if (!cb) console.log(colors.green('getting job successful'))
|
|
36
|
+
if (cb) cb(null, obj)
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
39
|
|
|
40
|
-
module.exports = getJob
|
|
40
|
+
module.exports = getJob
|