umberto 9.4.0 → 10.0.0

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 (225) hide show
  1. package/CHANGELOG.md +8 -9
  2. package/LICENSE.md +0 -44
  3. package/README.md +0 -1
  4. package/hexo-shim.js +2 -2
  5. package/package.json +2 -9
  6. package/scripts/filter/after-post-render/{gloria.js → gloria.cjs} +3 -3
  7. package/scripts/filter/after-post-render/{insert-error-codes.js → insert-error-codes.cjs} +1 -1
  8. package/scripts/filter/after-post-render/{linker.js → linker.cjs} +1 -1
  9. package/scripts/filter/after-post-render/{parseicontag.js → parseicontag.cjs} +1 -1
  10. package/scripts/filter/after-post-render/{snippets.js → snippets.cjs} +2 -2
  11. package/scripts/filter/after-render/{process-svg.js → process-svg.cjs} +3 -3
  12. package/scripts/filter/before-post-render/{add-project-info-to-page.js → add-project-info-to-page.cjs} +2 -2
  13. package/scripts/filter/before-post-render/{add-repo-url.js → add-repo-url.cjs} +4 -4
  14. package/scripts/filter/before-post-render/{code-switcher.js → code-switcher.cjs} +1 -1
  15. package/scripts/filter/before-post-render/{execute-and-insert-function-results.js → execute-and-insert-function-results.cjs} +1 -1
  16. package/scripts/filter/before-post-render/gloria/{add-breadcrumbs-data-to-page.js → add-breadcrumbs-data-to-page.cjs} +4 -4
  17. package/scripts/filter/before-post-render/gloria/{prerender-admonitions.js → prerender-admonitions.cjs} +1 -1
  18. package/scripts/filter/before-post-render/gloria/{prerender-xml-pug-components.js → prerender-xml-pug-components.cjs} +5 -5
  19. package/scripts/filter/before-post-render/gloria/{render-post-render-pug-components.js → render-post-render-pug-components.cjs} +1 -1
  20. package/scripts/filter/before-post-render/{has-own-favicons.js → has-own-favicons.cjs} +1 -1
  21. package/scripts/filter/before-post-render/{infobox.js → infobox.cjs} +1 -1
  22. package/scripts/filter/before-post-render/{insertchangelog.js → insertchangelog.cjs} +1 -1
  23. package/scripts/filter/before-post-render/{replace-macros.js → replace-macros.cjs} +1 -1
  24. package/scripts/helper/{find-main-category-page.js → find-main-category-page.cjs} +1 -1
  25. package/scripts/helper/{normalize-badges.js → normalize-badges.cjs} +1 -1
  26. package/scripts/helper/{parse-href.js → parse-href.cjs} +1 -1
  27. package/scripts/helper/{u-capitalize.js → u-capitalize.cjs} +1 -1
  28. package/scripts/helper/{u-random-id.js → u-random-id.cjs} +1 -1
  29. package/scripts/helper/{u-remove-indentation.js → u-remove-indentation.cjs} +1 -1
  30. package/scripts/helper/{u-toc.js → u-toc.cjs} +1 -1
  31. package/scripts/utils/{concat-url-parts.js → concat-url-parts.cjs} +3 -3
  32. package/scripts/utils/{execute-and-insert-function-results.js → execute-and-insert-function-results.cjs} +7 -0
  33. package/scripts/utils/gloria-after-post-render/{append-copy-heading-buttons.js → append-copy-heading-buttons.cjs} +33 -16
  34. package/scripts/utils/{has-own-favicons.js → has-own-favicons.cjs} +6 -0
  35. package/scripts/utils/{inline-svg.js → inline-svg.cjs} +2 -2
  36. package/scripts/utils/{logcrossprojectreference.js → logcrossprojectreference.cjs} +6 -0
  37. package/scripts/utils/{parse-href.js → parse-href.cjs} +1 -1
  38. package/scripts/utils/{parseicontag.js → parseicontag.cjs} +7 -1
  39. package/scripts/utils/{parselinks.js → parselinks.cjs} +14 -6
  40. package/scripts/utils/pug-renderer/{create-prerender-pug-template.js → create-prerender-pug-template.cjs} +3 -3
  41. package/scripts/utils/pug-renderer/{render-pug-component.js → render-pug-component.cjs} +4 -4
  42. package/scripts/utils/pug-to-xml-binding/parser/{xml-components-parser.js → xml-components-parser.cjs} +2 -2
  43. package/scripts/utils/pug-to-xml-binding/{render-xml-pug-components-in-markdown.js → render-xml-pug-components-in-markdown.cjs} +3 -3
  44. package/scripts/utils/pug-to-xml-binding/{transform-xml-tree-to-pug.js → transform-xml-tree-to-pug.cjs} +1 -1
  45. package/scripts/utils/{spritesheet-svg.js → spritesheet-svg.cjs} +2 -2
  46. package/scripts/utils/{transform-markdown-admonitions.js → transform-markdown-admonitions.cjs} +1 -1
  47. package/src/api-builder/api-builder.js +28 -30
  48. package/src/api-builder/build-page-worker.js +9 -9
  49. package/src/api-builder/classes/description-parser.js +12 -14
  50. package/src/api-builder/classes/doc-data-factory.js +3 -5
  51. package/src/api-builder/classes/file-name-manager.js +2 -4
  52. package/src/api-builder/classes/html-file.js +2 -4
  53. package/src/api-builder/classes/navigation-tree.js +6 -8
  54. package/src/api-builder/classes/tree-node.js +1 -3
  55. package/src/api-builder/utils/findtargetdoclet.js +1 -3
  56. package/src/api-builder/utils/utils.js +19 -26
  57. package/src/data-converter/converters/jsdoc2umberto.js +2 -4
  58. package/src/data-converter/converters/jsduck2umberto.js +5 -7
  59. package/src/data-converter/converters/typedoc/abstractparser.js +3 -5
  60. package/src/data-converter/converters/typedoc/accessorparser.js +3 -5
  61. package/src/data-converter/converters/typedoc/classparser.js +3 -5
  62. package/src/data-converter/converters/typedoc/computedpropertyparser.js +3 -5
  63. package/src/data-converter/converters/typedoc/constantparser.js +3 -5
  64. package/src/data-converter/converters/typedoc/constructorparser.js +3 -5
  65. package/src/data-converter/converters/typedoc/errorparser.js +2 -4
  66. package/src/data-converter/converters/typedoc/eventparser.js +2 -4
  67. package/src/data-converter/converters/typedoc/functionparser.js +3 -5
  68. package/src/data-converter/converters/typedoc/interfaceparser.js +3 -5
  69. package/src/data-converter/converters/typedoc/methodparser.js +3 -5
  70. package/src/data-converter/converters/typedoc/moduleparser.js +3 -5
  71. package/src/data-converter/converters/typedoc/propertyparser.js +3 -5
  72. package/src/data-converter/converters/typedoc/referenceparser.js +3 -5
  73. package/src/data-converter/converters/typedoc/reflectionkind.js +24 -26
  74. package/src/data-converter/converters/typedoc/typedocconverter.js +3 -7
  75. package/src/data-converter/converters/typedoc/typeparser.js +3 -5
  76. package/src/data-converter/converters/typedoc2umberto.js +17 -19
  77. package/src/data-converter/data-collection.js +2 -5
  78. package/src/data-converter/data-provider.js +6 -8
  79. package/src/data-converter/doclet-collection.js +1 -4
  80. package/src/data-converter/middlewares/relation-fixer.js +3 -5
  81. package/src/helpers/capitalize.js +1 -3
  82. package/src/helpers/create-filtering-data-attribs.js +1 -3
  83. package/src/helpers/doc-formats.js +1 -3
  84. package/src/helpers/escape-longname.js +1 -3
  85. package/src/helpers/extract-longname.js +1 -3
  86. package/src/helpers/get-api-infobox-tooltip.js +3 -5
  87. package/src/helpers/get-docsearch-config.js +8 -6
  88. package/src/helpers/get-file-patterns-to-process.js +1 -3
  89. package/src/helpers/get-short-module-path.js +2 -4
  90. package/src/helpers/github-url.js +96 -103
  91. package/src/helpers/glob-to-regexp.js +3 -5
  92. package/src/helpers/html-safe.js +1 -3
  93. package/src/helpers/import-module.js +3 -5
  94. package/src/helpers/is-non-empty-array.js +1 -3
  95. package/src/helpers/log-with-time.js +2 -4
  96. package/src/helpers/resolve-path.js +5 -3
  97. package/src/helpers/snippets.js +50 -56
  98. package/src/helpers/split-longname.js +2 -4
  99. package/src/helpers/umberto-version.js +10 -0
  100. package/src/hexo/filter/extend-config.js +1 -3
  101. package/src/hexo/filter/project-locals.js +5 -7
  102. package/src/hexo/get-repo-urls.js +5 -6
  103. package/src/hexo/helper/get-page-group.js +1 -3
  104. package/src/hexo/project-globals.js +4 -6
  105. package/src/hexo-manager.js +12 -13
  106. package/src/index.js +28 -32
  107. package/src/sdk-builder/get-sdk-sources.js +11 -13
  108. package/src/sdk-builder/sdk-builder.js +11 -11
  109. package/src/tasks/build-api-docs.js +7 -9
  110. package/src/tasks/build-documentation.js +30 -31
  111. package/src/tasks/build-sdk.js +5 -5
  112. package/src/tasks/build-snippets.js +3 -5
  113. package/src/tasks/cache-files.js +4 -6
  114. package/src/tasks/compile-sass.js +8 -9
  115. package/src/tasks/copy-assets.js +3 -5
  116. package/src/tasks/copy-files.js +5 -7
  117. package/src/tasks/copy-project-docs.js +5 -7
  118. package/src/tasks/copy-project-icons.js +5 -7
  119. package/src/tasks/create-redirect-page.js +3 -5
  120. package/src/tasks/create-sitemap-index.js +3 -3
  121. package/src/tasks/create-sitemap-step.js +4 -4
  122. package/src/tasks/create-sitemap.js +6 -8
  123. package/src/tasks/create-sym-links.js +5 -7
  124. package/src/tasks/execute-hooks.js +3 -5
  125. package/src/tasks/get-extra-files.js +3 -5
  126. package/src/tasks/get-hexo-config.js +4 -4
  127. package/src/tasks/get-main-config.js +3 -5
  128. package/src/tasks/get-project-config.js +6 -8
  129. package/src/tasks/macro-replacer.js +1 -3
  130. package/src/tasks/minify-html-worker.js +5 -5
  131. package/src/tasks/minify-html.js +8 -10
  132. package/src/tasks/overwrite-api-guides.js +4 -6
  133. package/src/tasks/read-doc-sources.js +5 -7
  134. package/src/tasks/run-webpack.js +8 -6
  135. package/src/tasks/validate-links-collect-worker.js +6 -6
  136. package/src/tasks/validate-links-worker.js +6 -6
  137. package/src/tasks/validate-links.js +9 -11
  138. package/src/tasks/watcher.js +5 -7
  139. package/src/tasks/write-html-files.js +3 -5
  140. package/src/template/template-collection.js +13 -15
  141. package/themes/umberto/src/gloria/js/app.js +32 -32
  142. package/themes/umberto/src/gloria/js/components/api-nav-tree.js +4 -4
  143. package/themes/umberto/src/gloria/js/components/api-toggle.js +2 -2
  144. package/themes/umberto/src/gloria/js/components/breadcrumbs.js +1 -1
  145. package/themes/umberto/src/gloria/js/components/code-block.js +5 -5
  146. package/themes/umberto/src/gloria/js/components/code-switcher.js +2 -2
  147. package/themes/umberto/src/gloria/js/components/dropdown.js +5 -5
  148. package/themes/umberto/src/gloria/js/components/expandable.js +1 -1
  149. package/themes/umberto/src/gloria/js/components/fake-devtools.js +4 -4
  150. package/themes/umberto/src/gloria/js/components/hash-link.js +2 -2
  151. package/themes/umberto/src/gloria/js/components/heading-link.js +2 -2
  152. package/themes/umberto/src/gloria/js/components/iframe.js +2 -2
  153. package/themes/umberto/src/gloria/js/components/mobile-overlay.js +5 -5
  154. package/themes/umberto/src/gloria/js/components/nav-tree.js +3 -3
  155. package/themes/umberto/src/gloria/js/components/tabs.js +2 -2
  156. package/themes/umberto/src/gloria/js/components/tooltip-popover.js +13 -13
  157. package/themes/umberto/src/gloria/js/helpers/animate-element.js +2 -2
  158. package/themes/umberto/src/gloria/js/helpers/create-anchor-positioning-watcher.js +1 -1
  159. package/themes/umberto/src/gloria/js/helpers/create-keyboard-focus-cycler.js +3 -3
  160. package/themes/umberto/src/gloria/js/helpers/focus-first-interactive.js +2 -2
  161. package/themes/umberto/src/gloria/js/helpers/highlight-code.js +1 -1
  162. package/themes/umberto/src/gloria/js/helpers/scroll-to-hash.js +1 -1
  163. package/themes/umberto/src/gloria/js/helpers/tween.js +2 -2
  164. package/themes/umberto/src/gloria/js/modules/algolia-search.js +4 -4
  165. package/themes/umberto/src/gloria/js/modules/api-filter.js +1 -1
  166. package/themes/umberto/src/gloria/js/modules/header-bar.js +4 -4
  167. package/themes/umberto/src/gloria/js/modules/header.js +2 -2
  168. package/themes/umberto/src/gloria/js/modules/links-prefetch.js +1 -1
  169. package/themes/umberto/src/gloria/js/modules/mobile-nav.js +7 -7
  170. package/themes/umberto/src/gloria/js/modules/sidebar.js +3 -3
  171. package/themes/umberto/src/gloria/js/modules/table-of-contents-api.js +9 -9
  172. package/themes/umberto/src/gloria/js/modules/table-of-contents.js +10 -10
  173. package/themes/umberto/src/gloria/js/public-api.js +15 -15
  174. package/themes/umberto/src/gloria/js/web-components/svg-icon.js +3 -3
  175. package/themes/umberto/src/umberto/js/_apitree.js +1 -1
  176. package/themes/umberto/src/umberto/js/_attachpermalinklistener.js +1 -1
  177. package/themes/umberto/src/umberto/js/_copymobileapinavigation.js +1 -1
  178. package/themes/umberto/src/umberto/js/_imageModal.js +1 -1
  179. package/themes/umberto/src/umberto/js/_pagenavigation.js +1 -1
  180. package/themes/umberto/src/umberto/js/_prism.js +1 -1
  181. package/themes/umberto/src/umberto/js/_samplecode.js +1 -1
  182. package/themes/umberto/src/umberto/js/_sidenavigation.js +1 -1
  183. package/themes/umberto/src/umberto/js/_toc.js +1 -1
  184. package/themes/umberto/src/umberto/js/_warningbanner.js +1 -1
  185. package/themes/umberto/src/umberto/js/app.js +19 -19
  186. package/src/tasks/validate-html-w3c.js +0 -35
  187. /package/scripts/filter/after-post-render/{basepath-replacer.js → basepath-replacer.cjs} +0 -0
  188. /package/scripts/filter/after-post-render/{fix-code-samples.js → fix-code-samples.cjs} +0 -0
  189. /package/scripts/filter/after-post-render/{gather-guides.js → gather-guides.cjs} +0 -0
  190. /package/scripts/filter/after-post-render/{img-linker.js → img-linker.cjs} +0 -0
  191. /package/scripts/filter/after-post-render/{import-guide.js → import-guide.cjs} +0 -0
  192. /package/scripts/filter/after-post-render/{process-variables.js → process-variables.cjs} +0 -0
  193. /package/scripts/filter/after-post-render/{time-end.js → time-end.cjs} +0 -0
  194. /package/scripts/filter/after-post-render/{time-start.js → time-start.cjs} +0 -0
  195. /package/scripts/filter/after-post-render/{validate-after-render.js → validate-after-render.cjs} +0 -0
  196. /package/scripts/filter/before-post-render/{change-output-path.js → change-output-path.cjs} +0 -0
  197. /package/scripts/filter/before-post-render/{set-layout.js → set-layout.cjs} +0 -0
  198. /package/scripts/filter/before-post-render/{validate-page-data.js → validate-page-data.cjs} +0 -0
  199. /package/scripts/helper/{get-pages-for-nav-tree.js → get-pages-for-nav-tree.cjs} +0 -0
  200. /package/scripts/helper/{mark-empty-categories.js → mark-empty-categories.cjs} +0 -0
  201. /package/scripts/helper/{u-extract-and-cache-title.js → u-extract-and-cache-title.cjs} +0 -0
  202. /package/scripts/helper/{u-split-to-title-and-content.js → u-split-to-title-and-content.cjs} +0 -0
  203. /package/scripts/utils/{add-indention.js → add-indention.cjs} +0 -0
  204. /package/scripts/utils/{capitalize.js → capitalize.cjs} +0 -0
  205. /package/scripts/utils/{compose.js → compose.cjs} +0 -0
  206. /package/scripts/utils/{decode-html-entities.js → decode-html-entities.cjs} +0 -0
  207. /package/scripts/utils/{drop-init-slash.js → drop-init-slash.cjs} +0 -0
  208. /package/scripts/utils/{drop-trailing-slash.js → drop-trailing-slash.cjs} +0 -0
  209. /package/scripts/utils/{drop-url-protocol.js → drop-url-protocol.cjs} +0 -0
  210. /package/scripts/utils/{findmaincategorypage.js → findmaincategorypage.cjs} +0 -0
  211. /package/scripts/utils/{getreportissuewidgeturl.js → getreportissuewidgeturl.cjs} +0 -0
  212. /package/scripts/utils/gloria-after-post-render/{apply-design-doc-classes.js → apply-design-doc-classes.cjs} +0 -0
  213. /package/scripts/utils/gloria-after-post-render/{wrap-table-into-wrappers.js → wrap-table-into-wrappers.cjs} +0 -0
  214. /package/scripts/utils/{insertchangelog.js → insertchangelog.cjs} +0 -0
  215. /package/scripts/utils/{measure-call.js → measure-call.cjs} +0 -0
  216. /package/scripts/utils/{normalizebadges.js → normalizebadges.cjs} +0 -0
  217. /package/scripts/utils/{parser-cursor.js → parser-cursor.cjs} +0 -0
  218. /package/scripts/utils/pug-to-xml-binding/parser/{walk-xml-tree.js → walk-xml-tree.cjs} +0 -0
  219. /package/scripts/utils/{random-id.js → random-id.cjs} +0 -0
  220. /package/scripts/utils/{remove-indentation.js → remove-indentation.cjs} +0 -0
  221. /package/scripts/utils/{shoulddisplaynewindicator.js → shoulddisplaynewindicator.cjs} +0 -0
  222. /package/scripts/utils/{toc.js → toc.cjs} +0 -0
  223. /package/scripts/utils/{transformcodeswitcher.js → transformcodeswitcher.cjs} +0 -0
  224. /package/scripts/utils/{transforminfobox.js → transforminfobox.cjs} +0 -0
  225. /package/scripts/utils/{uniq-by-last.js → uniq-by-last.cjs} +0 -0
package/src/index.js CHANGED
@@ -3,23 +3,22 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const { styleText } = require( 'node:util' );
9
- const path = require( 'node:path' );
10
- const compileSass = require( './tasks/compile-sass' );
11
- const runWebpack = require( './tasks/run-webpack' );
12
- const copyAssets = require( './tasks/copy-assets' );
13
- const getMainConfig = require( './tasks/get-main-config' );
14
- const createSymLinks = require( './tasks/create-sym-links' );
15
- const buildDocumentation = require( './tasks/build-documentation' );
16
- const getProjectConfig = require( './tasks/get-project-config' );
17
- const watcher = require( './tasks/watcher' );
18
- const validateHtml = require( './tasks/validate-html-w3c' );
19
- const { version } = require( '../package.json' );
20
- const logWithTime = require( './helpers/log-with-time' );
21
-
22
- module.exports = {
6
+ import { styleText } from 'node:util';
7
+ import upath from 'upath';
8
+ import { compileSass } from './tasks/compile-sass.js';
9
+ import { runWebpack } from './tasks/run-webpack.js';
10
+ import { copyAssets } from './tasks/copy-assets.js';
11
+ import { getMainConfig } from './tasks/get-main-config.js';
12
+ import { createSymLinks } from './tasks/create-sym-links.js';
13
+ import { buildDocumentation } from './tasks/build-documentation.js';
14
+ import { getProjectConfig } from './tasks/get-project-config.js';
15
+ import { watchMd as watcher } from './tasks/watcher.js';
16
+ import { logWithTime } from './helpers/log-with-time.js';
17
+ import { umbertoVersion as version } from './helpers/umberto-version.js';
18
+
19
+ const __dirname = import.meta.dirname;
20
+
21
+ export const umberto = {
23
22
  /**
24
23
  * Builds documentation for a single project.
25
24
  * Intended to use within project's task runner or along other build scripts.
@@ -70,17 +69,13 @@ module.exports = {
70
69
  */
71
70
  async function buildAndWatch( options ) {
72
71
  const logTime = logWithTime( 'Building documentation' );
73
- const outputDir = path.join( process.cwd(), 'build', 'docs' );
72
+ const outputDir = upath.join( process.cwd(), 'build', 'docs' );
74
73
  const hexoManager = await buildDocumentation( options );
75
74
 
76
75
  if ( !options.skipThemes ) {
77
76
  await buildThemes( outputDir, options );
78
77
  }
79
78
 
80
- if ( options.validateW3C ) {
81
- await validateHtml( outputDir, options );
82
- }
83
-
84
79
  if ( options.createSymLinks !== false ) {
85
80
  const rootPath = process.cwd();
86
81
 
@@ -101,15 +96,15 @@ async function buildAndWatch( options ) {
101
96
  }
102
97
 
103
98
  async function buildThemes( outputDir, options ) {
104
- const themesDir = path.join( __dirname, '../themes/umberto' );
105
- const sourceDir = path.join( themesDir, 'src' );
106
- const outputAssetsPath = path.join( outputDir, 'assets', version );
99
+ const themesDir = upath.join( __dirname, '../themes/umberto' );
100
+ const sourceDir = upath.join( themesDir, 'src' );
101
+ const outputAssetsPath = upath.join( outputDir, 'assets', version );
107
102
  const layoutThemes = [ 'umberto', 'gloria' ];
108
103
 
109
104
  for ( const theme of layoutThemes ) {
110
105
  await runWebpack(
111
- path.join( sourceDir, theme, 'js/app.js' ),
112
- path.join( outputAssetsPath, theme, 'scripts' ),
106
+ upath.join( sourceDir, theme, 'js/app.js' ),
107
+ upath.join( outputAssetsPath, theme, 'scripts' ),
113
108
  {
114
109
  minify: !options.dev,
115
110
  umbertoDir: themesDir,
@@ -118,17 +113,19 @@ async function buildThemes( outputDir, options ) {
118
113
  );
119
114
 
120
115
  await copyAssets(
121
- path.join( themesDir, 'source', theme ),
122
- path.join( outputAssetsPath, theme )
116
+ upath.join( themesDir, 'source', theme ),
117
+ upath.join( outputAssetsPath, theme )
123
118
  );
124
119
 
125
120
  await compileSass(
126
- path.join( sourceDir, theme, 'css/styles.scss' ),
127
- path.join( outputAssetsPath, theme, 'css/styles.css' )
121
+ upath.join( sourceDir, theme, 'css/styles.scss' ),
122
+ upath.join( outputAssetsPath, theme, 'css/styles.css' )
128
123
  );
129
124
  }
130
125
  }
131
126
 
127
+ export default umberto;
128
+
132
129
  /**
133
130
  * @typedef {Object} Options
134
131
  * @property {boolean} [skipApi=false] Skips rendering API docs.
@@ -139,5 +136,4 @@ async function buildThemes( outputDir, options ) {
139
136
  * @property {boolean} [verbose=false] Adds more information to console during documentation building.
140
137
  * @property {boolean} [createSymLinks=true] Add symbolic links with 'latest' to output folder.
141
138
  * @property {boolean} [watch=false] Run Umberto with watch mode, which track changes in dm files and rebuild docs with it.
142
- * @property {boolean} [validateW3C=false] Use vnu java validator to check every single output page for html syntax errors.
143
139
  */
@@ -3,26 +3,24 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const fs = require( 'node:fs' );
9
- const upath = require( 'upath' );
10
- const { globSync } = require( 'glob' );
11
- const { parseDocument } = require( 'htmlparser2' );
12
- const { cloneNode, Text } = require( 'domhandler' );
13
- const { default: render } = require( 'dom-serializer' );
14
- const { selectAll, selectOne } = require( 'css-select' );
15
- const {
6
+ import fs from 'node:fs';
7
+ import upath from 'upath';
8
+ import { globSync } from 'glob';
9
+ import { parseDocument } from 'htmlparser2';
10
+ import { cloneNode, Text } from 'domhandler';
11
+ import render from 'dom-serializer';
12
+ import { selectAll, selectOne } from 'css-select';
13
+ import {
16
14
  getAttributeValue,
17
15
  hasAttrib,
18
16
  textContent,
19
17
  getName
20
- } = require( 'domutils' );
21
- const decodeHtmlEntities = require( '../../scripts/utils/decode-html-entities' );
18
+ } from 'domutils';
19
+ import decodeHtmlEntities from '../../scripts/utils/decode-html-entities.cjs';
22
20
 
23
21
  const SDK_SELECTOR = 'meta[name="sdk-samples"]';
24
22
 
25
- module.exports = sourcePath => {
23
+ export const getSdkSources = sourcePath => {
26
24
  const files = [];
27
25
  const filePaths = globSync( upath.join( sourcePath, '*.html' ) ).map( path => upath.normalize( path ) );
28
26
 
@@ -3,17 +3,17 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
6
+ import { HtmlFile } from '../api-builder/classes/html-file.js';
7
+ import upath from 'upath';
8
+ import { URL, resolve as urlResolve } from 'node:url';
9
+ import jsBeautify from 'js-beautify';
10
+ import { macroReplacer } from '../tasks/macro-replacer.js';
11
+ import { getDocsearchConfig as getDocSearchConfig } from '../helpers/get-docsearch-config.js';
12
+ import { getIssueUrl, getContributeUrl } from '../helpers/github-url.js';
7
13
 
8
- const HtmlFile = require( '../api-builder/classes/html-file' );
9
- const upath = require( 'upath' );
10
- const { URL, resolve: urlResolve } = require( 'node:url' );
11
- const beautifyHtml = require( 'js-beautify' ).html;
12
- const macroReplacer = require( '../tasks/macro-replacer' );
13
- const getDocSearchConfig = require( '../helpers/get-docsearch-config' );
14
- const githubUrlUtils = require( '../helpers/github-url' );
14
+ const { html: beautifyHtml } = jsBeautify;
15
15
 
16
- module.exports = class SdkBuilder {
16
+ export class SdkBuilder {
17
17
  constructor( {
18
18
  sdkCollection,
19
19
  template,
@@ -144,8 +144,8 @@ module.exports = class SdkBuilder {
144
144
  presetVersion: sdkItem.presetVersion,
145
145
  ckeditorVersion: this.projectConfig.version,
146
146
  sdkSamples,
147
- issuesUrl: githubUrlUtils.getIssueUrl( this.projectConfig ),
148
- contributeUrl: githubUrlUtils.getContributeUrl( this.projectConfig, sdkGroup.sourceDir, sdkItem.name ),
147
+ issuesUrl: getIssueUrl( this.projectConfig ),
148
+ contributeUrl: getContributeUrl( this.projectConfig, sdkGroup.sourceDir, sdkItem.name ),
149
149
  order: sdkItem && sdkItem.meta ? sdkItem.meta.order : 0,
150
150
  canonicalUrlBeginning: this.canonicalUrlBeginning
151
151
  };
@@ -3,14 +3,12 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const upath = require( 'upath' );
9
- const readDocSources = require( './read-doc-sources' );
10
- const DataProvider = require( '../data-converter/data-provider' );
11
- const ApiBuilder = require( '../api-builder/api-builder' );
12
- const TemplateCollection = require( '../template/template-collection' );
13
- const logWithTime = require( '../helpers/log-with-time' );
6
+ import upath from 'upath';
7
+ import { readDocSources } from './read-doc-sources.js';
8
+ import { DataProvider } from '../data-converter/data-provider.js';
9
+ import { ApiBuilder } from '../api-builder/api-builder.js';
10
+ import { TemplateCollection } from '../template/template-collection.js';
11
+ import { logWithTime } from '../helpers/log-with-time.js';
14
12
 
15
13
  /**
16
14
  * Builds API docs.
@@ -21,7 +19,7 @@ const logWithTime = require( '../helpers/log-with-time' );
21
19
  * @param config
22
20
  * @returns {Promise<ApiBuilder>}
23
21
  */
24
- module.exports = async config => {
22
+ export const buildApiDocs = async config => {
25
23
  const {
26
24
  src,
27
25
  projectDst, // e.g.: ckeditor5/latest/api
@@ -3,35 +3,34 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const upath = require( 'upath' );
9
- const hexoManager = require( '../hexo-manager' );
10
- const getMainConfig = require( './get-main-config' );
11
- const getProjectConfig = require( './get-project-config' );
12
- const buildApi = require( './build-api-docs' );
13
- const buildSdk = require( './build-sdk' );
14
- const bindProjectLocals = require( '../hexo/filter/project-locals' );
15
- const bindProjectGlobals = require( '../hexo/project-globals' );
16
- const copyFiles = require( './copy-files' );
17
- const copyProjectDocs = require( './copy-project-docs' );
18
- const writeHtmlFiles = require( './write-html-files' );
19
- const getExtraFiles = require( './get-extra-files' );
20
- const createRedirectPage = require( './create-redirect-page' );
21
- const cacheFiles = require( './cache-files' );
22
- const overwriteApiGuides = require( './overwrite-api-guides' );
6
+ import upath from 'upath';
7
+ import { hexoManager } from '../hexo-manager.js';
8
+ import { getMainConfig } from './get-main-config.js';
9
+ import { getProjectConfig } from './get-project-config.js';
10
+ import { buildApiDocs as buildApi } from './build-api-docs.js';
11
+ import { buildSdk } from './build-sdk.js';
12
+ import { projectLocals as bindProjectLocals } from '../hexo/filter/project-locals.js';
13
+ import { projectGlobals as bindProjectGlobals } from '../hexo/project-globals.js';
14
+ import { copyFiles } from './copy-files.js';
15
+ import { copyProjectDocs } from './copy-project-docs.js';
16
+ import { writeHtmlFiles } from './write-html-files.js';
17
+ import { getExtraFiles } from './get-extra-files.js';
18
+ import { createRedirectPage } from './create-redirect-page.js';
19
+ import { cacheFiles } from './cache-files.js';
20
+ import { overwriteApiGuides } from './overwrite-api-guides.js';
21
+ import { validateLinks } from './validate-links.js';
22
+ import { createSitemapStep } from './create-sitemap-step.js';
23
+ import { buildSnippets } from './build-snippets.js';
24
+ import { copyProjectIcons } from './copy-project-icons.js';
25
+ import { executeHooks } from './execute-hooks.js';
26
+ import { minifyHtml } from './minify-html.js';
27
+ import { parseLinks } from '../../scripts/utils/parselinks.cjs';
28
+ import { getFilePatternsToProcess } from '../helpers/get-file-patterns-to-process.js';
29
+ import { logWithTime } from '../helpers/log-with-time.js';
30
+ import { umbertoVersion } from '../helpers/umberto-version.js';
31
+
32
+ const __dirname = import.meta.dirname;
23
33
  const cacheDir = upath.join( __dirname, '../../temp/cache' );
24
- const validateLinks = require( './validate-links' );
25
- const createSitemapStep = require( './create-sitemap-step' );
26
- const buildSnippets = require( './build-snippets' );
27
- const copyProjectIcons = require( './copy-project-icons' );
28
- const executeHooks = require( './execute-hooks' );
29
- const minifyHtml = require( './minify-html' );
30
- const umbertoVersion = require( '../../package.json' ).version;
31
-
32
- const { parseLinks } = require( '../../scripts/utils/parselinks' );
33
- const getFilePatternsToProcess = require( '../helpers/get-file-patterns-to-process' );
34
- const logWithTime = require( '../helpers/log-with-time' );
35
34
 
36
35
  /**
37
36
  * Main function building the documentation.
@@ -65,7 +64,7 @@ const logWithTime = require( '../helpers/log-with-time' );
65
64
  * automatically. An empty array (which is the default value) means that all guides should be processed.
66
65
  * @returns {Promise}
67
66
  */
68
- module.exports = options => {
67
+ export const buildDocumentation = options => {
69
68
  const {
70
69
  mainConfig = getMainConfig( process.cwd() ),
71
70
  rootPath = process.cwd(),
@@ -361,7 +360,7 @@ async function buildProjects( rootPath, projectPaths, options = {} ) {
361
360
  } );
362
361
  }
363
362
 
364
- projectConfigs.forEach( config => {
363
+ for ( const config of projectConfigs ) {
365
364
  const basePath = upath.join( config.slug, config.version );
366
365
  const extraStyles = getExtraFiles(
367
366
  upath.join( config.projectRootPath, config.path ),
@@ -423,7 +422,7 @@ async function buildProjects( rootPath, projectPaths, options = {} ) {
423
422
  title: `${ config.name } Redirection Page`,
424
423
  url: options.dev ? `${ config.version }/` : 'latest/'
425
424
  } ) );
426
- } );
425
+ }
427
426
 
428
427
  return Promise.all( promises );
429
428
  }
@@ -3,12 +3,12 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- const upath = require( 'upath' );
7
- const getSdkSources = require( '../sdk-builder/get-sdk-sources' );
8
- const TemplateCollection = require( '../template/template-collection' );
9
- const SdkBuilder = require( '../sdk-builder/sdk-builder' );
6
+ import upath from 'upath';
7
+ import { getSdkSources } from '../sdk-builder/get-sdk-sources.js';
8
+ import { TemplateCollection } from '../template/template-collection.js';
9
+ import { SdkBuilder } from '../sdk-builder/sdk-builder.js';
10
10
 
11
- module.exports = config => {
11
+ export const buildSdk = config => {
12
12
  const {
13
13
  outputDir, // build/docs
14
14
  themePath, // Umberto theme path
@@ -3,15 +3,13 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const { getSnippetPlaceholder, getSnippetSourcePaths } = require( '../helpers/snippets' );
6
+ import { getSnippetPlaceholder, getSnippetSourcePaths } from '../helpers/snippets.js';
9
7
 
10
8
  /**
11
9
  * Builds snippets based on collected data from Markdown files.
12
10
  *
13
11
  * All data are being gathered during conversion from Markdown to HTML (by Hexo).
14
- * See: `scripts/filter/after-post-render/snippets.js`.
12
+ * See: `scripts/filter/after-post-render/snippets.cjs`.
15
13
  *
16
14
  * @param {Object} projectGlobals
17
15
  * @param {Object} projectGlobals.common
@@ -19,7 +17,7 @@ const { getSnippetPlaceholder, getSnippetSourcePaths } = require( '../helpers/sn
19
17
  * @param {Object} projectGlobals.common.snippetOptions
20
18
  * @returns {Promise}
21
19
  */
22
- module.exports = function buildSnippets( projectGlobals ) {
20
+ export function buildSnippets( projectGlobals ) {
23
21
  let promise = Promise.resolve();
24
22
  let hasErrors = false;
25
23
 
@@ -3,11 +3,9 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const upath = require( 'upath' );
9
- const { globSync } = require( 'glob' );
10
- const fs = require( 'fs-extra' );
6
+ import upath from 'upath';
7
+ import { globSync } from 'glob';
8
+ import fs from 'fs-extra';
11
9
 
12
10
  /**
13
11
  * Caches build files so that they can be reused. Only for local (dev==true flag) build.
@@ -16,7 +14,7 @@ const fs = require( 'fs-extra' );
16
14
  * @param dst
17
15
  * @returns {boolean}
18
16
  */
19
- module.exports = ( src, dst ) => {
17
+ export const cacheFiles = ( src, dst ) => {
20
18
  const sourcePaths = globSync( upath.join( src, '**', '*' ) ).map( path => upath.normalize( path ) );
21
19
  let result = false;
22
20
 
@@ -3,13 +3,12 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
6
+ import { fileURLToPath } from 'node:url';
7
+ import * as sass from 'sass';
8
+ import fs from 'fs-extra';
9
+ import upath from 'upath';
7
10
 
8
- const sass = require( 'sass' );
9
- const fs = require( 'fs-extra' );
10
- const upath = require( 'upath' );
11
-
12
- module.exports = ( src, dst ) => {
11
+ export function compileSass( src, dst ) {
13
12
  return new Promise( ( resolve, reject ) => {
14
13
  const options = {
15
14
  file: src,
@@ -20,7 +19,7 @@ module.exports = ( src, dst ) => {
20
19
 
21
20
  if ( themeMatch ) {
22
21
  const [ , theme, remainingPath ] = themeMatch;
23
- const filePath = upath.join( __dirname, '../../themes/umberto/src', theme, 'css', remainingPath );
22
+ const filePath = upath.join( import.meta.dirname, '../../themes/umberto/src', theme, 'css', remainingPath );
24
23
 
25
24
  if ( fs.existsSync( filePath ) ) {
26
25
  return done( { file: filePath } );
@@ -30,7 +29,7 @@ module.exports = ( src, dst ) => {
30
29
  // In case of an import from the `node_modules` directory.
31
30
  if ( url.startsWith( '~' ) ) {
32
31
  // Resolve the path regarding the current working directory.
33
- const absolutePath = require.resolve( url.substr( 1 ) );
32
+ const absolutePath = fileURLToPath( import.meta.resolve( url.substr( 1 ) ) );
34
33
 
35
34
  return fs.readFile( absolutePath, 'utf-8', ( err, data ) => {
36
35
  if ( err ) {
@@ -72,4 +71,4 @@ module.exports = ( src, dst ) => {
72
71
  } );
73
72
  } );
74
73
  } );
75
- };
74
+ }
@@ -3,10 +3,8 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const upath = require( 'upath' );
9
- const copyFiles = require( './copy-files' );
6
+ import upath from 'upath';
7
+ import { copyFiles } from './copy-files.js';
10
8
 
11
9
  /**
12
10
  * Copies umberto images to build directory.
@@ -15,7 +13,7 @@ const copyFiles = require( './copy-files' );
15
13
  * @param {string} outputPath
16
14
  * @returns {Promise}
17
15
  */
18
- module.exports = ( themeDir, outputPath ) => {
16
+ export const copyAssets = ( themeDir, outputPath ) => {
19
17
  return Promise.all( [
20
18
  copyFiles(
21
19
  upath.join( themeDir, 'assets', '_fonts' ),
@@ -3,12 +3,10 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const upath = require( 'upath' );
9
- const fs = require( 'fs-extra' );
10
- const { globSync } = require( 'glob' );
11
- const globToRegexp = require( '../helpers/glob-to-regexp' );
6
+ import upath from 'upath';
7
+ import fs from 'fs-extra';
8
+ import { globSync } from 'glob';
9
+ import { globToRegexp } from '../helpers/glob-to-regexp.js';
12
10
 
13
11
  /**
14
12
  * Copies src files to dst.
@@ -22,7 +20,7 @@ const globToRegexp = require( '../helpers/glob-to-regexp' );
22
20
  * name of files that will be processed by Umberto.
23
21
  * @returns {Promise}
24
22
  */
25
- module.exports = ( src, dst, options = {} ) => {
23
+ export const copyFiles = ( src, dst, options = {} ) => {
26
24
  const {
27
25
  ignored = [],
28
26
  allOutputPaths = [],
@@ -3,12 +3,10 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const upath = require( 'upath' );
9
- const hexoManager = require( '../hexo-manager' );
10
- const copyDocFiles = require( './copy-files' );
11
- const DOC_FORMATS = require( '../helpers/doc-formats' );
6
+ import upath from 'upath';
7
+ import { hexoManager } from '../hexo-manager.js';
8
+ import { copyFiles as copyDocFiles } from './copy-files.js';
9
+ import { docFormats as DOC_FORMATS } from '../helpers/doc-formats.js';
12
10
 
13
11
  /**
14
12
  * Copies project documentation files (guides written in markdown, assets etc) to hexo source directory.
@@ -22,7 +20,7 @@ const DOC_FORMATS = require( '../helpers/doc-formats' );
22
20
  * @param {Array.<String>|null} [options.additionalDocumentation]
23
21
  * @returns {Promise}
24
22
  */
25
- module.exports = ( rootPath, config, options ) => {
23
+ export const copyProjectDocs = ( rootPath, config, options ) => {
26
24
  const {
27
25
  globalRootPath = '',
28
26
  additionalDocumentation = null,
@@ -3,16 +3,14 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const upath = require( 'upath' );
9
- const fs = require( 'fs-extra' );
10
- const resolvePath = require( '../helpers/resolve-path' );
6
+ import upath from 'upath';
7
+ import fs from 'fs-extra';
8
+ import { resolvePath } from '../helpers/resolve-path.js';
11
9
 
12
10
  /**
13
11
  * @returns {Promise<void>}
14
12
  */
15
- module.exports = async function copyProjectIcons( projectGlobals, buildDirectory ) {
13
+ export async function copyProjectIcons( projectGlobals, buildDirectory ) {
16
14
  const availableProjects = Object.keys( projectGlobals ).filter( projectName => projectName !== 'common' );
17
15
 
18
16
  for ( const project of availableProjects ) {
@@ -34,4 +32,4 @@ module.exports = async function copyProjectIcons( projectGlobals, buildDirectory
34
32
  }
35
33
  }
36
34
  }
37
- };
35
+ }
@@ -3,10 +3,8 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const HtmlFile = require( '../api-builder/classes/html-file' );
9
- const writeHtmlFiles = require( './write-html-files' );
6
+ import { HtmlFile } from '../api-builder/classes/html-file.js';
7
+ import { writeHtmlFiles } from './write-html-files.js';
10
8
 
11
9
  /**
12
10
  * Redirection page for urls like https://docs.ckeditor.com/ckeditor5/.
@@ -17,7 +15,7 @@ const writeHtmlFiles = require( './write-html-files' );
17
15
  * @param url
18
16
  * @returns {Promise}
19
17
  */
20
- module.exports = ( {
18
+ export const createRedirectPage = ( {
21
19
  destination,
22
20
  title,
23
21
  url
@@ -3,8 +3,8 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- const upath = require( 'upath' );
7
- const fs = require( 'node:fs/promises' );
6
+ import upath from 'upath';
7
+ import fs from 'node:fs/promises';
8
8
 
9
9
  const XMLNS_STRINGS = [
10
10
  'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"',
@@ -23,7 +23,7 @@ const XMLNS_STRINGS = [
23
23
  * @param {Array.<string>} options.sitemapPaths Paths to generated sitemap files.
24
24
  * @returns {Promise}
25
25
  */
26
- module.exports = ( { buildPath, hostname, sitemapPaths } ) => {
26
+ export const createSitemapIndex = ( { buildPath, hostname, sitemapPaths } ) => {
27
27
  const sitemapPath = upath.resolve( upath.join( buildPath, 'sitemap.xml' ) );
28
28
  const sitemapIndexContent = [
29
29
  '<?xml version="1.0" encoding="UTF-8"?>',
@@ -3,9 +3,9 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- const { styleText } = require( 'node:util' );
7
- const createSitemap = require( './create-sitemap' );
8
- const createSitemapIndex = require( './create-sitemap-index' );
6
+ import { styleText } from 'node:util';
7
+ import { createSitemap } from './create-sitemap.js';
8
+ import { createSitemapIndex } from './create-sitemap-index.js';
9
9
 
10
10
  const BUILD_PATH = 'build/docs';
11
11
 
@@ -17,7 +17,7 @@ const BUILD_PATH = 'build/docs';
17
17
  * @param {Object} options.projectConfigs
18
18
  * @param {Object} options.verbose
19
19
  */
20
- module.exports = async function createSitemapStep( { mainConfig, projectConfigs, verbose } ) {
20
+ export async function createSitemapStep( { mainConfig, projectConfigs, verbose } ) {
21
21
  if ( mainConfig.isSingleProject ) {
22
22
  // If available, use sitemap config from umberto-main.json.
23
23
  // Use sitemap config from umberto.json otherwise.
@@ -3,13 +3,11 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
7
-
8
- const fs = require( 'node:fs' );
9
- const { globSync } = require( 'glob' );
10
- const upath = require( 'upath' );
11
- const { URL } = require( 'node:url' );
12
- const { SitemapStream, streamToPromise } = require( 'sitemap' );
6
+ import fs from 'node:fs';
7
+ import { globSync } from 'glob';
8
+ import upath from 'upath';
9
+ import { URL } from 'node:url';
10
+ import { SitemapStream, streamToPromise } from 'sitemap';
13
11
 
14
12
  /**
15
13
  * Creates a sitemap.xml file and saves it to build directory.
@@ -23,7 +21,7 @@ const { SitemapStream, streamToPromise } = require( 'sitemap' );
23
21
  * @param {Array.<String>} options.excluded An array of urls to be excluded from the sitemap.
24
22
  * @returns {Promise.<string>} Path to the generated sitemap.
25
23
  */
26
- module.exports = options => {
24
+ export const createSitemap = options => {
27
25
  const {
28
26
  fileName = 'sitemap.xml',
29
27
  projectSlug,
@@ -3,14 +3,12 @@
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
6
- 'use strict';
6
+ import { styleText } from 'node:util';
7
+ import fs from 'node:fs';
8
+ import upath from 'upath';
9
+ import { getProjectConfig } from './get-project-config.js';
7
10
 
8
- const { styleText } = require( 'node:util' );
9
- const fs = require( 'node:fs' );
10
- const upath = require( 'upath' );
11
- const getProjectConfig = require( './get-project-config' );
12
-
13
- module.exports = async ( {
11
+ export const createSymLinks = async ( {
14
12
  mainConfig,
15
13
  rootPath,
16
14
  isSingleProject = false