hk-bus-eta 3.3.2 → 3.3.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/fortuneferry.d.ts +5 -3
- package/dist/fortuneferry.js +51 -29
- package/dist/fortuneferry.js.map +1 -1
- package/dist/hkkf.d.ts +5 -4
- package/dist/hkkf.js +44 -23
- package/dist/hkkf.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/sunferry.d.ts +5 -2
- package/dist/sunferry.js +20 -1
- package/dist/sunferry.js.map +1 -1
- package/dist/type.d.ts +8 -8
- package/dist/utils.d.ts +7 -0
- package/dist/utils.js +47 -1
- package/dist/utils.js.map +1 -1
- package/esm/fortuneferry.d.ts +5 -3
- package/esm/fortuneferry.js +51 -29
- package/esm/fortuneferry.js.map +1 -1
- package/esm/hkkf.d.ts +5 -4
- package/esm/hkkf.js +44 -23
- package/esm/hkkf.js.map +1 -1
- package/esm/index.d.ts +3 -1
- package/esm/index.js +4 -4
- package/esm/index.js.map +1 -1
- package/esm/sunferry.d.ts +5 -2
- package/esm/sunferry.js +21 -2
- package/esm/sunferry.js.map +1 -1
- package/esm/type.d.ts +8 -8
- package/esm/utils.d.ts +7 -0
- package/esm/utils.js +45 -0
- package/esm/utils.js.map +1 -1
- package/package.json +2 -3
- package/src/fortuneferry.ts +31 -7
- package/src/hkkf.ts +27 -6
- package/src/index.ts +8 -3
- package/src/sunferry.ts +27 -4
- package/src/type.ts +2 -2
- package/src/utils.ts +65 -0
package/dist/fortuneferry.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import type { Eta, StopList } from "./type";
|
|
1
|
+
import type { Eta, EtaDb, RouteListEntry, StopList } from "./type";
|
|
2
2
|
interface fetchEtasProps {
|
|
3
|
-
route: string;
|
|
4
3
|
stops: {
|
|
5
4
|
fortuneferry: string[];
|
|
6
5
|
};
|
|
7
6
|
seq: number;
|
|
8
7
|
stopList: StopList;
|
|
8
|
+
freq: RouteListEntry["freq"];
|
|
9
|
+
holidays: EtaDb["holidays"];
|
|
10
|
+
serviceDayMap: EtaDb["serviceDayMap"];
|
|
9
11
|
}
|
|
10
|
-
export default function fetchEtas({
|
|
12
|
+
export default function fetchEtas({ stops: { fortuneferry }, seq, holidays, freq, serviceDayMap }: fetchEtasProps): Promise<Eta[]>;
|
|
11
13
|
export {};
|
package/dist/fortuneferry.js
CHANGED
|
@@ -31,40 +31,62 @@ const getCode = (zhName) => {
|
|
|
31
31
|
}
|
|
32
32
|
return "CL";
|
|
33
33
|
};
|
|
34
|
-
function fetchEtas({
|
|
35
|
-
if (
|
|
34
|
+
function fetchEtas({ stops: { fortuneferry: stops }, seq, holidays, freq, serviceDayMap }) {
|
|
35
|
+
if (seq >= 1)
|
|
36
36
|
return Promise.resolve([]);
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
const now = new Date();
|
|
38
|
+
return Promise.resolve((0, utils_1.getUpcomingFerry)({ holidays, serviceDayMap, freq, date: new Date() })
|
|
39
|
+
.filter(v => (new Date(v)).getTime() - now.getTime() < 180 * 60 * 1000)
|
|
40
|
+
.map(eta => ({
|
|
41
|
+
eta: eta,
|
|
42
|
+
remark: {
|
|
43
|
+
zh: "預定班次",
|
|
44
|
+
en: "Scheduled",
|
|
45
|
+
},
|
|
46
|
+
dest: {
|
|
47
|
+
zh: "",
|
|
48
|
+
en: "",
|
|
49
|
+
},
|
|
50
|
+
co: "fortuneferry",
|
|
51
|
+
})));
|
|
52
|
+
/*
|
|
53
|
+
* the official API is broken most of the time, keep it for reference
|
|
54
|
+
|
|
55
|
+
const v = getCode(stopList[stops[seq+1]].name.zh)
|
|
56
|
+
const u = getCode(stopList[stops[seq]].name.zh)
|
|
57
|
+
return fetch(
|
|
58
|
+
`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`,
|
|
59
|
+
{
|
|
60
|
+
cache: isSafari ? "default" : "no-store",
|
|
61
|
+
},
|
|
62
|
+
)
|
|
63
|
+
.then((response) => response.json())
|
|
64
|
+
.then(({ data }) => {
|
|
65
|
+
if (!data) return [];
|
|
66
|
+
|
|
46
67
|
return data
|
|
47
|
-
|
|
68
|
+
.map(({ depart_time, rmk_tc, rmk_en }: any) => {
|
|
48
69
|
const date = new Date();
|
|
49
|
-
let guess = `${date.getFullYear()}-${('0'
|
|
50
|
-
if ((new Date(guess)) < date) {
|
|
51
|
-
|
|
52
|
-
|
|
70
|
+
let guess = `${date.getFullYear()}-${('0'+(date.getMonth()+1)).slice(-2)}-${('0'+date.getDate()).slice(-2)}T${depart_time}:00+08:00`
|
|
71
|
+
if ( (new Date(guess)) < date ) {
|
|
72
|
+
date.setDate(date.getDate() + 1)
|
|
73
|
+
guess = `${date.getFullYear()}-${('0'+(date.getMonth()+1)).slice(-2)}-${('0'+date.getDate()).slice(-2)}T${depart_time}:00+08:00`
|
|
53
74
|
}
|
|
54
75
|
return {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
76
|
+
eta: guess,
|
|
77
|
+
remark: {
|
|
78
|
+
zh: rmk_tc,
|
|
79
|
+
en: rmk_en,
|
|
80
|
+
},
|
|
81
|
+
dest: {
|
|
82
|
+
zh: "",
|
|
83
|
+
en: "",
|
|
84
|
+
},
|
|
85
|
+
co: "fortuneferry",
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
*/
|
|
68
90
|
}
|
|
69
91
|
exports.default = fetchEtas;
|
|
70
92
|
//# sourceMappingURL=fortuneferry.js.map
|
package/dist/fortuneferry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":";;AACA,
|
|
1
|
+
{"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":";;AACA,mCAAqD;AAarD,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;IACjC,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAC3B,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,KAAK,CAAA;KACb;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAG;QACnC,OAAO,KAAK,CAAA;KACb;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAA;AAED,SAAwB,SAAS,CAAC,EAChC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,GAAG,EACnC,QAAQ,EAAE,IAAI,EAAE,aAAa,EACd;IACf,IAAK,GAAG,IAAI,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,OAAO,OAAO,CAAC,OAAO,CACpB,IAAA,wBAAgB,EAAC,EAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAC,CAAC;SAChE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAE;SACvE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACX,GAAG,EAAE,GAAG;QACN,MAAM,EAAE;YACN,EAAE,EAAE,MAAM;YACV,EAAE,EAAE,WAAW;SAChB;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;SACP;QACD,EAAE,EAAE,cAAc;KACrB,CAAC,CAAC,CACN,CAAA;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqCE;AACJ,CAAC;AA7DD,4BA6DC"}
|
package/dist/hkkf.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { Eta, RouteListEntry } from "./type";
|
|
1
|
+
import type { Eta, EtaDb, RouteListEntry } from "./type";
|
|
2
2
|
interface fetchEtasProps {
|
|
3
|
-
|
|
4
|
-
bound: RouteListEntry["bound"]["hkkf"];
|
|
3
|
+
freq: RouteListEntry["freq"];
|
|
5
4
|
seq: number;
|
|
5
|
+
holidays: EtaDb["holidays"];
|
|
6
|
+
serviceDayMap: EtaDb["serviceDayMap"];
|
|
6
7
|
}
|
|
7
|
-
export default function fetchEtas({
|
|
8
|
+
export default function fetchEtas({ freq, seq, holidays, serviceDayMap, }: fetchEtasProps): Promise<Eta[]>;
|
|
8
9
|
export {};
|
package/dist/hkkf.js
CHANGED
|
@@ -1,32 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("./utils");
|
|
4
|
-
function fetchEtas({
|
|
5
|
-
if (seq
|
|
4
|
+
function fetchEtas({ freq, seq, holidays, serviceDayMap, }) {
|
|
5
|
+
if (seq >= 1)
|
|
6
6
|
return Promise.resolve([]);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
const now = new Date();
|
|
8
|
+
return Promise.resolve((0, utils_1.getUpcomingFerry)({ holidays, serviceDayMap, freq, date: new Date() })
|
|
9
|
+
.filter(v => (new Date(v)).getTime() - now.getTime() < 180 * 60 * 1000)
|
|
10
|
+
.map(eta => ({
|
|
11
|
+
eta: eta,
|
|
12
|
+
remark: {
|
|
13
|
+
zh: "預定班次",
|
|
14
|
+
en: "Scheduled",
|
|
15
|
+
},
|
|
16
|
+
dest: {
|
|
17
|
+
zh: "",
|
|
18
|
+
en: "",
|
|
19
|
+
},
|
|
20
|
+
co: "fortuneferry",
|
|
21
|
+
})));
|
|
22
|
+
/*
|
|
23
|
+
* the official API is broken most of the time, keep it for reference
|
|
24
|
+
return fetch(
|
|
25
|
+
`https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`,
|
|
26
|
+
{
|
|
27
|
+
cache: isSafari ? "default" : "no-store",
|
|
28
|
+
},
|
|
29
|
+
)
|
|
30
|
+
.then((response) => response.json())
|
|
31
|
+
.then(({ data }) => {
|
|
32
|
+
if (!data) return [];
|
|
33
|
+
|
|
14
34
|
return data
|
|
15
|
-
|
|
35
|
+
.map(({ETA}: any) => {
|
|
16
36
|
return {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
37
|
+
eta: ETA,
|
|
38
|
+
remark: {
|
|
39
|
+
zh: "",
|
|
40
|
+
en: "",
|
|
41
|
+
},
|
|
42
|
+
dest: {
|
|
43
|
+
zh: "",
|
|
44
|
+
en: "",
|
|
45
|
+
},
|
|
46
|
+
co: "hkkf",
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
*/
|
|
30
51
|
}
|
|
31
52
|
exports.default = fetchEtas;
|
|
32
53
|
//# sourceMappingURL=hkkf.js.map
|
package/dist/hkkf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hkkf.js","sourceRoot":"","sources":["../src/hkkf.ts"],"names":[],"mappings":";;AACA,
|
|
1
|
+
{"version":3,"file":"hkkf.js","sourceRoot":"","sources":["../src/hkkf.ts"],"names":[],"mappings":";;AACA,mCAAqD;AASrD,SAAwB,SAAS,CAAC,EAChC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,GACnB;IACf,IAAK,GAAG,IAAI,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,OAAO,OAAO,CAAC,OAAO,CACpB,IAAA,wBAAgB,EAAC,EAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAC,CAAC;SAChE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAE;SACvE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACX,GAAG,EAAE,GAAG;QACN,MAAM,EAAE;YACN,EAAE,EAAE,MAAM;YACV,EAAE,EAAE,WAAW;SAChB;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;SACP;QACD,EAAE,EAAE,cAAc;KACrB,CAAC,CAAC,CACN,CAAA;IACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BI;AACN,CAAC;AAlDD,4BAkDC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { RouteListEntry, EtaDb, Eta, StopList } from "./type";
|
|
2
2
|
interface fetchEtasProps extends RouteListEntry {
|
|
3
3
|
stopList: StopList;
|
|
4
|
+
holidays: EtaDb["holidays"];
|
|
5
|
+
serviceDayMap: EtaDb["serviceDayMap"];
|
|
4
6
|
language: "zh" | "en";
|
|
5
7
|
seq: number;
|
|
6
8
|
}
|
|
7
|
-
export declare function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtfsId, stopList, language, }: fetchEtasProps): Promise<Eta[]>;
|
|
9
|
+
export declare function fetchEtas({ route, stops, bound, dest, freq, seq, serviceType, co, nlbId, gtfsId, stopList, language, holidays, serviceDayMap, }: fetchEtasProps): Promise<Eta[]>;
|
|
8
10
|
export declare function fetchEtaDb(): Promise<EtaDb>;
|
|
9
11
|
export declare function fetchEtaDbMd5(): Promise<string>;
|
|
10
12
|
export type * from "./type";
|
package/dist/index.js
CHANGED
|
@@ -23,7 +23,7 @@ const mtr_1 = __importDefault(require("./mtr"));
|
|
|
23
23
|
const sunferry_1 = __importDefault(require("./sunferry"));
|
|
24
24
|
const fortuneferry_1 = __importDefault(require("./fortuneferry"));
|
|
25
25
|
const hkkf_1 = __importDefault(require("./hkkf"));
|
|
26
|
-
function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtfsId, stopList, language, }) {
|
|
26
|
+
function fetchEtas({ route, stops, bound, dest, freq, seq, serviceType, co, nlbId, gtfsId, stopList, language, holidays, serviceDayMap, }) {
|
|
27
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
28
|
try {
|
|
29
29
|
let _etas = [];
|
|
@@ -64,14 +64,14 @@ function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtf
|
|
|
64
64
|
}
|
|
65
65
|
else if (company_id === "fortuneferry" && stops.fortuneferry) {
|
|
66
66
|
_etas = _etas.concat(yield (0, fortuneferry_1.default)({
|
|
67
|
-
|
|
67
|
+
stops, seq, stopList, freq, serviceDayMap, holidays,
|
|
68
68
|
}));
|
|
69
69
|
}
|
|
70
70
|
else if (company_id === "sunferry" && stops.sunferry) {
|
|
71
|
-
_etas = _etas.concat(yield (0, sunferry_1.default)({ route, seq }));
|
|
71
|
+
_etas = _etas.concat(yield (0, sunferry_1.default)({ route, seq, holidays, serviceDayMap, freq }));
|
|
72
72
|
}
|
|
73
73
|
else if (company_id === "hkkf" && stops.hkkf) {
|
|
74
|
-
_etas = _etas.concat(yield (0, hkkf_1.default)({
|
|
74
|
+
_etas = _etas.concat(yield (0, hkkf_1.default)({ freq, seq, holidays, serviceDayMap }));
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
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;AACxB,0DAAiC;AACjC,kEAA0C;AAC1C,kDAA0B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sunferry.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import type { Eta } from "./type";
|
|
1
|
+
import type { Eta, EtaDb, RouteListEntry } from "./type";
|
|
2
2
|
interface fetchEtasProps {
|
|
3
|
+
freq: RouteListEntry["freq"];
|
|
3
4
|
route: string;
|
|
4
5
|
seq: number;
|
|
6
|
+
holidays: EtaDb["holidays"];
|
|
7
|
+
serviceDayMap: EtaDb["serviceDayMap"];
|
|
5
8
|
}
|
|
6
|
-
export default function fetchEtas({ route, seq }: fetchEtasProps): Promise<Eta[]>;
|
|
9
|
+
export default function fetchEtas({ route, seq, freq, holidays, serviceDayMap, }: fetchEtasProps): Promise<Eta[]>;
|
|
7
10
|
export {};
|
package/dist/sunferry.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("./utils");
|
|
4
|
-
function fetchEtas({ route, seq }) {
|
|
4
|
+
function fetchEtas({ route, seq, freq, holidays, serviceDayMap, }) {
|
|
5
5
|
if (seq === 1)
|
|
6
6
|
return Promise.resolve([]);
|
|
7
7
|
return fetch(`https://www.sunferry.com.hk/eta/?route=${route}`, {
|
|
@@ -9,6 +9,7 @@ function fetchEtas({ route, seq }) {
|
|
|
9
9
|
})
|
|
10
10
|
.then((response) => response.json())
|
|
11
11
|
.then(({ data }) => {
|
|
12
|
+
throw new Error("");
|
|
12
13
|
if (!data)
|
|
13
14
|
return [];
|
|
14
15
|
return data
|
|
@@ -32,6 +33,24 @@ function fetchEtas({ route, seq }) {
|
|
|
32
33
|
co: "sunferry",
|
|
33
34
|
};
|
|
34
35
|
});
|
|
36
|
+
})
|
|
37
|
+
.catch(() => {
|
|
38
|
+
// the API gives CORS error, the below handling is for browser
|
|
39
|
+
const now = new Date();
|
|
40
|
+
return (0, utils_1.getUpcomingFerry)({ holidays, serviceDayMap, freq, date: new Date() })
|
|
41
|
+
.filter(v => (new Date(v)).getTime() - now.getTime() < 180 * 60 * 1000)
|
|
42
|
+
.map(eta => ({
|
|
43
|
+
eta: eta,
|
|
44
|
+
remark: {
|
|
45
|
+
zh: "預定班次",
|
|
46
|
+
en: "Scheduled",
|
|
47
|
+
},
|
|
48
|
+
dest: {
|
|
49
|
+
zh: "",
|
|
50
|
+
en: "",
|
|
51
|
+
},
|
|
52
|
+
co: "sunferry",
|
|
53
|
+
}));
|
|
35
54
|
});
|
|
36
55
|
}
|
|
37
56
|
exports.default = fetchEtas;
|
package/dist/sunferry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sunferry.js","sourceRoot":"","sources":["../src/sunferry.ts"],"names":[],"mappings":";;AACA,
|
|
1
|
+
{"version":3,"file":"sunferry.js","sourceRoot":"","sources":["../src/sunferry.ts"],"names":[],"mappings":"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"}
|
package/dist/type.d.ts
CHANGED
|
@@ -49,13 +49,13 @@ export type EtaDb = {
|
|
|
49
49
|
stopList: StopList;
|
|
50
50
|
stopMap: StopMap;
|
|
51
51
|
serviceDayMap: Record<string, [
|
|
52
|
-
0 | 1,
|
|
53
|
-
0 | 1,
|
|
54
|
-
0 | 1,
|
|
55
|
-
0 | 1,
|
|
56
|
-
0 | 1,
|
|
57
|
-
0 | 1,
|
|
58
|
-
0 | 1
|
|
52
|
+
"0" | "1",
|
|
53
|
+
"0" | "1",
|
|
54
|
+
"0" | "1",
|
|
55
|
+
"0" | "1",
|
|
56
|
+
"0" | "1",
|
|
57
|
+
"0" | "1",
|
|
58
|
+
"0" | "1"
|
|
59
59
|
]>;
|
|
60
60
|
};
|
|
61
61
|
export type Eta = {
|
|
@@ -70,5 +70,5 @@ export type Eta = {
|
|
|
70
70
|
};
|
|
71
71
|
co: Company;
|
|
72
72
|
lat?: number;
|
|
73
|
-
lng
|
|
73
|
+
lng?: number;
|
|
74
74
|
};
|
package/dist/utils.d.ts
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
+
import { EtaDb, RouteListEntry } from "./type";
|
|
1
2
|
export declare const isSafari: boolean;
|
|
3
|
+
export declare const getUpcomingFerry: ({ holidays, serviceDayMap, date, freq, }: {
|
|
4
|
+
holidays: string[];
|
|
5
|
+
serviceDayMap: EtaDb["serviceDayMap"];
|
|
6
|
+
freq: RouteListEntry["freq"];
|
|
7
|
+
date: Date;
|
|
8
|
+
}) => string[];
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isSafari = void 0;
|
|
3
|
+
exports.getUpcomingFerry = exports.isSafari = void 0;
|
|
4
4
|
exports.isSafari = (() => {
|
|
5
5
|
try {
|
|
6
6
|
return Boolean(navigator &&
|
|
@@ -13,4 +13,50 @@ exports.isSafari = (() => {
|
|
|
13
13
|
return false;
|
|
14
14
|
}
|
|
15
15
|
})();
|
|
16
|
+
// fancy handling for timezone, not recommend to use it unless you know what's going on
|
|
17
|
+
// i.e, calling isHoliday(holidays, new Date()) is checking if it was being a holiday at the moment of 8 hours ago
|
|
18
|
+
const isHoliday = (holidays, utcDate) => {
|
|
19
|
+
if (utcDate.getDay() === 0)
|
|
20
|
+
return true;
|
|
21
|
+
return holidays.includes(String(utcDate.getUTCFullYear()) +
|
|
22
|
+
String(utcDate.getUTCMonth() + 1).padStart(2, "0") +
|
|
23
|
+
String(utcDate.getUTCDate()).padStart(2, "0"));
|
|
24
|
+
};
|
|
25
|
+
const getUpcomingFerry = ({ holidays, serviceDayMap, date, freq, }) => {
|
|
26
|
+
if (freq === null) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const getEta = (serviceFreq, date) => (Object.keys(serviceFreq).sort((a, b) => a < b ? -1 : 1).reduce((acc, tp) => {
|
|
30
|
+
const ferryTime = new Date(date.getTime());
|
|
31
|
+
ferryTime.setUTCHours(parseInt(tp.slice(0, 2), 10));
|
|
32
|
+
ferryTime.setUTCMinutes(parseInt(tp.slice(2), 10));
|
|
33
|
+
if (ferryTime >= date) {
|
|
34
|
+
acc.push(String(ferryTime.getUTCFullYear()) + "-" +
|
|
35
|
+
String(ferryTime.getUTCMonth() + 1).padStart(2, "0") + "-" +
|
|
36
|
+
String(ferryTime.getUTCDate()).padStart(2, "0") + "T" +
|
|
37
|
+
String(ferryTime.getUTCHours()).padStart(2, "0") + ":" +
|
|
38
|
+
String(ferryTime.getUTCMinutes()).padStart(2, "0") + ":00" +
|
|
39
|
+
".000+08:00");
|
|
40
|
+
}
|
|
41
|
+
return acc;
|
|
42
|
+
}, []));
|
|
43
|
+
// obtain all ETAs sampling for next 24 hours, fancy handling for timezone
|
|
44
|
+
const ret = Array(24).fill(0).reduce((acc, _, idx) => {
|
|
45
|
+
const refDate = new Date(date.getTime());
|
|
46
|
+
refDate.setUTCHours(refDate.getUTCHours() + 8 + idx);
|
|
47
|
+
for (let serviceKey in freq) {
|
|
48
|
+
if (isHoliday(holidays, refDate)) {
|
|
49
|
+
if (serviceDayMap[serviceKey][0] === '1') {
|
|
50
|
+
return acc.concat(getEta(freq[serviceKey], refDate));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (serviceDayMap[serviceKey][refDate.getDay()]) {
|
|
54
|
+
return acc.concat(getEta(freq[serviceKey], refDate)).sort();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return acc;
|
|
58
|
+
}, []);
|
|
59
|
+
return [...new Set(ret)].sort((a, b) => a < b ? -1 : 1);
|
|
60
|
+
};
|
|
61
|
+
exports.getUpcomingFerry = getUpcomingFerry;
|
|
16
62
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/esm/fortuneferry.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import type { Eta, StopList } from "./type";
|
|
1
|
+
import type { Eta, EtaDb, RouteListEntry, StopList } from "./type";
|
|
2
2
|
interface fetchEtasProps {
|
|
3
|
-
route: string;
|
|
4
3
|
stops: {
|
|
5
4
|
fortuneferry: string[];
|
|
6
5
|
};
|
|
7
6
|
seq: number;
|
|
8
7
|
stopList: StopList;
|
|
8
|
+
freq: RouteListEntry["freq"];
|
|
9
|
+
holidays: EtaDb["holidays"];
|
|
10
|
+
serviceDayMap: EtaDb["serviceDayMap"];
|
|
9
11
|
}
|
|
10
|
-
export default function fetchEtas({
|
|
12
|
+
export default function fetchEtas({ stops: { fortuneferry }, seq, holidays, freq, serviceDayMap }: fetchEtasProps): Promise<Eta[]>;
|
|
11
13
|
export {};
|
package/esm/fortuneferry.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getUpcomingFerry } from "./utils";
|
|
2
2
|
const getCode = (zhName) => {
|
|
3
3
|
if (zhName.includes("中環")) {
|
|
4
4
|
return "CL";
|
|
@@ -29,39 +29,61 @@ const getCode = (zhName) => {
|
|
|
29
29
|
}
|
|
30
30
|
return "CL";
|
|
31
31
|
};
|
|
32
|
-
export default function fetchEtas({
|
|
33
|
-
if (
|
|
32
|
+
export default function fetchEtas({ stops: { fortuneferry: stops }, seq, holidays, freq, serviceDayMap }) {
|
|
33
|
+
if (seq >= 1)
|
|
34
34
|
return Promise.resolve([]);
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
const now = new Date();
|
|
36
|
+
return Promise.resolve(getUpcomingFerry({ holidays, serviceDayMap, freq, date: new Date() })
|
|
37
|
+
.filter(v => (new Date(v)).getTime() - now.getTime() < 180 * 60 * 1000)
|
|
38
|
+
.map(eta => ({
|
|
39
|
+
eta: eta,
|
|
40
|
+
remark: {
|
|
41
|
+
zh: "預定班次",
|
|
42
|
+
en: "Scheduled",
|
|
43
|
+
},
|
|
44
|
+
dest: {
|
|
45
|
+
zh: "",
|
|
46
|
+
en: "",
|
|
47
|
+
},
|
|
48
|
+
co: "fortuneferry",
|
|
49
|
+
})));
|
|
50
|
+
/*
|
|
51
|
+
* the official API is broken most of the time, keep it for reference
|
|
52
|
+
|
|
53
|
+
const v = getCode(stopList[stops[seq+1]].name.zh)
|
|
54
|
+
const u = getCode(stopList[stops[seq]].name.zh)
|
|
55
|
+
return fetch(
|
|
56
|
+
`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`,
|
|
57
|
+
{
|
|
38
58
|
cache: isSafari ? "default" : "no-store",
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
59
|
+
},
|
|
60
|
+
)
|
|
61
|
+
.then((response) => response.json())
|
|
62
|
+
.then(({ data }) => {
|
|
63
|
+
if (!data) return [];
|
|
64
|
+
|
|
44
65
|
return data
|
|
45
|
-
|
|
66
|
+
.map(({ depart_time, rmk_tc, rmk_en }: any) => {
|
|
46
67
|
const date = new Date();
|
|
47
|
-
let guess = `${date.getFullYear()}-${('0'
|
|
48
|
-
if ((new Date(guess)) < date) {
|
|
49
|
-
|
|
50
|
-
|
|
68
|
+
let guess = `${date.getFullYear()}-${('0'+(date.getMonth()+1)).slice(-2)}-${('0'+date.getDate()).slice(-2)}T${depart_time}:00+08:00`
|
|
69
|
+
if ( (new Date(guess)) < date ) {
|
|
70
|
+
date.setDate(date.getDate() + 1)
|
|
71
|
+
guess = `${date.getFullYear()}-${('0'+(date.getMonth()+1)).slice(-2)}-${('0'+date.getDate()).slice(-2)}T${depart_time}:00+08:00`
|
|
51
72
|
}
|
|
52
73
|
return {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
74
|
+
eta: guess,
|
|
75
|
+
remark: {
|
|
76
|
+
zh: rmk_tc,
|
|
77
|
+
en: rmk_en,
|
|
78
|
+
},
|
|
79
|
+
dest: {
|
|
80
|
+
zh: "",
|
|
81
|
+
en: "",
|
|
82
|
+
},
|
|
83
|
+
co: "fortuneferry",
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
*/
|
|
66
88
|
}
|
|
67
89
|
//# sourceMappingURL=fortuneferry.js.map
|
package/esm/fortuneferry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAY,MAAM,SAAS,CAAC;AAarD,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;IACjC,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAC3B,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,KAAK,CAAA;KACb;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAG;QACnC,OAAO,KAAK,CAAA;KACb;SAAM,IAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;QAClC,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,GAAG,EACnC,QAAQ,EAAE,IAAI,EAAE,aAAa,EACd;IACf,IAAK,GAAG,IAAI,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,OAAO,OAAO,CAAC,OAAO,CACpB,gBAAgB,CAAC,EAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAC,CAAC;SAChE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAE;SACvE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACX,GAAG,EAAE,GAAG;QACN,MAAM,EAAE;YACN,EAAE,EAAE,MAAM;YACV,EAAE,EAAE,WAAW;SAChB;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;SACP;QACD,EAAE,EAAE,cAAc;KACrB,CAAC,CAAC,CACN,CAAA;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqCE;AACJ,CAAC"}
|
package/esm/hkkf.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { Eta, RouteListEntry } from "./type";
|
|
1
|
+
import type { Eta, EtaDb, RouteListEntry } from "./type";
|
|
2
2
|
interface fetchEtasProps {
|
|
3
|
-
|
|
4
|
-
bound: RouteListEntry["bound"]["hkkf"];
|
|
3
|
+
freq: RouteListEntry["freq"];
|
|
5
4
|
seq: number;
|
|
5
|
+
holidays: EtaDb["holidays"];
|
|
6
|
+
serviceDayMap: EtaDb["serviceDayMap"];
|
|
6
7
|
}
|
|
7
|
-
export default function fetchEtas({
|
|
8
|
+
export default function fetchEtas({ freq, seq, holidays, serviceDayMap, }: fetchEtasProps): Promise<Eta[]>;
|
|
8
9
|
export {};
|