@liveblocks/emails 0.0.1 → 2.9.2-emails1
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/README.md +59 -0
- package/dist/index.d.mts +215 -0
- package/dist/index.d.ts +215 -0
- package/dist/index.js +638 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +638 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +42 -2
package/dist/index.js
ADDED
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/index.ts
|
|
2
|
+
var _core = require('@liveblocks/core');
|
|
3
|
+
|
|
4
|
+
// src/version.ts
|
|
5
|
+
var PKG_NAME = "@liveblocks/emails";
|
|
6
|
+
var PKG_VERSION = "2.9.2-emails1";
|
|
7
|
+
var PKG_FORMAT = "cjs";
|
|
8
|
+
|
|
9
|
+
// src/thread-notification.tsx
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
// src/comment-body.tsx
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
27
|
+
|
|
28
|
+
// src/lib/css-properties.ts
|
|
29
|
+
var VENDORS_PREFIXES = new RegExp(/^(webkit|moz|ms|o)-/);
|
|
30
|
+
var UNITLESS_PROPERTIES = [
|
|
31
|
+
"animationIterationCount",
|
|
32
|
+
"aspectRatio",
|
|
33
|
+
"borderImageOutset",
|
|
34
|
+
"borderImageSlice",
|
|
35
|
+
"borderImageWidth",
|
|
36
|
+
"boxFlex",
|
|
37
|
+
"boxFlexGroup",
|
|
38
|
+
"boxOrdinalGroup",
|
|
39
|
+
"columnCount",
|
|
40
|
+
"columns",
|
|
41
|
+
"flex",
|
|
42
|
+
"flexGrow",
|
|
43
|
+
"flexPositive",
|
|
44
|
+
"flexShrink",
|
|
45
|
+
"flexNegative",
|
|
46
|
+
"flexOrder",
|
|
47
|
+
"gridArea",
|
|
48
|
+
"gridRow",
|
|
49
|
+
"gridRowEnd",
|
|
50
|
+
"gridRowSpan",
|
|
51
|
+
"gridRowStart",
|
|
52
|
+
"gridColumn",
|
|
53
|
+
"gridColumnEnd",
|
|
54
|
+
"gridColumnSpan",
|
|
55
|
+
"gridColumnStart",
|
|
56
|
+
"fontWeight",
|
|
57
|
+
"lineClamp",
|
|
58
|
+
"lineHeight",
|
|
59
|
+
"opacity",
|
|
60
|
+
"order",
|
|
61
|
+
"orphans",
|
|
62
|
+
"scale",
|
|
63
|
+
"tabSize",
|
|
64
|
+
"widows",
|
|
65
|
+
"zIndex",
|
|
66
|
+
"zoom",
|
|
67
|
+
"fillOpacity",
|
|
68
|
+
"floodOpacity",
|
|
69
|
+
"stopOpacity",
|
|
70
|
+
"strokeDasharray",
|
|
71
|
+
"strokeDashoffset",
|
|
72
|
+
"strokeMiterlimit",
|
|
73
|
+
"strokeOpacity",
|
|
74
|
+
"strokeWidth",
|
|
75
|
+
"MozAnimationIterationCount",
|
|
76
|
+
"MozBoxFlex",
|
|
77
|
+
"MozBoxFlexGroup",
|
|
78
|
+
"MozLineClamp",
|
|
79
|
+
"msAnimationIterationCount",
|
|
80
|
+
"msFlex",
|
|
81
|
+
"msZoom",
|
|
82
|
+
"msFlexPositive",
|
|
83
|
+
"msGridColumns",
|
|
84
|
+
"msGridRows",
|
|
85
|
+
"WebkitAnimationIterationCount",
|
|
86
|
+
"WebkitBoxFlex",
|
|
87
|
+
"WebKitBoxFlexGroup",
|
|
88
|
+
"WebkitBoxOrdinalGroup",
|
|
89
|
+
"WebkitColumnCount",
|
|
90
|
+
"WebkitColumns",
|
|
91
|
+
"WebkitFlex",
|
|
92
|
+
"WebkitFlexGrow",
|
|
93
|
+
"WebkitFlexPositive",
|
|
94
|
+
"WebkitFlexShrink",
|
|
95
|
+
"WebkitLineClamp"
|
|
96
|
+
];
|
|
97
|
+
function toInlineCSSString(styles) {
|
|
98
|
+
const entries = Object.entries(styles);
|
|
99
|
+
const inline = entries.map(([key, value]) => {
|
|
100
|
+
if (value === null || typeof value === "boolean" || value === "" || typeof value === "undefined") {
|
|
101
|
+
return "";
|
|
102
|
+
}
|
|
103
|
+
let property = key.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
104
|
+
if (VENDORS_PREFIXES.test(property)) {
|
|
105
|
+
property = `-${property}`;
|
|
106
|
+
}
|
|
107
|
+
if (typeof value === "number" && !UNITLESS_PROPERTIES.includes(key)) {
|
|
108
|
+
return `${property}:${value}px;`;
|
|
109
|
+
}
|
|
110
|
+
return `${property}:${String(value).trim()};`;
|
|
111
|
+
}).filter(Boolean).join("");
|
|
112
|
+
return inline;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// src/comment-body.tsx
|
|
116
|
+
var baseComponents = {
|
|
117
|
+
Container: ({ children }) => /* @__PURE__ */ _react2.default.createElement("div", null, children),
|
|
118
|
+
Paragraph: ({ children }) => /* @__PURE__ */ _react2.default.createElement("p", null, children),
|
|
119
|
+
Text: ({ element }) => {
|
|
120
|
+
let children = element.text;
|
|
121
|
+
if (element.bold) {
|
|
122
|
+
children = /* @__PURE__ */ _react2.default.createElement("strong", null, children);
|
|
123
|
+
}
|
|
124
|
+
if (element.italic) {
|
|
125
|
+
children = /* @__PURE__ */ _react2.default.createElement("em", null, children);
|
|
126
|
+
}
|
|
127
|
+
if (element.strikethrough) {
|
|
128
|
+
children = /* @__PURE__ */ _react2.default.createElement("s", null, children);
|
|
129
|
+
}
|
|
130
|
+
if (element.code) {
|
|
131
|
+
children = /* @__PURE__ */ _react2.default.createElement("code", null, children);
|
|
132
|
+
}
|
|
133
|
+
return /* @__PURE__ */ _react2.default.createElement("span", null, children);
|
|
134
|
+
},
|
|
135
|
+
Link: ({ element, href }) => /* @__PURE__ */ _react2.default.createElement("a", { href, target: "_blank", rel: "noopener noreferrer" }, _nullishCoalesce(element.text, () => ( element.url))),
|
|
136
|
+
Mention: ({ element, user }) => /* @__PURE__ */ _react2.default.createElement("span", { "data-mention": true }, "@", _nullishCoalesce(_optionalChain([user, 'optionalAccess', _ => _.name]), () => ( element.id)))
|
|
137
|
+
};
|
|
138
|
+
async function convertCommentBodyAsReact(body, options) {
|
|
139
|
+
const Components = {
|
|
140
|
+
...baseComponents,
|
|
141
|
+
..._optionalChain([options, 'optionalAccess', _2 => _2.components])
|
|
142
|
+
};
|
|
143
|
+
const resolvedUsers = await _core.resolveUsersInCommentBody.call(void 0,
|
|
144
|
+
body,
|
|
145
|
+
_optionalChain([options, 'optionalAccess', _3 => _3.resolveUsers])
|
|
146
|
+
);
|
|
147
|
+
const blocks = body.content.map((block, index) => {
|
|
148
|
+
switch (block.type) {
|
|
149
|
+
case "paragraph": {
|
|
150
|
+
const children = block.children.map((inline, inlineIndex) => {
|
|
151
|
+
if (_core.isCommentBodyMention.call(void 0, inline)) {
|
|
152
|
+
return inline.id ? /* @__PURE__ */ _react2.default.createElement(
|
|
153
|
+
Components.Mention,
|
|
154
|
+
{
|
|
155
|
+
key: `lb-comment-body-mention-${inlineIndex}`,
|
|
156
|
+
element: inline,
|
|
157
|
+
user: resolvedUsers.get(inline.id)
|
|
158
|
+
}
|
|
159
|
+
) : null;
|
|
160
|
+
}
|
|
161
|
+
if (_core.isCommentBodyLink.call(void 0, inline)) {
|
|
162
|
+
const href = _nullishCoalesce(_core.toAbsoluteUrl.call(void 0, inline.url), () => ( inline.url));
|
|
163
|
+
return /* @__PURE__ */ _react2.default.createElement(
|
|
164
|
+
Components.Link,
|
|
165
|
+
{
|
|
166
|
+
key: `lb-comment-body-link-${inlineIndex}`,
|
|
167
|
+
element: inline,
|
|
168
|
+
href
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
if (_core.isCommentBodyText.call(void 0, inline)) {
|
|
173
|
+
return /* @__PURE__ */ _react2.default.createElement(
|
|
174
|
+
Components.Text,
|
|
175
|
+
{
|
|
176
|
+
key: `lb-comment-body-text-${inlineIndex}`,
|
|
177
|
+
element: inline
|
|
178
|
+
}
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
});
|
|
183
|
+
return /* @__PURE__ */ _react2.default.createElement(Components.Paragraph, { key: `lb-comment-body-paragraph-${index}` }, children);
|
|
184
|
+
}
|
|
185
|
+
default:
|
|
186
|
+
console.warn(
|
|
187
|
+
`Unsupported comment body block type: "${JSON.stringify(block.type)}"`
|
|
188
|
+
);
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
return /* @__PURE__ */ _react2.default.createElement(Components.Container, { key: "lb-comment-body-container" }, blocks);
|
|
193
|
+
}
|
|
194
|
+
var baseStyles = {
|
|
195
|
+
paragraph: {
|
|
196
|
+
fontSize: "14px"
|
|
197
|
+
},
|
|
198
|
+
strong: {
|
|
199
|
+
fontWeight: 500
|
|
200
|
+
},
|
|
201
|
+
code: {
|
|
202
|
+
fontFamily: 'ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Mono", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Consolas", "Courier New", monospace',
|
|
203
|
+
backgroundColor: "rgba(0,0,0,0.05)",
|
|
204
|
+
border: "solid 1px rgba(0,0,0,0.1)",
|
|
205
|
+
borderRadius: "4px"
|
|
206
|
+
},
|
|
207
|
+
mention: {
|
|
208
|
+
color: "blue"
|
|
209
|
+
},
|
|
210
|
+
link: {
|
|
211
|
+
textDecoration: "underline"
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
async function convertCommentBodyAsHtml(body, options) {
|
|
215
|
+
const styles = { ...baseStyles, ..._optionalChain([options, 'optionalAccess', _4 => _4.styles]) };
|
|
216
|
+
const htmlBody = await _core.stringifyCommentBody.call(void 0, body, {
|
|
217
|
+
format: "html",
|
|
218
|
+
resolveUsers: _optionalChain([options, 'optionalAccess', _5 => _5.resolveUsers]),
|
|
219
|
+
elements: {
|
|
220
|
+
// NOTE: using prettier-ignore to preserve template strings
|
|
221
|
+
paragraph: ({ children }) => (
|
|
222
|
+
// prettier-ignore
|
|
223
|
+
children ? _core.html`<p style="${toInlineCSSString(styles.paragraph)}">${_core.htmlSafe.call(void 0, children)}</p>` : children
|
|
224
|
+
),
|
|
225
|
+
text: ({ element }) => {
|
|
226
|
+
let children = element.text;
|
|
227
|
+
if (!children) {
|
|
228
|
+
return children;
|
|
229
|
+
}
|
|
230
|
+
if (element.bold) {
|
|
231
|
+
children = _core.html`<strong style="${toInlineCSSString(styles.strong)}">${children}</strong>`;
|
|
232
|
+
}
|
|
233
|
+
if (element.italic) {
|
|
234
|
+
children = _core.html`<em>${children}</em>`;
|
|
235
|
+
}
|
|
236
|
+
if (element.strikethrough) {
|
|
237
|
+
children = _core.html`<s>${children}</s>`;
|
|
238
|
+
}
|
|
239
|
+
if (element.code) {
|
|
240
|
+
children = _core.html`<code style="${toInlineCSSString(styles.code)}">${children}</code>`;
|
|
241
|
+
}
|
|
242
|
+
return children;
|
|
243
|
+
},
|
|
244
|
+
link: ({ element, href }) => {
|
|
245
|
+
return _core.html`<a href="${href}" target="_blank" rel="noopener noreferrer" style="${toInlineCSSString(styles.link)}">${_nullishCoalesce(element.text, () => ( element.url))}</a>`;
|
|
246
|
+
},
|
|
247
|
+
mention: ({ element, user }) => {
|
|
248
|
+
return _core.html`<span data-mention style="${toInlineCSSString(styles.mention)}">@${_nullishCoalesce(_optionalChain([user, 'optionalAccess', _6 => _6.name]), () => ( element.id))}</span>`;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
return htmlBody;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// src/comment-with-body.ts
|
|
256
|
+
var isCommentDataWithBody = (comment) => {
|
|
257
|
+
return comment.body !== void 0 && comment.deletedAt === void 0;
|
|
258
|
+
};
|
|
259
|
+
function filterCommentsWithBody(comments) {
|
|
260
|
+
const commentsWithBody = [];
|
|
261
|
+
for (const comment of comments) {
|
|
262
|
+
if (isCommentDataWithBody(comment)) {
|
|
263
|
+
commentsWithBody.push(comment);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return commentsWithBody;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// src/lib/batch-users-resolver.ts
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
// src/lib/warning.ts
|
|
273
|
+
var createDevelopmentWarning = (condition, ...args) => {
|
|
274
|
+
let hasWarned = false;
|
|
275
|
+
if (process.env.NODE_ENV !== "production") {
|
|
276
|
+
return () => {
|
|
277
|
+
if (!hasWarned && (typeof condition === "function" ? condition() : condition)) {
|
|
278
|
+
console.warn(...args);
|
|
279
|
+
hasWarned = true;
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
} else {
|
|
283
|
+
return () => {
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
// src/lib/batch-users-resolver.ts
|
|
289
|
+
var BatchUsersResolver = class {
|
|
290
|
+
constructor(resolveUsers) {
|
|
291
|
+
this.resolveUsers = async (args) => {
|
|
292
|
+
if (this.isResolved) {
|
|
293
|
+
this.warnAsAlreadyResolved();
|
|
294
|
+
return void 0;
|
|
295
|
+
}
|
|
296
|
+
for (const userId of args.userIds) {
|
|
297
|
+
this.usersById.set(userId, void 0);
|
|
298
|
+
}
|
|
299
|
+
await this.resolvePromise;
|
|
300
|
+
return args.userIds.map((userId) => this.usersById.get(userId));
|
|
301
|
+
};
|
|
302
|
+
const { promise, resolve } = _core.Promise_withResolvers.call(void 0, );
|
|
303
|
+
this.isResolved = false;
|
|
304
|
+
this.markAsResolved = resolve;
|
|
305
|
+
this.resolvePromise = promise;
|
|
306
|
+
this.primeResolveUsersFn = resolveUsers;
|
|
307
|
+
this.usersById = /* @__PURE__ */ new Map();
|
|
308
|
+
this.warnAsAlreadyResolved = createDevelopmentWarning(
|
|
309
|
+
true,
|
|
310
|
+
"Batch users resolver promise already resolved. It can only resolve once."
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
async resolve() {
|
|
314
|
+
if (this.isResolved) {
|
|
315
|
+
this.warnAsAlreadyResolved();
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const userIds = Array.from(this.usersById.keys());
|
|
319
|
+
const users = await _optionalChain([this, 'access', _7 => _7.primeResolveUsersFn, 'optionalCall', _8 => _8({ userIds })]);
|
|
320
|
+
for (const [index, userId] of userIds.entries()) {
|
|
321
|
+
const user = _optionalChain([users, 'optionalAccess', _9 => _9[index]]);
|
|
322
|
+
this.usersById.set(userId, user);
|
|
323
|
+
}
|
|
324
|
+
this.isResolved = true;
|
|
325
|
+
this.markAsResolved();
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
function createBatchUsersResolver({
|
|
329
|
+
resolveUsers,
|
|
330
|
+
callerName
|
|
331
|
+
}) {
|
|
332
|
+
const warnIfNoResolveUsers = createDevelopmentWarning(
|
|
333
|
+
() => !resolveUsers,
|
|
334
|
+
`Set "resolveUsers" option in "${callerName}" to specify users info`
|
|
335
|
+
);
|
|
336
|
+
const batchUsersResolver = new BatchUsersResolver(resolveUsers);
|
|
337
|
+
const resolve = async () => {
|
|
338
|
+
warnIfNoResolveUsers();
|
|
339
|
+
await batchUsersResolver.resolve();
|
|
340
|
+
};
|
|
341
|
+
return {
|
|
342
|
+
resolveUsers: batchUsersResolver.resolveUsers,
|
|
343
|
+
resolve
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// src/thread-notification.tsx
|
|
348
|
+
var getUnreadComments = ({
|
|
349
|
+
comments,
|
|
350
|
+
inboxNotification,
|
|
351
|
+
userId
|
|
352
|
+
}) => {
|
|
353
|
+
const commentsWithBody = filterCommentsWithBody(comments);
|
|
354
|
+
const readAt = inboxNotification.readAt;
|
|
355
|
+
return commentsWithBody.filter((c) => c.userId !== userId).filter(
|
|
356
|
+
(c) => readAt ? c.createdAt > readAt && c.createdAt <= inboxNotification.notifiedAt : c.createdAt <= inboxNotification.notifiedAt
|
|
357
|
+
);
|
|
358
|
+
};
|
|
359
|
+
var getLastUnreadCommentWithMention = ({
|
|
360
|
+
comments,
|
|
361
|
+
mentionedUserId
|
|
362
|
+
}) => {
|
|
363
|
+
return _nullishCoalesce(Array.from(comments).reverse().filter((c) => c.userId !== mentionedUserId).find((c) => {
|
|
364
|
+
const mentionedUserIds = _core.getMentionedIdsFromCommentBody.call(void 0, c.body);
|
|
365
|
+
return mentionedUserIds.includes(mentionedUserId);
|
|
366
|
+
}), () => ( null));
|
|
367
|
+
};
|
|
368
|
+
var extractThreadNotificationData = async ({
|
|
369
|
+
client,
|
|
370
|
+
event
|
|
371
|
+
}) => {
|
|
372
|
+
const { threadId, roomId, userId, inboxNotificationId } = event.data;
|
|
373
|
+
const [thread, inboxNotification] = await Promise.all([
|
|
374
|
+
client.getThread({ roomId, threadId }),
|
|
375
|
+
client.getInboxNotification({ inboxNotificationId, userId })
|
|
376
|
+
]);
|
|
377
|
+
const unreadComments = getUnreadComments({
|
|
378
|
+
comments: thread.comments,
|
|
379
|
+
inboxNotification,
|
|
380
|
+
userId
|
|
381
|
+
});
|
|
382
|
+
if (unreadComments.length <= 0) {
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
const lastUnreadCommentWithMention = getLastUnreadCommentWithMention({
|
|
386
|
+
comments: unreadComments,
|
|
387
|
+
mentionedUserId: userId
|
|
388
|
+
});
|
|
389
|
+
if (lastUnreadCommentWithMention !== null) {
|
|
390
|
+
return { type: "unreadMention", comment: lastUnreadCommentWithMention };
|
|
391
|
+
}
|
|
392
|
+
return {
|
|
393
|
+
type: "unreadReplies",
|
|
394
|
+
comments: unreadComments
|
|
395
|
+
};
|
|
396
|
+
};
|
|
397
|
+
var makeCommentEmailBaseData = ({
|
|
398
|
+
roomInfo,
|
|
399
|
+
comment
|
|
400
|
+
}) => {
|
|
401
|
+
const url = _optionalChain([roomInfo, 'optionalAccess', _10 => _10.url]) ? _core.generateCommentUrl.call(void 0, {
|
|
402
|
+
roomUrl: _optionalChain([roomInfo, 'optionalAccess', _11 => _11.url]),
|
|
403
|
+
commentId: comment.id
|
|
404
|
+
}) : void 0;
|
|
405
|
+
return {
|
|
406
|
+
id: comment.id,
|
|
407
|
+
userId: comment.userId,
|
|
408
|
+
threadId: comment.threadId,
|
|
409
|
+
roomId: comment.roomId,
|
|
410
|
+
createdAt: comment.createdAt,
|
|
411
|
+
url,
|
|
412
|
+
rawBody: comment.body
|
|
413
|
+
};
|
|
414
|
+
};
|
|
415
|
+
var prepareThreadNotificationEmailBaseData = async ({
|
|
416
|
+
client,
|
|
417
|
+
event,
|
|
418
|
+
options = {}
|
|
419
|
+
}) => {
|
|
420
|
+
const { roomId } = event.data;
|
|
421
|
+
const roomInfo = options.resolveRoomInfo ? await options.resolveRoomInfo({ roomId }) : void 0;
|
|
422
|
+
const resolvedRoomInfo = {
|
|
423
|
+
...roomInfo,
|
|
424
|
+
name: _nullishCoalesce(_optionalChain([roomInfo, 'optionalAccess', _12 => _12.name]), () => ( roomId))
|
|
425
|
+
};
|
|
426
|
+
const data = await extractThreadNotificationData({ client, event });
|
|
427
|
+
if (data === null) {
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
switch (data.type) {
|
|
431
|
+
case "unreadMention":
|
|
432
|
+
return {
|
|
433
|
+
type: "unreadMention",
|
|
434
|
+
comment: makeCommentEmailBaseData({
|
|
435
|
+
roomInfo,
|
|
436
|
+
comment: data.comment
|
|
437
|
+
}),
|
|
438
|
+
roomInfo: resolvedRoomInfo
|
|
439
|
+
};
|
|
440
|
+
case "unreadReplies": {
|
|
441
|
+
return {
|
|
442
|
+
type: "unreadReplies",
|
|
443
|
+
comments: data.comments.map(
|
|
444
|
+
(comment) => makeCommentEmailBaseData({ roomInfo, comment })
|
|
445
|
+
),
|
|
446
|
+
roomInfo: resolvedRoomInfo
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
var resolveAuthorsInfo = async ({
|
|
452
|
+
comments,
|
|
453
|
+
resolveUsers
|
|
454
|
+
}) => {
|
|
455
|
+
const resolvedAuthors = /* @__PURE__ */ new Map();
|
|
456
|
+
if (!resolveUsers) {
|
|
457
|
+
return resolvedAuthors;
|
|
458
|
+
}
|
|
459
|
+
const userIds = comments.map((c) => c.userId);
|
|
460
|
+
const users = await resolveUsers({ userIds });
|
|
461
|
+
for (const [index, userId] of userIds.entries()) {
|
|
462
|
+
const user = _optionalChain([users, 'optionalAccess', _13 => _13[index]]);
|
|
463
|
+
if (user) {
|
|
464
|
+
resolvedAuthors.set(userId, user);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
return resolvedAuthors;
|
|
468
|
+
};
|
|
469
|
+
async function prepareThreadNotificationEmailAsHtml(client, event, options = {}) {
|
|
470
|
+
const data = await prepareThreadNotificationEmailBaseData({
|
|
471
|
+
client,
|
|
472
|
+
event,
|
|
473
|
+
options: { resolveRoomInfo: options.resolveRoomInfo }
|
|
474
|
+
});
|
|
475
|
+
if (data === null) {
|
|
476
|
+
return null;
|
|
477
|
+
}
|
|
478
|
+
const batchUsersResolver = createBatchUsersResolver({
|
|
479
|
+
resolveUsers: options.resolveUsers,
|
|
480
|
+
callerName: "prepareThreadNotificationEmailAsHtml"
|
|
481
|
+
});
|
|
482
|
+
switch (data.type) {
|
|
483
|
+
case "unreadMention": {
|
|
484
|
+
const { comment } = data;
|
|
485
|
+
const authorsInfoPromise = resolveAuthorsInfo({
|
|
486
|
+
comments: [comment],
|
|
487
|
+
resolveUsers: batchUsersResolver.resolveUsers
|
|
488
|
+
});
|
|
489
|
+
const commentBodyPromise = convertCommentBodyAsHtml(comment.rawBody, {
|
|
490
|
+
resolveUsers: batchUsersResolver.resolveUsers,
|
|
491
|
+
styles: options.styles
|
|
492
|
+
});
|
|
493
|
+
await batchUsersResolver.resolve();
|
|
494
|
+
const [authorsInfo, commentBodyHtml] = await Promise.all([
|
|
495
|
+
authorsInfoPromise,
|
|
496
|
+
commentBodyPromise
|
|
497
|
+
]);
|
|
498
|
+
const authorInfo = authorsInfo.get(comment.userId);
|
|
499
|
+
return {
|
|
500
|
+
type: "unreadMention",
|
|
501
|
+
comment: {
|
|
502
|
+
id: comment.id,
|
|
503
|
+
threadId: comment.threadId,
|
|
504
|
+
roomId: comment.roomId,
|
|
505
|
+
author: authorInfo ? { id: comment.userId, info: authorInfo } : { id: comment.userId, info: { name: comment.userId } },
|
|
506
|
+
createdAt: comment.createdAt,
|
|
507
|
+
url: comment.url,
|
|
508
|
+
htmlBody: commentBodyHtml
|
|
509
|
+
},
|
|
510
|
+
roomInfo: data.roomInfo
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
case "unreadReplies": {
|
|
514
|
+
const { comments } = data;
|
|
515
|
+
const authorsInfoPromise = resolveAuthorsInfo({
|
|
516
|
+
comments,
|
|
517
|
+
resolveUsers: batchUsersResolver.resolveUsers
|
|
518
|
+
});
|
|
519
|
+
const commentBodiesPromises = comments.map(
|
|
520
|
+
(c) => convertCommentBodyAsHtml(c.rawBody, {
|
|
521
|
+
resolveUsers: batchUsersResolver.resolveUsers,
|
|
522
|
+
styles: options.styles
|
|
523
|
+
})
|
|
524
|
+
);
|
|
525
|
+
await batchUsersResolver.resolve();
|
|
526
|
+
const [authorsInfo, ...commentBodies] = await Promise.all([
|
|
527
|
+
authorsInfoPromise,
|
|
528
|
+
...commentBodiesPromises
|
|
529
|
+
]);
|
|
530
|
+
return {
|
|
531
|
+
type: "unreadReplies",
|
|
532
|
+
comments: comments.map((comment, index) => {
|
|
533
|
+
const authorInfo = authorsInfo.get(comment.userId);
|
|
534
|
+
const commentBodyHtml = commentBodies[index];
|
|
535
|
+
return {
|
|
536
|
+
id: comment.id,
|
|
537
|
+
threadId: comment.threadId,
|
|
538
|
+
roomId: comment.roomId,
|
|
539
|
+
author: authorInfo ? { id: comment.userId, info: authorInfo } : { id: comment.userId, info: { name: comment.userId } },
|
|
540
|
+
createdAt: comment.createdAt,
|
|
541
|
+
url: comment.url,
|
|
542
|
+
htmlBody: _nullishCoalesce(commentBodyHtml, () => ( ""))
|
|
543
|
+
};
|
|
544
|
+
}),
|
|
545
|
+
roomInfo: data.roomInfo
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
async function prepareThreadNotificationEmailAsReact(client, event, options = {}) {
|
|
551
|
+
const data = await prepareThreadNotificationEmailBaseData({
|
|
552
|
+
client,
|
|
553
|
+
event,
|
|
554
|
+
options: { resolveRoomInfo: options.resolveRoomInfo }
|
|
555
|
+
});
|
|
556
|
+
if (data === null) {
|
|
557
|
+
return null;
|
|
558
|
+
}
|
|
559
|
+
const batchUsersResolver = createBatchUsersResolver({
|
|
560
|
+
resolveUsers: options.resolveUsers,
|
|
561
|
+
callerName: "prepareThreadNotificationEmailAsReact"
|
|
562
|
+
});
|
|
563
|
+
switch (data.type) {
|
|
564
|
+
case "unreadMention": {
|
|
565
|
+
const { comment } = data;
|
|
566
|
+
const authorsInfoPromise = resolveAuthorsInfo({
|
|
567
|
+
comments: [comment],
|
|
568
|
+
resolveUsers: batchUsersResolver.resolveUsers
|
|
569
|
+
});
|
|
570
|
+
const commentBodyPromise = convertCommentBodyAsReact(comment.rawBody, {
|
|
571
|
+
resolveUsers: batchUsersResolver.resolveUsers,
|
|
572
|
+
components: options.components
|
|
573
|
+
});
|
|
574
|
+
await batchUsersResolver.resolve();
|
|
575
|
+
const [authorsInfo, commentBodyReact] = await Promise.all([
|
|
576
|
+
authorsInfoPromise,
|
|
577
|
+
commentBodyPromise
|
|
578
|
+
]);
|
|
579
|
+
const authorInfo = authorsInfo.get(comment.userId);
|
|
580
|
+
return {
|
|
581
|
+
type: "unreadMention",
|
|
582
|
+
comment: {
|
|
583
|
+
id: comment.id,
|
|
584
|
+
threadId: comment.threadId,
|
|
585
|
+
roomId: comment.roomId,
|
|
586
|
+
author: authorInfo ? { id: comment.userId, info: authorInfo } : { id: comment.userId, info: { name: comment.userId } },
|
|
587
|
+
createdAt: comment.createdAt,
|
|
588
|
+
url: comment.url,
|
|
589
|
+
reactBody: commentBodyReact
|
|
590
|
+
},
|
|
591
|
+
roomInfo: data.roomInfo
|
|
592
|
+
};
|
|
593
|
+
}
|
|
594
|
+
case "unreadReplies": {
|
|
595
|
+
const { comments } = data;
|
|
596
|
+
const authorsInfoPromise = resolveAuthorsInfo({
|
|
597
|
+
comments,
|
|
598
|
+
resolveUsers: batchUsersResolver.resolveUsers
|
|
599
|
+
});
|
|
600
|
+
const commentBodiesPromises = comments.map(
|
|
601
|
+
(c) => convertCommentBodyAsReact(c.rawBody, {
|
|
602
|
+
resolveUsers: batchUsersResolver.resolveUsers,
|
|
603
|
+
components: options.components
|
|
604
|
+
})
|
|
605
|
+
);
|
|
606
|
+
await batchUsersResolver.resolve();
|
|
607
|
+
const [authorsInfo, ...commentBodies] = await Promise.all([
|
|
608
|
+
authorsInfoPromise,
|
|
609
|
+
...commentBodiesPromises
|
|
610
|
+
]);
|
|
611
|
+
return {
|
|
612
|
+
type: "unreadReplies",
|
|
613
|
+
comments: comments.map((comment, index) => {
|
|
614
|
+
const authorInfo = authorsInfo.get(comment.userId);
|
|
615
|
+
const commentBodyReact = commentBodies[index];
|
|
616
|
+
return {
|
|
617
|
+
id: comment.id,
|
|
618
|
+
threadId: comment.threadId,
|
|
619
|
+
roomId: comment.roomId,
|
|
620
|
+
author: authorInfo ? { id: comment.userId, info: authorInfo } : { id: comment.userId, info: { name: comment.userId } },
|
|
621
|
+
createdAt: comment.createdAt,
|
|
622
|
+
url: comment.url,
|
|
623
|
+
reactBody: _nullishCoalesce(commentBodyReact, () => ( null))
|
|
624
|
+
};
|
|
625
|
+
}),
|
|
626
|
+
roomInfo: data.roomInfo
|
|
627
|
+
};
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// src/index.ts
|
|
633
|
+
_core.detectDupes.call(void 0, PKG_NAME, PKG_VERSION, PKG_FORMAT);
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
exports.prepareThreadNotificationEmailAsHtml = prepareThreadNotificationEmailAsHtml; exports.prepareThreadNotificationEmailAsReact = prepareThreadNotificationEmailAsReact;
|
|
638
|
+
//# sourceMappingURL=index.js.map
|