@jpmorganchase/mosaic-plugins 0.1.0-beta.84 → 0.1.0-beta.86

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.
@@ -0,0 +1,28 @@
1
+ import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';
2
+ interface DocumentAssetsPluginOptions {
3
+ /**
4
+ * An array of subdirectory globs that could contain assets
5
+ * @default: ['**\/images']
6
+ */
7
+ assetSubDirs?: string[];
8
+ /**
9
+ * The source path, where your docs reside, when the site runs
10
+ */
11
+ srcDir?: string;
12
+ /**
13
+ * The directory to copy matched assets to, typically the site's public directory
14
+ * @default './public'
15
+ */
16
+ outputDir?: string;
17
+ /**
18
+ * The prefix we add to all images in documents, so that it routes to the public directory
19
+ * @default '/images'
20
+ */
21
+ imagesPrefix?: string;
22
+ }
23
+ /**
24
+ * Plugin that finds assets within the Mosaic filesystem and copies them to the configured `outputDir`.
25
+ * Documents that create relative references to those images, will be re-written to pull the images from the `outputDir`.
26
+ */
27
+ declare const DocumentAssetsPlugin: PluginType<Page, DocumentAssetsPluginOptions>;
28
+ export default DocumentAssetsPlugin;
@@ -0,0 +1,138 @@
1
+ import fsExtra from 'fs-extra';
2
+ import glob from 'fast-glob';
3
+ import path from 'path';
4
+ import { escapeRegExp } from 'lodash-es';
5
+ import { unified } from 'unified';
6
+ import { visit } from 'unist-util-visit';
7
+ import remarkParse from 'remark-parse';
8
+ import remarkStringify from 'remark-stringify';
9
+ function isUrl(assetPath) {
10
+ try {
11
+ new URL(assetPath);
12
+ return true;
13
+ }
14
+ catch (_err) { }
15
+ return false;
16
+ }
17
+ const createPageTest = (ignorePages, pageExtensions) => {
18
+ const extTest = new RegExp(`${pageExtensions.map(ext => escapeRegExp(ext)).join('|')}$`);
19
+ const ignoreTest = new RegExp(`${ignorePages.map(ignore => escapeRegExp(ignore)).join('|')}$`);
20
+ return (file) => !ignoreTest.test(file) && extTest.test(file) && !path.basename(file).startsWith('.');
21
+ };
22
+ function remarkRewriteImagePaths(newPrefix) {
23
+ return (tree) => {
24
+ visit(tree, 'image', (node) => {
25
+ if (node.url) {
26
+ if (isUrl(node.url) || /^\//.test(node.url)) {
27
+ // Absolute URL or path, do nothing
28
+ return;
29
+ }
30
+ else {
31
+ const isRelativePath = !isUrl(node.url) && !path.isAbsolute(node.url);
32
+ const assetPath = isRelativePath ? node.url : `./${node.url}`;
33
+ const resolvedPath = path.resolve(path.dirname(newPrefix), assetPath);
34
+ node.url = resolvedPath;
35
+ }
36
+ }
37
+ });
38
+ };
39
+ }
40
+ /**
41
+ * Plugin that finds assets within the Mosaic filesystem and copies them to the configured `outputDir`.
42
+ * Documents that create relative references to those images, will be re-written to pull the images from the `outputDir`.
43
+ */
44
+ const DocumentAssetsPlugin = {
45
+ async afterUpdate(_mutableFileSystem, _helpers, { assetSubDirs = [path.join('**', 'images')], srcDir = path.join(process.cwd(), 'docs'), outputDir = `${path.sep}public` }) {
46
+ const resolvedCwd = path.resolve(process.cwd());
47
+ const resolvedSrcDir = path.resolve(srcDir);
48
+ const resolvedOutputDir = path.resolve(outputDir);
49
+ if (!resolvedOutputDir.startsWith(resolvedCwd)) {
50
+ throw new Error(`outputDir must be within the current working directory: ${outputDir}`);
51
+ }
52
+ await fsExtra.ensureDir(srcDir);
53
+ await fsExtra.ensureDir(outputDir);
54
+ for (const assetSubDir of assetSubDirs) {
55
+ const resolvedAssetSubDir = path.resolve(resolvedSrcDir, assetSubDir);
56
+ if (!resolvedAssetSubDir.startsWith(resolvedSrcDir)) {
57
+ console.log('ERROR 3');
58
+ throw new Error(`Asset subdirectory must be within srcDir: ${srcDir}`);
59
+ }
60
+ let globbedImageDirs;
61
+ try {
62
+ globbedImageDirs = await glob(assetSubDir, {
63
+ cwd: resolvedSrcDir,
64
+ onlyDirectories: true
65
+ });
66
+ }
67
+ catch (err) {
68
+ console.error(`Error globbing ${assetSubDir} in ${srcDir}:`, err);
69
+ continue;
70
+ }
71
+ if (globbedImageDirs?.length === 0) {
72
+ continue;
73
+ }
74
+ for (const globbedImageDir of globbedImageDirs) {
75
+ let imageFiles;
76
+ let globbedPath;
77
+ let rootSrcDir = srcDir;
78
+ let rootOutputDir = outputDir;
79
+ try {
80
+ if (!path.isAbsolute(rootSrcDir)) {
81
+ rootSrcDir = path.resolve(path.join(process.cwd(), srcDir));
82
+ }
83
+ globbedPath = path.join(rootSrcDir, globbedImageDir);
84
+ imageFiles = await fsExtra.promises.readdir(globbedPath);
85
+ }
86
+ catch (err) {
87
+ console.error(`Error reading directory ${globbedPath}:`, err);
88
+ continue;
89
+ }
90
+ if (!path.isAbsolute(rootOutputDir)) {
91
+ rootOutputDir = path.resolve(path.join(process.cwd(), outputDir));
92
+ }
93
+ for (const imageFile of imageFiles) {
94
+ try {
95
+ const imageSrcPath = path.join(globbedImageDir, imageFile);
96
+ const fullImageSrcPath = path.join(rootSrcDir, imageSrcPath);
97
+ const fullImageDestPath = path.join(rootOutputDir, imageSrcPath);
98
+ await fsExtra.mkdir(path.dirname(fullImageDestPath), { recursive: true });
99
+ const symlinkAlreadyExists = await fsExtra.pathExists(fullImageDestPath);
100
+ if (!symlinkAlreadyExists) {
101
+ await fsExtra.symlink(fullImageSrcPath, fullImageDestPath);
102
+ console.log(`Symlink created: ${fullImageSrcPath} -> ${fullImageDestPath}`);
103
+ }
104
+ }
105
+ catch (error) {
106
+ console.error(`Error processing ${imageFile}:`, error);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ },
112
+ async $afterSource(pages, { ignorePages, pageExtensions }, { imagesPrefix = `${path.sep}images` }) {
113
+ if (!pageExtensions.includes('.mdx')) {
114
+ return pages;
115
+ }
116
+ for (const page of pages) {
117
+ const isNonHiddenPage = createPageTest(ignorePages, ['.mdx']);
118
+ if (!isNonHiddenPage(page.fullPath)) {
119
+ continue;
120
+ }
121
+ const processor = unified()
122
+ .use(remarkParse)
123
+ .use(remarkRewriteImagePaths, path.join(imagesPrefix, page.route))
124
+ .use(remarkStringify);
125
+ await processor
126
+ .process(page.content)
127
+ .then((file) => {
128
+ page.content = String(file);
129
+ })
130
+ .catch((err) => {
131
+ console.error('Error processing Markdown:', err);
132
+ });
133
+ }
134
+ return pages;
135
+ }
136
+ };
137
+ export default DocumentAssetsPlugin;
138
+ //# sourceMappingURL=DocumentAssetsPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentAssetsPlugin.js","sourceRoot":"","sources":["../src/DocumentAssetsPlugin.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,14 @@ import remarkDirective from 'remark-directive';
5
5
  import { visit } from 'unist-util-visit';
6
6
  import PluginError from './utils/PluginError.js';
7
7
  import { createPageTest } from './utils/createPageTest.js';
8
+ function isDirective(node) {
9
+ return (node.type === 'containerDirective' ||
10
+ node.type === 'leafDirective' ||
11
+ node.type === 'textDirective');
12
+ }
8
13
  function processFragments(tree, pages, isNonHiddenPage, fullPath) {
9
14
  visit(tree, (node, index, parent) => {
10
- if (node.type === 'containerDirective' ||
11
- node.type === 'leafDirective' ||
12
- node.type === 'textDirective') {
15
+ if (isDirective(node)) {
13
16
  if (node.name !== 'fragment')
14
17
  return;
15
18
  const attributes = node.attributes ?? {};
@@ -1 +1 @@
1
- {"version":3,"file":"FragmentPlugin.js","sourceRoot":"","sources":["../src/FragmentPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FragmentPlugin.js","sourceRoot":"","sources":["../src/FragmentPlugin.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';
2
- import type { Heading as MarkdownHeading } from 'mdast';
2
+ import type { Heading as MarkdownHeading, Root } from 'mdast';
3
3
  declare type TOCItem = {
4
4
  level: number;
5
5
  id: string;
@@ -13,6 +13,12 @@ interface TableOfContentsPluginOptions {
13
13
  minRank: Rank;
14
14
  maxRank: Rank;
15
15
  }
16
+ interface Heading {
17
+ depth: number;
18
+ value: string;
19
+ data?: any;
20
+ }
21
+ export declare const getHeadings: (root: Root) => Heading[];
16
22
  /**
17
23
  * Calculates table of contents from page headings
18
24
  */
@@ -2,7 +2,8 @@ import Slugger from 'github-slugger';
2
2
  import remarkParse from 'remark-parse';
3
3
  import { unified } from 'unified';
4
4
  import remarkStringify from 'remark-stringify';
5
- import remarkHeadings from '@vcarl/remark-headings';
5
+ import { visit } from 'unist-util-visit';
6
+ import { toString } from 'mdast-util-to-string';
6
7
  const getValue = (path, obj) => path.split('.').reduce((acc, c) => acc && acc[c], obj);
7
8
  const parsePageHeading = (page, heading) => {
8
9
  let parsedHeading = heading.trim();
@@ -12,6 +13,28 @@ const parsePageHeading = (page, heading) => {
12
13
  }
13
14
  return parsedHeading;
14
15
  };
16
+ export const getHeadings = (root) => {
17
+ const headingList = [];
18
+ visit(root, 'heading', node => {
19
+ const heading = {
20
+ depth: node.depth,
21
+ value: toString(node, { includeImageAlt: false })
22
+ };
23
+ // Other remark plugins can store arbitrary data
24
+ // inside a node's `data` property, such as a
25
+ // custom heading id.
26
+ const data = node?.data;
27
+ if (data) {
28
+ heading.data = data;
29
+ }
30
+ headingList.push(heading);
31
+ });
32
+ return headingList;
33
+ };
34
+ const remarkHeadings = () => (tree, vfile) => {
35
+ // eslint-disable-next-line no-param-reassign
36
+ vfile.data.headings = getHeadings(tree);
37
+ };
15
38
  /**
16
39
  * Calculates table of contents from page headings
17
40
  */
@@ -1 +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,KAAK,EAAE,YAAY,CAAC,KAAK,GAAG,OAAO;wBACnC,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"}
1
+ {"version":3,"file":"TableOfContentsPlugin.js","sourceRoot":"","sources":["../src/TableOfContentsPlugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jpmorganchase/mosaic-plugins",
3
- "version": "0.1.0-beta.84",
3
+ "version": "0.1.0-beta.86",
4
4
  "author": "",
5
5
  "description": "Mosaic plugins for core file system",
6
6
  "license": "Apache-2.0",
@@ -19,7 +19,7 @@
19
19
  }
20
20
  },
21
21
  "engines": {
22
- "node": ">=16.10.0 || >=18.0.0"
22
+ "node": ">=18.0.0 || >=20.0.0"
23
23
  },
24
24
  "files": [
25
25
  "dist"
@@ -35,17 +35,17 @@
35
35
  "directory": "packages/plugins"
36
36
  },
37
37
  "devDependencies": {
38
- "@types/fs-extra": "^9.0.13"
38
+ "@types/fs-extra": "^9.0.13",
39
+ "mock-fs": "^5.2.0"
39
40
  },
40
41
  "dependencies": {
41
42
  "@apidevtools/json-schema-ref-parser": "^10.1.0",
42
- "@jpmorganchase/mosaic-schemas": "^0.1.0-beta.84",
43
- "@jpmorganchase/mosaic-serialisers": "^0.1.0-beta.84",
44
- "@jpmorganchase/mosaic-source-git-repo": "^0.1.0-beta.84",
45
- "@jpmorganchase/mosaic-source-local-folder": "^0.1.0-beta.84",
46
- "@jpmorganchase/mosaic-types": "^0.1.0-beta.84",
43
+ "@jpmorganchase/mosaic-schemas": "^0.1.0-beta.86",
44
+ "@jpmorganchase/mosaic-serialisers": "^0.1.0-beta.86",
45
+ "@jpmorganchase/mosaic-source-git-repo": "^0.1.0-beta.86",
46
+ "@jpmorganchase/mosaic-source-local-folder": "^0.1.0-beta.86",
47
+ "@jpmorganchase/mosaic-types": "^0.1.0-beta.86",
47
48
  "@types/github-slugger": "^1.3.0",
48
- "@vcarl/remark-headings": "^0.1.0",
49
49
  "check-links": "^2.0.0",
50
50
  "deepmerge": "^4.3.1",
51
51
  "fs-extra": "^10.1.0",
@@ -55,16 +55,17 @@
55
55
  "memfs": "^3.4.12",
56
56
  "react-docgen-typescript": "^2.2.2",
57
57
  "reading-time": "^1.5.0",
58
- "remark": "^14.0.2",
59
- "remark-directive": "^2.0.1",
60
- "remark-gfm": "^3.0.1",
61
- "remark-mdx": "^2.1.5",
62
- "remark-parse": "^10.0.1",
63
- "remark-stringify": "^10.0.2",
58
+ "remark": "^15.0.0",
59
+ "remark-directive": "^3.0.0",
60
+ "remark-gfm": "^4.0.0",
61
+ "remark-mdx": "^3.0.0",
62
+ "remark-parse": "^11.0.0",
63
+ "remark-stringify": "^11.0.0",
64
64
  "rxjs": "^7.5.5",
65
- "unified": "^10.1.2",
65
+ "unified": "^11.0.0",
66
66
  "unist-util-visit": "^5.0.0",
67
67
  "mdast-util-directive": "^3.0.0",
68
+ "mdast-util-to-string": "^4.0.0",
68
69
  "uuid": "^7.0.3",
69
70
  "vfile-reporter": "^7.0.5"
70
71
  }