UNPKG

apemandb

Version:
63 lines (55 loc) 1.72 kB
#!/usr/bin/env node /** * Format model files. */ 'use strict' process.chdir(`${__dirname}/..`) const aglob = require('aglob') const apeTasking = require('ape-tasking') const co = require('co') const path = require('path') const fs = require('fs') apeTasking.runTasks('format', [ () => co(function * () { const priorities = { topLevel: [ '$name', '$description', '$inherits', '$attributes', '$indices' ], attributes: [ '$comment', '$type', '$nullable', '$unique', '$default', '$convert' ] } let filenames = yield aglob('models/**/*.json') for (let filename of filenames) { let data = require(path.resolve(filename)) data.$inherits = data.$inherits || [] data.$attributes = data.$attributes || {} data.$indices = data.$indices || {} data = _sortProps(data, priorities.topLevel) for (let name of Object.keys(data.$attributes)) { data.$attributes[ name ] = _sortProps(data.$attributes[ name ], priorities.attributes) } yield new Promise((resolve, reject) => fs.writeFile(filename, JSON.stringify(data, null, 2), (err) => err ? rejecct(err) : resolve()) ) console.log(`File generated: ${filename}`) } }) ], true) function _sortProps (data, priorities) { return Object.keys(data) .sort((a, b) => _compare(a, b, priorities)) .reduce((result, name) => Object.assign(result, { [name]: data[ name ] }), {}) } function _compare (a, b, priorities) { return _compare.order(a, priorities) - _compare.order(b, priorities) } _compare.order = (value, priorities) => { let index = priorities.indexOf(value) if (index === -1) { return 9999 } return index }