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,83 @@
|
|
|
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 immutable_1 = __importDefault(require("immutable"));
|
|
8
|
+
const parsers_1 = __importDefault(require("../parsers"));
|
|
9
|
+
class File extends immutable_1.default.Record({
|
|
10
|
+
// Path of the file, relative to the FS
|
|
11
|
+
path: String(),
|
|
12
|
+
// Time when file data last modified
|
|
13
|
+
mtime: Date(),
|
|
14
|
+
}) {
|
|
15
|
+
getPath() {
|
|
16
|
+
return this.get("path");
|
|
17
|
+
}
|
|
18
|
+
getMTime() {
|
|
19
|
+
return this.get("mtime");
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
Does the file exists / is set
|
|
23
|
+
|
|
24
|
+
@return {boolean}
|
|
25
|
+
*/
|
|
26
|
+
exists() {
|
|
27
|
+
return Boolean(this.getPath());
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
Return type of file ('markdown' or 'asciidoc')
|
|
31
|
+
|
|
32
|
+
@return {string}
|
|
33
|
+
*/
|
|
34
|
+
getType() {
|
|
35
|
+
const parser = this.getParser();
|
|
36
|
+
if (parser) {
|
|
37
|
+
return parser.getName();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
Return extension of this file (lowercased)
|
|
45
|
+
|
|
46
|
+
@return {string}
|
|
47
|
+
*/
|
|
48
|
+
getExtension() {
|
|
49
|
+
return path_1.default.extname(this.getPath()).toLowerCase();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
Return parser for this file
|
|
53
|
+
|
|
54
|
+
@return {Parser}
|
|
55
|
+
*/
|
|
56
|
+
getParser() {
|
|
57
|
+
return parsers_1.default.getByExt(this.getExtension());
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
Create a file from stats informations
|
|
61
|
+
|
|
62
|
+
@param {string} filepath
|
|
63
|
+
@param {Object|fs.Stats} stat
|
|
64
|
+
@return {File}
|
|
65
|
+
*/
|
|
66
|
+
static createFromStat(filepath, stat) {
|
|
67
|
+
return new File({
|
|
68
|
+
path: filepath,
|
|
69
|
+
mtime: stat.mtime,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
Create a file with only a path
|
|
74
|
+
@param {string} filepath
|
|
75
|
+
@return {File}
|
|
76
|
+
*/
|
|
77
|
+
static createWithFilepath(filepath) {
|
|
78
|
+
return new File({
|
|
79
|
+
path: filepath,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.default = File;
|
package/lib/models/fs.js
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
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 immutable_1 = __importDefault(require("immutable"));
|
|
8
|
+
const stream_1 = __importDefault(require("stream"));
|
|
9
|
+
const file_1 = __importDefault(require("./file"));
|
|
10
|
+
const promise_1 = __importDefault(require("../utils/promise"));
|
|
11
|
+
const error_1 = __importDefault(require("../utils/error"));
|
|
12
|
+
const path_2 = __importDefault(require("../utils/path"));
|
|
13
|
+
class FS extends immutable_1.default.Record({
|
|
14
|
+
root: String(),
|
|
15
|
+
fsExists: Function(),
|
|
16
|
+
fsReadFile: Function(),
|
|
17
|
+
fsStatFile: Function(),
|
|
18
|
+
fsReadDir: Function(),
|
|
19
|
+
fsLoadObject: null,
|
|
20
|
+
fsReadAsStream: null,
|
|
21
|
+
}) {
|
|
22
|
+
/**
|
|
23
|
+
Return path to the root
|
|
24
|
+
|
|
25
|
+
@return {string}
|
|
26
|
+
*/
|
|
27
|
+
getRoot() {
|
|
28
|
+
return this.get("root");
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
Verify that a file is in the fs scope
|
|
32
|
+
|
|
33
|
+
@param {string} filename
|
|
34
|
+
@return {boolean}
|
|
35
|
+
*/
|
|
36
|
+
isInScope(filename) {
|
|
37
|
+
const rootPath = this.getRoot();
|
|
38
|
+
filename = path_1.default.join(rootPath, filename);
|
|
39
|
+
return path_2.default.isInRoot(rootPath, filename);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
Resolve a file in this FS
|
|
43
|
+
@return {string}
|
|
44
|
+
*/
|
|
45
|
+
resolve(...args) {
|
|
46
|
+
const rootPath = this.getRoot();
|
|
47
|
+
let filename = path_1.default.join.apply(path_1.default, [rootPath].concat(args));
|
|
48
|
+
filename = path_1.default.normalize(filename);
|
|
49
|
+
if (!this.isInScope(filename)) {
|
|
50
|
+
throw error_1.default.FileOutOfScopeError({
|
|
51
|
+
filename: filename,
|
|
52
|
+
root: rootPath,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return filename;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
Check if a file exists, run a Promise(true) if that's the case, Promise(false) otherwise
|
|
59
|
+
|
|
60
|
+
@param {string} filename
|
|
61
|
+
@return {Promise<Boolean>}
|
|
62
|
+
*/
|
|
63
|
+
exists(filename) {
|
|
64
|
+
const that = this;
|
|
65
|
+
return promise_1.default().then(() => {
|
|
66
|
+
filename = that.resolve(filename);
|
|
67
|
+
const exists = that.get("fsExists");
|
|
68
|
+
return exists(filename);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
Read a file and returns a promise with the content as a buffer
|
|
73
|
+
|
|
74
|
+
@param {string} filename
|
|
75
|
+
@return {Promise<Buffer>}
|
|
76
|
+
*/
|
|
77
|
+
read(filename) {
|
|
78
|
+
const that = this;
|
|
79
|
+
return promise_1.default().then(() => {
|
|
80
|
+
filename = that.resolve(filename);
|
|
81
|
+
const read = that.get("fsReadFile");
|
|
82
|
+
return read(filename);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
Read a file as a string (utf-8)
|
|
87
|
+
@return {Promise<String>}
|
|
88
|
+
*/
|
|
89
|
+
readAsString(filename, encoding = "utf8") {
|
|
90
|
+
return this.read(filename).then((buf) => {
|
|
91
|
+
return buf.toString(encoding);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
Read file as a stream
|
|
96
|
+
|
|
97
|
+
@param {string} filename
|
|
98
|
+
@return {Promise<Stream>}
|
|
99
|
+
*/
|
|
100
|
+
readAsStream(filename) {
|
|
101
|
+
const that = this;
|
|
102
|
+
const filepath = that.resolve(filename);
|
|
103
|
+
const fsReadAsStream = this.get("fsReadAsStream");
|
|
104
|
+
if (fsReadAsStream) {
|
|
105
|
+
return promise_1.default(fsReadAsStream(filepath));
|
|
106
|
+
}
|
|
107
|
+
return this.read(filename).then((buf) => {
|
|
108
|
+
const bufferStream = new stream_1.default.PassThrough();
|
|
109
|
+
bufferStream.end(buf);
|
|
110
|
+
return bufferStream;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
Read stat infos about a file
|
|
115
|
+
|
|
116
|
+
@param {string} filename
|
|
117
|
+
@return {Promise<File>}
|
|
118
|
+
*/
|
|
119
|
+
statFile(filename) {
|
|
120
|
+
const that = this;
|
|
121
|
+
return promise_1.default()
|
|
122
|
+
.then(() => {
|
|
123
|
+
const filepath = that.resolve(filename);
|
|
124
|
+
const stat = that.get("fsStatFile");
|
|
125
|
+
return stat(filepath);
|
|
126
|
+
})
|
|
127
|
+
.then((stat) => {
|
|
128
|
+
return file_1.default.createFromStat(filename, stat);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
List files/directories in a directory.
|
|
133
|
+
Directories ends with '/'
|
|
134
|
+
|
|
135
|
+
@param {string} dirname
|
|
136
|
+
@return {Promise<List<String>>}
|
|
137
|
+
*/
|
|
138
|
+
readDir(dirname) {
|
|
139
|
+
const that = this;
|
|
140
|
+
return promise_1.default()
|
|
141
|
+
.then(() => {
|
|
142
|
+
const dirpath = that.resolve(dirname);
|
|
143
|
+
const readDir = that.get("fsReadDir");
|
|
144
|
+
return readDir(dirpath);
|
|
145
|
+
})
|
|
146
|
+
.then((files) => {
|
|
147
|
+
return immutable_1.default.List(files);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
List only files in a diretcory
|
|
152
|
+
Directories ends with '/'
|
|
153
|
+
|
|
154
|
+
@param {string} dirname
|
|
155
|
+
@return {Promise<List<String>>}
|
|
156
|
+
*/
|
|
157
|
+
listFiles(dirname) {
|
|
158
|
+
return this.readDir(dirname).then((files) => {
|
|
159
|
+
return files.filterNot(pathIsFolder);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
List all files in a directory
|
|
164
|
+
|
|
165
|
+
@param {string} dirName
|
|
166
|
+
@param {Function(dirName)} filterFn: call it for each file/directory to test if it should stop iterating
|
|
167
|
+
@return {Promise<List<String>>}
|
|
168
|
+
*/
|
|
169
|
+
listAllFiles(dirName, filterFn) {
|
|
170
|
+
const that = this;
|
|
171
|
+
dirName = dirName || ".";
|
|
172
|
+
return this.readDir(dirName).then((files) => {
|
|
173
|
+
return promise_1.default.reduce(files, (out, file) => {
|
|
174
|
+
const isDirectory = pathIsFolder(file);
|
|
175
|
+
const newDirName = path_1.default.join(dirName, file);
|
|
176
|
+
if (filterFn && filterFn(newDirName) === false) {
|
|
177
|
+
return out;
|
|
178
|
+
}
|
|
179
|
+
if (!isDirectory) {
|
|
180
|
+
return out.push(newDirName);
|
|
181
|
+
}
|
|
182
|
+
return that.listAllFiles(newDirName, filterFn).then((inner) => {
|
|
183
|
+
return out.concat(inner);
|
|
184
|
+
});
|
|
185
|
+
}, immutable_1.default.List());
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
Find a file in a folder (case insensitive)
|
|
190
|
+
Return the found filename
|
|
191
|
+
|
|
192
|
+
@param {string} dirname
|
|
193
|
+
@param {string} filename
|
|
194
|
+
@return {Promise<String>}
|
|
195
|
+
*/
|
|
196
|
+
findFile(dirname, filename) {
|
|
197
|
+
return this.listFiles(dirname).then((files) => {
|
|
198
|
+
return files.find((file) => {
|
|
199
|
+
return file.toLowerCase() == filename.toLowerCase();
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
Load a JSON file
|
|
205
|
+
By default, fs only supports JSON
|
|
206
|
+
|
|
207
|
+
@param {string} filename
|
|
208
|
+
@return {Promise<Object>}
|
|
209
|
+
*/
|
|
210
|
+
loadAsObject(filename) {
|
|
211
|
+
const that = this;
|
|
212
|
+
const fsLoadObject = this.get("fsLoadObject");
|
|
213
|
+
return this.exists(filename).then((exists) => {
|
|
214
|
+
if (!exists) {
|
|
215
|
+
const err = new Error("Module doesn't exist");
|
|
216
|
+
// @ts-expect-error ts-migrate(2339) FIXME: Property 'code' does not exist on type 'Error'.
|
|
217
|
+
err.code = "MODULE_NOT_FOUND";
|
|
218
|
+
throw err;
|
|
219
|
+
}
|
|
220
|
+
if (fsLoadObject) {
|
|
221
|
+
return fsLoadObject(that.resolve(filename));
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
return that.readAsString(filename).then((str) => {
|
|
225
|
+
return JSON.parse(str);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
Create a FS instance
|
|
232
|
+
|
|
233
|
+
@param {Object} def
|
|
234
|
+
@return {FS}
|
|
235
|
+
*/
|
|
236
|
+
static create(def) {
|
|
237
|
+
return new FS(def);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
Create a new FS instance with a reduced scope
|
|
241
|
+
|
|
242
|
+
@param {FS} fs
|
|
243
|
+
@param {string} scope
|
|
244
|
+
@return {FS}
|
|
245
|
+
*/
|
|
246
|
+
static reduceScope(fs, scope) {
|
|
247
|
+
return fs.set("root", path_1.default.join(fs.getRoot(), scope));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// .readdir return files/folder as a list of string, folder ending with '/'
|
|
251
|
+
function pathIsFolder(filename) {
|
|
252
|
+
const lastChar = filename[filename.length - 1];
|
|
253
|
+
return lastChar == "/" || lastChar == "\\";
|
|
254
|
+
}
|
|
255
|
+
exports.default = FS;
|
|
@@ -0,0 +1,90 @@
|
|
|
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 error_1 = __importDefault(require("../utils/error"));
|
|
8
|
+
const file_1 = __importDefault(require("./file"));
|
|
9
|
+
const glossaryEntry_1 = __importDefault(require("./glossaryEntry"));
|
|
10
|
+
const parsers_1 = __importDefault(require("../parsers"));
|
|
11
|
+
class Glossary extends immutable_1.default.Record({
|
|
12
|
+
file: new file_1.default(),
|
|
13
|
+
entries: immutable_1.default.OrderedMap(),
|
|
14
|
+
}) {
|
|
15
|
+
getFile() {
|
|
16
|
+
return this.get("file");
|
|
17
|
+
}
|
|
18
|
+
getEntries() {
|
|
19
|
+
return this.get("entries");
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
Return an entry by its name
|
|
23
|
+
@param {string} name
|
|
24
|
+
@return {GlossaryEntry}
|
|
25
|
+
*/
|
|
26
|
+
getEntry(name) {
|
|
27
|
+
const entries = this.getEntries();
|
|
28
|
+
const id = glossaryEntry_1.default.nameToID(name);
|
|
29
|
+
return entries.get(id);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
Render glossary as text
|
|
33
|
+
|
|
34
|
+
@return {Promise<String>}
|
|
35
|
+
*/
|
|
36
|
+
toText(parser) {
|
|
37
|
+
const file = this.getFile();
|
|
38
|
+
const entries = this.getEntries();
|
|
39
|
+
parser = parser ? parsers_1.default.getByExt(parser) : file.getParser();
|
|
40
|
+
if (!parser) {
|
|
41
|
+
throw error_1.default.FileNotParsableError({
|
|
42
|
+
filename: file.getPath(),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return parser.renderGlossary(entries.toJS());
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
Add/Replace an entry to a glossary
|
|
49
|
+
|
|
50
|
+
@param {Glossary} glossary
|
|
51
|
+
@param {GlossaryEntry} entry
|
|
52
|
+
@return {Glossary}
|
|
53
|
+
*/
|
|
54
|
+
static addEntry(glossary, entry) {
|
|
55
|
+
const id = entry.getID();
|
|
56
|
+
let entries = glossary.getEntries();
|
|
57
|
+
entries = entries.set(id, entry);
|
|
58
|
+
return glossary.set("entries", entries);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
Add/Replace an entry to a glossary by name/description
|
|
62
|
+
*/
|
|
63
|
+
static addEntryByName(glossary, name, description) {
|
|
64
|
+
const entry = new glossaryEntry_1.default({
|
|
65
|
+
name: name,
|
|
66
|
+
description: description,
|
|
67
|
+
});
|
|
68
|
+
return Glossary.addEntry(glossary, entry);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
Create a glossary from a list of entries
|
|
72
|
+
|
|
73
|
+
@param file
|
|
74
|
+
@param {Array|List} entries
|
|
75
|
+
@return {Glossary}
|
|
76
|
+
*/
|
|
77
|
+
static createFromEntries(file, entries) {
|
|
78
|
+
entries = entries.map((entry) => {
|
|
79
|
+
if (!(entry instanceof glossaryEntry_1.default)) {
|
|
80
|
+
entry = new glossaryEntry_1.default(entry);
|
|
81
|
+
}
|
|
82
|
+
return [entry.getID(), entry];
|
|
83
|
+
});
|
|
84
|
+
return new Glossary({
|
|
85
|
+
file: file,
|
|
86
|
+
entries: immutable_1.default.OrderedMap(entries),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.default = Glossary;
|
|
@@ -0,0 +1,34 @@
|
|
|
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 github_slugid_1 = __importDefault(require("github-slugid"));
|
|
8
|
+
/*
|
|
9
|
+
A definition represents an entry in the glossary
|
|
10
|
+
*/
|
|
11
|
+
class GlossaryEntry extends immutable_1.default.Record({
|
|
12
|
+
name: String(),
|
|
13
|
+
description: String(),
|
|
14
|
+
}) {
|
|
15
|
+
getName() {
|
|
16
|
+
return this.get("name");
|
|
17
|
+
}
|
|
18
|
+
getDescription() {
|
|
19
|
+
return this.get("description");
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
Get identifier for this entry
|
|
23
|
+
*/
|
|
24
|
+
getID() {
|
|
25
|
+
return GlossaryEntry.nameToID(this.getName());
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
Normalize a glossary entry name into a unique id
|
|
29
|
+
*/
|
|
30
|
+
static nameToID(name) {
|
|
31
|
+
return github_slugid_1.default(name);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.default = GlossaryEntry;
|