Added API generation scripts
This commit is contained in:
72
scripts/run.js
Normal file
72
scripts/run.js
Normal file
@ -0,0 +1,72 @@
|
||||
'use strict'
|
||||
|
||||
const { join } = require('path')
|
||||
const { readdirSync, writeFileSync } = require('fs')
|
||||
const minimist = require('minimist')
|
||||
const semver = require('semver')
|
||||
const ora = require('ora')
|
||||
const rimraf = require('rimraf')
|
||||
const standard = require('standard')
|
||||
const { generate, cloneAndCheckout, genFactory } = require('./utils')
|
||||
|
||||
start(minimist(process.argv.slice(2), {
|
||||
string: ['tag']
|
||||
}))
|
||||
|
||||
function start (opts) {
|
||||
const log = ora('Loading Elasticsearch Repository').start()
|
||||
if (semver.valid(opts.tag) === null) {
|
||||
log.fail(`Missing or invalid tag: ${opts.tag}`)
|
||||
return
|
||||
}
|
||||
const packageFolder = join(__dirname, '..', 'api')
|
||||
const apiOutputFolder = join(packageFolder, 'api')
|
||||
const mainOutputFile = join(packageFolder, 'index.js')
|
||||
|
||||
log.text = 'Cleaning API folder...'
|
||||
rimraf.sync(join(apiOutputFolder, '*.js'))
|
||||
|
||||
cloneAndCheckout({ log, tag: opts.tag }, (err, apiFolder) => {
|
||||
if (err) {
|
||||
log.fail(err.message)
|
||||
return
|
||||
}
|
||||
const files = readdirSync(apiFolder)
|
||||
files.forEach(generateApiFile(apiFolder, log))
|
||||
writeFileSync(
|
||||
mainOutputFile,
|
||||
genFactory(apiOutputFolder),
|
||||
{ encoding: 'utf8' }
|
||||
)
|
||||
lintFiles(log)
|
||||
})
|
||||
|
||||
function generateApiFile (apiFolder, log) {
|
||||
var common = null
|
||||
try {
|
||||
common = require(join(apiFolder, '_common.json'))
|
||||
} catch (e) {}
|
||||
|
||||
return function _generateApiFile (file) {
|
||||
if (file === '_common.json') return
|
||||
log.text = `Processing ${file}`
|
||||
|
||||
const spec = require(join(apiFolder, file))
|
||||
const code = generate(spec, common)
|
||||
const filePath = join(apiOutputFolder, `${file.slice(0, file.lastIndexOf('.'))}.js`)
|
||||
|
||||
writeFileSync(filePath, code, { encoding: 'utf8' })
|
||||
}
|
||||
}
|
||||
|
||||
function lintFiles (log) {
|
||||
log.text = 'Linting...'
|
||||
const files = [join(packageFolder, '*.js'), join(apiOutputFolder, '*.js')]
|
||||
standard.lintFiles(files, { fix: true }, err => {
|
||||
if (err) {
|
||||
return log.fail(err.message)
|
||||
}
|
||||
log.succeed('Done!')
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user