vinmonopolet-ts 2.0.7 → 2.1.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  #Changelog
2
2
 
3
+ ## [2.1.1]
4
+
5
+ ### Changed
6
+
7
+ - Made UpcomingProduct a FacetValue object
8
+
9
+ ## [2.1.0]
10
+
11
+ #### Added
12
+
13
+ - Added getProductReleases
14
+ - Added upcomingProduct facet
15
+
16
+ ### Breaking changes
17
+
18
+ - Minimum node version is now v18
19
+
3
20
  ## [2.0.4]
4
21
 
5
22
  #### Added
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VINMONOPOLET_SEARCH_URL = void 0;
4
+ exports.VINMONOPOLET_SEARCH_URL = "https://www.vinmonopolet.no/vmpws/v2/vmp/search/content";
package/dist/cjs/index.js CHANGED
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.stream = exports.getStore = exports.searchProducts = exports.searchStores = exports.getAllStores = exports.getProductsByIds = exports.getProductsByStore = exports.getProductByBarcode = exports.getFacets = exports.getProduct = exports.getProductCount = exports.getProducts = exports.BaseStore = exports.PopulatedStore = exports.RawMaterial = exports.ProductStatus = exports.ProductImage = exports.StreamProduct = exports.PopulatedProduct = exports.BaseProduct = exports.Pagination = exports.FoodPairing = exports.FacetCategory = exports.FacetValue = exports.Facet = void 0;
29
+ exports.stream = exports.getProductReleases = exports.getStore = exports.searchProducts = exports.searchStores = exports.getAllStores = exports.getProductsByIds = exports.getProductsByStore = exports.getProductByBarcode = exports.getFacets = exports.getProduct = exports.getProductCount = exports.getProducts = exports.BaseStore = exports.PopulatedStore = exports.RawMaterial = exports.ProductStatus = exports.ProductImage = exports.StreamProduct = exports.PopulatedProduct = exports.BaseProduct = exports.Pagination = exports.FoodPairing = exports.FacetCategory = exports.FacetValue = exports.Facet = void 0;
30
30
  require("reflect-metadata");
31
31
  var Facet_1 = require("./models/Facet");
32
32
  Object.defineProperty(exports, "Facet", { enumerable: true, get: function () { return __importDefault(Facet_1).default; } });
@@ -70,5 +70,7 @@ var searchProducts_1 = require("./retrievers/searchProducts");
70
70
  Object.defineProperty(exports, "searchProducts", { enumerable: true, get: function () { return __importDefault(searchProducts_1).default; } });
71
71
  var getStore_1 = require("./retrievers/getStore");
72
72
  Object.defineProperty(exports, "getStore", { enumerable: true, get: function () { return __importDefault(getStore_1).default; } });
73
+ var getProductReleases_1 = require("./retrievers/getProductReleases");
74
+ Object.defineProperty(exports, "getProductReleases", { enumerable: true, get: function () { return __importDefault(getProductReleases_1).default; } });
73
75
  var stream_1 = require("./stream");
74
76
  Object.defineProperty(exports, "stream", { enumerable: true, get: function () { return __importDefault(stream_1).default; } });
@@ -118,4 +118,8 @@ class Facet {
118
118
  }
119
119
  }
120
120
  Facet.Category = (0, exports.FacetCategoryMapping)();
121
+ Facet.UpcomingProduct = new FacetValue_1.default({
122
+ name: "Upcoming product",
123
+ query: { query: { value: "upcomingProduct:true" } },
124
+ });
121
125
  exports.default = Facet;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class ProductRelease {
4
+ constructor(title, primaryCategoryName, url, image, releaseDate) {
5
+ this.title = title;
6
+ this.primaryCategoryName = primaryCategoryName;
7
+ this.url = url;
8
+ this.image = image;
9
+ this.releaseDate = releaseDate;
10
+ }
11
+ }
12
+ exports.default = ProductRelease;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const constants_1 = require("../constants");
7
+ const ProductRelease_1 = __importDefault(require("../models/ProductRelease"));
8
+ const GET_1 = require("../util/GET");
9
+ function getAbsoluteURL(path) {
10
+ return path.startsWith("/")
11
+ ? "www.vinmonopolet.no" + path
12
+ : "www.vinmonopolet.no/" + path;
13
+ }
14
+ function tryToGetReleaseDate(title) {
15
+ const splitTitle = title.split(":");
16
+ if (splitTitle.length < 2) {
17
+ return undefined;
18
+ }
19
+ return splitTitle[0];
20
+ }
21
+ function toProductRelease(dto) {
22
+ return new ProductRelease_1.default(dto.title, dto.primaryCategoryName, getAbsoluteURL(dto.label), getAbsoluteURL(dto.listImageUrl), tryToGetReleaseDate(dto.title));
23
+ }
24
+ async function getProductReleases() {
25
+ const { contentSearchResult } = await (0, GET_1.GET)(constants_1.VINMONOPOLET_SEARCH_URL, {
26
+ queryParams: {
27
+ categoryCode: "lanseringer",
28
+ },
29
+ });
30
+ return contentSearchResult.results.map(toProductRelease);
31
+ }
32
+ exports.default = getProductReleases;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("./index");
4
+ (0, index_1.getProducts)({ facets: [index_1.Facet.Category.BEER, index_1.Facet.UpcomingProduct] }).then((res) => {
5
+ console.log(res);
6
+ });
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ async function GET(url, { queryParams }) {
5
+ const urlSearchParams = queryParams
6
+ ? `?${new URLSearchParams(queryParams)}`
7
+ : "";
8
+ const response = await fetch(url + urlSearchParams);
9
+ if (!response.ok) {
10
+ console.log(response.status);
11
+ const errorMessage = await response.text();
12
+ throw new Error(errorMessage);
13
+ }
14
+ const responseJson = (await response.json());
15
+ return responseJson;
16
+ }
17
+ exports.GET = GET;
@@ -0,0 +1 @@
1
+ export const VINMONOPOLET_SEARCH_URL = "https://www.vinmonopolet.no/vmpws/v2/vmp/search/content";
package/dist/esm/index.js CHANGED
@@ -18,4 +18,5 @@ export { default as getProductsByIds } from "./retrievers/getProductsById";
18
18
  export { default as getAllStores, searchStores } from "./retrievers/getStores";
19
19
  export { default as searchProducts } from "./retrievers/searchProducts";
20
20
  export { default as getStore } from "./retrievers/getStore";
21
+ export { default as getProductReleases } from "./retrievers/getProductReleases";
21
22
  export { default as stream } from "./stream";
@@ -93,5 +93,9 @@ class Facet {
93
93
  this.values = facet.values.map((val) => new FacetValue(val, valueFilter));
94
94
  }
95
95
  static Category = FacetCategoryMapping();
96
+ static UpcomingProduct = new FacetValue({
97
+ name: "Upcoming product",
98
+ query: { query: { value: "upcomingProduct:true" } },
99
+ });
96
100
  }
97
101
  export default Facet;
@@ -0,0 +1,15 @@
1
+ class ProductRelease {
2
+ title;
3
+ primaryCategoryName;
4
+ url;
5
+ image;
6
+ releaseDate;
7
+ constructor(title, primaryCategoryName, url, image, releaseDate) {
8
+ this.title = title;
9
+ this.primaryCategoryName = primaryCategoryName;
10
+ this.url = url;
11
+ this.image = image;
12
+ this.releaseDate = releaseDate;
13
+ }
14
+ }
15
+ export default ProductRelease;
@@ -0,0 +1,27 @@
1
+ import { VINMONOPOLET_SEARCH_URL } from "../constants";
2
+ import ProductRelease from "../models/ProductRelease";
3
+ import { GET } from "../util/GET";
4
+ function getAbsoluteURL(path) {
5
+ return path.startsWith("/")
6
+ ? "www.vinmonopolet.no" + path
7
+ : "www.vinmonopolet.no/" + path;
8
+ }
9
+ function tryToGetReleaseDate(title) {
10
+ const splitTitle = title.split(":");
11
+ if (splitTitle.length < 2) {
12
+ return undefined;
13
+ }
14
+ return splitTitle[0];
15
+ }
16
+ function toProductRelease(dto) {
17
+ return new ProductRelease(dto.title, dto.primaryCategoryName, getAbsoluteURL(dto.label), getAbsoluteURL(dto.listImageUrl), tryToGetReleaseDate(dto.title));
18
+ }
19
+ async function getProductReleases() {
20
+ const { contentSearchResult } = await GET(VINMONOPOLET_SEARCH_URL, {
21
+ queryParams: {
22
+ categoryCode: "lanseringer",
23
+ },
24
+ });
25
+ return contentSearchResult.results.map(toProductRelease);
26
+ }
27
+ export default getProductReleases;
@@ -0,0 +1,4 @@
1
+ import { Facet, getProducts } from "./index";
2
+ getProducts({ facets: [Facet.Category.BEER, Facet.UpcomingProduct] }).then((res) => {
3
+ console.log(res);
4
+ });
@@ -0,0 +1,13 @@
1
+ export async function GET(url, { queryParams }) {
2
+ const urlSearchParams = queryParams
3
+ ? `?${new URLSearchParams(queryParams)}`
4
+ : "";
5
+ const response = await fetch(url + urlSearchParams);
6
+ if (!response.ok) {
7
+ console.log(response.status);
8
+ const errorMessage = await response.text();
9
+ throw new Error(errorMessage);
10
+ }
11
+ const responseJson = (await response.json());
12
+ return responseJson;
13
+ }
@@ -0,0 +1 @@
1
+ export declare const VINMONOPOLET_SEARCH_URL = "https://www.vinmonopolet.no/vmpws/v2/vmp/search/content";
@@ -18,4 +18,5 @@ export { default as getProductsByIds } from "./retrievers/getProductsById";
18
18
  export { default as getAllStores, searchStores } from "./retrievers/getStores";
19
19
  export { default as searchProducts } from "./retrievers/searchProducts";
20
20
  export { default as getStore } from "./retrievers/getStore";
21
+ export { default as getProductReleases } from "./retrievers/getProductReleases";
21
22
  export { default as stream } from "./stream";
@@ -13,5 +13,6 @@ declare class Facet {
13
13
  values: FacetValue[];
14
14
  constructor(facet: any);
15
15
  static Category: FacetCategory;
16
+ static UpcomingProduct: FacetValue;
16
17
  }
17
18
  export default Facet;
@@ -0,0 +1,9 @@
1
+ declare class ProductRelease {
2
+ title: string;
3
+ primaryCategoryName: string;
4
+ url: string;
5
+ image: string;
6
+ releaseDate: string | undefined;
7
+ constructor(title: string, primaryCategoryName: string, url: string, image: string, releaseDate: string | undefined);
8
+ }
9
+ export default ProductRelease;
@@ -0,0 +1,3 @@
1
+ import ProductRelease from "../models/ProductRelease";
2
+ declare function getProductReleases(): Promise<ProductRelease[]>;
3
+ export default getProductReleases;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ interface IGETOptions {
2
+ queryParams?: {
3
+ [key: string]: string;
4
+ };
5
+ }
6
+ export declare function GET<T>(url: string, { queryParams }: IGETOptions): Promise<T>;
7
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vinmonopolet-ts",
3
3
  "description": "Extracts information on products, categories and stores from Vinmonopolet",
4
- "version": "2.0.7",
4
+ "version": "2.1.1",
5
5
  "keywords": [
6
6
  "vinmonopolet",
7
7
  "beer",