honkit 3.6.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +10 -0
  3. package/bin/honkit.js +8 -0
  4. package/lib/BuildGenerator.js +2 -0
  5. package/lib/__tests__/__fixtures__/honkit/book.js +9 -0
  6. package/lib/__tests__/githon.js +11 -0
  7. package/lib/__tests__/init.js +19 -0
  8. package/lib/__tests__/snapshot-honkit.js +45 -0
  9. package/lib/api/decodeConfig.js +17 -0
  10. package/lib/api/decodeGlobal.js +21 -0
  11. package/lib/api/decodePage.js +41 -0
  12. package/lib/api/deprecate.js +113 -0
  13. package/lib/api/encodeConfig.js +30 -0
  14. package/lib/api/encodeGlobal.js +226 -0
  15. package/lib/api/encodeNavigation.js +60 -0
  16. package/lib/api/encodePage.js +37 -0
  17. package/lib/api/encodeProgress.js +58 -0
  18. package/lib/api/encodeSummary.js +52 -0
  19. package/lib/api/index.js +15 -0
  20. package/lib/bin.js +46 -0
  21. package/lib/browser.js +41 -0
  22. package/lib/cli/build.js +36 -0
  23. package/lib/cli/buildEbook.js +63 -0
  24. package/lib/cli/getBook.js +24 -0
  25. package/lib/cli/getOutputFolder.js +19 -0
  26. package/lib/cli/index.js +11 -0
  27. package/lib/cli/init.js +17 -0
  28. package/lib/cli/options.js +38 -0
  29. package/lib/cli/parse.js +65 -0
  30. package/lib/cli/serve.js +184 -0
  31. package/lib/cli/server.js +116 -0
  32. package/lib/cli/watch.js +35 -0
  33. package/lib/constants/__tests__/configSchema.js +41 -0
  34. package/lib/constants/configDefault.js +9 -0
  35. package/lib/constants/configFiles.js +3 -0
  36. package/lib/constants/configSchema.js +235 -0
  37. package/lib/constants/defaultBlocks.js +48 -0
  38. package/lib/constants/defaultFilters.js +18 -0
  39. package/lib/constants/defaultPlugins.js +20 -0
  40. package/lib/constants/extsAsciidoc.js +3 -0
  41. package/lib/constants/extsMarkdown.js +3 -0
  42. package/lib/constants/ignoreFiles.js +3 -0
  43. package/lib/constants/pluginAssetsFolder.js +3 -0
  44. package/lib/constants/pluginHooks.js +3 -0
  45. package/lib/constants/pluginPrefix.js +3 -0
  46. package/lib/constants/pluginResources.js +7 -0
  47. package/lib/constants/templatesFolder.js +3 -0
  48. package/lib/constants/themePrefix.js +3 -0
  49. package/lib/fs/__tests__/mock.js +68 -0
  50. package/lib/fs/mock.js +88 -0
  51. package/lib/fs/node.js +44 -0
  52. package/lib/honkit.js +34 -0
  53. package/lib/index.js +17 -0
  54. package/lib/init.js +79 -0
  55. package/lib/json/encodeBook.js +41 -0
  56. package/lib/json/encodeBookWithPage.js +25 -0
  57. package/lib/json/encodeFile.js +20 -0
  58. package/lib/json/encodeGlossary.js +22 -0
  59. package/lib/json/encodeGlossaryEntry.js +16 -0
  60. package/lib/json/encodeLanguages.js +29 -0
  61. package/lib/json/encodeOutput.js +26 -0
  62. package/lib/json/encodeOutputWithPage.js +26 -0
  63. package/lib/json/encodePage.js +38 -0
  64. package/lib/json/encodeReadme.js +19 -0
  65. package/lib/json/encodeSummary.js +22 -0
  66. package/lib/json/encodeSummaryArticle.js +25 -0
  67. package/lib/json/encodeSummaryPart.js +19 -0
  68. package/lib/json/index.js +27 -0
  69. package/lib/models/__tests__/config.js +164 -0
  70. package/lib/models/__tests__/glossary.js +38 -0
  71. package/lib/models/__tests__/glossaryEntry.js +16 -0
  72. package/lib/models/__tests__/page.js +26 -0
  73. package/lib/models/__tests__/plugin.js +26 -0
  74. package/lib/models/__tests__/pluginDependency.js +71 -0
  75. package/lib/models/__tests__/summary.js +115 -0
  76. package/lib/models/__tests__/summaryArticle.js +62 -0
  77. package/lib/models/__tests__/summaryPart.js +24 -0
  78. package/lib/models/__tests__/templateBlock.js +172 -0
  79. package/lib/models/__tests__/templateEngine.js +49 -0
  80. package/lib/models/book.js +312 -0
  81. package/lib/models/config.js +152 -0
  82. package/lib/models/file.js +83 -0
  83. package/lib/models/fs.js +255 -0
  84. package/lib/models/glossary.js +90 -0
  85. package/lib/models/glossaryEntry.js +34 -0
  86. package/lib/models/hash.js +191 -0
  87. package/lib/models/ignore.js +40 -0
  88. package/lib/models/language.js +22 -0
  89. package/lib/models/languages.js +64 -0
  90. package/lib/models/output.js +109 -0
  91. package/lib/models/page.js +91 -0
  92. package/lib/models/parser.js +102 -0
  93. package/lib/models/plugin.js +139 -0
  94. package/lib/models/pluginDependency.js +192 -0
  95. package/lib/models/readme.js +38 -0
  96. package/lib/models/summary.js +199 -0
  97. package/lib/models/summaryArticle.js +169 -0
  98. package/lib/models/summaryPart.js +53 -0
  99. package/lib/models/templateBlock.js +230 -0
  100. package/lib/models/templateEngine.js +115 -0
  101. package/lib/models/templateOutput.js +36 -0
  102. package/lib/models/templateShortcut.js +65 -0
  103. package/lib/modifiers/config/__tests__/addPlugin.js +30 -0
  104. package/lib/modifiers/config/__tests__/removePlugin.js +29 -0
  105. package/lib/modifiers/config/__tests__/togglePlugin.js +28 -0
  106. package/lib/modifiers/config/addPlugin.js +27 -0
  107. package/lib/modifiers/config/editPlugin.js +13 -0
  108. package/lib/modifiers/config/getPluginConfig.js +22 -0
  109. package/lib/modifiers/config/hasPlugin.js +15 -0
  110. package/lib/modifiers/config/index.js +21 -0
  111. package/lib/modifiers/config/isDefaultPlugin.js +17 -0
  112. package/lib/modifiers/config/removePlugin.js +27 -0
  113. package/lib/modifiers/config/togglePlugin.js +32 -0
  114. package/lib/modifiers/index.js +11 -0
  115. package/lib/modifiers/summary/__tests__/editPartTitle.js +41 -0
  116. package/lib/modifiers/summary/__tests__/insertArticle.js +72 -0
  117. package/lib/modifiers/summary/__tests__/insertPart.js +56 -0
  118. package/lib/modifiers/summary/__tests__/mergeAtLevel.js +45 -0
  119. package/lib/modifiers/summary/__tests__/moveArticle.js +66 -0
  120. package/lib/modifiers/summary/__tests__/moveArticleAfter.js +75 -0
  121. package/lib/modifiers/summary/__tests__/removeArticle.js +54 -0
  122. package/lib/modifiers/summary/editArticleRef.js +20 -0
  123. package/lib/modifiers/summary/editArticleTitle.js +20 -0
  124. package/lib/modifiers/summary/editPartTitle.js +21 -0
  125. package/lib/modifiers/summary/index.js +27 -0
  126. package/lib/modifiers/summary/indexArticleLevels.js +21 -0
  127. package/lib/modifiers/summary/indexLevels.js +18 -0
  128. package/lib/modifiers/summary/indexPartLevels.js +25 -0
  129. package/lib/modifiers/summary/insertArticle.js +47 -0
  130. package/lib/modifiers/summary/insertPart.js +21 -0
  131. package/lib/modifiers/summary/mergeAtLevel.js +68 -0
  132. package/lib/modifiers/summary/moveArticle.js +27 -0
  133. package/lib/modifiers/summary/moveArticleAfter.js +59 -0
  134. package/lib/modifiers/summary/removeArticle.js +36 -0
  135. package/lib/modifiers/summary/removePart.js +18 -0
  136. package/lib/modifiers/summary/unshiftArticle.js +27 -0
  137. package/lib/output/__tests__/ebook.js +17 -0
  138. package/lib/output/__tests__/json.js +43 -0
  139. package/lib/output/__tests__/plugin-hooks.js +57 -0
  140. package/lib/output/__tests__/website.js +121 -0
  141. package/lib/output/callHook.js +51 -0
  142. package/lib/output/callPageHook.js +23 -0
  143. package/lib/output/createTemplateEngine.js +42 -0
  144. package/lib/output/ebook/getConvertOptions.js +69 -0
  145. package/lib/output/ebook/getCoverPath.js +30 -0
  146. package/lib/output/ebook/getPDFTemplate.js +40 -0
  147. package/lib/output/ebook/index.js +16 -0
  148. package/lib/output/ebook/onFinish.js +84 -0
  149. package/lib/output/ebook/onPage.js +23 -0
  150. package/lib/output/ebook/options.js +17 -0
  151. package/lib/output/generateAssets.js +26 -0
  152. package/lib/output/generateBook.js +167 -0
  153. package/lib/output/generatePage.js +90 -0
  154. package/lib/output/generatePages.js +52 -0
  155. package/lib/output/getModifiers.js +63 -0
  156. package/lib/output/helper/fileToOutput.js +30 -0
  157. package/lib/output/helper/fileToURL.js +30 -0
  158. package/lib/output/helper/index.js +3 -0
  159. package/lib/output/helper/resolveFileToURL.js +25 -0
  160. package/lib/output/helper/writeFile.js +26 -0
  161. package/lib/output/index.js +27 -0
  162. package/lib/output/json/index.js +14 -0
  163. package/lib/output/json/onFinish.js +39 -0
  164. package/lib/output/json/onPage.js +37 -0
  165. package/lib/output/json/options.js +11 -0
  166. package/lib/output/modifiers/__tests__/addHeadingId.js +23 -0
  167. package/lib/output/modifiers/__tests__/annotateText.js +39 -0
  168. package/lib/output/modifiers/__tests__/fetchRemoteImages.js +32 -0
  169. package/lib/output/modifiers/__tests__/highlightCode.js +48 -0
  170. package/lib/output/modifiers/__tests__/inlinePng.js +22 -0
  171. package/lib/output/modifiers/__tests__/inlineSvg.js +42 -0
  172. package/lib/output/modifiers/__tests__/resolveImages.js +39 -0
  173. package/lib/output/modifiers/__tests__/resolveLinks.js +81 -0
  174. package/lib/output/modifiers/__tests__/svgToImg.js +29 -0
  175. package/lib/output/modifiers/addHeadingId.js +26 -0
  176. package/lib/output/modifiers/annotateText.js +76 -0
  177. package/lib/output/modifiers/editHTMLElement.js +17 -0
  178. package/lib/output/modifiers/fetchRemoteImages.js +42 -0
  179. package/lib/output/modifiers/highlightCode.js +59 -0
  180. package/lib/output/modifiers/index.js +26 -0
  181. package/lib/output/modifiers/inlineAssets.js +29 -0
  182. package/lib/output/modifiers/inlinePng.js +43 -0
  183. package/lib/output/modifiers/inlineSvg.js +39 -0
  184. package/lib/output/modifiers/modifyHTML.js +27 -0
  185. package/lib/output/modifiers/resolveImages.js +30 -0
  186. package/lib/output/modifiers/resolveLinks.js +46 -0
  187. package/lib/output/modifiers/svgToImg.js +58 -0
  188. package/lib/output/page-cache.js +15 -0
  189. package/lib/output/prepareAssets.js +22 -0
  190. package/lib/output/preparePages.js +25 -0
  191. package/lib/output/preparePlugins.js +36 -0
  192. package/lib/output/testing/createMock.js +39 -0
  193. package/lib/output/testing/generateMock.js +55 -0
  194. package/lib/output/website/__tests__/i18n.js +40 -0
  195. package/lib/output/website/copyPluginAssets.js +92 -0
  196. package/lib/output/website/createTemplateEngine.js +136 -0
  197. package/lib/output/website/index.js +22 -0
  198. package/lib/output/website/listSearchPaths.js +20 -0
  199. package/lib/output/website/onAsset.js +29 -0
  200. package/lib/output/website/onFinish.js +35 -0
  201. package/lib/output/website/onInit.js +19 -0
  202. package/lib/output/website/onPage.js +73 -0
  203. package/lib/output/website/options.js +15 -0
  204. package/lib/output/website/prepareI18n.js +28 -0
  205. package/lib/output/website/prepareResources.js +49 -0
  206. package/lib/output/website/state.js +20 -0
  207. package/lib/parse/__tests__/listAssets.js +63 -0
  208. package/lib/parse/__tests__/parseBook.js +77 -0
  209. package/lib/parse/__tests__/parseGlossary.js +32 -0
  210. package/lib/parse/__tests__/parseIgnore.js +37 -0
  211. package/lib/parse/__tests__/parsePageFromString.js +34 -0
  212. package/lib/parse/__tests__/parseReadme.js +33 -0
  213. package/lib/parse/__tests__/parseSummary.js +30 -0
  214. package/lib/parse/findParsableFile.js +33 -0
  215. package/lib/parse/index.js +31 -0
  216. package/lib/parse/listAssets.js +36 -0
  217. package/lib/parse/lookupStructureFile.js +21 -0
  218. package/lib/parse/parseBook.js +68 -0
  219. package/lib/parse/parseConfig.js +52 -0
  220. package/lib/parse/parseGlossary.js +25 -0
  221. package/lib/parse/parseIgnore.js +43 -0
  222. package/lib/parse/parseLanguages.js +26 -0
  223. package/lib/parse/parsePage.js +21 -0
  224. package/lib/parse/parsePageFromString.js +25 -0
  225. package/lib/parse/parsePagesList.js +80 -0
  226. package/lib/parse/parseReadme.js +26 -0
  227. package/lib/parse/parseStructureFile.js +64 -0
  228. package/lib/parse/parseSummary.js +43 -0
  229. package/lib/parse/validateConfig.js +31 -0
  230. package/lib/parse/walkSummary.js +34 -0
  231. package/lib/parsers.js +60 -0
  232. package/lib/plugins/PluginResolver.js +84 -0
  233. package/lib/plugins/__tests__/findInstalled.js +25 -0
  234. package/lib/plugins/__tests__/listDependencies.js +28 -0
  235. package/lib/plugins/__tests__/sortDependencies.js +28 -0
  236. package/lib/plugins/__tests__/validatePlugin.js +99 -0
  237. package/lib/plugins/findInstalled.js +87 -0
  238. package/lib/plugins/index.js +17 -0
  239. package/lib/plugins/listBlocks.js +19 -0
  240. package/lib/plugins/listDependencies.js +33 -0
  241. package/lib/plugins/listDepsForBook.js +20 -0
  242. package/lib/plugins/listFilters.js +18 -0
  243. package/lib/plugins/listResources.js +44 -0
  244. package/lib/plugins/loadForBook.js +38 -0
  245. package/lib/plugins/loadPlugin.js +89 -0
  246. package/lib/plugins/package-name-util.js +48 -0
  247. package/lib/plugins/sortDependencies.js +30 -0
  248. package/lib/plugins/toNames.js +16 -0
  249. package/lib/plugins/validateConfig.js +60 -0
  250. package/lib/plugins/validatePlugin.js +36 -0
  251. package/lib/templating/__tests__/conrefsLoader.js +93 -0
  252. package/lib/templating/__tests__/postRender.js +52 -0
  253. package/lib/templating/__tests__/replaceShortcuts.js +27 -0
  254. package/lib/templating/conrefsLoader.js +88 -0
  255. package/lib/templating/index.js +19 -0
  256. package/lib/templating/listShortcuts.js +29 -0
  257. package/lib/templating/postRender.js +46 -0
  258. package/lib/templating/render.js +41 -0
  259. package/lib/templating/renderFile.js +39 -0
  260. package/lib/templating/replaceShortcuts.js +36 -0
  261. package/lib/templating/themesLoader.js +98 -0
  262. package/lib/utils/__tests__/git.js +47 -0
  263. package/lib/utils/__tests__/location.js +81 -0
  264. package/lib/utils/__tests__/path.js +19 -0
  265. package/lib/utils/command.js +104 -0
  266. package/lib/utils/error.js +88 -0
  267. package/lib/utils/fs.js +163 -0
  268. package/lib/utils/genKey.js +13 -0
  269. package/lib/utils/git.js +116 -0
  270. package/lib/utils/images.js +22 -0
  271. package/lib/utils/location.js +129 -0
  272. package/lib/utils/logger.js +158 -0
  273. package/lib/utils/mergeDefaults.js +18 -0
  274. package/lib/utils/path.js +62 -0
  275. package/lib/utils/promise.js +142 -0
  276. package/lib/utils/reducedObject.js +31 -0
  277. package/lib/utils/timing.js +90 -0
  278. package/package.json +112 -0
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const book_1 = __importDefault(require("../../models/book"));
7
+ const mock_1 = __importDefault(require("../../fs/mock"));
8
+ const parseSummary_1 = __importDefault(require("../parseSummary"));
9
+ describe("parseSummary", () => {
10
+ test("should parse summary if exists", () => {
11
+ const fs = mock_1.default({
12
+ "SUMMARY.md": "# Summary\n\n* [Hello](hello.md)",
13
+ });
14
+ const book = book_1.default.createForFS(fs);
15
+ return parseSummary_1.default(book).then((resultBook) => {
16
+ const summary = resultBook.getSummary();
17
+ const file = summary.getFile();
18
+ expect(file.exists()).toBeTruthy();
19
+ });
20
+ });
21
+ test("should not fail if doesn't exist", () => {
22
+ const fs = mock_1.default({});
23
+ const book = book_1.default.createForFS(fs);
24
+ return parseSummary_1.default(book).then((resultBook) => {
25
+ const summary = resultBook.getSummary();
26
+ const file = summary.getFile();
27
+ expect(file.exists()).toBeFalsy();
28
+ });
29
+ });
30
+ });
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const promise_1 = __importDefault(require("../utils/promise"));
8
+ const parsers_1 = __importDefault(require("../parsers"));
9
+ /**
10
+ Find a file parsable (Markdown or AsciiDoc) in a book
11
+
12
+ @param {Book} book
13
+ @param {string} filename
14
+ @return {Promise<File | Undefined>}
15
+ */
16
+ function findParsableFile(book, filename) {
17
+ const fs = book.getContentFS();
18
+ const ext = path_1.default.extname(filename);
19
+ const basename = path_1.default.basename(filename, ext);
20
+ const basedir = path_1.default.dirname(filename);
21
+ // Ordered list of extensions to test
22
+ const exts = parsers_1.default.extensions;
23
+ return promise_1.default.some(exts, (ext) => {
24
+ const filepath = basename + ext;
25
+ return fs.findFile(basedir, filepath).then((found) => {
26
+ if (!found || book.isContentFileIgnored(found)) {
27
+ return undefined;
28
+ }
29
+ return fs.statFile(found);
30
+ });
31
+ });
32
+ }
33
+ exports.default = findParsableFile;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parseBook_1 = __importDefault(require("./parseBook"));
7
+ const parseSummary_1 = __importDefault(require("./parseSummary"));
8
+ const parseGlossary_1 = __importDefault(require("./parseGlossary"));
9
+ const parseReadme_1 = __importDefault(require("./parseReadme"));
10
+ const parseConfig_1 = __importDefault(require("./parseConfig"));
11
+ const parsePagesList_1 = __importDefault(require("./parsePagesList"));
12
+ const parseIgnore_1 = __importDefault(require("./parseIgnore"));
13
+ const listAssets_1 = __importDefault(require("./listAssets"));
14
+ const parseLanguages_1 = __importDefault(require("./parseLanguages"));
15
+ const parsePage_1 = __importDefault(require("./parsePage"));
16
+ const parsePageFromString_1 = __importDefault(require("./parsePageFromString"));
17
+ const lookupStructureFile_1 = __importDefault(require("./lookupStructureFile"));
18
+ exports.default = {
19
+ parseBook: parseBook_1.default,
20
+ parseSummary: parseSummary_1.default,
21
+ parseGlossary: parseGlossary_1.default,
22
+ parseReadme: parseReadme_1.default,
23
+ parseConfig: parseConfig_1.default,
24
+ parsePagesList: parsePagesList_1.default,
25
+ parseIgnore: parseIgnore_1.default,
26
+ listAssets: listAssets_1.default,
27
+ parseLanguages: parseLanguages_1.default,
28
+ parsePage: parsePage_1.default,
29
+ parsePageFromString: parsePageFromString_1.default,
30
+ lookupStructureFile: lookupStructureFile_1.default,
31
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const timing_1 = __importDefault(require("../utils/timing"));
7
+ /**
8
+ List all assets in a book
9
+ Assets are file not ignored and not a page
10
+
11
+ @param {Book} book
12
+ @param {List<String>} pages
13
+ @param
14
+ */
15
+ function listAssets(book, pages) {
16
+ const fs = book.getContentFS();
17
+ const summary = book.getSummary();
18
+ const summaryFile = summary.getFile().getPath();
19
+ const glossary = book.getGlossary();
20
+ const glossaryFile = glossary.getFile().getPath();
21
+ const langs = book.getLanguages();
22
+ const langsFile = langs.getFile().getPath();
23
+ const config = book.getConfig();
24
+ const configFile = config.getFile().getPath();
25
+ function filterFile(rawFile) {
26
+ const file = rawFile.replace(/\\/g, "/");
27
+ return !(file === summaryFile ||
28
+ file === glossaryFile ||
29
+ file === langsFile ||
30
+ file === configFile ||
31
+ book.isContentFileIgnored(file) ||
32
+ pages.has(file));
33
+ }
34
+ return timing_1.default.measure("parse.listAssets", fs.listAllFiles(".", filterFile));
35
+ }
36
+ exports.default = listAssets;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const findParsableFile_1 = __importDefault(require("./findParsableFile"));
7
+ /**
8
+ Lookup a structure file (ex: SUMMARY.md, GLOSSARY.md) in a book. Uses
9
+ book's config to find it.
10
+
11
+ @param {Book} book
12
+ @param {string} type: one of ["glossary", "readme", "summary", "langs"]
13
+ @return {Promise<File | Undefined>} The path of the file found, relative
14
+ to the book content root.
15
+ */
16
+ function lookupStructureFile(book, type) {
17
+ const config = book.getConfig();
18
+ const fileToSearch = config.getValue(["structure", type]);
19
+ return findParsableFile_1.default(book, fileToSearch);
20
+ }
21
+ exports.default = lookupStructureFile;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const promise_1 = __importDefault(require("../utils/promise"));
7
+ const timing_1 = __importDefault(require("../utils/timing"));
8
+ const book_1 = __importDefault(require("../models/book"));
9
+ const parseIgnore_1 = __importDefault(require("./parseIgnore"));
10
+ const parseConfig_1 = __importDefault(require("./parseConfig"));
11
+ const parseGlossary_1 = __importDefault(require("./parseGlossary"));
12
+ const parseSummary_1 = __importDefault(require("./parseSummary"));
13
+ const parseReadme_1 = __importDefault(require("./parseReadme"));
14
+ const parseLanguages_1 = __importDefault(require("./parseLanguages"));
15
+ /**
16
+ Parse content of a book
17
+
18
+ @param {Book} book
19
+ @return {Promise<Book>}
20
+ */
21
+ function parseBookContent(book) {
22
+ return promise_1.default(book).then(parseReadme_1.default).then(parseSummary_1.default).then(parseGlossary_1.default);
23
+ }
24
+ /**
25
+ Parse a multilingual book
26
+
27
+ @param {Book} book
28
+ @return {Promise<Book>}
29
+ */
30
+ function parseMultilingualBook(book) {
31
+ const languages = book.getLanguages();
32
+ const langList = languages.getList();
33
+ return promise_1.default.reduce(langList, (currentBook, lang) => {
34
+ const langID = lang.getID();
35
+ const child = book_1.default.createFromParent(currentBook, langID);
36
+ let ignore = currentBook.getIgnore();
37
+ return promise_1.default(child)
38
+ .then(parseConfig_1.default)
39
+ .then(parseBookContent)
40
+ .then((result) => {
41
+ // Ignore content of this book when generating parent book
42
+ ignore = ignore.add(`${langID}/**`);
43
+ currentBook = currentBook.set("ignore", ignore);
44
+ return currentBook.addLanguageBook(langID, result);
45
+ });
46
+ }, book);
47
+ }
48
+ /**
49
+ Parse a whole book from a filesystem
50
+
51
+ @param {Book} book
52
+ @return {Promise<Book>}
53
+ */
54
+ function parseBook(book) {
55
+ return timing_1.default.measure("parse.book", promise_1.default(book)
56
+ .then(parseIgnore_1.default)
57
+ .then(parseConfig_1.default)
58
+ .then(parseLanguages_1.default)
59
+ .then((resultBook) => {
60
+ if (resultBook.isMultilingual()) {
61
+ return parseMultilingualBook(resultBook);
62
+ }
63
+ else {
64
+ return parseBookContent(resultBook);
65
+ }
66
+ }));
67
+ }
68
+ exports.default = parseBook;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const promise_1 = __importDefault(require("../utils/promise"));
7
+ const validateConfig_1 = __importDefault(require("./validateConfig"));
8
+ const configFiles_1 = __importDefault(require("../constants/configFiles"));
9
+ /**
10
+ Parse configuration from "book.json" or "book.js"
11
+
12
+ @param {Book} book
13
+ @return {Promise<Book>}
14
+ */
15
+ function parseConfig(book) {
16
+ const fs = book.getFS();
17
+ let config = book.getConfig();
18
+ return promise_1.default.some(configFiles_1.default, (filename) => {
19
+ // Is this file ignored?
20
+ if (book.isFileIgnored(filename)) {
21
+ return;
22
+ }
23
+ // Try loading it
24
+ return fs
25
+ .loadAsObject(filename)
26
+ .then((cfg) => {
27
+ return fs.statFile(filename).then((file) => {
28
+ return {
29
+ file: file,
30
+ values: cfg,
31
+ };
32
+ });
33
+ })
34
+ .fail((err) => {
35
+ if (err.code != "MODULE_NOT_FOUND")
36
+ throw err;
37
+ else
38
+ return promise_1.default(false);
39
+ });
40
+ }).then((result) => {
41
+ let values = result ? result.values : {};
42
+ values = validateConfig_1.default(values);
43
+ // Set the file
44
+ if (result.file) {
45
+ config = config.setFile(result.file);
46
+ }
47
+ // Merge with old values
48
+ config = config.mergeValues(values);
49
+ return book.setConfig(config);
50
+ });
51
+ }
52
+ exports.default = parseConfig;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parseStructureFile_1 = __importDefault(require("./parseStructureFile"));
7
+ const glossary_1 = __importDefault(require("../models/glossary"));
8
+ /**
9
+ Parse glossary
10
+
11
+ @param {Book} book
12
+ @return {Promise<Book>}
13
+ */
14
+ function parseGlossary(book) {
15
+ const logger = book.getLogger();
16
+ return parseStructureFile_1.default(book, "glossary").spread((file, entries) => {
17
+ if (!file) {
18
+ return book;
19
+ }
20
+ logger.debug.ln("glossary index file found at", file.getPath());
21
+ const glossary = glossary_1.default.createFromEntries(file, entries);
22
+ return book.set("glossary", glossary);
23
+ });
24
+ }
25
+ exports.default = parseGlossary;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const promise_1 = __importDefault(require("../utils/promise"));
7
+ const ignoreFiles_1 = __importDefault(require("../constants/ignoreFiles"));
8
+ const DEFAULT_IGNORES = [
9
+ // Skip Git stuff
10
+ ".git/",
11
+ // Skip OS X meta data
12
+ ".DS_Store",
13
+ // Skip stuff installed by plugins
14
+ "node_modules",
15
+ // Skip book outputs
16
+ "_book",
17
+ // Ignore files in the templates folder
18
+ "_layouts",
19
+ ];
20
+ /**
21
+ Parse ignore files
22
+
23
+ @param {Book}
24
+ @return {Book}
25
+ */
26
+ function parseIgnore(book) {
27
+ if (book.isLanguageBook()) {
28
+ return promise_1.default.reject(new Error("Ignore files could be parsed for language books"));
29
+ }
30
+ const fs = book.getFS();
31
+ let ignore = book.getIgnore();
32
+ ignore = ignore.add(DEFAULT_IGNORES);
33
+ return promise_1.default.serie(ignoreFiles_1.default, (filename) => {
34
+ return fs.readAsString(filename).then((content) => {
35
+ ignore = ignore.add(content.toString().split(/\r?\n/));
36
+ }, (err) => {
37
+ return promise_1.default();
38
+ });
39
+ }).then(() => {
40
+ return book.setIgnore(ignore);
41
+ });
42
+ }
43
+ exports.default = parseIgnore;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parseStructureFile_1 = __importDefault(require("./parseStructureFile"));
7
+ const languages_1 = __importDefault(require("../models/languages"));
8
+ /**
9
+ Parse languages list from book
10
+
11
+ @param {Book} book
12
+ @return {Promise<Book>}
13
+ */
14
+ function parseLanguages(book) {
15
+ const logger = book.getLogger();
16
+ return parseStructureFile_1.default(book, "langs").spread((file, result) => {
17
+ if (!file) {
18
+ return book;
19
+ }
20
+ const languages = languages_1.default.createFromList(file, result);
21
+ logger.debug.ln("languages index file found at", file.getPath());
22
+ logger.info.ln("parsing multilingual book, with", languages.getList().size, "languages");
23
+ return book.set("languages", languages);
24
+ });
25
+ }
26
+ exports.default = parseLanguages;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parsePageFromString_1 = __importDefault(require("./parsePageFromString"));
7
+ /**
8
+ * Parse a page, read its content and parse the YAMl header
9
+ *
10
+ * @param {Book} book
11
+ * @param {Page} page
12
+ * @return {Promise<Page>}
13
+ */
14
+ function parsePage(book, page) {
15
+ const fs = book.getContentFS();
16
+ const file = page.getFile();
17
+ return fs.readAsString(file.getPath()).then((content) => {
18
+ return parsePageFromString_1.default(page, content);
19
+ });
20
+ }
21
+ exports.default = parsePage;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const immutable_1 = __importDefault(require("immutable"));
7
+ const front_matter_1 = __importDefault(require("front-matter"));
8
+ const direction_1 = __importDefault(require("direction"));
9
+ /**
10
+ * Parse a page, its content and the YAMl header
11
+ *
12
+ * @param {Page} page
13
+ * @param {string} content
14
+ * @return {Page}
15
+ */
16
+ function parsePageFromString(page, content) {
17
+ // Parse page YAML
18
+ const parsed = front_matter_1.default(content);
19
+ return page.merge({
20
+ content: parsed.body,
21
+ attributes: immutable_1.default.fromJS(parsed.attributes),
22
+ dir: direction_1.default(parsed.body),
23
+ });
24
+ }
25
+ exports.default = parsePageFromString;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const immutable_1 = __importDefault(require("immutable"));
7
+ const timing_1 = __importDefault(require("../utils/timing"));
8
+ const page_1 = __importDefault(require("../models/page"));
9
+ const walkSummary_1 = __importDefault(require("./walkSummary"));
10
+ const parsePage_1 = __importDefault(require("./parsePage"));
11
+ /**
12
+ Parse a page from a path
13
+
14
+ @param {Book} book
15
+ @param {string} filePath
16
+ @return {Page?}
17
+ */
18
+ function parseFilePage(book, filePath) {
19
+ const fs = book.getContentFS();
20
+ return fs
21
+ .statFile(filePath)
22
+ .then((file) => {
23
+ const page = page_1.default.createForFile(file);
24
+ return parsePage_1.default(book, page);
25
+ }, (err) => {
26
+ // file doesn't exist
27
+ return null;
28
+ })
29
+ .fail((err) => {
30
+ const logger = book.getLogger();
31
+ logger.error.ln(`error while parsing page "${filePath}":`);
32
+ throw err;
33
+ });
34
+ }
35
+ /**
36
+ Parse all pages from a book as an OrderedMap
37
+
38
+ @param {Book} book
39
+ @return {Promise<OrderedMap<Page>>}
40
+ */
41
+ function parsePagesList(book) {
42
+ const summary = book.getSummary();
43
+ const glossary = book.getGlossary();
44
+ let map = immutable_1.default.OrderedMap();
45
+ // Parse pages from summary
46
+ return (timing_1.default
47
+ .measure("parse.listPages", walkSummary_1.default(summary, (article) => {
48
+ if (!article.isPage())
49
+ return;
50
+ const filepath = article.getPath();
51
+ // Is the page ignored?
52
+ if (book.isContentFileIgnored(filepath))
53
+ return;
54
+ return parseFilePage(book, filepath).then((page) => {
55
+ // file doesn't exist
56
+ if (!page) {
57
+ return;
58
+ }
59
+ map = map.set(filepath, page);
60
+ });
61
+ }))
62
+ // Parse glossary
63
+ .then(() => {
64
+ const file = glossary.getFile();
65
+ if (!file.exists()) {
66
+ return;
67
+ }
68
+ return parseFilePage(book, file.getPath()).then((page) => {
69
+ // file doesn't exist
70
+ if (!page) {
71
+ return;
72
+ }
73
+ map = map.set(file.getPath(), page);
74
+ });
75
+ })
76
+ .then(() => {
77
+ return map;
78
+ }));
79
+ }
80
+ exports.default = parsePagesList;