mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 15:37:46 +03:00
54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
'use strict'
|
|
|
|
const donna = require('donna')
|
|
const tello = require('tello')
|
|
const joanna = require('joanna')
|
|
const glob = require('glob')
|
|
const fs = require('fs-extra')
|
|
const path = require('path')
|
|
|
|
const CONFIG = require('../config')
|
|
|
|
module.exports = function () {
|
|
const generatedJSONPath = path.join(CONFIG.docsOutputPath, 'atom-api.json')
|
|
console.log(`Generating API docs at ${generatedJSONPath}`)
|
|
|
|
// Unfortunately, correct relative paths depend on a specific working
|
|
// directory, but this script should be able to run from anywhere, so we
|
|
// muck with the cwd temporarily.
|
|
const oldWorkingDirectoryPath = process.cwd()
|
|
process.chdir(CONFIG.repositoryRootPath)
|
|
const coffeeMetadata = donna.generateMetadata(['.'])[0]
|
|
const jsMetadata = joanna(glob.sync(`src/**/*.js`))
|
|
process.chdir(oldWorkingDirectoryPath)
|
|
|
|
const metadata = {
|
|
repository: coffeeMetadata.repository,
|
|
version: coffeeMetadata.version,
|
|
files: Object.assign(coffeeMetadata.files, jsMetadata.files)
|
|
}
|
|
|
|
const api = tello.digest([metadata])
|
|
Object.assign(api.classes, getAPIDocsForDependencies())
|
|
api.classes = sortObjectByKey(api.classes)
|
|
|
|
fs.mkdirpSync(CONFIG.docsOutputPath)
|
|
fs.writeFileSync(generatedJSONPath, JSON.stringify(api, null, 2))
|
|
}
|
|
|
|
function getAPIDocsForDependencies () {
|
|
const classes = {}
|
|
for (let apiJSONPath of glob.sync(`${CONFIG.repositoryRootPath}/node_modules/*/api.json`)) {
|
|
Object.assign(classes, require(apiJSONPath).classes)
|
|
}
|
|
return classes
|
|
}
|
|
|
|
function sortObjectByKey (object) {
|
|
const sortedObject = {}
|
|
for (let keyName of Object.keys(object).sort()) {
|
|
sortedObject[keyName] = object[keyName]
|
|
}
|
|
return sortedObject
|
|
}
|