@atlaskit/adf-utils 19.25.4 → 19.26.1

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,19 @@
1
1
  # @atlaskit/adf-utils
2
2
 
3
+ ## 19.26.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`97ab189b05912`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/97ab189b05912) -
8
+ Fix bug causing the ADF scrubber to throw an error when document contains very long words
9
+
10
+ ## 19.26.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [`3ff7946f17075`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/3ff7946f17075) -
15
+ EDF-2768 add adf width validation transform
16
+
3
17
  ## 19.25.4
4
18
 
5
19
  ### Patch Changes
@@ -9,6 +9,7 @@ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
14
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
15
  var DUMMY_TEXT = "Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum";
@@ -83,8 +84,10 @@ var scrubStr = exports.scrubStr = function scrubStr(val) {
83
84
  return '';
84
85
  } else {
85
86
  // Everything else
86
- var correction = base[offset] === ' ' ? 1 : 0;
87
- var raw = base[offset + correction];
87
+
88
+ // modulo to ensure wrapping occurs around base string (no OOB access)
89
+ var correction = base[offset % base.length] === ' ' ? 1 : 0;
90
+ var raw = (0, _platformFeatureFlags.fg)('platform_adf-utils_fix-dummy-text-index-oob') ? base[(offset + correction) % base.length] : base[offset + correction];
88
91
  var isLower = char.toLowerCase() === char;
89
92
  var result = isLower ? raw.toLowerCase() : raw.toUpperCase();
90
93
  offset += 1 + correction;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.transformMediaSingleWidth = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _traverse = require("../traverse/traverse");
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ // when media single has a invalid width, we fallback to default width
13
+ // this the last resort when revert the pixel width, we couldnt determine the correct width value
14
+ var transformMediaSingleWidth = exports.transformMediaSingleWidth = function transformMediaSingleWidth(adf) {
15
+ var isTransformed = false;
16
+ var transformedAdf = (0, _traverse.traverse)(adf, {
17
+ mediaSingle: function mediaSingle(node) {
18
+ var _ref = node.attrs || {},
19
+ width = _ref.width,
20
+ widthType = _ref.widthType;
21
+
22
+ // if width is not a number or greater than 100, and widthType is not set, we set width to 100
23
+ if (typeof width === 'number' && width > 100 && !widthType) {
24
+ isTransformed = true;
25
+ var newAttrs = _objectSpread(_objectSpread({}, node.attrs), {}, {
26
+ width: 100
27
+ });
28
+ return _objectSpread(_objectSpread({}, node), {}, {
29
+ attrs: newAttrs
30
+ });
31
+ }
32
+ return node;
33
+ }
34
+ });
35
+ return {
36
+ transformedAdf: transformedAdf,
37
+ isTransformed: isTransformed
38
+ };
39
+ };
@@ -45,6 +45,12 @@ Object.defineProperty(exports, "transformMediaLinkMarks", {
45
45
  return _mediaLinkTransform.transformMediaLinkMarks;
46
46
  }
47
47
  });
48
+ Object.defineProperty(exports, "transformMediaSingleWidth", {
49
+ enumerable: true,
50
+ get: function get() {
51
+ return _transformMediaSingleWidth.transformMediaSingleWidth;
52
+ }
53
+ });
48
54
  Object.defineProperty(exports, "transformNestedTableNodeOutgoingDocument", {
49
55
  enumerable: true,
50
56
  get: function get() {
@@ -71,6 +77,7 @@ Object.defineProperty(exports, "transformTextLinkCodeMarks", {
71
77
  });
72
78
  var _mediaLinkTransform = require("./transforms/media-link-transform");
73
79
  var _textLinkCodeTransform = require("./transforms/text-link-code-transform");
80
+ var _transformMediaSingleWidth = require("./transforms/transform-media-single-width");
74
81
  var _dedupeMarksTransform = require("./transforms/dedupe-marks-transform");
75
82
  var _nodesMissingContentTransform = require("./transforms/nodes-missing-content-transform");
76
83
  var _indentationMarksTransform = require("./transforms/indentation-marks-transform");
@@ -1,3 +1,4 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
1
2
  const DUMMY_TEXT = `Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum`;
2
3
  const DUMMY_DIGITS = ['2', '7', '4', '3', '5', '9', '1', '8', '0', '5'];
3
4
  const BYPASS_ATTR_LIST = {
@@ -65,8 +66,10 @@ export const scrubStr = (val, offset = 0) => {
65
66
  return '';
66
67
  } else {
67
68
  // Everything else
68
- const correction = base[offset] === ' ' ? 1 : 0;
69
- const raw = base[offset + correction];
69
+
70
+ // modulo to ensure wrapping occurs around base string (no OOB access)
71
+ const correction = base[offset % base.length] === ' ' ? 1 : 0;
72
+ const raw = fg('platform_adf-utils_fix-dummy-text-index-oob') ? base[(offset + correction) % base.length] : base[offset + correction];
70
73
  const isLower = char.toLowerCase() === char;
71
74
  const result = isLower ? raw.toLowerCase() : raw.toUpperCase();
72
75
  offset += 1 + correction;
@@ -0,0 +1,32 @@
1
+ import { traverse } from '../traverse/traverse';
2
+ // when media single has a invalid width, we fallback to default width
3
+ // this the last resort when revert the pixel width, we couldnt determine the correct width value
4
+ export const transformMediaSingleWidth = adf => {
5
+ let isTransformed = false;
6
+ const transformedAdf = traverse(adf, {
7
+ mediaSingle: node => {
8
+ const {
9
+ width,
10
+ widthType
11
+ } = node.attrs || {};
12
+
13
+ // if width is not a number or greater than 100, and widthType is not set, we set width to 100
14
+ if (typeof width === 'number' && width > 100 && !widthType) {
15
+ isTransformed = true;
16
+ const newAttrs = {
17
+ ...node.attrs,
18
+ width: 100
19
+ };
20
+ return {
21
+ ...node,
22
+ attrs: newAttrs
23
+ };
24
+ }
25
+ return node;
26
+ }
27
+ });
28
+ return {
29
+ transformedAdf,
30
+ isTransformed
31
+ };
32
+ };
@@ -3,6 +3,7 @@
3
3
 
4
4
  export { transformMediaLinkMarks } from './transforms/media-link-transform';
5
5
  export { transformTextLinkCodeMarks } from './transforms/text-link-code-transform';
6
+ export { transformMediaSingleWidth } from './transforms/transform-media-single-width';
6
7
  export { transformDedupeMarks } from './transforms/dedupe-marks-transform';
7
8
  export { transformNodesMissingContent } from './transforms/nodes-missing-content-transform';
8
9
  export { transformIndentationMarks } from './transforms/indentation-marks-transform';
@@ -4,6 +4,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
5
5
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
+ import { fg } from '@atlaskit/platform-feature-flags';
7
8
  var DUMMY_TEXT = "Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum";
8
9
  var DUMMY_DIGITS = ['2', '7', '4', '3', '5', '9', '1', '8', '0', '5'];
9
10
  var BYPASS_ATTR_LIST = {
@@ -76,8 +77,10 @@ export var scrubStr = function scrubStr(val) {
76
77
  return '';
77
78
  } else {
78
79
  // Everything else
79
- var correction = base[offset] === ' ' ? 1 : 0;
80
- var raw = base[offset + correction];
80
+
81
+ // modulo to ensure wrapping occurs around base string (no OOB access)
82
+ var correction = base[offset % base.length] === ' ' ? 1 : 0;
83
+ var raw = fg('platform_adf-utils_fix-dummy-text-index-oob') ? base[(offset + correction) % base.length] : base[offset + correction];
81
84
  var isLower = char.toLowerCase() === char;
82
85
  var result = isLower ? raw.toLowerCase() : raw.toUpperCase();
83
86
  offset += 1 + correction;
@@ -0,0 +1,32 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import { traverse } from '../traverse/traverse';
5
+ // when media single has a invalid width, we fallback to default width
6
+ // this the last resort when revert the pixel width, we couldnt determine the correct width value
7
+ export var transformMediaSingleWidth = function transformMediaSingleWidth(adf) {
8
+ var isTransformed = false;
9
+ var transformedAdf = traverse(adf, {
10
+ mediaSingle: function mediaSingle(node) {
11
+ var _ref = node.attrs || {},
12
+ width = _ref.width,
13
+ widthType = _ref.widthType;
14
+
15
+ // if width is not a number or greater than 100, and widthType is not set, we set width to 100
16
+ if (typeof width === 'number' && width > 100 && !widthType) {
17
+ isTransformed = true;
18
+ var newAttrs = _objectSpread(_objectSpread({}, node.attrs), {}, {
19
+ width: 100
20
+ });
21
+ return _objectSpread(_objectSpread({}, node), {}, {
22
+ attrs: newAttrs
23
+ });
24
+ }
25
+ return node;
26
+ }
27
+ });
28
+ return {
29
+ transformedAdf: transformedAdf,
30
+ isTransformed: isTransformed
31
+ };
32
+ };
@@ -3,6 +3,7 @@
3
3
 
4
4
  export { transformMediaLinkMarks } from './transforms/media-link-transform';
5
5
  export { transformTextLinkCodeMarks } from './transforms/text-link-code-transform';
6
+ export { transformMediaSingleWidth } from './transforms/transform-media-single-width';
6
7
  export { transformDedupeMarks } from './transforms/dedupe-marks-transform';
7
8
  export { transformNodesMissingContent } from './transforms/nodes-missing-content-transform';
8
9
  export { transformIndentationMarks } from './transforms/indentation-marks-transform';
@@ -0,0 +1,5 @@
1
+ import { type ADFEntity } from '../types';
2
+ export declare const transformMediaSingleWidth: (adf: ADFEntity) => {
3
+ transformedAdf: false | ADFEntity;
4
+ isTransformed: boolean;
5
+ };
@@ -1,5 +1,6 @@
1
1
  export { transformMediaLinkMarks } from './transforms/media-link-transform';
2
2
  export { transformTextLinkCodeMarks } from './transforms/text-link-code-transform';
3
+ export { transformMediaSingleWidth } from './transforms/transform-media-single-width';
3
4
  export { transformDedupeMarks } from './transforms/dedupe-marks-transform';
4
5
  export { transformNodesMissingContent } from './transforms/nodes-missing-content-transform';
5
6
  export { transformIndentationMarks } from './transforms/indentation-marks-transform';
@@ -0,0 +1,5 @@
1
+ import { type ADFEntity } from '../types';
2
+ export declare const transformMediaSingleWidth: (adf: ADFEntity) => {
3
+ transformedAdf: false | ADFEntity;
4
+ isTransformed: boolean;
5
+ };
@@ -1,5 +1,6 @@
1
1
  export { transformMediaLinkMarks } from './transforms/media-link-transform';
2
2
  export { transformTextLinkCodeMarks } from './transforms/text-link-code-transform';
3
+ export { transformMediaSingleWidth } from './transforms/transform-media-single-width';
3
4
  export { transformDedupeMarks } from './transforms/dedupe-marks-transform';
4
5
  export { transformNodesMissingContent } from './transforms/nodes-missing-content-transform';
5
6
  export { transformIndentationMarks } from './transforms/indentation-marks-transform';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/adf-utils",
3
- "version": "19.25.4",
3
+ "version": "19.26.1",
4
4
  "description": "Set of utilities to traverse, modify and create ADF documents.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -27,10 +27,12 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@atlaskit/adf-schema": "^51.3.2",
30
+ "@atlaskit/platform-feature-flags": "^1.1.0",
30
31
  "@babel/runtime": "^7.0.0"
31
32
  },
32
33
  "devDependencies": {
33
34
  "@atlassian/adf-schema-json": "^1.31.0",
35
+ "@atlassian/feature-flags-test-utils": "^1.0.0",
34
36
  "react": "^18.2.0",
35
37
  "wait-for-expect": "^1.2.0"
36
38
  },
@@ -47,5 +49,9 @@
47
49
  ]
48
50
  }
49
51
  },
50
- "platform-feature-flags": {}
52
+ "platform-feature-flags": {
53
+ "platform_adf-utils_fix-dummy-text-index-oob": {
54
+ "type": "boolean"
55
+ }
56
+ }
51
57
  }