vinmonopolet-ts 5.2.11 → 5.2.12

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,11 @@
1
1
  ## [5.2.11]
2
2
 
3
+ ### Changed
4
+
5
+ - All functions now throw `VinmonopoletError` if fetch fails.
6
+
7
+ ## [5.2.11]
8
+
3
9
  ### Added
4
10
 
5
11
  - Added the ability to override vinmonopolet base url by setting an environment variable
package/README.md CHANGED
@@ -32,6 +32,24 @@ This project is a rewrite of the original package in typescript, so it is now fu
32
32
 
33
33
  You can override the base URL (`www.vinmonopolet.no`) by setting the `VINMONOPOLET_BASE_URL` environment variable, for example `VINMONOPOLET_BASE_URL=http://localhost:3000`.
34
34
 
35
+ ## Error handling
36
+
37
+ All the functions throws `VinmonopoletError` if something goes wrong. It extends from the base javascript `Error`class and contains a http status code.
38
+
39
+ ```ts
40
+ import { VinmonopoletError } from "vinmonopolet-ts";
41
+
42
+ async function getAllProducs() {
43
+ try {
44
+ const procuts = await getProducts();
45
+ } catch (error) {
46
+ if (error instanceof VinmonopoletError) {
47
+ // Handle error
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
35
53
  ## Documentation
36
54
 
37
55
  ### GetProducts
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class VinmonopoletError extends Error {
4
+ constructor(message, status) {
5
+ super(message);
6
+ this.status = status;
7
+ }
8
+ }
9
+ exports.default = VinmonopoletError;
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.getProductReleases = exports.getStore = exports.searchStores = exports.getAllStores = exports.getProductsByIds = exports.getProductsByStore = exports.getFacets = exports.getProduct = exports.getProducts = exports.PopulatedStore = exports.BaseStore = exports.RawMaterial = exports.ProductStatus = exports.ProductImage = exports.PopulatedProduct = exports.BaseProduct = exports.Pagination = exports.FoodPairing = exports.FacetCategory = exports.FacetValue = exports.Facet = void 0;
29
+ exports.getProductReleases = exports.getStore = exports.searchStores = exports.getAllStores = exports.getProductsByIds = exports.getProductsByStore = exports.getFacets = exports.getProduct = exports.getProducts = exports.VinmonopoletError = exports.PopulatedStore = exports.BaseStore = exports.RawMaterial = exports.ProductStatus = exports.ProductImage = 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; } });
@@ -51,6 +51,8 @@ var BaseStore_1 = require("./models/store/BaseStore");
51
51
  Object.defineProperty(exports, "BaseStore", { enumerable: true, get: function () { return __importDefault(BaseStore_1).default; } });
52
52
  var BaseStore_2 = require("./models/store/BaseStore");
53
53
  Object.defineProperty(exports, "PopulatedStore", { enumerable: true, get: function () { return __importDefault(BaseStore_2).default; } });
54
+ var VinmonopoletError_1 = require("./exceptions/VinmonopoletError");
55
+ Object.defineProperty(exports, "VinmonopoletError", { enumerable: true, get: function () { return __importDefault(VinmonopoletError_1).default; } });
54
56
  var getProducts_1 = require("./retrievers/getProducts");
55
57
  Object.defineProperty(exports, "getProducts", { enumerable: true, get: function () { return __importDefault(getProducts_1).default; } });
56
58
  var getProduct_1 = require("./retrievers/getProduct");
@@ -1,22 +1,35 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.GET = void 0;
7
+ const VinmonopoletError_1 = __importDefault(require("../exceptions/VinmonopoletError"));
4
8
  async function GET(url, queryparams) {
5
- const urlSearchParams = queryparams?.toString() ?? "";
6
- const headers = {
7
- "Content-Type": "Application/json",
8
- };
9
- if (process.env.USER_AGENT) {
10
- headers["User-Agent"] = process.env.USER_AGENT;
9
+ try {
10
+ const urlSearchParams = queryparams?.toString() ?? "";
11
+ const headers = {
12
+ "Content-Type": "Application/json",
13
+ };
14
+ if (process.env.USER_AGENT) {
15
+ headers["User-Agent"] = process.env.USER_AGENT;
16
+ }
17
+ const response = await fetch(url + "?" + urlSearchParams, { headers });
18
+ if (!response.ok) {
19
+ const parsedErrorResponse = await response.text();
20
+ throw new VinmonopoletError_1.default(parsedErrorResponse != ""
21
+ ? parsedErrorResponse
22
+ : `Unable to get ${url}?${urlSearchParams}: http error ${response.status}`, response.status);
23
+ }
24
+ const responseJson = (await response.json());
25
+ return responseJson;
11
26
  }
12
- const response = await fetch(url + "?" + urlSearchParams, { headers });
13
- if (!response.ok) {
14
- const parsedErrorResponse = await response.text();
15
- throw new Error(parsedErrorResponse != ""
16
- ? parsedErrorResponse
17
- : `Unable to get ${url}?${urlSearchParams}: http error ${response.status}`);
27
+ catch (error) {
28
+ if (error instanceof VinmonopoletError_1.default)
29
+ throw error;
30
+ if (error instanceof Error)
31
+ throw new VinmonopoletError_1.default(`Network error fetching ${url}: ${error.message}`);
32
+ throw new VinmonopoletError_1.default(`Network error fetching ${url}: ${error}`);
18
33
  }
19
- const responseJson = (await response.json());
20
- return responseJson;
21
34
  }
22
35
  exports.GET = GET;
@@ -0,0 +1,8 @@
1
+ class VinmonopoletError extends Error {
2
+ status;
3
+ constructor(message, status) {
4
+ super(message);
5
+ this.status = status;
6
+ }
7
+ }
8
+ export default VinmonopoletError;
package/dist/esm/index.js CHANGED
@@ -11,6 +11,7 @@ export { default as ProductStatus } from "./models/ProductStatus";
11
11
  export { default as RawMaterial } from "./models/RawMaterial";
12
12
  export { default as BaseStore } from "./models/store/BaseStore";
13
13
  export { default as PopulatedStore } from "./models/store/BaseStore";
14
+ export { default as VinmonopoletError } from "./exceptions/VinmonopoletError";
14
15
  export { default as getProducts } from "./retrievers/getProducts";
15
16
  export { default as getProduct } from "./retrievers/getProduct";
16
17
  export { default as getFacets } from "./retrievers/getFacets";
@@ -1,18 +1,28 @@
1
+ import VinmonopoletError from "../exceptions/VinmonopoletError";
1
2
  export async function GET(url, queryparams) {
2
- const urlSearchParams = queryparams?.toString() ?? "";
3
- const headers = {
4
- "Content-Type": "Application/json",
5
- };
6
- if (process.env.USER_AGENT) {
7
- headers["User-Agent"] = process.env.USER_AGENT;
3
+ try {
4
+ const urlSearchParams = queryparams?.toString() ?? "";
5
+ const headers = {
6
+ "Content-Type": "Application/json",
7
+ };
8
+ if (process.env.USER_AGENT) {
9
+ headers["User-Agent"] = process.env.USER_AGENT;
10
+ }
11
+ const response = await fetch(url + "?" + urlSearchParams, { headers });
12
+ if (!response.ok) {
13
+ const parsedErrorResponse = await response.text();
14
+ throw new VinmonopoletError(parsedErrorResponse != ""
15
+ ? parsedErrorResponse
16
+ : `Unable to get ${url}?${urlSearchParams}: http error ${response.status}`, response.status);
17
+ }
18
+ const responseJson = (await response.json());
19
+ return responseJson;
8
20
  }
9
- const response = await fetch(url + "?" + urlSearchParams, { headers });
10
- if (!response.ok) {
11
- const parsedErrorResponse = await response.text();
12
- throw new Error(parsedErrorResponse != ""
13
- ? parsedErrorResponse
14
- : `Unable to get ${url}?${urlSearchParams}: http error ${response.status}`);
21
+ catch (error) {
22
+ if (error instanceof VinmonopoletError)
23
+ throw error;
24
+ if (error instanceof Error)
25
+ throw new VinmonopoletError(`Network error fetching ${url}: ${error.message}`);
26
+ throw new VinmonopoletError(`Network error fetching ${url}: ${error}`);
15
27
  }
16
- const responseJson = (await response.json());
17
- return responseJson;
18
28
  }
@@ -0,0 +1,5 @@
1
+ declare class VinmonopoletError extends Error {
2
+ status?: number;
3
+ constructor(message: string, status?: number);
4
+ }
5
+ export default VinmonopoletError;
@@ -11,6 +11,7 @@ export { default as ProductStatus } from "./models/ProductStatus";
11
11
  export { default as RawMaterial } from "./models/RawMaterial";
12
12
  export { default as BaseStore } from "./models/store/BaseStore";
13
13
  export { default as PopulatedStore } from "./models/store/BaseStore";
14
+ export { default as VinmonopoletError } from "./exceptions/VinmonopoletError";
14
15
  export { default as getProducts } from "./retrievers/getProducts";
15
16
  export { default as getProduct } from "./retrievers/getProduct";
16
17
  export { default as getFacets } from "./retrievers/getFacets";
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": "5.2.11",
4
+ "version": "5.2.12",
5
5
  "keywords": [
6
6
  "vinmonopolet",
7
7
  "beer",