Skip to content

Commit 29bfb1e

Browse files
committed
make docs work for EmberData
1 parent 37709b2 commit 29bfb1e

File tree

6 files changed

+117
-104
lines changed

6 files changed

+117
-104
lines changed

generate-local.js

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import minimist from 'minimist'
66
import path from 'path'
77
import 'hard-rejection/register'
88

9+
import { apiDocsProcessor } from './main'
10+
911
const argv = minimist(process.argv.slice(2))
1012

1113
const { project, version, install, build } = argv
@@ -91,13 +93,5 @@ const runCmd = async (cmd, path) => {
9193

9294
await buildDocs(dirMap[project])
9395

94-
await execa('yarn', [
95-
'start',
96-
'--project',
97-
project,
98-
'--version',
99-
version,
100-
'--ignorePreviouslyIndexedDoc',
101-
'--no-sync'
102-
]).stdout.pipe(process.stdout)
96+
await apiDocsProcessor([project], [version], true, false, true)
10397
})()

lib/markup.js

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,48 @@
1-
import marked from 'marked'
1+
import { marked } from 'marked'
22
import hljs from 'highlight.js'
33
import cheerio from 'cheerio'
44

55
marked.setOptions({
66
highlight: code => hljs.highlightAuto(code).value,
77
})
88

9-
export default doc => {
10-
doc.data.forEach(({ id, attributes }) => {
11-
console.log(`Generating markup for ${id}`)
9+
export default function (doc) {
10+
console.log('transforming markup for document')
11+
for (const data of doc.data) {
12+
const { id, attributes } = data
13+
console.log(`\tGenerating markup for ${id}`)
1214

13-
let description = attributes.description
15+
try {
16+
const description = attributes.description
1417

15-
if (description) {
16-
attributes.description = highlight(description)
17-
}
18+
if (description) {
19+
// eslint-disable-next-line require-atomic-updates
20+
attributes.description = highlight(description)
21+
}
1822

19-
replaceDescriptionFor(attributes.methods)
20-
replaceDescriptionFor(attributes.properties)
21-
replaceDescriptionFor(attributes.events)
22-
})
23+
// console.log('\tcompleted highlighting')
24+
25+
replaceDescriptionFor(attributes.methods)
26+
replaceDescriptionFor(attributes.properties)
27+
replaceDescriptionFor(attributes.events)
28+
// console.log(`\tMarkup Generated for ${id}\n`)
29+
} catch (e) {
30+
console.log(`Error generating markup for ${id}`)
31+
console.log(e)
32+
process.exit(1)
33+
}
34+
}
2335

36+
console.log('completed markup transformation for document')
2437
return doc
2538
}
2639

2740
function replaceDescriptionFor(items) {
2841
if (items) {
29-
items.forEach(item => {
42+
items.map(item => {
3043
let itemDescription = item.description
3144
if (itemDescription) {
45+
// eslint-disable-next-line require-atomic-updates
3246
item.description = highlight(itemDescription)
3347
}
3448
})
@@ -41,7 +55,7 @@ function highlight(description) {
4155
return String.fromCharCode(dec)
4256
})
4357
}
44-
let markedup = removeHLJSPrefix(marked(description))
58+
let markedup = removeHLJSPrefix(marked.parse(description))
4559
let $ = cheerio.load(markedup)
4660

4761
let codeBlocks = $('pre code')

lib/transform-yui-object.js

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,14 @@ import transformModules from './modules-transform'
22
import addInheritedItems from './add-inherited-items'
33
import normalizeIDs from './normalize-ids'
44

5-
export default function transformYuiObject(docs, projName) {
6-
return transformModules(docs)
7-
.then(d => {
8-
console.log('transformed', d)
9-
let doc = addInheritedItems(d)
10-
console.log('added inherited')
11-
return doc
12-
})
13-
.then(d => {
14-
let doc = normalizeIDs(d, projName)
15-
console.log('normalized ids')
16-
return doc
17-
})
18-
.catch(e => {
19-
console.error(e)
20-
throw e
21-
})
5+
export default async function transformYuiObject(docs, projName) {
6+
let d = await transformModules(docs)
7+
console.log('\ttransformed yui object')
8+
d = await addInheritedItems(d)
9+
console.log('\tadded inherited')
10+
11+
d = await normalizeIDs(d, projName)
12+
console.log('\tnormalized ids')
13+
14+
return d
2215
}

main.js

Lines changed: 66 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,68 @@ import revProjVersionFiles from './lib/rev-docs'
1414
import { downloadExistingDocsToLocal, uploadDocsToS3 } from './lib/s3-sync'
1515
import fixBorkedYuidocFiles from './lib/fix-borked-yuidoc-files'
1616

17+
async function transformObject(doc, projectName, docVersion) {
18+
try {
19+
const object = await transformYuiObject([doc], projectName)
20+
const { data } = markup(object)
21+
const giantDocument = { data }
22+
console.log('normalizing dependencies')
23+
let transformed = await normalizeEmberDependencies(giantDocument)
24+
transformed = await createClassesOnDisk(transformed, projectName, docVersion)
25+
console.log(`Finished processing ${projectName}-${docVersion}`)
26+
transformed = getVersionIndex(transformed, projectName)
27+
revProjVersionFiles(projectName, docVersion)
28+
return transformed
29+
} catch (e) {
30+
console.log(e)
31+
throw e
32+
}
33+
}
34+
35+
async function transformProject(project, projectName) {
36+
const docs = await RSVP.map(project, doc => {
37+
let docVersion = doc.version
38+
console.log(`Starting to process ${projectName}-${docVersion}`)
39+
40+
const existingFolder = `tmp/json-docs/${projectName}/${docVersion}`
41+
if (fs.existsSync(existingFolder)) {
42+
rimraf.sync(existingFolder)
43+
}
44+
45+
return transformObject(doc, projectName, docVersion)
46+
}).catch((e) => {
47+
console.log(e)
48+
console.error('wat')
49+
})
50+
51+
let [docToSave, ...remainingDocs] = docs.filter(({ data }) => data.id === projectName)
52+
53+
if (!docToSave) {
54+
return Promise.resolve()
55+
}
56+
57+
let existingDoc = `tmp/json-docs/${projectName}/projects/${projectName}.json`
58+
if (fs.existsSync(existingDoc)) {
59+
existingDoc = fs.readJsonSync(existingDoc)
60+
docToSave.data.relationships['project-versions'].data = docToSave.data.relationships[
61+
'project-versions'
62+
].data.concat(existingDoc.data.relationships['project-versions'].data)
63+
}
64+
65+
remainingDocs.forEach(({ data }) => {
66+
docToSave.data.relationships['project-versions'].data = docToSave.data.relationships[
67+
'project-versions'
68+
].data.concat(data.relationships['project-versions'].data)
69+
})
70+
return saveDoc(docToSave, projectName).then(() => projectName)
71+
}
72+
73+
function transformProjectsDeep(projects, docs) {
74+
return RSVP.map(projects, projectName => {
75+
return transformProject(docs[projectName], projectName)
76+
})
77+
}
78+
1779
export async function apiDocsProcessor(
1880
projects,
1981
specificDocsVersion,
@@ -38,62 +100,12 @@ export async function apiDocsProcessor(
38100
console.log('Skipping downloading docs')
39101
}
40102

41-
await readDocs(projects, specificDocsVersion, ignorePreviouslyIndexedDoc, runClean)
42-
.then(docs => {
43-
return RSVP.map(projects, projectName => {
44-
return RSVP.map(docs[projectName], doc => {
45-
let docVersion = doc.version
46-
console.log(`Starting to process ${projectName}-${docVersion}`)
47-
48-
const existingFolder = `tmp/json-docs/${projectName}/${docVersion}`
49-
if (fs.existsSync(existingFolder)) {
50-
rimraf.sync(existingFolder)
51-
}
103+
const _transformProjectsDeep = transformProjectsDeep.bind(null, projects)
52104

53-
return transformYuiObject([doc], projectName)
54-
.then(markup)
55-
.then(({ data }) => {
56-
let giantDocument = { data }
57-
console.log('normalizing dependencies')
58-
return normalizeEmberDependencies(giantDocument)
59-
})
60-
.then(doc => {
61-
return createClassesOnDisk(doc, projectName, docVersion)
62-
})
63-
.then(doc => {
64-
console.log(`Finished processing ${projectName}-${docVersion}`)
65-
return getVersionIndex(doc, projectName)
66-
})
67-
.then(doc => {
68-
revProjVersionFiles(projectName, docVersion)
69-
return doc
70-
})
71-
}).then(docs => {
72-
let [docToSave, ...remainingDocs] = docs.filter(({ data }) => data.id === projectName)
73-
74-
if (!docToSave) {
75-
return Promise.resolve()
76-
}
77-
78-
let existingDoc = `tmp/json-docs/${projectName}/projects/${projectName}.json`
79-
if (fs.existsSync(existingDoc)) {
80-
existingDoc = fs.readJsonSync(existingDoc)
81-
docToSave.data.relationships['project-versions'].data = docToSave.data.relationships[
82-
'project-versions'
83-
].data.concat(existingDoc.data.relationships['project-versions'].data)
84-
}
85-
86-
remainingDocs.forEach(({ data }) => {
87-
docToSave.data.relationships['project-versions'].data = docToSave.data.relationships[
88-
'project-versions'
89-
].data.concat(data.relationships['project-versions'].data)
90-
})
91-
return saveDoc(docToSave, projectName).then(() => projectName)
92-
})
93-
})
94-
})
105+
await readDocs(projects, specificDocsVersion, ignorePreviouslyIndexedDoc, runClean)
106+
.then(_transformProjectsDeep)
95107
.then(() =>
96-
['ember', 'ember-data'].map(project => {
108+
projects.map(project => {
97109
const projRevFile = `tmp/rev-index/${project}.json`
98110
let projRevFileContent = fs.readJsonSync(
99111
`tmp/json-docs/${project}/projects/${project}.json`

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@
4040
"fs-extra": "^8.1.0",
4141
"glob": "^7.1.4",
4242
"hard-rejection": "^2.1.0",
43-
"highlight.js": "^10.4.1",
43+
"highlight.js": "^11.7.0",
4444
"http-server": "^0.11.1",
4545
"inflected": "^2.0.4",
4646
"keyfinder": "^1.0.0",
4747
"lodash": "^4.17.21",
48-
"marked": "^0.7.0",
48+
"marked": "^4.3.0",
4949
"minimist": "^1.2.6",
5050
"mkdir-promise": "^1.0.0",
5151
"mkdirp": "^0.5.1",

yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,10 +1236,10 @@ [email protected], he@^1.1.1:
12361236
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
12371237
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
12381238

1239-
highlight.js@^10.4.1:
1240-
version "10.4.1"
1241-
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.1.tgz#d48fbcf4a9971c4361b3f95f302747afe19dbad0"
1242-
integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg==
1239+
highlight.js@^11.7.0:
1240+
version "11.7.0"
1241+
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.7.0.tgz#3ff0165bc843f8c9bce1fd89e2fda9143d24b11e"
1242+
integrity sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==
12431243

12441244
hosted-git-info@^2.1.4:
12451245
version "2.8.9"
@@ -1797,10 +1797,10 @@ map-age-cleaner@^0.1.1:
17971797
dependencies:
17981798
p-defer "^1.0.0"
17991799

1800-
marked@^0.7.0:
1801-
version "0.7.0"
1802-
resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e"
1803-
integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==
1800+
marked@^4.3.0:
1801+
version "4.3.0"
1802+
resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3"
1803+
integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==
18041804

18051805
mem@^4.0.0:
18061806
version "4.3.0"

0 commit comments

Comments
 (0)