hk-bus-eta 3.2.1 → 3.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.
@@ -0,0 +1,11 @@
1
+ import type { Eta, StopList } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ stops: {
5
+ fortuneferry: string[];
6
+ };
7
+ seq: number;
8
+ stopList: StopList;
9
+ }
10
+ export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }: fetchEtasProps): Promise<Eta[]>;
11
+ export {};
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ const getCode = (zhName) => {
5
+ if (zhName.includes("中環")) {
6
+ return "CL";
7
+ }
8
+ else if (zhName.includes("紅磡")) {
9
+ return "HH";
10
+ }
11
+ else if (zhName.includes("北角")) {
12
+ return "NP";
13
+ }
14
+ else if (zhName.includes("觀塘")) {
15
+ return "KT";
16
+ }
17
+ else if (zhName.includes("啟德")) {
18
+ return "KT";
19
+ }
20
+ else if (zhName.includes("屯門")) {
21
+ return "TM";
22
+ }
23
+ else if (zhName.includes("東涌")) {
24
+ return "TC";
25
+ }
26
+ else if (zhName.includes("沙螺灣")) {
27
+ return "SLW";
28
+ }
29
+ else if (zhName.includes("大澳")) {
30
+ return "TO";
31
+ }
32
+ return "CL";
33
+ };
34
+ function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }) {
35
+ if (stops.length === seq - 1)
36
+ return Promise.resolve([]);
37
+ const u = getCode(stopList[stops[seq]].name.zh);
38
+ const v = getCode(stopList[stops[seq + 1]].name.zh);
39
+ return fetch(`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`, {
40
+ cache: utils_1.isSafari ? "default" : "no-store",
41
+ })
42
+ .then((response) => response.json())
43
+ .then(({ data }) => {
44
+ if (!data)
45
+ return [];
46
+ return data
47
+ .map(({ depart_time, rmk_tc, rmk_en }) => {
48
+ const date = new Date();
49
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
50
+ if ((new Date(guess)) < date) {
51
+ date.setDate(date.getDate() + 1);
52
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
53
+ }
54
+ return {
55
+ eta: guess,
56
+ remark: {
57
+ zh: rmk_tc,
58
+ en: rmk_en,
59
+ },
60
+ dest: {
61
+ zh: "",
62
+ en: "",
63
+ },
64
+ co: "fortuneferry",
65
+ };
66
+ });
67
+ });
68
+ }
69
+ exports.default = fetchEtas;
70
+ //# sourceMappingURL=fortuneferry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":"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"}
package/dist/hkkf.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { Eta, RouteListEntry } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ bound: RouteListEntry["bound"]["hkkf"];
5
+ seq: number;
6
+ }
7
+ export default function fetchEtas({ route, bound, seq }: fetchEtasProps): Promise<Eta[]>;
8
+ export {};
package/dist/hkkf.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ function fetchEtas({ route, bound, seq }) {
5
+ if (seq === 0)
6
+ return Promise.resolve([]);
7
+ return fetch(`https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`, {
8
+ cache: utils_1.isSafari ? "default" : "no-store",
9
+ })
10
+ .then((response) => response.json())
11
+ .then(({ data }) => {
12
+ if (!data)
13
+ return [];
14
+ return data
15
+ .map(({ ETA }) => {
16
+ return {
17
+ eta: ETA,
18
+ remark: {
19
+ zh: "",
20
+ en: "",
21
+ },
22
+ dest: {
23
+ zh: "",
24
+ en: "",
25
+ },
26
+ co: "hkkf",
27
+ };
28
+ });
29
+ });
30
+ }
31
+ exports.default = fetchEtas;
32
+ //# sourceMappingURL=hkkf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hkkf.js","sourceRoot":"","sources":["../src/hkkf.ts"],"names":[],"mappings":";;AACA,mCAAmC;AAQnC,SAAwB,SAAS,CAAC,EAChC,KAAK,EAAE,KAAK,EAAE,GAAG,EACF;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,wCAAwC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAClG;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,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,GAAG,EAAM,EAAE,EAAE;YAClB,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE;oBACN,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,MAAM;aACX,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AA9BD,4BA8BC"}
package/dist/index.js CHANGED
@@ -20,6 +20,9 @@ const lrtfeeder_1 = __importDefault(require("./lrtfeeder"));
20
20
  const gmb_1 = __importDefault(require("./gmb"));
21
21
  const lightRail_1 = __importDefault(require("./lightRail"));
22
22
  const mtr_1 = __importDefault(require("./mtr"));
23
+ const sunferry_1 = __importDefault(require("./sunferry"));
24
+ const fortuneferry_1 = __importDefault(require("./fortuneferry"));
25
+ const hkkf_1 = __importDefault(require("./hkkf"));
23
26
  function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtfsId, stopList, language, }) {
24
27
  return __awaiter(this, void 0, void 0, function* () {
25
28
  try {
@@ -59,29 +62,16 @@ function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtf
59
62
  bound: bound.mtr,
60
63
  }));
61
64
  }
62
- else if (company_id === "gmbHki" && stops.gmbHki) {
63
- _etas = _etas.concat(yield (0, gmb_1.default)({
64
- stopId: stops.gmbHki[seq],
65
- gtfsId,
66
- seq,
67
- bound: bound.gmbHki,
65
+ else if (company_id === "fortuneferry" && stops.fortuneferry) {
66
+ _etas = _etas.concat(yield (0, fortuneferry_1.default)({
67
+ route, stops, seq, stopList
68
68
  }));
69
69
  }
70
- else if (company_id === "gmbKln" && stops.gmbKln) {
71
- _etas = _etas.concat(yield (0, gmb_1.default)({
72
- stopId: stops.gmbKln[seq],
73
- gtfsId,
74
- seq,
75
- bound: bound.gmbKln,
76
- }));
70
+ else if (company_id === "sunferry" && stops.sunferry) {
71
+ _etas = _etas.concat(yield (0, sunferry_1.default)({ route, seq }));
77
72
  }
78
- else if (company_id === "gmbNt" && stops.gmbNt) {
79
- _etas = _etas.concat(yield (0, gmb_1.default)({
80
- stopId: stops.gmbNt[seq],
81
- gtfsId,
82
- seq,
83
- bound: bound.gmbNt,
84
- }));
73
+ else if (company_id === "hkkf" && stops.hkkf) {
74
+ _etas = _etas.concat(yield (0, hkkf_1.default)({ route, bound: bound.hkkf, seq }));
85
75
  }
86
76
  }
87
77
  return _etas.sort((a, b) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,gDAAwB;AACxB,gDAAwB;AACxB,4DAAoC;AACpC,gDAAwB;AACxB,4DAAoC;AACpC,gDAAwB;AASxB,SAAsB,SAAS,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,GAAG,EACH,WAAW,EACX,EAAE,EACF,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,GACO;;QACf,IAAI;YACF,IAAI,KAAK,GAAU,EAAE,CAAC;YACtB,KAAK,MAAM,UAAU,IAAI,EAAE,EAAE;gBAC3B,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBACrC,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC;wBACR,KAAK;wBACL,KAAK,EAAE,KAAK,CAAC,GAAG;wBAChB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;wBACtB,GAAG;wBACH,EAAE;wBACF,WAAW;wBACX,KAAK,EAAE,KAAK,CAAC,GAAG;qBACjB,CAAC,CACH,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CACpE,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAA,aAAG,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;iBACpE;qBAAM,IAAI,UAAU,KAAK,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE;oBACxD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,mBAAS,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CACnE,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CACrE,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE;oBACxD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,mBAAS,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAC/D,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC;wBACR,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;wBACtB,KAAK;wBACL,QAAQ;wBACR,KAAK,EAAE,KAAK,CAAC,GAAG;qBACjB,CAAC,CACH,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;oBAClD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC;wBACR,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;wBACzB,MAAM;wBACN,GAAG;wBACH,KAAK,EAAE,KAAK,CAAC,MAAM;qBACpB,CAAC,CACH,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;oBAClD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC;wBACR,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;wBACzB,MAAM;wBACN,GAAG;wBACH,KAAK,EAAE,KAAK,CAAC,MAAM;qBACpB,CAAC,CACH,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE;oBAChD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC;wBACR,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;wBACxB,MAAM;wBACN,GAAG;wBACH,KAAK,EAAE,KAAK,CAAC,KAAK;qBACnB,CAAC,CACH,CAAC;iBACH;aACF;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE;oBAAE,OAAO,CAAC,CAAC;qBACtB,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE;oBAAE,OAAO,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;SACX;IACH,CAAC;CAAA;AA9FD,8BA8FC;AAED,SAAsB,UAAU;;QAC9B,OAAO,KAAK,CAAC,+CAA+C,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;aAC/E,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACrB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,gEAAgE,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;aACtG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACrB,CAAC;IACN,CAAC;CAAA;AAND,gCAMC;AAED,SAAsB,aAAa;;QACjC,OAAO,KAAK,CAAC,0CAA0C,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;aAC1E,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACrB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,2DAA2D,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;aACjG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACrB,CAAC;IACN,CAAC;CAAA;AAND,sCAMC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,gDAAwB;AACxB,gDAAwB;AACxB,4DAAoC;AACpC,gDAAwB;AACxB,4DAAoC;AACpC,gDAAwB;AACxB,0DAAiC;AACjC,kEAA0C;AAC1C,kDAA0B;AAS1B,SAAsB,SAAS,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,GAAG,EACH,WAAW,EACX,EAAE,EACF,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,GACO;;QACf,IAAI;YACF,IAAI,KAAK,GAAU,EAAE,CAAC;YACtB,KAAK,MAAM,UAAU,IAAI,EAAE,EAAE;gBAC3B,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBACrC,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC;wBACR,KAAK;wBACL,KAAK,EAAE,KAAK,CAAC,GAAG;wBAChB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;wBACtB,GAAG;wBACH,EAAE;wBACF,WAAW;wBACX,KAAK,EAAE,KAAK,CAAC,GAAG;qBACjB,CAAC,CACH,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CACpE,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAA,aAAG,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;iBACpE;qBAAM,IAAI,UAAU,KAAK,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE;oBACxD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,mBAAS,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CACnE,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CACrE,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE;oBACxD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,mBAAS,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAC/D,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;oBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,aAAG,EAAC;wBACR,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;wBACtB,KAAK;wBACL,QAAQ;wBACR,KAAK,EAAE,KAAK,CAAC,GAAG;qBACjB,CAAC,CACH,CAAC;iBACH;qBAAM,IAAI,UAAU,KAAK,cAAc,IAAI,KAAK,CAAC,YAAY,EAAE;oBAC9D,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,IAAA,sBAAY,EAAC;wBACjB,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ;qBAC5B,CAAC,CACH,CAAA;iBACF;qBAAM,IAAI,UAAU,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE;oBACtD,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAA,kBAAQ,EAAC,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;iBACnD;qBAAM,IAAI,UAAU,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE;oBAC9C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAA,cAAI,EAAC,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;iBAClE;aACF;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE;oBAAE,OAAO,CAAC,CAAC;qBACtB,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE;oBAAE,OAAO,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;SACX;IACH,CAAC;CAAA;AA7ED,8BA6EC;AAED,SAAsB,UAAU;;QAC9B,OAAO,KAAK,CAAC,+CAA+C,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;aAC/E,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACrB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,gEAAgE,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;aACtG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACrB,CAAC;IACN,CAAC;CAAA;AAND,gCAMC;AAED,SAAsB,aAAa;;QACjC,OAAO,KAAK,CAAC,0CAA0C,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;aAC1E,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACrB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,2DAA2D,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;aACjG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACrB,CAAC;IACN,CAAC;CAAA;AAND,sCAMC"}
@@ -0,0 +1,7 @@
1
+ import type { Eta } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ seq: number;
5
+ }
6
+ export default function fetchEtas({ route, seq }: fetchEtasProps): Promise<Eta[]>;
7
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ function fetchEtas({ route, seq }) {
5
+ if (seq === 1)
6
+ return Promise.resolve([]);
7
+ return fetch(`https://www.sunferry.com.hk/eta/?route=${route}`, {
8
+ cache: utils_1.isSafari ? "default" : "no-store",
9
+ })
10
+ .then((response) => response.json())
11
+ .then(({ data }) => {
12
+ if (!data)
13
+ return [];
14
+ return data
15
+ .map(({ depart_time, rmk_en, rmk_tc, route_tc, route_en }) => {
16
+ const date = new Date();
17
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
18
+ if ((new Date(guess)) < date) {
19
+ date.setDate(date.getDate() + 1);
20
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
21
+ }
22
+ return {
23
+ eta: guess,
24
+ remark: {
25
+ zh: rmk_tc,
26
+ en: rmk_en,
27
+ },
28
+ dest: {
29
+ zh: route_tc.split(" - ")[1],
30
+ en: route_en.split(" - ")[1],
31
+ },
32
+ co: "sunferry",
33
+ };
34
+ });
35
+ });
36
+ }
37
+ exports.default = fetchEtas;
38
+ //# sourceMappingURL=sunferry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunferry.js","sourceRoot":"","sources":["../src/sunferry.ts"],"names":[],"mappings":";;AACA,mCAAmC;AAOnC,SAAwB,SAAS,CAAC,EAChC,KAAK,EAAE,GAAG,EACK;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,0CAA0C,KAAK,EAAE,EACjD;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,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAM,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;YACjG,IAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAG;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBAChC,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;aAC9F;YACD,OAAO;gBACL,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE;oBACN,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,MAAM;iBACX;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBACD,EAAE,EAAE,UAAU;aACf,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AApCD,4BAoCC"}
package/dist/type.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "gmbHki" | "gmbKln" | "gmbNt";
1
+ export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "sunferry" | "hkkf" | "fortuneferry";
2
2
  export type Terminal = {
3
3
  en: string;
4
4
  zh: string;
@@ -69,4 +69,6 @@ export type Eta = {
69
69
  en: string;
70
70
  };
71
71
  co: Company;
72
+ lat?: number;
73
+ lng: number;
72
74
  };
@@ -0,0 +1,11 @@
1
+ import type { Eta, StopList } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ stops: {
5
+ fortuneferry: string[];
6
+ };
7
+ seq: number;
8
+ stopList: StopList;
9
+ }
10
+ export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }: fetchEtasProps): Promise<Eta[]>;
11
+ export {};
@@ -0,0 +1,67 @@
1
+ import { isSafari } from "./utils";
2
+ const getCode = (zhName) => {
3
+ if (zhName.includes("中環")) {
4
+ return "CL";
5
+ }
6
+ else if (zhName.includes("紅磡")) {
7
+ return "HH";
8
+ }
9
+ else if (zhName.includes("北角")) {
10
+ return "NP";
11
+ }
12
+ else if (zhName.includes("觀塘")) {
13
+ return "KT";
14
+ }
15
+ else if (zhName.includes("啟德")) {
16
+ return "KT";
17
+ }
18
+ else if (zhName.includes("屯門")) {
19
+ return "TM";
20
+ }
21
+ else if (zhName.includes("東涌")) {
22
+ return "TC";
23
+ }
24
+ else if (zhName.includes("沙螺灣")) {
25
+ return "SLW";
26
+ }
27
+ else if (zhName.includes("大澳")) {
28
+ return "TO";
29
+ }
30
+ return "CL";
31
+ };
32
+ export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }) {
33
+ if (stops.length === seq - 1)
34
+ return Promise.resolve([]);
35
+ const u = getCode(stopList[stops[seq]].name.zh);
36
+ const v = getCode(stopList[stops[seq + 1]].name.zh);
37
+ return fetch(`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`, {
38
+ cache: isSafari ? "default" : "no-store",
39
+ })
40
+ .then((response) => response.json())
41
+ .then(({ data }) => {
42
+ if (!data)
43
+ return [];
44
+ return data
45
+ .map(({ depart_time, rmk_tc, rmk_en }) => {
46
+ const date = new Date();
47
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
48
+ if ((new Date(guess)) < date) {
49
+ date.setDate(date.getDate() + 1);
50
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
51
+ }
52
+ return {
53
+ eta: guess,
54
+ remark: {
55
+ zh: rmk_tc,
56
+ en: rmk_en,
57
+ },
58
+ dest: {
59
+ zh: "",
60
+ en: "",
61
+ },
62
+ co: "fortuneferry",
63
+ };
64
+ });
65
+ });
66
+ }
67
+ //# sourceMappingURL=fortuneferry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":"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"}
package/esm/hkkf.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { Eta, RouteListEntry } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ bound: RouteListEntry["bound"]["hkkf"];
5
+ seq: number;
6
+ }
7
+ export default function fetchEtas({ route, bound, seq }: fetchEtasProps): Promise<Eta[]>;
8
+ export {};
package/esm/hkkf.js ADDED
@@ -0,0 +1,29 @@
1
+ import { isSafari } from "./utils";
2
+ export default function fetchEtas({ route, bound, seq }) {
3
+ if (seq === 0)
4
+ return Promise.resolve([]);
5
+ return fetch(`https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`, {
6
+ cache: isSafari ? "default" : "no-store",
7
+ })
8
+ .then((response) => response.json())
9
+ .then(({ data }) => {
10
+ if (!data)
11
+ return [];
12
+ return data
13
+ .map(({ ETA }) => {
14
+ return {
15
+ eta: ETA,
16
+ remark: {
17
+ zh: "",
18
+ en: "",
19
+ },
20
+ dest: {
21
+ zh: "",
22
+ en: "",
23
+ },
24
+ co: "hkkf",
25
+ };
26
+ });
27
+ });
28
+ }
29
+ //# sourceMappingURL=hkkf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hkkf.js","sourceRoot":"","sources":["../src/hkkf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,KAAK,EAAE,KAAK,EAAE,GAAG,EACF;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,wCAAwC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAClG;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,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,GAAG,EAAM,EAAE,EAAE;YAClB,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE;oBACN,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,MAAM;aACX,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
package/esm/index.js CHANGED
@@ -5,6 +5,9 @@ import lrtfeeder from "./lrtfeeder";
5
5
  import gmb from "./gmb";
6
6
  import lightrail from "./lightRail";
7
7
  import mtr from "./mtr";
8
+ import sunferry from "./sunferry";
9
+ import fortuneferry from "./fortuneferry";
10
+ import hkkf from "./hkkf";
8
11
  export async function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtfsId, stopList, language, }) {
9
12
  try {
10
13
  let _etas = [];
@@ -43,29 +46,16 @@ export async function fetchEtas({ route, stops, bound, dest, seq, serviceType, c
43
46
  bound: bound.mtr,
44
47
  }));
45
48
  }
46
- else if (company_id === "gmbHki" && stops.gmbHki) {
47
- _etas = _etas.concat(await gmb({
48
- stopId: stops.gmbHki[seq],
49
- gtfsId,
50
- seq,
51
- bound: bound.gmbHki,
49
+ else if (company_id === "fortuneferry" && stops.fortuneferry) {
50
+ _etas = _etas.concat(await fortuneferry({
51
+ route, stops, seq, stopList
52
52
  }));
53
53
  }
54
- else if (company_id === "gmbKln" && stops.gmbKln) {
55
- _etas = _etas.concat(await gmb({
56
- stopId: stops.gmbKln[seq],
57
- gtfsId,
58
- seq,
59
- bound: bound.gmbKln,
60
- }));
54
+ else if (company_id === "sunferry" && stops.sunferry) {
55
+ _etas = _etas.concat(await sunferry({ route, seq }));
61
56
  }
62
- else if (company_id === "gmbNt" && stops.gmbNt) {
63
- _etas = _etas.concat(await gmb({
64
- stopId: stops.gmbNt[seq],
65
- gtfsId,
66
- seq,
67
- bound: bound.gmbNt,
68
- }));
57
+ else if (company_id === "hkkf" && stops.hkkf) {
58
+ _etas = _etas.concat(await hkkf({ route, bound: bound.hkkf, seq }));
69
59
  }
70
60
  }
71
61
  return _etas.sort((a, b) => {
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Eta } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ seq: number;
5
+ }
6
+ export default function fetchEtas({ route, seq }: fetchEtasProps): Promise<Eta[]>;
7
+ export {};
@@ -0,0 +1,35 @@
1
+ import { isSafari } from "./utils";
2
+ export default function fetchEtas({ route, seq }) {
3
+ if (seq === 1)
4
+ return Promise.resolve([]);
5
+ return fetch(`https://www.sunferry.com.hk/eta/?route=${route}`, {
6
+ cache: isSafari ? "default" : "no-store",
7
+ })
8
+ .then((response) => response.json())
9
+ .then(({ data }) => {
10
+ if (!data)
11
+ return [];
12
+ return data
13
+ .map(({ depart_time, rmk_en, rmk_tc, route_tc, route_en }) => {
14
+ const date = new Date();
15
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
16
+ if ((new Date(guess)) < date) {
17
+ date.setDate(date.getDate() + 1);
18
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
19
+ }
20
+ return {
21
+ eta: guess,
22
+ remark: {
23
+ zh: rmk_tc,
24
+ en: rmk_en,
25
+ },
26
+ dest: {
27
+ zh: route_tc.split(" - ")[1],
28
+ en: route_en.split(" - ")[1],
29
+ },
30
+ co: "sunferry",
31
+ };
32
+ });
33
+ });
34
+ }
35
+ //# sourceMappingURL=sunferry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunferry.js","sourceRoot":"","sources":["../src/sunferry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,KAAK,EAAE,GAAG,EACK;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,0CAA0C,KAAK,EAAE,EACjD;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,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAM,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;YACjG,IAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAG;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBAChC,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;aAC9F;YACD,OAAO;gBACL,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE;oBACN,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,MAAM;iBACX;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBACD,EAAE,EAAE,UAAU;aACf,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
package/esm/type.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "gmbHki" | "gmbKln" | "gmbNt";
1
+ export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "sunferry" | "hkkf" | "fortuneferry";
2
2
  export type Terminal = {
3
3
  en: string;
4
4
  zh: string;
@@ -69,4 +69,6 @@ export type Eta = {
69
69
  en: string;
70
70
  };
71
71
  co: Company;
72
+ lat?: number;
73
+ lng: number;
72
74
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hk-bus-eta",
3
- "version": "3.2.1",
3
+ "version": "3.3.0",
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",
@@ -0,0 +1,75 @@
1
+ import type { Eta, RouteListEntry, StopList } from "./type";
2
+ import { isSafari } from "./utils";
3
+
4
+ interface fetchEtasProps {
5
+ route: string;
6
+ stops: {
7
+ fortuneferry: string[];
8
+ }
9
+ seq: number;
10
+ stopList: StopList;
11
+ }
12
+
13
+ const getCode = (zhName: string) => {
14
+ if ( zhName.includes("中環") ) {
15
+ return "CL"
16
+ } else if ( zhName.includes("紅磡") ) {
17
+ return "HH"
18
+ } else if ( zhName.includes("北角") ) {
19
+ return "NP"
20
+ } else if ( zhName.includes("觀塘") ) {
21
+ return "KT"
22
+ } else if ( zhName.includes("啟德") ) {
23
+ return "KT"
24
+ } else if ( zhName.includes("屯門") ) {
25
+ return "TM"
26
+ } else if ( zhName.includes("東涌") ) {
27
+ return "TC"
28
+ } else if ( zhName.includes("沙螺灣") ) {
29
+ return "SLW"
30
+ } else if ( zhName.includes("大澳") ) {
31
+ return "TO"
32
+ }
33
+ return "CL";
34
+ }
35
+
36
+ export default function fetchEtas({
37
+ route, stops: { fortuneferry: stops }, seq, stopList
38
+ }: fetchEtasProps): Promise<Eta[]> {
39
+ if ( stops.length === seq - 1 ) return Promise.resolve([]);
40
+ const u = getCode(stopList[stops[seq]].name.zh)
41
+ const v = getCode(stopList[stops[seq+1]].name.zh)
42
+
43
+ return fetch(
44
+ `https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`,
45
+ {
46
+ cache: isSafari ? "default" : "no-store",
47
+ },
48
+ )
49
+ .then((response) => response.json())
50
+ .then(({ data }) => {
51
+ if (!data) return [];
52
+
53
+ return data
54
+ .map(({ depart_time, rmk_tc, rmk_en }: any) => {
55
+ const date = new Date();
56
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
57
+ if ( (new Date(guess)) < date ) {
58
+ date.setDate(date.getDate() + 1)
59
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
60
+ }
61
+ return {
62
+ eta: guess,
63
+ remark: {
64
+ zh: rmk_tc,
65
+ en: rmk_en,
66
+ },
67
+ dest: {
68
+ zh: "",
69
+ en: "",
70
+ },
71
+ co: "fortuneferry",
72
+ }
73
+ });
74
+ });
75
+ }
package/src/hkkf.ts ADDED
@@ -0,0 +1,40 @@
1
+ import type { Eta, RouteListEntry } from "./type";
2
+ import { isSafari } from "./utils";
3
+
4
+ interface fetchEtasProps {
5
+ route: string;
6
+ bound: RouteListEntry["bound"]["hkkf"];
7
+ seq: number;
8
+ }
9
+
10
+ export default function fetchEtas({
11
+ route, bound, seq
12
+ }: fetchEtasProps): Promise<Eta[]> {
13
+ if ( seq === 0 ) return Promise.resolve([])
14
+ return fetch(
15
+ `https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`,
16
+ {
17
+ cache: isSafari ? "default" : "no-store",
18
+ },
19
+ )
20
+ .then((response) => response.json())
21
+ .then(({ data }) => {
22
+ if (!data) return [];
23
+
24
+ return data
25
+ .map(({ETA}: any) => {
26
+ return {
27
+ eta: ETA,
28
+ remark: {
29
+ zh: "",
30
+ en: "",
31
+ },
32
+ dest: {
33
+ zh: "",
34
+ en: "",
35
+ },
36
+ co: "hkkf",
37
+ }
38
+ });
39
+ });
40
+ }
package/src/index.ts CHANGED
@@ -5,6 +5,9 @@ import lrtfeeder from "./lrtfeeder";
5
5
  import gmb from "./gmb";
6
6
  import lightrail from "./lightRail";
7
7
  import mtr from "./mtr";
8
+ import sunferry from "./sunferry"
9
+ import fortuneferry from "./fortuneferry";
10
+ import hkkf from "./hkkf";
8
11
  import { RouteListEntry, EtaDb, Eta, StopList } from "./type";
9
12
 
10
13
  interface fetchEtasProps extends RouteListEntry {
@@ -68,33 +71,16 @@ export async function fetchEtas({
68
71
  bound: bound.mtr,
69
72
  }),
70
73
  );
71
- } else if (company_id === "gmbHki" && stops.gmbHki) {
74
+ } else if (company_id === "fortuneferry" && stops.fortuneferry) {
72
75
  _etas = _etas.concat(
73
- await gmb({
74
- stopId: stops.gmbHki[seq],
75
- gtfsId,
76
- seq,
77
- bound: bound.gmbHki,
78
- }),
79
- );
80
- } else if (company_id === "gmbKln" && stops.gmbKln) {
81
- _etas = _etas.concat(
82
- await gmb({
83
- stopId: stops.gmbKln[seq],
84
- gtfsId,
85
- seq,
86
- bound: bound.gmbKln,
87
- }),
88
- );
89
- } else if (company_id === "gmbNt" && stops.gmbNt) {
90
- _etas = _etas.concat(
91
- await gmb({
92
- stopId: stops.gmbNt[seq],
93
- gtfsId,
94
- seq,
95
- bound: bound.gmbNt,
96
- }),
97
- );
76
+ await fortuneferry({
77
+ route, stops, seq, stopList
78
+ })
79
+ )
80
+ } else if (company_id === "sunferry" && stops.sunferry) {
81
+ _etas = _etas.concat(await sunferry({route, seq}))
82
+ } else if (company_id === "hkkf" && stops.hkkf) {
83
+ _etas = _etas.concat(await hkkf({route, bound: bound.hkkf, seq}))
98
84
  }
99
85
  }
100
86
 
@@ -0,0 +1,45 @@
1
+ import type { Eta } from "./type";
2
+ import { isSafari } from "./utils";
3
+
4
+ interface fetchEtasProps {
5
+ route: string;
6
+ seq: number;
7
+ }
8
+
9
+ export default function fetchEtas({
10
+ route, seq
11
+ }: fetchEtasProps): Promise<Eta[]> {
12
+ if ( seq === 1 ) return Promise.resolve([])
13
+ return fetch(
14
+ `https://www.sunferry.com.hk/eta/?route=${route}`,
15
+ {
16
+ cache: isSafari ? "default" : "no-store",
17
+ },
18
+ )
19
+ .then((response) => response.json())
20
+ .then(({ data }) => {
21
+ if (!data) return [];
22
+
23
+ return data
24
+ .map(({depart_time, rmk_en, rmk_tc, route_tc, route_en}: any) => {
25
+ const date = new Date();
26
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
27
+ if ( (new Date(guess)) < date ) {
28
+ date.setDate(date.getDate() + 1)
29
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
30
+ }
31
+ return {
32
+ eta: guess,
33
+ remark: {
34
+ zh: rmk_tc,
35
+ en: rmk_en,
36
+ },
37
+ dest: {
38
+ zh: route_tc.split(" - ")[1],
39
+ en: route_en.split(" - ")[1],
40
+ },
41
+ co: "sunferry",
42
+ }
43
+ });
44
+ });
45
+ }
package/src/type.ts CHANGED
@@ -6,9 +6,9 @@ export type Company =
6
6
  | "gmb"
7
7
  | "lightRail"
8
8
  | "mtr"
9
- | "gmbHki"
10
- | "gmbKln"
11
- | "gmbNt";
9
+ | "sunferry"
10
+ | "hkkf"
11
+ | "fortuneferry";
12
12
 
13
13
  export type Terminal = {
14
14
  en: string;
@@ -85,4 +85,6 @@ export type Eta = {
85
85
  en: string;
86
86
  };
87
87
  co: Company;
88
+ lat?: number;
89
+ lng: number;
88
90
  };