honkit 3.6.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +10 -0
  3. package/bin/honkit.js +8 -0
  4. package/lib/BuildGenerator.js +2 -0
  5. package/lib/__tests__/__fixtures__/honkit/book.js +9 -0
  6. package/lib/__tests__/githon.js +11 -0
  7. package/lib/__tests__/init.js +19 -0
  8. package/lib/__tests__/snapshot-honkit.js +45 -0
  9. package/lib/api/decodeConfig.js +17 -0
  10. package/lib/api/decodeGlobal.js +21 -0
  11. package/lib/api/decodePage.js +41 -0
  12. package/lib/api/deprecate.js +113 -0
  13. package/lib/api/encodeConfig.js +30 -0
  14. package/lib/api/encodeGlobal.js +226 -0
  15. package/lib/api/encodeNavigation.js +60 -0
  16. package/lib/api/encodePage.js +37 -0
  17. package/lib/api/encodeProgress.js +58 -0
  18. package/lib/api/encodeSummary.js +52 -0
  19. package/lib/api/index.js +15 -0
  20. package/lib/bin.js +46 -0
  21. package/lib/browser.js +41 -0
  22. package/lib/cli/build.js +36 -0
  23. package/lib/cli/buildEbook.js +63 -0
  24. package/lib/cli/getBook.js +24 -0
  25. package/lib/cli/getOutputFolder.js +19 -0
  26. package/lib/cli/index.js +11 -0
  27. package/lib/cli/init.js +17 -0
  28. package/lib/cli/options.js +38 -0
  29. package/lib/cli/parse.js +65 -0
  30. package/lib/cli/serve.js +184 -0
  31. package/lib/cli/server.js +116 -0
  32. package/lib/cli/watch.js +35 -0
  33. package/lib/constants/__tests__/configSchema.js +41 -0
  34. package/lib/constants/configDefault.js +9 -0
  35. package/lib/constants/configFiles.js +3 -0
  36. package/lib/constants/configSchema.js +235 -0
  37. package/lib/constants/defaultBlocks.js +48 -0
  38. package/lib/constants/defaultFilters.js +18 -0
  39. package/lib/constants/defaultPlugins.js +20 -0
  40. package/lib/constants/extsAsciidoc.js +3 -0
  41. package/lib/constants/extsMarkdown.js +3 -0
  42. package/lib/constants/ignoreFiles.js +3 -0
  43. package/lib/constants/pluginAssetsFolder.js +3 -0
  44. package/lib/constants/pluginHooks.js +3 -0
  45. package/lib/constants/pluginPrefix.js +3 -0
  46. package/lib/constants/pluginResources.js +7 -0
  47. package/lib/constants/templatesFolder.js +3 -0
  48. package/lib/constants/themePrefix.js +3 -0
  49. package/lib/fs/__tests__/mock.js +68 -0
  50. package/lib/fs/mock.js +88 -0
  51. package/lib/fs/node.js +44 -0
  52. package/lib/honkit.js +34 -0
  53. package/lib/index.js +17 -0
  54. package/lib/init.js +79 -0
  55. package/lib/json/encodeBook.js +41 -0
  56. package/lib/json/encodeBookWithPage.js +25 -0
  57. package/lib/json/encodeFile.js +20 -0
  58. package/lib/json/encodeGlossary.js +22 -0
  59. package/lib/json/encodeGlossaryEntry.js +16 -0
  60. package/lib/json/encodeLanguages.js +29 -0
  61. package/lib/json/encodeOutput.js +26 -0
  62. package/lib/json/encodeOutputWithPage.js +26 -0
  63. package/lib/json/encodePage.js +38 -0
  64. package/lib/json/encodeReadme.js +19 -0
  65. package/lib/json/encodeSummary.js +22 -0
  66. package/lib/json/encodeSummaryArticle.js +25 -0
  67. package/lib/json/encodeSummaryPart.js +19 -0
  68. package/lib/json/index.js +27 -0
  69. package/lib/models/__tests__/config.js +164 -0
  70. package/lib/models/__tests__/glossary.js +38 -0
  71. package/lib/models/__tests__/glossaryEntry.js +16 -0
  72. package/lib/models/__tests__/page.js +26 -0
  73. package/lib/models/__tests__/plugin.js +26 -0
  74. package/lib/models/__tests__/pluginDependency.js +71 -0
  75. package/lib/models/__tests__/summary.js +115 -0
  76. package/lib/models/__tests__/summaryArticle.js +62 -0
  77. package/lib/models/__tests__/summaryPart.js +24 -0
  78. package/lib/models/__tests__/templateBlock.js +172 -0
  79. package/lib/models/__tests__/templateEngine.js +49 -0
  80. package/lib/models/book.js +312 -0
  81. package/lib/models/config.js +152 -0
  82. package/lib/models/file.js +83 -0
  83. package/lib/models/fs.js +255 -0
  84. package/lib/models/glossary.js +90 -0
  85. package/lib/models/glossaryEntry.js +34 -0
  86. package/lib/models/hash.js +191 -0
  87. package/lib/models/ignore.js +40 -0
  88. package/lib/models/language.js +22 -0
  89. package/lib/models/languages.js +64 -0
  90. package/lib/models/output.js +109 -0
  91. package/lib/models/page.js +91 -0
  92. package/lib/models/parser.js +102 -0
  93. package/lib/models/plugin.js +139 -0
  94. package/lib/models/pluginDependency.js +192 -0
  95. package/lib/models/readme.js +38 -0
  96. package/lib/models/summary.js +199 -0
  97. package/lib/models/summaryArticle.js +169 -0
  98. package/lib/models/summaryPart.js +53 -0
  99. package/lib/models/templateBlock.js +230 -0
  100. package/lib/models/templateEngine.js +115 -0
  101. package/lib/models/templateOutput.js +36 -0
  102. package/lib/models/templateShortcut.js +65 -0
  103. package/lib/modifiers/config/__tests__/addPlugin.js +30 -0
  104. package/lib/modifiers/config/__tests__/removePlugin.js +29 -0
  105. package/lib/modifiers/config/__tests__/togglePlugin.js +28 -0
  106. package/lib/modifiers/config/addPlugin.js +27 -0
  107. package/lib/modifiers/config/editPlugin.js +13 -0
  108. package/lib/modifiers/config/getPluginConfig.js +22 -0
  109. package/lib/modifiers/config/hasPlugin.js +15 -0
  110. package/lib/modifiers/config/index.js +21 -0
  111. package/lib/modifiers/config/isDefaultPlugin.js +17 -0
  112. package/lib/modifiers/config/removePlugin.js +27 -0
  113. package/lib/modifiers/config/togglePlugin.js +32 -0
  114. package/lib/modifiers/index.js +11 -0
  115. package/lib/modifiers/summary/__tests__/editPartTitle.js +41 -0
  116. package/lib/modifiers/summary/__tests__/insertArticle.js +72 -0
  117. package/lib/modifiers/summary/__tests__/insertPart.js +56 -0
  118. package/lib/modifiers/summary/__tests__/mergeAtLevel.js +45 -0
  119. package/lib/modifiers/summary/__tests__/moveArticle.js +66 -0
  120. package/lib/modifiers/summary/__tests__/moveArticleAfter.js +75 -0
  121. package/lib/modifiers/summary/__tests__/removeArticle.js +54 -0
  122. package/lib/modifiers/summary/editArticleRef.js +20 -0
  123. package/lib/modifiers/summary/editArticleTitle.js +20 -0
  124. package/lib/modifiers/summary/editPartTitle.js +21 -0
  125. package/lib/modifiers/summary/index.js +27 -0
  126. package/lib/modifiers/summary/indexArticleLevels.js +21 -0
  127. package/lib/modifiers/summary/indexLevels.js +18 -0
  128. package/lib/modifiers/summary/indexPartLevels.js +25 -0
  129. package/lib/modifiers/summary/insertArticle.js +47 -0
  130. package/lib/modifiers/summary/insertPart.js +21 -0
  131. package/lib/modifiers/summary/mergeAtLevel.js +68 -0
  132. package/lib/modifiers/summary/moveArticle.js +27 -0
  133. package/lib/modifiers/summary/moveArticleAfter.js +59 -0
  134. package/lib/modifiers/summary/removeArticle.js +36 -0
  135. package/lib/modifiers/summary/removePart.js +18 -0
  136. package/lib/modifiers/summary/unshiftArticle.js +27 -0
  137. package/lib/output/__tests__/ebook.js +17 -0
  138. package/lib/output/__tests__/json.js +43 -0
  139. package/lib/output/__tests__/plugin-hooks.js +57 -0
  140. package/lib/output/__tests__/website.js +121 -0
  141. package/lib/output/callHook.js +51 -0
  142. package/lib/output/callPageHook.js +23 -0
  143. package/lib/output/createTemplateEngine.js +42 -0
  144. package/lib/output/ebook/getConvertOptions.js +69 -0
  145. package/lib/output/ebook/getCoverPath.js +30 -0
  146. package/lib/output/ebook/getPDFTemplate.js +40 -0
  147. package/lib/output/ebook/index.js +16 -0
  148. package/lib/output/ebook/onFinish.js +84 -0
  149. package/lib/output/ebook/onPage.js +23 -0
  150. package/lib/output/ebook/options.js +17 -0
  151. package/lib/output/generateAssets.js +26 -0
  152. package/lib/output/generateBook.js +167 -0
  153. package/lib/output/generatePage.js +90 -0
  154. package/lib/output/generatePages.js +52 -0
  155. package/lib/output/getModifiers.js +63 -0
  156. package/lib/output/helper/fileToOutput.js +30 -0
  157. package/lib/output/helper/fileToURL.js +30 -0
  158. package/lib/output/helper/index.js +3 -0
  159. package/lib/output/helper/resolveFileToURL.js +25 -0
  160. package/lib/output/helper/writeFile.js +26 -0
  161. package/lib/output/index.js +27 -0
  162. package/lib/output/json/index.js +14 -0
  163. package/lib/output/json/onFinish.js +39 -0
  164. package/lib/output/json/onPage.js +37 -0
  165. package/lib/output/json/options.js +11 -0
  166. package/lib/output/modifiers/__tests__/addHeadingId.js +23 -0
  167. package/lib/output/modifiers/__tests__/annotateText.js +39 -0
  168. package/lib/output/modifiers/__tests__/fetchRemoteImages.js +32 -0
  169. package/lib/output/modifiers/__tests__/highlightCode.js +48 -0
  170. package/lib/output/modifiers/__tests__/inlinePng.js +22 -0
  171. package/lib/output/modifiers/__tests__/inlineSvg.js +42 -0
  172. package/lib/output/modifiers/__tests__/resolveImages.js +39 -0
  173. package/lib/output/modifiers/__tests__/resolveLinks.js +81 -0
  174. package/lib/output/modifiers/__tests__/svgToImg.js +29 -0
  175. package/lib/output/modifiers/addHeadingId.js +26 -0
  176. package/lib/output/modifiers/annotateText.js +76 -0
  177. package/lib/output/modifiers/editHTMLElement.js +17 -0
  178. package/lib/output/modifiers/fetchRemoteImages.js +42 -0
  179. package/lib/output/modifiers/highlightCode.js +59 -0
  180. package/lib/output/modifiers/index.js +26 -0
  181. package/lib/output/modifiers/inlineAssets.js +29 -0
  182. package/lib/output/modifiers/inlinePng.js +43 -0
  183. package/lib/output/modifiers/inlineSvg.js +39 -0
  184. package/lib/output/modifiers/modifyHTML.js +27 -0
  185. package/lib/output/modifiers/resolveImages.js +30 -0
  186. package/lib/output/modifiers/resolveLinks.js +46 -0
  187. package/lib/output/modifiers/svgToImg.js +58 -0
  188. package/lib/output/page-cache.js +15 -0
  189. package/lib/output/prepareAssets.js +22 -0
  190. package/lib/output/preparePages.js +25 -0
  191. package/lib/output/preparePlugins.js +36 -0
  192. package/lib/output/testing/createMock.js +39 -0
  193. package/lib/output/testing/generateMock.js +55 -0
  194. package/lib/output/website/__tests__/i18n.js +40 -0
  195. package/lib/output/website/copyPluginAssets.js +92 -0
  196. package/lib/output/website/createTemplateEngine.js +136 -0
  197. package/lib/output/website/index.js +22 -0
  198. package/lib/output/website/listSearchPaths.js +20 -0
  199. package/lib/output/website/onAsset.js +29 -0
  200. package/lib/output/website/onFinish.js +35 -0
  201. package/lib/output/website/onInit.js +19 -0
  202. package/lib/output/website/onPage.js +73 -0
  203. package/lib/output/website/options.js +15 -0
  204. package/lib/output/website/prepareI18n.js +28 -0
  205. package/lib/output/website/prepareResources.js +49 -0
  206. package/lib/output/website/state.js +20 -0
  207. package/lib/parse/__tests__/listAssets.js +63 -0
  208. package/lib/parse/__tests__/parseBook.js +77 -0
  209. package/lib/parse/__tests__/parseGlossary.js +32 -0
  210. package/lib/parse/__tests__/parseIgnore.js +37 -0
  211. package/lib/parse/__tests__/parsePageFromString.js +34 -0
  212. package/lib/parse/__tests__/parseReadme.js +33 -0
  213. package/lib/parse/__tests__/parseSummary.js +30 -0
  214. package/lib/parse/findParsableFile.js +33 -0
  215. package/lib/parse/index.js +31 -0
  216. package/lib/parse/listAssets.js +36 -0
  217. package/lib/parse/lookupStructureFile.js +21 -0
  218. package/lib/parse/parseBook.js +68 -0
  219. package/lib/parse/parseConfig.js +52 -0
  220. package/lib/parse/parseGlossary.js +25 -0
  221. package/lib/parse/parseIgnore.js +43 -0
  222. package/lib/parse/parseLanguages.js +26 -0
  223. package/lib/parse/parsePage.js +21 -0
  224. package/lib/parse/parsePageFromString.js +25 -0
  225. package/lib/parse/parsePagesList.js +80 -0
  226. package/lib/parse/parseReadme.js +26 -0
  227. package/lib/parse/parseStructureFile.js +64 -0
  228. package/lib/parse/parseSummary.js +43 -0
  229. package/lib/parse/validateConfig.js +31 -0
  230. package/lib/parse/walkSummary.js +34 -0
  231. package/lib/parsers.js +60 -0
  232. package/lib/plugins/PluginResolver.js +84 -0
  233. package/lib/plugins/__tests__/findInstalled.js +25 -0
  234. package/lib/plugins/__tests__/listDependencies.js +28 -0
  235. package/lib/plugins/__tests__/sortDependencies.js +28 -0
  236. package/lib/plugins/__tests__/validatePlugin.js +99 -0
  237. package/lib/plugins/findInstalled.js +87 -0
  238. package/lib/plugins/index.js +17 -0
  239. package/lib/plugins/listBlocks.js +19 -0
  240. package/lib/plugins/listDependencies.js +33 -0
  241. package/lib/plugins/listDepsForBook.js +20 -0
  242. package/lib/plugins/listFilters.js +18 -0
  243. package/lib/plugins/listResources.js +44 -0
  244. package/lib/plugins/loadForBook.js +38 -0
  245. package/lib/plugins/loadPlugin.js +89 -0
  246. package/lib/plugins/package-name-util.js +48 -0
  247. package/lib/plugins/sortDependencies.js +30 -0
  248. package/lib/plugins/toNames.js +16 -0
  249. package/lib/plugins/validateConfig.js +60 -0
  250. package/lib/plugins/validatePlugin.js +36 -0
  251. package/lib/templating/__tests__/conrefsLoader.js +93 -0
  252. package/lib/templating/__tests__/postRender.js +52 -0
  253. package/lib/templating/__tests__/replaceShortcuts.js +27 -0
  254. package/lib/templating/conrefsLoader.js +88 -0
  255. package/lib/templating/index.js +19 -0
  256. package/lib/templating/listShortcuts.js +29 -0
  257. package/lib/templating/postRender.js +46 -0
  258. package/lib/templating/render.js +41 -0
  259. package/lib/templating/renderFile.js +39 -0
  260. package/lib/templating/replaceShortcuts.js +36 -0
  261. package/lib/templating/themesLoader.js +98 -0
  262. package/lib/utils/__tests__/git.js +47 -0
  263. package/lib/utils/__tests__/location.js +81 -0
  264. package/lib/utils/__tests__/path.js +19 -0
  265. package/lib/utils/command.js +104 -0
  266. package/lib/utils/error.js +88 -0
  267. package/lib/utils/fs.js +163 -0
  268. package/lib/utils/genKey.js +13 -0
  269. package/lib/utils/git.js +116 -0
  270. package/lib/utils/images.js +22 -0
  271. package/lib/utils/location.js +129 -0
  272. package/lib/utils/logger.js +158 -0
  273. package/lib/utils/mergeDefaults.js +18 -0
  274. package/lib/utils/path.js +62 -0
  275. package/lib/utils/promise.js +142 -0
  276. package/lib/utils/reducedObject.js +31 -0
  277. package/lib/utils/timing.js +90 -0
  278. package/package.json +112 -0
@@ -0,0 +1,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;
@@ -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;