hk-bus-eta 3.7.2 → 3.7.4

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/lightRail.js CHANGED
@@ -6,44 +6,66 @@ function fetchEtas({ stopId, route, dest, }) {
6
6
  cache: utils_1.isSafari ? "default" : "no-store",
7
7
  })
8
8
  .then((response) => response.json())
9
- .then(({ platform_list }) => platform_list.reduce((acc, { route_list, platform_id }) => [
10
- ...acc,
11
- ...route_list
12
- .filter(({ route_no, dest_ch, dest_en, stop }) => route === route_no &&
13
- (dest_ch === dest.zh || dest_en.includes("Circular")) &&
14
- stop === 0)
15
- .map(({ time_en, train_length }) => {
16
- let waitTime = 0;
17
- switch (time_en.toLowerCase()) {
18
- case "arriving":
19
- case "departing":
20
- case "-":
21
- waitTime = 0;
22
- break;
23
- default:
24
- waitTime = parseInt(time_en, 10);
25
- break;
26
- }
27
- const etaDate = new Date(Date.now() + waitTime * 60 * 1000 + 8 * 3600000);
28
- return {
29
- eta: `${etaDate.getUTCFullYear()}-${`0${etaDate.getUTCMonth() + 1}`.slice(-2)}-${`0${etaDate.getUTCDate()}`.slice(-2)}` +
30
- `T${`0${etaDate.getUTCHours()}`.slice(-2)}:${`0${etaDate.getMinutes()}`.slice(-2)}:${`0${etaDate.getSeconds()}`.slice(-2)}+08:00`,
31
- remark: {
32
- zh: `${platform_id}號月台 - ${Array(train_length)
33
- .fill("▭")
34
- .join("")}`,
35
- en: `Platform ${platform_id} - ${Array(train_length)
36
- .fill("▭")
37
- .join("")}`,
9
+ .then(({ platform_list }) => {
10
+ if (platform_list.every(({ end_service_status }) => end_service_status)) {
11
+ return [
12
+ {
13
+ eta: null,
14
+ remark: {
15
+ zh: "此站今日服務已經終止",
16
+ en: "This stop's service for today has ended",
17
+ },
18
+ dest: {
19
+ zh: "",
20
+ en: "",
21
+ },
22
+ co: "lightRail",
38
23
  },
39
- dest: {
40
- zh: "",
41
- en: "",
42
- },
43
- co: "lightRail",
44
- };
45
- }, []),
46
- ], []))
24
+ ];
25
+ }
26
+ // How should `end_service_status` for only some platforms be handled? Would a light rail line stop at different platforms?
27
+ return platform_list.reduce((acc, { route_list, platform_id }) => {
28
+ return [
29
+ ...acc,
30
+ // route_list is null when there are no ETAs available
31
+ ...(route_list !== null && route_list !== void 0 ? route_list : [])
32
+ .filter(({ route_no, dest_ch, dest_en, stop }) => route === route_no &&
33
+ (dest_ch === dest.zh || dest_en.includes("Circular")) &&
34
+ stop === 0)
35
+ .map(({ time_en, train_length }) => {
36
+ let waitTime = 0;
37
+ switch (time_en.toLowerCase()) {
38
+ case "arriving":
39
+ case "departing":
40
+ case "-":
41
+ waitTime = 0;
42
+ break;
43
+ default:
44
+ waitTime = parseInt(time_en, 10);
45
+ break;
46
+ }
47
+ const etaDate = new Date(Date.now() + waitTime * 60 * 1000 + 8 * 3600000);
48
+ return {
49
+ eta: `${etaDate.getUTCFullYear()}-${`0${etaDate.getUTCMonth() + 1}`.slice(-2)}-${`0${etaDate.getUTCDate()}`.slice(-2)}` +
50
+ `T${`0${etaDate.getUTCHours()}`.slice(-2)}:${`0${etaDate.getMinutes()}`.slice(-2)}:${`0${etaDate.getSeconds()}`.slice(-2)}+08:00`,
51
+ remark: {
52
+ zh: `${platform_id}號月台 - ${Array(train_length)
53
+ .fill("▭")
54
+ .join("")}`,
55
+ en: `Platform ${platform_id} - ${Array(train_length)
56
+ .fill("▭")
57
+ .join("")}`,
58
+ },
59
+ dest: {
60
+ zh: "",
61
+ en: "",
62
+ },
63
+ co: "lightRail",
64
+ };
65
+ }, []),
66
+ ];
67
+ }, []);
68
+ })
47
69
  .catch((e) => {
48
70
  console.error(e);
49
71
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"lightRail.js","sourceRoot":"","sources":["../src/lightRail.ts"],"names":[],"mappings":";;AACA,mCAAmC;AAQnC,SAAwB,SAAS,CAAC,EAChC,MAAM,EACN,KAAK,EACL,IAAI,GACW;IACf,OAAO,KAAK,CACV,sEAAsE,MAAM,CAAC,KAAK,CAChF,CAAC,CACF,EAAE,EACH;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAC1B,aAAa,CAAC,MAAM,CAClB,CAAC,GAAU,EAAE,EAAE,UAAU,EAAE,WAAW,EAAO,EAAE,EAAE,CAAC;QAChD,GAAG,GAAG;QACN,GAAG,UAAU;aACV,MAAM,CACL,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAO,EAAE,EAAE,CAC5C,KAAK,KAAK,QAAQ;YAClB,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,KAAK,CAAC,CACb;aACA,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAO,EAAE,EAAE;YACtC,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC7B,KAAK,UAAU,CAAC;gBAChB,KAAK,WAAW,CAAC;gBACjB,KAAK,GAAG;oBACN,QAAQ,GAAG,CAAC,CAAC;oBACb,MAAM;gBACR;oBACE,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACjC,MAAM;aACT;YACD,MAAM,OAAO,GAAG,IAAI,IAAI,CACtB,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAChD,CAAC;YACF,OAAO;gBACL,GAAG,EACD,GAAG,OAAO,CAAC,cAAc,EAAE,IAAI,IAC7B,OAAO,CAAC,WAAW,EAAE,GAAG,CAC1B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;oBACtD,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,CACnC,CAAC,CAAC,CACH,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CACnC,CAAC,CAAC,CACH,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACnD,MAAM,EAAE;oBACN,EAAE,EAAE,GAAG,WAAW,SAAS,KAAK,CAAC,YAAY,CAAC;yBAC3C,IAAI,CAAC,GAAG,CAAC;yBACT,IAAI,CAAC,EAAE,CAAC,EAAE;oBACb,EAAE,EAAE,YAAY,WAAW,MAAM,KAAK,CAAC,YAAY,CAAC;yBACjD,IAAI,CAAC,GAAG,CAAC;yBACT,IAAI,CAAC,EAAE,CAAC,EAAE;iBACd;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,WAAW;aAChB,CAAC;QACJ,CAAC,EAAE,EAAE,CAAC;KACT,EACD,EAAE,CACH,CACF;SACA,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACP,CAAC;AAzED,4BAyEC"}
1
+ {"version":3,"file":"lightRail.js","sourceRoot":"","sources":["../src/lightRail.ts"],"names":[],"mappings":"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"}
package/dist/mtr.js CHANGED
@@ -5,10 +5,34 @@ function fetchEtas({ stopId, route, bound, stopList, }) {
5
5
  return fetch(`https://rt.data.gov.hk/v1/transport/mtr/getSchedule.php?line=${route}&sta=${stopId}`, {
6
6
  cache: utils_1.isSafari ? "default" : "no-store",
7
7
  })
8
+ .catch(() => (fetch(`https://mtr.hkbus.app/?line=${route}&sta=${stopId}`, {
9
+ cache: utils_1.isSafari ? "default" : "no-store",
10
+ })))
8
11
  .then((response) => response.json())
9
- .then(({ data, status }) => status === 0
10
- ? []
11
- : data[`${route}-${stopId}`][bound.endsWith("UT") ? "UP" : "DOWN"].reduce((acc, { time, plat, dest }) => [
12
+ .then(({ data, message, status, url }) => {
13
+ if (status === 0) {
14
+ if (message && typeof message === "string") {
15
+ const message2 = message
16
+ .replace("Please click here for more information.", "")
17
+ .trim();
18
+ return [
19
+ {
20
+ eta: null,
21
+ remark: {
22
+ zh: message2,
23
+ en: message2,
24
+ },
25
+ dest: {
26
+ zh: "",
27
+ en: "",
28
+ },
29
+ co: "mtr",
30
+ },
31
+ ];
32
+ }
33
+ return [];
34
+ }
35
+ return data[`${route}-${stopId}`][bound.endsWith("UT") ? "UP" : "DOWN"].reduce((acc, { time, plat, dest }) => [
12
36
  ...acc,
13
37
  {
14
38
  eta: time.replace(" ", "T") + "+08:00",
@@ -22,7 +46,8 @@ function fetchEtas({ stopId, route, bound, stopList, }) {
22
46
  },
23
47
  co: "mtr",
24
48
  },
25
- ], []));
49
+ ], []);
50
+ });
26
51
  }
27
52
  exports.default = fetchEtas;
28
53
  //# sourceMappingURL=mtr.js.map
package/dist/mtr.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mtr.js","sourceRoot":"","sources":["../src/mtr.ts"],"names":[],"mappings":";;AACA,mCAAmC;AASnC,SAAwB,SAAS,CAAC,EAChC,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,GACO;IACf,OAAO,KAAK,CACV,gEAAgE,KAAK,QAAQ,MAAM,EAAE,EACrF;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CACzB,MAAM,KAAK,CAAC;QACV,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CACxB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CACrC,CAAC,MAAM,CACN,CAAC,GAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAO,EAAE,EAAE,CAAC;YACzC,GAAG,GAAG;YACN;gBACE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ;gBACtC,MAAM,EAAE;oBACN,EAAE,EAAE,GAAG,IAAI,KAAK;oBAChB,EAAE,EAAE,YAAY,IAAI,EAAE;iBACvB;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;oBAC1B,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;iBAC3B;gBACD,EAAE,EAAE,KAAK;aACV;SACF,EACD,EAAE,CACH,CACN,CAAC;AACN,CAAC;AArCD,4BAqCC"}
1
+ {"version":3,"file":"mtr.js","sourceRoot":"","sources":["../src/mtr.ts"],"names":[],"mappings":";;AACA,mCAAmC;AASnC,SAAwB,SAAS,CAAC,EAChC,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,GACO;IACf,OAAO,KAAK,CACV,gEAAgE,KAAK,QAAQ,MAAM,EAAE,EACrF;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,KAAK,CAAC,GAAG,EAAE,CAAC,CACX,KAAK,CACH,+BAA+B,KAAK,QAAQ,MAAM,EAAE,EACpD;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF,CACF,CAAC;SACD,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;QACvC,IAAI,MAAM,KAAK,CAAC,EAAE;YAChB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC1C,MAAM,QAAQ,GAAG,OAAO;qBACrB,OAAO,CAAC,yCAAyC,EAAE,EAAE,CAAC;qBACtD,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL;wBACE,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE;4BACN,EAAE,EAAE,QAAQ;4BACZ,EAAE,EAAE,QAAQ;yBACb;wBACD,IAAI,EAAE;4BACJ,EAAE,EAAE,EAAE;4BACN,EAAE,EAAE,EAAE;yBACP;wBACD,EAAE,EAAE,KAAK;qBACV;iBACF,CAAC;aACH;YACD,OAAO,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAC/B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CACrC,CAAC,MAAM,CACN,CAAC,GAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAO,EAAE,EAAE,CAAC;YACzC,GAAG,GAAG;YACN;gBACE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ;gBACtC,MAAM,EAAE;oBACN,EAAE,EAAE,GAAG,IAAI,KAAK;oBAChB,EAAE,EAAE,YAAY,IAAI,EAAE;iBACvB;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;oBAC1B,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;iBAC3B;gBACD,EAAE,EAAE,KAAK;aACV;SACF,EACD,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAjED,4BAiEC"}
package/esm/lightRail.js CHANGED
@@ -4,44 +4,66 @@ export default function fetchEtas({ stopId, route, dest, }) {
4
4
  cache: isSafari ? "default" : "no-store",
5
5
  })
6
6
  .then((response) => response.json())
7
- .then(({ platform_list }) => platform_list.reduce((acc, { route_list, platform_id }) => [
8
- ...acc,
9
- ...route_list
10
- .filter(({ route_no, dest_ch, dest_en, stop }) => route === route_no &&
11
- (dest_ch === dest.zh || dest_en.includes("Circular")) &&
12
- stop === 0)
13
- .map(({ time_en, train_length }) => {
14
- let waitTime = 0;
15
- switch (time_en.toLowerCase()) {
16
- case "arriving":
17
- case "departing":
18
- case "-":
19
- waitTime = 0;
20
- break;
21
- default:
22
- waitTime = parseInt(time_en, 10);
23
- break;
24
- }
25
- const etaDate = new Date(Date.now() + waitTime * 60 * 1000 + 8 * 3600000);
26
- return {
27
- eta: `${etaDate.getUTCFullYear()}-${`0${etaDate.getUTCMonth() + 1}`.slice(-2)}-${`0${etaDate.getUTCDate()}`.slice(-2)}` +
28
- `T${`0${etaDate.getUTCHours()}`.slice(-2)}:${`0${etaDate.getMinutes()}`.slice(-2)}:${`0${etaDate.getSeconds()}`.slice(-2)}+08:00`,
29
- remark: {
30
- zh: `${platform_id}號月台 - ${Array(train_length)
31
- .fill("▭")
32
- .join("")}`,
33
- en: `Platform ${platform_id} - ${Array(train_length)
34
- .fill("▭")
35
- .join("")}`,
7
+ .then(({ platform_list }) => {
8
+ if (platform_list.every(({ end_service_status }) => end_service_status)) {
9
+ return [
10
+ {
11
+ eta: null,
12
+ remark: {
13
+ zh: "此站今日服務已經終止",
14
+ en: "This stop's service for today has ended",
15
+ },
16
+ dest: {
17
+ zh: "",
18
+ en: "",
19
+ },
20
+ co: "lightRail",
36
21
  },
37
- dest: {
38
- zh: "",
39
- en: "",
40
- },
41
- co: "lightRail",
42
- };
43
- }, []),
44
- ], []))
22
+ ];
23
+ }
24
+ // How should `end_service_status` for only some platforms be handled? Would a light rail line stop at different platforms?
25
+ return platform_list.reduce((acc, { route_list, platform_id }) => {
26
+ return [
27
+ ...acc,
28
+ // route_list is null when there are no ETAs available
29
+ ...(route_list !== null && route_list !== void 0 ? route_list : [])
30
+ .filter(({ route_no, dest_ch, dest_en, stop }) => route === route_no &&
31
+ (dest_ch === dest.zh || dest_en.includes("Circular")) &&
32
+ stop === 0)
33
+ .map(({ time_en, train_length }) => {
34
+ let waitTime = 0;
35
+ switch (time_en.toLowerCase()) {
36
+ case "arriving":
37
+ case "departing":
38
+ case "-":
39
+ waitTime = 0;
40
+ break;
41
+ default:
42
+ waitTime = parseInt(time_en, 10);
43
+ break;
44
+ }
45
+ const etaDate = new Date(Date.now() + waitTime * 60 * 1000 + 8 * 3600000);
46
+ return {
47
+ eta: `${etaDate.getUTCFullYear()}-${`0${etaDate.getUTCMonth() + 1}`.slice(-2)}-${`0${etaDate.getUTCDate()}`.slice(-2)}` +
48
+ `T${`0${etaDate.getUTCHours()}`.slice(-2)}:${`0${etaDate.getMinutes()}`.slice(-2)}:${`0${etaDate.getSeconds()}`.slice(-2)}+08:00`,
49
+ remark: {
50
+ zh: `${platform_id}號月台 - ${Array(train_length)
51
+ .fill("▭")
52
+ .join("")}`,
53
+ en: `Platform ${platform_id} - ${Array(train_length)
54
+ .fill("▭")
55
+ .join("")}`,
56
+ },
57
+ dest: {
58
+ zh: "",
59
+ en: "",
60
+ },
61
+ co: "lightRail",
62
+ };
63
+ }, []),
64
+ ];
65
+ }, []);
66
+ })
45
67
  .catch((e) => {
46
68
  console.error(e);
47
69
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"lightRail.js","sourceRoot":"","sources":["../src/lightRail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lightRail.js","sourceRoot":"","sources":["../src/lightRail.ts"],"names":[],"mappings":"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"}
package/esm/mtr.js CHANGED
@@ -3,10 +3,34 @@ export default function fetchEtas({ stopId, route, bound, stopList, }) {
3
3
  return fetch(`https://rt.data.gov.hk/v1/transport/mtr/getSchedule.php?line=${route}&sta=${stopId}`, {
4
4
  cache: isSafari ? "default" : "no-store",
5
5
  })
6
+ .catch(() => (fetch(`https://mtr.hkbus.app/?line=${route}&sta=${stopId}`, {
7
+ cache: isSafari ? "default" : "no-store",
8
+ })))
6
9
  .then((response) => response.json())
7
- .then(({ data, status }) => status === 0
8
- ? []
9
- : data[`${route}-${stopId}`][bound.endsWith("UT") ? "UP" : "DOWN"].reduce((acc, { time, plat, dest }) => [
10
+ .then(({ data, message, status, url }) => {
11
+ if (status === 0) {
12
+ if (message && typeof message === "string") {
13
+ const message2 = message
14
+ .replace("Please click here for more information.", "")
15
+ .trim();
16
+ return [
17
+ {
18
+ eta: null,
19
+ remark: {
20
+ zh: message2,
21
+ en: message2,
22
+ },
23
+ dest: {
24
+ zh: "",
25
+ en: "",
26
+ },
27
+ co: "mtr",
28
+ },
29
+ ];
30
+ }
31
+ return [];
32
+ }
33
+ return data[`${route}-${stopId}`][bound.endsWith("UT") ? "UP" : "DOWN"].reduce((acc, { time, plat, dest }) => [
10
34
  ...acc,
11
35
  {
12
36
  eta: time.replace(" ", "T") + "+08:00",
@@ -20,6 +44,7 @@ export default function fetchEtas({ stopId, route, bound, stopList, }) {
20
44
  },
21
45
  co: "mtr",
22
46
  },
23
- ], []));
47
+ ], []);
48
+ });
24
49
  }
25
50
  //# sourceMappingURL=mtr.js.map
package/esm/mtr.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mtr.js","sourceRoot":"","sources":["../src/mtr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,GACO;IACf,OAAO,KAAK,CACV,gEAAgE,KAAK,QAAQ,MAAM,EAAE,EACrF;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CACzB,MAAM,KAAK,CAAC;QACV,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CACxB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CACrC,CAAC,MAAM,CACN,CAAC,GAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAO,EAAE,EAAE,CAAC;YACzC,GAAG,GAAG;YACN;gBACE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ;gBACtC,MAAM,EAAE;oBACN,EAAE,EAAE,GAAG,IAAI,KAAK;oBAChB,EAAE,EAAE,YAAY,IAAI,EAAE;iBACvB;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;oBAC1B,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;iBAC3B;gBACD,EAAE,EAAE,KAAK;aACV;SACF,EACD,EAAE,CACH,CACN,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"mtr.js","sourceRoot":"","sources":["../src/mtr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,GACO;IACf,OAAO,KAAK,CACV,gEAAgE,KAAK,QAAQ,MAAM,EAAE,EACrF;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,KAAK,CAAC,GAAG,EAAE,CAAC,CACX,KAAK,CACH,+BAA+B,KAAK,QAAQ,MAAM,EAAE,EACpD;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF,CACF,CAAC;SACD,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;QACvC,IAAI,MAAM,KAAK,CAAC,EAAE;YAChB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC1C,MAAM,QAAQ,GAAG,OAAO;qBACrB,OAAO,CAAC,yCAAyC,EAAE,EAAE,CAAC;qBACtD,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL;wBACE,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE;4BACN,EAAE,EAAE,QAAQ;4BACZ,EAAE,EAAE,QAAQ;yBACb;wBACD,IAAI,EAAE;4BACJ,EAAE,EAAE,EAAE;4BACN,EAAE,EAAE,EAAE;yBACP;wBACD,EAAE,EAAE,KAAK;qBACV;iBACF,CAAC;aACH;YACD,OAAO,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAC/B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CACrC,CAAC,MAAM,CACN,CAAC,GAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAO,EAAE,EAAE,CAAC;YACzC,GAAG,GAAG;YACN;gBACE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ;gBACtC,MAAM,EAAE;oBACN,EAAE,EAAE,GAAG,IAAI,KAAK;oBAChB,EAAE,EAAE,YAAY,IAAI,EAAE;iBACvB;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;oBAC1B,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;iBAC3B;gBACD,EAAE,EAAE,KAAK;aACV;SACF,EACD,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hk-bus-eta",
3
- "version": "3.7.2",
3
+ "version": "3.7.4",
4
4
  "description": "Query the ETA (Estimated Time of Arrival) of HK Bus/Minibus/MTR/Lightrail",
5
5
  "main": "dist/index.js",
6
6
  "module": "esm/index.js",
package/src/lightRail.ts CHANGED
@@ -21,61 +21,83 @@ export default function fetchEtas({
21
21
  },
22
22
  )
23
23
  .then((response) => response.json())
24
- .then(({ platform_list }) =>
25
- platform_list.reduce(
26
- (acc: Eta[], { route_list, platform_id }: any) => [
27
- ...acc,
28
- ...route_list
29
- .filter(
30
- ({ route_no, dest_ch, dest_en, stop }: any) =>
31
- route === route_no &&
32
- (dest_ch === dest.zh || dest_en.includes("Circular")) &&
33
- stop === 0,
34
- )
35
- .map(({ time_en, train_length }: any) => {
36
- let waitTime = 0;
37
- switch (time_en.toLowerCase()) {
38
- case "arriving":
39
- case "departing":
40
- case "-":
41
- waitTime = 0;
42
- break;
43
- default:
44
- waitTime = parseInt(time_en, 10);
45
- break;
46
- }
47
- const etaDate = new Date(
48
- Date.now() + waitTime * 60 * 1000 + 8 * 3600000,
49
- );
50
- return {
51
- eta:
52
- `${etaDate.getUTCFullYear()}-${`0${
53
- etaDate.getUTCMonth() + 1
54
- }`.slice(-2)}-${`0${etaDate.getUTCDate()}`.slice(-2)}` +
55
- `T${`0${etaDate.getUTCHours()}`.slice(
56
- -2,
57
- )}:${`0${etaDate.getMinutes()}`.slice(
58
- -2,
59
- )}:${`0${etaDate.getSeconds()}`.slice(-2)}+08:00`,
60
- remark: {
61
- zh: `${platform_id}號月台 - ${Array(train_length)
62
- .fill("▭")
63
- .join("")}`,
64
- en: `Platform ${platform_id} - ${Array(train_length)
65
- .fill("▭")
66
- .join("")}`,
67
- },
68
- dest: {
69
- zh: "",
70
- en: "",
71
- },
72
- co: "lightRail",
73
- };
74
- }, []),
75
- ],
76
- [],
77
- ),
78
- )
24
+ .then(({ platform_list }) => {
25
+ if (
26
+ platform_list.every(({ end_service_status }: any) => end_service_status)
27
+ ) {
28
+ return [
29
+ {
30
+ eta: null,
31
+ remark: {
32
+ zh: "此站今日服務已經終止",
33
+ en: "This stop's service for today has ended",
34
+ },
35
+ dest: {
36
+ zh: "",
37
+ en: "",
38
+ },
39
+ co: "lightRail",
40
+ },
41
+ ];
42
+ }
43
+ // How should `end_service_status` for only some platforms be handled? Would a light rail line stop at different platforms?
44
+ return platform_list.reduce(
45
+ (acc: Eta[], { route_list, platform_id }: any) => {
46
+ return [
47
+ ...acc,
48
+ // route_list is null when there are no ETAs available
49
+ ...(route_list ?? [])
50
+ .filter(
51
+ ({ route_no, dest_ch, dest_en, stop }: any) =>
52
+ route === route_no &&
53
+ (dest_ch === dest.zh || dest_en.includes("Circular")) &&
54
+ stop === 0,
55
+ )
56
+ .map(({ time_en, train_length }: any) => {
57
+ let waitTime = 0;
58
+ switch (time_en.toLowerCase()) {
59
+ case "arriving":
60
+ case "departing":
61
+ case "-":
62
+ waitTime = 0;
63
+ break;
64
+ default:
65
+ waitTime = parseInt(time_en, 10);
66
+ break;
67
+ }
68
+ const etaDate = new Date(
69
+ Date.now() + waitTime * 60 * 1000 + 8 * 3600000,
70
+ );
71
+ return {
72
+ eta:
73
+ `${etaDate.getUTCFullYear()}-${`0${
74
+ etaDate.getUTCMonth() + 1
75
+ }`.slice(-2)}-${`0${etaDate.getUTCDate()}`.slice(-2)}` +
76
+ `T${`0${etaDate.getUTCHours()}`.slice(
77
+ -2,
78
+ )}:${`0${etaDate.getMinutes()}`.slice(
79
+ -2,
80
+ )}:${`0${etaDate.getSeconds()}`.slice(-2)}+08:00`,
81
+ remark: {
82
+ zh: `${platform_id}號月台 - ${Array(train_length)
83
+ .fill("▭")
84
+ .join("")}`,
85
+ en: `Platform ${platform_id} - ${Array(train_length)
86
+ .fill("▭")
87
+ .join("")}`,
88
+ },
89
+ dest: {
90
+ zh: "",
91
+ en: "",
92
+ },
93
+ co: "lightRail",
94
+ };
95
+ }, []),
96
+ ];
97
+ },
98
+ []
99
+ );
100
+ })
79
101
  .catch((e) => {
80
102
  console.error(e);
81
103
  return [];
package/src/mtr.ts CHANGED
@@ -20,29 +20,57 @@ export default function fetchEtas({
20
20
  cache: isSafari ? "default" : "no-store",
21
21
  },
22
22
  )
23
+ .catch(() => (
24
+ fetch(
25
+ `https://mtr.hkbus.app/?line=${route}&sta=${stopId}`,
26
+ {
27
+ cache: isSafari ? "default" : "no-store",
28
+ },
29
+ )
30
+ ))
23
31
  .then((response) => response.json())
24
- .then(({ data, status }) =>
25
- status === 0
26
- ? []
27
- : data[`${route}-${stopId}`][
28
- bound.endsWith("UT") ? "UP" : "DOWN"
29
- ].reduce(
30
- (acc: Eta[], { time, plat, dest }: any) => [
31
- ...acc,
32
- {
33
- eta: time.replace(" ", "T") + "+08:00",
34
- remark: {
35
- zh: `${plat}號月台`,
36
- en: `Platform ${plat}`,
37
- },
38
- dest: {
39
- zh: stopList[dest].name.zh,
40
- en: stopList[dest].name.en,
41
- },
42
- co: "mtr",
32
+ .then(({ data, message, status, url }) => {
33
+ if (status === 0) {
34
+ if (message && typeof message === "string") {
35
+ const message2 = message
36
+ .replace("Please click here for more information.", "")
37
+ .trim();
38
+ return [
39
+ {
40
+ eta: null,
41
+ remark: {
42
+ zh: message2,
43
+ en: message2,
43
44
  },
44
- ],
45
- [],
46
- ),
47
- );
45
+ dest: {
46
+ zh: "",
47
+ en: "",
48
+ },
49
+ co: "mtr",
50
+ },
51
+ ];
52
+ }
53
+ return [];
54
+ }
55
+ return data[`${route}-${stopId}`][
56
+ bound.endsWith("UT") ? "UP" : "DOWN"
57
+ ].reduce(
58
+ (acc: Eta[], { time, plat, dest }: any) => [
59
+ ...acc,
60
+ {
61
+ eta: time.replace(" ", "T") + "+08:00",
62
+ remark: {
63
+ zh: `${plat}號月台`,
64
+ en: `Platform ${plat}`,
65
+ },
66
+ dest: {
67
+ zh: stopList[dest].name.zh,
68
+ en: stopList[dest].name.en,
69
+ },
70
+ co: "mtr",
71
+ },
72
+ ],
73
+ []
74
+ );
75
+ });
48
76
  }