@liveblocks/core 3.1.1 → 3.1.2

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/dist/index.cjs CHANGED
@@ -6,7 +6,7 @@ var __export = (target, all) => {
6
6
 
7
7
  // src/version.ts
8
8
  var PKG_NAME = "@liveblocks/core";
9
- var PKG_VERSION = "3.1.1";
9
+ var PKG_VERSION = "3.1.2";
10
10
  var PKG_FORMAT = "cjs";
11
11
 
12
12
  // src/dupe-detection.ts
@@ -1087,6 +1087,9 @@ function quote(input) {
1087
1087
  }
1088
1088
 
1089
1089
  // src/lib/url.ts
1090
+ var PLACEHOLDER_BASE_URL = "https://localhost:9999";
1091
+ var ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/;
1092
+ var TRAILING_SLASH_URL_REGEX = /\/(?:(?:\?|#).*)?$/;
1090
1093
  function toURLSearchParams(params) {
1091
1094
  const result = new URLSearchParams();
1092
1095
  for (const [key, value] of Object.entries(params)) {
@@ -1108,6 +1111,53 @@ function url(strings, ...values2) {
1108
1111
  (result, str, i) => result + encodeURIComponent(_nullishCoalesce(values2[i - 1], () => ( ""))) + str
1109
1112
  );
1110
1113
  }
1114
+ function sanitizeUrl(url2) {
1115
+ if (url2.startsWith("www.")) {
1116
+ url2 = "https://" + url2;
1117
+ }
1118
+ try {
1119
+ const isAbsolute = ABSOLUTE_URL_REGEX.test(url2);
1120
+ const urlObject = new URL(
1121
+ url2,
1122
+ isAbsolute ? void 0 : PLACEHOLDER_BASE_URL
1123
+ );
1124
+ if (urlObject.protocol !== "http:" && urlObject.protocol !== "https:") {
1125
+ return null;
1126
+ }
1127
+ const hasTrailingSlash = TRAILING_SLASH_URL_REGEX.test(url2);
1128
+ const sanitizedUrl = (
1129
+ // 1. Origin, only for absolute URLs
1130
+ (isAbsolute ? urlObject.origin : "") + // 2. Pathname, with a trailing slash if the original URL had one
1131
+ (urlObject.pathname === "/" ? (
1132
+ // 2.a. Domain-only URLs, they always have their pathname set to "/"
1133
+ hasTrailingSlash ? "/" : ""
1134
+ ) : (
1135
+ // 2.b. URLs with a path
1136
+ hasTrailingSlash && !urlObject.pathname.endsWith("/") ? urlObject.pathname + "/" : urlObject.pathname
1137
+ )) + // 3. Search params
1138
+ urlObject.search + // 4. Hash
1139
+ urlObject.hash
1140
+ );
1141
+ return sanitizedUrl !== "" ? sanitizedUrl : null;
1142
+ } catch (e4) {
1143
+ return null;
1144
+ }
1145
+ }
1146
+ function generateUrl(url2, params, hash) {
1147
+ const isAbsolute = ABSOLUTE_URL_REGEX.test(url2);
1148
+ const urlObject = new URL(url2, isAbsolute ? void 0 : PLACEHOLDER_BASE_URL);
1149
+ if (params !== void 0) {
1150
+ for (const [param, value] of Object.entries(params)) {
1151
+ if (value) {
1152
+ urlObject.searchParams.set(param, String(value));
1153
+ }
1154
+ }
1155
+ }
1156
+ if (!urlObject.hash && hash !== void 0) {
1157
+ urlObject.hash = `#${hash}`;
1158
+ }
1159
+ return isAbsolute ? urlObject.href : urlObject.href.replace(PLACEHOLDER_BASE_URL, "");
1160
+ }
1111
1161
 
1112
1162
  // src/api-client.ts
1113
1163
  function createApiClient({
@@ -2099,7 +2149,7 @@ var HttpClient = class {
2099
2149
  let body;
2100
2150
  try {
2101
2151
  body = await response.json();
2102
- } catch (e4) {
2152
+ } catch (e5) {
2103
2153
  body = {};
2104
2154
  }
2105
2155
  return body;
@@ -3228,7 +3278,7 @@ var ManagedSocket = class {
3228
3278
  getStatus() {
3229
3279
  try {
3230
3280
  return toNewConnectionStatus(this.#machine);
3231
- } catch (e5) {
3281
+ } catch (e6) {
3232
3282
  return "initial";
3233
3283
  }
3234
3284
  }
@@ -9973,14 +10023,6 @@ var MarkdownSafeString = class {
9973
10023
  function markdown(strings, ...values2) {
9974
10024
  return new MarkdownSafeString(strings, values2);
9975
10025
  }
9976
- function toAbsoluteUrl(url2) {
9977
- if (url2.startsWith("http://") || url2.startsWith("https://")) {
9978
- return url2;
9979
- } else if (url2.startsWith("www.")) {
9980
- return "https://" + url2;
9981
- }
9982
- return;
9983
- }
9984
10026
  var stringifyCommentBodyPlainElements = {
9985
10027
  paragraph: ({ children }) => children,
9986
10028
  text: ({ element }) => element.text,
@@ -10076,11 +10118,22 @@ async function stringifyCommentBody(body, options) {
10076
10118
  ] : [];
10077
10119
  }
10078
10120
  if (isCommentBodyLink(inline)) {
10121
+ const href = sanitizeUrl(inline.url);
10122
+ if (href === null) {
10123
+ return [
10124
+ elements.text(
10125
+ {
10126
+ element: { text: _nullishCoalesce(inline.text, () => ( inline.url)) }
10127
+ },
10128
+ inlineIndex
10129
+ )
10130
+ ];
10131
+ }
10079
10132
  return [
10080
10133
  elements.link(
10081
10134
  {
10082
10135
  element: inline,
10083
- href: _nullishCoalesce(toAbsoluteUrl(inline.url), () => ( inline.url))
10136
+ href
10084
10137
  },
10085
10138
  inlineIndex
10086
10139
  )
@@ -10105,22 +10158,6 @@ async function stringifyCommentBody(body, options) {
10105
10158
  return blocks.join(separator);
10106
10159
  }
10107
10160
 
10108
- // src/comments/comment-url.ts
10109
- var PLACEHOLDER_BASE_URL = "https://localhost:9999";
10110
- var ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/;
10111
- function generateCommentUrl({
10112
- roomUrl,
10113
- commentId
10114
- }) {
10115
- const isAbsolute = ABSOLUTE_URL_REGEX.test(roomUrl);
10116
- const urlObject = new URL(
10117
- roomUrl,
10118
- isAbsolute ? void 0 : PLACEHOLDER_BASE_URL
10119
- );
10120
- urlObject.hash = `#${commentId}`;
10121
- return isAbsolute ? urlObject.href : urlObject.href.replace(PLACEHOLDER_BASE_URL, "");
10122
- }
10123
-
10124
10161
  // src/crdts/utils.ts
10125
10162
  function toPlainLson(lson) {
10126
10163
  if (lson instanceof LiveObject) {
@@ -10715,5 +10752,5 @@ detectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);
10715
10752
 
10716
10753
 
10717
10754
 
10718
- exports.ClientMsgCode = ClientMsgCode; exports.CrdtType = CrdtType; exports.DefaultMap = DefaultMap; exports.Deque = Deque; exports.DerivedSignal = DerivedSignal; exports.HttpError = HttpError; exports.LiveList = LiveList; exports.LiveMap = LiveMap; exports.LiveObject = LiveObject; exports.LiveblocksError = LiveblocksError; exports.MutableSignal = MutableSignal; exports.OpCode = OpCode; exports.Permission = Permission; exports.Promise_withResolvers = Promise_withResolvers; exports.ServerMsgCode = ServerMsgCode; exports.Signal = Signal; exports.SortedList = SortedList; exports.TextEditorType = TextEditorType; exports.WebsocketCloseCodes = WebsocketCloseCodes; exports.ackOp = ackOp; exports.asPos = asPos; exports.assert = assert; exports.assertNever = assertNever; exports.autoRetry = autoRetry; exports.b64decode = b64decode; exports.batch = batch; exports.checkBounds = checkBounds; exports.chunk = chunk; exports.cloneLson = cloneLson; exports.compactObject = compactObject; exports.console = fancy_console_exports; exports.convertToCommentData = convertToCommentData; exports.convertToCommentUserReaction = convertToCommentUserReaction; exports.convertToInboxNotificationData = convertToInboxNotificationData; exports.convertToSubscriptionData = convertToSubscriptionData; exports.convertToThreadData = convertToThreadData; exports.convertToUserSubscriptionData = convertToUserSubscriptionData; exports.createClient = createClient; exports.createCommentAttachmentId = createCommentAttachmentId; exports.createCommentId = createCommentId; exports.createInboxNotificationId = createInboxNotificationId; exports.createManagedPool = createManagedPool; exports.createNotificationSettings = createNotificationSettings; exports.createThreadId = createThreadId; exports.defineAiTool = defineAiTool; exports.deprecate = deprecate; exports.deprecateIf = deprecateIf; exports.detectDupes = detectDupes; exports.entries = entries; exports.errorIf = errorIf; exports.freeze = freeze; exports.generateCommentUrl = generateCommentUrl; exports.getMentionsFromCommentBody = getMentionsFromCommentBody; exports.getSubscriptionKey = getSubscriptionKey; exports.html = html; exports.htmlSafe = htmlSafe; exports.isChildCrdt = isChildCrdt; exports.isCommentBodyLink = isCommentBodyLink; exports.isCommentBodyMention = isCommentBodyMention; exports.isCommentBodyText = isCommentBodyText; exports.isJsonArray = isJsonArray; exports.isJsonObject = isJsonObject; exports.isJsonScalar = isJsonScalar; exports.isLiveNode = isLiveNode; exports.isNotificationChannelEnabled = isNotificationChannelEnabled; exports.isPlainObject = isPlainObject; exports.isRootCrdt = isRootCrdt; exports.isStartsWithOperator = isStartsWithOperator; exports.kInternal = kInternal; exports.keys = keys; exports.legacy_patchImmutableObject = legacy_patchImmutableObject; exports.lsonToJson = lsonToJson; exports.makeAbortController = makeAbortController; exports.makeEventSource = makeEventSource; exports.makePoller = makePoller; exports.makePosition = makePosition; exports.mapValues = mapValues; exports.memoizeOnSuccess = memoizeOnSuccess; exports.nanoid = nanoid; exports.nn = nn; exports.objectToQuery = objectToQuery; exports.patchLiveObjectKey = patchLiveObjectKey; exports.patchNotificationSettings = patchNotificationSettings; exports.raise = raise; exports.resolveUsersInCommentBody = resolveUsersInCommentBody; exports.shallow = shallow; exports.shallow2 = shallow2; exports.stableStringify = stableStringify; exports.stringifyCommentBody = stringifyCommentBody; exports.throwUsageError = throwUsageError; exports.toAbsoluteUrl = toAbsoluteUrl; exports.toPlainLson = toPlainLson; exports.tryParseJson = tryParseJson; exports.url = url; exports.urljoin = urljoin; exports.wait = wait; exports.withTimeout = withTimeout;
10755
+ exports.ClientMsgCode = ClientMsgCode; exports.CrdtType = CrdtType; exports.DefaultMap = DefaultMap; exports.Deque = Deque; exports.DerivedSignal = DerivedSignal; exports.HttpError = HttpError; exports.LiveList = LiveList; exports.LiveMap = LiveMap; exports.LiveObject = LiveObject; exports.LiveblocksError = LiveblocksError; exports.MutableSignal = MutableSignal; exports.OpCode = OpCode; exports.Permission = Permission; exports.Promise_withResolvers = Promise_withResolvers; exports.ServerMsgCode = ServerMsgCode; exports.Signal = Signal; exports.SortedList = SortedList; exports.TextEditorType = TextEditorType; exports.WebsocketCloseCodes = WebsocketCloseCodes; exports.ackOp = ackOp; exports.asPos = asPos; exports.assert = assert; exports.assertNever = assertNever; exports.autoRetry = autoRetry; exports.b64decode = b64decode; exports.batch = batch; exports.checkBounds = checkBounds; exports.chunk = chunk; exports.cloneLson = cloneLson; exports.compactObject = compactObject; exports.console = fancy_console_exports; exports.convertToCommentData = convertToCommentData; exports.convertToCommentUserReaction = convertToCommentUserReaction; exports.convertToInboxNotificationData = convertToInboxNotificationData; exports.convertToSubscriptionData = convertToSubscriptionData; exports.convertToThreadData = convertToThreadData; exports.convertToUserSubscriptionData = convertToUserSubscriptionData; exports.createClient = createClient; exports.createCommentAttachmentId = createCommentAttachmentId; exports.createCommentId = createCommentId; exports.createInboxNotificationId = createInboxNotificationId; exports.createManagedPool = createManagedPool; exports.createNotificationSettings = createNotificationSettings; exports.createThreadId = createThreadId; exports.defineAiTool = defineAiTool; exports.deprecate = deprecate; exports.deprecateIf = deprecateIf; exports.detectDupes = detectDupes; exports.entries = entries; exports.errorIf = errorIf; exports.freeze = freeze; exports.generateUrl = generateUrl; exports.getMentionsFromCommentBody = getMentionsFromCommentBody; exports.getSubscriptionKey = getSubscriptionKey; exports.html = html; exports.htmlSafe = htmlSafe; exports.isChildCrdt = isChildCrdt; exports.isCommentBodyLink = isCommentBodyLink; exports.isCommentBodyMention = isCommentBodyMention; exports.isCommentBodyText = isCommentBodyText; exports.isJsonArray = isJsonArray; exports.isJsonObject = isJsonObject; exports.isJsonScalar = isJsonScalar; exports.isLiveNode = isLiveNode; exports.isNotificationChannelEnabled = isNotificationChannelEnabled; exports.isPlainObject = isPlainObject; exports.isRootCrdt = isRootCrdt; exports.isStartsWithOperator = isStartsWithOperator; exports.kInternal = kInternal; exports.keys = keys; exports.legacy_patchImmutableObject = legacy_patchImmutableObject; exports.lsonToJson = lsonToJson; exports.makeAbortController = makeAbortController; exports.makeEventSource = makeEventSource; exports.makePoller = makePoller; exports.makePosition = makePosition; exports.mapValues = mapValues; exports.memoizeOnSuccess = memoizeOnSuccess; exports.nanoid = nanoid; exports.nn = nn; exports.objectToQuery = objectToQuery; exports.patchLiveObjectKey = patchLiveObjectKey; exports.patchNotificationSettings = patchNotificationSettings; exports.raise = raise; exports.resolveUsersInCommentBody = resolveUsersInCommentBody; exports.sanitizeUrl = sanitizeUrl; exports.shallow = shallow; exports.shallow2 = shallow2; exports.stableStringify = stableStringify; exports.stringifyCommentBody = stringifyCommentBody; exports.throwUsageError = throwUsageError; exports.toPlainLson = toPlainLson; exports.tryParseJson = tryParseJson; exports.url = url; exports.urljoin = urljoin; exports.wait = wait; exports.withTimeout = withTimeout;
10719
10756
  //# sourceMappingURL=index.cjs.map