@jpmorganchase/mosaic-plugins 0.1.0-beta.5 → 0.1.0-beta.51
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.
- package/dist/$AliasPlugin.d.ts +10 -0
- package/dist/$AliasPlugin.js +39 -48
- package/dist/$AliasPlugin.js.map +1 -1
- package/dist/$CodeModPlugin.d.ts +7 -0
- package/dist/$CodeModPlugin.js +18 -30
- package/dist/$CodeModPlugin.js.map +1 -1
- package/dist/$RefPlugin.d.ts +31 -0
- package/dist/$RefPlugin.js +130 -127
- package/dist/$RefPlugin.js.map +1 -1
- package/dist/$TagPlugin.d.ts +28 -0
- package/dist/$TagPlugin.js +37 -56
- package/dist/$TagPlugin.js.map +1 -1
- package/dist/BreadcrumbsPlugin.d.ts +19 -0
- package/dist/BreadcrumbsPlugin.js +72 -32
- package/dist/BreadcrumbsPlugin.js.map +1 -1
- package/dist/BrokenLinksPlugin.d.ts +10 -0
- package/dist/BrokenLinksPlugin.js +80 -0
- package/dist/BrokenLinksPlugin.js.map +1 -0
- package/dist/FragmentPlugin.d.ts +7 -0
- package/dist/FragmentPlugin.js +92 -0
- package/dist/FragmentPlugin.js.map +1 -0
- package/dist/LazyPagePlugin.d.ts +14 -0
- package/dist/LazyPagePlugin.js +55 -87
- package/dist/LazyPagePlugin.js.map +1 -1
- package/dist/PagesWithoutFileExtPlugin.d.ts +9 -0
- package/dist/PagesWithoutFileExtPlugin.js +19 -31
- package/dist/PagesWithoutFileExtPlugin.js.map +1 -1
- package/dist/PropsTablePlugin.d.ts +6 -0
- package/dist/PropsTablePlugin.js +88 -0
- package/dist/PropsTablePlugin.js.map +1 -0
- package/dist/PublicAssetsPlugin.d.ts +18 -0
- package/dist/PublicAssetsPlugin.js +28 -0
- package/dist/PublicAssetsPlugin.js.map +1 -0
- package/dist/ReadingTimePlugin.d.ts +10 -0
- package/dist/ReadingTimePlugin.js +23 -0
- package/dist/ReadingTimePlugin.js.map +1 -0
- package/dist/SearchIndexPlugin.d.ts +56 -0
- package/dist/SearchIndexPlugin.js +154 -0
- package/dist/SearchIndexPlugin.js.map +1 -0
- package/dist/SharedConfigPlugin.d.ts +14 -0
- package/dist/SharedConfigPlugin.js +134 -38
- package/dist/SharedConfigPlugin.js.map +1 -1
- package/dist/SidebarPlugin.d.ts +38 -0
- package/dist/SidebarPlugin.js +196 -95
- package/dist/SidebarPlugin.js.map +1 -1
- package/dist/SiteMapPlugin.d.ts +9 -0
- package/dist/SiteMapPlugin.js +20 -36
- package/dist/SiteMapPlugin.js.map +1 -1
- package/dist/TableOfContentsPlugin.d.ts +20 -0
- package/dist/TableOfContentsPlugin.js +43 -0
- package/dist/TableOfContentsPlugin.js.map +1 -0
- package/dist/utils/PluginError.d.ts +7 -0
- package/dist/utils/PluginError.js +13 -0
- package/dist/utils/PluginError.js.map +1 -0
- package/dist/utils/normaliseRefs.d.ts +1 -0
- package/dist/utils/normaliseRefs.js +52 -69
- package/dist/utils/normaliseRefs.js.map +1 -1
- package/package.json +46 -15
- package/CHANGELOG.md +0 -50
- package/dist/NextPrevPagePlugin.js +0 -63
- package/dist/NextPrevPagePlugin.js.map +0 -1
- package/dist/ReadingTimePlugin.mjs +0 -119
- package/dist/ReadingTimePlugin.mjs.map +0 -1
- package/dist/TableOfContentsPlugin.mjs +0 -140
- package/dist/TableOfContentsPlugin.mjs.map +0 -1
package/dist/SidebarPlugin.js
CHANGED
|
@@ -1,109 +1,210 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { cloneDeep } from 'lodash-es';
|
|
3
|
+
function createFileGlob(patterns, pageExtensions) {
|
|
4
|
+
if (Array.isArray(patterns)) {
|
|
5
|
+
return patterns.map(pattern => createFileGlob(pattern, pageExtensions));
|
|
6
|
+
}
|
|
7
|
+
if (pageExtensions.length === 1) {
|
|
8
|
+
return `${patterns}${pageExtensions[0]}`;
|
|
9
|
+
}
|
|
10
|
+
return `${patterns}{${pageExtensions.join(',')}}`;
|
|
11
|
+
}
|
|
12
|
+
function getPageLevel(page) {
|
|
13
|
+
return page.route.split('/').length - 2;
|
|
14
|
+
}
|
|
15
|
+
function sortByPathLevel(pathA, pathB) {
|
|
16
|
+
const pathALevel = pathA.split('/').length;
|
|
17
|
+
const pathBLevel = pathB.split('/').length;
|
|
18
|
+
return pathBLevel - pathALevel;
|
|
19
|
+
}
|
|
16
20
|
/**
|
|
17
|
-
* Sorts the pages in a folder by priority and then exports a JSON file
|
|
21
|
+
* Sorts the pages in a folder by priority and then exports a JSON file with the
|
|
18
22
|
* sidebar tree from that directory downwards and adds sidebar data into frontmatter for each page.
|
|
23
|
+
*
|
|
24
|
+
* Additionally, add to frontmatter
|
|
25
|
+
* navigation -> prev -> { title, route }
|
|
26
|
+
* navigation -> next -> { title, route }
|
|
27
|
+
* to define the previous/next page in the page sequence, as defined by sidebar label and priority
|
|
19
28
|
*/
|
|
20
29
|
const SidebarPlugin = {
|
|
21
|
-
$beforeSend(mutableFilesystem, { config, serialiser, ignorePages, pageExtensions },
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
async $beforeSend(mutableFilesystem, { config, serialiser, ignorePages, pageExtensions }, { filename = 'sidebar.json', rootDirGlob = '*' }) {
|
|
31
|
+
/**
|
|
32
|
+
* Create a list of pages that should be used to build a sidebar.json
|
|
33
|
+
* @param dirName - root path of sidebar
|
|
34
|
+
*/
|
|
35
|
+
async function createPageList(rootDir) {
|
|
36
|
+
const isChildOfRootDir = pagePath => {
|
|
37
|
+
const pageDir = path.dirname(pagePath);
|
|
38
|
+
return pageDir.indexOf(rootDir) === 0;
|
|
39
|
+
};
|
|
40
|
+
const pagePaths = (await mutableFilesystem.promises.glob(createFileGlob(['**'], pageExtensions), {
|
|
41
|
+
cwd: String(rootDir),
|
|
42
|
+
ignore: ignorePages.map(ignore => `**/${ignore}`)
|
|
43
|
+
}));
|
|
44
|
+
const filteredPagePaths = pagePaths.filter(isChildOfRootDir);
|
|
45
|
+
const pageList = await Promise.all(filteredPagePaths.map(async (pagePath) => {
|
|
46
|
+
return mutableFilesystem.promises.readFile(pagePath).then(serializedContent => {
|
|
47
|
+
return serialiser.deserialise(pagePath, serializedContent);
|
|
48
|
+
});
|
|
49
|
+
}));
|
|
50
|
+
return pageList;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Group the pages into parent/child hierachy
|
|
54
|
+
* @param pages - sidebar pages
|
|
55
|
+
*/
|
|
56
|
+
function createGroupMap(pages) {
|
|
57
|
+
return pages.reduce((result, page) => {
|
|
58
|
+
const name = page.sidebar?.label || page.title;
|
|
59
|
+
const priority = page.sidebar?.priority;
|
|
60
|
+
const id = page.route;
|
|
61
|
+
const isGroup = /\/index$/.test(page.route);
|
|
62
|
+
const groupPath = path.posix.dirname(page.fullPath);
|
|
63
|
+
const level = getPageLevel(page);
|
|
64
|
+
const newChildNode = {
|
|
65
|
+
id,
|
|
66
|
+
fullPath: page.fullPath,
|
|
67
|
+
name,
|
|
68
|
+
priority,
|
|
69
|
+
data: { level, link: page.route },
|
|
70
|
+
childNodes: []
|
|
71
|
+
};
|
|
72
|
+
if (isGroup) {
|
|
73
|
+
result[groupPath] = {
|
|
74
|
+
...newChildNode,
|
|
75
|
+
...result[groupPath]
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const childNodes = Object.prototype.hasOwnProperty.call(result, groupPath)
|
|
80
|
+
? result[groupPath].childNodes
|
|
81
|
+
: [];
|
|
82
|
+
result[groupPath] = {
|
|
83
|
+
...result[groupPath],
|
|
84
|
+
childNodes: [...childNodes, newChildNode]
|
|
85
|
+
};
|
|
42
86
|
}
|
|
43
|
-
|
|
87
|
+
return result;
|
|
88
|
+
}, {});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Link the group map to their parents
|
|
92
|
+
* @param groupMap - unlinked groups of pages
|
|
93
|
+
* @param dirName - root path of sidebar
|
|
94
|
+
*/
|
|
95
|
+
function linkGroupMap(groupMap, dirName) {
|
|
96
|
+
const linkedGroupMap = cloneDeep(groupMap);
|
|
97
|
+
const sortedGroupMapKeys = Object.keys(linkedGroupMap).sort(sortByPathLevel);
|
|
98
|
+
sortedGroupMapKeys.forEach(groupPath => {
|
|
99
|
+
let parentGroupPath = path.posix.dirname(groupPath);
|
|
100
|
+
if (linkedGroupMap[parentGroupPath] === undefined) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
linkedGroupMap[parentGroupPath].childNodes = [
|
|
104
|
+
...linkedGroupMap[parentGroupPath].childNodes,
|
|
105
|
+
linkedGroupMap[groupPath]
|
|
106
|
+
];
|
|
107
|
+
});
|
|
108
|
+
return [linkedGroupMap[dirName]];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Link each page to a sidebar.json file via ref
|
|
112
|
+
* @param pages - sidebar pages
|
|
113
|
+
* @param dirName - root path of sidebar
|
|
114
|
+
*/
|
|
115
|
+
function addSidebarDataToFrontmatter(pages, dirName) {
|
|
116
|
+
pages.forEach(page => {
|
|
117
|
+
config.setRef(String(page.fullPath), ['sidebarData', '$ref'], path.posix.join(dirName, filename, '#', 'pages'));
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
const createNavigationRefs = (currPage, prevPage, nextPage) => {
|
|
121
|
+
if (prevPage) {
|
|
122
|
+
config.setRef(currPage, ['navigation', 'prev', 'title', '$ref'], `${prevPage}#/title`);
|
|
123
|
+
config.setRef(currPage, ['navigation', 'prev', 'route', '$ref'], `${prevPage}#/route`);
|
|
44
124
|
}
|
|
45
|
-
|
|
46
|
-
config.setRef(
|
|
47
|
-
|
|
48
|
-
? config.setRef(sidebarFilePath, ['pages', `${i}`, 'name', '$ref'], `${page.fullPath}#/sidebar/label`)
|
|
49
|
-
: config.setRef(sidebarFilePath, ['pages', `${i}`, 'name', '$ref'], `${page.fullPath}#/title`);
|
|
50
|
-
config.setRef(sidebarFilePath, ['pages', `${i}`, 'data', 'link', '$ref'], `${page.fullPath}#/route`);
|
|
125
|
+
if (nextPage) {
|
|
126
|
+
config.setRef(currPage, ['navigation', 'next', 'title', '$ref'], `${nextPage}#/title`);
|
|
127
|
+
config.setRef(currPage, ['navigation', 'next', 'route', '$ref'], `${nextPage}#/route`);
|
|
51
128
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
129
|
+
};
|
|
130
|
+
function addNavigationToFrontmatter(pages) {
|
|
131
|
+
let prevParentPage, nextParentPage;
|
|
132
|
+
const getLastPage = pages => {
|
|
133
|
+
if (pages[pages.length - 1].childNodes?.length) {
|
|
134
|
+
return getLastPage(pages[pages.length - 1].childNodes);
|
|
135
|
+
}
|
|
136
|
+
return pages[pages.length - 1];
|
|
137
|
+
};
|
|
138
|
+
const lastPage = getLastPage(pages);
|
|
139
|
+
const isFirstPage = page => page === pages[0];
|
|
140
|
+
const isLastPage = page => page === lastPage;
|
|
141
|
+
function recursiveAddNavigation(pages) {
|
|
142
|
+
pages.forEach((page, pageIndex) => {
|
|
143
|
+
const { fullPath: currPage } = page;
|
|
144
|
+
let prevPage, nextPage;
|
|
145
|
+
prevPage = prevParentPage;
|
|
146
|
+
prevParentPage = isFirstPage(page) ? undefined : pages[pageIndex].fullPath;
|
|
147
|
+
if (page.childNodes?.length) {
|
|
148
|
+
nextPage = page.childNodes[0].fullPath;
|
|
149
|
+
nextParentPage =
|
|
150
|
+
pageIndex < pages.length - 1 ? pages[pageIndex + 1].fullPath : nextParentPage;
|
|
151
|
+
}
|
|
152
|
+
else if (pageIndex < pages.length - 1) {
|
|
153
|
+
nextPage = pages[pageIndex + 1].fullPath;
|
|
69
154
|
}
|
|
155
|
+
else {
|
|
156
|
+
nextPage = isLastPage(page) ? undefined : nextParentPage;
|
|
157
|
+
}
|
|
158
|
+
if (currPage !== undefined) {
|
|
159
|
+
createNavigationRefs(currPage, prevPage, nextPage);
|
|
160
|
+
}
|
|
161
|
+
recursiveAddNavigation(page.childNodes);
|
|
70
162
|
});
|
|
71
163
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
164
|
+
recursiveAddNavigation(pages);
|
|
165
|
+
}
|
|
166
|
+
const rootUserJourneys = await mutableFilesystem.promises.glob(rootDirGlob, {
|
|
167
|
+
onlyDirectories: true,
|
|
168
|
+
extglob: true,
|
|
169
|
+
cwd: '/'
|
|
79
170
|
});
|
|
171
|
+
const removeExcludedPages = page => !(page.sidebar && page.sidebar.exclude);
|
|
172
|
+
function sortPagesByPriority(sidebarData) {
|
|
173
|
+
const pagesByPriority = sidebarData.map(page => {
|
|
174
|
+
if (page.childNodes?.length > 1) {
|
|
175
|
+
const pagesByPriority = page.childNodes.sort((pageA, pageB) => (pageB.priority ? pageB.priority : -1) - (pageA.priority ? pageA.priority : -1));
|
|
176
|
+
sortPagesByPriority(page.childNodes);
|
|
177
|
+
return { ...page, childNodes: pagesByPriority };
|
|
178
|
+
}
|
|
179
|
+
return page;
|
|
180
|
+
});
|
|
181
|
+
return pagesByPriority;
|
|
182
|
+
}
|
|
183
|
+
function moveRootPageDown(pagesByPriority) {
|
|
184
|
+
const rootPage = pagesByPriority[0];
|
|
185
|
+
const pagesWithRootMovedDown = rootPage.childNodes;
|
|
186
|
+
pagesWithRootMovedDown.unshift(rootPage);
|
|
187
|
+
rootPage.childNodes = [];
|
|
188
|
+
return pagesWithRootMovedDown;
|
|
189
|
+
}
|
|
190
|
+
await Promise.all(rootUserJourneys.map(async (rootDir) => {
|
|
191
|
+
const sidebarFilePath = path.posix.join(String(rootDir), filename);
|
|
192
|
+
const pages = await createPageList(rootDir);
|
|
193
|
+
const includedPages = pages.filter(page => removeExcludedPages(page));
|
|
194
|
+
const groupMap = createGroupMap(includedPages);
|
|
195
|
+
const sidebarData = linkGroupMap(groupMap, rootDir);
|
|
196
|
+
if (sidebarData[0] === undefined) {
|
|
197
|
+
console.warn(`[Mosaic] SidebarPlugin - Unable to create a Sidebar grouping for ${rootDir}`);
|
|
198
|
+
console.log('[Mosaic] SidebarPlugin - likely you have a directory without an index file');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const pagesByPriority = sortPagesByPriority(sidebarData);
|
|
202
|
+
addNavigationToFrontmatter(pagesByPriority);
|
|
203
|
+
const pagesWithRootMovedDown = moveRootPageDown(pagesByPriority);
|
|
204
|
+
await mutableFilesystem.promises.writeFile(sidebarFilePath, JSON.stringify({ pages: pagesWithRootMovedDown }));
|
|
205
|
+
addSidebarDataToFrontmatter(pages, rootDir);
|
|
206
|
+
}));
|
|
80
207
|
}
|
|
81
208
|
};
|
|
82
|
-
|
|
83
|
-
function createFileGlob(patterns, pageExtensions) {
|
|
84
|
-
if (Array.isArray(patterns)) {
|
|
85
|
-
return patterns.map(pattern => createFileGlob(pattern, pageExtensions));
|
|
86
|
-
}
|
|
87
|
-
if (pageExtensions.length === 1) {
|
|
88
|
-
return `${patterns}${pageExtensions[0]}`;
|
|
89
|
-
}
|
|
90
|
-
return `${patterns}{${pageExtensions.join(',')}}`;
|
|
91
|
-
}
|
|
92
|
-
function isSubfolderIndex(page, dirName) {
|
|
93
|
-
return page.fullPath.split('/').length == String(dirName).split('/').length + 2;
|
|
94
|
-
}
|
|
95
|
-
function sortFn(pageA, pageB, dirName) {
|
|
96
|
-
// Always pin /index to the front
|
|
97
|
-
if (pageA.route === dirName + '/index') {
|
|
98
|
-
return -1;
|
|
99
|
-
}
|
|
100
|
-
if (pageB.route === dirName + '/index') {
|
|
101
|
-
return 1;
|
|
102
|
-
}
|
|
103
|
-
return ((pageB.sidebar && pageB.sidebar.priority ? pageB.sidebar.priority : -1) -
|
|
104
|
-
(pageA.sidebar && pageA.sidebar.priority ? pageA.sidebar.priority : -1));
|
|
105
|
-
}
|
|
106
|
-
function filterFn(page) {
|
|
107
|
-
return !(page.sidebar && page.sidebar.exclude);
|
|
108
|
-
}
|
|
209
|
+
export default SidebarPlugin;
|
|
109
210
|
//# sourceMappingURL=SidebarPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarPlugin.js","sourceRoot":"","sources":["../src/SidebarPlugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SidebarPlugin.js","sourceRoot":"","sources":["../src/SidebarPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,SAAS,cAAc,CAAC,QAAQ,EAAE,cAAc;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC3B,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;KACzE;IACD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/B,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C;IACD,OAAO,GAAG,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,IAAI;IACxB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,KAAK,EAAE,KAAK;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,UAAU,GAAG,UAAU,CAAC;AACjC,CAAC;AA0BD;;;;;;;;GAQG;AACH,MAAM,aAAa,GACjB;IACE,KAAK,CAAC,WAAW,CACf,iBAAiB,EACjB,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,EACnD,EAAE,QAAQ,GAAG,cAAc,EAAE,WAAW,GAAG,GAAG,EAAE;QAEhD;;;WAGG;QACH,KAAK,UAAU,cAAc,CAAC,OAAO;YACnC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,EAAE;gBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACvC,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC,CAAC;YACF,MAAM,SAAS,GAAG,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CACtD,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,EACtC;gBACE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;gBACpB,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC;aAClD,CACF,CAAa,CAAC;YACf,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE;gBACrC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBAC5E,OAAO,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CACH,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED;;;WAGG;QACH,SAAS,cAAc,CAAC,KAAK;YAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;gBACtB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,YAAY,GAAG;oBACnB,EAAE;oBACF,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI;oBACJ,QAAQ;oBACR,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;oBACjC,UAAU,EAAE,EAAE;iBACf,CAAC;gBACF,IAAI,OAAO,EAAE;oBACX,MAAM,CAAC,SAAS,CAAC,GAAG;wBAClB,GAAG,YAAY;wBACf,GAAG,MAAM,CAAC,SAAS,CAAC;qBACrB,CAAC;iBACH;qBAAM;oBACL,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;wBACxE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU;wBAC9B,CAAC,CAAC,EAAE,CAAC;oBACP,MAAM,CAAC,SAAS,CAAC,GAAG;wBAClB,GAAG,MAAM,CAAC,SAAS,CAAC;wBACpB,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,YAAY,CAAC;qBAC1C,CAAC;iBACH;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC;QAED;;;;WAIG;QACH,SAAS,YAAY,CAAC,QAAQ,EAAE,OAAO;YACrC,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7E,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBACrC,IAAI,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACpD,IAAI,cAAc,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE;oBACjD,OAAO;iBACR;gBACD,cAAc,CAAC,eAAe,CAAC,CAAC,UAAU,GAAG;oBAC3C,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC,UAAU;oBAC7C,cAAc,CAAC,SAAS,CAAC;iBAC1B,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,CAAC;QAED;;;;WAIG;QACH,SAAS,2BAA2B,CAAC,KAAK,EAAE,OAAO;YACjD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EACrB,CAAC,aAAa,EAAE,MAAM,CAAC,EACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CACjD,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAC5D,IAAI,QAAQ,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,QAAQ,SAAS,CAAC,CAAC;gBACvF,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,QAAQ,SAAS,CAAC,CAAC;aACxF;YACD,IAAI,QAAQ,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,QAAQ,SAAS,CAAC,CAAC;gBACvF,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,QAAQ,SAAS,CAAC,CAAC;aACxF;QACH,CAAC,CAAC;QAEF,SAAS,0BAA0B,CAAC,KAAK;YACvC,IAAI,cAAc,EAAE,cAAc,CAAC;YAEnC,MAAM,WAAW,GAAG,KAAK,CAAC,EAAE;gBAC1B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE;oBAC9C,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;iBACxD;gBACD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC;YAE7C,SAAS,sBAAsB,CAAC,KAAK;gBACnC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;oBAChC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;oBACpC,IAAI,QAAQ,EAAE,QAAQ,CAAC;oBACvB,QAAQ,GAAG,cAAc,CAAC;oBAC1B,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;oBAC3E,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;wBAC3B,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;wBACvC,cAAc;4BACZ,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC;qBACjF;yBAAM,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBACvC,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;qBAC1C;yBAAM;wBACL,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;qBAC1D;oBACD,IAAI,QAAQ,KAAK,SAAS,EAAE;wBAC1B,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;qBACpD;oBACD,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACL,CAAC;YACD,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;YAC1E,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,GAAG;SACT,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5E,SAAS,mBAAmB,CAAC,WAAW;YACtC,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC7C,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;oBAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAC1C,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAClF,CAAC;oBACF,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACrC,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;iBACjD;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,SAAS,gBAAgB,CAAC,eAAe;YACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,UAAU,CAAC;YACnD,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;YACzB,OAAO,sBAAsB,CAAC;QAChC,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CACf,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;YACnC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;YAE/C,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;gBAChC,OAAO,CAAC,IAAI,CACV,oEAAoE,OAAO,EAAE,CAC9E,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,4EAA4E,CAC7E,CAAC;gBACF,OAAO;aACR;YACD,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACzD,0BAA0B,CAAC,eAAe,CAAC,CAAC;YAC5C,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;YACjE,MAAM,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CACxC,eAAe,EACf,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAClD,CAAC;YACF,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAC;AACJ,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';
|
|
2
|
+
interface SiteMapPluginConfigData {
|
|
3
|
+
sitemaps: Array<string[]>;
|
|
4
|
+
}
|
|
5
|
+
interface SiteMapPluginOptions {
|
|
6
|
+
siteUrl: string;
|
|
7
|
+
}
|
|
8
|
+
declare const SiteMapPlugin: PluginType<Page, SiteMapPluginOptions, SiteMapPluginConfigData, SiteMapPluginConfigData>;
|
|
9
|
+
export default SiteMapPlugin;
|
package/dist/SiteMapPlugin.js
CHANGED
|
@@ -1,44 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
import path from 'path';
|
|
12
2
|
const SiteMapPlugin = {
|
|
13
3
|
// Merge together all of the individual sitemaps from each source
|
|
14
|
-
afterUpdate(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
.join('\n'))
|
|
24
|
-
.join('') +
|
|
25
|
-
'\n</urlset>');
|
|
26
|
-
});
|
|
4
|
+
async afterUpdate(_, { sharedFilesystem, globalConfig }, { siteUrl }) {
|
|
5
|
+
if (!Array.isArray(globalConfig.data.sitemaps)) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const urls = globalConfig.data.sitemaps.map(items => items
|
|
9
|
+
.map(item => `\t<url>\n\t\t<loc>${new URL(path.posix.join(path.posix.dirname(item), path.posix.basename(item, path.posix.extname(item))), siteUrl)}</loc>\n\t\t<changefreq>weekly</changefreq>\n\t\t<priority>0.5</priority>\n\t</url>`)
|
|
10
|
+
.join('\n'));
|
|
11
|
+
const urlSet = `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n ${urls}\n\n</urlset>`;
|
|
12
|
+
await sharedFilesystem.promises.writeFile('/sitemap.xml', urlSet);
|
|
27
13
|
},
|
|
28
14
|
// Store a sitemap for just this source
|
|
29
|
-
$beforeSend(mutableFilesystem, { config, ignorePages }
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
]
|
|
39
|
-
});
|
|
15
|
+
async $beforeSend(mutableFilesystem, { config, ignorePages }) {
|
|
16
|
+
config.setData({
|
|
17
|
+
sitemaps: [
|
|
18
|
+
(await mutableFilesystem.promises.glob('**', {
|
|
19
|
+
onlyFiles: true,
|
|
20
|
+
ignore: ignorePages.map(ignore => `**/${ignore}`),
|
|
21
|
+
cwd: '/'
|
|
22
|
+
}))
|
|
23
|
+
]
|
|
40
24
|
});
|
|
41
25
|
}
|
|
42
26
|
};
|
|
43
|
-
|
|
27
|
+
export default SiteMapPlugin;
|
|
44
28
|
//# sourceMappingURL=SiteMapPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SiteMapPlugin.js","sourceRoot":"","sources":["../src/SiteMapPlugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SiteMapPlugin.js","sourceRoot":"","sources":["../src/SiteMapPlugin.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAUxB,MAAM,aAAa,GAKf;IACF,iEAAiE;IACjE,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC9C,OAAO;SACR;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAClD,KAAK;aACF,GAAG,CACF,IAAI,CAAC,EAAE,CACL,qBAAqB,IAAI,GAAG,CAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACpD,EACD,OAAO,CACR,qFAAqF,CACzF;aACA,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;QAEF,MAAM,MAAM,GAAG,kEAAkE,IAAI,eAAe,CAAC;QACrG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IACD,uCAAuC;IACvC,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QAC1D,MAAM,CAAC,OAAO,CAAC;YACb,QAAQ,EAAE;gBACR,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;oBAC3C,SAAS,EAAE,IAAI;oBACf,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC;oBACjD,GAAG,EAAE,GAAG;iBACT,CAAC,CAAkB;aACrB;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';
|
|
2
|
+
import type { Heading as MarkdownHeading } from 'mdast';
|
|
3
|
+
declare type TOCItem = {
|
|
4
|
+
level: number;
|
|
5
|
+
id: string;
|
|
6
|
+
text: string;
|
|
7
|
+
};
|
|
8
|
+
interface TableOfContentsPluginPage extends Page {
|
|
9
|
+
tableOfContents?: TOCItem[];
|
|
10
|
+
}
|
|
11
|
+
declare type Rank = MarkdownHeading['depth'];
|
|
12
|
+
interface TableOfContentsPluginOptions {
|
|
13
|
+
minRank: Rank;
|
|
14
|
+
maxRank: Rank;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Calculates table of contents from page headings
|
|
18
|
+
*/
|
|
19
|
+
declare const TableOfContentsPlugin: PluginType<TableOfContentsPluginPage, TableOfContentsPluginOptions>;
|
|
20
|
+
export default TableOfContentsPlugin;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import Slugger from 'github-slugger';
|
|
2
|
+
import remarkParse from 'remark-parse';
|
|
3
|
+
import { unified } from 'unified';
|
|
4
|
+
import remarkStringify from 'remark-stringify';
|
|
5
|
+
import remarkHeadings from '@vcarl/remark-headings';
|
|
6
|
+
const getValue = (path, obj) => path.split('.').reduce((acc, c) => acc && acc[c], obj);
|
|
7
|
+
const parsePageHeading = (page, heading) => {
|
|
8
|
+
let parsedHeading = heading.trim();
|
|
9
|
+
if (parsedHeading.indexOf('{meta') === 0) {
|
|
10
|
+
const metaPath = parsedHeading.replace(/^{meta\./, '').replace(/\}$/, '');
|
|
11
|
+
parsedHeading = getValue(metaPath, page).trim();
|
|
12
|
+
}
|
|
13
|
+
return parsedHeading;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Calculates table of contents from page headings
|
|
17
|
+
*/
|
|
18
|
+
const TableOfContentsPlugin = {
|
|
19
|
+
async $afterSource(pages, _, { minRank, maxRank }) {
|
|
20
|
+
const processor = unified().use(remarkParse).use(remarkStringify).use(remarkHeadings);
|
|
21
|
+
for (const page of pages) {
|
|
22
|
+
const slugger = new Slugger();
|
|
23
|
+
if (page.content) {
|
|
24
|
+
const vfile = await processor.process(page.content);
|
|
25
|
+
const headings = vfile.data.headings;
|
|
26
|
+
const items = headings
|
|
27
|
+
.filter(heading => heading.depth >= minRank && heading.depth <= maxRank)
|
|
28
|
+
.map(validHeading => {
|
|
29
|
+
const text = parsePageHeading(page, validHeading.value);
|
|
30
|
+
return {
|
|
31
|
+
level: validHeading.depth,
|
|
32
|
+
id: slugger.slug(text),
|
|
33
|
+
text
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
page.tableOfContents = items;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return pages;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
export default TableOfContentsPlugin;
|
|
43
|
+
//# sourceMappingURL=TableOfContentsPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableOfContentsPlugin.js","sourceRoot":"","sources":["../src/TableOfContentsPlugin.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,cAAc,MAAM,wBAAwB,CAAC;AAcpD,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvF,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;IACzC,IAAI,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1E,aAAa,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;KACjD;IACD,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAAwE;IACjG,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;QAC/C,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACtF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAA8C,CAAC;gBAC3E,MAAM,KAAK,GAAc,QAAQ;qBAC9B,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC;qBACvE,GAAG,CAAC,YAAY,CAAC,EAAE;oBAClB,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBACxD,OAAO;wBACL,KAAK,EAAE,YAAY,CAAC,KAAK;wBACzB,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;wBACtB,IAAI;qBACL,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACL,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;aAC9B;SACF;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default class PluginError extends Error {
|
|
2
|
+
fullPath;
|
|
3
|
+
lifecycleMethod;
|
|
4
|
+
pluginModulePath;
|
|
5
|
+
pluginName;
|
|
6
|
+
constructor(message, fullPath) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'PluginError';
|
|
9
|
+
this.fullPath = fullPath;
|
|
10
|
+
Object.setPrototypeOf(this, PluginError.prototype);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=PluginError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginError.js","sourceRoot":"","sources":["../../src/utils/PluginError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,KAAK;IAC5C,QAAQ,CAAS;IACjB,eAAe,CAAS;IACxB,gBAAgB,CAAS;IACzB,UAAU,CAAS;IACnB,YAAY,OAAe,EAAE,QAAiB;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function normaliseRefs(filepath: any, refs: any, filesystem: any, pageExtensions: any, ignorePages: any): Promise<{}>;
|