@jpmorganchase/mosaic-plugins 0.1.0-beta.6 → 0.1.0-beta.8
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/CHANGELOG.md +35 -0
- package/dist/$AliasPlugin.js +229 -64
- package/dist/$AliasPlugin.js.map +1 -1
- package/dist/$CodeModPlugin.js +118 -36
- package/dist/$CodeModPlugin.js.map +1 -1
- package/dist/$RefPlugin.js +449 -122
- package/dist/$RefPlugin.js.map +1 -1
- package/dist/$TagPlugin.js +236 -77
- package/dist/$TagPlugin.js.map +1 -1
- package/dist/BreadcrumbsPlugin.js +114 -42
- package/dist/BreadcrumbsPlugin.js.map +1 -1
- package/dist/LazyPagePlugin.js +255 -86
- package/dist/LazyPagePlugin.js.map +1 -1
- package/dist/LocalFolderSavePlugin.js +165 -0
- package/dist/LocalFolderSavePlugin.js.map +1 -0
- package/dist/NextPrevPagePlugin.js +157 -47
- package/dist/NextPrevPagePlugin.js.map +1 -1
- package/dist/PagesWithoutFileExtPlugin.js +119 -38
- package/dist/PagesWithoutFileExtPlugin.js.map +1 -1
- package/dist/ReadingTimePlugin.mjs.map +1 -1
- package/dist/SearchIndexPlugin.mjs +268 -0
- package/dist/SearchIndexPlugin.mjs.map +1 -0
- package/dist/SharedConfigPlugin.js +174 -43
- package/dist/SharedConfigPlugin.js.map +1 -1
- package/dist/SidebarPlugin.js +319 -87
- package/dist/SidebarPlugin.js.map +1 -1
- package/dist/SiteMapPlugin.js +90 -38
- package/dist/SiteMapPlugin.js.map +1 -1
- package/dist/TableOfContentsPlugin.mjs +49 -58
- package/dist/TableOfContentsPlugin.mjs.map +1 -1
- package/dist/__tests__/BreadcrumbsPlugin.test.js +160 -0
- package/dist/__tests__/BreadcrumbsPlugin.test.js.map +1 -0
- package/dist/utils/normaliseRefs.js +276 -74
- package/dist/utils/normaliseRefs.js.map +1 -1
- package/package.json +16 -5
|
@@ -27,109 +27,100 @@ function _asyncToGenerator(fn) {
|
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
-
function _throw(e) {
|
|
31
|
-
throw e;
|
|
32
|
-
}
|
|
33
30
|
import regeneratorRuntime from "regenerator-runtime";
|
|
34
31
|
import Slugger from "github-slugger";
|
|
35
|
-
import
|
|
36
|
-
import markdown from "remark-parse";
|
|
32
|
+
import remarkParse from "remark-parse";
|
|
37
33
|
import { unified } from "unified";
|
|
38
|
-
import
|
|
34
|
+
import remarkStringify from "remark-stringify";
|
|
35
|
+
import remarkHeadings from "@vcarl/remark-headings";
|
|
39
36
|
/**
|
|
40
37
|
* Calculates table of contents from page headings
|
|
41
38
|
*/ var TableOfContentsPlugin = {
|
|
42
|
-
$afterSource: function $afterSource(pages, _
|
|
43
|
-
var
|
|
39
|
+
$afterSource: function $afterSource(pages, _, param) {
|
|
40
|
+
var minRank = param.minRank, maxRank = param.maxRank;
|
|
44
41
|
return _asyncToGenerator(/*#__PURE__*/ regeneratorRuntime.mark(function _callee() {
|
|
45
|
-
var processor, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, page, slugger,
|
|
42
|
+
var processor, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, page, slugger, vfile, headings, items;
|
|
46
43
|
return regeneratorRuntime.wrap(function _callee$(_ctx) {
|
|
47
44
|
while(1)switch(_ctx.prev = _ctx.next){
|
|
48
45
|
case 0:
|
|
49
|
-
|
|
50
|
-
return node.type === "heading" && isHeadingInRange(node);
|
|
51
|
-
};
|
|
52
|
-
isHeadingInRange = function _isHeadingInRange(node) {
|
|
53
|
-
var depth = node.depth;
|
|
54
|
-
if (depth < minRank || depth > maxRank) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
return true;
|
|
58
|
-
};
|
|
59
|
-
processor = unified().use(markdown);
|
|
46
|
+
processor = unified().use(remarkParse).use(remarkStringify).use(remarkHeadings);
|
|
60
47
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
61
|
-
_ctx.prev =
|
|
48
|
+
_ctx.prev = 2;
|
|
62
49
|
_iterator = pages[Symbol.iterator]();
|
|
63
|
-
case
|
|
50
|
+
case 4:
|
|
64
51
|
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
|
|
65
|
-
_ctx.next =
|
|
52
|
+
_ctx.next = 17;
|
|
66
53
|
break;
|
|
67
54
|
}
|
|
68
55
|
page = _step.value;
|
|
69
56
|
slugger = new Slugger();
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
57
|
+
if (!page.content) {
|
|
58
|
+
_ctx.next = 14;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
_ctx.next = 10;
|
|
62
|
+
return processor.process(page.content);
|
|
63
|
+
case 10:
|
|
64
|
+
vfile = _ctx.sent;
|
|
65
|
+
headings = vfile.data.headings;
|
|
66
|
+
items = headings.filter(function(heading) {
|
|
67
|
+
return heading.depth >= minRank && heading.depth <= maxRank;
|
|
68
|
+
}).map(function(validHeading) {
|
|
69
|
+
var text = validHeading.value.trim();
|
|
70
|
+
return {
|
|
71
|
+
level: validHeading.depth,
|
|
81
72
|
id: slugger.slug(text),
|
|
82
73
|
text: text
|
|
83
|
-
}
|
|
74
|
+
};
|
|
84
75
|
});
|
|
85
76
|
page.tableOfContents = items;
|
|
86
|
-
case
|
|
77
|
+
case 14:
|
|
87
78
|
_iteratorNormalCompletion = true;
|
|
88
|
-
_ctx.next =
|
|
79
|
+
_ctx.next = 4;
|
|
89
80
|
break;
|
|
90
|
-
case
|
|
91
|
-
_ctx.next =
|
|
81
|
+
case 17:
|
|
82
|
+
_ctx.next = 23;
|
|
92
83
|
break;
|
|
93
|
-
case
|
|
94
|
-
_ctx.prev =
|
|
95
|
-
_ctx.t0 = _ctx["catch"](
|
|
84
|
+
case 19:
|
|
85
|
+
_ctx.prev = 19;
|
|
86
|
+
_ctx.t0 = _ctx["catch"](2);
|
|
96
87
|
_didIteratorError = true;
|
|
97
88
|
_iteratorError = _ctx.t0;
|
|
98
|
-
case
|
|
89
|
+
case 23:
|
|
90
|
+
_ctx.prev = 23;
|
|
99
91
|
_ctx.prev = 24;
|
|
100
|
-
_ctx.prev = 25;
|
|
101
92
|
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
102
93
|
_iterator.return();
|
|
103
94
|
}
|
|
104
|
-
case
|
|
105
|
-
_ctx.prev =
|
|
95
|
+
case 26:
|
|
96
|
+
_ctx.prev = 26;
|
|
106
97
|
if (!_didIteratorError) {
|
|
107
|
-
_ctx.next =
|
|
98
|
+
_ctx.next = 29;
|
|
108
99
|
break;
|
|
109
100
|
}
|
|
110
101
|
throw _iteratorError;
|
|
102
|
+
case 29:
|
|
103
|
+
return _ctx.finish(26);
|
|
111
104
|
case 30:
|
|
112
|
-
return _ctx.finish(
|
|
105
|
+
return _ctx.finish(23);
|
|
113
106
|
case 31:
|
|
114
|
-
return _ctx.finish(24);
|
|
115
|
-
case 32:
|
|
116
107
|
return _ctx.abrupt("return", pages);
|
|
117
|
-
case
|
|
108
|
+
case 32:
|
|
118
109
|
case "end":
|
|
119
110
|
return _ctx.stop();
|
|
120
111
|
}
|
|
121
112
|
}, _callee, null, [
|
|
122
113
|
[
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
114
|
+
2,
|
|
115
|
+
19,
|
|
116
|
+
23,
|
|
117
|
+
31
|
|
127
118
|
],
|
|
128
119
|
[
|
|
129
|
-
|
|
120
|
+
24,
|
|
130
121
|
,
|
|
131
|
-
|
|
132
|
-
|
|
122
|
+
26,
|
|
123
|
+
30
|
|
133
124
|
]
|
|
134
125
|
]);
|
|
135
126
|
}))();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/TableOfContentsPlugin.mjs.ts"],"sourcesContent":["import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';\nimport Slugger from 'github-slugger';\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/TableOfContentsPlugin.mjs.ts"],"sourcesContent":["import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';\nimport Slugger from 'github-slugger';\nimport remarkParse from 'remark-parse';\nimport { unified } from 'unified';\nimport remarkStringify from 'remark-stringify';\nimport remarkHeadings from '@vcarl/remark-headings';\nimport type { Heading as MarkdownHeading } from 'mdast';\n\ntype TOCItem = { level: number; id: string; text: string };\n\ninterface TableOfContentsPluginPage extends Page {\n tableOfContents?: TOCItem[];\n}\ntype Rank = MarkdownHeading['depth'];\ninterface TableOfContentsPluginOptions {\n minRank: Rank;\n maxRank: Rank;\n}\n\n/**\n * Calculates table of contents from page headings\n */\nconst TableOfContentsPlugin: PluginType<TableOfContentsPluginPage, TableOfContentsPluginOptions> = {\n async $afterSource(pages, _, { minRank, maxRank }) {\n const processor = unified().use(remarkParse).use(remarkStringify).use(remarkHeadings);\n for (const page of pages) {\n const slugger = new Slugger();\n if (page.content) {\n const vfile = await processor.process(page.content);\n const headings = vfile.data.headings as [{ depth: number; value: string }];\n const items: TOCItem[] = headings\n .filter(heading => heading.depth >= minRank && heading.depth <= maxRank)\n .map(validHeading => {\n const text = validHeading.value.trim();\n return {\n level: validHeading.depth,\n id: slugger.slug(text),\n text\n };\n });\n page.tableOfContents = items;\n }\n }\n\n return pages;\n }\n};\n\nexport default TableOfContentsPlugin;\n"],"names":["Slugger","remarkParse","unified","remarkStringify","remarkHeadings","TableOfContentsPlugin","$afterSource","pages","_","minRank","maxRank","processor","page","slugger","vfile","headings","items","use","content","process","data","filter","heading","depth","map","validHeading","text","value","trim","level","id","slug","tableOfContents"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAOA,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAOC,WAAW,MAAM,cAAc,CAAC;AACvC,SAASC,OAAO,QAAQ,SAAS,CAAC;AAClC,OAAOC,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAOC,cAAc,MAAM,wBAAwB,CAAC;AAcpD;;CAEC,GACD,IAAMC,qBAAqB,GAAwE;IAC3FC,YAAY,EAAlB,SAAMA,YAAY,CAACC,KAAK,EAAEC,CAAC,EAAE,KAAoB;YAAlBC,OAAO,GAAT,KAAoB,CAAlBA,OAAO,EAAEC,OAAO,GAAlB,KAAoB,CAATA,OAAO;eAAI,wDAAA,mBAAA;gBAC3CC,SAAS,EACV,yBAAU,EAAV,iBAAU,EAAV,cAAU,EAAV,SAAU,EAAV,KAAU,EAAJC,IAAI,EACPC,OAAO,EAELC,KAAK,EACLC,QAAQ,EACRC,KAAK;;;;wBANTL,SAAS,GAAGT,OAAO,EAAE,CAACe,GAAG,CAAChB,WAAW,CAAC,CAACgB,GAAG,CAACd,eAAe,CAAC,CAACc,GAAG,CAACb,cAAc,CAAC,CAAC;wBACjF,yBAAU,SAAV,iBAAU,UAAV,cAAU;;wBAAV,SAAU,GAAIG,KAAK;;4BAAnB,yBAAU,IAAV,KAAU,GAAV,SAAU;;;;wBAAJK,IAAI,GAAV,KAAU,MAAA;wBACPC,OAAO,GAAG,IAAIb,OAAO,EAAE,CAAC;4BAC1BY,CAAAA,IAAI,CAACM,OAAO;;;;;+BACMP,SAAS,CAACQ,OAAO,CAACP,IAAI,CAACM,OAAO,CAAC;;wBAA7CJ,KAAK,YAAwC,CAAA;wBAC7CC,QAAQ,GAAGD,KAAK,CAACM,IAAI,CAACL,QAAQ,AAAsC,CAAC;wBACrEC,KAAK,GAAcD,QAAQ,CAC9BM,MAAM,CAACC,SAAAA,OAAO;mCAAIA,OAAO,CAACC,KAAK,IAAId,OAAO,IAAIa,OAAO,CAACC,KAAK,IAAIb,OAAO;yBAAA,CAAC,CACvEc,GAAG,CAACC,SAAAA,YAAY,EAAI;4BACnB,IAAMC,IAAI,GAAGD,YAAY,CAACE,KAAK,CAACC,IAAI,EAAE,AAAC;4BACvC,OAAO;gCACLC,KAAK,EAAEJ,YAAY,CAACF,KAAK;gCACzBO,EAAE,EAAEjB,OAAO,CAACkB,IAAI,CAACL,IAAI,CAAC;gCACtBA,IAAI,EAAJA,IAAI;6BACL,CAAC;yBACH,CAAC,CAAC;wBACLd,IAAI,CAACoB,eAAe,GAAGhB,KAAK,CAAC;;wBAf5B,yBAAU;;;;;;;;;wBAAV,iBAAU;wBAAV,cAAU;;;;6BAAV,yBAAU,IAAV,SAAU;4BAAV,SAAU;;;;4BAAV,CAAA,iBAAU;;;;8BAAV,cAAU;;;;;;qDAmBRT,KAAK;;;;;;;;;;;;;;;;;;;SACb,EAAA;KAAA;CACF,AAAC;AAEF,eAAeF,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
2
|
+
try {
|
|
3
|
+
var info = gen[key](arg);
|
|
4
|
+
var value = info.value;
|
|
5
|
+
} catch (error) {
|
|
6
|
+
reject(error);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (info.done) {
|
|
10
|
+
resolve(value);
|
|
11
|
+
} else {
|
|
12
|
+
Promise.resolve(value).then(_next, _throw);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function _asyncToGenerator(fn) {
|
|
16
|
+
return function() {
|
|
17
|
+
var self = this, args = arguments;
|
|
18
|
+
return new Promise(function(resolve, reject) {
|
|
19
|
+
var gen = fn.apply(self, args);
|
|
20
|
+
function _next(value) {
|
|
21
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
22
|
+
}
|
|
23
|
+
function _throw(err) {
|
|
24
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
25
|
+
}
|
|
26
|
+
_next(undefined);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
import regeneratorRuntime from "regenerator-runtime";
|
|
31
|
+
import BreadcrumbsPlugin from "../BreadcrumbsPlugin";
|
|
32
|
+
// jest.mock('fs');
|
|
33
|
+
var pages = [
|
|
34
|
+
{
|
|
35
|
+
fullPath: "/FolderA/index.mdx",
|
|
36
|
+
route: "route/folderA/index",
|
|
37
|
+
title: "Folder A Index"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
fullPath: "/FolderA/pageA.mdx",
|
|
41
|
+
route: "route/folderA/pageA",
|
|
42
|
+
title: "Folder A Page A"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
fullPath: "/FolderA/pageB.mdx",
|
|
46
|
+
route: "route/folderA/pageB",
|
|
47
|
+
title: "Folder A Page B"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
fullPath: "/FolderA/SubfolderA/index.mdx",
|
|
51
|
+
route: "route/folderA/subfolderA/index",
|
|
52
|
+
title: "Subfolder A Index"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
fullPath: "/FolderA/SubfolderA/PageA.mdx",
|
|
56
|
+
route: "route/folderA/subfolderA/pageA",
|
|
57
|
+
title: "Subfolder A Page A"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
fullPath: "/FolderA/SubfolderA/PageB.mdx",
|
|
61
|
+
route: "route/folderA/subfolderA/pageB",
|
|
62
|
+
title: "Subfolder A Page B"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
fullPath: "/FolderA/SubfolderA/PageB.mdx",
|
|
66
|
+
route: "route/folderA/subfolderA/pageB",
|
|
67
|
+
title: "Subfolder A Page B",
|
|
68
|
+
breadcrumbs: [
|
|
69
|
+
{
|
|
70
|
+
label: "Label A",
|
|
71
|
+
path: "path/A",
|
|
72
|
+
id: "id A"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
label: "Label B",
|
|
76
|
+
path: "path/B",
|
|
77
|
+
id: "id B"
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
];
|
|
82
|
+
describe("GIVEN the BreadcrumbsPlugin", function() {
|
|
83
|
+
var updatedPages = [];
|
|
84
|
+
beforeEach(/*#__PURE__*/ _asyncToGenerator(/*#__PURE__*/ regeneratorRuntime.mark(function _callee() {
|
|
85
|
+
var $afterSource;
|
|
86
|
+
return regeneratorRuntime.wrap(function _callee$(_ctx) {
|
|
87
|
+
while(1)switch(_ctx.prev = _ctx.next){
|
|
88
|
+
case 0:
|
|
89
|
+
$afterSource = BreadcrumbsPlugin.$afterSource;
|
|
90
|
+
_ctx.next = 3;
|
|
91
|
+
return $afterSource === null || $afterSource === void 0 ? void 0 : $afterSource(pages, {}, {
|
|
92
|
+
indexPageName: "index.mdx"
|
|
93
|
+
});
|
|
94
|
+
case 3:
|
|
95
|
+
_ctx.t0 = _ctx.sent;
|
|
96
|
+
if (_ctx.t0) {
|
|
97
|
+
_ctx.next = 6;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
_ctx.t0 = [];
|
|
101
|
+
case 6:
|
|
102
|
+
updatedPages = _ctx.t0;
|
|
103
|
+
case 7:
|
|
104
|
+
case "end":
|
|
105
|
+
return _ctx.stop();
|
|
106
|
+
}
|
|
107
|
+
}, _callee);
|
|
108
|
+
})));
|
|
109
|
+
test("THEN it should use the `$afterSource` lifecycle event", function() {
|
|
110
|
+
expect(BreadcrumbsPlugin).toHaveProperty("$afterSource");
|
|
111
|
+
});
|
|
112
|
+
describe("AND WHEN `$afterSource` is called", function() {
|
|
113
|
+
test("THEN breadcrumbs are added", /*#__PURE__*/ _asyncToGenerator(/*#__PURE__*/ regeneratorRuntime.mark(function _callee() {
|
|
114
|
+
var breadcrumbs;
|
|
115
|
+
return regeneratorRuntime.wrap(function _callee$(_ctx) {
|
|
116
|
+
while(1)switch(_ctx.prev = _ctx.next){
|
|
117
|
+
case 0:
|
|
118
|
+
breadcrumbs = updatedPages && updatedPages[4].breadcrumbs || [];
|
|
119
|
+
expect(breadcrumbs.length).toBe(3);
|
|
120
|
+
expect(breadcrumbs[0]).toEqual({
|
|
121
|
+
label: "Folder A Index",
|
|
122
|
+
path: "route/folderA/index",
|
|
123
|
+
id: "/FolderA/index.mdx"
|
|
124
|
+
});
|
|
125
|
+
expect(breadcrumbs[1]).toEqual({
|
|
126
|
+
label: "Subfolder A Index",
|
|
127
|
+
path: "route/folderA/subfolderA/index",
|
|
128
|
+
id: "/FolderA/SubfolderA/index.mdx"
|
|
129
|
+
});
|
|
130
|
+
expect(breadcrumbs[2]).toEqual({
|
|
131
|
+
label: "Subfolder A Page A",
|
|
132
|
+
path: "route/folderA/subfolderA/pageA",
|
|
133
|
+
id: "/FolderA/SubfolderA/PageA.mdx"
|
|
134
|
+
});
|
|
135
|
+
case 5:
|
|
136
|
+
case "end":
|
|
137
|
+
return _ctx.stop();
|
|
138
|
+
}
|
|
139
|
+
}, _callee);
|
|
140
|
+
})));
|
|
141
|
+
describe("AND WHEN a page already has breadcrumbs", function() {
|
|
142
|
+
test("THEN those breadcrumbs are used", function() {
|
|
143
|
+
var breadcrumbs = updatedPages && updatedPages[6].breadcrumbs || [];
|
|
144
|
+
expect(breadcrumbs.length).toBe(2);
|
|
145
|
+
expect(breadcrumbs[0]).toEqual({
|
|
146
|
+
label: "Label A",
|
|
147
|
+
path: "path/A",
|
|
148
|
+
id: "id A"
|
|
149
|
+
});
|
|
150
|
+
expect(breadcrumbs[1]).toEqual({
|
|
151
|
+
label: "Label B",
|
|
152
|
+
path: "path/B",
|
|
153
|
+
id: "id B"
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
//# sourceMappingURL=BreadcrumbsPlugin.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/__tests__/BreadcrumbsPlugin.test.ts"],"sourcesContent":["import type { Page } from '@jpmorganchase/mosaic-types';\n\nimport BreadcrumbsPlugin, { BreadcrumbsPluginPage } from '../BreadcrumbsPlugin';\n\n// jest.mock('fs');\n\nconst pages: BreadcrumbsPluginPage[] = [\n {\n fullPath: '/FolderA/index.mdx',\n route: 'route/folderA/index',\n title: 'Folder A Index'\n },\n {\n fullPath: '/FolderA/pageA.mdx',\n route: 'route/folderA/pageA',\n title: 'Folder A Page A'\n },\n {\n fullPath: '/FolderA/pageB.mdx',\n route: 'route/folderA/pageB',\n title: 'Folder A Page B'\n },\n {\n fullPath: '/FolderA/SubfolderA/index.mdx',\n route: 'route/folderA/subfolderA/index',\n title: 'Subfolder A Index'\n },\n {\n fullPath: '/FolderA/SubfolderA/PageA.mdx',\n route: 'route/folderA/subfolderA/pageA',\n title: 'Subfolder A Page A'\n },\n {\n fullPath: '/FolderA/SubfolderA/PageB.mdx',\n route: 'route/folderA/subfolderA/pageB',\n title: 'Subfolder A Page B'\n },\n {\n fullPath: '/FolderA/SubfolderA/PageB.mdx',\n route: 'route/folderA/subfolderA/pageB',\n title: 'Subfolder A Page B',\n breadcrumbs: [\n {\n label: 'Label A',\n path: 'path/A',\n id: 'id A'\n },\n {\n label: 'Label B',\n path: 'path/B',\n id: 'id B'\n }\n ]\n }\n];\n\ndescribe('GIVEN the BreadcrumbsPlugin', () => {\n let updatedPages: BreadcrumbsPluginPage[] = [];\n beforeEach(async () => {\n const $afterSource = BreadcrumbsPlugin.$afterSource;\n updatedPages = (await $afterSource?.(pages, {}, { indexPageName: 'index.mdx' })) || [];\n });\n test('THEN it should use the `$afterSource` lifecycle event', () => {\n expect(BreadcrumbsPlugin).toHaveProperty('$afterSource');\n });\n\n describe('AND WHEN `$afterSource` is called', () => {\n test('THEN breadcrumbs are added', async () => {\n const breadcrumbs = (updatedPages && updatedPages[4].breadcrumbs) || [];\n\n expect(breadcrumbs.length).toBe(3);\n expect(breadcrumbs[0]).toEqual({\n label: 'Folder A Index',\n path: 'route/folderA/index',\n id: '/FolderA/index.mdx'\n });\n expect(breadcrumbs[1]).toEqual({\n label: 'Subfolder A Index',\n path: 'route/folderA/subfolderA/index',\n id: '/FolderA/SubfolderA/index.mdx'\n });\n expect(breadcrumbs[2]).toEqual({\n label: 'Subfolder A Page A',\n path: 'route/folderA/subfolderA/pageA',\n id: '/FolderA/SubfolderA/PageA.mdx'\n });\n });\n\n describe('AND WHEN a page already has breadcrumbs', () => {\n test('THEN those breadcrumbs are used', () => {\n const breadcrumbs = (updatedPages && updatedPages[6].breadcrumbs) || [];\n expect(breadcrumbs.length).toBe(2);\n expect(breadcrumbs[0]).toEqual({\n label: 'Label A',\n path: 'path/A',\n id: 'id A'\n });\n expect(breadcrumbs[1]).toEqual({\n label: 'Label B',\n path: 'path/B',\n id: 'id B'\n });\n });\n });\n });\n});\n"],"names":["BreadcrumbsPlugin","pages","fullPath","route","title","breadcrumbs","label","path","id","describe","updatedPages","beforeEach","$afterSource","indexPageName","test","expect","toHaveProperty","length","toBe","toEqual"],"mappings":"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"}
|