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,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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const promise_1 = __importDefault(require("../utils/promise"));
|
|
8
|
+
const generatePage_1 = __importDefault(require("./generatePage"));
|
|
9
|
+
const page_cache_1 = require("./page-cache");
|
|
10
|
+
/**
|
|
11
|
+
Output all pages using a generator
|
|
12
|
+
|
|
13
|
+
@param {Generator} generator
|
|
14
|
+
@param {Output} output
|
|
15
|
+
@return {Promise<Output>}
|
|
16
|
+
*/
|
|
17
|
+
function generatePages(generator, output) {
|
|
18
|
+
const cache = page_cache_1.getCache();
|
|
19
|
+
const pages = output.getPages();
|
|
20
|
+
const logger = output.getLogger();
|
|
21
|
+
// Is generator ignoring assets?
|
|
22
|
+
if (!generator.onPage) {
|
|
23
|
+
return promise_1.default(output);
|
|
24
|
+
}
|
|
25
|
+
const root = output.book.getContentRoot();
|
|
26
|
+
const isIncrementBuilding = output.incrementalChangeFileSet.size !== 0;
|
|
27
|
+
const pageList = pages.map((page) => {
|
|
28
|
+
const file = page.getFile();
|
|
29
|
+
const absoluteFilePath = path_1.default.join(root, file.getPath());
|
|
30
|
+
// When incremental build
|
|
31
|
+
if (isIncrementBuilding && !output.incrementalChangeFileSet.has(absoluteFilePath)) {
|
|
32
|
+
logger.debug.ln(`skip generate page "${file.getPath()}"`);
|
|
33
|
+
return; // Skip build
|
|
34
|
+
}
|
|
35
|
+
return generatePage_1.default(output, page)
|
|
36
|
+
.then((resultPage) => {
|
|
37
|
+
// It call renderToString
|
|
38
|
+
// Create page file
|
|
39
|
+
return generator.onPage(output, resultPage);
|
|
40
|
+
})
|
|
41
|
+
.fail((err) => {
|
|
42
|
+
logger.error.ln(`error while generating page "${file.getPath()}":`);
|
|
43
|
+
throw err;
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
return promise_1.default.all(pageList.toArray()).then(() => {
|
|
47
|
+
// update caches
|
|
48
|
+
cache.save();
|
|
49
|
+
return output;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
exports.default = generatePages;
|
|
@@ -0,0 +1,63 @@
|
|
|
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 modifiers_1 = __importDefault(require("./modifiers"));
|
|
7
|
+
const resolveFileToURL_1 = __importDefault(require("./helper/resolveFileToURL"));
|
|
8
|
+
const api_1 = __importDefault(require("../api"));
|
|
9
|
+
const plugins_1 = __importDefault(require("../plugins"));
|
|
10
|
+
const promise_1 = __importDefault(require("../utils/promise"));
|
|
11
|
+
const defaultBlocks_1 = __importDefault(require("../constants/defaultBlocks"));
|
|
12
|
+
const fileToOutput_1 = __importDefault(require("./helper/fileToOutput"));
|
|
13
|
+
const CODEBLOCK = "code";
|
|
14
|
+
/**
|
|
15
|
+
* Return default modifier to prepare a page for
|
|
16
|
+
* rendering.
|
|
17
|
+
*
|
|
18
|
+
* @return {Array<Modifier>}
|
|
19
|
+
*/
|
|
20
|
+
function getModifiers(output, page) {
|
|
21
|
+
const book = output.getBook();
|
|
22
|
+
const plugins = output.getPlugins();
|
|
23
|
+
const glossary = book.getGlossary();
|
|
24
|
+
const file = page.getFile();
|
|
25
|
+
// Glossary entries
|
|
26
|
+
const entries = glossary.getEntries();
|
|
27
|
+
const glossaryFile = glossary.getFile();
|
|
28
|
+
const glossaryFilename = fileToOutput_1.default(output, glossaryFile.getPath());
|
|
29
|
+
// Current file path
|
|
30
|
+
const currentFilePath = file.getPath();
|
|
31
|
+
// Get TemplateBlock for highlighting
|
|
32
|
+
const blocks = plugins_1.default.listBlocks(plugins);
|
|
33
|
+
const code = blocks.get(CODEBLOCK) || defaultBlocks_1.default.get(CODEBLOCK);
|
|
34
|
+
// Current context
|
|
35
|
+
const context = api_1.default.encodeGlobal(output);
|
|
36
|
+
return [
|
|
37
|
+
// Normalize IDs on headings
|
|
38
|
+
modifiers_1.default.addHeadingId,
|
|
39
|
+
// Annotate text with glossary entries
|
|
40
|
+
modifiers_1.default.annotateText.bind(null, entries, glossaryFilename),
|
|
41
|
+
// Resolve images
|
|
42
|
+
modifiers_1.default.resolveImages.bind(null, currentFilePath),
|
|
43
|
+
// Resolve links (.md -> .html)
|
|
44
|
+
modifiers_1.default.resolveLinks.bind(null, currentFilePath, resolveFileToURL_1.default.bind(null, output)),
|
|
45
|
+
// Highlight code blocks using "code" block
|
|
46
|
+
modifiers_1.default.highlightCode.bind(null, (lang, source) => {
|
|
47
|
+
return promise_1.default(code.applyBlock({
|
|
48
|
+
body: source,
|
|
49
|
+
kwargs: {
|
|
50
|
+
language: lang,
|
|
51
|
+
},
|
|
52
|
+
}, context)).then((result) => {
|
|
53
|
+
if (result.html === false) {
|
|
54
|
+
return { text: result.body };
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return { html: result.body };
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}),
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
exports.default = getModifiers;
|
|
@@ -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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const path_2 = __importDefault(require("../../utils/path"));
|
|
8
|
+
const location_1 = __importDefault(require("../../utils/location"));
|
|
9
|
+
const OUTPUT_EXTENSION = ".html";
|
|
10
|
+
/**
|
|
11
|
+
* Convert a filePath (absolute) to a filename for output
|
|
12
|
+
*
|
|
13
|
+
* @param {Output} output
|
|
14
|
+
* @param {string} filePath
|
|
15
|
+
* @return {string}
|
|
16
|
+
*/
|
|
17
|
+
function fileToOutput(output, filePath) {
|
|
18
|
+
const book = output.getBook();
|
|
19
|
+
const readme = book.getReadme();
|
|
20
|
+
const fileReadme = readme.getFile();
|
|
21
|
+
if (path_1.default.basename(filePath, path_1.default.extname(filePath)) == "README" ||
|
|
22
|
+
(fileReadme.exists() && filePath == fileReadme.getPath())) {
|
|
23
|
+
filePath = path_1.default.join(path_1.default.dirname(filePath), `index${OUTPUT_EXTENSION}`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
filePath = path_2.default.setExtension(filePath, OUTPUT_EXTENSION);
|
|
27
|
+
}
|
|
28
|
+
return location_1.default.normalize(filePath);
|
|
29
|
+
}
|
|
30
|
+
exports.default = fileToOutput;
|
|
@@ -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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const location_1 = __importDefault(require("../../utils/location"));
|
|
8
|
+
const fileToOutput_1 = __importDefault(require("./fileToOutput"));
|
|
9
|
+
/**
|
|
10
|
+
Convert a filePath (absolute) to an url (without hostname).
|
|
11
|
+
It returns an absolute path.
|
|
12
|
+
|
|
13
|
+
"README.md" -> "/"
|
|
14
|
+
"test/hello.md" -> "test/hello.html"
|
|
15
|
+
"test/README.md" -> "test/"
|
|
16
|
+
|
|
17
|
+
@param {Output} output
|
|
18
|
+
@param {string} filePath
|
|
19
|
+
@return {string}
|
|
20
|
+
*/
|
|
21
|
+
function fileToURL(output, filePath) {
|
|
22
|
+
const options = output.getOptions();
|
|
23
|
+
const directoryIndex = options.get("directoryIndex");
|
|
24
|
+
filePath = fileToOutput_1.default(output, filePath);
|
|
25
|
+
if (directoryIndex && path_1.default.basename(filePath) == "index.html") {
|
|
26
|
+
filePath = `${path_1.default.dirname(filePath)}/`;
|
|
27
|
+
}
|
|
28
|
+
return location_1.default.normalize(filePath);
|
|
29
|
+
}
|
|
30
|
+
exports.default = fileToURL;
|
|
@@ -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 location_1 = __importDefault(require("../../utils/location"));
|
|
7
|
+
const fileToURL_1 = __importDefault(require("./fileToURL"));
|
|
8
|
+
/**
|
|
9
|
+
* Resolve an absolute path (extracted from a link)
|
|
10
|
+
*
|
|
11
|
+
* @param {Output} output
|
|
12
|
+
* @param {string} filePath
|
|
13
|
+
* @return {string}
|
|
14
|
+
*/
|
|
15
|
+
function resolveFileToURL(output, filePath) {
|
|
16
|
+
// Convert /test.png -> test.png
|
|
17
|
+
filePath = location_1.default.toAbsolute(filePath, "", "");
|
|
18
|
+
const page = output.getPage(filePath);
|
|
19
|
+
// if file is a page, return correct .html url
|
|
20
|
+
if (page) {
|
|
21
|
+
filePath = fileToURL_1.default(output, filePath);
|
|
22
|
+
}
|
|
23
|
+
return location_1.default.normalize(filePath);
|
|
24
|
+
}
|
|
25
|
+
exports.default = resolveFileToURL;
|
|
@@ -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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const fs_1 = __importDefault(require("../../utils/fs"));
|
|
8
|
+
/**
|
|
9
|
+
Write a file to the output folder
|
|
10
|
+
|
|
11
|
+
@param {Output} output
|
|
12
|
+
@param {string} filePath
|
|
13
|
+
@param {Buffer|String} content
|
|
14
|
+
@return {Promise}
|
|
15
|
+
*/
|
|
16
|
+
function writeFile(output, filePath, content) {
|
|
17
|
+
const rootFolder = output.getRoot();
|
|
18
|
+
filePath = path_1.default.join(rootFolder, filePath);
|
|
19
|
+
return fs_1.default
|
|
20
|
+
.ensureFile(filePath)
|
|
21
|
+
.then(() => {
|
|
22
|
+
return fs_1.default.writeFile(filePath, content);
|
|
23
|
+
})
|
|
24
|
+
.thenResolve(output);
|
|
25
|
+
}
|
|
26
|
+
exports.default = writeFile;
|
|
@@ -0,0 +1,27 @@
|
|
|
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 generateBook_1 = require("./generateBook");
|
|
8
|
+
const json_1 = __importDefault(require("./json"));
|
|
9
|
+
const website_1 = __importDefault(require("./website"));
|
|
10
|
+
const ebook_1 = __importDefault(require("./ebook"));
|
|
11
|
+
const generators = immutable_1.default.List([json_1.default, website_1.default, ebook_1.default]);
|
|
12
|
+
/**
|
|
13
|
+
Return a specific generator by its name
|
|
14
|
+
|
|
15
|
+
@param {string}
|
|
16
|
+
@return {Generator}
|
|
17
|
+
*/
|
|
18
|
+
function getGenerator(name) {
|
|
19
|
+
return generators.find((generator) => {
|
|
20
|
+
return generator.name == name;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
exports.default = {
|
|
24
|
+
generate: generateBook_1.generateBook,
|
|
25
|
+
incrementalBuild: generateBook_1.incrementalBuild,
|
|
26
|
+
getGenerator: getGenerator,
|
|
27
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
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 onFinish_1 = require("./onFinish");
|
|
7
|
+
const onPage_1 = require("./onPage");
|
|
8
|
+
const options_1 = __importDefault(require("./options"));
|
|
9
|
+
exports.default = {
|
|
10
|
+
name: "json",
|
|
11
|
+
Options: options_1.default,
|
|
12
|
+
onPage: onPage_1.onPage,
|
|
13
|
+
onFinish: onFinish_1.onFinish,
|
|
14
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
exports.onFinish = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const promise_1 = __importDefault(require("../../utils/promise"));
|
|
9
|
+
const fs_1 = __importDefault(require("../../utils/fs"));
|
|
10
|
+
const json_1 = __importDefault(require("../../json"));
|
|
11
|
+
/**
|
|
12
|
+
Finish the generation
|
|
13
|
+
@param {Output} output
|
|
14
|
+
@return {Output}
|
|
15
|
+
*/
|
|
16
|
+
function onFinish(output) {
|
|
17
|
+
const book = output.getBook();
|
|
18
|
+
const outputRoot = output.getRoot();
|
|
19
|
+
if (!book.isMultilingual()) {
|
|
20
|
+
return promise_1.default(output);
|
|
21
|
+
}
|
|
22
|
+
// Get main language
|
|
23
|
+
const languages = book.getLanguages();
|
|
24
|
+
const mainLanguage = languages.getDefaultLanguage();
|
|
25
|
+
// Read the main JSON
|
|
26
|
+
return (fs_1.default
|
|
27
|
+
.readFile(path_1.default.resolve(outputRoot, mainLanguage.getID(), "README.json"), "utf8")
|
|
28
|
+
// Extend the JSON
|
|
29
|
+
.then((content) => {
|
|
30
|
+
const json = JSON.parse(content);
|
|
31
|
+
json.languages = json_1.default.encodeLanguages(languages);
|
|
32
|
+
return json;
|
|
33
|
+
})
|
|
34
|
+
.then((json) => {
|
|
35
|
+
return fs_1.default.writeFile(path_1.default.resolve(outputRoot, "README.json"), JSON.stringify(json, null, 4));
|
|
36
|
+
})
|
|
37
|
+
.thenResolve(output));
|
|
38
|
+
}
|
|
39
|
+
exports.onFinish = onFinish;
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
exports.onPage = void 0;
|
|
7
|
+
const json_1 = __importDefault(require("../../json"));
|
|
8
|
+
const path_1 = __importDefault(require("../../utils/path"));
|
|
9
|
+
const modifiers_1 = __importDefault(require("../modifiers"));
|
|
10
|
+
const writeFile_1 = __importDefault(require("../helper/writeFile"));
|
|
11
|
+
const getModifiers_1 = __importDefault(require("../getModifiers"));
|
|
12
|
+
const JSON_VERSION = "3";
|
|
13
|
+
/**
|
|
14
|
+
* Write a page as a json file
|
|
15
|
+
*
|
|
16
|
+
* @param {Output} output
|
|
17
|
+
* @param {Page} page
|
|
18
|
+
*/
|
|
19
|
+
function onPage(output, page) {
|
|
20
|
+
const file = page.getFile();
|
|
21
|
+
const readme = output.getBook().getReadme().getFile();
|
|
22
|
+
return modifiers_1.default.modifyHTML(page, getModifiers_1.default(output, page)).then((resultPage) => {
|
|
23
|
+
// Generate the JSON
|
|
24
|
+
const json = json_1.default.encodeBookWithPage(output.getBook(), resultPage);
|
|
25
|
+
// Delete some private properties
|
|
26
|
+
delete json.config;
|
|
27
|
+
// Specify JSON output version
|
|
28
|
+
// @ts-expect-error ts-migrate(2339) FIXME: Property 'version' does not exist on type '{ summa... Remove this comment to see the full error message
|
|
29
|
+
json.version = JSON_VERSION;
|
|
30
|
+
// File path in the output folder
|
|
31
|
+
let filePath = file.getPath() == readme.getPath() ? "README.json" : file.getPath();
|
|
32
|
+
filePath = path_1.default.setExtension(filePath, ".json");
|
|
33
|
+
// Write it to the disk
|
|
34
|
+
return writeFile_1.default(output, filePath, JSON.stringify(json, null, 4));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
exports.onPage = onPage;
|
|
@@ -0,0 +1,11 @@
|
|
|
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 Options = immutable_1.default.Record({
|
|
8
|
+
// Root folder for the output
|
|
9
|
+
root: String(),
|
|
10
|
+
});
|
|
11
|
+
exports.default = Options;
|
|
@@ -0,0 +1,23 @@
|
|
|
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 cheerio_1 = __importDefault(require("cheerio"));
|
|
7
|
+
const addHeadingId_1 = __importDefault(require("../addHeadingId"));
|
|
8
|
+
describe("addHeadingId", () => {
|
|
9
|
+
test("should add an ID if none", () => {
|
|
10
|
+
const $ = cheerio_1.default.load("<h1>Hello World</h1><h2>Cool !!</h2>");
|
|
11
|
+
return addHeadingId_1.default($).then(() => {
|
|
12
|
+
const html = $.html();
|
|
13
|
+
expect(html).toBe("<h1 id=\"hello-world\">Hello World</h1><h2 id=\"cool-\">Cool !!</h2>");
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
test("should not change existing IDs", () => {
|
|
17
|
+
const $ = cheerio_1.default.load("<h1 id=\"awesome\">Hello World</h1>");
|
|
18
|
+
return addHeadingId_1.default($).then(() => {
|
|
19
|
+
const html = $.html();
|
|
20
|
+
expect(html).toBe("<h1 id=\"awesome\">Hello World</h1>");
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
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 cheerio_1 = __importDefault(require("cheerio"));
|
|
8
|
+
const glossaryEntry_1 = __importDefault(require("../../../models/glossaryEntry"));
|
|
9
|
+
const annotateText_1 = __importDefault(require("../annotateText"));
|
|
10
|
+
describe("annotateText", () => {
|
|
11
|
+
const entries = immutable_1.default.List([
|
|
12
|
+
new glossaryEntry_1.default({ name: "Word" }),
|
|
13
|
+
new glossaryEntry_1.default({ name: "Multiple Words" }),
|
|
14
|
+
]);
|
|
15
|
+
test("should annotate text", () => {
|
|
16
|
+
const $ = cheerio_1.default.load("<p>This is a word, and multiple words</p>");
|
|
17
|
+
annotateText_1.default(entries, "GLOSSARY.md", $);
|
|
18
|
+
const links = $("a");
|
|
19
|
+
expect(links.length).toBe(2);
|
|
20
|
+
const word = $(links.get(0));
|
|
21
|
+
expect(word.attr("href")).toBe("/GLOSSARY.md#word");
|
|
22
|
+
expect(word.text()).toBe("word");
|
|
23
|
+
expect(word.hasClass("glossary-term")).toBeTruthy();
|
|
24
|
+
const words = $(links.get(1));
|
|
25
|
+
expect(words.attr("href")).toBe("/GLOSSARY.md#multiple-words");
|
|
26
|
+
expect(words.text()).toBe("multiple words");
|
|
27
|
+
expect(words.hasClass("glossary-term")).toBeTruthy();
|
|
28
|
+
});
|
|
29
|
+
test("should not annotate scripts", () => {
|
|
30
|
+
const $ = cheerio_1.default.load("<script>This is a word, and multiple words</script>");
|
|
31
|
+
annotateText_1.default(entries, "GLOSSARY.md", $);
|
|
32
|
+
expect($("a").length).toBe(0);
|
|
33
|
+
});
|
|
34
|
+
test('should not annotate when has class "no-glossary"', () => {
|
|
35
|
+
const $ = cheerio_1.default.load('<p class="no-glossary">This is a word, and multiple words</p>');
|
|
36
|
+
annotateText_1.default(entries, "GLOSSARY.md", $);
|
|
37
|
+
expect($("a").length).toBe(0);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
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 cheerio_1 = __importDefault(require("cheerio"));
|
|
7
|
+
const tmp_1 = __importDefault(require("tmp"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const fetchRemoteImages_1 = __importDefault(require("../fetchRemoteImages"));
|
|
10
|
+
const URL = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/280px-PNG_transparency_demonstration_1.png";
|
|
11
|
+
describe.skip("fetchRemoteImages", () => {
|
|
12
|
+
let dir;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
dir = tmp_1.default.dirSync();
|
|
15
|
+
});
|
|
16
|
+
test("should download image file", () => {
|
|
17
|
+
const $ = cheerio_1.default.load(`<img src="${URL}" />`);
|
|
18
|
+
return fetchRemoteImages_1.default(dir.name, "index.html", $).then(() => {
|
|
19
|
+
const $img = $("img");
|
|
20
|
+
const src = $img.attr("src");
|
|
21
|
+
expect(dir.name).toHaveFile(src);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
test("should download image file and replace with relative path", () => {
|
|
25
|
+
const $ = cheerio_1.default.load(`<img src="${URL}" />`);
|
|
26
|
+
return fetchRemoteImages_1.default(dir.name, "test/index.html", $).then(() => {
|
|
27
|
+
const $img = $("img");
|
|
28
|
+
const src = $img.attr("src");
|
|
29
|
+
expect(dir.name).toHaveFile(path_1.default.join("test", src));
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|