@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.
Files changed (35) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/$AliasPlugin.js +229 -64
  3. package/dist/$AliasPlugin.js.map +1 -1
  4. package/dist/$CodeModPlugin.js +118 -36
  5. package/dist/$CodeModPlugin.js.map +1 -1
  6. package/dist/$RefPlugin.js +449 -122
  7. package/dist/$RefPlugin.js.map +1 -1
  8. package/dist/$TagPlugin.js +236 -77
  9. package/dist/$TagPlugin.js.map +1 -1
  10. package/dist/BreadcrumbsPlugin.js +114 -42
  11. package/dist/BreadcrumbsPlugin.js.map +1 -1
  12. package/dist/LazyPagePlugin.js +255 -86
  13. package/dist/LazyPagePlugin.js.map +1 -1
  14. package/dist/LocalFolderSavePlugin.js +165 -0
  15. package/dist/LocalFolderSavePlugin.js.map +1 -0
  16. package/dist/NextPrevPagePlugin.js +157 -47
  17. package/dist/NextPrevPagePlugin.js.map +1 -1
  18. package/dist/PagesWithoutFileExtPlugin.js +119 -38
  19. package/dist/PagesWithoutFileExtPlugin.js.map +1 -1
  20. package/dist/ReadingTimePlugin.mjs.map +1 -1
  21. package/dist/SearchIndexPlugin.mjs +268 -0
  22. package/dist/SearchIndexPlugin.mjs.map +1 -0
  23. package/dist/SharedConfigPlugin.js +174 -43
  24. package/dist/SharedConfigPlugin.js.map +1 -1
  25. package/dist/SidebarPlugin.js +319 -87
  26. package/dist/SidebarPlugin.js.map +1 -1
  27. package/dist/SiteMapPlugin.js +90 -38
  28. package/dist/SiteMapPlugin.js.map +1 -1
  29. package/dist/TableOfContentsPlugin.mjs +49 -58
  30. package/dist/TableOfContentsPlugin.mjs.map +1 -1
  31. package/dist/__tests__/BreadcrumbsPlugin.test.js +160 -0
  32. package/dist/__tests__/BreadcrumbsPlugin.test.js.map +1 -0
  33. package/dist/utils/normaliseRefs.js +276 -74
  34. package/dist/utils/normaliseRefs.js.map +1 -1
  35. 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 { toString } from "hast-util-to-string";
36
- import markdown from "remark-parse";
32
+ import remarkParse from "remark-parse";
37
33
  import { unified } from "unified";
38
- import { visit } from "unist-util-visit";
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, _$param, param) {
43
- var _$param = _$param !== null ? _$param : _throw(new TypeError("Cannot destructure undefined")), minRank = param.minRank, maxRank = param.maxRank;
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, tree, items, test, isHeadingInRange;
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
- test = function _test(node) {
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 = 4;
48
+ _ctx.prev = 2;
62
49
  _iterator = pages[Symbol.iterator]();
63
- case 6:
50
+ case 4:
64
51
  if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
65
- _ctx.next = 18;
52
+ _ctx.next = 17;
66
53
  break;
67
54
  }
68
55
  page = _step.value;
69
56
  slugger = new Slugger();
70
- _ctx.next = 11;
71
- return processor.parse(page.content);
72
- case 11:
73
- tree = _ctx.sent;
74
- items = [];
75
- visit(tree, function(node) {
76
- return test(node);
77
- }, function(node) {
78
- var text = toString(node).trim();
79
- items.push({
80
- level: node.depth,
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 15:
77
+ case 14:
87
78
  _iteratorNormalCompletion = true;
88
- _ctx.next = 6;
79
+ _ctx.next = 4;
89
80
  break;
90
- case 18:
91
- _ctx.next = 24;
81
+ case 17:
82
+ _ctx.next = 23;
92
83
  break;
93
- case 20:
94
- _ctx.prev = 20;
95
- _ctx.t0 = _ctx["catch"](4);
84
+ case 19:
85
+ _ctx.prev = 19;
86
+ _ctx.t0 = _ctx["catch"](2);
96
87
  _didIteratorError = true;
97
88
  _iteratorError = _ctx.t0;
98
- case 24:
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 27:
105
- _ctx.prev = 27;
95
+ case 26:
96
+ _ctx.prev = 26;
106
97
  if (!_didIteratorError) {
107
- _ctx.next = 30;
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(27);
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 35:
108
+ case 32:
118
109
  case "end":
119
110
  return _ctx.stop();
120
111
  }
121
112
  }, _callee, null, [
122
113
  [
123
- 4,
124
- 20,
125
- 24,
126
- 32
114
+ 2,
115
+ 19,
116
+ 23,
117
+ 31
127
118
  ],
128
119
  [
129
- 25,
120
+ 24,
130
121
  ,
131
- 27,
132
- 31
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 { toString } from 'hast-util-to-string';\nimport markdown from 'remark-parse';\nimport { unified } from 'unified';\nimport { visit } from 'unist-util-visit';\n\ntype TOCItem = { level: number; id: string; text: string };\n\n/**\n * Calculates table of contents from page headings\n */\nconst TableOfContentsPlugin: PluginType<{}, { minRank: 2; maxRank: 4 }> = {\n async $afterSource(pages: Page[], {}, { minRank, maxRank }) {\n const processor = unified().use(markdown);\n for (const page of pages) {\n const slugger = new Slugger();\n const tree = await processor.parse(page.content);\n const items: TOCItem[] = [];\n visit(\n tree,\n node => test(node),\n node => {\n const text = toString(node).trim();\n items.push({\n level: node.depth,\n id: slugger.slug(text),\n text: text\n });\n }\n );\n page.tableOfContents = items;\n }\n\n return pages;\n\n function test(node) {\n return node.type === 'heading' && isHeadingInRange(node);\n }\n\n function isHeadingInRange(node) {\n const depth = node.depth;\n if (depth < minRank || depth > maxRank) {\n return false;\n }\n return true;\n }\n }\n};\n\nexport default TableOfContentsPlugin;\n"],"names":["Slugger","toString","markdown","unified","visit","TableOfContentsPlugin","$afterSource","pages","minRank","maxRank","processor","page","slugger","tree","items","test","isHeadingInRange","node","type","depth","use","parse","content","text","trim","push","level","id","slug","tableOfContents"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAOA,OAAO,MAAM,gBAAgB,CAAC;AACrC,SAASC,QAAQ,QAAQ,qBAAqB,CAAC;AAC/C,OAAOC,QAAQ,MAAM,cAAc,CAAC;AACpC,SAASC,OAAO,QAAQ,SAAS,CAAC;AAClC,SAASC,KAAK,QAAQ,kBAAkB,CAAC;AAIzC;;CAEC,GACD,IAAMC,qBAAqB,GAA+C;IAClEC,YAAY,EAAlB,SAAMA,YAAY,CAACC,KAAa,EAAE,OAAE,EAAE,KAAoB;YAAxB,OAAE,GAAF,OAAE,YAAF,OAAE,wDAAA,EAAIC,OAAO,GAAT,KAAoB,CAAlBA,OAAO,EAAEC,OAAO,GAAlB,KAAoB,CAATA,OAAO;eAAI,wDAAA,mBAAA;gBACpDC,SAAS,EACV,yBAAU,EAAV,iBAAU,EAAV,cAAU,EAAV,SAAU,EAAV,KAAU,EAAJC,IAAI,EACPC,OAAO,EACPC,IAAI,EACJC,KAAK,EAkBJC,IAAI,EAIJC,gBAAgB;;;;wBAJzB,AAASD,IAAI,GAAb,SAASA,KAAI,CAACE,IAAI,EAAE;4BAClB,OAAOA,IAAI,CAACC,IAAI,KAAK,SAAS,IAAIF,gBAAgB,CAACC,IAAI,CAAC,CAAC;yBAC1D;wBAED,AAASD,gBAAgB,GAAzB,SAASA,iBAAgB,CAACC,IAAI,EAAE;4BAC9B,IAAME,KAAK,GAAGF,IAAI,CAACE,KAAK,AAAC;4BACzB,IAAIA,KAAK,GAAGX,OAAO,IAAIW,KAAK,GAAGV,OAAO,EAAE;gCACtC,OAAO,KAAK,CAAC;6BACd;4BACD,OAAO,IAAI,CAAC;yBACb;wBAhCKC,SAAS,GAAGP,OAAO,EAAE,CAACiB,GAAG,CAAClB,QAAQ,CAAC,CAAC;wBACrC,yBAAU,SAAV,iBAAU,UAAV,cAAU;;wBAAV,SAAU,GAAIK,KAAK;;4BAAnB,yBAAU,IAAV,KAAU,GAAV,SAAU;;;;wBAAJI,IAAI,GAAV,KAAU,MAAA;wBACPC,OAAO,GAAG,IAAIZ,OAAO,EAAE,CAAC;;+BACXU,SAAS,CAACW,KAAK,CAACV,IAAI,CAACW,OAAO,CAAC;;wBAA1CT,IAAI,YAAsC,CAAA;wBAC1CC,KAAK,GAAc,EAAE,CAAC;wBAC5BV,KAAK,CACHS,IAAI,EACJI,SAAAA,IAAI;mCAAIF,IAAI,CAACE,IAAI,CAAC;yBAAA,EAClBA,SAAAA,IAAI,EAAI;4BACN,IAAMM,IAAI,GAAGtB,QAAQ,CAACgB,IAAI,CAAC,CAACO,IAAI,EAAE,AAAC;4BACnCV,KAAK,CAACW,IAAI,CAAC;gCACTC,KAAK,EAAET,IAAI,CAACE,KAAK;gCACjBQ,EAAE,EAAEf,OAAO,CAACgB,IAAI,CAACL,IAAI,CAAC;gCACtBA,IAAI,EAAEA,IAAI;6BACX,CAAC,CAAC;yBACJ,CACF,CAAC;wBACFZ,IAAI,CAACkB,eAAe,GAAGf,KAAK,CAAC;;wBAhB1B,yBAAU;;;;;;;;;wBAAV,iBAAU;wBAAV,cAAU;;;;6BAAV,yBAAU,IAAV,SAAU;4BAAV,SAAU;;;;4BAAV,CAAA,iBAAU;;;;8BAAV,cAAU;;;;;;qDAmBRP,KAAK;;;;;;;;;;;;;;;;;;;SAab,EAAA;KAAA;CACF,AAAC;AAEF,eAAeF,qBAAqB,CAAC"}
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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"}