mirror of
https://github.com/atom/atom.git
synced 2026-01-13 00:47:58 -05:00
56 lines
1.7 KiB
JavaScript
56 lines
1.7 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;
|
|
}
|