@ancon/wildcat-utils 1.2.1 → 1.5.0

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.
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Get a versioned endpoint URL
3
+ * @param endpoint Endpoint URL (ie "someEndpoint/{someId}")
4
+ * @param version Endpoint version (ie 1.1)
5
+ * @returns Versioned endpoint (ie "v1.1/someEndpoint/{someId}")
6
+ */
7
+ export default function getEndpointWithVersion(endpoint: string, version?: number): string;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Get a versioned endpoint URL
5
+ * @param endpoint Endpoint URL (ie "someEndpoint/{someId}")
6
+ * @param version Endpoint version (ie 1.1)
7
+ * @returns Versioned endpoint (ie "v1.1/someEndpoint/{someId}")
8
+ */
9
+ function getEndpointWithVersion(endpoint, version = 1.0) {
10
+ return `v${version.toFixed(1)}/${endpoint}`;
11
+ }
12
+ exports.default = getEndpointWithVersion;
@@ -0,0 +1,13 @@
1
+ import type { APIParams } from '@ancon/wildcat-types';
2
+ /**
3
+ * Get an object with URL and query parameters.
4
+ * If the queryParams object contains keys found in the URL string,
5
+ * those will be inserted into the new URL string and removed from the new params object.
6
+ * @param url URL
7
+ * @param queryParams Query parameters object
8
+ * @returns An object containing the URL and parameters
9
+ */
10
+ export default function getUrlAndParams(url: string, queryParams?: APIParams): {
11
+ url: string;
12
+ params: APIParams;
13
+ };
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const URL_PARAM_EXP = /(\/{.+?})/g;
4
+ const BRACES_EXP = /[/{}]/g;
5
+ /**
6
+ * Get an object with URL and query parameters.
7
+ * If the queryParams object contains keys found in the URL string,
8
+ * those will be inserted into the new URL string and removed from the new params object.
9
+ * @param url URL
10
+ * @param queryParams Query parameters object
11
+ * @returns An object containing the URL and parameters
12
+ */
13
+ function getUrlAndParams(url, queryParams) {
14
+ const fallback = { url, params: queryParams !== null && queryParams !== void 0 ? queryParams : {} };
15
+ if (!queryParams)
16
+ return fallback;
17
+ const urlParamTemplates = url.match(URL_PARAM_EXP);
18
+ if (urlParamTemplates === null || urlParamTemplates === void 0 ? void 0 : urlParamTemplates.length) {
19
+ return urlParamTemplates.reduce((acc, paramTemplate) => {
20
+ const paramName = paramTemplate.replace(BRACES_EXP, '');
21
+ const paramValue = queryParams[paramName];
22
+ if (!paramValue) {
23
+ acc.params[paramName] = queryParams[paramName];
24
+ }
25
+ else {
26
+ delete acc.params[paramName];
27
+ acc.url = acc.url.replace(new RegExp(paramTemplate, 'g'), `/${paramValue}`);
28
+ }
29
+ return acc;
30
+ }, {
31
+ url,
32
+ params: Object.assign({}, queryParams),
33
+ });
34
+ }
35
+ return fallback;
36
+ }
37
+ exports.default = getUrlAndParams;
@@ -0,0 +1,5 @@
1
+ import getUrlAndParams from './getUrlAndParams';
2
+ import getEndpointWithVersion from './getEndpointWithVersion';
3
+ export { getUrlAndParams, getEndpointWithVersion };
4
+ declare const _default: {};
5
+ export default _default;
@@ -0,0 +1,11 @@
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
+ exports.getEndpointWithVersion = exports.getUrlAndParams = void 0;
7
+ const getUrlAndParams_1 = __importDefault(require("./getUrlAndParams"));
8
+ exports.getUrlAndParams = getUrlAndParams_1.default;
9
+ const getEndpointWithVersion_1 = __importDefault(require("./getEndpointWithVersion"));
10
+ exports.getEndpointWithVersion = getEndpointWithVersion_1.default;
11
+ exports.default = {};
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './shared';
2
2
  export * from './outlet';
3
+ export * from './versioning';
4
+ export * from './api';
package/dist/index.js CHANGED
@@ -12,3 +12,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./shared"), exports);
14
14
  __exportStar(require("./outlet"), exports);
15
+ __exportStar(require("./versioning"), exports);
16
+ __exportStar(require("./api"), exports);
@@ -4,12 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const moment_1 = __importDefault(require("moment"));
7
- const __1 = require("..");
7
+ const enums_1 = require("../shared/enums");
8
+ const shared_1 = require("../shared");
8
9
  const ORDER_FORMATS = [
9
- { id: __1.OrderFormat.EatIn, name: 'eatIn' },
10
- { id: __1.OrderFormat.Takeaway, name: 'takeaway' },
11
- { id: __1.OrderFormat.TableOrder, name: 'tableOrder' },
12
- { id: __1.OrderFormat.Delivery, name: 'delivery' },
10
+ { id: enums_1.OrderFormat.EatIn, name: 'eatIn' },
11
+ { id: enums_1.OrderFormat.Takeaway, name: 'takeaway' },
12
+ { id: enums_1.OrderFormat.TableOrder, name: 'tableOrder' },
13
+ { id: enums_1.OrderFormat.Delivery, name: 'delivery' },
13
14
  ];
14
15
  function generateWeekFromToday(nowISOString) {
15
16
  const today = moment_1.default.utc(nowISOString).subtract(1, 'day').startOf('day');
@@ -29,7 +30,7 @@ function getIntervalTimestampAsNumbers(timestamp) {
29
30
  function formatInterval(interval, weekdayMoment) {
30
31
  const [startHour, startMinute] = getIntervalTimestampAsNumbers(interval.start);
31
32
  const [durationHour, durationMinute] = getIntervalTimestampAsNumbers(interval.duration);
32
- if (interval.type === __1.IntervalType.Interval) {
33
+ if (interval.type === enums_1.IntervalType.Interval) {
33
34
  const startMoment = weekdayMoment
34
35
  .clone()
35
36
  .add(startHour, 'hour')
@@ -44,7 +45,7 @@ function formatInterval(interval, weekdayMoment) {
44
45
  end: endMoment.toISOString(),
45
46
  };
46
47
  }
47
- if (interval.type === __1.IntervalType.Exception) {
48
+ if (interval.type === enums_1.IntervalType.Exception) {
48
49
  const fromDateMoment = (0, moment_1.default)(interval.fromDate);
49
50
  const toDateMoment = (0, moment_1.default)(interval.toDate);
50
51
  if (weekdayMoment.isBetween(fromDateMoment, toDateMoment, undefined, '[]')) {
@@ -70,13 +71,13 @@ function formatInterval(interval, weekdayMoment) {
70
71
  function collectReadableInterval(interval, week, collector) {
71
72
  var _a;
72
73
  const weekdayIsoMap = {
73
- [__1.DayOfWeek.Monday]: 1,
74
- [__1.DayOfWeek.Tuesday]: 2,
75
- [__1.DayOfWeek.Wednesday]: 3,
76
- [__1.DayOfWeek.Thursday]: 4,
77
- [__1.DayOfWeek.Friday]: 5,
78
- [__1.DayOfWeek.Saturday]: 6,
79
- [__1.DayOfWeek.Sunday]: 7,
74
+ [enums_1.DayOfWeek.Monday]: 1,
75
+ [enums_1.DayOfWeek.Tuesday]: 2,
76
+ [enums_1.DayOfWeek.Wednesday]: 3,
77
+ [enums_1.DayOfWeek.Thursday]: 4,
78
+ [enums_1.DayOfWeek.Friday]: 5,
79
+ [enums_1.DayOfWeek.Saturday]: 6,
80
+ [enums_1.DayOfWeek.Sunday]: 7,
80
81
  };
81
82
  for (let i = 0; i < week.length; i += 1) {
82
83
  const weekdayMoment = week[i];
@@ -84,7 +85,7 @@ function collectReadableInterval(interval, week, collector) {
84
85
  const intervalWeekdayEnum = interval.dayOfWeek;
85
86
  const intervalIsoWeekday = (_a = weekdayIsoMap[intervalWeekdayEnum]) !== null && _a !== void 0 ? _a : null;
86
87
  const intervalIsApplicableToday = intervalIsoWeekday === momentIsoWeekday ||
87
- intervalWeekdayEnum === __1.DayOfWeek.Everyday;
88
+ intervalWeekdayEnum === enums_1.DayOfWeek.Everyday;
88
89
  if (!collector[momentIsoWeekday]) {
89
90
  // eslint-disable-next-line no-param-reassign
90
91
  collector[momentIsoWeekday] = {
@@ -100,20 +101,20 @@ function collectReadableInterval(interval, week, collector) {
100
101
  if (formattedInterval) {
101
102
  // eslint-disable-next-line no-param-reassign
102
103
  collector[momentIsoWeekday].key += formattedInterval.id;
103
- if (interval.type === __1.IntervalType.Interval &&
104
- interval.state === __1.IntervalState.Open) {
104
+ if (interval.type === enums_1.IntervalType.Interval &&
105
+ interval.state === enums_1.IntervalState.Open) {
105
106
  collector[momentIsoWeekday].open.push(formattedInterval);
106
107
  }
107
- else if (interval.type === __1.IntervalType.Interval &&
108
- interval.state === __1.IntervalState.Closed) {
108
+ else if (interval.type === enums_1.IntervalType.Interval &&
109
+ interval.state === enums_1.IntervalState.Closed) {
109
110
  collector[momentIsoWeekday].closed.push(formattedInterval);
110
111
  }
111
- else if (interval.type === __1.IntervalType.Exception &&
112
- interval.state === __1.IntervalState.Open) {
112
+ else if (interval.type === enums_1.IntervalType.Exception &&
113
+ interval.state === enums_1.IntervalState.Open) {
113
114
  collector[momentIsoWeekday].adjusted.push(formattedInterval);
114
115
  }
115
- else if (interval.type === __1.IntervalType.Exception &&
116
- interval.state === __1.IntervalState.Closed) {
116
+ else if (interval.type === enums_1.IntervalType.Exception &&
117
+ interval.state === enums_1.IntervalState.Closed) {
117
118
  collector[momentIsoWeekday].closed.push(formattedInterval);
118
119
  }
119
120
  }
@@ -122,18 +123,18 @@ function collectReadableInterval(interval, week, collector) {
122
123
  }
123
124
  function generateIntervalId(interval) {
124
125
  switch (interval.type) {
125
- case __1.IntervalType.Exception:
126
- return (0, __1.generateId)('interval-exception');
127
- case __1.IntervalType.Interval:
128
- return (0, __1.generateId)('interval-normal');
126
+ case enums_1.IntervalType.Exception:
127
+ return (0, shared_1.generateId)('interval-exception');
128
+ case enums_1.IntervalType.Interval:
129
+ return (0, shared_1.generateId)('interval-normal');
129
130
  default:
130
- return (0, __1.generateId)('interval-unknown');
131
+ return (0, shared_1.generateId)('interval-unknown');
131
132
  }
132
133
  }
133
134
  function splitServiceDateTimes(serviceDateTimes) {
134
135
  const flattenedMap = serviceDateTimes.reduce((acc, serviceDateTime) => {
135
136
  ORDER_FORMATS.forEach(readableOrderFormat => {
136
- if ((0, __1.isWithinFlag)(readableOrderFormat.id, serviceDateTime.orderFormats)) {
137
+ if ((0, shared_1.isWithinFlag)(readableOrderFormat.id, serviceDateTime.orderFormats)) {
137
138
  if (!acc[readableOrderFormat.id]) {
138
139
  acc[readableOrderFormat.id] = {
139
140
  orderFormat: readableOrderFormat,
@@ -189,10 +190,10 @@ function getListOutletOpeningHoursTable(outlet, nowISOString) {
189
190
  return acc;
190
191
  }, {});
191
192
  const readableOrderFormatMap = {
192
- [__1.OrderFormat.EatIn]: ORDER_FORMATS[0],
193
- [__1.OrderFormat.Takeaway]: ORDER_FORMATS[1],
194
- [__1.OrderFormat.TableOrder]: ORDER_FORMATS[2],
195
- [__1.OrderFormat.Delivery]: ORDER_FORMATS[3],
193
+ [enums_1.OrderFormat.EatIn]: ORDER_FORMATS[0],
194
+ [enums_1.OrderFormat.Takeaway]: ORDER_FORMATS[1],
195
+ [enums_1.OrderFormat.TableOrder]: ORDER_FORMATS[2],
196
+ [enums_1.OrderFormat.Delivery]: ORDER_FORMATS[3],
196
197
  };
197
198
  const openingHoursTable = Object.entries(intervalsOrderFormatMap).map(([orderFormatId, intervals]) => ({
198
199
  orderFormats: [readableOrderFormatMap[Number(orderFormatId)]],
@@ -1,4 +1,4 @@
1
- import { DayOfWeek, IntervalState, IntervalType, OrderFormat } from '..';
1
+ import { DayOfWeek, IntervalState, IntervalType, OrderFormat } from '../shared';
2
2
  /** HH:mm:ss */
3
3
  export declare type IntervalTimestamp = string;
4
4
  export declare type Interval = {
@@ -0,0 +1 @@
1
+ export default function cleanVersionString(version: string): string;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function cleanVersionString(version) {
4
+ // Transform to lowercase
5
+ const lowercase = version.toLowerCase();
6
+ // Remove anything after `-` for example -beta.2
7
+ const versionPart = lowercase.split('-')[0];
8
+ // Remove starting `v` if needed
9
+ const removedV = versionPart.charAt(0) === 'v' ? versionPart.substring(1) : versionPart;
10
+ return removedV;
11
+ }
12
+ exports.default = cleanVersionString;
@@ -0,0 +1,2 @@
1
+ export { default as isVersionALessThanB } from './isVersionALessThanB';
2
+ export { default as cleanVersionString } from './cleanVersionString';
@@ -0,0 +1,10 @@
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
+ exports.cleanVersionString = exports.isVersionALessThanB = void 0;
7
+ var isVersionALessThanB_1 = require("./isVersionALessThanB");
8
+ Object.defineProperty(exports, "isVersionALessThanB", { enumerable: true, get: function () { return __importDefault(isVersionALessThanB_1).default; } });
9
+ var cleanVersionString_1 = require("./cleanVersionString");
10
+ Object.defineProperty(exports, "cleanVersionString", { enumerable: true, get: function () { return __importDefault(cleanVersionString_1).default; } });
@@ -0,0 +1 @@
1
+ export default function isVersionALessThanB(versionA: string, versionB: string): boolean;
@@ -0,0 +1,13 @@
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 compare_versions_1 = __importDefault(require("compare-versions"));
7
+ const cleanVersionString_1 = __importDefault(require("./cleanVersionString"));
8
+ function isVersionALessThanB(versionA, versionB) {
9
+ const cleanedVersionA = (0, cleanVersionString_1.default)(versionA);
10
+ const cleanedVersionB = (0, cleanVersionString_1.default)(versionB);
11
+ return compare_versions_1.default.compare(cleanedVersionA, cleanedVersionB, '<');
12
+ }
13
+ exports.default = isVersionALessThanB;
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@ancon/wildcat-utils",
3
- "version": "1.2.1",
3
+ "version": "1.5.0",
4
4
  "description": "",
5
- "repository": "git@bitbucket.org:anconab/wildcat.utils.git",
5
+ "repository": "git@bitbucket.org:anconab/wildcat.client.utils.git",
6
6
  "main": "dist/index.js",
7
7
  "private": false,
8
8
  "publishConfig": {
@@ -17,6 +17,7 @@
17
17
  "dev": "tsc -w"
18
18
  },
19
19
  "devDependencies": {
20
+ "@ancon/wildcat-types": "^1.17.0",
20
21
  "@babel/core": "^7.16.5",
21
22
  "@babel/preset-env": "^7.16.5",
22
23
  "@babel/preset-typescript": "^7.16.5",
@@ -29,7 +30,9 @@
29
30
  "@types/jest": "^27.0.3",
30
31
  "@typescript-eslint/eslint-plugin": "^5.8.1",
31
32
  "@typescript-eslint/parser": "^5.8.1",
33
+ "axios": "^0.27.2",
32
34
  "babel-jest": "^27.4.5",
35
+ "compare-versions": "^4.1.3",
33
36
  "eslint": "^8.5.0",
34
37
  "eslint-config-airbnb-base": "^15.0.0",
35
38
  "eslint-config-airbnb-typescript": "^16.1.0",
@@ -44,6 +47,8 @@
44
47
  "typescript": "^4.5.4"
45
48
  },
46
49
  "peerDependencies": {
50
+ "@ancon/wildcat-types": "*",
51
+ "compare-versions": "^4.1.0",
47
52
  "moment": "^2.29.0"
48
53
  },
49
54
  "commitlint": {
@@ -93,5 +98,6 @@
93
98
  }
94
99
  ]
95
100
  ]
96
- }
101
+ },
102
+ "dependencies": {}
97
103
  }