@mercurjs/core 2.2.0-canary.39 → 2.2.0-canary.40
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/.medusa/server/src/api/store/carts/[id]/shipping-methods/route.js +6 -2
- package/.medusa/server/src/api/store/middlewares.js +5 -3
- package/.medusa/server/src/api/store/search/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/store/search/middlewares.js +73 -0
- package/.medusa/server/src/api/store/search/route.d.ts +8 -0
- package/.medusa/server/src/api/store/search/route.js +25 -0
- package/.medusa/server/src/api/store/search/validators.d.ts +27 -0
- package/.medusa/server/src/api/store/search/validators.js +17 -0
- package/.medusa/server/src/migration-scripts/rename-default-store.d.ts +2 -0
- package/.medusa/server/src/migration-scripts/rename-default-store.js +12 -0
- package/.medusa/server/src/modules/search/abstract-search-provider.d.ts +9 -0
- package/.medusa/server/src/modules/search/abstract-search-provider.js +20 -0
- package/.medusa/server/src/modules/search/index.d.ts +10 -0
- package/.medusa/server/src/modules/search/index.js +31 -0
- package/.medusa/server/src/modules/search/lib/build-docs.d.ts +84 -0
- package/.medusa/server/src/modules/search/lib/build-docs.js +207 -0
- package/.medusa/server/src/modules/search/lib/reindex.d.ts +7 -0
- package/.medusa/server/src/modules/search/lib/reindex.js +61 -0
- package/.medusa/server/src/modules/search/lib/sync.d.ts +9 -0
- package/.medusa/server/src/modules/search/lib/sync.js +73 -0
- package/.medusa/server/src/modules/search/loaders/providers.d.ts +5 -0
- package/.medusa/server/src/modules/search/loaders/providers.js +26 -0
- package/.medusa/server/src/modules/search/providers/index.d.ts +1 -0
- package/.medusa/server/src/modules/search/providers/index.js +6 -0
- package/.medusa/server/src/modules/search/providers/orama/index.d.ts +4 -0
- package/.medusa/server/src/modules/search/providers/orama/index.js +12 -0
- package/.medusa/server/src/modules/search/providers/orama/service.d.ts +19 -0
- package/.medusa/server/src/modules/search/providers/orama/service.js +148 -0
- package/.medusa/server/src/modules/search/providers/orama/types.d.ts +10 -0
- package/.medusa/server/src/modules/search/providers/orama/types.js +3 -0
- package/.medusa/server/src/modules/search/services/index.d.ts +2 -0
- package/.medusa/server/src/modules/search/services/index.js +24 -0
- package/.medusa/server/src/modules/search/services/search-module-service.d.ts +25 -0
- package/.medusa/server/src/modules/search/services/search-module-service.js +60 -0
- package/.medusa/server/src/modules/search/services/search-provider-service.d.ts +15 -0
- package/.medusa/server/src/modules/search/services/search-provider-service.js +30 -0
- package/.medusa/server/src/subscribers/search-offer-changed.d.ts +6 -0
- package/.medusa/server/src/subscribers/search-offer-changed.js +34 -0
- package/.medusa/server/src/subscribers/search-product-changed.d.ts +5 -0
- package/.medusa/server/src/subscribers/search-product-changed.js +29 -0
- package/.medusa/server/src/subscribers/search-product-deleted.d.ts +5 -0
- package/.medusa/server/src/subscribers/search-product-deleted.js +23 -0
- package/.medusa/server/src/subscribers/search-reindex.d.ts +3 -0
- package/.medusa/server/src/subscribers/search-reindex.js +23 -0
- package/.medusa/server/src/subscribers/search-seller-changed.d.ts +5 -0
- package/.medusa/server/src/subscribers/search-seller-changed.js +44 -0
- package/.medusa/server/src/workflows/offer/workflows/create-offers.js +2 -2
- package/.medusa/server/src/workflows/offer/workflows/delete-offers.js +7 -2
- package/.medusa/server/src/workflows/offer/workflows/update-offers.js +2 -2
- package/package.json +18 -17
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.indexProductPage = exports.reindexAll = exports.loadRegions = exports.SEARCH_REINDEX_EVENT = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const types_1 = require("@mercurjs/types");
|
|
6
|
+
const build_docs_1 = require("./build-docs");
|
|
7
|
+
const PAGE_SIZE = 100;
|
|
8
|
+
exports.SEARCH_REINDEX_EVENT = "search.reindex";
|
|
9
|
+
const loadRegions = async (container) => {
|
|
10
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
11
|
+
const { data } = await query.graph({
|
|
12
|
+
entity: "region",
|
|
13
|
+
fields: ["id", "currency_code", "automatic_taxes", "countries.iso_2"],
|
|
14
|
+
});
|
|
15
|
+
return data;
|
|
16
|
+
};
|
|
17
|
+
exports.loadRegions = loadRegions;
|
|
18
|
+
const reindexAll = async (container, search = container.resolve(types_1.MercurModules.SEARCH)) => {
|
|
19
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
20
|
+
const regions = await (0, exports.loadRegions)(container);
|
|
21
|
+
let skip = 0;
|
|
22
|
+
for (;;) {
|
|
23
|
+
const { data: products, metadata } = await query.graph({
|
|
24
|
+
entity: "product",
|
|
25
|
+
fields: build_docs_1.searchProductFields,
|
|
26
|
+
filters: { status: "published" },
|
|
27
|
+
pagination: { skip, take: PAGE_SIZE },
|
|
28
|
+
});
|
|
29
|
+
if (!products.length) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
await (0, exports.indexProductPage)(container, search, products, regions);
|
|
33
|
+
skip += PAGE_SIZE;
|
|
34
|
+
const count = metadata?.count ?? 0;
|
|
35
|
+
if (skip >= count) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.reindexAll = reindexAll;
|
|
41
|
+
const indexProductPage = async (container, search, products, regions) => {
|
|
42
|
+
const { docs: productDocs, attributesByProduct } = await (0, build_docs_1.buildProductDocs)(container, products, regions);
|
|
43
|
+
if (!productDocs.length) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
47
|
+
const productIds = productDocs.map((doc) => doc.id);
|
|
48
|
+
const productById = new Map(products.map((product) => [product.id, product]));
|
|
49
|
+
const { data: offers } = await query.graph({
|
|
50
|
+
entity: "offer",
|
|
51
|
+
fields: build_docs_1.searchOfferFields,
|
|
52
|
+
filters: { product_id: productIds },
|
|
53
|
+
});
|
|
54
|
+
const offerDocs = await (0, build_docs_1.buildOfferDocs)(container, offers, regions, {
|
|
55
|
+
productById,
|
|
56
|
+
attributesByProduct,
|
|
57
|
+
});
|
|
58
|
+
await search.index([...productDocs, ...offerDocs]);
|
|
59
|
+
};
|
|
60
|
+
exports.indexProductPage = indexProductPage;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3NlYXJjaC9saWIvcmVpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBcUU7QUFDckUsMkNBQStDO0FBRy9DLDZDQU9xQjtBQUVyQixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUE7QUFFUixRQUFBLG9CQUFvQixHQUFHLGdCQUFnQixDQUFBO0FBRTdDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFDOUIsU0FBMEIsRUFDRCxFQUFFO0lBQzNCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNqQyxNQUFNLEVBQUUsUUFBUTtRQUNoQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDO0tBQ3RFLENBQUMsQ0FBQTtJQUNGLE9BQU8sSUFBc0IsQ0FBQTtBQUMvQixDQUFDLENBQUE7QUFUWSxRQUFBLFdBQVcsZUFTdkI7QUFFTSxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQzdCLFNBQTBCLEVBQzFCLFNBQThCLFNBQVMsQ0FBQyxPQUFPLENBQzdDLHFCQUFhLENBQUMsTUFBTSxDQUNyQixFQUNjLEVBQUU7SUFDakIsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsbUJBQVcsRUFBQyxTQUFTLENBQUMsQ0FBQTtJQUU1QyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUE7SUFDWixTQUFTLENBQUM7UUFDUixNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDckQsTUFBTSxFQUFFLFNBQVM7WUFDakIsTUFBTSxFQUFFLGdDQUFtQjtZQUMzQixPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1lBQ2hDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1NBQ3RDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsTUFBSztRQUNQLENBQUM7UUFFRCxNQUFNLElBQUEsd0JBQWdCLEVBQ3BCLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBOEIsRUFDOUIsT0FBTyxDQUNSLENBQUE7UUFFRCxJQUFJLElBQUksU0FBUyxDQUFBO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFBO1FBQ2xDLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2xCLE1BQUs7UUFDUCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQTtBQXBDWSxRQUFBLFVBQVUsY0FvQ3RCO0FBRU0sTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQ25DLFNBQTBCLEVBQzFCLE1BQTJCLEVBQzNCLFFBQTRCLEVBQzVCLE9BQXVCLEVBQ1IsRUFBRTtJQUNqQixNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sSUFBQSw2QkFBZ0IsRUFDdkUsU0FBUyxFQUNULFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQTtJQUVELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FDekIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQ2pELENBQUE7SUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSw4QkFBaUI7UUFDekIsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRTtLQUNwQyxDQUFDLENBQUE7SUFFRixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsMkJBQWMsRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtRQUNqRSxXQUFXO1FBQ1gsbUJBQW1CO0tBQ3BCLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQTtBQUNwRCxDQUFDLENBQUE7QUFsQ1ksUUFBQSxnQkFBZ0Isb0JBa0M1QiJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MedusaContainer } from "@medusajs/framework/types";
|
|
2
|
+
import type SearchModuleService from "../services/search-module-service";
|
|
3
|
+
export declare const removeProductAndOffers: (container: MedusaContainer, productIds: string[], search?: SearchModuleService) => Promise<void>;
|
|
4
|
+
export declare const removeOfferDocs: (container: MedusaContainer, offerIds: string[], search?: SearchModuleService) => Promise<void>;
|
|
5
|
+
export declare const reindexProductsById: (container: MedusaContainer, productIds: string[], search?: SearchModuleService) => Promise<void>;
|
|
6
|
+
export declare const offersForSeller: (container: MedusaContainer, sellerId: string) => Promise<{
|
|
7
|
+
offerIds: string[];
|
|
8
|
+
productIds: string[];
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.offersForSeller = exports.reindexProductsById = exports.removeOfferDocs = exports.removeProductAndOffers = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const types_1 = require("@mercurjs/types");
|
|
6
|
+
const build_docs_1 = require("./build-docs");
|
|
7
|
+
const reindex_1 = require("./reindex");
|
|
8
|
+
const resolveSearch = (container) => container.resolve(types_1.MercurModules.SEARCH);
|
|
9
|
+
const uniq = (ids) => Array.from(new Set(ids.filter((id) => Boolean(id))));
|
|
10
|
+
const offerIdsForProducts = async (container, productIds) => {
|
|
11
|
+
if (!productIds.length) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
15
|
+
const { data: offers } = await query.graph({
|
|
16
|
+
entity: "offer",
|
|
17
|
+
fields: ["id"],
|
|
18
|
+
filters: { product_id: productIds },
|
|
19
|
+
});
|
|
20
|
+
return offers.map((o) => o.id);
|
|
21
|
+
};
|
|
22
|
+
const removeProductAndOffers = async (container, productIds, search = resolveSearch(container)) => {
|
|
23
|
+
const ids = uniq(productIds);
|
|
24
|
+
if (!ids.length) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const offerIds = await offerIdsForProducts(container, ids);
|
|
28
|
+
await search.remove([...ids, ...offerIds]);
|
|
29
|
+
};
|
|
30
|
+
exports.removeProductAndOffers = removeProductAndOffers;
|
|
31
|
+
const removeOfferDocs = async (container, offerIds, search = resolveSearch(container)) => {
|
|
32
|
+
const ids = uniq(offerIds);
|
|
33
|
+
if (ids.length) {
|
|
34
|
+
await search.remove(ids);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.removeOfferDocs = removeOfferDocs;
|
|
38
|
+
const reindexProductsById = async (container, productIds, search = resolveSearch(container)) => {
|
|
39
|
+
const ids = uniq(productIds);
|
|
40
|
+
if (!ids.length) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
44
|
+
const { data: products } = await query.graph({
|
|
45
|
+
entity: "product",
|
|
46
|
+
fields: build_docs_1.searchProductFields,
|
|
47
|
+
filters: { id: ids, status: "published" },
|
|
48
|
+
});
|
|
49
|
+
const publishedIds = new Set(products.map((p) => p.id));
|
|
50
|
+
const staleIds = ids.filter((id) => !publishedIds.has(id));
|
|
51
|
+
if (products.length) {
|
|
52
|
+
const regions = await (0, reindex_1.loadRegions)(container);
|
|
53
|
+
await (0, reindex_1.indexProductPage)(container, search, products, regions);
|
|
54
|
+
}
|
|
55
|
+
if (staleIds.length) {
|
|
56
|
+
await (0, exports.removeProductAndOffers)(container, staleIds, search);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
exports.reindexProductsById = reindexProductsById;
|
|
60
|
+
const offersForSeller = async (container, sellerId) => {
|
|
61
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
62
|
+
const { data: offers } = await query.graph({
|
|
63
|
+
entity: "offer",
|
|
64
|
+
fields: ["id", "product_id"],
|
|
65
|
+
filters: { seller_id: sellerId },
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
offerIds: uniq(offers.map((o) => o.id)),
|
|
69
|
+
productIds: uniq(offers.map((o) => o.product_id)),
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
exports.offersForSeller = offersForSeller;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3NlYXJjaC9saWIvc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBcUU7QUFDckUsMkNBQStDO0FBRy9DLDZDQUFvRTtBQUNwRSx1Q0FBeUQ7QUFFekQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUEwQixFQUF1QixFQUFFLENBQ3hFLFNBQVMsQ0FBQyxPQUFPLENBQXNCLHFCQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7QUFFOUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFrQyxFQUFZLEVBQUUsQ0FDNUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRXBFLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUMvQixTQUEwQixFQUMxQixVQUFvQixFQUNELEVBQUU7SUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ2QsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRTtLQUNwQyxDQUFDLENBQUE7SUFDRixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { LoaderOptions, ModuleProvider, ModulesSdkTypes } from "@medusajs/framework/types";
|
|
2
|
+
declare const _default: ({ container, options, }: LoaderOptions<(ModulesSdkTypes.ModuleServiceInitializeOptions | ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions) & {
|
|
3
|
+
provider?: ModuleProvider;
|
|
4
|
+
}>) => Promise<void>;
|
|
5
|
+
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const awilix_1 = require("@medusajs/framework/awilix");
|
|
4
|
+
const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
|
|
5
|
+
const search_provider_service_1 = require("../services/search-provider-service");
|
|
6
|
+
const providers_1 = require("../providers");
|
|
7
|
+
const registrationFn = async (klass, container, pluginOptions) => {
|
|
8
|
+
const key = `${search_provider_service_1.SearchProviderRegistrationPrefix}${klass.identifier}_${pluginOptions.id}`;
|
|
9
|
+
container.register({
|
|
10
|
+
[key]: (0, awilix_1.asFunction)((cradle) => new klass(cradle, pluginOptions.options ?? {}), {
|
|
11
|
+
lifetime: klass.LIFE_TIME || awilix_1.Lifetime.SINGLETON,
|
|
12
|
+
}),
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
exports.default = async ({ container, options, }) => {
|
|
16
|
+
const provider = options?.provider;
|
|
17
|
+
if (!provider) {
|
|
18
|
+
return await registrationFn(providers_1.OramaSearchProvider, container, { id: "default" });
|
|
19
|
+
}
|
|
20
|
+
await (0, modules_sdk_1.moduleProviderLoader)({
|
|
21
|
+
container,
|
|
22
|
+
providers: [provider],
|
|
23
|
+
registerServiceFn: registrationFn,
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc2VhcmNoL2xvYWRlcnMvcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdURBQStFO0FBQy9FLGlFQUFzRTtBQU90RSxpRkFBc0Y7QUFDdEYsNENBQWtEO0FBRWxELE1BQU0sY0FBYyxHQUFHLEtBQUssRUFDMUIsS0FBdUQsRUFDdkQsU0FBNkQsRUFDN0QsYUFBZ0UsRUFDaEUsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLEdBQUcsMERBQWdDLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUE7SUFFeEYsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUEsbUJBQVUsRUFDZixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1QsSUFBSyxLQUdRLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ3BEO1lBQ0UsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksaUJBQVEsQ0FBQyxTQUFTO1NBQ2hELENBQ0Y7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUFFRCxrQkFBZSxLQUFLLEVBQUUsRUFDcEIsU0FBUyxFQUNULE9BQU8sR0FNUixFQUFpQixFQUFFO0lBQ2xCLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLENBQUE7SUFFbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxNQUFNLGNBQWMsQ0FDekIsK0JBQXdELEVBQ3hELFNBRUMsRUFDRCxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FDbEIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLElBQUEsa0NBQW9CLEVBQUM7UUFDekIsU0FBUztRQUNULFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNyQixpQkFBaUIsRUFBRSxjQUFjO0tBQ2xDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { OramaSearchProvider } from "./orama";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OramaSearchProvider = void 0;
|
|
4
|
+
var orama_1 = require("./orama");
|
|
5
|
+
Object.defineProperty(exports, "OramaSearchProvider", { enumerable: true, get: function () { return orama_1.OramaSearchProvider; } });
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZWFyY2gvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUE2QztBQUFwQyw0R0FBQSxtQkFBbUIsT0FBQSJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OramaSearchProvider = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const types_1 = require("@mercurjs/types");
|
|
6
|
+
const service_1 = require("./service");
|
|
7
|
+
var service_2 = require("./service");
|
|
8
|
+
Object.defineProperty(exports, "OramaSearchProvider", { enumerable: true, get: function () { return service_2.OramaSearchProvider; } });
|
|
9
|
+
exports.default = (0, utils_1.ModuleProvider)(types_1.MercurModules.SEARCH, {
|
|
10
|
+
services: [service_1.OramaSearchProvider],
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZWFyY2gvcHJvdmlkZXJzL29yYW1hL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUEwRDtBQUMxRCwyQ0FBK0M7QUFFL0MsdUNBQStDO0FBRS9DLHFDQUErQztBQUF0Qyw4R0FBQSxtQkFBbUIsT0FBQTtBQUc1QixrQkFBZSxJQUFBLHNCQUFjLEVBQUMscUJBQWEsQ0FBQyxNQUFNLEVBQUU7SUFDbEQsUUFBUSxFQUFFLENBQUMsNkJBQW1CLENBQUM7Q0FDaEMsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AnyOrama } from "@orama/orama";
|
|
2
|
+
import { SearchDoc, SearchResults } from "@mercurjs/types";
|
|
3
|
+
import { AbstractSearchProvider } from "../../abstract-search-provider";
|
|
4
|
+
import { OramaSearchQuery } from "./types";
|
|
5
|
+
export declare class OramaSearchProvider extends AbstractSearchProvider {
|
|
6
|
+
static identifier: string;
|
|
7
|
+
protected readonly db_: AnyOrama;
|
|
8
|
+
protected readonly collectionLabels_: Map<string, string>;
|
|
9
|
+
protected readonly categoryLabels_: Map<string, string>;
|
|
10
|
+
protected readonly attributeHandleLabels_: Map<string, string>;
|
|
11
|
+
protected readonly attributeValueLabels_: Map<string, string>;
|
|
12
|
+
constructor();
|
|
13
|
+
private recordLabels_;
|
|
14
|
+
index(docs: SearchDoc[]): Promise<void>;
|
|
15
|
+
remove(ids: string[]): Promise<void>;
|
|
16
|
+
search(query: OramaSearchQuery): Promise<SearchResults>;
|
|
17
|
+
private toFacetValues_;
|
|
18
|
+
private toAttributeFacets_;
|
|
19
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OramaSearchProvider = void 0;
|
|
4
|
+
const orama_1 = require("@orama/orama");
|
|
5
|
+
const abstract_search_provider_1 = require("../../abstract-search-provider");
|
|
6
|
+
const SEARCH_SCHEMA = {
|
|
7
|
+
type: "enum",
|
|
8
|
+
title: "string",
|
|
9
|
+
description: "string",
|
|
10
|
+
handle: "string",
|
|
11
|
+
sku: "string",
|
|
12
|
+
seller_handle: "enum",
|
|
13
|
+
collection_id: "enum",
|
|
14
|
+
category_ids: "enum[]",
|
|
15
|
+
product_id: "enum",
|
|
16
|
+
variant_id: "enum",
|
|
17
|
+
attribute_tokens: "enum[]",
|
|
18
|
+
};
|
|
19
|
+
const SEARCHABLE_PROPERTIES = ["title", "description", "handle", "sku"];
|
|
20
|
+
// In-memory index living in the API process's RAM — it starts empty and needs a
|
|
21
|
+
// reindex to populate. id → label maps are kept at index time so `search` can
|
|
22
|
+
// label facets without a second lookup.
|
|
23
|
+
class OramaSearchProvider extends abstract_search_provider_1.AbstractSearchProvider {
|
|
24
|
+
constructor() {
|
|
25
|
+
super();
|
|
26
|
+
this.collectionLabels_ = new Map();
|
|
27
|
+
this.categoryLabels_ = new Map();
|
|
28
|
+
this.attributeHandleLabels_ = new Map();
|
|
29
|
+
this.attributeValueLabels_ = new Map();
|
|
30
|
+
this.db_ = (0, orama_1.create)({ schema: SEARCH_SCHEMA });
|
|
31
|
+
}
|
|
32
|
+
recordLabels_(docs) {
|
|
33
|
+
for (const doc of docs) {
|
|
34
|
+
if (doc.collection_id && doc.collection) {
|
|
35
|
+
this.collectionLabels_.set(doc.collection_id, doc.collection);
|
|
36
|
+
}
|
|
37
|
+
const ids = doc.category_ids ?? [];
|
|
38
|
+
const labels = doc.categories ?? [];
|
|
39
|
+
ids.forEach((id, i) => {
|
|
40
|
+
if (labels[i]) {
|
|
41
|
+
this.categoryLabels_.set(id, labels[i]);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
for (const attribute of doc.attributes ?? []) {
|
|
45
|
+
this.attributeHandleLabels_.set(attribute.handle, attribute.name);
|
|
46
|
+
for (const value of attribute.values) {
|
|
47
|
+
this.attributeValueLabels_.set(value.id, value.name);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async index(docs) {
|
|
53
|
+
if (!docs.length) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.recordLabels_(docs);
|
|
57
|
+
await (0, orama_1.removeMultiple)(this.db_, docs.map((doc) => doc.id));
|
|
58
|
+
await (0, orama_1.insertMultiple)(this.db_, docs);
|
|
59
|
+
}
|
|
60
|
+
async remove(ids) {
|
|
61
|
+
if (!ids.length) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
await (0, orama_1.removeMultiple)(this.db_, ids);
|
|
65
|
+
}
|
|
66
|
+
async search(query) {
|
|
67
|
+
const filters = query.filters ?? {};
|
|
68
|
+
const term = query.q?.trim();
|
|
69
|
+
const where = {};
|
|
70
|
+
if (filters.type) {
|
|
71
|
+
where.type = { eq: filters.type };
|
|
72
|
+
}
|
|
73
|
+
if (filters.seller_handle) {
|
|
74
|
+
where.seller_handle = { eq: filters.seller_handle };
|
|
75
|
+
}
|
|
76
|
+
if (filters.collection_ids?.length) {
|
|
77
|
+
where.collection_id = { in: filters.collection_ids };
|
|
78
|
+
}
|
|
79
|
+
if (filters.category_ids?.length) {
|
|
80
|
+
where.category_ids = { containsAny: filters.category_ids };
|
|
81
|
+
}
|
|
82
|
+
if (filters.attributes) {
|
|
83
|
+
const tokens = Object.entries(filters.attributes).flatMap(([handle, valueIds]) => valueIds.map((valueId) => `attr:${handle}:${valueId}`));
|
|
84
|
+
if (tokens.length) {
|
|
85
|
+
where.attribute_tokens = { containsAny: tokens };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const result = await (0, orama_1.search)(this.db_, {
|
|
89
|
+
term: term || undefined,
|
|
90
|
+
properties: term ? SEARCHABLE_PROPERTIES : undefined,
|
|
91
|
+
where: where,
|
|
92
|
+
limit: query.limit ?? 12,
|
|
93
|
+
offset: query.offset ?? 0,
|
|
94
|
+
threshold: 0,
|
|
95
|
+
facets: {
|
|
96
|
+
collection_id: { limit: 200 },
|
|
97
|
+
category_ids: { limit: 200 },
|
|
98
|
+
attribute_tokens: { limit: 1000 },
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
const regionId = (query.context?.region_id ?? undefined);
|
|
102
|
+
const hits = result.hits.map((hit) => {
|
|
103
|
+
const doc = hit.document;
|
|
104
|
+
const price = regionId && doc.prices?.[regionId] ? doc.prices[regionId] : null;
|
|
105
|
+
return { ...doc, calculated_price: price };
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
hits,
|
|
109
|
+
count: result.count,
|
|
110
|
+
facets: {
|
|
111
|
+
collections: this.toFacetValues_(result.facets?.collection_id?.values, this.collectionLabels_),
|
|
112
|
+
categories: this.toFacetValues_(result.facets?.category_ids?.values, this.categoryLabels_),
|
|
113
|
+
attributes: this.toAttributeFacets_(result.facets?.attribute_tokens?.values),
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
toFacetValues_(values, labels) {
|
|
118
|
+
return Object.entries(values ?? {}).map(([id, count]) => ({
|
|
119
|
+
id,
|
|
120
|
+
label: labels.get(id) ?? id,
|
|
121
|
+
count,
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
toAttributeFacets_(values) {
|
|
125
|
+
const byHandle = new Map();
|
|
126
|
+
for (const [token, count] of Object.entries(values ?? {})) {
|
|
127
|
+
const [, handle, valueId] = token.split(":");
|
|
128
|
+
if (!handle || !valueId) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const group = byHandle.get(handle) ?? [];
|
|
132
|
+
group.push({
|
|
133
|
+
id: valueId,
|
|
134
|
+
label: this.attributeValueLabels_.get(valueId) ?? valueId,
|
|
135
|
+
count,
|
|
136
|
+
});
|
|
137
|
+
byHandle.set(handle, group);
|
|
138
|
+
}
|
|
139
|
+
return [...byHandle.entries()].map(([handle, valuesForHandle]) => ({
|
|
140
|
+
handle,
|
|
141
|
+
label: this.attributeHandleLabels_.get(handle) ?? handle,
|
|
142
|
+
values: valuesForHandle,
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.OramaSearchProvider = OramaSearchProvider;
|
|
147
|
+
OramaSearchProvider.identifier = "search-orama";
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3NlYXJjaC9wcm92aWRlcnMvb3JhbWEvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3Q0FNcUI7QUFRckIsNkVBQXVFO0FBR3ZFLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLFFBQVE7SUFDZixXQUFXLEVBQUUsUUFBUTtJQUNyQixNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLEVBQUUsUUFBUTtJQUNiLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFlBQVksRUFBRSxRQUFRO0lBQ3RCLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLGdCQUFnQixFQUFFLFFBQVE7Q0FDbEIsQ0FBQTtBQUVWLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUV2RSxnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLHdDQUF3QztBQUN4QyxNQUFhLG1CQUFvQixTQUFRLGlEQUFzQjtJQVU3RDtRQUNFLEtBQUssRUFBRSxDQUFBO1FBTlUsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUE7UUFDN0Msb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtRQUMzQywyQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtRQUNsRCwwQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtRQUlsRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUEsY0FBTSxFQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFpQjtRQUNyQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElB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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SearchQueryBase } from "@mercurjs/types";
|
|
2
|
+
export interface OramaSearchQuery extends SearchQueryBase {
|
|
3
|
+
filters?: {
|
|
4
|
+
type?: "product" | "offer";
|
|
5
|
+
collection_ids?: string[];
|
|
6
|
+
category_ids?: string[];
|
|
7
|
+
seller_handle?: string;
|
|
8
|
+
attributes?: Record<string, string[]>;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZWFyY2gvcHJvdmlkZXJzL29yYW1hL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.SearchProviderService = void 0;
|
|
21
|
+
var search_provider_service_1 = require("./search-provider-service");
|
|
22
|
+
Object.defineProperty(exports, "SearchProviderService", { enumerable: true, get: function () { return __importDefault(search_provider_service_1).default; } });
|
|
23
|
+
__exportStar(require("./search-provider-service"), exports);
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZWFyY2gvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxRUFBNEU7QUFBbkUsaUpBQUEsT0FBTyxPQUF5QjtBQUN6Qyw0REFBeUMifQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IEventBusModuleService, InternalModuleDeclaration, Logger } from "@medusajs/framework/types";
|
|
2
|
+
import { ContainerRegistrationKeys, Modules } from "@medusajs/framework/utils";
|
|
3
|
+
import { SearchDoc, SearchQueryBase, SearchResults } from "@mercurjs/types";
|
|
4
|
+
import SearchProviderService from "./search-provider-service";
|
|
5
|
+
type InjectedDependencies = {
|
|
6
|
+
searchProviderService: SearchProviderService;
|
|
7
|
+
[ContainerRegistrationKeys.LOGGER]: Logger;
|
|
8
|
+
[Modules.EVENT_BUS]: IEventBusModuleService;
|
|
9
|
+
};
|
|
10
|
+
export default class SearchModuleService {
|
|
11
|
+
#private;
|
|
12
|
+
protected readonly searchProviderService_: SearchProviderService;
|
|
13
|
+
protected readonly logger_: Logger;
|
|
14
|
+
protected readonly eventBus_: IEventBusModuleService;
|
|
15
|
+
constructor(container: InjectedDependencies, moduleDeclaration: InternalModuleDeclaration);
|
|
16
|
+
__hooks: {
|
|
17
|
+
onApplicationStart(this: SearchModuleService): Promise<void>;
|
|
18
|
+
};
|
|
19
|
+
protected onApplicationStart_(): Promise<void>;
|
|
20
|
+
getProviderIdentifier(): string;
|
|
21
|
+
index(docs: SearchDoc[]): Promise<void>;
|
|
22
|
+
remove(ids: string[]): Promise<void>;
|
|
23
|
+
search(query: SearchQueryBase): Promise<SearchResults>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _SearchModuleService_isWorkerMode;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
16
|
+
const reindex_1 = require("../lib/reindex");
|
|
17
|
+
class SearchModuleService {
|
|
18
|
+
constructor(container, moduleDeclaration) {
|
|
19
|
+
_SearchModuleService_isWorkerMode.set(this, false);
|
|
20
|
+
this.__hooks = {
|
|
21
|
+
onApplicationStart() {
|
|
22
|
+
return this.onApplicationStart_();
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
this.searchProviderService_ = container.searchProviderService;
|
|
26
|
+
this.logger_ = container[utils_1.ContainerRegistrationKeys.LOGGER];
|
|
27
|
+
this.eventBus_ = container[utils_1.Modules.EVENT_BUS];
|
|
28
|
+
__classPrivateFieldSet(this, _SearchModuleService_isWorkerMode, moduleDeclaration.worker_mode !== "server", "f");
|
|
29
|
+
}
|
|
30
|
+
// The module service is constructed with the awilix cradle, not the app
|
|
31
|
+
// container, so it can't run the cross-module reindex itself. It emits an
|
|
32
|
+
// event instead; the `search-reindex` subscriber handles it with the real
|
|
33
|
+
// request-scoped container.
|
|
34
|
+
async onApplicationStart_() {
|
|
35
|
+
if (!__classPrivateFieldGet(this, _SearchModuleService_isWorkerMode, "f")) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
await this.eventBus_.emit({ name: reindex_1.SEARCH_REINDEX_EVENT, data: {} });
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
this.logger_.error(e);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
getProviderIdentifier() {
|
|
46
|
+
return this.searchProviderService_.getIdentifier();
|
|
47
|
+
}
|
|
48
|
+
async index(docs) {
|
|
49
|
+
return await this.searchProviderService_.index(docs);
|
|
50
|
+
}
|
|
51
|
+
async remove(ids) {
|
|
52
|
+
return await this.searchProviderService_.remove(ids);
|
|
53
|
+
}
|
|
54
|
+
async search(query) {
|
|
55
|
+
return await this.searchProviderService_.search(query);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
_SearchModuleService_isWorkerMode = new WeakMap();
|
|
59
|
+
exports.default = SearchModuleService;
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLW1vZHVsZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc2VhcmNoL3NlcnZpY2VzL3NlYXJjaC1tb2R1bGUtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUtBLHFEQUE4RTtBQU85RSw0Q0FBcUQ7QUFTckQsTUFBcUIsbUJBQW1CO0lBTXRDLFlBQ0UsU0FBK0IsRUFDL0IsaUJBQTRDO1FBSjlDLDRDQUFnQixLQUFLLEVBQUE7UUFZckIsWUFBTyxHQUFHO1lBQ1Isa0JBQWtCO2dCQUNoQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1lBQ25DLENBQUM7U0FDRixDQUFBO1FBVkMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQTtRQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxlQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDN0MsdUJBQUEsSUFBSSxxQ0FBaUIsaUJBQWlCLENBQUMsV0FBVyxLQUFLLFFBQVEsTUFBQSxDQUFBO0lBQ2pFLENBQUM7SUFRRCx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLDBFQUEwRTtJQUMxRSw0QkFBNEI7SUFDbEIsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsdUJBQUEsSUFBSSx5Q0FBYyxFQUFFLENBQUM7WUFDeEIsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLDhCQUFvQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBaUI7UUFDM0IsT0FBTyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBYTtRQUN4QixPQUFPLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFzQjtRQUNqQyxPQUFPLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0NBQ0Y7O2tCQXJEb0IsbUJBQW1CIn0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SearchDoc, SearchProvider, SearchQueryBase, SearchResults } from "@mercurjs/types";
|
|
2
|
+
export declare const SearchProviderIdentifierRegistrationName = "search_providers_identifier";
|
|
3
|
+
export declare const SearchProviderRegistrationPrefix = "search_";
|
|
4
|
+
type InjectedDependencies = {
|
|
5
|
+
[key: `${typeof SearchProviderRegistrationPrefix}${string}`]: SearchProvider;
|
|
6
|
+
};
|
|
7
|
+
export default class SearchProviderService {
|
|
8
|
+
protected readonly searchProvider_: SearchProvider;
|
|
9
|
+
constructor(container: InjectedDependencies);
|
|
10
|
+
getIdentifier(): string;
|
|
11
|
+
index(docs: SearchDoc[]): Promise<void>;
|
|
12
|
+
remove(ids: string[]): Promise<void>;
|
|
13
|
+
search(query: SearchQueryBase): Promise<SearchResults>;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SearchProviderRegistrationPrefix = exports.SearchProviderIdentifierRegistrationName = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.SearchProviderIdentifierRegistrationName = "search_providers_identifier";
|
|
6
|
+
exports.SearchProviderRegistrationPrefix = "search_";
|
|
7
|
+
class SearchProviderService {
|
|
8
|
+
constructor(container) {
|
|
9
|
+
const searchProviderKeys = Object.keys(container).filter((k) => k.startsWith(exports.SearchProviderRegistrationPrefix));
|
|
10
|
+
if (searchProviderKeys.length !== 1) {
|
|
11
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Search module should be initialized with exactly one provider`);
|
|
12
|
+
}
|
|
13
|
+
this.searchProvider_ = container[searchProviderKeys[0]];
|
|
14
|
+
}
|
|
15
|
+
getIdentifier() {
|
|
16
|
+
const provider = this.searchProvider_;
|
|
17
|
+
return provider.getIdentifier?.() ?? "unknown";
|
|
18
|
+
}
|
|
19
|
+
async index(docs) {
|
|
20
|
+
return await this.searchProvider_.index(docs);
|
|
21
|
+
}
|
|
22
|
+
async remove(ids) {
|
|
23
|
+
return await this.searchProvider_.remove(ids);
|
|
24
|
+
}
|
|
25
|
+
async search(query) {
|
|
26
|
+
return await this.searchProvider_.search(query);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.default = SearchProviderService;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXByb3ZpZGVyLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZWFyY2gvc2VydmljZXMvc2VhcmNoLXByb3ZpZGVyLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBUTFDLFFBQUEsd0NBQXdDLEdBQ25ELDZCQUE2QixDQUFBO0FBRWxCLFFBQUEsZ0NBQWdDLEdBQUcsU0FBUyxDQUFBO0FBTXpELE1BQXFCLHFCQUFxQjtJQUd4QyxZQUFZLFNBQStCO1FBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM3RCxDQUFDLENBQUMsVUFBVSxDQUFDLHdDQUFnQyxDQUFDLENBQy9DLENBQUE7UUFFRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwrREFBK0QsQ0FDaEUsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FDOUIsa0JBQWtCLENBQUMsQ0FBQyxDQUErQixDQUNsQyxDQUFBO0lBQ3JCLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBRXJCLENBQUE7UUFDRCxPQUFPLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQTtJQUNoRCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFpQjtRQUMzQixPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBYTtRQUN4QixPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBc0I7UUFDakMsT0FBTyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2pELENBQUM7Q0FDRjtBQXRDRCx3Q0FzQ0MifQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SubscriberArgs, SubscriberConfig } from "@medusajs/framework";
|
|
2
|
+
export default function searchOfferChangedHandler({ event, container, }: SubscriberArgs<{
|
|
3
|
+
id: string;
|
|
4
|
+
product_id?: string;
|
|
5
|
+
}>): Promise<void>;
|
|
6
|
+
export declare const config: SubscriberConfig;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = searchOfferChangedHandler;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const events_1 = require("../workflows/events");
|
|
7
|
+
const sync_1 = require("../modules/search/lib/sync");
|
|
8
|
+
async function searchOfferChangedHandler({ event, container, }) {
|
|
9
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
10
|
+
const { id, product_id } = event.data;
|
|
11
|
+
try {
|
|
12
|
+
if (event.name === events_1.OfferWorkflowEvents.DELETED) {
|
|
13
|
+
await (0, sync_1.removeOfferDocs)(container, [id]);
|
|
14
|
+
}
|
|
15
|
+
if (product_id) {
|
|
16
|
+
await (0, sync_1.reindexProductsById)(container, [product_id]);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
logger.error(`Search sync failed for offer ${id}:`, error);
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.config = {
|
|
25
|
+
event: [
|
|
26
|
+
events_1.OfferWorkflowEvents.CREATED,
|
|
27
|
+
events_1.OfferWorkflowEvents.UPDATED,
|
|
28
|
+
events_1.OfferWorkflowEvents.DELETED,
|
|
29
|
+
],
|
|
30
|
+
context: {
|
|
31
|
+
subscriberId: "search-offer-changed-handler",
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLW9mZmVyLWNoYW5nZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvc2VhcmNoLW9mZmVyLWNoYW5nZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBU0EsNENBa0JDO0FBMUJELHFEQUFxRTtBQUVyRSxnREFBeUQ7QUFDekQscURBR21DO0FBRXBCLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxFQUN0RCxLQUFLLEVBQ0wsU0FBUyxHQUMyQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtJQUVyQyxJQUFJLENBQUM7UUFDSCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssNEJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFBLHNCQUFlLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN4QyxDQUFDO1FBQ0QsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBQSwwQkFBbUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFLEtBQWMsQ0FBQyxDQUFBO1FBQ25FLE1BQU0sS0FBSyxDQUFBO0lBQ2IsQ0FBQztBQUNILENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFO1FBQ0wsNEJBQW1CLENBQUMsT0FBTztRQUMzQiw0QkFBbUIsQ0FBQyxPQUFPO1FBQzNCLDRCQUFtQixDQUFDLE9BQU87S0FDNUI7SUFDRCxPQUFPLEVBQUU7UUFDUCxZQUFZLEVBQUUsOEJBQThCO0tBQzdDO0NBQ0YsQ0FBQSJ9
|