@unchainedshop/core-bookmarks 3.0.0-rc9 → 3.1.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/lib/db/BookmarksSchema.d.ts +3 -0
- package/lib/db/BookmarksSchema.d.ts.map +1 -0
- package/lib/db/BookmarksSchema.js +9 -0
- package/lib/db/BookmarksSchema.js.map +1 -0
- package/lib/module/configureBookmarksModule.d.ts +7 -8
- package/lib/module/configureBookmarksModule.d.ts.map +1 -1
- package/lib/module/configureBookmarksModule.js +1 -7
- package/lib/module/configureBookmarksModule.js.map +1 -1
- package/lib/service/bookmarkServices.d.ts +3 -0
- package/lib/service/bookmarkServices.d.ts.map +1 -0
- package/lib/service/bookmarkServices.js +5 -0
- package/lib/service/bookmarkServices.js.map +1 -0
- package/lib/service/migrateBookmarksService.d.ts +3 -0
- package/lib/service/migrateBookmarksService.d.ts.map +1 -0
- package/lib/service/migrateBookmarksService.js +26 -0
- package/lib/service/migrateBookmarksService.js.map +1 -0
- package/package.json +5 -5
- package/src/module/configureBookmarksModule.ts +17 -34
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BookmarksSchema.d.ts","sourceRoot":"","sources":["../../src/db/BookmarksSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,eAAO,MAAM,cAAc,cAQ1B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schemas } from '@unchainedshop/utils';
|
|
2
|
+
import SimpleSchema from 'simpl-schema';
|
|
3
|
+
export const BookmarkSchema = new SimpleSchema({
|
|
4
|
+
userId: { type: String, required: true },
|
|
5
|
+
productId: { type: String, required: true },
|
|
6
|
+
meta: { type: Object, blackbox: true, required: false },
|
|
7
|
+
...Schemas.timestampFields,
|
|
8
|
+
}, { requiredByDefault: false });
|
|
9
|
+
//# sourceMappingURL=BookmarksSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BookmarksSchema.js","sourceRoot":"","sources":["../../src/db/BookmarksSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,YAAY,CAC5C;IACE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC3C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;IACvD,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
|
|
@@ -5,17 +5,16 @@ export type Bookmark = {
|
|
|
5
5
|
productId: string;
|
|
6
6
|
meta?: any;
|
|
7
7
|
} & TimestampFields;
|
|
8
|
-
export
|
|
9
|
-
create: (doc: Bookmark) => Promise<string | null>;
|
|
10
|
-
update: (_id: string, doc: mongodb.UpdateFilter<Bookmark> | Bookmark) => Promise<string>;
|
|
11
|
-
delete: (_id: string) => Promise<number>;
|
|
8
|
+
export declare const configureBookmarksModule: ({ db }: ModuleInput<Record<string, never>>) => Promise<{
|
|
12
9
|
findBookmarksByUserId: (userId: string) => Promise<Array<Bookmark>>;
|
|
13
10
|
findBookmarkById: (bookmarkId: string) => Promise<Bookmark>;
|
|
14
11
|
findBookmarks: (query: mongodb.Filter<Bookmark>) => Promise<Array<Bookmark>>;
|
|
15
12
|
replaceUserId: (fromUserId: string, toUserId: string, bookmarkIds?: Array<string>) => Promise<number>;
|
|
16
|
-
deleteByUserId: (
|
|
13
|
+
deleteByUserId: (userId: string) => Promise<number>;
|
|
17
14
|
deleteByProductId: (productId: string) => Promise<number>;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
create: (doc: any) => Promise<string>;
|
|
16
|
+
update: (bookmarkId: string, doc: Partial<Bookmark>) => Promise<string>;
|
|
17
|
+
delete: (bookmarkId: string) => Promise<number>;
|
|
18
|
+
}>;
|
|
19
|
+
export type BookmarksModule = Awaited<ReturnType<typeof configureBookmarksModule>>;
|
|
21
20
|
//# sourceMappingURL=configureBookmarksModule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureBookmarksModule.d.ts","sourceRoot":"","sources":["../../src/module/configureBookmarksModule.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,OAAO,EACP,eAAe,EACf,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAKhC,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"configureBookmarksModule.d.ts","sourceRoot":"","sources":["../../src/module/configureBookmarksModule.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,OAAO,EACP,eAAe,EACf,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAKhC,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,GAAG,eAAe,CAAC;AAEpB,eAAO,MAAM,wBAAwB,WAAkB,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oCAO/C,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;mCAElC,MAAM,KAAG,OAAO,CAAC,QAAQ,CAAC;2BAIlC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gCAKlE,MAAM,YACR,MAAM,gBACF,KAAK,CAAC,MAAM,CAAC,KAC1B,OAAO,CAAC,MAAM,CAAC;6BAaa,MAAM;mCAMA,MAAM;;yBAehB,MAAM,OAAO,OAAO,CAAC,QAAQ,CAAC;yBAa9B,MAAM;EAMpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { emit, registerEvents } from '@unchainedshop/events';
|
|
|
2
2
|
import { generateDbFilterById, generateDbObjectId, } from '@unchainedshop/mongodb';
|
|
3
3
|
import { BookmarksCollection } from '../db/BookmarksCollection.js';
|
|
4
4
|
const BOOKMARK_EVENTS = ['BOOKMARK_CREATE', 'BOOKMARK_UPDATE', 'BOOKMARK_REMOVE'];
|
|
5
|
-
export const configureBookmarksModule = async ({ db
|
|
5
|
+
export const configureBookmarksModule = async ({ db }) => {
|
|
6
6
|
registerEvents(BOOKMARK_EVENTS);
|
|
7
7
|
const Bookmarks = await BookmarksCollection(db);
|
|
8
8
|
return {
|
|
@@ -39,12 +39,6 @@ export const configureBookmarksModule = async ({ db, }) => {
|
|
|
39
39
|
await Promise.all(bookmarks.map(async (b) => emit('BOOKMARK_REMOVE', { bookmarkId: b._id })));
|
|
40
40
|
return result.deletedCount;
|
|
41
41
|
},
|
|
42
|
-
deleteByUserIdAndMeta: async ({ userId, meta }) => {
|
|
43
|
-
const bookmarks = await Bookmarks.find({ userId, meta }, { projection: { _id: true } }).toArray();
|
|
44
|
-
const result = await Bookmarks.deleteMany({ meta, userId });
|
|
45
|
-
await Promise.all(bookmarks.map(async (b) => emit('BOOKMARK_REMOVE', { bookmarkId: b._id })));
|
|
46
|
-
return result.deletedCount;
|
|
47
|
-
},
|
|
48
42
|
create: async (doc) => {
|
|
49
43
|
const { insertedId: bookmarkId } = await Bookmarks.insertOne({
|
|
50
44
|
_id: generateDbObjectId(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureBookmarksModule.js","sourceRoot":"","sources":["../../src/module/configureBookmarksModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GAInB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,eAAe,GAAa,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"configureBookmarksModule.js","sourceRoot":"","sources":["../../src/module/configureBookmarksModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bookmarkServices.d.ts","sourceRoot":"","sources":["../../src/service/bookmarkServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGrE,eAAO,MAAM,gBAAgB,EAAE,gBAE9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bookmarkServices.js","sourceRoot":"","sources":["../../src/service/bookmarkServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,gBAAgB,EAAE,uBAAuB;CAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrateBookmarksService.d.ts","sourceRoot":"","sources":["../../src/service/migrateBookmarksService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAM5E,eAAO,MAAM,uBAAuB,EAAE,uBAuBrC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const hashBookmark = (bookmark) => {
|
|
2
|
+
return `${bookmark.productId}:${bookmark.userId}:${JSON.stringify(bookmark.meta || {})}`;
|
|
3
|
+
};
|
|
4
|
+
export const migrateBookmarksService = async ({ fromUserId, toUserId, shouldMerge }, { modules }) => {
|
|
5
|
+
const fromBookmarks = await modules.bookmarks.findBookmarks({ userId: fromUserId });
|
|
6
|
+
if (!fromBookmarks) {
|
|
7
|
+
// No bookmarks no copy needed
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (!shouldMerge) {
|
|
11
|
+
await modules.bookmarks.deleteByUserId(toUserId);
|
|
12
|
+
await modules.bookmarks.replaceUserId(fromUserId, toUserId);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
const toBookmarks = await modules.bookmarks.findBookmarks({ userId: toUserId });
|
|
16
|
+
const toBookmarkHashes = toBookmarks.map(hashBookmark);
|
|
17
|
+
const newBookmarkIds = fromBookmarks
|
|
18
|
+
.filter((fromBookmark) => {
|
|
19
|
+
const hash = hashBookmark(fromBookmark);
|
|
20
|
+
return !toBookmarkHashes.includes(hash);
|
|
21
|
+
})
|
|
22
|
+
.map((bookmark) => bookmark._id);
|
|
23
|
+
await modules.bookmarks.replaceUserId(fromUserId, toUserId, newBookmarkIds);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=migrateBookmarksService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrateBookmarksService.js","sourceRoot":"","sources":["../../src/service/migrateBookmarksService.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,EAAE;IAChC,OAAO,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAA4B,KAAK,EACnE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,EACrC,EAAE,OAAO,EAAE,EACX,EAAE;IACF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACpF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,8BAA8B;QAC9B,OAAO;IACT,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChF,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,aAAa;aACjC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YACxC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/core-bookmarks",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"main": "lib/bookmarks-index.js",
|
|
5
5
|
"types": "lib/bookmarks-index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
},
|
|
32
32
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@unchainedshop/events": "^3.
|
|
35
|
-
"@unchainedshop/mongodb": "^3.
|
|
34
|
+
"@unchainedshop/events": "^3.1.0",
|
|
35
|
+
"@unchainedshop/mongodb": "^3.1.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@types/node": "^22.
|
|
38
|
+
"@types/node": "^22.13.1",
|
|
39
39
|
"jest": "^29.7.0",
|
|
40
40
|
"ts-jest": "^29.2.5",
|
|
41
|
-
"typescript": "^5.7.
|
|
41
|
+
"typescript": "^5.7.3"
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -17,41 +17,28 @@ export type Bookmark = {
|
|
|
17
17
|
meta?: any;
|
|
18
18
|
} & TimestampFields;
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
* Module
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
export interface BookmarksModule {
|
|
25
|
-
create: (doc: Bookmark) => Promise<string | null>;
|
|
26
|
-
update: (_id: string, doc: mongodb.UpdateFilter<Bookmark> | Bookmark) => Promise<string>;
|
|
27
|
-
delete: (_id: string) => Promise<number>;
|
|
28
|
-
findBookmarksByUserId: (userId: string) => Promise<Array<Bookmark>>;
|
|
29
|
-
findBookmarkById: (bookmarkId: string) => Promise<Bookmark>;
|
|
30
|
-
findBookmarks: (query: mongodb.Filter<Bookmark>) => Promise<Array<Bookmark>>;
|
|
31
|
-
replaceUserId: (fromUserId: string, toUserId: string, bookmarkIds?: Array<string>) => Promise<number>;
|
|
32
|
-
deleteByUserId: (toUserId: string) => Promise<number>;
|
|
33
|
-
deleteByProductId: (productId: string) => Promise<number>;
|
|
34
|
-
deleteByUserIdAndMeta: (meta: any) => Promise<number>;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export const configureBookmarksModule = async ({
|
|
38
|
-
db,
|
|
39
|
-
}: ModuleInput<Record<string, never>>): Promise<BookmarksModule> => {
|
|
20
|
+
export const configureBookmarksModule = async ({ db }: ModuleInput<Record<string, never>>) => {
|
|
40
21
|
registerEvents(BOOKMARK_EVENTS);
|
|
41
22
|
|
|
42
23
|
const Bookmarks = await BookmarksCollection(db);
|
|
43
24
|
|
|
44
25
|
return {
|
|
45
26
|
// Queries
|
|
46
|
-
findBookmarksByUserId: async (userId) =>
|
|
47
|
-
|
|
27
|
+
findBookmarksByUserId: async (userId: string): Promise<Array<Bookmark>> =>
|
|
28
|
+
Bookmarks.find({ userId }).toArray(),
|
|
29
|
+
findBookmarkById: async (bookmarkId: string): Promise<Bookmark> => {
|
|
48
30
|
const filter = generateDbFilterById(bookmarkId);
|
|
49
31
|
return Bookmarks.findOne(filter, {});
|
|
50
32
|
},
|
|
51
|
-
findBookmarks: async (query) =>
|
|
33
|
+
findBookmarks: async (query: mongodb.Filter<Bookmark>): Promise<Array<Bookmark>> =>
|
|
34
|
+
Bookmarks.find(query).toArray(),
|
|
52
35
|
|
|
53
36
|
// Mutations
|
|
54
|
-
replaceUserId: async (
|
|
37
|
+
replaceUserId: async (
|
|
38
|
+
fromUserId: string,
|
|
39
|
+
toUserId: string,
|
|
40
|
+
bookmarkIds?: Array<string>,
|
|
41
|
+
): Promise<number> => {
|
|
55
42
|
const selector: mongodb.Filter<Bookmark> = { userId: fromUserId };
|
|
56
43
|
if (bookmarkIds) {
|
|
57
44
|
selector._id = { $in: bookmarkIds };
|
|
@@ -64,24 +51,18 @@ export const configureBookmarksModule = async ({
|
|
|
64
51
|
});
|
|
65
52
|
return result.upsertedCount;
|
|
66
53
|
},
|
|
67
|
-
deleteByUserId: async (userId) => {
|
|
54
|
+
deleteByUserId: async (userId: string) => {
|
|
68
55
|
const bookmarks = await Bookmarks.find({ userId }, { projection: { _id: true } }).toArray();
|
|
69
56
|
const result = await Bookmarks.deleteMany({ userId });
|
|
70
57
|
await Promise.all(bookmarks.map(async (b) => emit('BOOKMARK_REMOVE', { bookmarkId: b._id })));
|
|
71
58
|
return result.deletedCount;
|
|
72
59
|
},
|
|
73
|
-
deleteByProductId: async (productId) => {
|
|
60
|
+
deleteByProductId: async (productId: string) => {
|
|
74
61
|
const bookmarks = await Bookmarks.find({ productId }, { projection: { _id: true } }).toArray();
|
|
75
62
|
const result = await Bookmarks.deleteMany({ productId });
|
|
76
63
|
await Promise.all(bookmarks.map(async (b) => emit('BOOKMARK_REMOVE', { bookmarkId: b._id })));
|
|
77
64
|
return result.deletedCount;
|
|
78
65
|
},
|
|
79
|
-
deleteByUserIdAndMeta: async ({ userId, meta }) => {
|
|
80
|
-
const bookmarks = await Bookmarks.find({ userId, meta }, { projection: { _id: true } }).toArray();
|
|
81
|
-
const result = await Bookmarks.deleteMany({ meta, userId });
|
|
82
|
-
await Promise.all(bookmarks.map(async (b) => emit('BOOKMARK_REMOVE', { bookmarkId: b._id })));
|
|
83
|
-
return result.deletedCount;
|
|
84
|
-
},
|
|
85
66
|
create: async (doc) => {
|
|
86
67
|
const { insertedId: bookmarkId } = await Bookmarks.insertOne({
|
|
87
68
|
_id: generateDbObjectId(),
|
|
@@ -91,7 +72,7 @@ export const configureBookmarksModule = async ({
|
|
|
91
72
|
await emit('BOOKMARK_CREATE', { bookmarkId });
|
|
92
73
|
return bookmarkId;
|
|
93
74
|
},
|
|
94
|
-
update: async (bookmarkId, doc) => {
|
|
75
|
+
update: async (bookmarkId: string, doc: Partial<Bookmark>) => {
|
|
95
76
|
await Bookmarks.updateOne(
|
|
96
77
|
{ _id: bookmarkId },
|
|
97
78
|
{
|
|
@@ -104,10 +85,12 @@ export const configureBookmarksModule = async ({
|
|
|
104
85
|
await emit('BOOKMARK_UPDATE', { bookmarkId });
|
|
105
86
|
return bookmarkId;
|
|
106
87
|
},
|
|
107
|
-
delete: async (bookmarkId) => {
|
|
88
|
+
delete: async (bookmarkId: string) => {
|
|
108
89
|
const { deletedCount } = await Bookmarks.deleteOne({ _id: bookmarkId });
|
|
109
90
|
await emit('BOOKMARK_REMOVE', { bookmarkId });
|
|
110
91
|
return deletedCount;
|
|
111
92
|
},
|
|
112
93
|
};
|
|
113
94
|
};
|
|
95
|
+
|
|
96
|
+
export type BookmarksModule = Awaited<ReturnType<typeof configureBookmarksModule>>;
|