UNPKG

vinmonopolet-ts

Version:

Extracts information on products, categories and stores from Vinmonopolet

33 lines (32 loc) 1.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const GET_1 = require("../../util/GET"); const constants_1 = require("../../constants"); const Pagination_1 = __importDefault(require("../../models/Pagination")); const mapper_1 = require("../../models/product/mapper"); const sortFields = ["relevance", "name", "price"]; const sortOrders = ["asc", "desc"]; async function getProducts(options) { const query = createSearchQuery(options); const productSearchResult = await (0, GET_1.GET)(constants_1.VINMONOPOLET_SEARCH_URL, query); return { pagination: new Pagination_1.default(productSearchResult.pagination, options, getProducts), products: productSearchResult.products.map(mapper_1.fromDTOToBaseProduct), }; } function createSearchQuery(options) { const facetquery = options?.facets?.map((facet) => facet.query) ?? []; const sortQuery = options?.sort ? `:${options.sort}:` : ":relevance:"; const textQuery = options?.query ?? ""; return new URLSearchParams({ searchType: "product", fields: "FULL", pageSize: (options?.limit ? options.limit : 24).toString(), currentPage: (options?.page ? options.page - 1 : 0).toString(), q: textQuery + sortQuery + facetquery?.join(":"), }); } exports.default = getProducts;