@atlaskit/editor-slack-transformer 3.1.5 → 3.1.7

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,17 @@
1
1
  # @atlaskit/editor-slack-transformer
2
2
 
3
+ ## 3.1.7
4
+
5
+ ### Patch Changes
6
+
7
+ - [`0ffb55018c9`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0ffb55018c9) - Revert "[ED-17172] Bumped prosemirror-view from 1.23.2 to 1.23.7 and removed work-around for fixed issues"
8
+
9
+ ## 3.1.6
10
+
11
+ ### Patch Changes
12
+
13
+ - [`2e01c9c74b5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2e01c9c74b5) - DUMMY remove before merging to master; dupe adf-schema via adf-utils
14
+
3
15
  ## 3.1.5
4
16
 
5
17
  ### Patch Changes
package/dist/cjs/index.js CHANGED
@@ -1,26 +1,19 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.SlackTransformer = void 0;
9
-
10
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
11
  var _serializer = require("./serializer");
17
-
18
12
  var SlackTransformer = /*#__PURE__*/function () {
19
13
  function SlackTransformer() {
20
14
  (0, _classCallCheck2.default)(this, SlackTransformer);
21
15
  (0, _defineProperty2.default)(this, "serializer", new _serializer.MarkdownSerializer(_serializer.nodes, _serializer.marks));
22
16
  }
23
-
24
17
  (0, _createClass2.default)(SlackTransformer, [{
25
18
  key: "encode",
26
19
  value: function encode(node) {
@@ -34,5 +27,4 @@ var SlackTransformer = /*#__PURE__*/function () {
34
27
  }]);
35
28
  return SlackTransformer;
36
29
  }();
37
-
38
30
  exports.SlackTransformer = SlackTransformer;
@@ -1,77 +1,55 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.nodes = exports.marks = exports.MarkdownSerializerState = exports.MarkdownSerializer = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
11
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
12
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
13
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
14
  var _prosemirrorMarkdown = require("prosemirror-markdown");
23
-
24
15
  var _util = require("./util");
25
-
26
16
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
-
28
17
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29
-
30
18
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
31
-
32
19
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
33
-
34
20
  var MarkdownSerializerState = /*#__PURE__*/function (_PMMarkdownSerializer) {
35
21
  (0, _inherits2.default)(MarkdownSerializerState, _PMMarkdownSerializer);
36
-
37
22
  var _super = _createSuper(MarkdownSerializerState);
38
-
39
23
  function MarkdownSerializerState() {
40
24
  (0, _classCallCheck2.default)(this, MarkdownSerializerState);
41
25
  return _super.apply(this, arguments);
42
26
  }
43
-
44
27
  (0, _createClass2.default)(MarkdownSerializerState, [{
45
28
  key: "renderContent",
46
29
  value: function renderContent(parent) {
47
30
  var _this = this;
48
-
49
31
  parent.forEach(function (child, _offset, index) {
50
- if ( // If child is an empty Textblock we need to insert a zwnj-character in order to preserve that line in markdown
51
- child.isTextblock && !child.textContent && // If child is a Codeblock we need to handle this separately as we want to preserve empty code blocks
32
+ if (
33
+ // If child is an empty Textblock we need to insert a zwnj-character in order to preserve that line in markdown
34
+ child.isTextblock && !child.textContent &&
35
+ // If child is a Codeblock we need to handle this separately as we want to preserve empty code blocks
52
36
  !(child.type.name === 'codeBlock') && !(child.content && child.content.size > 0)) {
53
37
  return nodes.empty_line(_this, child);
54
38
  }
55
-
56
39
  return _this.render(child, parent, index);
57
40
  });
58
41
  }
59
42
  }]);
60
43
  return MarkdownSerializerState;
61
44
  }(_prosemirrorMarkdown.MarkdownSerializerState);
62
-
63
45
  exports.MarkdownSerializerState = MarkdownSerializerState;
64
-
65
46
  var MarkdownSerializer = /*#__PURE__*/function (_PMMarkdownSerializer2) {
66
47
  (0, _inherits2.default)(MarkdownSerializer, _PMMarkdownSerializer2);
67
-
68
48
  var _super2 = _createSuper(MarkdownSerializer);
69
-
70
49
  function MarkdownSerializer() {
71
50
  (0, _classCallCheck2.default)(this, MarkdownSerializer);
72
51
  return _super2.apply(this, arguments);
73
52
  }
74
-
75
53
  (0, _createClass2.default)(MarkdownSerializer, [{
76
54
  key: "serialize",
77
55
  value: function serialize(content, options) {
@@ -85,8 +63,6 @@ var MarkdownSerializer = /*#__PURE__*/function (_PMMarkdownSerializer2) {
85
63
  /**
86
64
  * Stubs for unsupported nodes
87
65
  */
88
-
89
-
90
66
  exports.MarkdownSerializer = MarkdownSerializer;
91
67
  var unsupportedNodes = {
92
68
  table: function table(state, node) {
@@ -101,7 +77,6 @@ var unsupportedNodes = {
101
77
  state.write('[embedded card]');
102
78
  state.closeBlock(node);
103
79
  },
104
-
105
80
  /**
106
81
  * Inline cards with url type attributes will be sent as a link
107
82
  */
@@ -143,7 +118,6 @@ var unsupportedNodes = {
143
118
  state.write('');
144
119
  }
145
120
  };
146
-
147
121
  var nodes = _objectSpread({
148
122
  blockquote: function blockquote(state, node) {
149
123
  state.wrapBlock('> ', undefined, node, function () {
@@ -179,14 +153,11 @@ var nodes = _objectSpread({
179
153
  },
180
154
  listItem: function listItem(state, node, parent, index) {
181
155
  var delimiter = parent.type.name === 'bulletList' ? '• ' : "".concat(index + 1, ". ");
182
-
183
156
  var _loop = function _loop(i) {
184
157
  var child = node.child(i);
185
-
186
158
  if (i > 0) {
187
159
  state.write('\n');
188
160
  }
189
-
190
161
  if (i === 0) {
191
162
  state.wrapBlock(' ', delimiter, node, function () {
192
163
  return state.render(child, parent, i);
@@ -196,18 +167,14 @@ var nodes = _objectSpread({
196
167
  return state.render(child, parent, i);
197
168
  });
198
169
  }
199
-
200
170
  if (child.type.name === 'paragraph' && i > 0) {
201
171
  state.write('\n');
202
172
  }
203
-
204
173
  state.flushClose(1);
205
174
  };
206
-
207
175
  for (var i = 0; i < node.childCount; i++) {
208
176
  _loop(i);
209
177
  }
210
-
211
178
  if (index === parent.childCount - 1) {
212
179
  state.write('\n');
213
180
  }
@@ -225,11 +192,9 @@ var nodes = _objectSpread({
225
192
  },
226
193
  text: function text(state, node) {
227
194
  var lines = node.textContent.split('\n');
228
-
229
195
  for (var i = 0; i < lines.length; i++) {
230
196
  state.write();
231
197
  state.out += (0, _util.escapeMarkdown)(lines[i]);
232
-
233
198
  if (i !== lines.length - 1) {
234
199
  state.out += '\n';
235
200
  }
@@ -237,19 +202,16 @@ var nodes = _objectSpread({
237
202
  },
238
203
  empty_line: function empty_line(state, node) {
239
204
  state.write("\u200C"); // zero-width-non-joiner
240
-
241
205
  state.closeBlock(node);
242
206
  },
243
207
  mention: function mention(state, node, parent, index) {
244
208
  var isLastNode = parent.childCount === index + 1;
245
209
  var delimiter = '';
246
-
247
210
  if (!isLastNode) {
248
211
  var nextNode = parent.child(index + 1);
249
212
  var nextNodeHasLeadingSpace = nextNode.textContent.indexOf(' ') === 0;
250
213
  delimiter = nextNodeHasLeadingSpace ? '' : ' ';
251
214
  }
252
-
253
215
  state.write("@".concat(node.attrs.id).concat(delimiter));
254
216
  },
255
217
  emoji: function emoji(state, node) {
@@ -268,7 +230,6 @@ var nodes = _objectSpread({
268
230
  state.write('\n');
269
231
  }
270
232
  },
271
-
272
233
  /**
273
234
  * Slack markdown does not have specific syntax for images/files.
274
235
  * We just show that there's an image attached as a link and a media just as a text.
@@ -298,7 +259,6 @@ var nodes = _objectSpread({
298
259
  state.write('<> ');
299
260
  state.renderInline(node);
300
261
  state.write('\n');
301
-
302
262
  if (index === parent.childCount - 1) {
303
263
  state.write('\n');
304
264
  }
@@ -325,11 +285,10 @@ var nodes = _objectSpread({
325
285
  state.write(" JIRA | ".concat(node.attrs.issueKey, " "));
326
286
  }
327
287
  }, unsupportedNodes);
288
+
328
289
  /**
329
290
  * Slack markdown does not have specific syntax for (sub|super)script, underline, text color.
330
291
  */
331
-
332
-
333
292
  exports.nodes = nodes;
334
293
  var unsupportedMarks = {
335
294
  subsup: {
@@ -361,7 +320,6 @@ var unsupportedMarks = {
361
320
  close: ''
362
321
  }
363
322
  };
364
-
365
323
  var marks = _objectSpread({
366
324
  em: {
367
325
  open: '_',
@@ -393,5 +351,4 @@ var marks = _objectSpread({
393
351
  escape: false
394
352
  }
395
353
  }, unsupportedMarks);
396
-
397
354
  exports.marks = marks;
package/dist/cjs/util.js CHANGED
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.escapeMarkdown = void 0;
7
-
8
7
  /**
9
8
  * Slack uses &, <, and > as control characters for special parsing in text objects,
10
9
  * so they must be converted to HTML entities.
@@ -15,17 +14,13 @@ var escapeMarkdown = function escapeMarkdown(str) {
15
14
  switch (matched) {
16
15
  case '&':
17
16
  return '&amp;';
18
-
19
17
  case '<':
20
18
  return '&lt;';
21
-
22
19
  case '>':
23
20
  return '&gt;';
24
-
25
21
  default:
26
22
  return "\\".concat(matched);
27
23
  }
28
24
  });
29
25
  };
30
-
31
26
  exports.escapeMarkdown = escapeMarkdown;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-slack-transformer",
3
- "version": "3.1.5",
3
+ "version": "3.1.7",
4
4
  "sideEffects": false
5
5
  }
@@ -4,13 +4,10 @@ export class SlackTransformer {
4
4
  constructor() {
5
5
  _defineProperty(this, "serializer", new MarkdownSerializer(nodes, marks));
6
6
  }
7
-
8
7
  encode(node) {
9
8
  return this.serializer.serialize(node);
10
9
  }
11
-
12
10
  parse(_slackMarkdown) {
13
11
  throw new Error('This is not implemented yet');
14
12
  }
15
-
16
13
  }
@@ -3,16 +3,16 @@ import { escapeMarkdown } from './util';
3
3
  export class MarkdownSerializerState extends PMMarkdownSerializerState {
4
4
  renderContent(parent) {
5
5
  parent.forEach((child, _offset, index) => {
6
- if ( // If child is an empty Textblock we need to insert a zwnj-character in order to preserve that line in markdown
7
- child.isTextblock && !child.textContent && // If child is a Codeblock we need to handle this separately as we want to preserve empty code blocks
6
+ if (
7
+ // If child is an empty Textblock we need to insert a zwnj-character in order to preserve that line in markdown
8
+ child.isTextblock && !child.textContent &&
9
+ // If child is a Codeblock we need to handle this separately as we want to preserve empty code blocks
8
10
  !(child.type.name === 'codeBlock') && !(child.content && child.content.size > 0)) {
9
11
  return nodes.empty_line(this, child);
10
12
  }
11
-
12
13
  return this.render(child, parent, index);
13
14
  });
14
15
  }
15
-
16
16
  }
17
17
  export class MarkdownSerializer extends PMMarkdownSerializer {
18
18
  serialize(content, options) {
@@ -20,28 +20,24 @@ export class MarkdownSerializer extends PMMarkdownSerializer {
20
20
  state.renderContent(content);
21
21
  return state.out === '\u200c' ? '' : state.out; // Return empty string if editor only contains a zero-non-width character
22
22
  }
23
-
24
23
  }
24
+
25
25
  /**
26
26
  * Stubs for unsupported nodes
27
27
  */
28
-
29
28
  const unsupportedNodes = {
30
29
  table(state, node) {
31
30
  state.write('[table]');
32
31
  state.closeBlock(node);
33
32
  },
34
-
35
33
  blockCard(state, node) {
36
34
  state.write('[block card]');
37
35
  state.closeBlock(node);
38
36
  },
39
-
40
37
  embedCard(state, node) {
41
38
  state.write('[embedded card]');
42
39
  state.closeBlock(node);
43
40
  },
44
-
45
41
  /**
46
42
  * Inline cards with url type attributes will be sent as a link
47
43
  */
@@ -49,56 +45,44 @@ const unsupportedNodes = {
49
45
  const content = node.attrs.url ? `[<${node.attrs.url}|inline card>]` : '[inline card]';
50
46
  state.write(content);
51
47
  },
52
-
53
48
  inlineExtension(state) {
54
49
  state.write('[inline extension]');
55
50
  },
56
-
57
51
  mediaInline(state) {
58
52
  state.write('[inline file attached]');
59
53
  },
60
-
61
54
  extension(state, node) {
62
55
  state.write('[extension]');
63
56
  state.closeBlock(node);
64
57
  },
65
-
66
58
  bodiedExtension(state, node) {
67
59
  state.write('[bodied extension]');
68
60
  state.closeBlock(node);
69
61
  },
70
-
71
62
  taskList(state, node) {
72
63
  state.write('[task list]');
73
64
  state.closeBlock(node);
74
65
  },
75
-
76
66
  nestedExpand(state) {
77
67
  state.write('[nested expand]');
78
68
  },
79
-
80
69
  confluenceUnsupportedBlock(state) {
81
70
  state.write('');
82
71
  },
83
-
84
72
  confluenceUnsupportedInline(state) {
85
73
  state.write('');
86
74
  },
87
-
88
75
  unsupportedInline(state) {
89
76
  state.write('');
90
77
  },
91
-
92
78
  unsupportedBlock(state) {
93
79
  state.write('');
94
80
  }
95
-
96
81
  };
97
82
  export const nodes = {
98
83
  blockquote(state, node) {
99
84
  state.wrapBlock('> ', undefined, node, () => state.renderContent(node));
100
85
  },
101
-
102
86
  codeBlock(state, node) {
103
87
  state.write('```');
104
88
  state.ensureNewLine();
@@ -107,115 +91,90 @@ export const nodes = {
107
91
  state.write('```');
108
92
  state.closeBlock(node);
109
93
  },
110
-
111
94
  heading(state, node) {
112
95
  state.renderInline(node);
113
96
  state.closeBlock(node);
114
97
  },
115
-
116
98
  rule(state, node) {
117
99
  state.closeBlock(node);
118
100
  },
119
-
120
101
  bulletList(state, node) {
121
102
  for (let i = 0; i < node.childCount; i++) {
122
103
  const child = node.child(i);
123
104
  state.render(child, node, i);
124
105
  }
125
106
  },
126
-
127
107
  orderedList(state, node) {
128
108
  for (let i = 0; i < node.childCount; i++) {
129
109
  const child = node.child(i);
130
110
  state.render(child, node, i);
131
111
  }
132
112
  },
133
-
134
113
  listItem(state, node, parent, index) {
135
114
  const delimiter = parent.type.name === 'bulletList' ? '• ' : `${index + 1}. `;
136
-
137
115
  for (let i = 0; i < node.childCount; i++) {
138
116
  const child = node.child(i);
139
-
140
117
  if (i > 0) {
141
118
  state.write('\n');
142
119
  }
143
-
144
120
  if (i === 0) {
145
121
  state.wrapBlock(' ', delimiter, node, () => state.render(child, parent, i));
146
122
  } else {
147
123
  state.wrapBlock(' ', undefined, node, () => state.render(child, parent, i));
148
124
  }
149
-
150
125
  if (child.type.name === 'paragraph' && i > 0) {
151
126
  state.write('\n');
152
127
  }
153
-
154
128
  state.flushClose(1);
155
129
  }
156
-
157
130
  if (index === parent.childCount - 1) {
158
131
  state.write('\n');
159
132
  }
160
133
  },
161
-
162
134
  caption(state, node) {
163
135
  state.renderInline(node);
164
136
  state.closeBlock(node);
165
137
  },
166
-
167
138
  paragraph(state, node) {
168
139
  state.renderInline(node);
169
140
  state.closeBlock(node);
170
141
  },
171
-
172
142
  hardBreak(state) {
173
143
  state.write(' \n');
174
144
  },
175
-
176
145
  text(state, node) {
177
146
  const lines = node.textContent.split('\n');
178
-
179
147
  for (let i = 0; i < lines.length; i++) {
180
148
  state.write();
181
149
  state.out += escapeMarkdown(lines[i]);
182
-
183
150
  if (i !== lines.length - 1) {
184
151
  state.out += '\n';
185
152
  }
186
153
  }
187
154
  },
188
-
189
155
  empty_line(state, node) {
190
156
  state.write('\u200c'); // zero-width-non-joiner
191
-
192
157
  state.closeBlock(node);
193
158
  },
194
-
195
159
  mention(state, node, parent, index) {
196
160
  const isLastNode = parent.childCount === index + 1;
197
161
  let delimiter = '';
198
-
199
162
  if (!isLastNode) {
200
163
  const nextNode = parent.child(index + 1);
201
164
  const nextNodeHasLeadingSpace = nextNode.textContent.indexOf(' ') === 0;
202
165
  delimiter = nextNodeHasLeadingSpace ? '' : ' ';
203
166
  }
204
-
205
167
  state.write(`@${node.attrs.id}${delimiter}`);
206
168
  },
207
-
208
169
  emoji(state, node) {
209
170
  state.write(node.attrs.text || node.attrs.shortName);
210
171
  },
211
-
212
172
  mediaGroup(state, node) {
213
173
  for (let i = 0; i < node.childCount; i++) {
214
174
  const child = node.child(i);
215
175
  state.render(child, node, i);
216
176
  }
217
177
  },
218
-
219
178
  mediaSingle(state, node) {
220
179
  for (let i = 0; i < node.childCount; i++) {
221
180
  const child = node.child(i);
@@ -223,7 +182,6 @@ export const nodes = {
223
182
  state.write('\n');
224
183
  }
225
184
  },
226
-
227
185
  /**
228
186
  * Slack markdown does not have specific syntax for images/files.
229
187
  * We just show that there's an image attached as a link and a media just as a text.
@@ -232,11 +190,9 @@ export const nodes = {
232
190
  state.write('[media attached]');
233
191
  state.write('\n');
234
192
  },
235
-
236
193
  image(state, node) {
237
194
  state.write(`[<${node.attrs.src}|image attached>]`);
238
195
  },
239
-
240
196
  date(state, node) {
241
197
  /**
242
198
  * The year will be omitted if the date refers to the current year.
@@ -245,57 +201,47 @@ export const nodes = {
245
201
  const unixTime = +node.attrs.timestamp / 1000 | 0;
246
202
  state.write(`<!date^${unixTime}^{date_short}|${new Date(+node.attrs.timestamp).toDateString()}>`);
247
203
  },
248
-
249
204
  decisionList(state, node) {
250
205
  for (let i = 0; i < node.childCount; i++) {
251
206
  const child = node.child(i);
252
207
  state.render(child, node, i);
253
208
  }
254
209
  },
255
-
256
210
  decisionItem(state, node, parent, index) {
257
211
  state.write('<> ');
258
212
  state.renderInline(node);
259
213
  state.write('\n');
260
-
261
214
  if (index === parent.childCount - 1) {
262
215
  state.write('\n');
263
216
  }
264
217
  },
265
-
266
218
  layoutSection(state, node) {
267
219
  for (let i = 0; i < node.childCount; i++) {
268
220
  const child = node.child(i);
269
221
  state.render(child, node, i);
270
222
  }
271
223
  },
272
-
273
224
  layoutColumn(state, node) {
274
225
  state.renderInline(node);
275
226
  },
276
-
277
227
  status(state, node) {
278
228
  state.write(`*${node.attrs.text}*`);
279
229
  },
280
-
281
230
  panel(state, node) {
282
231
  state.renderInline(node);
283
232
  },
284
-
285
233
  placeholder(state, node) {
286
234
  state.write(node.attrs.text);
287
235
  },
288
-
289
236
  confluenceJiraIssue(state, node) {
290
237
  state.write(` JIRA | ${node.attrs.issueKey} `);
291
238
  },
292
-
293
239
  ...unsupportedNodes
294
240
  };
241
+
295
242
  /**
296
243
  * Slack markdown does not have specific syntax for (sub|super)script, underline, text color.
297
244
  */
298
-
299
245
  const unsupportedMarks = {
300
246
  subsup: {
301
247
  open: '',
@@ -349,7 +295,6 @@ export const marks = {
349
295
  open(_state, mark) {
350
296
  return '<' + mark.attrs.href + '|';
351
297
  },
352
-
353
298
  close: '>'
354
299
  },
355
300
  code: {
@@ -8,13 +8,10 @@ export const escapeMarkdown = str => {
8
8
  switch (matched) {
9
9
  case '&':
10
10
  return '&amp;';
11
-
12
11
  case '<':
13
12
  return '&lt;';
14
-
15
13
  case '>':
16
14
  return '&gt;';
17
-
18
15
  default:
19
16
  return `\\${matched}`;
20
17
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-slack-transformer",
3
- "version": "3.1.5",
3
+ "version": "3.1.7",
4
4
  "sideEffects": false
5
5
  }
package/dist/esm/index.js CHANGED
@@ -5,10 +5,8 @@ import { MarkdownSerializer, marks, nodes } from './serializer';
5
5
  export var SlackTransformer = /*#__PURE__*/function () {
6
6
  function SlackTransformer() {
7
7
  _classCallCheck(this, SlackTransformer);
8
-
9
8
  _defineProperty(this, "serializer", new MarkdownSerializer(nodes, marks));
10
9
  }
11
-
12
10
  _createClass(SlackTransformer, [{
13
11
  key: "encode",
14
12
  value: function encode(node) {
@@ -20,6 +18,5 @@ export var SlackTransformer = /*#__PURE__*/function () {
20
18
  throw new Error('This is not implemented yet');
21
19
  }
22
20
  }]);
23
-
24
21
  return SlackTransformer;
25
22
  }();
@@ -4,58 +4,44 @@ import _createClass from "@babel/runtime/helpers/createClass";
4
4
  import _inherits from "@babel/runtime/helpers/inherits";
5
5
  import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
6
6
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
7
-
8
7
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
-
10
8
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
-
12
9
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
13
-
14
10
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
15
-
16
11
  import { MarkdownSerializer as PMMarkdownSerializer, MarkdownSerializerState as PMMarkdownSerializerState } from 'prosemirror-markdown';
17
12
  import { escapeMarkdown } from './util';
18
13
  export var MarkdownSerializerState = /*#__PURE__*/function (_PMMarkdownSerializer) {
19
14
  _inherits(MarkdownSerializerState, _PMMarkdownSerializer);
20
-
21
15
  var _super = _createSuper(MarkdownSerializerState);
22
-
23
16
  function MarkdownSerializerState() {
24
17
  _classCallCheck(this, MarkdownSerializerState);
25
-
26
18
  return _super.apply(this, arguments);
27
19
  }
28
-
29
20
  _createClass(MarkdownSerializerState, [{
30
21
  key: "renderContent",
31
22
  value: function renderContent(parent) {
32
23
  var _this = this;
33
-
34
24
  parent.forEach(function (child, _offset, index) {
35
- if ( // If child is an empty Textblock we need to insert a zwnj-character in order to preserve that line in markdown
36
- child.isTextblock && !child.textContent && // If child is a Codeblock we need to handle this separately as we want to preserve empty code blocks
25
+ if (
26
+ // If child is an empty Textblock we need to insert a zwnj-character in order to preserve that line in markdown
27
+ child.isTextblock && !child.textContent &&
28
+ // If child is a Codeblock we need to handle this separately as we want to preserve empty code blocks
37
29
  !(child.type.name === 'codeBlock') && !(child.content && child.content.size > 0)) {
38
30
  return nodes.empty_line(_this, child);
39
31
  }
40
-
41
32
  return _this.render(child, parent, index);
42
33
  });
43
34
  }
44
35
  }]);
45
-
46
36
  return MarkdownSerializerState;
47
37
  }(PMMarkdownSerializerState);
48
38
  export var MarkdownSerializer = /*#__PURE__*/function (_PMMarkdownSerializer2) {
49
39
  _inherits(MarkdownSerializer, _PMMarkdownSerializer2);
50
-
51
40
  var _super2 = _createSuper(MarkdownSerializer);
52
-
53
41
  function MarkdownSerializer() {
54
42
  _classCallCheck(this, MarkdownSerializer);
55
-
56
43
  return _super2.apply(this, arguments);
57
44
  }
58
-
59
45
  _createClass(MarkdownSerializer, [{
60
46
  key: "serialize",
61
47
  value: function serialize(content, options) {
@@ -64,13 +50,12 @@ export var MarkdownSerializer = /*#__PURE__*/function (_PMMarkdownSerializer2) {
64
50
  return state.out === "\u200C" ? '' : state.out; // Return empty string if editor only contains a zero-non-width character
65
51
  }
66
52
  }]);
67
-
68
53
  return MarkdownSerializer;
69
54
  }(PMMarkdownSerializer);
55
+
70
56
  /**
71
57
  * Stubs for unsupported nodes
72
58
  */
73
-
74
59
  var unsupportedNodes = {
75
60
  table: function table(state, node) {
76
61
  state.write('[table]');
@@ -84,7 +69,6 @@ var unsupportedNodes = {
84
69
  state.write('[embedded card]');
85
70
  state.closeBlock(node);
86
71
  },
87
-
88
72
  /**
89
73
  * Inline cards with url type attributes will be sent as a link
90
74
  */
@@ -161,14 +145,11 @@ export var nodes = _objectSpread({
161
145
  },
162
146
  listItem: function listItem(state, node, parent, index) {
163
147
  var delimiter = parent.type.name === 'bulletList' ? '• ' : "".concat(index + 1, ". ");
164
-
165
148
  var _loop = function _loop(i) {
166
149
  var child = node.child(i);
167
-
168
150
  if (i > 0) {
169
151
  state.write('\n');
170
152
  }
171
-
172
153
  if (i === 0) {
173
154
  state.wrapBlock(' ', delimiter, node, function () {
174
155
  return state.render(child, parent, i);
@@ -178,18 +159,14 @@ export var nodes = _objectSpread({
178
159
  return state.render(child, parent, i);
179
160
  });
180
161
  }
181
-
182
162
  if (child.type.name === 'paragraph' && i > 0) {
183
163
  state.write('\n');
184
164
  }
185
-
186
165
  state.flushClose(1);
187
166
  };
188
-
189
167
  for (var i = 0; i < node.childCount; i++) {
190
168
  _loop(i);
191
169
  }
192
-
193
170
  if (index === parent.childCount - 1) {
194
171
  state.write('\n');
195
172
  }
@@ -207,11 +184,9 @@ export var nodes = _objectSpread({
207
184
  },
208
185
  text: function text(state, node) {
209
186
  var lines = node.textContent.split('\n');
210
-
211
187
  for (var i = 0; i < lines.length; i++) {
212
188
  state.write();
213
189
  state.out += escapeMarkdown(lines[i]);
214
-
215
190
  if (i !== lines.length - 1) {
216
191
  state.out += '\n';
217
192
  }
@@ -219,19 +194,16 @@ export var nodes = _objectSpread({
219
194
  },
220
195
  empty_line: function empty_line(state, node) {
221
196
  state.write("\u200C"); // zero-width-non-joiner
222
-
223
197
  state.closeBlock(node);
224
198
  },
225
199
  mention: function mention(state, node, parent, index) {
226
200
  var isLastNode = parent.childCount === index + 1;
227
201
  var delimiter = '';
228
-
229
202
  if (!isLastNode) {
230
203
  var nextNode = parent.child(index + 1);
231
204
  var nextNodeHasLeadingSpace = nextNode.textContent.indexOf(' ') === 0;
232
205
  delimiter = nextNodeHasLeadingSpace ? '' : ' ';
233
206
  }
234
-
235
207
  state.write("@".concat(node.attrs.id).concat(delimiter));
236
208
  },
237
209
  emoji: function emoji(state, node) {
@@ -250,7 +222,6 @@ export var nodes = _objectSpread({
250
222
  state.write('\n');
251
223
  }
252
224
  },
253
-
254
225
  /**
255
226
  * Slack markdown does not have specific syntax for images/files.
256
227
  * We just show that there's an image attached as a link and a media just as a text.
@@ -280,7 +251,6 @@ export var nodes = _objectSpread({
280
251
  state.write('<> ');
281
252
  state.renderInline(node);
282
253
  state.write('\n');
283
-
284
254
  if (index === parent.childCount - 1) {
285
255
  state.write('\n');
286
256
  }
@@ -307,10 +277,10 @@ export var nodes = _objectSpread({
307
277
  state.write(" JIRA | ".concat(node.attrs.issueKey, " "));
308
278
  }
309
279
  }, unsupportedNodes);
280
+
310
281
  /**
311
282
  * Slack markdown does not have specific syntax for (sub|super)script, underline, text color.
312
283
  */
313
-
314
284
  var unsupportedMarks = {
315
285
  subsup: {
316
286
  open: '',
package/dist/esm/util.js CHANGED
@@ -8,13 +8,10 @@ export var escapeMarkdown = function escapeMarkdown(str) {
8
8
  switch (matched) {
9
9
  case '&':
10
10
  return '&amp;';
11
-
12
11
  case '<':
13
12
  return '&lt;';
14
-
15
13
  case '>':
16
14
  return '&gt;';
17
-
18
15
  default:
19
16
  return "\\".concat(matched);
20
17
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-slack-transformer",
3
- "version": "3.1.5",
3
+ "version": "3.1.7",
4
4
  "sideEffects": false
5
5
  }
@@ -25,8 +25,7 @@ const providers = {
25
25
  resolved: Promise.resolve(mentionResourceProvider),
26
26
  'resolved 2': Promise.resolve(
27
27
  new MentionResource({
28
- url:
29
- 'https://pf-mentions-service.staging.atlassian.io/mentions/f7ebe2c0-0309-4687-b913-41d422f2110b',
28
+ url: 'https://pf-mentions-service.staging.atlassian.io/mentions/f7ebe2c0-0309-4687-b913-41d422f2110b',
30
29
  containerId: 'b0d035bd-9b98-4386-863b-07286c34dc14',
31
30
  productId: 'hipchat',
32
31
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-slack-transformer",
3
- "version": "3.1.5",
3
+ "version": "3.1.7",
4
4
  "description": "Editor Slack transformer",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -12,13 +12,6 @@
12
12
  "module": "dist/esm/index.js",
13
13
  "module:es2019": "dist/es2019/index.js",
14
14
  "types": "dist/types/index.d.ts",
15
- "typesVersions": {
16
- ">=4.0 <4.5": {
17
- "*": [
18
- "dist/types-ts4.0/*"
19
- ]
20
- }
21
- },
22
15
  "sideEffects": false,
23
16
  "atlaskit:src": "src/index.ts",
24
17
  "atlassian": {
@@ -39,15 +32,15 @@
39
32
  },
40
33
  "devDependencies": {
41
34
  "@atlaskit/activity": "^1.0.1",
42
- "@atlaskit/adf-schema": "^24.0.0",
35
+ "@atlaskit/adf-schema": "^25.5.0",
43
36
  "@atlaskit/docs": "*",
44
- "@atlaskit/editor-common": "^69.3.0",
45
- "@atlaskit/editor-core": "^172.2.0",
46
- "@atlaskit/editor-test-helpers": "^17.2.0",
47
- "@atlaskit/emoji": "^65.2.0",
48
- "@atlaskit/smart-card": "^22.2.0",
49
- "@atlaskit/theme": "^12.2.0",
50
- "@atlaskit/util-data-test": "^17.5.0",
37
+ "@atlaskit/editor-common": "^73.0.0",
38
+ "@atlaskit/editor-core": "^182.2.0",
39
+ "@atlaskit/editor-test-helpers": "^18.2.0",
40
+ "@atlaskit/emoji": "^67.3.0",
41
+ "@atlaskit/smart-card": "^25.9.0",
42
+ "@atlaskit/theme": "^12.4.0",
43
+ "@atlaskit/util-data-test": "^17.7.0",
51
44
  "@atlassian/atlassian-frontend-prettier-config-1.0.1": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.1",
52
45
  "@emotion/react": "^11.7.1",
53
46
  "prosemirror-view": "1.23.2",
package/report.api.md CHANGED
@@ -1,12 +1,18 @@
1
+ <!-- API Report Version: 2.3 -->
2
+
1
3
  ## API Report File for "@atlaskit/editor-slack-transformer"
2
4
 
3
- > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
5
+ > Do not edit this file. This report is auto-generated using [API Extractor](https://api-extractor.com/).
6
+ > [Learn more about API reports](https://hello.atlassian.net/wiki/spaces/UR/pages/1825484529/Package+API+Reports)
7
+
8
+ ### Table of contents
9
+
10
+ - [Main Entry Types](#main-entry-types)
11
+ - [Peer Dependencies](#peer-dependencies)
4
12
 
5
- <!--
6
- Generated API Report version: 2.0
7
- -->
13
+ ### Main Entry Types
8
14
 
9
- [Learn more about API reports](https://hello.atlassian.net/wiki/spaces/UR/pages/1825484529/Package+API+Reports)
15
+ <!--SECTION START: Main Entry Types-->
10
16
 
11
17
  ```ts
12
18
  import { Node as Node_2 } from 'prosemirror-model';
@@ -29,3 +35,17 @@ interface Transformer_2<T> {
29
35
 
30
36
  // (No @packageDocumentation comment for this package)
31
37
  ```
38
+
39
+ <!--SECTION END: Main Entry Types-->
40
+
41
+ ### Peer Dependencies
42
+
43
+ <!--SECTION START: Peer Dependencies-->
44
+
45
+ ```json
46
+ {
47
+ "react": "^16.8.0"
48
+ }
49
+ ```
50
+
51
+ <!--SECTION END: Peer Dependencies-->
@@ -0,0 +1,27 @@
1
+ ## API Report File for "@atlaskit/editor-slack-transformer"
2
+
3
+ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4
+
5
+ ```ts
6
+
7
+ import { Node as Node_2 } from 'prosemirror-model';
8
+
9
+ // @public (undocumented)
10
+ export class SlackTransformer implements Transformer_2<string> {
11
+ // (undocumented)
12
+ encode(node: Node_2): string;
13
+ // (undocumented)
14
+ parse(_slackMarkdown: string): Node_2;
15
+ }
16
+
17
+ // @public (undocumented)
18
+ interface Transformer_2<T> {
19
+ // (undocumented)
20
+ encode(node: Node_2): T;
21
+ // (undocumented)
22
+ parse(content: T): Node_2;
23
+ }
24
+
25
+ // (No @packageDocumentation comment for this package)
26
+
27
+ ```
@@ -1,11 +0,0 @@
1
- import { Node as PMNode } from 'prosemirror-model';
2
- interface Transformer<T> {
3
- encode(node: PMNode): T;
4
- parse(content: T): PMNode;
5
- }
6
- export declare class SlackTransformer implements Transformer<string> {
7
- private serializer;
8
- encode(node: PMNode): string;
9
- parse(_slackMarkdown: string): PMNode;
10
- }
11
- export {};
@@ -1,117 +0,0 @@
1
- import { MarkdownSerializer as PMMarkdownSerializer, MarkdownSerializerState as PMMarkdownSerializerState } from 'prosemirror-markdown';
2
- import { Node as PMNode } from 'prosemirror-model';
3
- export declare class MarkdownSerializerState extends PMMarkdownSerializerState {
4
- renderContent(parent: PMNode): void;
5
- }
6
- export declare class MarkdownSerializer extends PMMarkdownSerializer {
7
- serialize(content: PMNode, options?: {
8
- [key: string]: any;
9
- }): string;
10
- }
11
- export declare const nodes: {
12
- table(state: MarkdownSerializerState, node: PMNode): void;
13
- blockCard(state: MarkdownSerializerState, node: PMNode): void;
14
- embedCard(state: MarkdownSerializerState, node: PMNode): void;
15
- /**
16
- * Inline cards with url type attributes will be sent as a link
17
- */
18
- inlineCard(state: MarkdownSerializerState, node: PMNode): void;
19
- inlineExtension(state: MarkdownSerializerState): void;
20
- mediaInline(state: MarkdownSerializerState): void;
21
- extension(state: MarkdownSerializerState, node: PMNode): void;
22
- bodiedExtension(state: MarkdownSerializerState, node: PMNode): void;
23
- taskList(state: MarkdownSerializerState, node: PMNode): void;
24
- nestedExpand(state: MarkdownSerializerState): void;
25
- confluenceUnsupportedBlock(state: MarkdownSerializerState): void;
26
- confluenceUnsupportedInline(state: MarkdownSerializerState): void;
27
- unsupportedInline(state: MarkdownSerializerState): void;
28
- unsupportedBlock(state: MarkdownSerializerState): void;
29
- blockquote(state: MarkdownSerializerState, node: PMNode): void;
30
- codeBlock(state: MarkdownSerializerState, node: PMNode): void;
31
- heading(state: MarkdownSerializerState, node: PMNode): void;
32
- rule(state: MarkdownSerializerState, node: PMNode): void;
33
- bulletList(state: MarkdownSerializerState, node: PMNode): void;
34
- orderedList(state: MarkdownSerializerState, node: PMNode): void;
35
- listItem(state: MarkdownSerializerState, node: PMNode, parent: PMNode, index: number): void;
36
- caption(state: MarkdownSerializerState, node: PMNode): void;
37
- paragraph(state: MarkdownSerializerState, node: PMNode): void;
38
- hardBreak(state: MarkdownSerializerState): void;
39
- text(state: MarkdownSerializerState, node: PMNode): void;
40
- empty_line(state: MarkdownSerializerState, node: PMNode): void;
41
- mention(state: MarkdownSerializerState, node: PMNode, parent: PMNode, index: number): void;
42
- emoji(state: MarkdownSerializerState, node: PMNode): void;
43
- mediaGroup(state: MarkdownSerializerState, node: PMNode): void;
44
- mediaSingle(state: MarkdownSerializerState, node: PMNode): void;
45
- /**
46
- * Slack markdown does not have specific syntax for images/files.
47
- * We just show that there's an image attached as a link and a media just as a text.
48
- */
49
- media(state: MarkdownSerializerState): void;
50
- image(state: MarkdownSerializerState, node: PMNode): void;
51
- date(state: MarkdownSerializerState, node: PMNode): void;
52
- decisionList(state: MarkdownSerializerState, node: PMNode): void;
53
- decisionItem(state: MarkdownSerializerState, node: PMNode, parent: PMNode, index: number): void;
54
- layoutSection(state: MarkdownSerializerState, node: PMNode): void;
55
- layoutColumn(state: MarkdownSerializerState, node: PMNode): void;
56
- status(state: MarkdownSerializerState, node: PMNode): void;
57
- panel(state: MarkdownSerializerState, node: PMNode): void;
58
- placeholder(state: MarkdownSerializerState, node: PMNode): void;
59
- confluenceJiraIssue(state: MarkdownSerializerState, node: PMNode): void;
60
- };
61
- export declare const marks: {
62
- subsup: {
63
- open: string;
64
- close: string;
65
- };
66
- underline: {
67
- open: string;
68
- close: string;
69
- };
70
- textColor: {
71
- open: string;
72
- close: string;
73
- };
74
- typeAheadQuery: {
75
- open: string;
76
- close: string;
77
- };
78
- confluenceInlineComment: {
79
- open: string;
80
- close: string;
81
- };
82
- annotation: {
83
- open: string;
84
- close: string;
85
- };
86
- unsupportedMark: {
87
- open: string;
88
- close: string;
89
- };
90
- em: {
91
- open: string;
92
- close: string;
93
- mixable: boolean;
94
- expelEnclosingWhitespace: boolean;
95
- };
96
- strong: {
97
- open: string;
98
- close: string;
99
- mixable: boolean;
100
- expelEnclosingWhitespace: boolean;
101
- };
102
- strike: {
103
- open: string;
104
- close: string;
105
- mixable: boolean;
106
- expelEnclosingWhitespace: boolean;
107
- };
108
- link: {
109
- open(_state: MarkdownSerializerState, mark: any): string;
110
- close: string;
111
- };
112
- code: {
113
- open: string;
114
- close: string;
115
- escape: boolean;
116
- };
117
- };
@@ -1,6 +0,0 @@
1
- /**
2
- * Slack uses &, <, and > as control characters for special parsing in text objects,
3
- * so they must be converted to HTML entities.
4
- *
5
- */
6
- export declare const escapeMarkdown: (str: string) => string;