UNPKG

@rokmohar/medusa-plugin-meilisearch

Version:
120 lines 9.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const framework_1 = require("@medusajs/framework"); const medusa_1 = require("./utils/medusa"); const route_1 = require("./store/meilisearch/categories-hits/route"); const route_2 = require("./store/meilisearch/products-hits/route"); const route_3 = require("./admin/meilisearch/categories-hits/route"); const route_4 = require("./admin/meilisearch/products-hits/route"); require("./types"); /** * Meilisearch-only params are not part of the native Medusa validators (which are * strict and reject unknown keys). Pull them off `req.query` BEFORE the native * `validateAndTransformQuery` runs, and stash them on `req.meiliParams` for the * route handler. Express 4: `req.query` is a mutable plain object. */ function extractMeiliParams(req, _res, next) { const q = req.query; const semanticRatioRaw = q.semanticRatio; req.meiliParams = { query: typeof q.query === 'string' ? q.query : undefined, language: typeof q.language === 'string' ? q.language : undefined, semanticSearch: q.semanticSearch === 'true', semanticRatio: typeof semanticRatioRaw === 'string' && semanticRatioRaw !== '' ? Number(semanticRatioRaw) : 0.5, }; delete q.query; delete q.language; delete q.semanticSearch; delete q.semanticRatio; next(); } /** * Port of the native `/store/products` `applyMaybeLinkFilterIfNecessary` middleware. * Sales-channel link filtering is only applied when more than one sales channel * exists; otherwise the `sales_channel_id` filter is dropped (same as native). * * The native index-engine early-return is intentionally omitted: it only applies * when the (opt-in) index engine feature flag is enabled, in which case native uses * a different query path entirely. These routes always use `query.graph`, so the * default-flag-off behaviour is the correct parity target. */ async function applyMaybeLinkFilterIfNecessary(req, res, next) { const query = req.scope.resolve(medusa_1.ContainerRegistrationKeys.QUERY); const salesChannelsQueryRes = await query.graph({ entity: 'sales_channels', fields: ['id'], pagination: { skip: 0, take: 1 }, }); const salesChannelCount = salesChannelsQueryRes.metadata?.count ?? 0; if (!(salesChannelCount > 1)) { delete req.filterableFields['sales_channel_id']; return next(); } return (0, medusa_1.maybeApplyLinkFilter)({ entryPoint: 'product_sales_channel', resourceId: 'product_id', filterableField: 'sales_channel_id', })(req, res, next); } exports.default = (0, framework_1.defineMiddlewares)({ routes: [ // Mirrors native `/store/products` middleware stack so the custom endpoint // behaves identically (auth, sales channels, published default, pricing/tax). { methods: ['GET'], matcher: '/store/meilisearch/products', middlewares: [ (0, medusa_1.authenticate)('customer', ['session', 'bearer'], { allowUnauthenticated: true }), extractMeiliParams, (0, framework_1.validateAndTransformQuery)(medusa_1.StoreGetProductsParams, medusa_1.listProductQueryConfig), (0, medusa_1.filterByValidSalesChannels)(), applyMaybeLinkFilterIfNecessary, (0, medusa_1.applyDefaultFilters)({ status: medusa_1.ProductStatus.PUBLISHED, categories: (filters) => { const categoryIds = filters.category_id; delete filters.category_id; if (!(0, medusa_1.isPresent)(categoryIds)) { return; } return { id: categoryIds, is_internal: false, is_active: true }; }, }), (0, medusa_1.normalizeDataForContext)(), (0, medusa_1.setPricingContext)(), (0, medusa_1.setTaxContext)(), (0, medusa_1.clearFiltersByKey)(['region_id', 'country_code', 'province', 'cart_id']), ], }, // Mirrors native `/store/product-categories` (validate/transform only). { methods: ['GET'], matcher: '/store/meilisearch/categories', middlewares: [ extractMeiliParams, (0, framework_1.validateAndTransformQuery)(medusa_1.StoreProductCategoriesParams, medusa_1.listProductCategoryConfig), ], }, { methods: ['GET'], matcher: '/store/meilisearch/categories-hits', middlewares: [(0, framework_1.validateAndTransformQuery)(route_1.StoreSearchCategoriesSchema, {})], }, { methods: ['GET'], matcher: '/store/meilisearch/products-hits', middlewares: [(0, framework_1.validateAndTransformQuery)(route_2.StoreSearchProductsSchema, {})], }, { methods: ['POST'], matcher: '/admin/meilisearch/categories-hits', middlewares: [(0, framework_1.validateAndTransformBody)(route_3.AdminSearchCategoriesSchema)], }, { methods: ['POST'], matcher: '/admin/meilisearch/products-hits', middlewares: [(0, framework_1.validateAndTransformBody)(route_4.AdminSearchProductsSchema)], }, ], }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBTzRCO0FBQzVCLDJDQWdCdUI7QUFDdkIscUVBQXVGO0FBQ3ZGLG1FQUFtRjtBQUNuRixxRUFBdUY7QUFDdkYsbUVBQW1GO0FBQ25GLG1CQUFnQjtBQUVoQjs7Ozs7R0FLRztBQUNILFNBQVMsa0JBQWtCLENBQUMsR0FBa0IsRUFBRSxJQUFvQixFQUFFLElBQXdCO0lBQzVGLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7SUFDbkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFBO0lBRXhDLEdBQUcsQ0FBQyxXQUFXLEdBQUc7UUFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDeEQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDakUsY0FBYyxFQUFFLENBQUMsQ0FBQyxjQUFjLEtBQUssTUFBTTtRQUMzQyxhQUFhLEVBQUUsT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLElBQUksZ0JBQWdCLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRztLQUNoSCxDQUFBO0lBRUQsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ2QsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFBO0lBQ2pCLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQTtJQUN2QixPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUE7SUFFdEIsSUFBSSxFQUFFLENBQUE7QUFD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