@curless/hotel-storefront 0.1.0 → 0.3.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.
- package/dist/__tests__/card-contract.test.js +13 -0
- package/dist/__tests__/card-contract.test.js.map +1 -1
- package/dist/__tests__/data.test.js +79 -3
- package/dist/__tests__/data.test.js.map +1 -1
- package/dist/__tests__/demo-hotels.test.js +52 -11
- package/dist/__tests__/demo-hotels.test.js.map +1 -1
- package/dist/__tests__/present.test.d.ts +2 -0
- package/dist/__tests__/present.test.d.ts.map +1 -0
- package/dist/__tests__/present.test.js +151 -0
- package/dist/__tests__/present.test.js.map +1 -0
- package/dist/__tests__/server.test.js +63 -4
- package/dist/__tests__/server.test.js.map +1 -1
- package/dist/__tests__/tools.test.js +154 -0
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/backend.d.ts +40 -6
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +23 -1
- package/dist/backend.js.map +1 -1
- package/dist/card.generated.d.ts +1 -1
- package/dist/card.generated.js +2 -2
- package/dist/card.generated.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +118 -13
- package/dist/data.js.map +1 -1
- package/dist/demo-hotels.d.ts +40 -1
- package/dist/demo-hotels.d.ts.map +1 -1
- package/dist/demo-hotels.js +162 -13
- package/dist/demo-hotels.js.map +1 -1
- package/dist/fence.d.ts +9 -3
- package/dist/fence.d.ts.map +1 -1
- package/dist/fence.js +0 -0
- package/dist/fence.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/legal.d.ts.map +1 -1
- package/dist/legal.js +15 -0
- package/dist/legal.js.map +1 -1
- package/dist/members.d.ts +14 -0
- package/dist/members.d.ts.map +1 -0
- package/dist/members.js +56 -0
- package/dist/members.js.map +1 -0
- package/dist/present.d.ts +141 -0
- package/dist/present.d.ts.map +1 -0
- package/dist/present.js +197 -0
- package/dist/present.js.map +1 -0
- package/dist/server.d.ts +27 -10
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +27 -7
- package/dist/server.js.map +1 -1
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +27 -2
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts +175 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +485 -51
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +68 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/vocab.d.ts +1 -1
- package/dist/vocab.d.ts.map +1 -1
- package/dist/vocab.js +1 -1
- package/dist/vocab.js.map +1 -1
- package/package.json +11 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.generated.js","sourceRoot":"","sources":["../src/card.generated.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wEAAwE;AACxE,gFAAgF;AAChF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAW,MAAM,CAAC,IAAI,CAChD,
|
|
1
|
+
{"version":3,"file":"card.generated.js","sourceRoot":"","sources":["../src/card.generated.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wEAAwE;AACxE,gFAAgF;AAChF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAW,MAAM,CAAC,IAAI,CAChD,smrUAAsmrU,EACtmrU,QAAQ,CACT,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEnB,2FAA2F;AAC3F,MAAM,CAAC,MAAM,qBAAqB,GAChC,kEAAkE,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -57,6 +57,13 @@ export type HotelConfig = {
|
|
|
57
57
|
file?: string;
|
|
58
58
|
/** api only: where it answers. The key comes from the environment. */
|
|
59
59
|
baseUrl?: string;
|
|
60
|
+
/**
|
|
61
|
+
* demo only: how many minutes a booking request holds its rooms.
|
|
62
|
+
*
|
|
63
|
+
* Short on purpose - the demonstration inventory is shared by everyone who
|
|
64
|
+
* opens the connector, and a day-long hold empties it in an afternoon.
|
|
65
|
+
*/
|
|
66
|
+
holdMinutes?: number;
|
|
60
67
|
};
|
|
61
68
|
/**
|
|
62
69
|
* Taking money. Absent - and it IS absent today, by decision - the connector
|
|
@@ -117,6 +124,10 @@ export declare const toolNames: (config: Pick<HotelConfig, "naming">) => {
|
|
|
117
124
|
readonly previewCancellation: `preview_${string}cancellation`;
|
|
118
125
|
readonly cancelBooking: `cancel_${string}booking`;
|
|
119
126
|
readonly policies: `get_${string}${string}_policies`;
|
|
127
|
+
readonly compare: `compare_${string}${string}`;
|
|
128
|
+
readonly itinerary: `show_${string}itinerary`;
|
|
129
|
+
readonly signIn: `sign_in_${string}member`;
|
|
130
|
+
readonly signOut: `sign_out_${string}member`;
|
|
120
131
|
};
|
|
121
132
|
export type ToolNames = ReturnType<typeof toolNames>;
|
|
122
133
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;IAEX,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;;;WAMG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,sFAAsF;QACtF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,iCAAiC;IACjC,IAAI,EAAE;QACJ;;;;;;WAMG;QACH,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QACvB,gFAAgF;QAChF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,sEAAsE;QACtE,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;IAEX,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;;;WAMG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,sFAAsF;QACtF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,iCAAiC;IACjC,IAAI,EAAE;QACJ;;;;;;WAMG;QACH,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QACvB,gFAAgF;QAChF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,sEAAsE;QACtE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;KACzB,CAAC;IAEF,2GAA2G;IAC3G,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,6EAA6E;QAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mEAAmE;QACnE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAQF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;;;;;;;;;;;;;;;;CAwB5D,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -37,6 +37,13 @@ export const toolNames = (config) => {
|
|
|
37
37
|
previewCancellation: `preview_${prefix}cancellation`,
|
|
38
38
|
cancelBooking: `cancel_${prefix}booking`,
|
|
39
39
|
policies: `get_${prefix}${noun}_policies`,
|
|
40
|
+
// The two that carry the MODEL's judgment rather than a tool's answer -
|
|
41
|
+
// which hotels sit beside each other, what the plan's days are. Every fact
|
|
42
|
+
// on the card is still joined by the server; see present.ts.
|
|
43
|
+
compare: `compare_${prefix}${plural}`,
|
|
44
|
+
itinerary: `show_${prefix}itinerary`,
|
|
45
|
+
signIn: `sign_in_${prefix}member`,
|
|
46
|
+
signOut: `sign_out_${prefix}member`,
|
|
40
47
|
};
|
|
41
48
|
};
|
|
42
49
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0GH,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CACjC,CAAC;KACE,WAAW,EAAE;KACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;KAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAmC,EAAE,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;IAC7D,OAAO;QACL,UAAU,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE;QACrC,QAAQ,EAAE,OAAO,MAAM,GAAG,IAAI,EAAE;QAChC,UAAU,EAAE,QAAQ,MAAM,QAAQ;QAClC,SAAS,EAAE,UAAU,MAAM,MAAM;QACjC,QAAQ,EAAE,QAAQ,MAAM,MAAM;QAC9B,SAAS,EAAE,SAAS,MAAM,MAAM;QAChC,cAAc,EAAE,WAAW,MAAM,SAAS;QAC1C,YAAY,EAAE,WAAW,MAAM,UAAU;QACzC,mBAAmB,EAAE,WAAW,MAAM,cAAc;QACpD,aAAa,EAAE,UAAU,MAAM,SAAS;QACxC,QAAQ,EAAE,OAAO,MAAM,GAAG,IAAI,WAAW;QACzC,wEAAwE;QACxE,2EAA2E;QAC3E,6DAA6D;QAC7D,OAAO,EAAE,WAAW,MAAM,GAAG,MAAM,EAAE;QACrC,SAAS,EAAE,QAAQ,MAAM,WAAW;QACpC,MAAM,EAAE,WAAW,MAAM,QAAQ;QACjC,OAAO,EAAE,YAAY,MAAM,QAAQ;KAC3B,CAAC;AACb,CAAC,CAAC"}
|
package/dist/data.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAsB,YAAY,
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAsB,YAAY,EAA0B,MAAM,kBAAkB,CAAC;AAqQjG,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO,KAAG,YA8B7C,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,YAS3D,CAAC"}
|
package/dist/data.js
CHANGED
|
@@ -10,6 +10,25 @@ import { dirname, resolve } from 'node:path';
|
|
|
10
10
|
* it prints a plausible number rather than an error.
|
|
11
11
|
*/
|
|
12
12
|
const KINDS = ['transfer', 'dining', 'experience', 'family', 'wellness'];
|
|
13
|
+
/**
|
|
14
|
+
* The largest rate a currency can plausibly write for one night, used to catch
|
|
15
|
+
* a price typed in MINOR units by mistake - 380000 for 3800 - which would look
|
|
16
|
+
* like a real, if eye-watering, number on a card.
|
|
17
|
+
*
|
|
18
|
+
* It has to be per currency. 2,400,000 is an ordinary room in Jakarta and a
|
|
19
|
+
* typo in Hong Kong, and a single cap either lets the typo through everywhere
|
|
20
|
+
* or refuses every hotel in Indonesia, Mongolia and Sri Lanka.
|
|
21
|
+
*/
|
|
22
|
+
const BIG_MONEY = {
|
|
23
|
+
IDR: 50_000_000,
|
|
24
|
+
VND: 500_000_000,
|
|
25
|
+
KRW: 50_000_000,
|
|
26
|
+
MNT: 20_000_000,
|
|
27
|
+
MMK: 20_000_000,
|
|
28
|
+
LKR: 5_000_000,
|
|
29
|
+
JPY: 5_000_000,
|
|
30
|
+
};
|
|
31
|
+
const maxPrice = (currency) => BIG_MONEY[currency.toUpperCase()] ?? 200_000;
|
|
13
32
|
const TOPICS = [
|
|
14
33
|
'cancellation',
|
|
15
34
|
'check-in',
|
|
@@ -44,7 +63,7 @@ const time = (v, where, what) => {
|
|
|
44
63
|
throw new DataError(where, `${what} must look like 15:00`);
|
|
45
64
|
return s;
|
|
46
65
|
};
|
|
47
|
-
const parseRoom = (raw, where) => {
|
|
66
|
+
const parseRoom = (raw, where, currency) => {
|
|
48
67
|
const r = raw;
|
|
49
68
|
const id = str(r.id, where, 'room id');
|
|
50
69
|
const at = `${where} room ${id}`;
|
|
@@ -61,16 +80,16 @@ const parseRoom = (raw, where) => {
|
|
|
61
80
|
beds: r.beds === undefined ? undefined : str(r.beds, at, 'beds'),
|
|
62
81
|
view: r.view === undefined ? undefined : str(r.view, at, 'view'),
|
|
63
82
|
breakfast: r.breakfast === true,
|
|
64
|
-
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
nightly: num(r.nightly, at, 'nightly', 1,
|
|
83
|
+
imageUrl: r.imageUrl === undefined ? undefined : str(r.imageUrl, at, 'imageUrl'),
|
|
84
|
+
// A rate is in whole currency units, the way the hotel writes it - see
|
|
85
|
+
// BIG_MONEY for why the ceiling is the currency's and not one number.
|
|
86
|
+
nightly: num(r.nightly, at, 'nightly', 1, maxPrice(currency)),
|
|
68
87
|
roomsLeft: num(r.roomsLeft, at, 'roomsLeft', 0, 500),
|
|
69
88
|
refundable,
|
|
70
89
|
freeCancelHours: refundable ? num(r.freeCancelHours, at, 'freeCancelHours', 0, 720) : undefined,
|
|
71
90
|
};
|
|
72
91
|
};
|
|
73
|
-
const parseExtra = (raw, where) => {
|
|
92
|
+
const parseExtra = (raw, where, currency) => {
|
|
74
93
|
const e = raw;
|
|
75
94
|
const id = str(e.id, where, 'extra id');
|
|
76
95
|
const at = `${where} extra ${id}`;
|
|
@@ -88,7 +107,7 @@ const parseExtra = (raw, where) => {
|
|
|
88
107
|
name: str(e.name, at, 'name'),
|
|
89
108
|
kind,
|
|
90
109
|
description: str(e.description, at, 'description'),
|
|
91
|
-
price: num(e.price, at, 'price', 1,
|
|
110
|
+
price: num(e.price, at, 'price', 1, maxPrice(currency)),
|
|
92
111
|
per,
|
|
93
112
|
when,
|
|
94
113
|
};
|
|
@@ -98,7 +117,11 @@ const parseHotel = (raw, index) => {
|
|
|
98
117
|
const where = `hotel[${index}]`;
|
|
99
118
|
const id = str(h.id, where, 'id');
|
|
100
119
|
const at = `hotel ${id}`;
|
|
101
|
-
|
|
120
|
+
// Read before the rooms are: a room's ceiling is its hotel's currency.
|
|
121
|
+
const currency = str(h.currency, at, 'currency');
|
|
122
|
+
if (!/^[A-Z]{3}$/.test(currency))
|
|
123
|
+
throw new DataError(at, `currency ${currency} must be a 3-letter code like HKD`);
|
|
124
|
+
const rooms = Array.isArray(h.rooms) ? h.rooms.map((r) => parseRoom(r, at, currency)) : [];
|
|
102
125
|
if (rooms.length === 0)
|
|
103
126
|
throw new DataError(at, 'a hotel with no room types cannot be booked; leave it out instead');
|
|
104
127
|
const seen = new Set();
|
|
@@ -114,15 +137,13 @@ const parseHotel = (raw, index) => {
|
|
|
114
137
|
throw new DataError(at, `policy topic ${topic} is not one we show`);
|
|
115
138
|
policies[topic] = str(text, at, `policy ${topic}`);
|
|
116
139
|
}
|
|
117
|
-
const currency = str(h.currency, at, 'currency');
|
|
118
|
-
if (!/^[A-Z]{3}$/.test(currency))
|
|
119
|
-
throw new DataError(at, `currency ${currency} must be a 3-letter code like HKD`);
|
|
120
140
|
return {
|
|
121
141
|
id,
|
|
122
142
|
name: str(h.name, at, 'name'),
|
|
123
143
|
brand: str(h.brand, at, 'brand'),
|
|
124
144
|
city: str(h.city, at, 'city'),
|
|
125
145
|
cityId: str(h.cityId, at, 'cityId'),
|
|
146
|
+
country: h.country === undefined ? undefined : str(h.country, at, 'country'),
|
|
126
147
|
area: h.area === undefined ? undefined : str(h.area, at, 'area'),
|
|
127
148
|
summary: str(h.summary, at, 'summary'),
|
|
128
149
|
amenities: Array.isArray(h.amenities)
|
|
@@ -141,7 +162,7 @@ const parseHotel = (raw, index) => {
|
|
|
141
162
|
utcOffset: h.utcOffset === undefined ? undefined : str(h.utcOffset, at, 'utcOffset'),
|
|
142
163
|
rating: h.rating === undefined ? undefined : parseRating(h.rating, at),
|
|
143
164
|
rooms,
|
|
144
|
-
extras: Array.isArray(h.extras) ? h.extras.map((e) => parseExtra(e, at)) : [],
|
|
165
|
+
extras: Array.isArray(h.extras) ? h.extras.map((e) => parseExtra(e, at, currency)) : [],
|
|
145
166
|
policies,
|
|
146
167
|
};
|
|
147
168
|
};
|
|
@@ -155,6 +176,73 @@ const parseRating = (raw, where) => {
|
|
|
155
176
|
count: num(r.count, where, 'rating.count', 1, 10_000_000),
|
|
156
177
|
};
|
|
157
178
|
};
|
|
179
|
+
/**
|
|
180
|
+
* The loyalty programme, validated like everything else that can print a
|
|
181
|
+
* number: a tier's discount is a FRACTION, and a member without a tier that
|
|
182
|
+
* exists would silently price at the public rate while calling itself a member.
|
|
183
|
+
*/
|
|
184
|
+
const parseMembership = (raw) => {
|
|
185
|
+
const m = raw;
|
|
186
|
+
const where = 'membership';
|
|
187
|
+
const tiers = Array.isArray(m.tiers)
|
|
188
|
+
? m.tiers.map((t) => {
|
|
189
|
+
const x = t;
|
|
190
|
+
const id = str(x.id, where, 'tier id');
|
|
191
|
+
return {
|
|
192
|
+
id,
|
|
193
|
+
name: str(x.name, `${where} ${id}`, 'name'),
|
|
194
|
+
// 0.1, not 10 - the same mistake as taxRate, and it would take 1000%
|
|
195
|
+
// off a rate and still render.
|
|
196
|
+
discount: num(x.discount, `${where} ${id}`, 'discount', 0, 0.9),
|
|
197
|
+
pointsPerUnit: num(x.pointsPerUnit, `${where} ${id}`, 'pointsPerUnit', 0, 100),
|
|
198
|
+
};
|
|
199
|
+
})
|
|
200
|
+
: [];
|
|
201
|
+
if (tiers.length === 0)
|
|
202
|
+
throw new DataError(where, 'a programme with no tiers cannot price anything');
|
|
203
|
+
const ids = new Set(tiers.map((t) => t.id));
|
|
204
|
+
const members = Array.isArray(m.members)
|
|
205
|
+
? m.members.map((r) => {
|
|
206
|
+
const x = r;
|
|
207
|
+
const number = str(x.number, where, 'member number');
|
|
208
|
+
const at = `${where} ${number}`;
|
|
209
|
+
const tier = str(x.tier, at, 'tier');
|
|
210
|
+
if (!ids.has(tier))
|
|
211
|
+
throw new DataError(at, `tier ${tier} is not one this programme has`);
|
|
212
|
+
return {
|
|
213
|
+
number,
|
|
214
|
+
surname: str(x.surname, at, 'surname'),
|
|
215
|
+
given: str(x.given, at, 'given'),
|
|
216
|
+
tier,
|
|
217
|
+
points: num(x.points, at, 'points', 0, 100_000_000),
|
|
218
|
+
};
|
|
219
|
+
})
|
|
220
|
+
: [];
|
|
221
|
+
const seen = new Set();
|
|
222
|
+
for (const x of members) {
|
|
223
|
+
if (seen.has(x.number))
|
|
224
|
+
throw new DataError(where, `two members share the number ${x.number}`);
|
|
225
|
+
seen.add(x.number);
|
|
226
|
+
}
|
|
227
|
+
// The earn table: points only, never a price. A rate of zero or a missing
|
|
228
|
+
// base would divide a stay by nothing and print a point balance of Infinity.
|
|
229
|
+
const rawEarn = m.earn;
|
|
230
|
+
const earn = rawEarn
|
|
231
|
+
? {
|
|
232
|
+
base: str(rawEarn.base, where, 'earn.base'),
|
|
233
|
+
rates: Object.fromEntries(Object.entries((rawEarn.rates ?? {})).map(([cur, rate]) => [
|
|
234
|
+
cur.toUpperCase(),
|
|
235
|
+
num(rate, `${where} earn ${cur}`, 'rate', 0.000_001, 100_000_000),
|
|
236
|
+
])),
|
|
237
|
+
}
|
|
238
|
+
: undefined;
|
|
239
|
+
return {
|
|
240
|
+
programme: str(m.programme, where, 'programme'),
|
|
241
|
+
tiers,
|
|
242
|
+
members,
|
|
243
|
+
...(earn ? { earn } : {}),
|
|
244
|
+
};
|
|
245
|
+
};
|
|
158
246
|
export const parseHotelData = (raw) => {
|
|
159
247
|
const d = raw;
|
|
160
248
|
const hotels = Array.isArray(d.hotels) ? d.hotels.map(parseHotel) : [];
|
|
@@ -166,7 +254,24 @@ export const parseHotelData = (raw) => {
|
|
|
166
254
|
throw new DataError('hotels file', `two hotels share the id ${h.id}`);
|
|
167
255
|
ids.add(h.id);
|
|
168
256
|
}
|
|
169
|
-
|
|
257
|
+
const membership = d.membership ? parseMembership(d.membership) : undefined;
|
|
258
|
+
// ⚠️ EVERY CURRENCY THE HOTELS QUOTE NEEDS AN EARN RATE. A programme that
|
|
259
|
+
// cannot convert a stay into its own currency either pays at 1:1 - ¥150,000
|
|
260
|
+
// becoming 150,000 points - or silently pays nothing. Both are a number on a
|
|
261
|
+
// card that nobody can defend, so the file is refused instead.
|
|
262
|
+
if (membership?.earn) {
|
|
263
|
+
const base = membership.earn.base.toUpperCase();
|
|
264
|
+
for (const h of hotels) {
|
|
265
|
+
const cur = h.currency.toUpperCase();
|
|
266
|
+
if (cur !== base && membership.earn.rates[cur] === undefined)
|
|
267
|
+
throw new DataError(`hotel ${h.id}`, `charges in ${cur} and the programme has no earn rate for it - points would be made up`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
brand: str(d.brand, 'hotels file', 'brand'),
|
|
272
|
+
hotels,
|
|
273
|
+
...(membership ? { membership } : {}),
|
|
274
|
+
};
|
|
170
275
|
};
|
|
171
276
|
/** Read a brand's hotels file. `from` is the config file it was named in. */
|
|
172
277
|
export const loadHotelData = (file, from) => {
|
package/dist/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAI7C;;;;;;;;GAQG;AAEH,MAAM,KAAK,GAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtF,MAAM,MAAM,GAAuB;IACjC,cAAc;IACd,UAAU;IACV,UAAU;IACV,MAAM;IACN,SAAS;IACT,eAAe;CAChB,CAAC;AAEF,MAAM,SAAU,SAAQ,KAAK;IAC3B,YAAY,KAAa,EAAE,IAAY;QACrC,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,KAAa,EAAE,IAAY,EAAU,EAAE;IAC9D,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAC1C,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,6BAA6B,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW,EAAU,EAAE;IACxF,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,mBAAmB,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC,aAAa,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9F,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,KAAa,EAAE,IAAY,EAAsB,EAAE;IAC3E,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,uBAAuB,CAAC,CAAC;IACzF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,KAAa,EAAW,EAAE;IACzD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,GAAG,KAAK,SAAS,EAAE,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC;IACzC,IAAI,UAAU,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS;QAC/C,MAAM,IAAI,SAAS,CACjB,EAAE,EACF,gGAAgG,CACjG,CAAC;IACJ,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS;QAChD,MAAM,IAAI,SAAS,CACjB,EAAE,EACF,wFAAwF,CACzF,CAAC;IACJ,OAAO;QACL,EAAE;QACF,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC;QACpF,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;QAChE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;QAChE,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI;QAC/B,yEAAyE;QACzE,4EAA4E;QAC5E,8CAA8C;QAC9C,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC;QAClD,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC;QACpD,UAAU;QACV,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;KAChG,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,KAAa,EAAY,EAAE;IAC3D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,GAAG,KAAK,UAAU,EAAE,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAc,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,QAAQ,IAAI,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO;QACvD,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,mCAAmC,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACxE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK;QACpF,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,wCAAwC,CAAC,CAAC;IACpE,OAAO;QACL,EAAE;QACF,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;QAC7B,IAAI;QACJ,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,aAAa,CAAC;QAClD,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;QAC5C,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,KAAa,EAAY,EAAE;IAC3D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,KAAK,GAAG,CAAC;IAChC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,mEAAmE,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,+BAA+B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAA8C,EAAE,CAAC;IAC/D,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;IAClE,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAyB,CAAC;YAC7C,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,gBAAgB,KAAK,qBAAqB,CAAC,CAAC;QACtE,QAAQ,CAAC,KAAyB,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,YAAY,QAAQ,mCAAmC,CAAC,CAAC;IACnF,OAAO;QACL,EAAE;QACF,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;QAC7B,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;QAChC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC;QACnC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;QAChE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC;QACtC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACnC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC,CAAC,EAAE;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC;QAC5E,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC;QAC5D,QAAQ,EAAE,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,CAAC;QAChF,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,aAAa,CAAC;QACnD,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC;QAChD,QAAQ;QACR,2EAA2E;QAC3E,8DAA8D;QAC9D,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC;QAC9C,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9D,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC;QACpF,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACtE,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7E,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,GAAY,EAAE,KAAa,EAAsB,EAAE;IACtE,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACnE,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,CAAC;QACvD,QAAQ;QACR,iEAAiE;QACjE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,UAAU,CAAC;KAC1D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAY,EAAgB,EAAE;IAC3D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzF,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;AACjE,CAAC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,IAAa,EAAgB,EAAE;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,eAAe,IAAI,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|
package/dist/demo-hotels.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export type RawRoom = {
|
|
|
24
24
|
beds?: string;
|
|
25
25
|
view?: string;
|
|
26
26
|
breakfast: boolean;
|
|
27
|
+
imageUrl?: string;
|
|
27
28
|
/** Written the way a human writes it - 3800, not 380000. */
|
|
28
29
|
nightly: number;
|
|
29
30
|
roomsLeft: number;
|
|
@@ -46,6 +47,7 @@ export type RawHotel = {
|
|
|
46
47
|
brand: string;
|
|
47
48
|
city: string;
|
|
48
49
|
cityId: string;
|
|
50
|
+
country?: string;
|
|
49
51
|
area?: string;
|
|
50
52
|
summary: string;
|
|
51
53
|
amenities: string[];
|
|
@@ -70,16 +72,53 @@ export type RawHotel = {
|
|
|
70
72
|
extras?: RawExtra[];
|
|
71
73
|
policies?: Partial<Record<HotelPolicyTopic, string>>;
|
|
72
74
|
};
|
|
75
|
+
export type RawTier = {
|
|
76
|
+
id: string;
|
|
77
|
+
name: string;
|
|
78
|
+
discount: number;
|
|
79
|
+
pointsPerUnit: number;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* How a stay in one of twenty-two currencies turns into points.
|
|
83
|
+
*
|
|
84
|
+
* ⚠️ POINTS ONLY. Nothing here converts a PRICE: a trip is quoted in one
|
|
85
|
+
* hotel's own currency and refuses to hold two (see `quote`). This exists
|
|
86
|
+
* because a programme earns per unit of ONE currency, and without it the same
|
|
87
|
+
* money earned 2,624 points in Paris and 6,180,075 in Jakarta - which is not a
|
|
88
|
+
* loyalty programme, it is a units bug wearing one.
|
|
89
|
+
*
|
|
90
|
+
* `rates` is units of that currency per unit of `base`.
|
|
91
|
+
*/
|
|
92
|
+
export type RawEarn = {
|
|
93
|
+
base: string;
|
|
94
|
+
rates: Record<string, number>;
|
|
95
|
+
};
|
|
96
|
+
export type RawMember = {
|
|
97
|
+
number: string;
|
|
98
|
+
surname: string;
|
|
99
|
+
given: string;
|
|
100
|
+
tier: string;
|
|
101
|
+
points: number;
|
|
102
|
+
};
|
|
103
|
+
export type RawMembership = {
|
|
104
|
+
programme: string;
|
|
105
|
+
tiers: RawTier[];
|
|
106
|
+
members: RawMember[];
|
|
107
|
+
earn?: RawEarn;
|
|
108
|
+
};
|
|
73
109
|
export type RawHotelData = {
|
|
74
110
|
brand: string;
|
|
75
111
|
hotels: RawHotel[];
|
|
112
|
+
membership?: RawMembership;
|
|
76
113
|
};
|
|
77
114
|
export type DemoError = Error & {
|
|
78
|
-
code: 'not-found' | 'bad-stay' | 'unavailable' | 'mixed-currency' | 'empty-trip';
|
|
115
|
+
code: 'not-found' | 'bad-stay' | 'unavailable' | 'mixed-currency' | 'empty-trip' | 'no-guest';
|
|
79
116
|
};
|
|
80
117
|
export declare const demoError: (code: DemoError["code"], message: string) => DemoError;
|
|
81
118
|
export type DemoHotelsOptions = {
|
|
82
119
|
data: RawHotelData;
|
|
120
|
+
/** How long a booking request holds its rooms. Default two hours - see HOLD_MS_DEFAULT. */
|
|
121
|
+
holdMs?: number;
|
|
83
122
|
/** Injected so tests do not depend on the day they run. */
|
|
84
123
|
now?: () => number;
|
|
85
124
|
rng?: () => number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo-hotels.d.ts","sourceRoot":"","sources":["../src/demo-hotels.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"demo-hotels.d.ts","sourceRoot":"","sources":["../src/demo-hotels.ts"],"names":[],"mappings":"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"}
|