@atlaskit/adf-utils 19.15.0 → 19.16.0

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/adf-utils
2
2
 
3
+ ## 19.16.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#101826](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/101826)
8
+ [`efd5cf5ab0eb2`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/efd5cf5ab0eb2) -
9
+ ED-26205 Prevent transform of nested tables inside bodied macros for renderer only
10
+
3
11
  ## 19.15.0
4
12
 
5
13
  ### Minor Changes
@@ -34,11 +34,32 @@ var transformNestedTableExtension = function transformNestedTableExtension(neste
34
34
  throw new _errors.NodeNestingTransformError('Failed to parse nested table content');
35
35
  }
36
36
  };
37
+ function isInsideBodiedExtension(parent) {
38
+ var _parent$parent;
39
+ if (parent.node === undefined) {
40
+ return false;
41
+ }
42
+ if (parent.node.type === 'bodiedExtension') {
43
+ return true;
44
+ }
45
+ if (parent !== null && parent !== void 0 && (_parent$parent = parent.parent) !== null && _parent$parent !== void 0 && _parent$parent.node) {
46
+ return isInsideBodiedExtension(parent.parent);
47
+ }
48
+ return false;
49
+ }
37
50
  var transformNestedTablesIncomingDocument = exports.transformNestedTablesIncomingDocument = function transformNestedTablesIncomingDocument(adf) {
51
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
38
52
  var isTransformed = false;
39
53
  var transformedAdf = (0, _traverse.traverse)(adf, {
40
- extension: function extension(node) {
54
+ extension: function extension(node, parent) {
41
55
  if (isNestedTableExtension(node)) {
56
+ // Bodied extensions in renderer use their own nested renderer to render the content.
57
+ // This results in the document being validated/transformed twice, once with untransformed content and again with transformed content.
58
+ // Since the untransformed content is valid ADF (table as extension in table) but the transformed content is not valid ADF, (table in table)
59
+ // we need to skip transforming nested tables inside bodied extensions in renderer on the first pass or else it will fail validation and render an unsupported block.
60
+ if (options.environment === 'renderer' && isInsideBodiedExtension(parent)) {
61
+ return undefined;
62
+ }
42
63
  isTransformed = true;
43
64
  return transformNestedTableExtension(node);
44
65
  }
@@ -24,11 +24,31 @@ const transformNestedTableExtension = nestedTableExtension => {
24
24
  throw new NodeNestingTransformError('Failed to parse nested table content');
25
25
  }
26
26
  };
27
- export const transformNestedTablesIncomingDocument = adf => {
27
+ function isInsideBodiedExtension(parent) {
28
+ var _parent$parent;
29
+ if (parent.node === undefined) {
30
+ return false;
31
+ }
32
+ if (parent.node.type === 'bodiedExtension') {
33
+ return true;
34
+ }
35
+ if (parent !== null && parent !== void 0 && (_parent$parent = parent.parent) !== null && _parent$parent !== void 0 && _parent$parent.node) {
36
+ return isInsideBodiedExtension(parent.parent);
37
+ }
38
+ return false;
39
+ }
40
+ export const transformNestedTablesIncomingDocument = (adf, options = {}) => {
28
41
  let isTransformed = false;
29
42
  const transformedAdf = traverse(adf, {
30
- extension: node => {
43
+ extension: (node, parent) => {
31
44
  if (isNestedTableExtension(node)) {
45
+ // Bodied extensions in renderer use their own nested renderer to render the content.
46
+ // This results in the document being validated/transformed twice, once with untransformed content and again with transformed content.
47
+ // Since the untransformed content is valid ADF (table as extension in table) but the transformed content is not valid ADF, (table in table)
48
+ // we need to skip transforming nested tables inside bodied extensions in renderer on the first pass or else it will fail validation and render an unsupported block.
49
+ if (options.environment === 'renderer' && isInsideBodiedExtension(parent)) {
50
+ return undefined;
51
+ }
32
52
  isTransformed = true;
33
53
  return transformNestedTableExtension(node);
34
54
  }
@@ -27,11 +27,32 @@ var transformNestedTableExtension = function transformNestedTableExtension(neste
27
27
  throw new NodeNestingTransformError('Failed to parse nested table content');
28
28
  }
29
29
  };
30
+ function isInsideBodiedExtension(parent) {
31
+ var _parent$parent;
32
+ if (parent.node === undefined) {
33
+ return false;
34
+ }
35
+ if (parent.node.type === 'bodiedExtension') {
36
+ return true;
37
+ }
38
+ if (parent !== null && parent !== void 0 && (_parent$parent = parent.parent) !== null && _parent$parent !== void 0 && _parent$parent.node) {
39
+ return isInsideBodiedExtension(parent.parent);
40
+ }
41
+ return false;
42
+ }
30
43
  export var transformNestedTablesIncomingDocument = function transformNestedTablesIncomingDocument(adf) {
44
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
31
45
  var isTransformed = false;
32
46
  var transformedAdf = traverse(adf, {
33
- extension: function extension(node) {
47
+ extension: function extension(node, parent) {
34
48
  if (isNestedTableExtension(node)) {
49
+ // Bodied extensions in renderer use their own nested renderer to render the content.
50
+ // This results in the document being validated/transformed twice, once with untransformed content and again with transformed content.
51
+ // Since the untransformed content is valid ADF (table as extension in table) but the transformed content is not valid ADF, (table in table)
52
+ // we need to skip transforming nested tables inside bodied extensions in renderer on the first pass or else it will fail validation and render an unsupported block.
53
+ if (options.environment === 'renderer' && isInsideBodiedExtension(parent)) {
54
+ return undefined;
55
+ }
35
56
  isTransformed = true;
36
57
  return transformNestedTableExtension(node);
37
58
  }
@@ -1,6 +1,8 @@
1
1
  import type { ADFEntity } from '../types';
2
2
  export declare const isNestedTableExtension: (extensionNode: ADFEntity) => boolean;
3
- export declare const transformNestedTablesIncomingDocument: (adf: ADFEntity) => {
3
+ export declare const transformNestedTablesIncomingDocument: (adf: ADFEntity, options?: {
4
+ environment?: 'renderer' | 'editor';
5
+ }) => {
4
6
  transformedAdf: ADFEntity;
5
7
  isTransformed: boolean;
6
8
  };
@@ -4,6 +4,6 @@ export { transformDedupeMarks } from './transforms/dedupe-marks-transform';
4
4
  export { transformNodesMissingContent } from './transforms/nodes-missing-content-transform';
5
5
  export { transformIndentationMarks } from './transforms/indentation-marks-transform';
6
6
  export { transformInvalidMediaContent } from './transforms/invalid-media-content-transform';
7
- export { transformNestedTablesIncomingDocument, isNestedTableExtension } from './transforms/nested-table-transform';
7
+ export { transformNestedTablesIncomingDocument, isNestedTableExtension, } from './transforms/nested-table-transform';
8
8
  export { transformNestedTableNodeOutgoingDocument } from './transforms/nested-table-transform';
9
9
  export { NodeNestingTransformError } from './transforms/errors';
@@ -1,6 +1,8 @@
1
1
  import type { ADFEntity } from '../types';
2
2
  export declare const isNestedTableExtension: (extensionNode: ADFEntity) => boolean;
3
- export declare const transformNestedTablesIncomingDocument: (adf: ADFEntity) => {
3
+ export declare const transformNestedTablesIncomingDocument: (adf: ADFEntity, options?: {
4
+ environment?: 'renderer' | 'editor';
5
+ }) => {
4
6
  transformedAdf: ADFEntity;
5
7
  isTransformed: boolean;
6
8
  };
@@ -4,6 +4,6 @@ export { transformDedupeMarks } from './transforms/dedupe-marks-transform';
4
4
  export { transformNodesMissingContent } from './transforms/nodes-missing-content-transform';
5
5
  export { transformIndentationMarks } from './transforms/indentation-marks-transform';
6
6
  export { transformInvalidMediaContent } from './transforms/invalid-media-content-transform';
7
- export { transformNestedTablesIncomingDocument, isNestedTableExtension } from './transforms/nested-table-transform';
7
+ export { transformNestedTablesIncomingDocument, isNestedTableExtension, } from './transforms/nested-table-transform';
8
8
  export { transformNestedTableNodeOutgoingDocument } from './transforms/nested-table-transform';
9
9
  export { NodeNestingTransformError } from './transforms/errors';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/adf-utils",
3
- "version": "19.15.0",
3
+ "version": "19.16.0",
4
4
  "description": "Set of utilities to traverse, modify and create ADF documents.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"