@jpmorganchase/mosaic-plugins 0.1.0-beta.8 → 0.1.0-beta.80

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 (80) hide show
  1. package/dist/$AliasPlugin.d.ts +10 -0
  2. package/dist/$AliasPlugin.js +49 -228
  3. package/dist/$AliasPlugin.js.map +1 -1
  4. package/dist/$CodeModPlugin.d.ts +7 -0
  5. package/dist/$CodeModPlugin.js +18 -118
  6. package/dist/$CodeModPlugin.js.map +1 -1
  7. package/dist/$RefPlugin.d.ts +31 -0
  8. package/dist/$RefPlugin.js +123 -451
  9. package/dist/$RefPlugin.js.map +1 -1
  10. package/dist/$TagPlugin.d.ts +28 -0
  11. package/dist/$TagPlugin.js +51 -234
  12. package/dist/$TagPlugin.js.map +1 -1
  13. package/dist/BreadcrumbsPlugin.d.ts +19 -0
  14. package/dist/BreadcrumbsPlugin.js +87 -112
  15. package/dist/BreadcrumbsPlugin.js.map +1 -1
  16. package/dist/BrokenLinksPlugin.d.ts +10 -0
  17. package/dist/BrokenLinksPlugin.js +80 -0
  18. package/dist/BrokenLinksPlugin.js.map +1 -0
  19. package/dist/FragmentPlugin.d.ts +3 -0
  20. package/dist/FragmentPlugin.js +61 -0
  21. package/dist/FragmentPlugin.js.map +1 -0
  22. package/dist/LazyPagePlugin.d.ts +14 -0
  23. package/dist/LazyPagePlugin.js +50 -254
  24. package/dist/LazyPagePlugin.js.map +1 -1
  25. package/dist/PagesWithoutFileExtPlugin.d.ts +9 -0
  26. package/dist/PagesWithoutFileExtPlugin.js +20 -118
  27. package/dist/PagesWithoutFileExtPlugin.js.map +1 -1
  28. package/dist/PropsTablePlugin.d.ts +6 -0
  29. package/dist/PropsTablePlugin.js +88 -0
  30. package/dist/PropsTablePlugin.js.map +1 -0
  31. package/dist/PublicAssetsPlugin.d.ts +18 -0
  32. package/dist/PublicAssetsPlugin.js +28 -0
  33. package/dist/PublicAssetsPlugin.js.map +1 -0
  34. package/dist/ReadingTimePlugin.d.ts +10 -0
  35. package/dist/ReadingTimePlugin.js +39 -0
  36. package/dist/ReadingTimePlugin.js.map +1 -0
  37. package/dist/SearchIndexPlugin.d.ts +56 -0
  38. package/dist/SearchIndexPlugin.js +154 -0
  39. package/dist/SearchIndexPlugin.js.map +1 -0
  40. package/dist/SharedConfigPlugin.d.ts +14 -0
  41. package/dist/SharedConfigPlugin.js +129 -168
  42. package/dist/SharedConfigPlugin.js.map +1 -1
  43. package/dist/SidebarPlugin.d.ts +45 -0
  44. package/dist/SidebarPlugin.js +285 -324
  45. package/dist/SidebarPlugin.js.map +1 -1
  46. package/dist/SiteMapPlugin.d.ts +9 -0
  47. package/dist/SiteMapPlugin.js +23 -91
  48. package/dist/SiteMapPlugin.js.map +1 -1
  49. package/dist/TableOfContentsPlugin.d.ts +20 -0
  50. package/dist/TableOfContentsPlugin.js +44 -0
  51. package/dist/TableOfContentsPlugin.js.map +1 -0
  52. package/dist/utils/PluginError.d.ts +7 -0
  53. package/dist/utils/PluginError.js +13 -0
  54. package/dist/utils/PluginError.js.map +1 -0
  55. package/dist/utils/createPageTest.d.ts +1 -0
  56. package/dist/utils/createPageTest.js +8 -0
  57. package/dist/utils/createPageTest.js.map +1 -0
  58. package/dist/utils/mergePageContent.d.ts +16 -0
  59. package/dist/utils/mergePageContent.js +23 -0
  60. package/dist/utils/mergePageContent.js.map +1 -0
  61. package/dist/utils/normaliseRefs.d.ts +1 -0
  62. package/dist/utils/normaliseRefs.js +56 -275
  63. package/dist/utils/normaliseRefs.js.map +1 -1
  64. package/dist/utils/sortSidebarData.d.ts +29 -0
  65. package/dist/utils/sortSidebarData.js +47 -0
  66. package/dist/utils/sortSidebarData.js.map +1 -0
  67. package/package.json +41 -19
  68. package/CHANGELOG.md +0 -93
  69. package/dist/LocalFolderSavePlugin.js +0 -165
  70. package/dist/LocalFolderSavePlugin.js.map +0 -1
  71. package/dist/NextPrevPagePlugin.js +0 -173
  72. package/dist/NextPrevPagePlugin.js.map +0 -1
  73. package/dist/ReadingTimePlugin.mjs +0 -119
  74. package/dist/ReadingTimePlugin.mjs.map +0 -1
  75. package/dist/SearchIndexPlugin.mjs +0 -268
  76. package/dist/SearchIndexPlugin.mjs.map +0 -1
  77. package/dist/TableOfContentsPlugin.mjs +0 -131
  78. package/dist/TableOfContentsPlugin.mjs.map +0 -1
  79. package/dist/__tests__/BreadcrumbsPlugin.test.js +0 -160
  80. package/dist/__tests__/BreadcrumbsPlugin.test.js.map +0 -1
@@ -1,181 +1,142 @@
1
- function _arrayLikeToArray(arr, len) {
2
- if (len == null || len > arr.length) len = arr.length;
3
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
- return arr2;
5
- }
6
- function _arrayWithoutHoles(arr) {
7
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
8
- }
9
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
10
- try {
11
- var info = gen[key](arg);
12
- var value = info.value;
13
- } catch (error) {
14
- reject(error);
15
- return;
16
- }
17
- if (info.done) {
18
- resolve(value);
19
- } else {
20
- Promise.resolve(value).then(_next, _throw);
21
- }
22
- }
23
- function _asyncToGenerator(fn) {
24
- return function() {
25
- var self = this, args = arguments;
26
- return new Promise(function(resolve, reject) {
27
- var gen = fn.apply(self, args);
28
- function _next(value) {
29
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
30
- }
31
- function _throw(err) {
32
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
33
- }
34
- _next(undefined);
35
- });
36
- };
37
- }
38
- function _iterableToArray(iter) {
39
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
40
- }
41
- function _nonIterableSpread() {
42
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
43
- }
44
- function _toConsumableArray(arr) {
45
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
46
- }
47
- function _unsupportedIterableToArray(o, minLen) {
48
- if (!o) return;
49
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
50
- var n = Object.prototype.toString.call(o).slice(8, -1);
51
- if (n === "Object" && o.constructor) n = o.constructor.name;
52
- if (n === "Map" || n === "Set") return Array.from(n);
53
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
54
- }
55
- import regeneratorRuntime from "regenerator-runtime";
56
- import flatten from "lodash/flatten";
57
- import path from "path";
1
+ import crypto from 'node:crypto';
2
+ import path from 'node:path';
3
+ import { flatten } from 'lodash-es';
4
+ import deepmerge from 'deepmerge';
5
+ import { createPageTest } from './utils/createPageTest.js';
58
6
  function createFileGlob(url, pageExtensions) {
59
7
  if (pageExtensions.length === 1) {
60
- return "".concat(url).concat(pageExtensions[0]);
8
+ return `${url}${pageExtensions[0]}`;
61
9
  }
62
- return "".concat(url, "{").concat(pageExtensions.join(","), "}");
10
+ return `${url}{${pageExtensions.join(',')}}`;
11
+ }
12
+ /**
13
+ * https://stackoverflow.com/a/50549047
14
+ * compute inner relative to outer
15
+ * If it's not contained, the first component of the resulting path will be .., so that's what we check for
16
+ */
17
+ function isWithin(outer, inner) {
18
+ const outerParentDir = path.posix.resolve(path.posix.dirname(outer), '../');
19
+ const innerParentDir = path.posix.resolve(path.posix.dirname(inner), '../');
20
+ const rel = path.posix.relative(outerParentDir, innerParentDir);
21
+ return !rel.startsWith('../') && rel !== '..';
63
22
  }
64
23
  /**
65
24
  * Plugin that crawls the page hierarchy to find the closest `sharedConfig` from any parent index's page metadata.
66
25
  * It then exports a JSON file (name: `options.filename`) into each directory with the merged config for that level
67
- */ var SharedConfigPlugin = {
68
- $beforeSend: function $beforeSend(mutableFilesystem, param, options) {
69
- var config = param.config, serialiser = param.serialiser, ignorePages = param.ignorePages, pageExtensions = param.pageExtensions;
70
- return _asyncToGenerator(/*#__PURE__*/ regeneratorRuntime.mark(function _callee() {
71
- var pagePaths, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, pagePath, sharedConfigFile, page, baseDir;
72
- return regeneratorRuntime.wrap(function _callee$(_ctx) {
73
- while(1)switch(_ctx.prev = _ctx.next){
74
- case 0:
75
- _ctx.next = 2;
76
- return mutableFilesystem.promises.glob(createFileGlob("**/index", pageExtensions), {
77
- ignore: [
78
- options.filename
79
- ].concat(_toConsumableArray(flatten(ignorePages.map(function(ignore) {
80
- return [
81
- ignore,
82
- "**/".concat(ignore)
83
- ];
84
- })))),
85
- cwd: "/"
86
- });
87
- case 2:
88
- pagePaths = _ctx.sent;
89
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
90
- _ctx.prev = 4;
91
- _iterator = pagePaths[Symbol.iterator]();
92
- case 6:
93
- if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
94
- _ctx.next = 27;
95
- break;
96
- }
97
- pagePath = _step.value;
98
- sharedConfigFile = path.join(path.dirname(String(pagePath)), options.filename);
99
- _ctx.t0 = serialiser;
100
- _ctx.t1 = String(pagePath);
101
- _ctx.next = 13;
102
- return mutableFilesystem.promises.readFile(String(pagePath));
103
- case 13:
104
- _ctx.t2 = _ctx.sent;
105
- _ctx.next = 16;
106
- return _ctx.t0.deserialise.call(_ctx.t0, _ctx.t1, _ctx.t2);
107
- case 16:
108
- page = _ctx.sent;
109
- if (!page.sharedConfig) {
110
- _ctx.next = 23;
111
- break;
112
- }
113
- config.setRef(sharedConfigFile, [
114
- "config",
115
- "$ref"
116
- ], "".concat(String(pagePath), "#/sharedConfig"));
117
- _ctx.next = 21;
118
- return mutableFilesystem.promises.writeFile(sharedConfigFile, "{}");
119
- case 21:
120
- _ctx.next = 24;
121
- break;
122
- case 23:
123
- {
124
- baseDir = path.resolve(path.dirname(String(pagePath)), "../");
125
- config.setAliases(path.join(baseDir, options.filename), [
126
- sharedConfigFile
127
- ]);
128
- }
129
- case 24:
130
- _iteratorNormalCompletion = true;
131
- _ctx.next = 6;
132
- break;
133
- case 27:
134
- _ctx.next = 33;
26
+ */
27
+ const SharedConfigPlugin = {
28
+ async $afterSource(pages, { ignorePages, pageExtensions, config, namespace }) {
29
+ const isNonHiddenPage = createPageTest(ignorePages, pageExtensions);
30
+ let finalSharedConfig;
31
+ const indexPages = pages.filter(page => path.posix.basename(page.fullPath, path.posix.extname(page.fullPath)) === 'index' &&
32
+ isNonHiddenPage(page.fullPath));
33
+ const indexPagesWithSharedConfig = indexPages.filter(page => page.sharedConfig !== undefined);
34
+ if (indexPagesWithSharedConfig.length === 0 && indexPages.length > 0) {
35
+ const rootPath = indexPages[0].fullPath;
36
+ const applyNamespaceSharedConfig = {
37
+ [`${crypto.randomUUID()}`]: {
38
+ paths: indexPages.map(indexPage => indexPage.fullPath),
39
+ rootPath,
40
+ namespace
41
+ }
42
+ };
43
+ config.setData({ applyNamespaceSharedConfig });
44
+ return pages;
45
+ }
46
+ for (const page of indexPagesWithSharedConfig) {
47
+ if (finalSharedConfig === undefined) {
48
+ // first shared config we have found so seed the finalSharedConfig
49
+ finalSharedConfig = page.sharedConfig;
50
+ }
51
+ else {
52
+ for (let i = 1; i < indexPagesWithSharedConfig.length; i++) {
53
+ if (isWithin(indexPagesWithSharedConfig[i].fullPath, page.fullPath)) {
54
+ // found another shared config so merge and apply to the page
55
+ finalSharedConfig = deepmerge(finalSharedConfig, page.sharedConfig);
56
+ page.sharedConfig = finalSharedConfig;
57
+ page.frameOverrides = { $ref: '#/sharedConfig' };
58
+ }
59
+ }
60
+ }
61
+ }
62
+ return pages;
63
+ },
64
+ async $beforeSend(mutableFilesystem, { config, serialiser, ignorePages, pageExtensions }, options) {
65
+ const indexPagePaths = await mutableFilesystem.promises.glob(createFileGlob('**/index', pageExtensions), {
66
+ ignore: [options.filename, ...flatten(ignorePages.map(ignore => [ignore, `**/${ignore}`]))],
67
+ cwd: '/'
68
+ });
69
+ const sharedConfigFiles = [];
70
+ const indexPagesWithoutConfig = [];
71
+ for (const indexPagePath of indexPagePaths) {
72
+ const sharedConfigFile = path.posix.join(path.posix.dirname(String(indexPagePath)), options.filename);
73
+ const page = await serialiser.deserialise(String(indexPagePath), await mutableFilesystem.promises.readFile(String(indexPagePath)));
74
+ if (page.sharedConfig) {
75
+ config.setRef(sharedConfigFile, ['config', '$ref'], `${String(indexPagePath)}#/sharedConfig`);
76
+ await mutableFilesystem.promises.writeFile(sharedConfigFile, '{}');
77
+ sharedConfigFiles.push(sharedConfigFile);
78
+ }
79
+ else {
80
+ indexPagesWithoutConfig.push(page.fullPath);
81
+ }
82
+ }
83
+ // apply closest shared config
84
+ if (sharedConfigFiles.length > 0) {
85
+ let closestSharedConfigIndex = 0;
86
+ for (const pagePath of indexPagesWithoutConfig) {
87
+ for (let i = 0; i < sharedConfigFiles.length; i++) {
88
+ if (isWithin(sharedConfigFiles[i], pagePath)) {
89
+ closestSharedConfigIndex = i;
90
+ }
91
+ }
92
+ const sharedConfigFile = path.posix.join(path.posix.dirname(String(pagePath)), options.filename);
93
+ const closestSharedConfig = path.posix.resolve(path.dirname(String(pagePath)), sharedConfigFiles[closestSharedConfigIndex]);
94
+ config.setAliases(closestSharedConfig, [sharedConfigFile]);
95
+ }
96
+ }
97
+ },
98
+ async afterUpdate(mutableFilesystem, { sharedFilesystem, globalConfig, namespace }, options) {
99
+ const { applyNamespaceSharedConfig } = globalConfig.data;
100
+ if (applyNamespaceSharedConfig === undefined) {
101
+ // there is no source that exists that has told us it needs to share a namespace shared-config
102
+ return;
103
+ }
104
+ // find all the entries that match the namespace the plugin is running against
105
+ const namespaceSharedConfigs = Object.keys(applyNamespaceSharedConfig)
106
+ .filter(key => applyNamespaceSharedConfig[key].namespace === namespace)
107
+ .map(key => applyNamespaceSharedConfig?.[key] || []);
108
+ for (const namespaceSharedConfig of namespaceSharedConfigs) {
109
+ if (await mutableFilesystem.promises.exists(namespaceSharedConfig.rootPath)) {
110
+ // a source does need a namespace shared config but the source running this plugin is the source that needs it
111
+ // so we don't need to do anything here
112
+ continue;
113
+ }
114
+ for (const applyPath of namespaceSharedConfig.paths) {
115
+ if (!(await sharedFilesystem.promises.exists(applyPath))) {
116
+ sharedFilesystem.promises.mkdir(path.posix.dirname(String(applyPath)), {
117
+ recursive: true
118
+ });
119
+ }
120
+ let parentDir = path.posix.join(path.posix.dirname(String(applyPath)), '../');
121
+ let closestSharedConfigPath = path.posix.join(parentDir, options.filename);
122
+ while (parentDir !== path.posix.sep) {
123
+ // walk up the directories in the path to find the closest shared config file
124
+ closestSharedConfigPath = path.posix.join(parentDir, options.filename);
125
+ if (await mutableFilesystem.promises.exists(closestSharedConfigPath)) {
135
126
  break;
136
- case 29:
137
- _ctx.prev = 29;
138
- _ctx.t3 = _ctx["catch"](4);
139
- _didIteratorError = true;
140
- _iteratorError = _ctx.t3;
141
- case 33:
142
- _ctx.prev = 33;
143
- _ctx.prev = 34;
144
- if (!_iteratorNormalCompletion && _iterator.return != null) {
145
- _iterator.return();
146
- }
147
- case 36:
148
- _ctx.prev = 36;
149
- if (!_didIteratorError) {
150
- _ctx.next = 39;
151
- break;
152
- }
153
- throw _iteratorError;
154
- case 39:
155
- return _ctx.finish(36);
156
- case 40:
157
- return _ctx.finish(33);
158
- case 41:
159
- case "end":
160
- return _ctx.stop();
127
+ }
128
+ parentDir = path.posix.join(path.posix.dirname(String(closestSharedConfigPath)), '../');
129
+ }
130
+ const aliasSharedConfigPath = path.posix.join(path.posix.dirname(String(applyPath)), options.filename);
131
+ if ((await mutableFilesystem.promises.exists(closestSharedConfigPath)) &&
132
+ !(await sharedFilesystem.promises.exists(aliasSharedConfigPath))) {
133
+ console.log(`[Mosaic][Plugin] Source has no shared config. Root index page is: ${namespaceSharedConfig.rootPath}`);
134
+ console.log('[Mosaic][Plugin] Copying shared config ', closestSharedConfigPath, '-->', aliasSharedConfigPath);
135
+ await sharedFilesystem.promises.writeFile(aliasSharedConfigPath, await mutableFilesystem.promises.readFile(closestSharedConfigPath));
161
136
  }
162
- }, _callee, null, [
163
- [
164
- 4,
165
- 29,
166
- 33,
167
- 41
168
- ],
169
- [
170
- 34,
171
- ,
172
- 36,
173
- 40
174
- ]
175
- ]);
176
- }))();
137
+ }
138
+ }
177
139
  }
178
140
  };
179
141
  export default SharedConfigPlugin;
180
-
181
142
  //# sourceMappingURL=SharedConfigPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SharedConfigPlugin.ts"],"sourcesContent":["import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';\nimport flatten from 'lodash/flatten';\nimport path from 'path';\n\nfunction createFileGlob(url, pageExtensions) {\n if (pageExtensions.length === 1) {\n return `${url}${pageExtensions[0]}`;\n }\n return `${url}{${pageExtensions.join(',')}}`;\n}\n\ninterface SharedConfigPluginPage extends Page {\n sharedConfig?: string;\n}\n\ninterface SharedConfigPluginOptions {\n filename: string;\n}\n\n/**\n * Plugin that crawls the page hierarchy to find the closest `sharedConfig` from any parent index's page metadata.\n * It then exports a JSON file (name: `options.filename`) into each directory with the merged config for that level\n */\nconst SharedConfigPlugin: PluginType<SharedConfigPluginPage, SharedConfigPluginOptions> = {\n async $beforeSend(\n mutableFilesystem,\n { config, serialiser, ignorePages, pageExtensions },\n options\n ) {\n const pagePaths = await mutableFilesystem.promises.glob(\n createFileGlob('**/index', pageExtensions),\n {\n ignore: [options.filename, ...flatten(ignorePages.map(ignore => [ignore, `**/${ignore}`]))],\n cwd: '/'\n }\n );\n\n for (const pagePath of pagePaths) {\n const sharedConfigFile = path.join(path.dirname(String(pagePath)), options.filename);\n\n const page = await serialiser.deserialise(\n String(pagePath),\n await mutableFilesystem.promises.readFile(String(pagePath))\n );\n if (page.sharedConfig) {\n config.setRef(sharedConfigFile, ['config', '$ref'], `${String(pagePath)}#/sharedConfig`);\n await mutableFilesystem.promises.writeFile(sharedConfigFile, '{}');\n } else {\n const baseDir = path.resolve(path.dirname(String(pagePath)), '../');\n\n config.setAliases(path.join(baseDir, options.filename), [sharedConfigFile]);\n }\n }\n }\n};\n\nexport default SharedConfigPlugin;\n"],"names":["flatten","path","createFileGlob","url","pageExtensions","length","join","SharedConfigPlugin","$beforeSend","mutableFilesystem","options","config","serialiser","ignorePages","pagePaths","pagePath","sharedConfigFile","page","baseDir","promises","glob","ignore","filename","map","cwd","dirname","String","readFile","deserialise","sharedConfig","setRef","writeFile","resolve","setAliases"],"mappings":"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"}
1
+ {"version":3,"file":"SharedConfigPlugin.js","sourceRoot":"","sources":["../src/SharedConfigPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { Plugin as PluginType, Page } from '@jpmorganchase/mosaic-types';
2
+ import { type SortConfig } from '@jpmorganchase/mosaic-schemas';
3
+ interface SidebarPluginConfigData {
4
+ dirs: string[];
5
+ refs: {
6
+ [key: string]: {
7
+ $$path: (number | string)[];
8
+ $$value: string;
9
+ }[];
10
+ };
11
+ }
12
+ export interface SidebarPluginPage extends Page {
13
+ sidebar?: {
14
+ label?: string;
15
+ groupLabel?: string;
16
+ };
17
+ sharedConfig: {
18
+ sidebar: {
19
+ sort: SortConfig;
20
+ };
21
+ };
22
+ }
23
+ interface SidebarPluginOptions {
24
+ /**
25
+ * filename of the sidebar json, linked to each related page via ref
26
+ */
27
+ filename: string;
28
+ /**
29
+ * Glob pattern for matching directories which should be the root of the sidebar
30
+ * * creates a root level sidebar containing all pages underneath root
31
+ * *\/* creates a separate sidebar under each of the root directories
32
+ */
33
+ rootDirGlob: string;
34
+ }
35
+ /**
36
+ * Sorts the pages in a folder by priority and then exports a JSON file with the
37
+ * sidebar tree from that directory downwards and adds sidebar data into frontmatter for each page.
38
+ *
39
+ * Additionally, add to frontmatter
40
+ * navigation -> prev -> { title, route }
41
+ * navigation -> next -> { title, route }
42
+ * to define the previous/next page in the page sequence, as defined by sidebar label and priority
43
+ */
44
+ declare const SidebarPlugin: PluginType<SidebarPluginPage, SidebarPluginOptions, SidebarPluginConfigData>;
45
+ export default SidebarPlugin;