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
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md.
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ const AbstractParser = require( './abstractparser' );
9
+
10
+ module.exports = class TypeParser extends AbstractParser {
11
+ /**
12
+ * @param {TypedocReflectionMeta} item
13
+ * @returns {Boolean}
14
+ */
15
+ canParse( item ) {
16
+ return item.kindString === 'Type alias';
17
+ }
18
+
19
+ /**
20
+ * @param {TypedocReflection<'Type alias'>} item
21
+ * @param {String} parentName
22
+ * @returns {Object}
23
+ */
24
+ parse( item, parentName ) {
25
+ const result = {
26
+ name: item.name,
27
+ memberof: parentName,
28
+ longname: this.getLongName( item, parentName ),
29
+
30
+ scope: 'inner',
31
+ kind: this.getKind( item ),
32
+ extraId: this.getExtraId( item ),
33
+ file: this.getFile( item ),
34
+ skipSource: this.shouldSkipSource( item ),
35
+ description: this.getComment( item ),
36
+ deprecated: this.isDeprecated( item ),
37
+
38
+ // This property will be filled in the post-processing phase.
39
+ typeParameters: null
40
+ };
41
+
42
+ // There are two distinct type definitions that are rendered in own way by Umberto: function type and object type.
43
+ // For function type, its params and return type is displayed. For object, all its properties are shown.
44
+ const isFunctionType = item.type.declaration && item.type.declaration.signatures;
45
+
46
+ if ( isFunctionType ) {
47
+ // Needed for post-processing once all project reflections are converted.
48
+ result._signature = item.type.declaration.signatures[ 0 ];
49
+
50
+ result.description = this.getComment( result._signature );
51
+ result.type = {
52
+ names: [
53
+ 'function'
54
+ ]
55
+ };
56
+
57
+ // These properties will be filled in the post-processing phase.
58
+ result.returns = null;
59
+ result.params = null;
60
+ } else {
61
+ // Needed for post-processing once all project reflections are converted.
62
+ result._signature = item;
63
+
64
+ // These properties will be filled in the post-processing phase.
65
+ result.properties = null;
66
+ result.type = null;
67
+ }
68
+
69
+ return result;
70
+ }
71
+ };
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @license Copyright (c) 2017-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md.
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ const TypedocConverter = require( './typedoc/typedocconverter' );
9
+ const ModuleParser = require( './typedoc/moduleparser' );
10
+ const ClassParser = require( './typedoc/classparser' );
11
+ const AccessorParser = require( './typedoc/accessorparser' );
12
+ const InterfaceParser = require( './typedoc/interfaceparser' );
13
+ const ConstantParser = require( './typedoc/constantparser' );
14
+ const TypeParser = require( './typedoc/typeparser' );
15
+ const FunctionParser = require( './typedoc/functionparser' );
16
+ const PropertyParser = require( './typedoc/propertyparser' );
17
+ const MethodParser = require( './typedoc/methodparser' );
18
+ const ConstructorParser = require( './typedoc/constructorparser' );
19
+ const ErrorParser = require( './typedoc/errorparser' );
20
+ const EventParser = require( './typedoc/eventparser' );
21
+
22
+ module.exports = data => {
23
+ const projectReflection = JSON.parse( data );
24
+
25
+ if ( !projectReflection.children ) {
26
+ console.warn( 'No doclets found in passed data.' );
27
+
28
+ return [];
29
+ }
30
+
31
+ const typedoc = new TypedocConverter( [
32
+ // Top level. All things belong to a module.
33
+ ModuleParser,
34
+
35
+ // Module's children.
36
+ ClassParser,
37
+ InterfaceParser,
38
+ FunctionParser,
39
+ ConstantParser,
40
+ TypeParser,
41
+ ErrorParser,
42
+
43
+ // Class's and interface's children.
44
+ ConstructorParser,
45
+ MethodParser,
46
+ AccessorParser,
47
+ PropertyParser,
48
+ EventParser
49
+ ] );
50
+
51
+ return typedoc.convertToJsDoc( projectReflection );
52
+ };
@@ -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
 
@@ -8,10 +8,12 @@
8
8
  const DataCollection = require( './data-collection' );
9
9
  const jsdoc2umberto = require( './converters/jsdoc2umberto' );
10
10
  const jsduck2umberto = require( './converters/jsduck2umberto' );
11
+ const typedoc2umberto = require( './converters/typedoc2umberto' );
11
12
  const relationFixer = require( './middlewares/relation-fixer' );
12
13
  const converters = new Map( [
13
14
  [ 'jsdoc', jsdoc2umberto ],
14
- [ 'jsduck', jsduck2umberto ]
15
+ [ 'jsduck', jsduck2umberto ],
16
+ [ 'typedoc', typedoc2umberto ]
15
17
  ] );
16
18
 
17
19
  /**
@@ -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
 
@@ -17,6 +17,14 @@ class DocletCollection {
17
17
  this._allData = [];
18
18
  }
19
19
 
20
+ get size() {
21
+ return this._allData.length;
22
+ }
23
+
24
+ get isEmpty() {
25
+ return this.size === 0;
26
+ }
27
+
20
28
  /**
21
29
  * Adds doclet to collection. Keeps it sorted by doclet's name.
22
30
  *
@@ -57,7 +65,11 @@ class DocletCollection {
57
65
  * @returns {Doclet|null}
58
66
  */
59
67
  getFirst() {
60
- return this._allData.length > 0 ? this._allData[ 0 ] : null;
68
+ return this.isEmpty ? null : this.getAll()[ 0 ];
69
+ }
70
+
71
+ getByLabel( label ) {
72
+ return this.getAll().find( doclet => doclet.label === label );
61
73
  }
62
74
  }
63
75
 
@@ -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
 
@@ -7,5 +7,6 @@
7
7
 
8
8
  module.exports = {
9
9
  jsdoc: 'json',
10
- jsduck: 'json'
10
+ jsduck: 'json',
11
+ typedoc: 'json'
11
12
  };
@@ -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,26 +1,95 @@
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
 
6
6
  'use strict';
7
7
 
8
+ const { MEMBER_NAME_REGEXP, LONG_NAME_LABEL_REGEXP } = require( '../api-builder/utils/utils' );
9
+
10
+ /**
11
+ * @param {String} longname
12
+ * @returns {LongNameParts}
13
+ */
8
14
  module.exports = longname => {
9
15
  if ( !longname || typeof longname !== 'string' ) {
10
16
  return {};
11
17
  }
12
18
 
19
+ // Processing a literal value. Let's return it without modifications.
20
+ if ( longname.startsWith( '\'' ) && longname.endsWith( '\'' ) ) {
21
+ return {
22
+ isSingle: true,
23
+ name: longname,
24
+ longnameBase: '',
25
+ directoryNames: []
26
+ };
27
+ }
28
+
13
29
  const parts = longname.split( '/' );
14
- const nameMatch = /[:{}\-\w$]+$/.exec( longname );
15
- const name = nameMatch ? nameMatch[ 0 ].replace( 'module:', '' ) : ''; // last part of the longname
16
- const longnameBase = longname.slice( 0, -( name.length + 1 ) );
30
+ let [ , nameMatch, label ] = MEMBER_NAME_REGEXP.exec( longname ) || [];
31
+
32
+ let name = nameMatch ? nameMatch.replace( 'module:', '' ) : ''; // last part of the longname
33
+ let longnameBase = longname.split( new RegExp( '[#.]' + name ) )[ 0 ];
34
+
35
+ // Remove the label part from a member name.
36
+ name = name.replace( LONG_NAME_LABEL_REGEXP, '' );
37
+
38
+ const isStatic = longname[ longnameBase.length ] === '.' || longnameBase.startsWith( '.' ) || longnameBase.endsWith( '.' );
39
+
40
+ // `longnameBase` might start or end with a symbol. It depends if it is a full or short link.
41
+ longnameBase = longnameBase.replace( /^[#~.]|[#~.]$/g, '' );
42
+
43
+ // Support for links containing a doclet type.
44
+ // E.g., `CKEDITOR.feature#property-allowedContent`.
45
+ if ( name.includes( '-' ) ) {
46
+ let [ type, description ] = name.split( '-' );
47
+
48
+ // JSDuck replaces `$` with `s-`.
49
+ if ( type === 's' ) {
50
+ description = `s-${ description }`;
51
+ }
52
+
53
+ // For events, we want to keep the `name` as it is specified.
54
+ if ( type === 'event' ) {
55
+ name = type;
56
+
57
+ // An event within a namespace.
58
+ if ( label ) {
59
+ label = `${ description }:${ label }`;
60
+ }
61
+ else {
62
+ label = description;
63
+ }
64
+ }
65
+ // Otherwise, skip the type. Use the name only.
66
+ else {
67
+ name = description;
68
+ }
69
+ }
17
70
 
18
71
  if ( parts.length === 1 ) {
72
+ // When processing a string that looks like an assignment expression,
73
+ // let's return the original string (do not cut it anywhere).
74
+ // It is useful when processing a generic argument.
75
+ const isTypeAssignment = longname.split( '=' ).length === 2;
76
+
77
+ if ( isTypeAssignment ) {
78
+ return {
79
+ isSingle: true,
80
+ name: longname,
81
+ longnameBase: '',
82
+ directoryNames: []
83
+ };
84
+ }
85
+
19
86
  return {
20
87
  isSingle: true,
21
88
  name,
22
89
  longnameBase,
23
- directoryNames: []
90
+ directoryNames: [],
91
+ label,
92
+ isStatic
24
93
  };
25
94
  }
26
95
 
@@ -36,11 +105,35 @@ module.exports = longname => {
36
105
  const directoryNames = parts;
37
106
 
38
107
  return {
39
- name, // last part of longname
40
- longnameBase, // longname without the last part
108
+ name,
109
+ longnameBase,
41
110
  moduleName,
42
111
  className,
43
112
  packageName,
44
- directoryNames
113
+ directoryNames,
114
+ label,
115
+ isStatic
45
116
  };
46
117
  };
118
+
119
+ /**
120
+ * @typedef {Object} LongNameParts
121
+ *
122
+ * @property {Array.<String>} [directoryNames]
123
+ *
124
+ * @property {Boolean} [isStatic]
125
+ *
126
+ * @property {Boolean} [isSingle]
127
+ *
128
+ * @property {String} [longnameBase]
129
+ *
130
+ * @property {String} [moduleName]
131
+ *
132
+ * @property {String} [className]
133
+ *
134
+ * @property {String} [packageName]
135
+ *
136
+ * @property {String} [name]
137
+ *
138
+ * @property {String} [label]
139
+ */
@@ -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
 
@@ -17,6 +17,7 @@ const umbertoVersion = require( '../../../package.json' ).version;
17
17
  * @param {String} basePath Project's base path, e.g. 'ckeditor5/1.0.0'.
18
18
  * @param {Object} docSearch Algolia's docsearch config.
19
19
  * @param {Object} config umberto.json config.
20
+ * @param {Object} googleoptimize Google Optimize config.
20
21
  * @param {Object} googletagmanager Google Tag Manager config.
21
22
  * @param {Object} googleanalytics Google Analytics config.
22
23
  * @param {Object} feedbackWidget Feedback widget config
@@ -30,6 +31,7 @@ module.exports = ( ctx, {
30
31
  basePath,
31
32
  docSearch = {},
32
33
  config,
34
+ googleoptimize,
33
35
  googletagmanager,
34
36
  googleanalytics,
35
37
  feedbackWidget,
@@ -93,6 +95,7 @@ module.exports = ( ctx, {
93
95
 
94
96
  locals.umbertoVersion = umbertoVersion;
95
97
  locals.disableSearch = disableSearch;
98
+ locals.googleoptimize = googleoptimize;
96
99
  locals.googletagmanager = googletagmanager;
97
100
  locals.googleanalytics = googleanalytics;
98
101
  locals.feedbackWidget = feedbackWidget;
@@ -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
 
package/src/index.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
 
@@ -56,6 +56,7 @@ module.exports = {
56
56
  mainConfig: {
57
57
  projects: [ '.' ],
58
58
  docsearch: pConfig.docsearch,
59
+ googleoptimize: pConfig.googleoptimize,
59
60
  googletagmanager: pConfig.googletagmanager,
60
61
  googleanalytics: pConfig.googleanalytics,
61
62
  feedbackWidget: pConfig.feedbackWidget,
@@ -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
 
@@ -25,7 +25,6 @@ module.exports = config => {
25
25
  src,
26
26
  projectDst, // e.g.: ckeditor5/latest/api
27
27
  outputDir, // build/docs
28
- type, // type of API data (jsdoc, jsduck)
29
28
  themePath, // Umberto theme path
30
29
  BASE_PATH, // e.g.: ckeditor5/latest
31
30
  docSearch, // Algolia's docsearch config
@@ -37,9 +36,10 @@ module.exports = config => {
37
36
 
38
37
  const apiConfig = projectConfig.groups ? projectConfig.groups.find( g => g.id === 'api-reference' ) : null;
39
38
  const middlewares = apiConfig ? apiConfig.middlewares : [];
40
- const docSources = readDocSources( src, type );
39
+ const apiType = templateLocals.projectLocals.apiType;
40
+ const docSources = readDocSources( src, apiType );
41
41
  const dataProvider = new DataProvider();
42
- const dataCollection = dataProvider.convert( type, docSources, { middlewares } );
42
+ const dataCollection = dataProvider.convert( apiType, docSources, { middlewares } );
43
43
  const projectName = projectConfig.name;
44
44
 
45
45
  if ( !dataCollection ) {
@@ -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
 
@@ -135,6 +135,7 @@ module.exports = options => {
135
135
  dev,
136
136
  docSearch: mainConfig.docsearch,
137
137
  disableSearch: mainConfig.docsearch === false,
138
+ googleoptimize: mainConfig.googleoptimize,
138
139
  googletagmanager: mainConfig.googletagmanager,
139
140
  googleanalytics: mainConfig.googleanalytics,
140
141
  feedbackWidget: mainConfig.feedbackWidget,
@@ -305,6 +306,7 @@ function buildProjects( rootPath, projectPaths, options = {} ) {
305
306
  extraStyles: options.extraStyles,
306
307
  extraScripts: options.extraScripts,
307
308
  disableSearch: options.disableSearch,
309
+ googleoptimize: options.googleoptimize,
308
310
  googletagmanager: options.googletagmanager,
309
311
  googleanalytics: options.googleanalytics,
310
312
  feedbackWidget: options.feedbackWidget,
@@ -322,6 +324,7 @@ function buildProjects( rootPath, projectPaths, options = {} ) {
322
324
  extraStyles: options.extraStyles,
323
325
  extraScripts: options.extraScripts,
324
326
  disableSearch: options.disableSearch,
327
+ googleoptimize: options.googleoptimize,
325
328
  googletagmanager: options.googletagmanager,
326
329
  googleanalytics: options.googleanalytics,
327
330
  feedbackWidget: options.feedbackWidget,
@@ -362,6 +365,7 @@ function buildProjects( rootPath, projectPaths, options = {} ) {
362
365
  basePath,
363
366
  docSearch: options.docSearch,
364
367
  config,
368
+ googleoptimize: options.googleoptimize,
365
369
  googletagmanager: options.googletagmanager,
366
370
  googleanalytics: options.googleanalytics,
367
371
  feedbackWidget: options.feedbackWidget,
@@ -445,7 +449,6 @@ function buildApis( projectConfigs, options = {} ) {
445
449
  src: upath.join( config.projectRootPath, config.path, apiConfig.sourceDir ),
446
450
  projectDst: upath.join( BASE_PATH, apiConfig.slug ),
447
451
  outputDir: hexoManager.getPublicDir().replace( process.cwd(), '' ),
448
- type: apiConfig.type,
449
452
  themePath: hexoManager.getThemePath(),
450
453
  BASE_PATH,
451
454
  docSearch: options.docSearch,
@@ -461,9 +464,11 @@ function buildApis( projectConfigs, options = {} ) {
461
464
  disableSearch: config.docsearch === false,
462
465
  repoUrl: config.repoUrl,
463
466
  og: config.og,
464
- projectSlug: config.slug
467
+ projectSlug: config.slug,
468
+ apiType: apiConfig.type
465
469
  },
466
470
  disableSearch: options.disableSearch,
471
+ googleoptimize: options.googleoptimize,
467
472
  googletagmanager: options.googletagmanager,
468
473
  googleanalytics: options.googleanalytics,
469
474
  feedbackWidget: options.feedbackWidget,
@@ -531,6 +536,7 @@ function buildSdks( projectConfigs, options = {} ) {
531
536
  },
532
537
  disableSearch: options.disableSearch,
533
538
  projectsData: basicProjectsData,
539
+ googleoptimize: options.googleoptimize,
534
540
  googletagmanager: options.googletagmanager,
535
541
  googleanalytics: options.googleanalytics,
536
542
  feedbackWidget: options.feedbackWidget,