@jpmorganchase/mosaic-plugins 0.1.0-beta.41 → 0.1.0-beta.42

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.
@@ -1,8 +1,9 @@
1
1
  import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';
2
- interface SharedConfigPluginPage extends Page {
2
+ export interface SharedConfigPluginPage extends Page {
3
3
  sharedConfig?: string;
4
+ frameOverrides?: any;
4
5
  }
5
- interface SharedConfigPluginOptions {
6
+ export interface SharedConfigPluginOptions {
6
7
  filename: string;
7
8
  }
8
9
  /**
@@ -1,32 +1,87 @@
1
- import { flatten } from 'lodash-es';
1
+ import { flatten, escapeRegExp } from 'lodash-es';
2
2
  import path from 'path';
3
+ import deepmerge from 'deepmerge';
4
+ function createPageTest(ignorePages, pageExtensions) {
5
+ const extTest = new RegExp(`${pageExtensions.map(escapeRegExp).join('|')}$`);
6
+ const ignoreTest = new RegExp(`${ignorePages.map(escapeRegExp).join('|')}$`);
7
+ return file => !ignoreTest.test(file) && extTest.test(file) && !path.basename(file).startsWith('.');
8
+ }
3
9
  function createFileGlob(url, pageExtensions) {
4
10
  if (pageExtensions.length === 1) {
5
11
  return `${url}${pageExtensions[0]}`;
6
12
  }
7
13
  return `${url}{${pageExtensions.join(',')}}`;
8
14
  }
15
+ /**
16
+ * https://stackoverflow.com/a/50549047
17
+ * compute inner relative to outer
18
+ * If it's not contained, the first component of the resulting path will be .., so that's what we check for
19
+ */
20
+ function isWithin(outer, inner) {
21
+ const outerParentDir = path.posix.resolve(path.posix.dirname(outer), '../');
22
+ const innerParentDir = path.posix.resolve(path.posix.dirname(inner), '../');
23
+ const rel = path.posix.relative(outerParentDir, innerParentDir);
24
+ return !rel.startsWith('../') && rel !== '..';
25
+ }
9
26
  /**
10
27
  * Plugin that crawls the page hierarchy to find the closest `sharedConfig` from any parent index's page metadata.
11
28
  * It then exports a JSON file (name: `options.filename`) into each directory with the merged config for that level
12
29
  */
13
30
  const SharedConfigPlugin = {
31
+ async $afterSource(pages, { ignorePages, pageExtensions }) {
32
+ const isNonHiddenPage = createPageTest(ignorePages, pageExtensions);
33
+ let finalSharedConfig;
34
+ const indexPagesWithSharedConfig = pages.filter(page => path.posix.basename(page.fullPath, path.posix.extname(page.fullPath)) === 'index' &&
35
+ page.sharedConfig !== undefined &&
36
+ isNonHiddenPage(page.fullPath));
37
+ for (const page of indexPagesWithSharedConfig) {
38
+ if (finalSharedConfig === undefined) {
39
+ // first shared config we have found so seed the finalSharedConfig
40
+ finalSharedConfig = page.sharedConfig;
41
+ }
42
+ else {
43
+ for (let i = 1; i < indexPagesWithSharedConfig.length; i++) {
44
+ if (isWithin(indexPagesWithSharedConfig[i].fullPath, page.fullPath)) {
45
+ // found another shared config so merge and apply to the page
46
+ finalSharedConfig = deepmerge(finalSharedConfig, page.sharedConfig);
47
+ page.sharedConfig = finalSharedConfig;
48
+ page.frameOverrides = { $ref: '#/sharedConfig' };
49
+ }
50
+ }
51
+ }
52
+ }
53
+ return pages;
54
+ },
14
55
  async $beforeSend(mutableFilesystem, { config, serialiser, ignorePages, pageExtensions }, options) {
15
- const pagePaths = await mutableFilesystem.promises.glob(createFileGlob('**/index', pageExtensions), {
56
+ const indexPagePaths = await mutableFilesystem.promises.glob(createFileGlob('**/index', pageExtensions), {
16
57
  ignore: [options.filename, ...flatten(ignorePages.map(ignore => [ignore, `**/${ignore}`]))],
17
58
  cwd: '/'
18
59
  });
19
- for (const pagePath of pagePaths) {
20
- const sharedConfigFile = path.posix.join(path.dirname(String(pagePath)), options.filename);
21
- const page = await serialiser.deserialise(String(pagePath), await mutableFilesystem.promises.readFile(String(pagePath)));
60
+ const sharedConfigFiles = [];
61
+ const indexPagesWithoutConfig = [];
62
+ for (const indexPagePath of indexPagePaths) {
63
+ const sharedConfigFile = path.posix.join(path.posix.dirname(String(indexPagePath)), options.filename);
64
+ const page = await serialiser.deserialise(String(indexPagePath), await mutableFilesystem.promises.readFile(String(indexPagePath)));
22
65
  if (page.sharedConfig) {
23
- config.setRef(sharedConfigFile, ['config', '$ref'], `${String(pagePath)}#/sharedConfig`);
66
+ config.setRef(sharedConfigFile, ['config', '$ref'], `${String(indexPagePath)}#/sharedConfig`);
24
67
  await mutableFilesystem.promises.writeFile(sharedConfigFile, '{}');
68
+ sharedConfigFiles.push(sharedConfigFile);
25
69
  }
26
70
  else {
27
- const baseDir = path.posix.resolve(path.dirname(String(pagePath)), '../');
28
- config.setAliases(path.join(baseDir, options.filename), [sharedConfigFile]);
71
+ indexPagesWithoutConfig.push(page.fullPath);
72
+ }
73
+ }
74
+ // apply closest shared config
75
+ let closestSharedConfigIndex = 0;
76
+ for (const pagePath of indexPagesWithoutConfig) {
77
+ for (let i = 0; i < sharedConfigFiles.length; i++) {
78
+ if (isWithin(sharedConfigFiles[i], pagePath)) {
79
+ closestSharedConfigIndex = i;
80
+ }
29
81
  }
82
+ const sharedConfigFile = path.posix.join(path.posix.dirname(String(pagePath)), options.filename);
83
+ const closestSharedConfig = path.posix.resolve(path.dirname(String(pagePath)), sharedConfigFiles[closestSharedConfigIndex]);
84
+ config.setAliases(closestSharedConfig, [sharedConfigFile]);
30
85
  }
31
86
  }
32
87
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SharedConfigPlugin.js","sourceRoot":"","sources":["../src/SharedConfigPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,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;AAUD;;;GAGG;AACH,MAAM,kBAAkB,GAAkE;IACxF,KAAK,CAAC,WAAW,CACf,iBAAiB,EACjB,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,EACnD,OAAO;QAEP,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CACrD,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,EAC1C;YACE,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3F,GAAG,EAAE,GAAG;SACT,CACF,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE3F,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,WAAW,CACvC,MAAM,CAAC,QAAQ,CAAC,EAChB,MAAM,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAC5D,CAAC;YACF,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBACzF,MAAM,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;aACpE;iBAAM;gBACL,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAE1E,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;aAC7E;SACF;IACH,CAAC;CACF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"SharedConfigPlugin.js","sourceRoot":"","sources":["../src/SharedConfigPlugin.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.41",
3
+ "version": "0.1.0-beta.42",
4
4
  "author": "",
5
5
  "description": "Mosaic plugins for core file system",
6
6
  "license": "Apache-2.0",
@@ -33,11 +33,11 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@apidevtools/json-schema-ref-parser": "^10.1.0",
36
- "@jpmorganchase/mosaic-schemas": "^0.1.0-beta.41",
37
- "@jpmorganchase/mosaic-serialisers": "^0.1.0-beta.41",
38
- "@jpmorganchase/mosaic-source-git-repo": "^0.1.0-beta.41",
39
- "@jpmorganchase/mosaic-source-local-folder": "^0.1.0-beta.41",
40
- "@jpmorganchase/mosaic-types": "^0.1.0-beta.41",
36
+ "@jpmorganchase/mosaic-schemas": "^0.1.0-beta.42",
37
+ "@jpmorganchase/mosaic-serialisers": "^0.1.0-beta.42",
38
+ "@jpmorganchase/mosaic-source-git-repo": "^0.1.0-beta.42",
39
+ "@jpmorganchase/mosaic-source-local-folder": "^0.1.0-beta.42",
40
+ "@jpmorganchase/mosaic-types": "^0.1.0-beta.42",
41
41
  "@types/github-slugger": "^1.3.0",
42
42
  "@vcarl/remark-headings": "^0.1.0",
43
43
  "check-links": "^2.0.0",