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 +59 -37
- package/dist/lightRail.js.map +1 -1
- package/dist/mtr.js +29 -4
- package/dist/mtr.js.map +1 -1
- package/esm/lightRail.js +59 -37
- package/esm/lightRail.js.map +1 -1
- package/esm/mtr.js +29 -4
- package/esm/mtr.js.map +1 -1
- package/package.json +1 -1
- package/src/lightRail.ts +77 -55
- package/src/mtr.ts +51 -23
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 }) =>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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 [];
|
package/dist/lightRail.js.map
CHANGED
|
@@ -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,
|
|
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;QAC1B,IACE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,EAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,EACxE;YACA,OAAO;gBACL;oBACE,GAAG,EAAE,IAAI;oBACT,MAAM,EAAE;wBACN,EAAE,EAAE,YAAY;wBAChB,EAAE,EAAE,yCAAyC;qBAC9C;oBACD,IAAI,EAAE;wBACJ,EAAE,EAAE,EAAE;wBACN,EAAE,EAAE,EAAE;qBACP;oBACD,EAAE,EAAE,WAAW;iBAChB;aACF,CAAC;SACH;QACD,2HAA2H;QAC3H,OAAO,aAAa,CAAC,MAAM,CACzB,CAAC,GAAU,EAAE,EAAE,UAAU,EAAE,WAAW,EAAO,EAAE,EAAE;YAC/C,OAAO;gBACL,GAAG,GAAG;gBACN,sDAAsD;gBACtD,GAAG,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,EAAE,CAAC;qBAClB,MAAM,CACL,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAO,EAAE,EAAE,CAC5C,KAAK,KAAK,QAAQ;oBAClB,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACrD,IAAI,KAAK,CAAC,CACb;qBACA,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAO,EAAE,EAAE;oBACtC,IAAI,QAAQ,GAAG,CAAC,CAAC;oBACjB,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE;wBAC7B,KAAK,UAAU,CAAC;wBAChB,KAAK,WAAW,CAAC;wBACjB,KAAK,GAAG;4BACN,QAAQ,GAAG,CAAC,CAAC;4BACb,MAAM;wBACR;4BACE,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;4BACjC,MAAM;qBACT;oBACD,MAAM,OAAO,GAAG,IAAI,IAAI,CACtB,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAChD,CAAC;oBACF,OAAO;wBACL,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;4BACtD,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;wBACnD,MAAM,EAAE;4BACN,EAAE,EAAE,GAAG,WAAW,SAAS,KAAK,CAAC,YAAY,CAAC;iCAC3C,IAAI,CAAC,GAAG,CAAC;iCACT,IAAI,CAAC,EAAE,CAAC,EAAE;4BACb,EAAE,EAAE,YAAY,WAAW,MAAM,KAAK,CAAC,YAAY,CAAC;iCACjD,IAAI,CAAC,GAAG,CAAC;iCACT,IAAI,CAAC,EAAE,CAAC,EAAE;yBACd;wBACD,IAAI,EAAE;4BACJ,EAAE,EAAE,EAAE;4BACN,EAAE,EAAE,EAAE;yBACP;wBACD,EAAE,EAAE,WAAW;qBAChB,CAAC;gBACJ,CAAC,EAAE,EAAE,CAAC;aACT,CAAC;QACJ,CAAC,EACD,EAAE,CACH,CAAC;IACJ,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACP,CAAC;AA/FD,4BA+FC"}
|
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 }) =>
|
|
10
|
-
|
|
11
|
-
|
|
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,
|
|
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 }) =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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 [];
|
package/esm/lightRail.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightRail.js","sourceRoot":"","sources":["../src/lightRail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQnC,MAAM,CAAC,OAAO,UAAU,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,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,aAAa,EAAE,EAAE,EAAE,
|
|
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 }) =>
|
|
8
|
-
|
|
9
|
-
|
|
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,
|
|
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
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
|
-
|
|
26
|
-
(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
}
|