scrapemyferry 1.0.1 → 1.0.2

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.
Files changed (152) hide show
  1. package/bin/scrapemyferry.js +0 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +90 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +18 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/index.d.ts +3 -0
  11. package/dist/lib/index.d.ts.map +1 -0
  12. package/dist/lib/index.js +7 -0
  13. package/dist/lib/index.js.map +1 -0
  14. package/dist/lib/setup.d.ts +2 -0
  15. package/dist/lib/setup.d.ts.map +1 -0
  16. package/dist/lib/setup.js +13 -0
  17. package/dist/lib/setup.js.map +1 -0
  18. package/dist/lib/sources/bcf/config.d.ts +7 -0
  19. package/dist/lib/sources/bcf/config.d.ts.map +1 -0
  20. package/dist/lib/sources/bcf/config.js +10 -0
  21. package/dist/lib/sources/bcf/config.js.map +1 -0
  22. package/dist/lib/sources/bcf/currentConditions.d.ts +3 -0
  23. package/dist/lib/sources/bcf/currentConditions.d.ts.map +1 -0
  24. package/dist/lib/sources/bcf/currentConditions.js +113 -0
  25. package/dist/lib/sources/bcf/currentConditions.js.map +1 -0
  26. package/dist/lib/sources/bcf/dailySchedule.d.ts +3 -0
  27. package/dist/lib/sources/bcf/dailySchedule.d.ts.map +1 -0
  28. package/dist/lib/sources/bcf/dailySchedule.js +43 -0
  29. package/dist/lib/sources/bcf/dailySchedule.js.map +1 -0
  30. package/dist/lib/sources/bcf/departures.d.ts +3 -0
  31. package/dist/lib/sources/bcf/departures.d.ts.map +1 -0
  32. package/dist/lib/sources/bcf/departures.js +101 -0
  33. package/dist/lib/sources/bcf/departures.js.map +1 -0
  34. package/dist/lib/sources/bcf/index.d.ts +8 -0
  35. package/dist/lib/sources/bcf/index.d.ts.map +1 -0
  36. package/dist/lib/sources/bcf/index.js +18 -0
  37. package/dist/lib/sources/bcf/index.js.map +1 -0
  38. package/dist/lib/sources/bcf/routes.d.ts +3 -0
  39. package/dist/lib/sources/bcf/routes.d.ts.map +1 -0
  40. package/dist/lib/sources/bcf/routes.js +93 -0
  41. package/dist/lib/sources/bcf/routes.js.map +1 -0
  42. package/dist/lib/sources/bcf/sailing.d.ts +3 -0
  43. package/dist/lib/sources/bcf/sailing.d.ts.map +1 -0
  44. package/dist/lib/sources/bcf/sailing.js +60 -0
  45. package/dist/lib/sources/bcf/sailing.js.map +1 -0
  46. package/dist/lib/sources/bcf/seasonalSchedule.d.ts +3 -0
  47. package/dist/lib/sources/bcf/seasonalSchedule.d.ts.map +1 -0
  48. package/dist/lib/sources/bcf/seasonalSchedule.js +76 -0
  49. package/dist/lib/sources/bcf/seasonalSchedule.js.map +1 -0
  50. package/dist/lib/sources/bcf/tests/config.test.d.ts +2 -0
  51. package/dist/lib/sources/bcf/tests/config.test.d.ts.map +1 -0
  52. package/dist/lib/sources/bcf/tests/config.test.js +24 -0
  53. package/dist/lib/sources/bcf/tests/config.test.js.map +1 -0
  54. package/dist/lib/sources/bcf/tests/currentConditions.live.test.d.ts +2 -0
  55. package/dist/lib/sources/bcf/tests/currentConditions.live.test.d.ts.map +1 -0
  56. package/dist/lib/sources/bcf/tests/currentConditions.live.test.js +26 -0
  57. package/dist/lib/sources/bcf/tests/currentConditions.live.test.js.map +1 -0
  58. package/dist/lib/sources/bcf/tests/currentConditions.test.d.ts +2 -0
  59. package/dist/lib/sources/bcf/tests/currentConditions.test.d.ts.map +1 -0
  60. package/dist/lib/sources/bcf/tests/currentConditions.test.js +169 -0
  61. package/dist/lib/sources/bcf/tests/currentConditions.test.js.map +1 -0
  62. package/dist/lib/sources/bcf/tests/dailySchedule.live.test.d.ts +2 -0
  63. package/dist/lib/sources/bcf/tests/dailySchedule.live.test.d.ts.map +1 -0
  64. package/dist/lib/sources/bcf/tests/dailySchedule.live.test.js +19 -0
  65. package/dist/lib/sources/bcf/tests/dailySchedule.live.test.js.map +1 -0
  66. package/dist/lib/sources/bcf/tests/dailySchedule.test.d.ts +2 -0
  67. package/dist/lib/sources/bcf/tests/dailySchedule.test.d.ts.map +1 -0
  68. package/dist/lib/sources/bcf/tests/dailySchedule.test.js +76 -0
  69. package/dist/lib/sources/bcf/tests/dailySchedule.test.js.map +1 -0
  70. package/dist/lib/sources/bcf/tests/departures.live.test.d.ts +2 -0
  71. package/dist/lib/sources/bcf/tests/departures.live.test.d.ts.map +1 -0
  72. package/dist/lib/sources/bcf/tests/departures.live.test.js +25 -0
  73. package/dist/lib/sources/bcf/tests/departures.live.test.js.map +1 -0
  74. package/dist/lib/sources/bcf/tests/departures.test.d.ts +2 -0
  75. package/dist/lib/sources/bcf/tests/departures.test.d.ts.map +1 -0
  76. package/dist/lib/sources/bcf/tests/departures.test.js +408 -0
  77. package/dist/lib/sources/bcf/tests/departures.test.js.map +1 -0
  78. package/dist/lib/sources/bcf/tests/fixtures/availability.json +1 -0
  79. package/dist/lib/sources/bcf/tests/fixtures/current-conditions/departures.json +1 -0
  80. package/dist/lib/sources/bcf/tests/fixtures/current-conditions.json +1 -0
  81. package/dist/lib/sources/bcf/tests/fixtures/routes-fares/schedules/daily.json +1 -0
  82. package/dist/lib/sources/bcf/tests/fixtures/routes-fares/schedules/seasonal.json +1 -0
  83. package/dist/lib/sources/bcf/tests/fixtures/routes-fares/schedules.json +1 -0
  84. package/dist/lib/sources/bcf/tests/routes.live.test.d.ts +2 -0
  85. package/dist/lib/sources/bcf/tests/routes.live.test.d.ts.map +1 -0
  86. package/dist/lib/sources/bcf/tests/routes.live.test.js +28 -0
  87. package/dist/lib/sources/bcf/tests/routes.live.test.js.map +1 -0
  88. package/dist/lib/sources/bcf/tests/routes.test.d.ts +2 -0
  89. package/dist/lib/sources/bcf/tests/routes.test.d.ts.map +1 -0
  90. package/dist/lib/sources/bcf/tests/routes.test.js +363 -0
  91. package/dist/lib/sources/bcf/tests/routes.test.js.map +1 -0
  92. package/dist/lib/sources/bcf/tests/sailing.live.test.d.ts +2 -0
  93. package/dist/lib/sources/bcf/tests/sailing.live.test.d.ts.map +1 -0
  94. package/dist/lib/sources/bcf/tests/sailing.live.test.js +25 -0
  95. package/dist/lib/sources/bcf/tests/sailing.live.test.js.map +1 -0
  96. package/dist/lib/sources/bcf/tests/sailing.test.d.ts +2 -0
  97. package/dist/lib/sources/bcf/tests/sailing.test.d.ts.map +1 -0
  98. package/dist/lib/sources/bcf/tests/sailing.test.js +53 -0
  99. package/dist/lib/sources/bcf/tests/sailing.test.js.map +1 -0
  100. package/dist/lib/sources/bcf/tests/seasonalSchedule.live.test.d.ts +2 -0
  101. package/dist/lib/sources/bcf/tests/seasonalSchedule.live.test.d.ts.map +1 -0
  102. package/dist/lib/sources/bcf/tests/seasonalSchedule.live.test.js +22 -0
  103. package/dist/lib/sources/bcf/tests/seasonalSchedule.live.test.js.map +1 -0
  104. package/dist/lib/sources/bcf/tests/seasonalSchedule.test.d.ts +2 -0
  105. package/dist/lib/sources/bcf/tests/seasonalSchedule.test.d.ts.map +1 -0
  106. package/dist/lib/sources/bcf/tests/seasonalSchedule.test.js +403 -0
  107. package/dist/lib/sources/bcf/tests/seasonalSchedule.test.js.map +1 -0
  108. package/dist/lib/sources/bcf/tests/urls.test.d.ts +2 -0
  109. package/dist/lib/sources/bcf/tests/urls.test.d.ts.map +1 -0
  110. package/dist/lib/sources/bcf/tests/urls.test.js +69 -0
  111. package/dist/lib/sources/bcf/tests/urls.test.js.map +1 -0
  112. package/dist/lib/sources/bcf/tests/utils.test.d.ts +2 -0
  113. package/dist/lib/sources/bcf/tests/utils.test.d.ts.map +1 -0
  114. package/dist/lib/sources/bcf/tests/utils.test.js +79 -0
  115. package/dist/lib/sources/bcf/tests/utils.test.js.map +1 -0
  116. package/dist/lib/sources/bcf/urls.d.ts +11 -0
  117. package/dist/lib/sources/bcf/urls.d.ts.map +1 -0
  118. package/dist/lib/sources/bcf/urls.js +68 -0
  119. package/dist/lib/sources/bcf/urls.js.map +1 -0
  120. package/dist/lib/sources/bcf/utils.d.ts +6 -0
  121. package/dist/lib/sources/bcf/utils.d.ts.map +1 -0
  122. package/dist/lib/sources/bcf/utils.js +47 -0
  123. package/dist/lib/sources/bcf/utils.js.map +1 -0
  124. package/dist/lib/sources/index.d.ts +2 -0
  125. package/dist/lib/sources/index.d.ts.map +1 -0
  126. package/dist/lib/sources/index.js +6 -0
  127. package/dist/lib/sources/index.js.map +1 -0
  128. package/dist/lib/sources/source.d.ts +3 -0
  129. package/dist/lib/sources/source.d.ts.map +1 -0
  130. package/dist/lib/sources/source.js +34 -0
  131. package/dist/lib/sources/source.js.map +1 -0
  132. package/dist/lib/sources/types.d.ts +111 -0
  133. package/dist/lib/sources/types.d.ts.map +1 -0
  134. package/dist/lib/sources/types.js +3 -0
  135. package/dist/lib/sources/types.js.map +1 -0
  136. package/dist/lib/test/jest-conditional.d.ts +11 -0
  137. package/dist/lib/test/jest-conditional.d.ts.map +1 -0
  138. package/dist/lib/test/jest-conditional.js +22 -0
  139. package/dist/lib/test/jest-conditional.js.map +1 -0
  140. package/dist/lib/test/setup-jest-env.d.ts +2 -0
  141. package/dist/lib/test/setup-jest-env.d.ts.map +1 -0
  142. package/dist/lib/test/setup-jest-env.js +30 -0
  143. package/dist/lib/test/setup-jest-env.js.map +1 -0
  144. package/dist/lib/test/setup-jest-global.d.ts +2 -0
  145. package/dist/lib/test/setup-jest-global.d.ts.map +1 -0
  146. package/dist/lib/test/setup-jest-global.js +7 -0
  147. package/dist/lib/test/setup-jest-global.js.map +1 -0
  148. package/dist/lib/test/setup-jest.d.ts +2 -0
  149. package/dist/lib/test/setup-jest.d.ts.map +1 -0
  150. package/dist/lib/test/setup-jest.js +5 -0
  151. package/dist/lib/test/setup-jest.js.map +1 -0
  152. package/package.json +13 -12
@@ -0,0 +1,403 @@
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 seasonalSchedule_1 = require("../seasonalSchedule");
7
+ const seasonal_json_1 = __importDefault(require("./fixtures/routes-fares/schedules/seasonal.json"));
8
+ jest.mock('axios');
9
+ const axiosMock = jest.requireMock('axios').default;
10
+ describe('Seasonal Schedule', () => {
11
+ function scrape({ from = 'HSB', to = 'LNG', } = {}) {
12
+ return (0, seasonalSchedule_1.seasonalSchedule)(from, to);
13
+ }
14
+ beforeEach(() => {
15
+ axiosMock.mockResolvedValue({ data: seasonal_json_1.default });
16
+ });
17
+ it('returns the seasonal schedule for the provided route', async () => {
18
+ const result = await scrape();
19
+ const url = 'https://www.bcferries.com/routes-fares/schedules/seasonal/HSB-LNG';
20
+ expect(axiosMock).toHaveBeenCalledWith(url);
21
+ expect(result).toStrictEqual({
22
+ url,
23
+ days: [
24
+ {
25
+ day: 'MONDAY',
26
+ sailings: [
27
+ {
28
+ depart: '7:30 AM',
29
+ arrive: '8:10 AM',
30
+ duration: '00:40',
31
+ messages: [],
32
+ },
33
+ {
34
+ depart: '9:45 AM',
35
+ arrive: '10:25 AM',
36
+ duration: '00:40',
37
+ messages: [],
38
+ },
39
+ {
40
+ depart: '11:55 AM',
41
+ arrive: '12:35 PM',
42
+ duration: '00:40',
43
+ messages: [],
44
+ },
45
+ {
46
+ depart: '2:10 PM',
47
+ arrive: '2:50 PM',
48
+ duration: '00:40',
49
+ messages: [],
50
+ },
51
+ {
52
+ depart: '4:20 PM',
53
+ arrive: '5:00 PM',
54
+ duration: '00:40',
55
+ messages: [],
56
+ },
57
+ {
58
+ depart: '5:30 PM',
59
+ arrive: '6:10 PM',
60
+ duration: '00:40',
61
+ messages: [],
62
+ },
63
+ {
64
+ depart: '7:50 PM',
65
+ arrive: '8:30 PM',
66
+ duration: '00:40',
67
+ messages: [],
68
+ },
69
+ {
70
+ depart: '10:55 PM',
71
+ arrive: '11:35 PM',
72
+ duration: '00:40',
73
+ messages: [],
74
+ },
75
+ ],
76
+ },
77
+ {
78
+ day: 'TUESDAY',
79
+ sailings: [
80
+ {
81
+ depart: '7:30 AM',
82
+ arrive: '8:10 AM',
83
+ duration: '00:40',
84
+ messages: [],
85
+ },
86
+ {
87
+ depart: '9:45 AM',
88
+ arrive: '10:25 AM',
89
+ duration: '00:40',
90
+ messages: [],
91
+ },
92
+ {
93
+ depart: '11:55 AM',
94
+ arrive: '12:35 PM',
95
+ duration: '00:40',
96
+ messages: [],
97
+ },
98
+ {
99
+ depart: '2:10 PM',
100
+ arrive: '2:50 PM',
101
+ duration: '00:40',
102
+ messages: [],
103
+ },
104
+ {
105
+ depart: '4:20 PM',
106
+ arrive: '5:00 PM',
107
+ duration: '00:40',
108
+ messages: [],
109
+ },
110
+ {
111
+ depart: '5:30 PM',
112
+ arrive: '6:10 PM',
113
+ duration: '00:40',
114
+ messages: [],
115
+ },
116
+ {
117
+ depart: '7:50 PM',
118
+ arrive: '8:30 PM',
119
+ duration: '00:40',
120
+ messages: [],
121
+ },
122
+ {
123
+ depart: '10:55 PM',
124
+ arrive: '11:35 PM',
125
+ duration: '00:40',
126
+ messages: [],
127
+ },
128
+ ],
129
+ },
130
+ {
131
+ day: 'WEDNESDAY',
132
+ sailings: [
133
+ {
134
+ depart: '7:30 AM',
135
+ arrive: '8:10 AM',
136
+ duration: '00:40',
137
+ messages: [],
138
+ },
139
+ {
140
+ depart: '9:45 AM',
141
+ arrive: '10:25 AM',
142
+ duration: '00:40',
143
+ messages: [],
144
+ },
145
+ {
146
+ depart: '11:55 AM',
147
+ arrive: '12:35 PM',
148
+ duration: '00:40',
149
+ messages: [],
150
+ },
151
+ {
152
+ depart: '2:10 PM',
153
+ arrive: '2:50 PM',
154
+ duration: '00:40',
155
+ messages: [],
156
+ },
157
+ {
158
+ depart: '4:20 PM',
159
+ arrive: '5:00 PM',
160
+ duration: '00:40',
161
+ messages: [],
162
+ },
163
+ {
164
+ depart: '5:30 PM',
165
+ arrive: '6:10 PM',
166
+ duration: '00:40',
167
+ messages: [],
168
+ },
169
+ {
170
+ depart: '7:50 PM',
171
+ arrive: '8:30 PM',
172
+ duration: '00:40',
173
+ messages: [],
174
+ },
175
+ {
176
+ depart: '10:55 PM',
177
+ arrive: '11:35 PM',
178
+ duration: '00:40',
179
+ messages: [],
180
+ },
181
+ ],
182
+ },
183
+ {
184
+ day: 'THURSDAY',
185
+ sailings: [
186
+ {
187
+ depart: '7:30 AM',
188
+ arrive: '8:10 AM',
189
+ duration: '00:40',
190
+ messages: [],
191
+ },
192
+ {
193
+ depart: '9:45 AM',
194
+ arrive: '10:25 AM',
195
+ duration: '00:40',
196
+ messages: [],
197
+ },
198
+ {
199
+ depart: '11:55 AM',
200
+ arrive: '12:35 PM',
201
+ duration: '00:40',
202
+ messages: [],
203
+ },
204
+ {
205
+ depart: '2:10 PM',
206
+ arrive: '2:50 PM',
207
+ duration: '00:40',
208
+ messages: [],
209
+ },
210
+ {
211
+ depart: '4:20 PM',
212
+ arrive: '5:00 PM',
213
+ duration: '00:40',
214
+ messages: [],
215
+ },
216
+ {
217
+ depart: '5:30 PM',
218
+ arrive: '6:10 PM',
219
+ duration: '00:40',
220
+ messages: [],
221
+ },
222
+ {
223
+ depart: '7:50 PM',
224
+ arrive: '8:30 PM',
225
+ duration: '00:40',
226
+ messages: [],
227
+ },
228
+ {
229
+ depart: '10:55 PM',
230
+ arrive: '11:35 PM',
231
+ duration: '00:40',
232
+ messages: [],
233
+ },
234
+ ],
235
+ },
236
+ {
237
+ day: 'FRIDAY',
238
+ sailings: [
239
+ {
240
+ depart: '7:30 AM',
241
+ arrive: '8:10 AM',
242
+ duration: '00:40',
243
+ messages: [],
244
+ },
245
+ {
246
+ depart: '9:45 AM',
247
+ arrive: '10:25 AM',
248
+ duration: '00:40',
249
+ messages: [],
250
+ },
251
+ {
252
+ depart: '11:55 AM',
253
+ arrive: '12:35 PM',
254
+ duration: '00:40',
255
+ messages: [],
256
+ },
257
+ {
258
+ depart: '2:10 PM',
259
+ arrive: '2:50 PM',
260
+ duration: '00:40',
261
+ messages: [],
262
+ },
263
+ {
264
+ depart: '4:20 PM',
265
+ arrive: '5:00 PM',
266
+ duration: '00:40',
267
+ messages: [],
268
+ },
269
+ {
270
+ depart: '5:30 PM',
271
+ arrive: '6:10 PM',
272
+ duration: '00:40',
273
+ messages: [],
274
+ },
275
+ {
276
+ depart: '7:50 PM',
277
+ arrive: '8:30 PM',
278
+ duration: '00:40',
279
+ messages: [],
280
+ },
281
+ {
282
+ depart: '10:55 PM',
283
+ arrive: '11:35 PM',
284
+ duration: '00:40',
285
+ messages: [],
286
+ },
287
+ ],
288
+ },
289
+ {
290
+ day: 'SATURDAY',
291
+ sailings: [
292
+ {
293
+ depart: '7:30 AM',
294
+ arrive: '8:10 AM',
295
+ duration: '00:40',
296
+ messages: [],
297
+ },
298
+ {
299
+ depart: '9:45 AM',
300
+ arrive: '10:25 AM',
301
+ duration: '00:40',
302
+ messages: [],
303
+ },
304
+ {
305
+ depart: '11:55 AM',
306
+ arrive: '12:35 PM',
307
+ duration: '00:40',
308
+ messages: [],
309
+ },
310
+ {
311
+ depart: '2:10 PM',
312
+ arrive: '2:50 PM',
313
+ duration: '00:40',
314
+ messages: [],
315
+ },
316
+ {
317
+ depart: '4:20 PM',
318
+ arrive: '5:00 PM',
319
+ duration: '00:40',
320
+ messages: [],
321
+ },
322
+ {
323
+ depart: '5:30 PM',
324
+ arrive: '6:10 PM',
325
+ duration: '00:40',
326
+ messages: [],
327
+ },
328
+ {
329
+ depart: '7:50 PM',
330
+ arrive: '8:30 PM',
331
+ duration: '00:40',
332
+ messages: [],
333
+ },
334
+ {
335
+ depart: '10:55 PM',
336
+ arrive: '11:35 PM',
337
+ duration: '00:40',
338
+ messages: [],
339
+ },
340
+ ],
341
+ },
342
+ {
343
+ day: 'SUNDAY',
344
+ sailings: [
345
+ {
346
+ depart: '7:30 AM',
347
+ arrive: '8:10 AM',
348
+ duration: '00:40',
349
+ messages: [],
350
+ },
351
+ {
352
+ depart: '9:45 AM',
353
+ arrive: '10:25 AM',
354
+ duration: '00:40',
355
+ messages: [],
356
+ },
357
+ {
358
+ depart: '11:55 AM',
359
+ arrive: '12:35 PM',
360
+ duration: '00:40',
361
+ messages: [],
362
+ },
363
+ {
364
+ depart: '2:10 PM',
365
+ arrive: '2:50 PM',
366
+ duration: '00:40',
367
+ messages: [],
368
+ },
369
+ {
370
+ depart: '4:20 PM',
371
+ arrive: '5:00 PM',
372
+ duration: '00:40',
373
+ messages: [],
374
+ },
375
+ {
376
+ depart: '5:30 PM',
377
+ arrive: '6:10 PM',
378
+ duration: '00:40',
379
+ messages: [],
380
+ },
381
+ {
382
+ depart: '7:50 PM',
383
+ arrive: '8:30 PM',
384
+ duration: '00:40',
385
+ messages: [],
386
+ },
387
+ {
388
+ depart: '10:55 PM',
389
+ arrive: '11:35 PM',
390
+ duration: '00:40',
391
+ messages: [],
392
+ },
393
+ ],
394
+ },
395
+ ],
396
+ });
397
+ });
398
+ it('builds the correct URL for the provided terminals', async () => {
399
+ await scrape({ from: 'TSW', to: 'DUK' });
400
+ expect(axiosMock).toHaveBeenCalledWith('https://www.bcferries.com/routes-fares/schedules/seasonal/TSW-DUK');
401
+ });
402
+ });
403
+ //# sourceMappingURL=seasonalSchedule.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seasonalSchedule.test.js","sourceRoot":"","sources":["../../../../../src/lib/sources/bcf/tests/seasonalSchedule.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=urls.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.test.d.ts","sourceRoot":"","sources":["../../../../../src/lib/sources/bcf/tests/urls.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
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 dayjs_1 = __importDefault(require("dayjs"));
7
+ const urls_1 = require("../urls");
8
+ describe('BCF URLs', () => {
9
+ describe('baseUrl', () => {
10
+ it('should be the correct base URL', () => {
11
+ expect(urls_1.baseUrl).toBe('https://www.bcferries.com');
12
+ });
13
+ });
14
+ describe('bcFerriesUrl', () => {
15
+ it('should create a basic URL without params', () => {
16
+ expect((0, urls_1.bcFerriesUrl)('test', 'path')).toBe(`${urls_1.baseUrl}/test/path`);
17
+ });
18
+ it('should create a URL with params', () => {
19
+ expect((0, urls_1.bcFerriesUrl)('test', 'path', { key: 'value' })).toBe(`${urls_1.baseUrl}/test/path?key=value`);
20
+ });
21
+ });
22
+ describe('bcFerriesRouteUrl', () => {
23
+ it('should create a route URL', () => {
24
+ expect((0, urls_1.bcFerriesRouteUrl)('test', 'HSB', 'LNG')).toBe(`${urls_1.baseUrl}/test/HSB-LNG`);
25
+ });
26
+ it('should create a route URL with params', () => {
27
+ expect((0, urls_1.bcFerriesRouteUrl)('test', 'HSB', 'LNG', { key: 'value' })).toBe(`${urls_1.baseUrl}/test/HSB-LNG?key=value`);
28
+ });
29
+ });
30
+ describe('routesUrl', () => {
31
+ it('should return the route fares schedules URL', () => {
32
+ expect((0, urls_1.routesUrl)()).toBe(`${urls_1.baseUrl}/routes-fares/schedules`);
33
+ });
34
+ });
35
+ describe('availabilityUrl', () => {
36
+ it('should return the sailing availability URL for the provided route and departure timestamp', () => {
37
+ const timestamp = (0, dayjs_1.default)('2025-01-01 14:10:00', 'YYYY-MM-DD HH:mm:ss');
38
+ expect((0, urls_1.availabilityUrl)('HSB', 'LNG', timestamp.toISOString())).toBe(`${urls_1.baseUrl}/sailing-availability?departureTime=2025-01-01%2014:10:00&routeCode=HSB-LNG`);
39
+ });
40
+ it('should return the sailing availability URL for the provided route and departure time', () => {
41
+ const currentDate = (0, dayjs_1.default)().format('YYYY-MM-DD');
42
+ expect((0, urls_1.availabilityUrl)('HSB', 'LNG', `${currentDate} 14:10:00.000`)).toBe(`${urls_1.baseUrl}/sailing-availability?departureTime=${currentDate}%2014:10:00&routeCode=HSB-LNG`);
43
+ });
44
+ });
45
+ describe('currentConditionsUrl', () => {
46
+ it('should return the current conditions URL for the provided route', () => {
47
+ expect((0, urls_1.currentConditionsUrl)('HSB', 'LNG')).toBe(`${urls_1.baseUrl}/current-conditions/HSB-LNG`);
48
+ });
49
+ });
50
+ describe('departuresUrl', () => {
51
+ it('should return the current conditions departures URL for the provided terminal', () => {
52
+ expect((0, urls_1.departuresUrl)('HSB')).toBe(`${urls_1.baseUrl}/current-conditions/departures?terminalCode=HSB`);
53
+ });
54
+ });
55
+ describe('dailyScheduleUrl', () => {
56
+ it('should return the route fares daily schedule URL for the provided route', () => {
57
+ expect((0, urls_1.dailyScheduleUrl)('HSB', 'LNG')).toBe(`${urls_1.baseUrl}/routes-fares/schedules/daily/HSB-LNG`);
58
+ });
59
+ it('should return the route fares daily schedule URL for the provided route and date', () => {
60
+ expect((0, urls_1.dailyScheduleUrl)('HSB', 'LNG', '2025-01-02')).toBe(`${urls_1.baseUrl}/routes-fares/schedules/daily/HSB-LNG?scheduleDate=01/02/2025`);
61
+ });
62
+ });
63
+ describe('seasonalScheduleUrl', () => {
64
+ it('should return the route fares seasonal schedule URL for the provided route', () => {
65
+ expect((0, urls_1.seasonalScheduleUrl)('HSB', 'LNG')).toBe(`${urls_1.baseUrl}/routes-fares/schedules/seasonal/HSB-LNG`);
66
+ });
67
+ });
68
+ });
69
+ //# sourceMappingURL=urls.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.test.js","sourceRoot":"","sources":["../../../../../src/lib/sources/bcf/tests/urls.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../../../src/lib/sources/bcf/tests/utils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
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 dayjs_1 = __importDefault(require("dayjs"));
7
+ const config_1 = require("../config");
8
+ const utils_1 = require("../utils");
9
+ describe('utils', () => {
10
+ const tzNow = (0, dayjs_1.default)().tz(config_1.tz);
11
+ const nowDate = tzNow.format('YYYY-MM-DD');
12
+ const tzOffset = tzNow.format('Z');
13
+ function isoTimestamp(time, date = nowDate) {
14
+ return `${date}T${time}${tzOffset}`;
15
+ }
16
+ function isoDate(date) {
17
+ return isoTimestamp('00:00:00', date);
18
+ }
19
+ describe('parseTime', () => {
20
+ it('parses HH:mm', () => {
21
+ expect((0, utils_1.parseTime)('12:34').format()).toBe(isoTimestamp('12:34:00'));
22
+ expect((0, utils_1.parseTime)('14:34').format()).toBe(isoTimestamp('14:34:00'));
23
+ expect((0, utils_1.parseTime)('02:34').format()).toBe(isoTimestamp('02:34:00'));
24
+ });
25
+ it('parses hh:mmA', () => {
26
+ expect((0, utils_1.parseTime)('12:34AM').format()).toBe(isoTimestamp('00:34:00'));
27
+ expect((0, utils_1.parseTime)('04:34PM').format()).toBe(isoTimestamp('16:34:00'));
28
+ expect((0, utils_1.parseTime)('02:34PM').format()).toBe(isoTimestamp('14:34:00'));
29
+ });
30
+ it('parses h:mmA', () => {
31
+ expect((0, utils_1.parseTime)('12:34AM').format()).toBe(isoTimestamp('00:34:00'));
32
+ expect((0, utils_1.parseTime)('4:34PM').format()).toBe(isoTimestamp('16:34:00'));
33
+ expect((0, utils_1.parseTime)('2:34PM').format()).toBe(isoTimestamp('14:34:00'));
34
+ });
35
+ it('normalizes AM/PM to uppercase', () => {
36
+ expect((0, utils_1.parseTime)('12:34am').format()).toBe(isoTimestamp('00:34:00'));
37
+ expect((0, utils_1.parseTime)('4:34pm').format()).toBe(isoTimestamp('16:34:00'));
38
+ expect((0, utils_1.parseTime)('2:34pm').format()).toBe(isoTimestamp('14:34:00'));
39
+ });
40
+ });
41
+ describe('parseDate', () => {
42
+ it('parses YYYY-MM-DD', () => {
43
+ expect((0, utils_1.parseDate)('2025-01-01').format()).toBe(isoDate('2025-01-01'));
44
+ });
45
+ it('parses MM/DD/YYYY', () => {
46
+ expect((0, utils_1.parseDate)('01/01/2025').format()).toBe(isoDate('2025-01-01'));
47
+ });
48
+ it('parses M/D/YYYY', () => {
49
+ expect((0, utils_1.parseDate)('1/1/2025').format()).toBe(isoDate('2025-01-01'));
50
+ });
51
+ });
52
+ describe('parseTimestamp', () => {
53
+ it('parses YYYY-MM-DDTHH:mm:ss.SSSZ', () => {
54
+ expect((0, utils_1.parseTimestamp)('2025-01-01T12:34:56.000Z').format()).toBe(isoTimestamp('04:34:56', '2025-01-01'));
55
+ });
56
+ it('parses YYYY-MM-DDTHH:mm:ss.SSS', () => {
57
+ expect((0, utils_1.parseTimestamp)('2025-01-01T12:34:56.000').format()).toBe(isoTimestamp('12:34:56', '2025-01-01'));
58
+ });
59
+ it('parses YYYY-MM-DD HH:mm:ss.SSSZ', () => {
60
+ expect((0, utils_1.parseTimestamp)('2025-01-01 12:34:56.000Z').format()).toBe(isoTimestamp('04:34:56', '2025-01-01'));
61
+ });
62
+ it('parses YYYY-MM-DD HH:mm:ss.SSS', () => {
63
+ expect((0, utils_1.parseTimestamp)('2025-01-01 12:34:56.000').format()).toBe(isoTimestamp('12:34:56', '2025-01-01'));
64
+ });
65
+ it('can round trip with ISO 8601', () => {
66
+ const timestamp = (0, dayjs_1.default)().toISOString();
67
+ expect((0, utils_1.parseTimestamp)(timestamp).toISOString()).toBe(timestamp);
68
+ });
69
+ });
70
+ describe('buildTimestamp', () => {
71
+ it('builds a timestamp for the current date', () => {
72
+ expect((0, utils_1.buildTimestamp)('12:34').format()).toBe(isoTimestamp('12:34:00'));
73
+ });
74
+ it('builds a timestamp for a specific date', () => {
75
+ expect((0, utils_1.buildTimestamp)('12:34', '2025-01-01').format()).toBe(isoTimestamp('12:34:00', '2025-01-01'));
76
+ });
77
+ });
78
+ });
79
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../../src/lib/sources/bcf/tests/utils.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { baseUrl } from './config';
2
+ export { baseUrl };
3
+ export declare function bcFerriesUrl(type: string, path: string, params?: Record<string, string>): string;
4
+ export declare function bcFerriesRouteUrl(type: string, from: string, to: string, params?: Record<string, string>): string;
5
+ export declare function routesUrl(): string;
6
+ export declare function availabilityUrl(from: string, to: string, departureTime: string): string;
7
+ export declare function currentConditionsUrl(from: string, to: string): string;
8
+ export declare function departuresUrl(from: string): string;
9
+ export declare function dailyScheduleUrl(from: string, to: string, date?: string): string;
10
+ export declare function seasonalScheduleUrl(from: string, to: string): string;
11
+ //# sourceMappingURL=urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../../../src/lib/sources/bcf/urls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGlC,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAQhC;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAGhC;AAED,wBAAgB,SAAS,WAExB;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,MAAM,UAYtB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAE5D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,UAIzC;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,UAkBvE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAE3D"}