forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
56 lines (48 loc) · 2.09 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const fs = require('fs')
const path = require('path')
const { chain, get, groupBy } = require('lodash')
const schemasPath = path.join(__dirname, 'static/decorated')
const operations = {}
fs.readdirSync(schemasPath)
.forEach(filename => {
const key = filename.replace('.json', '')
const value = require(path.join(schemasPath, filename))
operations[key] = value
})
const allVersions = require('../all-versions')
const allVersionKeys = Object.keys(allVersions)
let allCategories = []
allVersionKeys.forEach(currentVersion => {
// Translate the versions from the openapi to versions used in the docs
const openApiVersion = allVersions[currentVersion].openApiVersionName
// Check that the openApiVersion is configured in OpenAPI
if (!operations[openApiVersion]) return
operations[currentVersion] = operations[openApiVersion]
delete operations[openApiVersion]
// This list is generated for use in the tests,
// so we can verify that the names of the markdown files
// in content/rest/reference/*.md are congruous with the
// set of REST resource names like activity, gists, repos, etc.
allCategories = allCategories.concat(chain(operations[currentVersion]).map('category').sort().uniq().value())
// Attach convenience properties to each operation that can't easily be created in Liquid
operations[currentVersion].forEach(operation => {
operation.hasRequiredPreviews = get(operation, 'x-github.previews', []).some(preview => preview.required)
})
})
// Get the unique set of categories
const categories = [...new Set(allCategories)]
// This is a collection of operations that have `enabledForGitHubApps = true`
// It's grouped by resource title to make rendering easier
const operationsEnabledForGitHubApps = allVersionKeys.reduce((acc, currentVersion) => {
acc[currentVersion] = chain(operations[currentVersion] || [])
.filter(operation => operation['x-github'].enabledForGitHubApps)
.orderBy('category')
.value()
acc[currentVersion] = groupBy(acc[currentVersion], 'category')
return acc
}, {})
module.exports = {
categories,
operations,
operationsEnabledForGitHubApps
}