umberto 2.1.8 → 2.3.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 (201) hide show
  1. package/.eslintrc.js +2 -2
  2. package/LICENSE.md +1 -1
  3. package/README.md +1 -0
  4. package/hexo-shim.js +1 -1
  5. package/package.json +10 -6
  6. package/scripts/filter/after-post-render/basepath-replacer.js +1 -1
  7. package/scripts/filter/after-post-render/fix-code-samples.js +1 -1
  8. package/scripts/filter/after-post-render/gather-guides.js +1 -1
  9. package/scripts/filter/after-post-render/img-linker.js +1 -1
  10. package/scripts/filter/after-post-render/import-guide.js +1 -1
  11. package/scripts/filter/after-post-render/insert-error-codes.js +1 -1
  12. package/scripts/filter/after-post-render/linker.js +1 -1
  13. package/scripts/filter/after-post-render/parseicontag.js +1 -1
  14. package/scripts/filter/after-post-render/process-variables.js +1 -1
  15. package/scripts/filter/after-post-render/snippets.js +1 -1
  16. package/scripts/filter/after-post-render/time-end.js +1 -1
  17. package/scripts/filter/after-post-render/time-start.js +1 -1
  18. package/scripts/filter/after-post-render/validate-after-render.js +1 -1
  19. package/scripts/filter/before-post-render/add-project-info-to-page.js +1 -1
  20. package/scripts/filter/before-post-render/add-repo-url.js +1 -1
  21. package/scripts/filter/before-post-render/change-output-path.js +1 -1
  22. package/scripts/filter/before-post-render/escape-special-characters.js +1 -1
  23. package/scripts/filter/before-post-render/execute-and-insert-function-results.js +1 -1
  24. package/scripts/filter/before-post-render/infobox.js +1 -1
  25. package/scripts/filter/before-post-render/insertchangelog.js +1 -1
  26. package/scripts/filter/before-post-render/replace-macros.js +1 -1
  27. package/scripts/filter/before-post-render/set-layout.js +1 -1
  28. package/scripts/filter/before-post-render/validate-page-data.js +1 -1
  29. package/scripts/helper/find-main-category-page.js +1 -1
  30. package/scripts/helper/get-pages-for-nav-tree.js +1 -1
  31. package/scripts/helper/mark-empty-categories.js +1 -1
  32. package/scripts/helper/normalize-badges.js +1 -1
  33. package/scripts/helper/u-split-to-title-and-content.js +1 -1
  34. package/scripts/helper/u-toc.js +1 -1
  35. package/scripts/utils/execute-and-insert-function-results.js +1 -1
  36. package/scripts/utils/findmaincategorypage.js +1 -1
  37. package/scripts/utils/getreportissuewidgeturl.js +1 -1
  38. package/scripts/utils/insertchangelog.js +1 -1
  39. package/scripts/utils/normalizebadges.js +1 -1
  40. package/scripts/utils/parseicontag.js +1 -1
  41. package/scripts/utils/parselinks.js +61 -41
  42. package/scripts/utils/shoulddisplaynewindicator.js +1 -1
  43. package/scripts/utils/transforminfobox.js +1 -1
  44. package/{scripts → scripts-dev}/postinstall.js +1 -1
  45. package/src/api-builder/api-builder.js +28 -8
  46. package/src/api-builder/classes/description-parser.js +79 -63
  47. package/src/api-builder/classes/doc-data-factory.js +58 -5
  48. package/src/api-builder/classes/file-name-manager.js +1 -1
  49. package/src/api-builder/classes/html-file.js +1 -1
  50. package/src/api-builder/classes/navigation-tree.js +1 -1
  51. package/src/api-builder/classes/tree-node.js +1 -1
  52. package/src/api-builder/utils/findtargetdoclet.js +84 -0
  53. package/src/api-builder/utils/utils.js +41 -0
  54. package/src/data-converter/converters/jsdoc2umberto.js +8 -1
  55. package/src/data-converter/converters/jsduck2umberto.js +1 -1
  56. package/src/data-converter/converters/typedoc/abstractparser.js +364 -0
  57. package/src/data-converter/converters/typedoc/accessorparser.js +64 -0
  58. package/src/data-converter/converters/typedoc/classparser.js +49 -0
  59. package/src/data-converter/converters/typedoc/constantparser.js +45 -0
  60. package/src/data-converter/converters/typedoc/constructorparser.js +34 -0
  61. package/src/data-converter/converters/typedoc/errorparser.js +44 -0
  62. package/src/data-converter/converters/typedoc/eventparser.js +57 -0
  63. package/src/data-converter/converters/typedoc/functionparser.js +61 -0
  64. package/src/data-converter/converters/typedoc/interfaceparser.js +46 -0
  65. package/src/data-converter/converters/typedoc/methodparser.js +63 -0
  66. package/src/data-converter/converters/typedoc/moduleparser.js +31 -0
  67. package/src/data-converter/converters/typedoc/propertyparser.js +74 -0
  68. package/src/data-converter/converters/typedoc/typedoc.ts +297 -0
  69. package/src/data-converter/converters/typedoc/typedocconverter.js +742 -0
  70. package/src/data-converter/converters/typedoc/typeparser.js +71 -0
  71. package/src/data-converter/converters/typedoc2umberto.js +52 -0
  72. package/src/data-converter/data-collection.js +1 -1
  73. package/src/data-converter/data-provider.js +4 -2
  74. package/src/data-converter/doclet-collection.js +14 -2
  75. package/src/data-converter/middlewares/relation-fixer.js +1 -1
  76. package/src/helpers/capitalize.js +1 -1
  77. package/src/helpers/copy-file.js +1 -1
  78. package/src/helpers/create-filtering-data-attribs.js +1 -1
  79. package/src/helpers/doc-formats.js +3 -2
  80. package/src/helpers/escape-longname.js +1 -1
  81. package/src/helpers/extract-longname.js +1 -1
  82. package/src/helpers/get-api-infobox-tooltip.js +1 -1
  83. package/src/helpers/get-docsearch-config.js +1 -1
  84. package/src/helpers/get-file-patterns-to-process.js +1 -1
  85. package/src/helpers/get-short-module-path.js +1 -1
  86. package/src/helpers/github-url.js +1 -1
  87. package/src/helpers/glob-to-regexp.js +1 -1
  88. package/src/helpers/html-safe.js +1 -1
  89. package/src/helpers/is-non-empty-array.js +1 -1
  90. package/src/helpers/snippets.js +1 -1
  91. package/src/helpers/split-longname.js +101 -8
  92. package/src/hexo/filter/extend-config.js +1 -1
  93. package/src/hexo/filter/project-locals.js +4 -1
  94. package/src/hexo/get-repo-urls.js +1 -1
  95. package/src/hexo/helper/get-page-group.js +1 -1
  96. package/src/hexo/project-globals.js +1 -1
  97. package/src/hexo-manager.js +1 -1
  98. package/src/index.js +2 -1
  99. package/src/sdk-builder/get-sdk-sources.js +1 -1
  100. package/src/sdk-builder/sdk-builder.js +1 -1
  101. package/src/tasks/build-api-docs.js +4 -4
  102. package/src/tasks/build-documentation.js +9 -3
  103. package/src/tasks/build-sdk.js +1 -1
  104. package/src/tasks/build-snippets.js +1 -1
  105. package/src/tasks/cache-files.js +1 -1
  106. package/src/tasks/compile-sass.js +1 -1
  107. package/src/tasks/copy-assets.js +1 -1
  108. package/src/tasks/copy-files.js +1 -1
  109. package/src/tasks/copy-project-docs.js +1 -1
  110. package/src/tasks/copy-project-icons.js +1 -1
  111. package/src/tasks/create-redirect-page.js +1 -1
  112. package/src/tasks/create-sitemap.js +1 -1
  113. package/src/tasks/create-sym-links.js +1 -1
  114. package/src/tasks/execute-hooks.js +1 -1
  115. package/src/tasks/get-extra-files.js +1 -1
  116. package/src/tasks/get-hexo-config.js +1 -1
  117. package/src/tasks/get-main-config.js +1 -1
  118. package/src/tasks/get-project-config.js +3 -3
  119. package/src/tasks/macro-replacer.js +1 -1
  120. package/src/tasks/overwrite-api-guides.js +1 -1
  121. package/src/tasks/read-doc-sources.js +1 -1
  122. package/src/tasks/run-webpack.js +1 -1
  123. package/src/tasks/validate-html-w3c.js +1 -1
  124. package/src/tasks/validate-links.js +1 -1
  125. package/src/tasks/watcher.js +1 -1
  126. package/src/tasks/write-html-files.js +1 -1
  127. package/src/template/template-collection.js +1 -1
  128. package/themes/umberto/layout/_api-docs/_mixin/_api-see-source.pug +2 -1
  129. package/themes/umberto/layout/_api-docs/_mixin/_class-item.pug +0 -1
  130. package/themes/umberto/layout/_api-docs/_mixin/_dev-names.pug +9 -3
  131. package/themes/umberto/layout/_api-docs/_mixin/_fires-item.pug +2 -2
  132. package/themes/umberto/layout/_api-docs/_mixin/_hierarchy-item.pug +2 -2
  133. package/themes/umberto/layout/_api-docs/_mixin/_link-or-text.pug +40 -41
  134. package/themes/umberto/layout/_api-docs/_mixin/_method.pug +8 -2
  135. package/themes/umberto/layout/_api-docs/_mixin/_property.pug +1 -1
  136. package/themes/umberto/layout/_api-docs/_mixin/_related.pug +1 -1
  137. package/themes/umberto/layout/_api-docs/_mixin/_sidebox-list-item.pug +1 -1
  138. package/themes/umberto/layout/_api-docs/_mixin/_type.pug +175 -9
  139. package/themes/umberto/layout/_api-docs/_mixin/type-parameter.pug +18 -0
  140. package/themes/umberto/layout/_api-docs/_partial/filter.pug +16 -4
  141. package/themes/umberto/layout/_api-docs/_partial/type-parameters.pug +26 -0
  142. package/themes/umberto/layout/_api-docs/api-base.pug +2 -0
  143. package/themes/umberto/layout/_partial/google-optimize.pug +15 -0
  144. package/themes/umberto/layout/_partial/head.pug +1 -1
  145. package/themes/umberto/src/css/_api-content.scss +1 -1
  146. package/themes/umberto/src/css/_api-info-box.scss +1 -1
  147. package/themes/umberto/src/css/_api-props-filter.scss +1 -1
  148. package/themes/umberto/src/css/_api-see-source.scss +1 -1
  149. package/themes/umberto/src/css/_api-subheader.scss +1 -1
  150. package/themes/umberto/src/css/_api-tree.scss +1 -1
  151. package/themes/umberto/src/css/_badge.scss +1 -1
  152. package/themes/umberto/src/css/_collapsinglist.scss +1 -1
  153. package/themes/umberto/src/css/_content.scss +3 -2
  154. package/themes/umberto/src/css/_docsearch.scss +1 -1
  155. package/themes/umberto/src/css/_dropdown.scss +1 -1
  156. package/themes/umberto/src/css/_editor-icon.scss +1 -1
  157. package/themes/umberto/src/css/_feedback-widget.scss +1 -1
  158. package/themes/umberto/src/css/_footer.scss +1 -1
  159. package/themes/umberto/src/css/_formatted.scss +1 -1
  160. package/themes/umberto/src/css/_guide-content.scss +1 -1
  161. package/themes/umberto/src/css/_guide-sdk-tree.scss +1 -1
  162. package/themes/umberto/src/css/_loading-spinner.scss +1 -1
  163. package/themes/umberto/src/css/_main.scss +1 -1
  164. package/themes/umberto/src/css/_navigation.scss +1 -1
  165. package/themes/umberto/src/css/_notice.scss +1 -1
  166. package/themes/umberto/src/css/_print.scss +1 -1
  167. package/themes/umberto/src/css/_prism.scss +1 -1
  168. package/themes/umberto/src/css/_rwd-breadcrumbs.scss +1 -1
  169. package/themes/umberto/src/css/_rwd-menu.scss +1 -1
  170. package/themes/umberto/src/css/_secondary-navigation.scss +1 -1
  171. package/themes/umberto/src/css/_theme-dark.scss +1 -1
  172. package/themes/umberto/src/css/_toggler.scss +1 -1
  173. package/themes/umberto/src/css/_top.scss +1 -1
  174. package/themes/umberto/src/css/_tree.scss +7 -5
  175. package/themes/umberto/src/css/_warning-banner.scss +1 -1
  176. package/themes/umberto/src/css/components/_lightbox.scss +1 -1
  177. package/themes/umberto/src/css/helpers/_color.scss +1 -1
  178. package/themes/umberto/src/css/helpers/_font.scss +1 -1
  179. package/themes/umberto/src/css/helpers/_globals.scss +1 -1
  180. package/themes/umberto/src/css/helpers/_reset.scss +1 -1
  181. package/themes/umberto/src/css/helpers/_spacing.scss +1 -1
  182. package/themes/umberto/src/css/pages/_sdk.scss +1 -1
  183. package/themes/umberto/src/css/styles.scss +1 -1
  184. package/themes/umberto/src/js/_anchors.js +1 -1
  185. package/themes/umberto/src/js/_apisearch.js +1 -1
  186. package/themes/umberto/src/js/_apitree.js +1 -1
  187. package/themes/umberto/src/js/_collapsables.js +1 -1
  188. package/themes/umberto/src/js/_copymobileapinavigation.js +1 -1
  189. package/themes/umberto/src/js/_devnames.js +1 -1
  190. package/themes/umberto/src/js/_dropdowns.js +1 -1
  191. package/themes/umberto/src/js/_filtering.js +2 -1
  192. package/themes/umberto/src/js/_imageModal.js +1 -1
  193. package/themes/umberto/src/js/_pagenavigation.js +1 -1
  194. package/themes/umberto/src/js/_prism.js +1 -1
  195. package/themes/umberto/src/js/_rwdmenu.js +1 -1
  196. package/themes/umberto/src/js/_samplecode.js +1 -1
  197. package/themes/umberto/src/js/_sidenavigation.js +1 -1
  198. package/themes/umberto/src/js/_toc.js +1 -1
  199. package/themes/umberto/src/js/_tooltips.js +1 -1
  200. package/themes/umberto/src/js/_warningbanner.js +1 -1
  201. package/themes/umberto/src/js/app.js +1 -1
package/.eslintrc.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -10,7 +10,7 @@ module.exports = {
10
10
  rules: {
11
11
  'ckeditor5-rules/license-header': [ 'error', { headerLines: [
12
12
  '/**',
13
- ' * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.',
13
+ ' * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.',
14
14
  ' * For licensing, see LICENSE.md.',
15
15
  ' */'
16
16
  ] } ]
package/LICENSE.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Software License Agreement
2
2
  ==========================
3
3
 
4
- Copyright (c) 2017-2022, [CKSource](http://cksource.com) Holding sp. z o.o. All rights reserved.
4
+ Copyright (c) 2017-2023, [CKSource](http://cksource.com) Holding sp. z o.o. All rights reserved.
5
5
 
6
6
  Licensed under the terms of [MIT License](https://opensource.org/licenses/MIT).
7
7
 
package/README.md CHANGED
@@ -108,6 +108,7 @@ You can also have a look at [CKEditor5](https://github.com/ckeditor/ckeditor5/tr
108
108
  | `path` | Path where to look for documentation source files (Markdown files, images etc.). The path is relative to the location of `umberto.json`. |
109
109
  | `startPage` | Path to page linked in drop down menu. If there is nothing provided, then `index.html` (from main project directory) is used. |
110
110
  | `redirects` | Object where as a key is stored string representing `old-url` and as a value is stored string representing `new-url`. (_Currently redirects are used only in deployment scripts of big-bang docs._) |
111
+ | `googleoptimize` | `domains` - Array of whitelisted domains from which GO can be used; `id` - container ID |
111
112
  | `googletagmanager` | `domains` - Array of whitelisted domains from which GA can be used; `gtm` - container ID |
112
113
  | `googleanalytics` | `domains` - Array of whitelisted domains from which GA can be used; `config` - options passed to ga('create') method |
113
114
  | `feedbackWidget` | `domains` - Array of whitelisted domains from which feedback widget can be used; `apiKey` - unique key for widget |
package/hexo-shim.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "umberto",
3
- "version": "2.1.8",
3
+ "version": "2.3.0",
4
4
  "description": "CKSource Documentation builder",
5
5
  "main": "src/index.js",
6
6
  "files": [
@@ -10,13 +10,14 @@
10
10
  ".editorconfig",
11
11
  ".eslintrc.js",
12
12
  "hexo-config.json",
13
- "hexo-shim.js"
13
+ "hexo-shim.js",
14
+ "scripts-dev/postinstall.js"
14
15
  ],
15
16
  "dependencies": {
16
17
  "@babel/core": "^7.18.10",
17
18
  "@babel/polyfill": "^7.12.1",
18
19
  "@babel/preset-env": "^7.18.10",
19
- "@ckeditor/jsdoc-plugins": "^30.3.5",
20
+ "@ckeditor/jsdoc-plugins": "^32.0.1",
20
21
  "babel-loader": "^8.2.5",
21
22
  "chalk": "^4.1.0",
22
23
  "cheerio": "^1.0.0-rc.12",
@@ -37,6 +38,7 @@
37
38
  "jquery": "~3.6.0",
38
39
  "js-beautify": "^1.14.4",
39
40
  "lodash": "^4.17.21",
41
+ "markdown-it": "^13.0.1",
40
42
  "markdown-it-expand-tabs": "^1.0.13",
41
43
  "markdown-it-toc-and-anchor": "^4.2.0",
42
44
  "medium-zoom": "^1.0.6",
@@ -54,7 +56,9 @@
54
56
  "webpack": "^5.74.0"
55
57
  },
56
58
  "devDependencies": {
57
- "@ckeditor/ckeditor5-dev-env": "^30.3.5",
59
+ "@ckeditor/ckeditor5-dev-bump-year": "^32.0.1",
60
+ "@ckeditor/ckeditor5-dev-ci": "^32.0.1",
61
+ "@ckeditor/ckeditor5-dev-release-tools": "^32.0.1",
58
62
  "browser-sync": "^2.27.10",
59
63
  "chai": "^4.3.6",
60
64
  "chokidar": "^3.5.3",
@@ -71,7 +75,7 @@
71
75
  "npm": ">=5.7.1"
72
76
  },
73
77
  "scripts": {
74
- "postinstall": "node ./scripts/postinstall.js",
78
+ "postinstall": "node ./scripts-dev/postinstall.js",
75
79
  "dev:build-single": "node ./scripts-dev/build-single.js",
76
80
  "dev:build-multi": "node ./scripts-dev/build-multi.js",
77
81
  "dev:serve": "node ./scripts-dev/serve.js",
@@ -101,6 +105,6 @@
101
105
  "packages/**"
102
106
  ],
103
107
  "hexo": {
104
- "version": "6.2.0"
108
+ "version": "6.3.0"
105
109
  }
106
110
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -11,6 +11,9 @@ const chalk = require( 'chalk' );
11
11
 
12
12
  const LINK_REGEXP = /\\?{(?:@linkapi|@link|@linksdk|@linkexample)\s+[^{]+?({[^}]+})?[^{}]*\\?}/g;
13
13
 
14
+ const findTargetDoclet = require( '../../src/api-builder/utils/findtargetdoclet' );
15
+ const { hasDedicatedApiPages, LONG_NAME_LABEL_REGEXP } = require( '../../src/api-builder/utils/utils' );
16
+
14
17
  /**
15
18
  * Converts @link or @linkapi tags into working links to guides or API docs.
16
19
  *
@@ -68,8 +71,9 @@ function linkToApi( str, data, hexo, { relativeUrlHelper, isSilentError } ) {
68
71
  }
69
72
 
70
73
  const projectName = linkContentMatchResult[ 1 ] || data.projectName;
71
- const itemName = linkContentMatchResult[ 2 ];
72
- let linkText = linkContentMatchResult[ 3 ] || splitLongname( itemName ).name;
74
+ const { name, label } = splitLongname( linkContentMatchResult[ 2 ] );
75
+ const itemName = linkContentMatchResult[ 2 ].replace( LONG_NAME_LABEL_REGEXP, '' );
76
+ let linkText = linkContentMatchResult[ 3 ] || name;
73
77
 
74
78
  // Support link texts with backticks, wrapping them in <code>.
75
79
  // TODO - a naive implementation.
@@ -86,10 +90,25 @@ function linkToApi( str, data, hexo, { relativeUrlHelper, isSilentError } ) {
86
90
  }
87
91
 
88
92
  const baseItemName = getBaseItemName( itemName );
89
- const hashWithoutPrefix = itemName.replace( baseItemName, '' ).slice( 1 );
93
+ let hashWithoutPrefix = itemName.replace( baseItemName, '' ).slice( 1 );
90
94
  const hash = hashWithoutPrefix ? `#${ hashWithoutPrefix }` : '';
91
95
  const project = hexo.projectGlobals[ projectName ];
92
96
 
97
+ if ( hashWithoutPrefix.includes( '-' ) ) {
98
+ let [ type, description ] = hashWithoutPrefix.split( '-' );
99
+
100
+ // JSDuck replaces `$` with `s-`.
101
+ if ( type === 's' ) {
102
+ description = `s-${ description }`;
103
+ }
104
+
105
+ if ( type === 'event' ) {
106
+ hashWithoutPrefix = type;
107
+ } else {
108
+ hashWithoutPrefix = description;
109
+ }
110
+ }
111
+
93
112
  let apiSlug;
94
113
 
95
114
  if ( project && project.config ) {
@@ -105,49 +124,42 @@ function linkToApi( str, data, hexo, { relativeUrlHelper, isSilentError } ) {
105
124
  } );
106
125
  }
107
126
 
108
- const basePath = projectName === data.projectName ?
109
- data.BASE_PATH :
110
- `${ projectName }/latest`;
111
-
127
+ const basePath = projectName === data.projectName ? data.BASE_PATH : `${ projectName }/latest`;
112
128
  const fileName = getFileName( baseItemName );
113
129
 
114
130
  let href = relativeUrlHelper( data.path, upath.join( basePath, apiSlug, fileName + hash ) );
115
131
 
116
- if ( project && project.doclets ) {
117
- const doclet = project.doclets.get( `ln:${ itemName }` ).getFirst();
118
-
119
- const docletByExtraId = project.doclets.get( `id:${ itemName }` ).getFirst() ||
120
- project.doclets.get( `id:${ baseItemName }#constant-${ hashWithoutPrefix }` ).getFirst();
121
-
122
- // TODO The following code is buggy. E.g. for static method and instance method sharing the same name.
123
- // Actually the `docletByBaseAndHash` should be just `doclet` - IDK why it was designed this way.
124
- // This should be fixed in the future with tests on CKE5 and CKE4 codebases.
125
- const docletByBaseAndHash = project.doclets.get( `ln:${ baseItemName }#${ hashWithoutPrefix }` ).getFirst() ||
126
- project.doclets.get( `ln:${ baseItemName }.${ hashWithoutPrefix }` ).getFirst() ||
127
- project.doclets.get( `ln:${ baseItemName }~${ hashWithoutPrefix }` ).getFirst() ||
128
- project.doclets.get( `ln:${ baseItemName }#event:${ hashWithoutPrefix }` ).getFirst();
129
-
130
- if ( doclet && [ 'module', 'class', 'typedef', 'mixin', 'interface', 'namespace' ].includes( doclet.kind ) ) {
131
- // If there is a doclet, having own HTML page (e.g. a class doclet),
132
- // exactly matching the longname from @link tag, link directly without hash.
133
- href = relativeUrlHelper( data.path, upath.join( basePath, apiSlug, getFileName( itemName ) ) );
134
- } else if ( docletByExtraId ) {
135
- // When link tag follows notation: ...SomeClass#method-methodName.
136
- href = relativeUrlHelper( data.path, upath.join( basePath, apiSlug, fileName + `#${ docletByExtraId.extraId }` ) );
137
- } else if ( docletByBaseAndHash ) {
138
- // When link tag follows notation: ...SomeClass#methodName, then must use 'extraId' as the hash.
139
- href = relativeUrlHelper( data.path, upath.join( basePath, apiSlug, fileName + `#${ docletByBaseAndHash.extraId }` ) );
140
- } else {
141
- return onError( {
142
- value: str,
143
- source: data.source,
144
- isSilent: isSilentError,
145
- description: 'No doclet found. Link remain not transformed.'
146
- } );
147
- }
132
+ if ( !project || !project.doclets ) {
133
+ return getOutputLink( href, linkText, !!linkContentMatchResult[ 3 ] );
148
134
  }
149
135
 
150
- return linkContentMatchResult[ 3 ] ? `<a href=${ href }>${ linkText }</a>` : `<a href=${ href }><code>${ linkText }</code></a>`;
136
+ const targetDoclet = findTargetDoclet( project.doclets, {
137
+ module: itemName,
138
+ structure: baseItemName,
139
+ member: hashWithoutPrefix,
140
+ label
141
+ } );
142
+
143
+ if ( !targetDoclet ) {
144
+ return onError( {
145
+ value: str, source: data.source, isSilent: isSilentError, description: 'No doclet found. Link remain not transformed.'
146
+ } );
147
+ }
148
+
149
+ if ( hasDedicatedApiPages( targetDoclet ) ) {
150
+ href = relativeUrlHelper( data.path, upath.join( basePath, apiSlug, getFileName( itemName ) ) );
151
+ } else {
152
+ href = [
153
+ relativeUrlHelper( data.path, upath.join( basePath, apiSlug, fileName ) ),
154
+ encodeURI( targetDoclet.extraId )
155
+ ].join( '#' );
156
+ }
157
+
158
+ if ( !linkContentMatchResult[ 3 ] && targetDoclet.kind === 'event' ) {
159
+ linkText = `event-${ targetDoclet.name }`;
160
+ }
161
+
162
+ return getOutputLink( href, linkText, !!linkContentMatchResult[ 3 ] );
151
163
  }
152
164
 
153
165
  /**
@@ -180,6 +192,14 @@ function getFileName( itemName ) {
180
192
  return itemName.replace( /[/:.]/g, '_' ).replace( '~', '-' ) + '.html';
181
193
  }
182
194
 
195
+ function getOutputLink( href, description, isCustomDescription ) {
196
+ if ( isCustomDescription ) {
197
+ return `<a href=${ href }>${ description }</a>`;
198
+ }
199
+
200
+ return `<a href=${ href }><code>${ description }</code></a>`;
201
+ }
202
+
183
203
  /**
184
204
  * @param {String} str
185
205
  * @param {Object} data
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2017-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
4
  */
5
5
 
@@ -20,6 +20,8 @@ const splitLongname = require( '../helpers/split-longname' );
20
20
  const githubUrlUtils = require( '../helpers/github-url' );
21
21
  const getReportIssueWidgetUrl = require( '../../scripts/utils/getreportissuewidgeturl' );
22
22
 
23
+ const findTargetDoclet = require( './utils/findtargetdoclet' );
24
+
23
25
  /**
24
26
  * Renders HTML for every module, class, mixin etc.
25
27
  *
@@ -523,15 +525,33 @@ module.exports = class ApiBuilder {
523
525
  }
524
526
  }
525
527
 
526
- _getUrlAddressFromLongname( longname ) {
527
- const doclet = this._dataCollection.get( `ln:${ longname }` ).getFirst();
528
+ /**
529
+ * @protected
530
+ * @param {LongNameParts} parts
531
+ * @returns {String|null}
532
+ */
533
+ _getUrlAddressFromLongname( parts ) {
534
+ if ( !parts.longnameBase ) {
535
+ return null;
536
+ }
528
537
 
529
- if ( !doclet ) {
538
+ // Get a doclet to which we link.
539
+ const targetDoclet = findTargetDoclet( this._dataCollection, {
540
+ structure: parts.longnameBase,
541
+ member: parts.name,
542
+ label: parts.label,
543
+ query: {
544
+ memberOnly: true
545
+ }
546
+ } );
547
+
548
+ if ( !targetDoclet ) {
530
549
  return null;
531
- } else if ( [ 'cfg', 'member', 'function', 'event' ].includes( doclet.kind ) ) {
532
- return `${ doclet.memberof }#${ doclet.extraId }`;
533
- } else {
534
- return doclet.longname;
535
550
  }
551
+
552
+ return [
553
+ targetDoclet.memberof,
554
+ encodeURI( targetDoclet.extraId )
555
+ ].join( parts.isStatic ? '.' : '#' );
536
556
  }
537
557
  };