@liveblocks/core 2.9.3-emails1 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -381,6 +381,7 @@ declare type LiveListUpdateDelta = {
381
381
  } | {
382
382
  type: "delete";
383
383
  index: number;
384
+ deletedItem: Lson;
384
385
  } | {
385
386
  type: "move";
386
387
  index: number;
@@ -935,6 +936,7 @@ declare function makeEventSource<T>(): EventSource<T>;
935
936
  declare type BatchStore<O, I> = Observable<void> & {
936
937
  get: (input: I) => Promise<void>;
937
938
  getState: (input: I) => AsyncResult<O> | undefined;
939
+ invalidate: (inputs?: I[]) => void;
938
940
  };
939
941
 
940
942
  /**
@@ -2370,6 +2372,7 @@ declare type EnterOptions<P extends JsonObject = DP, S extends LsonObject = DS>
2370
2372
  */
2371
2373
  declare type PrivateClientApi<U extends BaseUserMeta, M extends BaseMetadata> = {
2372
2374
  readonly currentUserIdStore: Store<string | null>;
2375
+ readonly mentionSuggestionsCache: Map<string, string[]>;
2373
2376
  readonly resolveMentionSuggestions: ClientOptions<U>["resolveMentionSuggestions"];
2374
2377
  readonly usersStore: BatchStore<U["info"] | undefined, string>;
2375
2378
  readonly roomsInfoStore: BatchStore<DRI | undefined, string>;
@@ -2519,6 +2522,43 @@ declare type Client<U extends BaseUserMeta = DU, M extends BaseMetadata = DM> =
2519
2522
  * Call this whenever you log out a user in your application.
2520
2523
  */
2521
2524
  logout(): void;
2525
+ /**
2526
+ * Advanced APIs related to the resolvers.
2527
+ */
2528
+ resolvers: {
2529
+ /**
2530
+ * Invalidate some or all users that were previously cached by `resolveUsers`.
2531
+ *
2532
+ * @example
2533
+ * // Invalidate all users
2534
+ * client.resolvers.invalidateUsers();
2535
+ *
2536
+ * @example
2537
+ * // Invalidate specific users
2538
+ * client.resolvers.invalidateUsers(["user-1", "user-2"]);
2539
+ */
2540
+ invalidateUsers(userIds?: string[]): void;
2541
+ /**
2542
+ * Invalidate some or all rooms info that were previously cached by `resolveRoomsInfo`.
2543
+ *
2544
+ * @example
2545
+ * // Invalidate all rooms
2546
+ * client.resolvers.invalidateRoomsInfo();
2547
+ *
2548
+ * @example
2549
+ * // Invalidate specific rooms
2550
+ * client.resolvers.invalidateRoomsInfo(["room-1", "room-2"]);
2551
+ */
2552
+ invalidateRoomsInfo(roomIds?: string[]): void;
2553
+ /**
2554
+ * Invalidate all mention suggestions cached by `resolveMentionSuggestions`.
2555
+ *
2556
+ * @example
2557
+ * // Invalidate all mention suggestions
2558
+ * client.resolvers.invalidateMentionSuggestions();
2559
+ */
2560
+ invalidateMentionSuggestions(): void;
2561
+ };
2522
2562
  /**
2523
2563
  * @private
2524
2564
  *
@@ -2665,44 +2705,16 @@ declare type StringifyCommentBodyOptions<U extends BaseUserMeta = DU> = {
2665
2705
  */
2666
2706
  resolveUsers?: (args: ResolveUsersArgs) => OptionalPromise<(U["info"] | undefined)[] | undefined>;
2667
2707
  };
2668
- declare function isCommentBodyText(element: CommentBodyElement): element is CommentBodyText;
2669
- declare function isCommentBodyMention(element: CommentBodyElement): element is CommentBodyMention;
2670
- declare function isCommentBodyLink(element: CommentBodyElement): element is CommentBodyLink;
2671
2708
  /**
2672
2709
  * Get an array of each user's ID that has been mentioned in a `CommentBody`.
2673
2710
  */
2674
2711
  declare function getMentionedIdsFromCommentBody(body: CommentBody): string[];
2675
- declare function resolveUsersInCommentBody<U extends BaseUserMeta>(body: CommentBody, resolveUsers?: (args: ResolveUsersArgs) => OptionalPromise<(U["info"] | undefined)[] | undefined>): Promise<Map<string, U["info"]>>;
2676
- declare function htmlSafe(value: string): HtmlSafeString;
2677
- declare class HtmlSafeString {
2678
- private _strings;
2679
- private _values;
2680
- constructor(strings: readonly string[], values: readonly (string | string[] | HtmlSafeString | HtmlSafeString[])[]);
2681
- toString(): string;
2682
- }
2683
- /**
2684
- * Build an HTML string from a template literal where the values are escaped.
2685
- * Nested calls are supported and won't be escaped.
2686
- */
2687
- declare function html(strings: TemplateStringsArray, ...values: (string | string[] | HtmlSafeString | HtmlSafeString[])[]): string;
2688
- /**
2689
- * Helper function to convert a URL (relative or absolute) to an absolute URL.
2690
- *
2691
- * @param url The URL to convert to an absolute URL (relative or absolute).
2692
- * @returns The absolute URL or undefined if the URL is invalid.
2693
- */
2694
- declare function toAbsoluteUrl(url: string): string | undefined;
2695
2712
  /**
2696
2713
  * Convert a `CommentBody` into either a plain string,
2697
2714
  * Markdown, HTML, or a custom format.
2698
2715
  */
2699
2716
  declare function stringifyCommentBody(body: CommentBody, options?: StringifyCommentBodyOptions<BaseUserMeta>): Promise<string>;
2700
2717
 
2701
- declare function generateCommentUrl({ roomUrl, commentId, }: {
2702
- roomUrl: string;
2703
- commentId: string;
2704
- }): string;
2705
-
2706
2718
  /**
2707
2719
  * Converts a plain comment data object (usually returned by the API) to a comment data object that can be used by the client.
2708
2720
  * This is necessary because the plain data object stores dates as ISO strings, but the client expects them as Date objects.
@@ -2815,15 +2827,6 @@ declare class StopRetrying extends Error {
2815
2827
 
2816
2828
  declare function chunk<T>(array: T[], size: number): T[][];
2817
2829
 
2818
- /**
2819
- * Drop-in replacement for the ES2024 Promise.withResolvers() API.
2820
- */
2821
- declare function Promise_withResolvers<T>(): {
2822
- promise: Promise<T>;
2823
- resolve: (value: T) => void;
2824
- reject: (reason: unknown) => void;
2825
- };
2826
-
2827
2830
  declare function createThreadId(): string;
2828
2831
  declare function createCommentId(): string;
2829
2832
  declare function createInboxNotificationId(): string;
@@ -3213,4 +3216,4 @@ declare type EnsureJson<T> = T extends Json ? T : T extends Array<infer I> ? (En
3213
3216
  [K in keyof T as EnsureJson<T[K]> extends never ? never : K]: EnsureJson<T[K]>;
3214
3217
  };
3215
3218
 
3216
- export { type AckOp, type ActivityData, type AsyncError, type AsyncLoading, type AsyncResult, type AsyncSuccess, type BaseActivitiesData, type BaseAuthResult, type BaseMetadata, type BaseRoomInfo, type BaseUserMeta, type Brand, type BroadcastEventClientMsg, type BroadcastOptions, type BroadcastedEventServerMsg, type Client, type ClientMsg, ClientMsgCode, type ClientOptions, type CommentAttachment, type CommentBody, type CommentBodyBlockElement, type CommentBodyElement, type CommentBodyInlineElement, type CommentBodyLink, type CommentBodyLinkElementArgs, type CommentBodyMention, type CommentBodyMentionElementArgs, type CommentBodyParagraph, type CommentBodyParagraphElementArgs, type CommentBodyText, type CommentBodyTextElementArgs, type CommentData, type CommentDataPlain, type CommentLocalAttachment, type CommentMixedAttachment, type CommentReaction, type CommentUserReaction, type CommentUserReactionPlain, CommentsApiError, type CommentsEventServerMsg, CrdtType, type CreateListOp, type CreateMapOp, type CreateObjectOp, type CreateOp, type CreateRegisterOp, type CustomAuthenticationResult, type DAD, type DE, type DM, type DP, type DRI, type DS, type DU, type Delegates, type DeleteCrdtOp, type DeleteObjectKeyOp, DevToolsTreeNode as DevTools, protocol as DevToolsMsg, type DistributiveOmit, type EnsureJson, type EnterOptions, type EventSource, type FetchStorageClientMsg, type FetchYDocClientMsg, type GetThreadsOptions, type History, type HistoryVersion, type IUserInfo, type IWebSocket, type IWebSocketCloseEvent, type IWebSocketEvent, type IWebSocketInstance, type IWebSocketMessageEvent, type IdTuple, type Immutable, type InboxNotificationCustomData, type InboxNotificationCustomDataPlain, type InboxNotificationData, type InboxNotificationDataPlain, type InboxNotificationDeleteInfo, type InboxNotificationTextMentionData, type InboxNotificationTextMentionDataPlain, type InboxNotificationThreadData, type InboxNotificationThreadDataPlain, type InitialDocumentStateServerMsg, type Json, type JsonArray, type JsonObject, type JsonScalar, type KDAD, LiveList, type LiveListUpdate, LiveMap, type LiveMapUpdate, type LiveNode, LiveObject, type LiveObjectUpdate, type LiveStructure, LiveblocksError, type LostConnectionEvent, type Lson, type LsonObject, type NoInfr, type NodeMap, NotificationsApiError, type Observable, type Op, OpCode, type OpaqueClient, type OpaqueRoom, type OptionalPromise, type OptionalTupleUnless, type OthersEvent, type ParentToChildNodeMap, type PartialUnless, type Patchable, type PlainLson, type PlainLsonFields, type PlainLsonList, type PlainLsonMap, type PlainLsonObject, type PrivateClientApi, type PrivateRoomApi, Promise_withResolvers, type QueryMetadata, type QueryParams, type RejectedStorageOpServerMsg, type Resolve, type ResolveMentionSuggestionsArgs, type ResolveRoomsInfoArgs, type ResolveUsersArgs, type Room, type RoomEventMessage, type RoomNotificationSettings, type RoomStateServerMsg, type SerializedChild, type SerializedCrdt, type SerializedList, type SerializedMap, type SerializedObject, type SerializedRegister, type SerializedRootObject, type ServerMsg, ServerMsgCode, type SetParentKeyOp, type Status, StopRetrying, type StorageStatus, type StorageUpdate, type Store, type StringifyCommentBodyElements, type StringifyCommentBodyOptions, type ThreadData, type ThreadDataPlain, type ThreadDataWithDeleteInfo, type ThreadDeleteInfo, type ToImmutable, type ToJson, type URLSafeString, type UnsubscribeCallback, type UpdateObjectOp, type UpdatePresenceClientMsg, type UpdatePresenceServerMsg, type UpdateStorageClientMsg, type UpdateStorageServerMsg, type UpdateYDocClientMsg, type UploadAttachmentOptions, type User, type UserJoinServerMsg, type UserLeftServerMsg, WebsocketCloseCodes, type YDocUpdateServerMsg, ackOp, asPos, assert, assertNever, autoRetry, b64decode, chunk, cloneLson, compactObject, fancyConsole as console, convertToCommentData, convertToCommentUserReaction, convertToInboxNotificationData, convertToThreadData, createClient, createCommentId, createInboxNotificationId, createStore, createThreadId, deprecate, deprecateIf, detectDupes, errorIf, freeze, generateCommentUrl, getMentionedIdsFromCommentBody, html, htmlSafe, isChildCrdt, isCommentBodyLink, isCommentBodyMention, isCommentBodyText, isJsonArray, isJsonObject, isJsonScalar, isLiveNode, isPlainObject, isRootCrdt, kInternal, legacy_patchImmutableObject, lsonToJson, makeEventSource, makePoller, makePosition, mapValues, memoizeOnSuccess, nanoid, nn, objectToQuery, patchLiveObjectKey, raise, resolveUsersInCommentBody, shallow, stringify, stringifyCommentBody, throwUsageError, toAbsoluteUrl, toPlainLson, tryParseJson, url, urljoin, wait, withTimeout };
3219
+ export { type AckOp, type ActivityData, type AsyncError, type AsyncLoading, type AsyncResult, type AsyncSuccess, type BaseActivitiesData, type BaseAuthResult, type BaseMetadata, type BaseRoomInfo, type BaseUserMeta, type Brand, type BroadcastEventClientMsg, type BroadcastOptions, type BroadcastedEventServerMsg, type Client, type ClientMsg, ClientMsgCode, type ClientOptions, type CommentAttachment, type CommentBody, type CommentBodyBlockElement, type CommentBodyElement, type CommentBodyInlineElement, type CommentBodyLink, type CommentBodyLinkElementArgs, type CommentBodyMention, type CommentBodyMentionElementArgs, type CommentBodyParagraph, type CommentBodyParagraphElementArgs, type CommentBodyText, type CommentBodyTextElementArgs, type CommentData, type CommentDataPlain, type CommentLocalAttachment, type CommentMixedAttachment, type CommentReaction, type CommentUserReaction, type CommentUserReactionPlain, CommentsApiError, type CommentsEventServerMsg, CrdtType, type CreateListOp, type CreateMapOp, type CreateObjectOp, type CreateOp, type CreateRegisterOp, type CustomAuthenticationResult, type DAD, type DE, type DM, type DP, type DRI, type DS, type DU, type Delegates, type DeleteCrdtOp, type DeleteObjectKeyOp, DevToolsTreeNode as DevTools, protocol as DevToolsMsg, type DistributiveOmit, type EnsureJson, type EnterOptions, type EventSource, type FetchStorageClientMsg, type FetchYDocClientMsg, type GetThreadsOptions, type History, type HistoryVersion, type IUserInfo, type IWebSocket, type IWebSocketCloseEvent, type IWebSocketEvent, type IWebSocketInstance, type IWebSocketMessageEvent, type IdTuple, type Immutable, type InboxNotificationCustomData, type InboxNotificationCustomDataPlain, type InboxNotificationData, type InboxNotificationDataPlain, type InboxNotificationDeleteInfo, type InboxNotificationTextMentionData, type InboxNotificationTextMentionDataPlain, type InboxNotificationThreadData, type InboxNotificationThreadDataPlain, type InitialDocumentStateServerMsg, type Json, type JsonArray, type JsonObject, type JsonScalar, type KDAD, LiveList, type LiveListUpdate, LiveMap, type LiveMapUpdate, type LiveNode, LiveObject, type LiveObjectUpdate, type LiveStructure, LiveblocksError, type LostConnectionEvent, type Lson, type LsonObject, type NoInfr, type NodeMap, NotificationsApiError, type Observable, type Op, OpCode, type OpaqueClient, type OpaqueRoom, type OptionalPromise, type OptionalTupleUnless, type OthersEvent, type ParentToChildNodeMap, type PartialUnless, type Patchable, type PlainLson, type PlainLsonFields, type PlainLsonList, type PlainLsonMap, type PlainLsonObject, type PrivateClientApi, type PrivateRoomApi, type QueryMetadata, type QueryParams, type RejectedStorageOpServerMsg, type Resolve, type ResolveMentionSuggestionsArgs, type ResolveRoomsInfoArgs, type ResolveUsersArgs, type Room, type RoomEventMessage, type RoomNotificationSettings, type RoomStateServerMsg, type SerializedChild, type SerializedCrdt, type SerializedList, type SerializedMap, type SerializedObject, type SerializedRegister, type SerializedRootObject, type ServerMsg, ServerMsgCode, type SetParentKeyOp, type Status, StopRetrying, type StorageStatus, type StorageUpdate, type Store, type StringifyCommentBodyElements, type StringifyCommentBodyOptions, type ThreadData, type ThreadDataPlain, type ThreadDataWithDeleteInfo, type ThreadDeleteInfo, type ToImmutable, type ToJson, type URLSafeString, type UnsubscribeCallback, type UpdateObjectOp, type UpdatePresenceClientMsg, type UpdatePresenceServerMsg, type UpdateStorageClientMsg, type UpdateStorageServerMsg, type UpdateYDocClientMsg, type UploadAttachmentOptions, type User, type UserJoinServerMsg, type UserLeftServerMsg, WebsocketCloseCodes, type YDocUpdateServerMsg, ackOp, asPos, assert, assertNever, autoRetry, b64decode, chunk, cloneLson, compactObject, fancyConsole as console, convertToCommentData, convertToCommentUserReaction, convertToInboxNotificationData, convertToThreadData, createClient, createCommentId, createInboxNotificationId, createStore, createThreadId, deprecate, deprecateIf, detectDupes, errorIf, freeze, getMentionedIdsFromCommentBody, isChildCrdt, isJsonArray, isJsonObject, isJsonScalar, isLiveNode, isPlainObject, isRootCrdt, kInternal, legacy_patchImmutableObject, lsonToJson, makeEventSource, makePoller, makePosition, mapValues, memoizeOnSuccess, nanoid, nn, objectToQuery, patchLiveObjectKey, raise, shallow, stringify, stringifyCommentBody, throwUsageError, toPlainLson, tryParseJson, url, urljoin, wait, withTimeout };
package/dist/index.d.ts CHANGED
@@ -381,6 +381,7 @@ declare type LiveListUpdateDelta = {
381
381
  } | {
382
382
  type: "delete";
383
383
  index: number;
384
+ deletedItem: Lson;
384
385
  } | {
385
386
  type: "move";
386
387
  index: number;
@@ -935,6 +936,7 @@ declare function makeEventSource<T>(): EventSource<T>;
935
936
  declare type BatchStore<O, I> = Observable<void> & {
936
937
  get: (input: I) => Promise<void>;
937
938
  getState: (input: I) => AsyncResult<O> | undefined;
939
+ invalidate: (inputs?: I[]) => void;
938
940
  };
939
941
 
940
942
  /**
@@ -2370,6 +2372,7 @@ declare type EnterOptions<P extends JsonObject = DP, S extends LsonObject = DS>
2370
2372
  */
2371
2373
  declare type PrivateClientApi<U extends BaseUserMeta, M extends BaseMetadata> = {
2372
2374
  readonly currentUserIdStore: Store<string | null>;
2375
+ readonly mentionSuggestionsCache: Map<string, string[]>;
2373
2376
  readonly resolveMentionSuggestions: ClientOptions<U>["resolveMentionSuggestions"];
2374
2377
  readonly usersStore: BatchStore<U["info"] | undefined, string>;
2375
2378
  readonly roomsInfoStore: BatchStore<DRI | undefined, string>;
@@ -2519,6 +2522,43 @@ declare type Client<U extends BaseUserMeta = DU, M extends BaseMetadata = DM> =
2519
2522
  * Call this whenever you log out a user in your application.
2520
2523
  */
2521
2524
  logout(): void;
2525
+ /**
2526
+ * Advanced APIs related to the resolvers.
2527
+ */
2528
+ resolvers: {
2529
+ /**
2530
+ * Invalidate some or all users that were previously cached by `resolveUsers`.
2531
+ *
2532
+ * @example
2533
+ * // Invalidate all users
2534
+ * client.resolvers.invalidateUsers();
2535
+ *
2536
+ * @example
2537
+ * // Invalidate specific users
2538
+ * client.resolvers.invalidateUsers(["user-1", "user-2"]);
2539
+ */
2540
+ invalidateUsers(userIds?: string[]): void;
2541
+ /**
2542
+ * Invalidate some or all rooms info that were previously cached by `resolveRoomsInfo`.
2543
+ *
2544
+ * @example
2545
+ * // Invalidate all rooms
2546
+ * client.resolvers.invalidateRoomsInfo();
2547
+ *
2548
+ * @example
2549
+ * // Invalidate specific rooms
2550
+ * client.resolvers.invalidateRoomsInfo(["room-1", "room-2"]);
2551
+ */
2552
+ invalidateRoomsInfo(roomIds?: string[]): void;
2553
+ /**
2554
+ * Invalidate all mention suggestions cached by `resolveMentionSuggestions`.
2555
+ *
2556
+ * @example
2557
+ * // Invalidate all mention suggestions
2558
+ * client.resolvers.invalidateMentionSuggestions();
2559
+ */
2560
+ invalidateMentionSuggestions(): void;
2561
+ };
2522
2562
  /**
2523
2563
  * @private
2524
2564
  *
@@ -2665,44 +2705,16 @@ declare type StringifyCommentBodyOptions<U extends BaseUserMeta = DU> = {
2665
2705
  */
2666
2706
  resolveUsers?: (args: ResolveUsersArgs) => OptionalPromise<(U["info"] | undefined)[] | undefined>;
2667
2707
  };
2668
- declare function isCommentBodyText(element: CommentBodyElement): element is CommentBodyText;
2669
- declare function isCommentBodyMention(element: CommentBodyElement): element is CommentBodyMention;
2670
- declare function isCommentBodyLink(element: CommentBodyElement): element is CommentBodyLink;
2671
2708
  /**
2672
2709
  * Get an array of each user's ID that has been mentioned in a `CommentBody`.
2673
2710
  */
2674
2711
  declare function getMentionedIdsFromCommentBody(body: CommentBody): string[];
2675
- declare function resolveUsersInCommentBody<U extends BaseUserMeta>(body: CommentBody, resolveUsers?: (args: ResolveUsersArgs) => OptionalPromise<(U["info"] | undefined)[] | undefined>): Promise<Map<string, U["info"]>>;
2676
- declare function htmlSafe(value: string): HtmlSafeString;
2677
- declare class HtmlSafeString {
2678
- private _strings;
2679
- private _values;
2680
- constructor(strings: readonly string[], values: readonly (string | string[] | HtmlSafeString | HtmlSafeString[])[]);
2681
- toString(): string;
2682
- }
2683
- /**
2684
- * Build an HTML string from a template literal where the values are escaped.
2685
- * Nested calls are supported and won't be escaped.
2686
- */
2687
- declare function html(strings: TemplateStringsArray, ...values: (string | string[] | HtmlSafeString | HtmlSafeString[])[]): string;
2688
- /**
2689
- * Helper function to convert a URL (relative or absolute) to an absolute URL.
2690
- *
2691
- * @param url The URL to convert to an absolute URL (relative or absolute).
2692
- * @returns The absolute URL or undefined if the URL is invalid.
2693
- */
2694
- declare function toAbsoluteUrl(url: string): string | undefined;
2695
2712
  /**
2696
2713
  * Convert a `CommentBody` into either a plain string,
2697
2714
  * Markdown, HTML, or a custom format.
2698
2715
  */
2699
2716
  declare function stringifyCommentBody(body: CommentBody, options?: StringifyCommentBodyOptions<BaseUserMeta>): Promise<string>;
2700
2717
 
2701
- declare function generateCommentUrl({ roomUrl, commentId, }: {
2702
- roomUrl: string;
2703
- commentId: string;
2704
- }): string;
2705
-
2706
2718
  /**
2707
2719
  * Converts a plain comment data object (usually returned by the API) to a comment data object that can be used by the client.
2708
2720
  * This is necessary because the plain data object stores dates as ISO strings, but the client expects them as Date objects.
@@ -2815,15 +2827,6 @@ declare class StopRetrying extends Error {
2815
2827
 
2816
2828
  declare function chunk<T>(array: T[], size: number): T[][];
2817
2829
 
2818
- /**
2819
- * Drop-in replacement for the ES2024 Promise.withResolvers() API.
2820
- */
2821
- declare function Promise_withResolvers<T>(): {
2822
- promise: Promise<T>;
2823
- resolve: (value: T) => void;
2824
- reject: (reason: unknown) => void;
2825
- };
2826
-
2827
2830
  declare function createThreadId(): string;
2828
2831
  declare function createCommentId(): string;
2829
2832
  declare function createInboxNotificationId(): string;
@@ -3213,4 +3216,4 @@ declare type EnsureJson<T> = T extends Json ? T : T extends Array<infer I> ? (En
3213
3216
  [K in keyof T as EnsureJson<T[K]> extends never ? never : K]: EnsureJson<T[K]>;
3214
3217
  };
3215
3218
 
3216
- export { type AckOp, type ActivityData, type AsyncError, type AsyncLoading, type AsyncResult, type AsyncSuccess, type BaseActivitiesData, type BaseAuthResult, type BaseMetadata, type BaseRoomInfo, type BaseUserMeta, type Brand, type BroadcastEventClientMsg, type BroadcastOptions, type BroadcastedEventServerMsg, type Client, type ClientMsg, ClientMsgCode, type ClientOptions, type CommentAttachment, type CommentBody, type CommentBodyBlockElement, type CommentBodyElement, type CommentBodyInlineElement, type CommentBodyLink, type CommentBodyLinkElementArgs, type CommentBodyMention, type CommentBodyMentionElementArgs, type CommentBodyParagraph, type CommentBodyParagraphElementArgs, type CommentBodyText, type CommentBodyTextElementArgs, type CommentData, type CommentDataPlain, type CommentLocalAttachment, type CommentMixedAttachment, type CommentReaction, type CommentUserReaction, type CommentUserReactionPlain, CommentsApiError, type CommentsEventServerMsg, CrdtType, type CreateListOp, type CreateMapOp, type CreateObjectOp, type CreateOp, type CreateRegisterOp, type CustomAuthenticationResult, type DAD, type DE, type DM, type DP, type DRI, type DS, type DU, type Delegates, type DeleteCrdtOp, type DeleteObjectKeyOp, DevToolsTreeNode as DevTools, protocol as DevToolsMsg, type DistributiveOmit, type EnsureJson, type EnterOptions, type EventSource, type FetchStorageClientMsg, type FetchYDocClientMsg, type GetThreadsOptions, type History, type HistoryVersion, type IUserInfo, type IWebSocket, type IWebSocketCloseEvent, type IWebSocketEvent, type IWebSocketInstance, type IWebSocketMessageEvent, type IdTuple, type Immutable, type InboxNotificationCustomData, type InboxNotificationCustomDataPlain, type InboxNotificationData, type InboxNotificationDataPlain, type InboxNotificationDeleteInfo, type InboxNotificationTextMentionData, type InboxNotificationTextMentionDataPlain, type InboxNotificationThreadData, type InboxNotificationThreadDataPlain, type InitialDocumentStateServerMsg, type Json, type JsonArray, type JsonObject, type JsonScalar, type KDAD, LiveList, type LiveListUpdate, LiveMap, type LiveMapUpdate, type LiveNode, LiveObject, type LiveObjectUpdate, type LiveStructure, LiveblocksError, type LostConnectionEvent, type Lson, type LsonObject, type NoInfr, type NodeMap, NotificationsApiError, type Observable, type Op, OpCode, type OpaqueClient, type OpaqueRoom, type OptionalPromise, type OptionalTupleUnless, type OthersEvent, type ParentToChildNodeMap, type PartialUnless, type Patchable, type PlainLson, type PlainLsonFields, type PlainLsonList, type PlainLsonMap, type PlainLsonObject, type PrivateClientApi, type PrivateRoomApi, Promise_withResolvers, type QueryMetadata, type QueryParams, type RejectedStorageOpServerMsg, type Resolve, type ResolveMentionSuggestionsArgs, type ResolveRoomsInfoArgs, type ResolveUsersArgs, type Room, type RoomEventMessage, type RoomNotificationSettings, type RoomStateServerMsg, type SerializedChild, type SerializedCrdt, type SerializedList, type SerializedMap, type SerializedObject, type SerializedRegister, type SerializedRootObject, type ServerMsg, ServerMsgCode, type SetParentKeyOp, type Status, StopRetrying, type StorageStatus, type StorageUpdate, type Store, type StringifyCommentBodyElements, type StringifyCommentBodyOptions, type ThreadData, type ThreadDataPlain, type ThreadDataWithDeleteInfo, type ThreadDeleteInfo, type ToImmutable, type ToJson, type URLSafeString, type UnsubscribeCallback, type UpdateObjectOp, type UpdatePresenceClientMsg, type UpdatePresenceServerMsg, type UpdateStorageClientMsg, type UpdateStorageServerMsg, type UpdateYDocClientMsg, type UploadAttachmentOptions, type User, type UserJoinServerMsg, type UserLeftServerMsg, WebsocketCloseCodes, type YDocUpdateServerMsg, ackOp, asPos, assert, assertNever, autoRetry, b64decode, chunk, cloneLson, compactObject, fancyConsole as console, convertToCommentData, convertToCommentUserReaction, convertToInboxNotificationData, convertToThreadData, createClient, createCommentId, createInboxNotificationId, createStore, createThreadId, deprecate, deprecateIf, detectDupes, errorIf, freeze, generateCommentUrl, getMentionedIdsFromCommentBody, html, htmlSafe, isChildCrdt, isCommentBodyLink, isCommentBodyMention, isCommentBodyText, isJsonArray, isJsonObject, isJsonScalar, isLiveNode, isPlainObject, isRootCrdt, kInternal, legacy_patchImmutableObject, lsonToJson, makeEventSource, makePoller, makePosition, mapValues, memoizeOnSuccess, nanoid, nn, objectToQuery, patchLiveObjectKey, raise, resolveUsersInCommentBody, shallow, stringify, stringifyCommentBody, throwUsageError, toAbsoluteUrl, toPlainLson, tryParseJson, url, urljoin, wait, withTimeout };
3219
+ export { type AckOp, type ActivityData, type AsyncError, type AsyncLoading, type AsyncResult, type AsyncSuccess, type BaseActivitiesData, type BaseAuthResult, type BaseMetadata, type BaseRoomInfo, type BaseUserMeta, type Brand, type BroadcastEventClientMsg, type BroadcastOptions, type BroadcastedEventServerMsg, type Client, type ClientMsg, ClientMsgCode, type ClientOptions, type CommentAttachment, type CommentBody, type CommentBodyBlockElement, type CommentBodyElement, type CommentBodyInlineElement, type CommentBodyLink, type CommentBodyLinkElementArgs, type CommentBodyMention, type CommentBodyMentionElementArgs, type CommentBodyParagraph, type CommentBodyParagraphElementArgs, type CommentBodyText, type CommentBodyTextElementArgs, type CommentData, type CommentDataPlain, type CommentLocalAttachment, type CommentMixedAttachment, type CommentReaction, type CommentUserReaction, type CommentUserReactionPlain, CommentsApiError, type CommentsEventServerMsg, CrdtType, type CreateListOp, type CreateMapOp, type CreateObjectOp, type CreateOp, type CreateRegisterOp, type CustomAuthenticationResult, type DAD, type DE, type DM, type DP, type DRI, type DS, type DU, type Delegates, type DeleteCrdtOp, type DeleteObjectKeyOp, DevToolsTreeNode as DevTools, protocol as DevToolsMsg, type DistributiveOmit, type EnsureJson, type EnterOptions, type EventSource, type FetchStorageClientMsg, type FetchYDocClientMsg, type GetThreadsOptions, type History, type HistoryVersion, type IUserInfo, type IWebSocket, type IWebSocketCloseEvent, type IWebSocketEvent, type IWebSocketInstance, type IWebSocketMessageEvent, type IdTuple, type Immutable, type InboxNotificationCustomData, type InboxNotificationCustomDataPlain, type InboxNotificationData, type InboxNotificationDataPlain, type InboxNotificationDeleteInfo, type InboxNotificationTextMentionData, type InboxNotificationTextMentionDataPlain, type InboxNotificationThreadData, type InboxNotificationThreadDataPlain, type InitialDocumentStateServerMsg, type Json, type JsonArray, type JsonObject, type JsonScalar, type KDAD, LiveList, type LiveListUpdate, LiveMap, type LiveMapUpdate, type LiveNode, LiveObject, type LiveObjectUpdate, type LiveStructure, LiveblocksError, type LostConnectionEvent, type Lson, type LsonObject, type NoInfr, type NodeMap, NotificationsApiError, type Observable, type Op, OpCode, type OpaqueClient, type OpaqueRoom, type OptionalPromise, type OptionalTupleUnless, type OthersEvent, type ParentToChildNodeMap, type PartialUnless, type Patchable, type PlainLson, type PlainLsonFields, type PlainLsonList, type PlainLsonMap, type PlainLsonObject, type PrivateClientApi, type PrivateRoomApi, type QueryMetadata, type QueryParams, type RejectedStorageOpServerMsg, type Resolve, type ResolveMentionSuggestionsArgs, type ResolveRoomsInfoArgs, type ResolveUsersArgs, type Room, type RoomEventMessage, type RoomNotificationSettings, type RoomStateServerMsg, type SerializedChild, type SerializedCrdt, type SerializedList, type SerializedMap, type SerializedObject, type SerializedRegister, type SerializedRootObject, type ServerMsg, ServerMsgCode, type SetParentKeyOp, type Status, StopRetrying, type StorageStatus, type StorageUpdate, type Store, type StringifyCommentBodyElements, type StringifyCommentBodyOptions, type ThreadData, type ThreadDataPlain, type ThreadDataWithDeleteInfo, type ThreadDeleteInfo, type ToImmutable, type ToJson, type URLSafeString, type UnsubscribeCallback, type UpdateObjectOp, type UpdatePresenceClientMsg, type UpdatePresenceServerMsg, type UpdateStorageClientMsg, type UpdateStorageServerMsg, type UpdateYDocClientMsg, type UploadAttachmentOptions, type User, type UserJoinServerMsg, type UserLeftServerMsg, WebsocketCloseCodes, type YDocUpdateServerMsg, ackOp, asPos, assert, assertNever, autoRetry, b64decode, chunk, cloneLson, compactObject, fancyConsole as console, convertToCommentData, convertToCommentUserReaction, convertToInboxNotificationData, convertToThreadData, createClient, createCommentId, createInboxNotificationId, createStore, createThreadId, deprecate, deprecateIf, detectDupes, errorIf, freeze, getMentionedIdsFromCommentBody, isChildCrdt, isJsonArray, isJsonObject, isJsonScalar, isLiveNode, isPlainObject, isRootCrdt, kInternal, legacy_patchImmutableObject, lsonToJson, makeEventSource, makePoller, makePosition, mapValues, memoizeOnSuccess, nanoid, nn, objectToQuery, patchLiveObjectKey, raise, shallow, stringify, stringifyCommentBody, throwUsageError, toPlainLson, tryParseJson, url, urljoin, wait, withTimeout };
package/dist/index.js 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 = "2.9.3-emails1";
9
+ var PKG_VERSION = "2.10.0";
10
10
  var PKG_FORMAT = "cjs";
11
11
 
12
12
  // src/dupe-detection.ts
@@ -1881,6 +1881,16 @@ function createBatchStore(batch) {
1881
1881
  cache.set(cacheKey, state);
1882
1882
  eventSource2.notify();
1883
1883
  }
1884
+ function invalidate(inputs) {
1885
+ if (Array.isArray(inputs)) {
1886
+ for (const input of inputs) {
1887
+ cache.delete(getCacheKey(input));
1888
+ }
1889
+ } else {
1890
+ cache.clear();
1891
+ }
1892
+ eventSource2.notify();
1893
+ }
1884
1894
  async function get(input) {
1885
1895
  const cacheKey = getCacheKey(input);
1886
1896
  if (cache.has(cacheKey)) {
@@ -1901,10 +1911,15 @@ function createBatchStore(batch) {
1901
1911
  const cacheKey = getCacheKey(input);
1902
1912
  return cache.get(cacheKey);
1903
1913
  }
1914
+ function _cacheKeys() {
1915
+ return [...cache.keys()];
1916
+ }
1904
1917
  return {
1905
1918
  ...eventSource2.observable,
1906
1919
  get,
1907
- getState
1920
+ getState,
1921
+ invalidate,
1922
+ _cacheKeys
1908
1923
  };
1909
1924
  }
1910
1925
 
@@ -2868,15 +2883,15 @@ var LiveList = class _LiveList extends AbstractCrdt {
2868
2883
  this._implicitlyDeletedItems.add(
2869
2884
  this._items[indexOfItemWithSamePosition]
2870
2885
  );
2871
- this._items.splice(indexOfItemWithSamePosition, 1);
2872
- delta.push(deleteDelta(indexOfItemWithSamePosition));
2886
+ const [prevNode] = this._items.splice(indexOfItemWithSamePosition, 1);
2887
+ delta.push(deleteDelta(indexOfItemWithSamePosition, prevNode));
2873
2888
  }
2874
- const previousIndex = this._items.indexOf(existingItem);
2889
+ const prevIndex = this._items.indexOf(existingItem);
2875
2890
  existingItem._setParentLink(this, op.parentKey);
2876
2891
  this._sortItems();
2877
2892
  const newIndex = this._items.indexOf(existingItem);
2878
- if (newIndex !== previousIndex) {
2879
- delta.push(moveDelta(previousIndex, newIndex, existingItem));
2893
+ if (newIndex !== prevIndex) {
2894
+ delta.push(moveDelta(prevIndex, newIndex, existingItem));
2880
2895
  }
2881
2896
  return {
2882
2897
  modified: delta.length > 0 ? makeUpdate(this, delta) : false,
@@ -3105,11 +3120,11 @@ var LiveList = class _LiveList extends AbstractCrdt {
3105
3120
  modified: false
3106
3121
  };
3107
3122
  }
3108
- this._items.splice(indexToDelete, 1);
3123
+ const [previousNode] = this._items.splice(indexToDelete, 1);
3109
3124
  this.invalidate();
3110
3125
  child._detach();
3111
3126
  return {
3112
- modified: makeUpdate(this, [deleteDelta(indexToDelete)]),
3127
+ modified: makeUpdate(this, [deleteDelta(indexToDelete, previousNode)]),
3113
3128
  reverse
3114
3129
  };
3115
3130
  }
@@ -3387,7 +3402,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
3387
3402
  }
3388
3403
  const item = this._items[index];
3389
3404
  item._detach();
3390
- this._items.splice(index, 1);
3405
+ const [prev] = this._items.splice(index, 1);
3391
3406
  this.invalidate();
3392
3407
  if (this._pool) {
3393
3408
  const childRecordId = item._id;
@@ -3395,7 +3410,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
3395
3410
  const storageUpdates = /* @__PURE__ */ new Map();
3396
3411
  storageUpdates.set(
3397
3412
  nn(this._id),
3398
- makeUpdate(this, [deleteDelta(index)])
3413
+ makeUpdate(this, [deleteDelta(index, prev)])
3399
3414
  );
3400
3415
  this._pool.dispatch(
3401
3416
  [
@@ -3429,7 +3444,7 @@ var LiveList = class _LiveList extends AbstractCrdt {
3429
3444
  reverseOps.push(
3430
3445
  ...item._toOps(nn(this._id), item._getParentKeyOrThrow())
3431
3446
  );
3432
- updateDelta.push(deleteDelta(0));
3447
+ updateDelta.push(deleteDelta(0, item));
3433
3448
  }
3434
3449
  }
3435
3450
  this._items = [];
@@ -3654,10 +3669,11 @@ function setDelta(index, item) {
3654
3669
  item: item instanceof LiveRegister ? item.data : item
3655
3670
  };
3656
3671
  }
3657
- function deleteDelta(index) {
3672
+ function deleteDelta(index, deletedNode) {
3658
3673
  return {
3674
+ type: "delete",
3659
3675
  index,
3660
- type: "delete"
3676
+ deletedItem: deletedNode instanceof LiveRegister ? deletedNode.data : deletedNode
3661
3677
  };
3662
3678
  }
3663
3679
  function insertDelta(index, item) {
@@ -3669,10 +3685,10 @@ function insertDelta(index, item) {
3669
3685
  }
3670
3686
  function moveDelta(previousIndex, index, item) {
3671
3687
  return {
3672
- index,
3673
3688
  type: "move",
3674
- previousIndex,
3675
- item: item instanceof LiveRegister ? item.data : item
3689
+ index,
3690
+ item: item instanceof LiveRegister ? item.data : item,
3691
+ previousIndex
3676
3692
  };
3677
3693
  }
3678
3694
  function HACK_addIntentAndDeletedIdToOperation(ops, deletedId) {
@@ -7329,6 +7345,9 @@ function createClient(options) {
7329
7345
  { delay: RESOLVE_USERS_BATCH_DELAY }
7330
7346
  );
7331
7347
  const usersStore = createBatchStore(batchedResolveUsers);
7348
+ function invalidateResolvedUsers(userIds) {
7349
+ usersStore.invalidate(userIds);
7350
+ }
7332
7351
  const resolveRoomsInfo = clientOptions.resolveRoomsInfo;
7333
7352
  const warnIfNoResolveRoomsInfo = createDevelopmentWarning(
7334
7353
  () => !resolveRoomsInfo,
@@ -7344,15 +7363,29 @@ function createClient(options) {
7344
7363
  { delay: RESOLVE_ROOMS_INFO_BATCH_DELAY }
7345
7364
  );
7346
7365
  const roomsInfoStore = createBatchStore(batchedResolveRoomsInfo);
7366
+ function invalidateResolvedRoomsInfo(roomIds) {
7367
+ roomsInfoStore.invalidate(roomIds);
7368
+ }
7369
+ const mentionSuggestionsCache = /* @__PURE__ */ new Map();
7370
+ function invalidateResolvedMentionSuggestions() {
7371
+ mentionSuggestionsCache.clear();
7372
+ }
7347
7373
  return Object.defineProperty(
7348
7374
  {
7349
7375
  enterRoom,
7350
7376
  getRoom,
7351
7377
  logout,
7352
7378
  ...httpClientLike,
7379
+ // Advanced resolvers APIs
7380
+ resolvers: {
7381
+ invalidateUsers: invalidateResolvedUsers,
7382
+ invalidateRoomsInfo: invalidateResolvedRoomsInfo,
7383
+ invalidateMentionSuggestions: invalidateResolvedMentionSuggestions
7384
+ },
7353
7385
  // Internal
7354
7386
  [kInternal]: {
7355
7387
  currentUserIdStore,
7388
+ mentionSuggestionsCache,
7356
7389
  resolveMentionSuggestions: clientOptions.resolveMentionSuggestions,
7357
7390
  usersStore,
7358
7391
  roomsInfoStore,
@@ -7730,22 +7763,6 @@ async function stringifyCommentBody(body, options) {
7730
7763
  return blocks.join(separator);
7731
7764
  }
7732
7765
 
7733
- // src/comments/comment-url.ts
7734
- var PLACEHOLDER_BASE_URL = "https://localhost:9999";
7735
- var ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/;
7736
- function generateCommentUrl({
7737
- roomUrl,
7738
- commentId
7739
- }) {
7740
- const isAbsolute = ABSOLUTE_URL_REGEX.test(roomUrl);
7741
- const urlObject = new URL(
7742
- roomUrl,
7743
- isAbsolute ? void 0 : PLACEHOLDER_BASE_URL
7744
- );
7745
- urlObject.hash = `#${commentId}`;
7746
- return isAbsolute ? urlObject.href : urlObject.href.replace(PLACEHOLDER_BASE_URL, "");
7747
- }
7748
-
7749
7766
  // src/crdts/utils.ts
7750
7767
  function toPlainLson(lson) {
7751
7768
  if (lson instanceof LiveObject) {
@@ -8261,14 +8278,5 @@ detectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);
8261
8278
 
8262
8279
 
8263
8280
 
8264
-
8265
-
8266
-
8267
-
8268
-
8269
-
8270
-
8271
-
8272
-
8273
- exports.ClientMsgCode = ClientMsgCode; exports.CommentsApiError = CommentsApiError; exports.CrdtType = CrdtType; exports.LiveList = LiveList; exports.LiveMap = LiveMap; exports.LiveObject = LiveObject; exports.NotificationsApiError = NotificationsApiError; exports.OpCode = OpCode; exports.Promise_withResolvers = Promise_withResolvers; exports.ServerMsgCode = ServerMsgCode; exports.StopRetrying = StopRetrying2; exports.WebsocketCloseCodes = WebsocketCloseCodes; exports.ackOp = ackOp; exports.asPos = asPos; exports.assert = assert; exports.assertNever = assertNever; exports.autoRetry = autoRetry; exports.b64decode = b64decode; exports.chunk = chunk; exports.cloneLson = cloneLson; exports.compactObject = compactObject; exports.console = fancy_console_exports; exports.convertToCommentData = convertToCommentData; exports.convertToCommentUserReaction = convertToCommentUserReaction; exports.convertToInboxNotificationData = convertToInboxNotificationData; exports.convertToThreadData = convertToThreadData; exports.createClient = createClient; exports.createCommentId = createCommentId; exports.createInboxNotificationId = createInboxNotificationId; exports.createStore = createStore; exports.createThreadId = createThreadId; exports.deprecate = deprecate; exports.deprecateIf = deprecateIf; exports.detectDupes = detectDupes; exports.errorIf = errorIf; exports.freeze = freeze; exports.generateCommentUrl = generateCommentUrl; exports.getMentionedIdsFromCommentBody = getMentionedIdsFromCommentBody; 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.isPlainObject = isPlainObject; exports.isRootCrdt = isRootCrdt; exports.kInternal = kInternal; exports.legacy_patchImmutableObject = legacy_patchImmutableObject; exports.lsonToJson = lsonToJson; 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.raise = raise; exports.resolveUsersInCommentBody = resolveUsersInCommentBody; exports.shallow = shallow; exports.stringify = stringify; 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;
8281
+ exports.ClientMsgCode = ClientMsgCode; exports.CommentsApiError = CommentsApiError; exports.CrdtType = CrdtType; exports.LiveList = LiveList; exports.LiveMap = LiveMap; exports.LiveObject = LiveObject; exports.NotificationsApiError = NotificationsApiError; exports.OpCode = OpCode; exports.ServerMsgCode = ServerMsgCode; exports.StopRetrying = StopRetrying2; exports.WebsocketCloseCodes = WebsocketCloseCodes; exports.ackOp = ackOp; exports.asPos = asPos; exports.assert = assert; exports.assertNever = assertNever; exports.autoRetry = autoRetry; exports.b64decode = b64decode; exports.chunk = chunk; exports.cloneLson = cloneLson; exports.compactObject = compactObject; exports.console = fancy_console_exports; exports.convertToCommentData = convertToCommentData; exports.convertToCommentUserReaction = convertToCommentUserReaction; exports.convertToInboxNotificationData = convertToInboxNotificationData; exports.convertToThreadData = convertToThreadData; exports.createClient = createClient; exports.createCommentId = createCommentId; exports.createInboxNotificationId = createInboxNotificationId; exports.createStore = createStore; exports.createThreadId = createThreadId; exports.deprecate = deprecate; exports.deprecateIf = deprecateIf; exports.detectDupes = detectDupes; exports.errorIf = errorIf; exports.freeze = freeze; exports.getMentionedIdsFromCommentBody = getMentionedIdsFromCommentBody; exports.isChildCrdt = isChildCrdt; exports.isJsonArray = isJsonArray; exports.isJsonObject = isJsonObject; exports.isJsonScalar = isJsonScalar; exports.isLiveNode = isLiveNode; exports.isPlainObject = isPlainObject; exports.isRootCrdt = isRootCrdt; exports.kInternal = kInternal; exports.legacy_patchImmutableObject = legacy_patchImmutableObject; exports.lsonToJson = lsonToJson; 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.raise = raise; exports.shallow = shallow; exports.stringify = stringify; exports.stringifyCommentBody = stringifyCommentBody; exports.throwUsageError = throwUsageError; exports.toPlainLson = toPlainLson; exports.tryParseJson = tryParseJson; exports.url = url; exports.urljoin = urljoin; exports.wait = wait; exports.withTimeout = withTimeout;
8274
8282
  //# sourceMappingURL=index.js.map