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.
- package/LICENSE +202 -0
- package/README.md +10 -0
- package/bin/honkit.js +8 -0
- package/lib/BuildGenerator.js +2 -0
- package/lib/__tests__/__fixtures__/honkit/book.js +9 -0
- package/lib/__tests__/githon.js +11 -0
- package/lib/__tests__/init.js +19 -0
- package/lib/__tests__/snapshot-honkit.js +45 -0
- package/lib/api/decodeConfig.js +17 -0
- package/lib/api/decodeGlobal.js +21 -0
- package/lib/api/decodePage.js +41 -0
- package/lib/api/deprecate.js +113 -0
- package/lib/api/encodeConfig.js +30 -0
- package/lib/api/encodeGlobal.js +226 -0
- package/lib/api/encodeNavigation.js +60 -0
- package/lib/api/encodePage.js +37 -0
- package/lib/api/encodeProgress.js +58 -0
- package/lib/api/encodeSummary.js +52 -0
- package/lib/api/index.js +15 -0
- package/lib/bin.js +46 -0
- package/lib/browser.js +41 -0
- package/lib/cli/build.js +36 -0
- package/lib/cli/buildEbook.js +63 -0
- package/lib/cli/getBook.js +24 -0
- package/lib/cli/getOutputFolder.js +19 -0
- package/lib/cli/index.js +11 -0
- package/lib/cli/init.js +17 -0
- package/lib/cli/options.js +38 -0
- package/lib/cli/parse.js +65 -0
- package/lib/cli/serve.js +184 -0
- package/lib/cli/server.js +116 -0
- package/lib/cli/watch.js +35 -0
- package/lib/constants/__tests__/configSchema.js +41 -0
- package/lib/constants/configDefault.js +9 -0
- package/lib/constants/configFiles.js +3 -0
- package/lib/constants/configSchema.js +235 -0
- package/lib/constants/defaultBlocks.js +48 -0
- package/lib/constants/defaultFilters.js +18 -0
- package/lib/constants/defaultPlugins.js +20 -0
- package/lib/constants/extsAsciidoc.js +3 -0
- package/lib/constants/extsMarkdown.js +3 -0
- package/lib/constants/ignoreFiles.js +3 -0
- package/lib/constants/pluginAssetsFolder.js +3 -0
- package/lib/constants/pluginHooks.js +3 -0
- package/lib/constants/pluginPrefix.js +3 -0
- package/lib/constants/pluginResources.js +7 -0
- package/lib/constants/templatesFolder.js +3 -0
- package/lib/constants/themePrefix.js +3 -0
- package/lib/fs/__tests__/mock.js +68 -0
- package/lib/fs/mock.js +88 -0
- package/lib/fs/node.js +44 -0
- package/lib/honkit.js +34 -0
- package/lib/index.js +17 -0
- package/lib/init.js +79 -0
- package/lib/json/encodeBook.js +41 -0
- package/lib/json/encodeBookWithPage.js +25 -0
- package/lib/json/encodeFile.js +20 -0
- package/lib/json/encodeGlossary.js +22 -0
- package/lib/json/encodeGlossaryEntry.js +16 -0
- package/lib/json/encodeLanguages.js +29 -0
- package/lib/json/encodeOutput.js +26 -0
- package/lib/json/encodeOutputWithPage.js +26 -0
- package/lib/json/encodePage.js +38 -0
- package/lib/json/encodeReadme.js +19 -0
- package/lib/json/encodeSummary.js +22 -0
- package/lib/json/encodeSummaryArticle.js +25 -0
- package/lib/json/encodeSummaryPart.js +19 -0
- package/lib/json/index.js +27 -0
- package/lib/models/__tests__/config.js +164 -0
- package/lib/models/__tests__/glossary.js +38 -0
- package/lib/models/__tests__/glossaryEntry.js +16 -0
- package/lib/models/__tests__/page.js +26 -0
- package/lib/models/__tests__/plugin.js +26 -0
- package/lib/models/__tests__/pluginDependency.js +71 -0
- package/lib/models/__tests__/summary.js +115 -0
- package/lib/models/__tests__/summaryArticle.js +62 -0
- package/lib/models/__tests__/summaryPart.js +24 -0
- package/lib/models/__tests__/templateBlock.js +172 -0
- package/lib/models/__tests__/templateEngine.js +49 -0
- package/lib/models/book.js +312 -0
- package/lib/models/config.js +152 -0
- package/lib/models/file.js +83 -0
- package/lib/models/fs.js +255 -0
- package/lib/models/glossary.js +90 -0
- package/lib/models/glossaryEntry.js +34 -0
- package/lib/models/hash.js +191 -0
- package/lib/models/ignore.js +40 -0
- package/lib/models/language.js +22 -0
- package/lib/models/languages.js +64 -0
- package/lib/models/output.js +109 -0
- package/lib/models/page.js +91 -0
- package/lib/models/parser.js +102 -0
- package/lib/models/plugin.js +139 -0
- package/lib/models/pluginDependency.js +192 -0
- package/lib/models/readme.js +38 -0
- package/lib/models/summary.js +199 -0
- package/lib/models/summaryArticle.js +169 -0
- package/lib/models/summaryPart.js +53 -0
- package/lib/models/templateBlock.js +230 -0
- package/lib/models/templateEngine.js +115 -0
- package/lib/models/templateOutput.js +36 -0
- package/lib/models/templateShortcut.js +65 -0
- package/lib/modifiers/config/__tests__/addPlugin.js +30 -0
- package/lib/modifiers/config/__tests__/removePlugin.js +29 -0
- package/lib/modifiers/config/__tests__/togglePlugin.js +28 -0
- package/lib/modifiers/config/addPlugin.js +27 -0
- package/lib/modifiers/config/editPlugin.js +13 -0
- package/lib/modifiers/config/getPluginConfig.js +22 -0
- package/lib/modifiers/config/hasPlugin.js +15 -0
- package/lib/modifiers/config/index.js +21 -0
- package/lib/modifiers/config/isDefaultPlugin.js +17 -0
- package/lib/modifiers/config/removePlugin.js +27 -0
- package/lib/modifiers/config/togglePlugin.js +32 -0
- package/lib/modifiers/index.js +11 -0
- package/lib/modifiers/summary/__tests__/editPartTitle.js +41 -0
- package/lib/modifiers/summary/__tests__/insertArticle.js +72 -0
- package/lib/modifiers/summary/__tests__/insertPart.js +56 -0
- package/lib/modifiers/summary/__tests__/mergeAtLevel.js +45 -0
- package/lib/modifiers/summary/__tests__/moveArticle.js +66 -0
- package/lib/modifiers/summary/__tests__/moveArticleAfter.js +75 -0
- package/lib/modifiers/summary/__tests__/removeArticle.js +54 -0
- package/lib/modifiers/summary/editArticleRef.js +20 -0
- package/lib/modifiers/summary/editArticleTitle.js +20 -0
- package/lib/modifiers/summary/editPartTitle.js +21 -0
- package/lib/modifiers/summary/index.js +27 -0
- package/lib/modifiers/summary/indexArticleLevels.js +21 -0
- package/lib/modifiers/summary/indexLevels.js +18 -0
- package/lib/modifiers/summary/indexPartLevels.js +25 -0
- package/lib/modifiers/summary/insertArticle.js +47 -0
- package/lib/modifiers/summary/insertPart.js +21 -0
- package/lib/modifiers/summary/mergeAtLevel.js +68 -0
- package/lib/modifiers/summary/moveArticle.js +27 -0
- package/lib/modifiers/summary/moveArticleAfter.js +59 -0
- package/lib/modifiers/summary/removeArticle.js +36 -0
- package/lib/modifiers/summary/removePart.js +18 -0
- package/lib/modifiers/summary/unshiftArticle.js +27 -0
- package/lib/output/__tests__/ebook.js +17 -0
- package/lib/output/__tests__/json.js +43 -0
- package/lib/output/__tests__/plugin-hooks.js +57 -0
- package/lib/output/__tests__/website.js +121 -0
- package/lib/output/callHook.js +51 -0
- package/lib/output/callPageHook.js +23 -0
- package/lib/output/createTemplateEngine.js +42 -0
- package/lib/output/ebook/getConvertOptions.js +69 -0
- package/lib/output/ebook/getCoverPath.js +30 -0
- package/lib/output/ebook/getPDFTemplate.js +40 -0
- package/lib/output/ebook/index.js +16 -0
- package/lib/output/ebook/onFinish.js +84 -0
- package/lib/output/ebook/onPage.js +23 -0
- package/lib/output/ebook/options.js +17 -0
- package/lib/output/generateAssets.js +26 -0
- package/lib/output/generateBook.js +167 -0
- package/lib/output/generatePage.js +90 -0
- package/lib/output/generatePages.js +52 -0
- package/lib/output/getModifiers.js +63 -0
- package/lib/output/helper/fileToOutput.js +30 -0
- package/lib/output/helper/fileToURL.js +30 -0
- package/lib/output/helper/index.js +3 -0
- package/lib/output/helper/resolveFileToURL.js +25 -0
- package/lib/output/helper/writeFile.js +26 -0
- package/lib/output/index.js +27 -0
- package/lib/output/json/index.js +14 -0
- package/lib/output/json/onFinish.js +39 -0
- package/lib/output/json/onPage.js +37 -0
- package/lib/output/json/options.js +11 -0
- package/lib/output/modifiers/__tests__/addHeadingId.js +23 -0
- package/lib/output/modifiers/__tests__/annotateText.js +39 -0
- package/lib/output/modifiers/__tests__/fetchRemoteImages.js +32 -0
- package/lib/output/modifiers/__tests__/highlightCode.js +48 -0
- package/lib/output/modifiers/__tests__/inlinePng.js +22 -0
- package/lib/output/modifiers/__tests__/inlineSvg.js +42 -0
- package/lib/output/modifiers/__tests__/resolveImages.js +39 -0
- package/lib/output/modifiers/__tests__/resolveLinks.js +81 -0
- package/lib/output/modifiers/__tests__/svgToImg.js +29 -0
- package/lib/output/modifiers/addHeadingId.js +26 -0
- package/lib/output/modifiers/annotateText.js +76 -0
- package/lib/output/modifiers/editHTMLElement.js +17 -0
- package/lib/output/modifiers/fetchRemoteImages.js +42 -0
- package/lib/output/modifiers/highlightCode.js +59 -0
- package/lib/output/modifiers/index.js +26 -0
- package/lib/output/modifiers/inlineAssets.js +29 -0
- package/lib/output/modifiers/inlinePng.js +43 -0
- package/lib/output/modifiers/inlineSvg.js +39 -0
- package/lib/output/modifiers/modifyHTML.js +27 -0
- package/lib/output/modifiers/resolveImages.js +30 -0
- package/lib/output/modifiers/resolveLinks.js +46 -0
- package/lib/output/modifiers/svgToImg.js +58 -0
- package/lib/output/page-cache.js +15 -0
- package/lib/output/prepareAssets.js +22 -0
- package/lib/output/preparePages.js +25 -0
- package/lib/output/preparePlugins.js +36 -0
- package/lib/output/testing/createMock.js +39 -0
- package/lib/output/testing/generateMock.js +55 -0
- package/lib/output/website/__tests__/i18n.js +40 -0
- package/lib/output/website/copyPluginAssets.js +92 -0
- package/lib/output/website/createTemplateEngine.js +136 -0
- package/lib/output/website/index.js +22 -0
- package/lib/output/website/listSearchPaths.js +20 -0
- package/lib/output/website/onAsset.js +29 -0
- package/lib/output/website/onFinish.js +35 -0
- package/lib/output/website/onInit.js +19 -0
- package/lib/output/website/onPage.js +73 -0
- package/lib/output/website/options.js +15 -0
- package/lib/output/website/prepareI18n.js +28 -0
- package/lib/output/website/prepareResources.js +49 -0
- package/lib/output/website/state.js +20 -0
- package/lib/parse/__tests__/listAssets.js +63 -0
- package/lib/parse/__tests__/parseBook.js +77 -0
- package/lib/parse/__tests__/parseGlossary.js +32 -0
- package/lib/parse/__tests__/parseIgnore.js +37 -0
- package/lib/parse/__tests__/parsePageFromString.js +34 -0
- package/lib/parse/__tests__/parseReadme.js +33 -0
- package/lib/parse/__tests__/parseSummary.js +30 -0
- package/lib/parse/findParsableFile.js +33 -0
- package/lib/parse/index.js +31 -0
- package/lib/parse/listAssets.js +36 -0
- package/lib/parse/lookupStructureFile.js +21 -0
- package/lib/parse/parseBook.js +68 -0
- package/lib/parse/parseConfig.js +52 -0
- package/lib/parse/parseGlossary.js +25 -0
- package/lib/parse/parseIgnore.js +43 -0
- package/lib/parse/parseLanguages.js +26 -0
- package/lib/parse/parsePage.js +21 -0
- package/lib/parse/parsePageFromString.js +25 -0
- package/lib/parse/parsePagesList.js +80 -0
- package/lib/parse/parseReadme.js +26 -0
- package/lib/parse/parseStructureFile.js +64 -0
- package/lib/parse/parseSummary.js +43 -0
- package/lib/parse/validateConfig.js +31 -0
- package/lib/parse/walkSummary.js +34 -0
- package/lib/parsers.js +60 -0
- package/lib/plugins/PluginResolver.js +84 -0
- package/lib/plugins/__tests__/findInstalled.js +25 -0
- package/lib/plugins/__tests__/listDependencies.js +28 -0
- package/lib/plugins/__tests__/sortDependencies.js +28 -0
- package/lib/plugins/__tests__/validatePlugin.js +99 -0
- package/lib/plugins/findInstalled.js +87 -0
- package/lib/plugins/index.js +17 -0
- package/lib/plugins/listBlocks.js +19 -0
- package/lib/plugins/listDependencies.js +33 -0
- package/lib/plugins/listDepsForBook.js +20 -0
- package/lib/plugins/listFilters.js +18 -0
- package/lib/plugins/listResources.js +44 -0
- package/lib/plugins/loadForBook.js +38 -0
- package/lib/plugins/loadPlugin.js +89 -0
- package/lib/plugins/package-name-util.js +48 -0
- package/lib/plugins/sortDependencies.js +30 -0
- package/lib/plugins/toNames.js +16 -0
- package/lib/plugins/validateConfig.js +60 -0
- package/lib/plugins/validatePlugin.js +36 -0
- package/lib/templating/__tests__/conrefsLoader.js +93 -0
- package/lib/templating/__tests__/postRender.js +52 -0
- package/lib/templating/__tests__/replaceShortcuts.js +27 -0
- package/lib/templating/conrefsLoader.js +88 -0
- package/lib/templating/index.js +19 -0
- package/lib/templating/listShortcuts.js +29 -0
- package/lib/templating/postRender.js +46 -0
- package/lib/templating/render.js +41 -0
- package/lib/templating/renderFile.js +39 -0
- package/lib/templating/replaceShortcuts.js +36 -0
- package/lib/templating/themesLoader.js +98 -0
- package/lib/utils/__tests__/git.js +47 -0
- package/lib/utils/__tests__/location.js +81 -0
- package/lib/utils/__tests__/path.js +19 -0
- package/lib/utils/command.js +104 -0
- package/lib/utils/error.js +88 -0
- package/lib/utils/fs.js +163 -0
- package/lib/utils/genKey.js +13 -0
- package/lib/utils/git.js +116 -0
- package/lib/utils/images.js +22 -0
- package/lib/utils/location.js +129 -0
- package/lib/utils/logger.js +158 -0
- package/lib/utils/mergeDefaults.js +18 -0
- package/lib/utils/path.js +62 -0
- package/lib/utils/promise.js +142 -0
- package/lib/utils/reducedObject.js +31 -0
- package/lib/utils/timing.js +90 -0
- 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;
|