@jpmorganchase/mosaic-plugins 0.1.0-beta.3 → 0.1.0-beta.30

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 (69) hide show
  1. package/dist/$AliasPlugin.d.ts +10 -0
  2. package/dist/$AliasPlugin.js +55 -0
  3. package/dist/$AliasPlugin.js.map +1 -0
  4. package/dist/$CodeModPlugin.d.ts +7 -0
  5. package/dist/$CodeModPlugin.js +24 -0
  6. package/dist/$CodeModPlugin.js.map +1 -0
  7. package/dist/$RefPlugin.d.ts +31 -0
  8. package/dist/$RefPlugin.js +119 -0
  9. package/dist/$RefPlugin.js.map +1 -0
  10. package/dist/$TagPlugin.d.ts +28 -0
  11. package/dist/$TagPlugin.js +65 -0
  12. package/dist/$TagPlugin.js.map +1 -0
  13. package/dist/BreadcrumbsPlugin.d.ts +18 -0
  14. package/dist/BreadcrumbsPlugin.js +38 -0
  15. package/dist/BreadcrumbsPlugin.js.map +1 -0
  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/LazyPagePlugin.d.ts +14 -0
  20. package/dist/LazyPagePlugin.js +63 -0
  21. package/dist/LazyPagePlugin.js.map +1 -0
  22. package/dist/LocalFolderSavePlugin.d.ts +6 -0
  23. package/dist/LocalFolderSavePlugin.js +21 -0
  24. package/dist/LocalFolderSavePlugin.js.map +1 -0
  25. package/dist/PagesWithoutFileExtPlugin.d.ts +9 -0
  26. package/dist/PagesWithoutFileExtPlugin.js +29 -0
  27. package/dist/PagesWithoutFileExtPlugin.js.map +1 -0
  28. package/dist/PublicAssetsPlugin.d.ts +18 -0
  29. package/dist/PublicAssetsPlugin.js +28 -0
  30. package/dist/PublicAssetsPlugin.js.map +1 -0
  31. package/dist/ReadingTimePlugin.d.ts +10 -0
  32. package/dist/ReadingTimePlugin.js +23 -0
  33. package/dist/ReadingTimePlugin.js.map +1 -0
  34. package/dist/SearchIndexPlugin.d.ts +56 -0
  35. package/dist/SearchIndexPlugin.js +152 -0
  36. package/dist/SearchIndexPlugin.js.map +1 -0
  37. package/dist/SharedConfigPlugin.d.ts +13 -0
  38. package/dist/SharedConfigPlugin.js +34 -0
  39. package/dist/SharedConfigPlugin.js.map +1 -0
  40. package/dist/SidebarPlugin.d.ts +38 -0
  41. package/dist/SidebarPlugin.js +207 -0
  42. package/dist/SidebarPlugin.js.map +1 -0
  43. package/dist/SiteMapPlugin.d.ts +6 -0
  44. package/dist/SiteMapPlugin.js +27 -0
  45. package/dist/SiteMapPlugin.js.map +1 -0
  46. package/dist/TableOfContentsPlugin.d.ts +20 -0
  47. package/dist/TableOfContentsPlugin.js +43 -0
  48. package/dist/TableOfContentsPlugin.js.map +1 -0
  49. package/dist/utils/normaliseRefs.d.ts +1 -0
  50. package/dist/utils/normaliseRefs.js +66 -0
  51. package/dist/utils/normaliseRefs.js.map +1 -0
  52. package/package.json +41 -15
  53. package/.turbo/turbo-build.log +0 -14
  54. package/CHANGELOG.md +0 -34
  55. package/src/$AliasPlugin.ts +0 -62
  56. package/src/$CodeModPlugin.ts +0 -34
  57. package/src/$RefPlugin.ts +0 -200
  58. package/src/$TagPlugin.ts +0 -99
  59. package/src/BreadcrumbsPlugin.ts +0 -43
  60. package/src/LazyPagePlugin.ts +0 -101
  61. package/src/NextPrevPagePlugin.ts +0 -80
  62. package/src/PagesWithoutFileExtPlugin.ts +0 -38
  63. package/src/ReadingTimePlugin.mjs.ts +0 -32
  64. package/src/SharedConfigPlugin.ts +0 -49
  65. package/src/SidebarPlugin.ts +0 -154
  66. package/src/SiteMapPlugin.ts +0 -44
  67. package/src/TableOfContentsPlugin.mjs.ts +0 -52
  68. package/src/utils/normaliseRefs.ts +0 -85
  69. package/tsconfig.json +0 -21
@@ -0,0 +1,207 @@
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
+ }
20
+ /**
21
+ * Sorts the pages in a folder by priority and then exports a JSON file with the
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
28
+ */
29
+ const SidebarPlugin = {
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
+ };
86
+ }
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`);
124
+ }
125
+ if (nextPage) {
126
+ config.setRef(currPage, ['navigation', 'next', 'title', '$ref'], `${nextPage}#/title`);
127
+ config.setRef(currPage, ['navigation', 'next', 'route', '$ref'], `${nextPage}#/route`);
128
+ }
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;
154
+ }
155
+ else {
156
+ nextPage = isLastPage(page) ? undefined : nextParentPage;
157
+ }
158
+ if (currPage !== undefined) {
159
+ createNavigationRefs(currPage, prevPage, nextPage);
160
+ }
161
+ recursiveAddNavigation(page.childNodes);
162
+ });
163
+ }
164
+ recursiveAddNavigation(pages);
165
+ }
166
+ const rootUserJourneys = await mutableFilesystem.promises.glob(rootDirGlob, {
167
+ onlyDirectories: true,
168
+ extglob: true,
169
+ cwd: '/'
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
+ else {
180
+ return page;
181
+ }
182
+ });
183
+ return pagesByPriority;
184
+ }
185
+ function moveRootPageDown(pagesByPriority) {
186
+ const rootPage = pagesByPriority[0];
187
+ const pagesWithRootMovedDown = rootPage.childNodes;
188
+ pagesWithRootMovedDown.unshift(rootPage);
189
+ rootPage.childNodes = [];
190
+ return pagesWithRootMovedDown;
191
+ }
192
+ await Promise.all(rootUserJourneys.map(async (rootDir) => {
193
+ const sidebarFilePath = path.posix.join(String(rootDir), filename);
194
+ let pages = await createPageList(rootDir);
195
+ pages = pages.filter(page => removeExcludedPages(page));
196
+ const groupMap = createGroupMap(pages);
197
+ const sidebarData = linkGroupMap(groupMap, rootDir);
198
+ const pagesByPriority = sortPagesByPriority(sidebarData);
199
+ addNavigationToFrontmatter(pagesByPriority);
200
+ const pagesWithRootMovedDown = moveRootPageDown(pagesByPriority);
201
+ await mutableFilesystem.promises.writeFile(sidebarFilePath, JSON.stringify({ pages: pagesWithRootMovedDown }));
202
+ addSidebarDataToFrontmatter(pages, rootDir);
203
+ }));
204
+ }
205
+ };
206
+ export default SidebarPlugin;
207
+ //# sourceMappingURL=SidebarPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarPlugin.js","sourceRoot":"","sources":["../src/SidebarPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';
2
+ interface SiteMapPluginConfigData {
3
+ sitemaps: Array<string[]>;
4
+ }
5
+ declare const SiteMapPlugin: PluginType<Page, unknown, SiteMapPluginConfigData, SiteMapPluginConfigData>;
6
+ export default SiteMapPlugin;
@@ -0,0 +1,27 @@
1
+ const SiteMapPlugin = {
2
+ // Merge together all of the individual sitemaps from each source
3
+ async afterUpdate(_, { sharedFilesystem, globalConfig }) {
4
+ if (!Array.isArray(globalConfig.data.sitemaps)) {
5
+ return;
6
+ }
7
+ const urls = globalConfig.data.sitemaps.map(items => items
8
+ .map(item => `\t<url>\n\t\t<loc>${String(item)}</loc>\n\t\t<changefreq>weekly</changefreq>\n\t\t<priority>0.5</priority>\n\t</url>`)
9
+ .join('\n'));
10
+ const urlSet = `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n ${urls}\n\n</urlset>`;
11
+ await sharedFilesystem.promises.writeFile('/sitemap.xml', urlSet);
12
+ },
13
+ // Store a sitemap for just this source
14
+ async $beforeSend(mutableFilesystem, { config, ignorePages }) {
15
+ config.setData({
16
+ sitemaps: [
17
+ (await mutableFilesystem.promises.glob('**', {
18
+ onlyFiles: true,
19
+ ignore: ignorePages.map(ignore => `**/${ignore}`),
20
+ cwd: '/'
21
+ }))
22
+ ]
23
+ });
24
+ }
25
+ };
26
+ export default SiteMapPlugin;
27
+ //# sourceMappingURL=SiteMapPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SiteMapPlugin.js","sourceRoot":"","sources":["../src/SiteMapPlugin.ts"],"names":[],"mappings":"AAMA,MAAM,aAAa,GAAgF;IACjG,iEAAiE;IACjE,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE;QACrD,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,MAAM,CACzB,IAAI,CACL,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 @@
1
+ export default function normaliseRefs(filepath: any, refs: any, filesystem: any, pageExtensions: any, ignorePages: any): Promise<{}>;
@@ -0,0 +1,66 @@
1
+ import path from 'path';
2
+ import glob from 'fast-glob';
3
+ import { set } from 'lodash-es';
4
+ function createFileGlob(url, pageExtensions) {
5
+ if (pageExtensions.length === 1) {
6
+ return `${url}${pageExtensions[0]}`;
7
+ }
8
+ return `${url}{${pageExtensions.join(',')}}`;
9
+ }
10
+ export default async function normaliseRefs(filepath, refs, filesystem, pageExtensions, ignorePages) {
11
+ const configWithoutGlobs = {};
12
+ for (let i = 0; i < refs.length; i++) {
13
+ const ref = refs[i];
14
+ const [url, fragment = ''] = ref.$$value.split('#');
15
+ if (!url) {
16
+ continue;
17
+ }
18
+ const fullUrl = path.resolve(path.dirname(filepath), url);
19
+ if (!glob.isDynamicPattern(url)) {
20
+ if (!(await filesystem.promises.exists(fullUrl))) {
21
+ throw new Error(`A \`$ref\` for '${filepath}' pointed to page '${fullUrl}' - which could not be found.`);
22
+ }
23
+ const refRealPath = await filesystem.promises.realpath(fullUrl
24
+ //path.resolve(path.dirname(filepath), url)
25
+ );
26
+ const stat = await filesystem.promises.stat(refRealPath);
27
+ // Turn directory refs into full index paths
28
+ // TODO: But DO we want to do this?
29
+ if (stat.isDirectory()) {
30
+ // && !/\/index(\.\w{1,4})?$/.test(url)) {
31
+ set(configWithoutGlobs, ref.$$path.slice(0, -1), {
32
+ $ref: `${await filesystem.promises.realpath(path.join(refRealPath, 'index'))}#${fragment}`
33
+ });
34
+ }
35
+ else {
36
+ set(configWithoutGlobs, ref.$$path.slice(0, -1), {
37
+ $ref: `${refRealPath}#${fragment}`
38
+ });
39
+ }
40
+ continue;
41
+ }
42
+ try {
43
+ let globResolvedRefs =
44
+ // If the pattern doesn't have an explicit file extension - then we'll make it just return pages
45
+ await filesystem.promises.glob(!/\/[^/]+\.\w{2,4}$/.test(url) ? createFileGlob(url, pageExtensions) : url, {
46
+ ignore: [filepath, ...ignorePages.map(ignore => `**/${ignore}`)],
47
+ cwd: path.dirname(filepath),
48
+ absolute: true
49
+ });
50
+ // Use a set so we de-dupe any symlinks that point to the same page
51
+ const resolvedRefs = new Set();
52
+ for (const value of globResolvedRefs) {
53
+ const refRealPath = await filesystem.promises.realpath(path.resolve(filepath, value));
54
+ if (refRealPath !== (await filesystem.promises.realpath(filepath))) {
55
+ resolvedRefs.add(`${refRealPath}#${fragment}`);
56
+ }
57
+ }
58
+ set(configWithoutGlobs, ref.$$path.slice(0, -1), Array.from(resolvedRefs).map($ref => ({ $ref })));
59
+ }
60
+ catch (e) {
61
+ throw e;
62
+ }
63
+ }
64
+ return configWithoutGlobs;
65
+ }
66
+ //# sourceMappingURL=normaliseRefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normaliseRefs.js","sourceRoot":"","sources":["../../src/utils/normaliseRefs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,SAAS,cAAc,CAAC,GAAG,EAAE,cAAc;IACzC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/B,OAAO,GAAG,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;KACrC;IACD,OAAO,GAAG,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,aAAa,CACzC,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,cAAc,EACd,WAAW;IAEX,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,CAAC,GAAG,EAAE;YACR,SAAS;SACV;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;gBAChD,MAAM,IAAI,KAAK,CACb,mBAAmB,QAAQ,sBAAsB,OAAO,+BAA+B,CACxF,CAAC;aACH;YACD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,CACpD,OAAO;YACP,2CAA2C;aAC5C,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzD,4CAA4C;YAC5C,mCAAmC;YACnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;gBACtB,0CAA0C;gBAC1C,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;oBAC/C,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,QAAQ,EAAE;iBAC3F,CAAC,CAAC;aACJ;iBAAM;gBACL,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;oBAC/C,IAAI,EAAE,GAAG,WAAW,IAAI,QAAQ,EAAE;iBACnC,CAAC,CAAC;aACJ;YACD,SAAS;SACV;QAED,IAAI;YACF,IAAI,gBAAgB;YAClB,gGAAgG;YAChG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAC5B,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,EAC1E;gBACE,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;gBAChE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC3B,QAAQ,EAAE,IAAI;aACf,CACF,CAAC;YAEJ,mEAAmE;YACnE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;YAE/B,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE;gBACpC,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtF,IAAI,WAAW,KAAK,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE;oBAClE,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,QAAQ,EAAE,CAAC,CAAC;iBAChD;aACF;YAED,GAAG,CACD,kBAAkB,EAClB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACvB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CACjD,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,CAAC;SACT;KACF;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
package/package.json CHANGED
@@ -1,35 +1,61 @@
1
1
  {
2
2
  "name": "@jpmorganchase/mosaic-plugins",
3
- "version": "0.1.0-beta.3",
3
+ "version": "0.1.0-beta.30",
4
4
  "author": "",
5
- "description": "",
5
+ "description": "Mosaic plugins for core file system",
6
6
  "license": "Apache-2.0",
7
- "main": "./dist/index.js",
7
+ "type": "module",
8
+ "exports": {
9
+ "./*": {
10
+ "types": "./dist/*.d.ts",
11
+ "import": "./dist/*.js",
12
+ "node": "./dist/*.js"
13
+ }
14
+ },
8
15
  "engines": {
9
- "node": ">= 12.0.0"
16
+ "node": ">=16.10.0 || >=18.0.0"
10
17
  },
18
+ "files": [
19
+ "dist"
20
+ ],
11
21
  "scripts": {
12
- "build": "yarn clean && tsc && swc ./src/*.mjs.ts -d ./dist -C module.type=es6 -C sourceMaps=true && renamer --find '.mjs.js' --replace '.mjs' './dist/*.mjs.js' && renamer --find '.mjs.js.map' --replace '.mjs.map' './dist/*.mjs.js.map'",
13
- "clean": "rm -fr dist"
22
+ "build": "tsc",
23
+ "clean": "rm -fr dist",
24
+ "lint": "eslint --ignore-pattern \"**/__tests__/**\""
14
25
  },
15
26
  "repository": {
16
27
  "type": "git",
17
- "url": "git@github.com:jpmorganchase/mosaic.git"
28
+ "url": "git@github.com:jpmorganchase/mosaic.git",
29
+ "directory": "packages/plugins"
18
30
  },
19
31
  "devDependencies": {
20
- "@swc/cli": "^0.1.55",
21
- "@swc/core": "^1.2.237",
22
- "renamer": "^4.0.0"
32
+ "@types/fs-extra": "^9.0.13"
23
33
  },
24
34
  "dependencies": {
25
35
  "@apidevtools/json-schema-ref-parser": "^9.0.9",
26
- "@jpmorganchase/mosaic-types": "^0.1.0-beta.3",
36
+ "@jpmorganchase/mosaic-schemas": "^0.1.0-beta.30",
37
+ "@jpmorganchase/mosaic-serialisers": "^0.1.0-beta.30",
38
+ "@jpmorganchase/mosaic-source-git-repo": "^0.1.0-beta.30",
39
+ "@jpmorganchase/mosaic-source-local-folder": "^0.1.0-beta.30",
40
+ "@jpmorganchase/mosaic-types": "^0.1.0-beta.30",
27
41
  "@types/github-slugger": "^1.3.0",
42
+ "@vcarl/remark-headings": "^0.1.0",
43
+ "check-links": "^2.0.0",
44
+ "fs-extra": "^10.1.0",
28
45
  "github-slugger": "^1.4.0",
29
- "hast-util-to-string": "^2.0.0",
30
- "lodash": "^4.17.21",
31
- "memfs": "^3.3.0",
46
+ "https-proxy-agent": "^5.0.1",
47
+ "lodash-es": "^4.17.21",
48
+ "memfs": "^3.4.12",
49
+ "react-pro-sidebar": "^1.0.0",
32
50
  "reading-time": "^1.5.0",
33
- "rxjs": "^7.5.5"
51
+ "remark": "^14.0.2",
52
+ "remark-mdx": "^2.1.5",
53
+ "remark-parse": "^10.0.1",
54
+ "remark-stringify": "^10.0.2",
55
+ "rxjs": "^7.5.5",
56
+ "unified": "^10.1.2",
57
+ "unist-util-visit": "^4.1.1",
58
+ "uuid": "^7.0.3",
59
+ "vfile-reporter": "^7.0.5"
34
60
  }
35
61
  }
@@ -1,14 +0,0 @@
1
- @jpmorganchase/mosaic-plugins:build: cache hit, replaying output 1ab365469776992b
2
- @jpmorganchase/mosaic-plugins:build: $ yarn clean && tsc && swc ./src/*.mjs.ts -d ./dist -C module.type=es6 -C sourceMaps=true && renamer --find '.mjs.js' --replace '.mjs' './dist/*.mjs.js' && renamer --find '.mjs.js.map' --replace '.mjs.map' './dist/*.mjs.js.map'
3
- @jpmorganchase/mosaic-plugins:build: $ rm -fr dist
4
- @jpmorganchase/mosaic-plugins:build: Successfully compiled: 2 files with swc (30.78ms)
5
- @jpmorganchase/mosaic-plugins:build: ✔︎ ./dist/ReadingTimePlugin.mjs.js → dist/ReadingTimePlugin.mjs
6
- @jpmorganchase/mosaic-plugins:build: ✔︎ ./dist/TableOfContentsPlugin.mjs.js → dist/TableOfContentsPlugin.mjs
7
- @jpmorganchase/mosaic-plugins:build:
8
- @jpmorganchase/mosaic-plugins:build: Rename complete: 2 of 2 files renamed.
9
- @jpmorganchase/mosaic-plugins:build:
10
- @jpmorganchase/mosaic-plugins:build: ✔︎ ./dist/ReadingTimePlugin.mjs.js.map → dist/ReadingTimePlugin.mjs.map
11
- @jpmorganchase/mosaic-plugins:build: ✔︎ ./dist/TableOfContentsPlugin.mjs.js.map → dist/TableOfContentsPlugin.mjs.map
12
- @jpmorganchase/mosaic-plugins:build:
13
- @jpmorganchase/mosaic-plugins:build: Rename complete: 2 of 2 files renamed.
14
- @jpmorganchase/mosaic-plugins:build:
package/CHANGELOG.md DELETED
@@ -1,34 +0,0 @@
1
- # @jpmorganchase/mosaic-plugins
2
-
3
- ## 0.1.0-beta.3
4
-
5
- ### Patch Changes
6
-
7
- - 457df5e: switch to public package
8
- - Updated dependencies [457df5e]
9
- - @jpmorganchase/mosaic-types@0.1.0-beta.3
10
-
11
- ## 0.1.0-beta.2
12
-
13
- ### Patch Changes
14
-
15
- - e1bbbe7: Initial release of Mosaic Core file-system.
16
-
17
- Mosaic is a content aggregating service which pulls content from heterogeneous data sources.
18
-
19
- - 4b2bc51: pipped to 0.1.0-beta.1 for publishing to NPM
20
- - Updated dependencies [e1bbbe7]
21
- - Updated dependencies [4b2bc51]
22
- - @jpmorganchase/mosaic-types@0.1.0-beta.2
23
-
24
- ## 0.1.0
25
-
26
- ### Patch Changes
27
-
28
- - e1bbbe7: Initial release of Mosaic Core file-system.
29
-
30
- Mosaic is a content aggregating service which pulls content from heterogeneous data sources.
31
-
32
- - Updated dependencies [e1bbbe7]
33
- - Updated dependencies [bbc853c]
34
- - @jpmorganchase/mosaic-types@0.1.0
@@ -1,62 +0,0 @@
1
- import path from 'path';
2
-
3
- import type Page from '@jpmorganchase/mosaic-types/dist/Page';
4
- import type PluginType from '@jpmorganchase/mosaic-types/dist/Plugin';
5
- import { escapeRegExp } from 'lodash';
6
-
7
- /**
8
- * Plugin that scrapes `aliases` from page metadata and also applies all aliases stored in `config.data.aliases`
9
- * Other plugins can use `setAliases` to apply new aliases, as long as they call it before this plugin has reaches `$beforeSend`
10
- */
11
- const $AliasPlugin: PluginType<{ aliases: { [key: string]: Set<string> } }> = {
12
- async $afterSource(pages: Page<{ aliases?: string[] }>[], { config, ignorePages, pageExtensions }, options) {
13
- const isNonHiddenPage = createPageTest(ignorePages, pageExtensions);
14
-
15
- // Group together all aliases defined in the frontmatter and store them in the alias config object
16
- for (const page of pages) {
17
- if (!isNonHiddenPage(page.fullPath)) {
18
- continue;
19
- }
20
- if (page.aliases) {
21
- config.setAliases(page.fullPath, page.aliases);
22
- }
23
- delete page.aliases;
24
- }
25
- return pages;
26
- },
27
-
28
- async $beforeSend(mutableFilesystem, { config }) {
29
- // Prevent any more aliases being set after this lifecycle has been called - as they won't take effect
30
- config.setAliases = () => {
31
- throw new Error('Cannot set aliases after `$AliasPlugin` has reached `$beforeSend` lifecycle phase.');
32
- }; if (!config.data.aliases) {
33
- return;
34
- }
35
- for (const fullPath in config.data.aliases) {
36
- for (const alias of config.data.aliases[fullPath]) {
37
- const aliasPath = path.resolve(path.dirname(fullPath), alias).toLowerCase();
38
- const aliasDir = path.dirname(aliasPath);
39
- if (!(await mutableFilesystem.promises.exists(aliasDir))) {
40
- await mutableFilesystem.promises.mkdir(aliasDir, {
41
- recursive: true
42
- });
43
- }
44
- if (!(await mutableFilesystem.promises.exists(aliasPath))) {
45
- await mutableFilesystem.promises.symlink(fullPath, aliasPath);
46
- } else {
47
- console.warn(`Alias '${aliasPath}' already exists. Is there a duplicate alias, or a page with the same name but different file extensions?`);
48
- }
49
- }
50
- }
51
- }
52
- };
53
-
54
- export default $AliasPlugin;
55
-
56
- function createPageTest(ignorePages, pageExtensions) {
57
- const extTest = new RegExp(`${pageExtensions.map(escapeRegExp).join('|')}$`);
58
- const ignoreTest = new RegExp(`${ignorePages.map(escapeRegExp).join('|')}$`);
59
- return file => {
60
- return !ignoreTest.test(file) && extTest.test(file) && !path.basename(file).startsWith('.');
61
- };
62
- }
@@ -1,34 +0,0 @@
1
- import type PluginType from '@jpmorganchase/mosaic-types/dist/Plugin';
2
- import type Page from '@jpmorganchase/mosaic-types/dist/Page';
3
- import { escapeRegExp } from 'lodash';
4
- import path from 'path';
5
-
6
- const $CodeModPlugin: PluginType<{
7
- nextPrev: { [key: string]: string[] };
8
- refs: { [key: string]: { $$path: (number | string)[]; $$value: string }[] };
9
- }> = {
10
- async $afterSource(pages: Page[], { ignorePages, pageExtensions }) {
11
- const isNonHiddenPage = createPageTest(ignorePages, pageExtensions);
12
-
13
- for (const page of pages) {
14
- if (!isNonHiddenPage(page.fullPath)) {
15
- continue;
16
- }
17
- if (page.frameOverrides) {
18
- page.sharedConfig = page.frameOverrides;
19
- page.frameOverrides = { $ref: '#/sharedConfig' };
20
- }
21
- }
22
- return pages;
23
- }
24
- };
25
-
26
- export default $CodeModPlugin;
27
-
28
- function createPageTest(ignorePages, pageExtensions) {
29
- const extTest = new RegExp(`${pageExtensions.map(escapeRegExp).join('|')}$`);
30
- const ignoreTest = new RegExp(`${ignorePages.map(escapeRegExp).join('|')}$`);
31
- return file => {
32
- return !ignoreTest.test(file) && extTest.test(file) && !path.basename(file).startsWith('.');
33
- };
34
- }