@aeroswarm/weather 0.1.5 → 0.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.
- package/README.md +66 -0
- package/dist/aftn.d.ts +4 -4
- package/dist/aftn.d.ts.map +1 -1
- package/dist/animation.d.ts +16 -0
- package/dist/animation.d.ts.map +1 -1
- package/dist/conditions.d.ts +2 -1
- package/dist/conditions.d.ts.map +1 -1
- package/dist/geo.d.ts +54 -0
- package/dist/geo.d.ts.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1207 -23
- package/dist/metar.d.ts.map +1 -1
- package/dist/nil.d.ts +16 -0
- package/dist/nil.d.ts.map +1 -0
- package/dist/operations.d.ts +41 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/ops.d.ts +181 -0
- package/dist/ops.d.ts.map +1 -0
- package/dist/ops.test.d.ts +2 -0
- package/dist/ops.test.d.ts.map +1 -0
- package/dist/runway.d.ts +44 -0
- package/dist/runway.d.ts.map +1 -0
- package/dist/sigmet.d.ts +91 -0
- package/dist/sigmet.d.ts.map +1 -0
- package/dist/snowtam.d.ts +43 -0
- package/dist/snowtam.d.ts.map +1 -0
- package/dist/store.d.ts +15 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/taf.d.ts.map +1 -1
- package/dist/types.d.ts +34 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vaa.d.ts +75 -0
- package/dist/vaa.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/metar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metar.d.ts","sourceRoot":"","sources":["../src/metar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWxC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,KAAK,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"metar.d.ts","sourceRoot":"","sources":["../src/metar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWxC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,KAAK,GAAG,IAAI,CA+ElF"}
|
package/dist/nil.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Laporan `NIL`: stasiun tidak mengirim isi (mis. `METAR WARR 021300Z NIL`). */
|
|
2
|
+
export interface NilReport {
|
|
3
|
+
kind: "NIL";
|
|
4
|
+
/** Jenis laporan yang dinyatakan NIL. */
|
|
5
|
+
of: "METAR" | "SPECI" | "TAF";
|
|
6
|
+
station: string;
|
|
7
|
+
/** Waktu laporan (pada `ddhhmmZ`); waktu acuan bila tidak ada. */
|
|
8
|
+
at: Date;
|
|
9
|
+
raw: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Baca laporan NIL. Mengembalikan null bila teks bukan NIL (laporan biasa dibaca `parseMetar` atau
|
|
13
|
+
* `parseTaf`).
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseNil(rawText: string, reference?: Date): NilReport | null;
|
|
16
|
+
//# sourceMappingURL=nil.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nil.d.ts","sourceRoot":"","sources":["../src/nil.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,KAAK,CAAC;IACZ,yCAAyC;IACzC,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;CACb;AAID;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,SAAS,GAAG,IAAI,CASxF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { SelectedConditions } from "./animation.js";
|
|
2
|
+
import { type CategoryThresholds, type FlightCategoryResult, type Minima, type MinimaEvaluation, type QnhTrend, type RunwayAdvice, type RunwayLimits, type UpcomingChange, type UpcomingOptions } from "./ops.js";
|
|
3
|
+
import type { RunwaySpec } from "./runway.js";
|
|
4
|
+
import type { WeatherStore } from "./store.js";
|
|
5
|
+
export interface OperationsConfig {
|
|
6
|
+
thresholds?: CategoryThresholds;
|
|
7
|
+
/** Runway yang ditinjau (heading true); tanpa ini tidak ada saran runway. */
|
|
8
|
+
runways?: readonly RunwaySpec[];
|
|
9
|
+
/** Batas angin silang/belakang untuk menandai `exceeds`; tanpa ini tidak ada yang ditandai. */
|
|
10
|
+
limits?: RunwayLimits;
|
|
11
|
+
/** Minima atau ambang LVP; tanpa ini tidak ada evaluasi. */
|
|
12
|
+
minima?: Minima;
|
|
13
|
+
/** Berapa jam ke depan peristiwa TAF dicari. Bawaan 6. */
|
|
14
|
+
horizonHours?: number;
|
|
15
|
+
upcoming?: Omit<UpcomingOptions, "thresholds">;
|
|
16
|
+
qnh?: {
|
|
17
|
+
steadyHpa?: number;
|
|
18
|
+
rapidHpaPerHour?: number;
|
|
19
|
+
};
|
|
20
|
+
maxObservationAgeMs?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface StationOperations {
|
|
23
|
+
station: string;
|
|
24
|
+
at: Date;
|
|
25
|
+
/** Dari mana kondisi diambil (METAR, SPECI, atau TAF) dan apakah sudah lama. */
|
|
26
|
+
basis: Pick<SelectedConditions, "source" | "validAt" | "stale" | "temporary" | "transition">;
|
|
27
|
+
category: FlightCategoryResult;
|
|
28
|
+
runways?: RunwayAdvice[];
|
|
29
|
+
minima?: MinimaEvaluation;
|
|
30
|
+
/** Peristiwa dari TAF dalam `horizonHours` jam; kosong bila tidak ada TAF yang berlaku. */
|
|
31
|
+
upcoming: UpcomingChange[];
|
|
32
|
+
/** Tren QNH dari dua pengamatan terakhir; null bila kurang dari dua atau QNH tidak ada. */
|
|
33
|
+
qnh: QnhTrend | null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Ringkasan operasional satu stasiun pada waktu `at`, dari data yang dipegang `WeatherStore`: kategori
|
|
37
|
+
* penerbangan, saran runway menurut angin, evaluasi minima, peristiwa TAF berikutnya, dan tren QNH.
|
|
38
|
+
* Null bila stasiun tidak punya data. Hasilnya bantuan keputusan, bukan sumber resmi.
|
|
39
|
+
*/
|
|
40
|
+
export declare function stationOperations(store: WeatherStore, station: string, at: Date, config?: OperationsConfig): StationOperations | null;
|
|
41
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,oBAAoB,EAEzB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,YAAY,EAEjB,KAAK,cAAc,EACnB,KAAK,eAAe,EAErB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAChC,+FAA+F;IAC/F,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAC/C,GAAG,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,IAAI,CAAC;IACT,gFAAgF;IAChF,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;IAC7F,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,2FAA2F;IAC3F,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,2FAA2F;IAC3F,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,IAAI,EACR,MAAM,GAAE,gBAAqB,GAC5B,iBAAiB,GAAG,IAAI,CA6B1B"}
|
package/dist/ops.d.ts
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import type { CloudLayer, Conditions, Taf, TafChange } from "./types.js";
|
|
2
|
+
import type { RunwayDirection, RunwaySpec } from "./runway.js";
|
|
3
|
+
/**
|
|
4
|
+
* Cuaca menjadi informasi operasi bandara: kategori penerbangan, angin silang, minima, perubahan yang
|
|
5
|
+
* akan datang, dan tren tekanan. Semua murni. Nilai ambang yang menentukan keputusan operasi
|
|
6
|
+
* (angin silang maksimum, minima, ambang LVP) tidak pernah ditebak: pemanggil yang memberikannya.
|
|
7
|
+
* Hasilnya bantuan keputusan, bukan sumber resmi.
|
|
8
|
+
*/
|
|
9
|
+
export type FlightCategory = "VFR" | "MVFR" | "IFR" | "LIFR";
|
|
10
|
+
/**
|
|
11
|
+
* Ambang kategori penerbangan. Bawaan mengikuti definisi FAA yang dipakai luas (ICAO tidak
|
|
12
|
+
* mendefinisikan kategori ini): LIFR di bawah 500 ft atau 1 mil, IFR di bawah 1.000 ft atau 3 mil, MVFR
|
|
13
|
+
* sampai 3.000 ft atau 5 mil, selain itu VFR. Ganti bila bandara memakai ambang lain.
|
|
14
|
+
*/
|
|
15
|
+
export interface CategoryThresholds {
|
|
16
|
+
/** Plafon (ft) di bawah ini LIFR. */
|
|
17
|
+
lifrCeilingFt: number;
|
|
18
|
+
/** Plafon (ft) di bawah ini IFR. */
|
|
19
|
+
ifrCeilingFt: number;
|
|
20
|
+
/** Plafon (ft) sampai nilai ini (termasuk) MVFR; di atasnya VFR. */
|
|
21
|
+
mvfrCeilingFt: number;
|
|
22
|
+
/** Jarak pandang (m) di bawah ini LIFR. */
|
|
23
|
+
lifrVisibilityM: number;
|
|
24
|
+
/** Jarak pandang (m) di bawah ini IFR. */
|
|
25
|
+
ifrVisibilityM: number;
|
|
26
|
+
/** Jarak pandang (m) sampai nilai ini (termasuk) MVFR; di atasnya VFR. */
|
|
27
|
+
mvfrVisibilityM: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const FAA_CATEGORY_THRESHOLDS: CategoryThresholds;
|
|
30
|
+
export interface FlightCategoryResult {
|
|
31
|
+
/** Null bila jarak pandang dan plafon sama-sama tidak diketahui. */
|
|
32
|
+
category: FlightCategory | null;
|
|
33
|
+
/** Plafon (ft di atas tanah): dasar awan BKN/OVC atau VV terendah; null = tidak ada plafon. */
|
|
34
|
+
ceilingFt: number | null;
|
|
35
|
+
/** Ada lapisan BKN/OVC yang dasarnya tidak dilaporkan (`BKN///`): plafon tidak bisa dipastikan. */
|
|
36
|
+
ceilingUnknown: boolean;
|
|
37
|
+
visibilityM: number | null;
|
|
38
|
+
/** Yang menentukan kategori: plafon, jarak pandang, atau keduanya sama. */
|
|
39
|
+
limitedBy: "ceiling" | "visibility" | "both" | null;
|
|
40
|
+
}
|
|
41
|
+
/** Plafon: dasar terendah dari awan BKN/OVC atau VV. `unknown` bila ada yang tidak diketahui dasarnya. */
|
|
42
|
+
export declare function ceilingOf(clouds: readonly CloudLayer[]): {
|
|
43
|
+
ceilingFt: number | null;
|
|
44
|
+
unknown: boolean;
|
|
45
|
+
};
|
|
46
|
+
/** Kategori penerbangan dari jarak pandang dan plafon. `CAVOK` selalu VFR. */
|
|
47
|
+
export declare function flightCategory(conditions: Pick<Conditions, "visibilityM" | "clouds" | "cavok">, thresholds?: CategoryThresholds): FlightCategoryResult;
|
|
48
|
+
export interface WindInput {
|
|
49
|
+
/** Arah ASAL angin, derajat TRUE; null = berubah-ubah (VRB). */
|
|
50
|
+
directionDeg: number | null;
|
|
51
|
+
speedKt: number;
|
|
52
|
+
gustKt?: number | null;
|
|
53
|
+
}
|
|
54
|
+
export interface WindComponents {
|
|
55
|
+
/** Angin depan (kt, >= 0). Null bila arah angin berubah-ubah. */
|
|
56
|
+
headwindKt: number | null;
|
|
57
|
+
/** Angin belakang (kt, >= 0). Null bila arah angin berubah-ubah. */
|
|
58
|
+
tailwindKt: number | null;
|
|
59
|
+
/** Angin silang (kt, >= 0). Bila arah berubah-ubah: batas atas (kecepatan penuh). */
|
|
60
|
+
crosswindKt: number;
|
|
61
|
+
/** Dari sisi mana angin silang datang, dilihat dari pesawat yang searah runway. */
|
|
62
|
+
crosswindFrom: "left" | "right" | null;
|
|
63
|
+
/** Arah angin berubah-ubah: angka hanya batas atas. */
|
|
64
|
+
variable: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Komponen angin terhadap arah runway (heading TRUE). Angin depan positif bila angin datang dari depan;
|
|
68
|
+
* angin silang datang dari kanan bila arah angin searah jarum jam dari heading.
|
|
69
|
+
*/
|
|
70
|
+
export declare function windComponents(wind: Pick<WindInput, "directionDeg" | "speedKt">, runwayHeadingTrueDeg: number): WindComponents;
|
|
71
|
+
export interface RunwayLimits {
|
|
72
|
+
/** Angin silang maksimum (kt); tidak diisi = tidak diperiksa. */
|
|
73
|
+
crosswindKt?: number;
|
|
74
|
+
/** Angin belakang maksimum (kt); tidak diisi = tidak diperiksa. */
|
|
75
|
+
tailwindKt?: number;
|
|
76
|
+
}
|
|
77
|
+
export interface DirectionAdvice {
|
|
78
|
+
direction: RunwayDirection;
|
|
79
|
+
steady: WindComponents;
|
|
80
|
+
/** Dengan hembusan (gust), bila dilaporkan. */
|
|
81
|
+
gust?: WindComponents;
|
|
82
|
+
/** Melewati batas yang diberikan; null bila batasnya tidak diberikan. */
|
|
83
|
+
exceeds: {
|
|
84
|
+
crosswind: boolean | null;
|
|
85
|
+
tailwind: boolean | null;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export interface RunwayAdvice {
|
|
89
|
+
runway: RunwaySpec;
|
|
90
|
+
directions: [DirectionAdvice, DirectionAdvice];
|
|
91
|
+
/** Arah yang lebih menguntungkan: angin depan terbesar (seri: angin silang lebih kecil). */
|
|
92
|
+
preferred: DirectionAdvice;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Untuk tiap runway, hitung komponen angin di kedua arahnya dan tunjukkan arah yang lebih
|
|
96
|
+
* menguntungkan. `limits` hanya dipakai untuk menandai `exceeds`; tanpa batas, tidak ada yang ditandai.
|
|
97
|
+
* Pemilihan runway aktif tetap keputusan operasi, bukan hasil fungsi ini.
|
|
98
|
+
*/
|
|
99
|
+
export declare function runwayAdvice(wind: WindInput, runways: readonly RunwaySpec[], limits?: RunwayLimits): RunwayAdvice[];
|
|
100
|
+
export interface Minima {
|
|
101
|
+
/** Jarak pandang minimum (m): di bawahnya = di bawah minima. */
|
|
102
|
+
visibilityM?: number;
|
|
103
|
+
/** Plafon minimum (ft): di bawahnya = di bawah minima. */
|
|
104
|
+
ceilingFt?: number;
|
|
105
|
+
/** RVR minimum (m): di bawahnya = di bawah minima. Bila `rvrRunways` diisi, hanya runway itu. */
|
|
106
|
+
rvrM?: number;
|
|
107
|
+
rvrRunways?: string[];
|
|
108
|
+
}
|
|
109
|
+
export interface MinimaReason {
|
|
110
|
+
kind: "visibility" | "ceiling" | "rvr";
|
|
111
|
+
value: number;
|
|
112
|
+
minimum: number;
|
|
113
|
+
runway?: string;
|
|
114
|
+
}
|
|
115
|
+
export interface MinimaEvaluation {
|
|
116
|
+
/** Ada satu atau lebih alasan pasti di bawah minima. */
|
|
117
|
+
below: boolean;
|
|
118
|
+
reasons: MinimaReason[];
|
|
119
|
+
/** Besaran yang diminta tetapi datanya tidak cukup untuk memutuskan (tidak dianggap aman). */
|
|
120
|
+
unknown: ("visibility" | "ceiling" | "rvr")[];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Bandingkan kondisi dengan minima (atau ambang prosedur visibilitas rendah; maknanya sama: salah satu
|
|
124
|
+
* besaran di bawah ambangnya). Data yang tidak ada tidak dianggap aman: dilaporkan di `unknown`.
|
|
125
|
+
*/
|
|
126
|
+
export declare function evaluateMinima(conditions: Pick<Conditions, "visibilityM" | "clouds" | "cavok" | "rvr">, minima: Minima): MinimaEvaluation;
|
|
127
|
+
export type UpcomingKind = "CATEGORY_CHANGE" | "THUNDERSTORM_START" | "THUNDERSTORM_END" | "HEAVY_PRECIPITATION_START" | "LOW_VISIBILITY_START" | "WIND_CHANGE";
|
|
128
|
+
export interface UpcomingChange {
|
|
129
|
+
kind: UpcomingKind;
|
|
130
|
+
/** Saat perubahan mulai terlihat (resolusi `stepMinutes`, ditambah batas periode TAF). */
|
|
131
|
+
at: Date;
|
|
132
|
+
/** Bagian TAF yang menyebabkannya. */
|
|
133
|
+
source: TafChange;
|
|
134
|
+
/** Sudah berlangsung pada awal rentang (hanya untuk THUNDERSTORM_START). */
|
|
135
|
+
ongoing?: boolean;
|
|
136
|
+
from?: FlightCategory | null;
|
|
137
|
+
to?: FlightCategory | null;
|
|
138
|
+
/** Keterangan singkat yang bisa ditampilkan. */
|
|
139
|
+
detail: string;
|
|
140
|
+
}
|
|
141
|
+
export interface UpcomingOptions {
|
|
142
|
+
/** Langkah pencuplikan (menit). Bawaan 30. */
|
|
143
|
+
stepMinutes?: number;
|
|
144
|
+
/** Ikutkan grup PROB30/40. Bawaan false. */
|
|
145
|
+
includeProbable?: boolean;
|
|
146
|
+
thresholds?: CategoryThresholds;
|
|
147
|
+
/** Tandai jarak pandang di bawah nilai ini (m); tidak diisi = tidak ditandai. */
|
|
148
|
+
lowVisibilityM?: number;
|
|
149
|
+
/** Tandai perubahan kecepatan angin sebesar ini (kt) dari nilai terakhir yang ditandai; tidak diisi = tidak ditandai. */
|
|
150
|
+
windChangeKt?: number;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Peristiwa penting dari TAF dalam `hours` jam sejak `from`: perubahan kategori penerbangan, awal dan
|
|
154
|
+
* akhir badai petir/CB, hujan lebat, jarak pandang rendah, dan perubahan angin (dua yang terakhir hanya
|
|
155
|
+
* bila ambangnya diberikan). Dibandingkan dengan keadaan awal, jadi yang sudah berlangsung ditandai
|
|
156
|
+
* `ongoing`, bukan sebagai peristiwa baru.
|
|
157
|
+
*/
|
|
158
|
+
export declare function upcomingChanges(taf: Taf, from: Date, hours: number, options?: UpcomingOptions): UpcomingChange[];
|
|
159
|
+
export interface QnhTrend {
|
|
160
|
+
deltaHpa: number;
|
|
161
|
+
hours: number;
|
|
162
|
+
hpaPerHour: number;
|
|
163
|
+
direction: "rising" | "falling" | "steady";
|
|
164
|
+
/** Cepat bila `rapidHpaPerHour` diberikan dan terlampaui; null bila ambangnya tidak diberikan. */
|
|
165
|
+
rapid: boolean | null;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Perubahan QNH antara dua pengamatan. `steadyHpa` (bawaan 0,5): selisih di bawah ini dianggap tetap.
|
|
169
|
+
* Kecepatan perubahan dibandingkan dengan `rapidHpaPerHour` hanya bila diberikan.
|
|
170
|
+
*/
|
|
171
|
+
export declare function qnhTrend(previous: {
|
|
172
|
+
qnhHpa: number | null;
|
|
173
|
+
observedAt: Date;
|
|
174
|
+
}, current: {
|
|
175
|
+
qnhHpa: number | null;
|
|
176
|
+
observedAt: Date;
|
|
177
|
+
}, options?: {
|
|
178
|
+
steadyHpa?: number;
|
|
179
|
+
rapidHpaPerHour?: number;
|
|
180
|
+
}): QnhTrend | null;
|
|
181
|
+
//# sourceMappingURL=ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAuB,GAAG,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;;GAKG;AAIH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;CACzB;AAID,eAAO,MAAM,uBAAuB,EAAE,kBAOrC,CAAC;AAKF,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,+FAA+F;IAC/F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mGAAmG;IACnG,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,2EAA2E;IAC3E,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC;CACrD;AAED,0GAA0G;AAC1G,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAYvG;AAiBD,8EAA8E;AAC9E,wBAAgB,cAAc,CAC5B,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC,EAChE,UAAU,GAAE,kBAA4C,GACvD,oBAAoB,CA8BtB;AAID,MAAM,WAAW,SAAS;IACxB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oEAAoE;IACpE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qFAAqF;IACrF,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACvC,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC,EACjD,oBAAoB,EAAE,MAAM,GAC3B,cAAc,CAchB;AAED,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,yEAAyE;IACzE,OAAO,EAAE;QAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;CAClE;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC/C,4FAA4F;IAC5F,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,GAAE,YAAiB,GACxB,YAAY,EAAE,CAoChB;AAID,MAAM,WAAW,MAAM;IACrB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,8FAA8F;IAC9F,OAAO,EAAE,CAAC,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;CAC/C;AAUD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC,EACxE,MAAM,EAAE,MAAM,GACb,gBAAgB,CAgClB;AAID,MAAM,MAAM,YAAY,GACpB,iBAAiB,GACjB,oBAAoB,GACpB,kBAAkB,GAClB,2BAA2B,GAC3B,sBAAsB,GACtB,aAAa,CAAC;AAElB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,0FAA0F;IAC1F,EAAE,EAAE,IAAI,CAAC;IACT,sCAAsC;IACtC,MAAM,EAAE,SAAS,CAAC;IAClB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,EAAE,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC3B,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yHAAyH;IACzH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA8BD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,GAC5B,cAAc,EAAE,CAsElB;AAID,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,kGAAkG;IAClG,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,EACrD,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,EACpD,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D,QAAQ,GAAG,IAAI,CAcjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ops.test.d.ts","sourceRoot":"","sources":["../src/ops.test.ts"],"names":[],"mappings":""}
|
package/dist/runway.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { GeoPosition } from "./geo.js";
|
|
2
|
+
/**
|
|
3
|
+
* Satu arah pemakaian runway. `headingTrueDeg` adalah arah TRUE (dari utara geografis), karena angin
|
|
4
|
+
* pada METAR/SPECI dilaporkan dalam derajat true. Heading runway biasanya diberikan magnetik; ubah dulu
|
|
5
|
+
* dengan `magneticToTrue`.
|
|
6
|
+
*/
|
|
7
|
+
export interface RunwayDirection {
|
|
8
|
+
/** Penunjuk, mis. `28`, `10L`. */
|
|
9
|
+
designator: string;
|
|
10
|
+
headingTrueDeg: number;
|
|
11
|
+
}
|
|
12
|
+
/** Sebuah runway dengan kedua arah pakainya. */
|
|
13
|
+
export interface RunwaySpec {
|
|
14
|
+
/** Nama, mis. `10/28`. */
|
|
15
|
+
name: string;
|
|
16
|
+
directions: [RunwayDirection, RunwayDirection];
|
|
17
|
+
}
|
|
18
|
+
/** Heading magnetik menjadi true. `variationEastDeg` positif bila deklinasi ke timur (true = magnetik + variasi). */
|
|
19
|
+
export declare function magneticToTrue(magneticDeg: number, variationEastDeg: number): number;
|
|
20
|
+
/** Arah balik (+180). */
|
|
21
|
+
export declare const reciprocal: (headingDeg: number) => number;
|
|
22
|
+
/** Pasangan penunjuk lawan arah: `10` -> `28`, `09L` -> `27R`, `36` -> `18`. */
|
|
23
|
+
export declare function reciprocalDesignator(designator: string): string | null;
|
|
24
|
+
/** Perkiraan heading magnetik dari penunjuk (`28` -> 280). Hanya pendekatan: dibulatkan ke 10 derajat. */
|
|
25
|
+
export declare function designatorHeadingDeg(designator: string): number | null;
|
|
26
|
+
/**
|
|
27
|
+
* Susun `RunwaySpec` dari penunjuk salah satu arah dan heading magnetiknya (arah itu), mis.
|
|
28
|
+
* `runwayFromHeading("10", 98, 1)` -> runway `10/28`. Bila `magneticHeadingDeg` tidak diberikan dipakai
|
|
29
|
+
* pendekatan dari penunjuk (dibulatkan 10 derajat), sehingga angin silang ikut tidak teliti.
|
|
30
|
+
*/
|
|
31
|
+
export declare function runwayFromHeading(designator: string, magneticHeadingDeg?: number, variationEastDeg?: number): RunwaySpec | null;
|
|
32
|
+
/**
|
|
33
|
+
* Heading true sumbu panjang sebuah poligon runway (0 sampai 180, dari utara searah jarum jam): sumbu
|
|
34
|
+
* utama sebaran titik (PCA), dengan bujur diskalakan menurut lintang. Berguna bila data aerodrome
|
|
35
|
+
* hanya punya poligon runway tanpa heading. Null bila kurang dari dua titik berbeda.
|
|
36
|
+
*/
|
|
37
|
+
export declare function headingFromPolygon(points: readonly GeoPosition[]): number | null;
|
|
38
|
+
/**
|
|
39
|
+
* Runway dari poligonnya: sumbu panjang menjadi heading, dan penunjuk dipilih dari heading itu
|
|
40
|
+
* (pembulatan 10 derajat, dikurangi variasi untuk mendapat magnetik). `variationEastDeg` positif ke
|
|
41
|
+
* timur. Null bila poligon tidak cukup.
|
|
42
|
+
*/
|
|
43
|
+
export declare function runwayFromPolygon(points: readonly GeoPosition[], variationEastDeg?: number): RunwaySpec | null;
|
|
44
|
+
//# sourceMappingURL=runway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runway.d.ts","sourceRoot":"","sources":["../src/runway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;CAChD;AAID,qHAAqH;AACrH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,yBAAyB;AACzB,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,KAAG,MAAqC,CAAC;AAEtF,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQtE;AAED,0GAA0G;AAC1G,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,gBAAgB,SAAI,GACnB,UAAU,GAAG,IAAI,CAYnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,GAAG,IAAI,CAoBhF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,gBAAgB,SAAI,GAAG,UAAU,GAAG,IAAI,CAQzG"}
|
package/dist/sigmet.d.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type AltitudeRange, type Compass, type GeoPosition, type Movement } from "./geo.js";
|
|
2
|
+
export type SigmetHazard = "THUNDERSTORM" | "TURBULENCE" | "ICING" | "MOUNTAIN_WAVE" | "VOLCANIC_ASH" | "TROPICAL_CYCLONE" | "DUST_STORM" | "SAND_STORM" | "RADIOACTIVE_CLOUD" | "SURFACE_WIND" | "SURFACE_VISIBILITY" | "CLOUD" | "CANCEL" | "OTHER";
|
|
3
|
+
export type SigmetArea = {
|
|
4
|
+
kind: "polygon";
|
|
5
|
+
points: GeoPosition[];
|
|
6
|
+
} | {
|
|
7
|
+
kind: "line";
|
|
8
|
+
side: Compass | null;
|
|
9
|
+
points: GeoPosition[];
|
|
10
|
+
} | {
|
|
11
|
+
kind: "circle";
|
|
12
|
+
radiusNm: number;
|
|
13
|
+
center: GeoPosition | "TC_CENTRE" | "VA_CENTRE" | null;
|
|
14
|
+
} | {
|
|
15
|
+
kind: "corridor";
|
|
16
|
+
widthNm: number;
|
|
17
|
+
points: GeoPosition[];
|
|
18
|
+
} | {
|
|
19
|
+
kind: "latitude-line";
|
|
20
|
+
side: Compass;
|
|
21
|
+
lat: number;
|
|
22
|
+
} | {
|
|
23
|
+
kind: "longitude-line";
|
|
24
|
+
side: Compass;
|
|
25
|
+
lon: number;
|
|
26
|
+
} | {
|
|
27
|
+
kind: "entire-fir";
|
|
28
|
+
};
|
|
29
|
+
export interface SigmetForecast {
|
|
30
|
+
at: Date | null;
|
|
31
|
+
area: SigmetArea | null;
|
|
32
|
+
/** Posisi pusat yang diprakirakan (siklon tropis). */
|
|
33
|
+
centre?: GeoPosition;
|
|
34
|
+
/** `NO VA EXP`: tidak ada abu vulkanik yang diperkirakan. */
|
|
35
|
+
noVaExpected?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface Sigmet {
|
|
38
|
+
kind: "SIGMET" | "AIRMET";
|
|
39
|
+
/** Penunjuk FIR yang menerbitkan, mis. `WIIZ`. */
|
|
40
|
+
fir: string;
|
|
41
|
+
firName?: string;
|
|
42
|
+
/** Kantor pengamat meteorologi (MWO), mis. `WIII`. */
|
|
43
|
+
issuer: string | null;
|
|
44
|
+
/** Nomor urut, mis. `03` atau `A01`. */
|
|
45
|
+
series: string;
|
|
46
|
+
validFrom: Date;
|
|
47
|
+
validTo: Date;
|
|
48
|
+
hazard: SigmetHazard;
|
|
49
|
+
/** Frasa fenomena apa adanya, mis. `EMBD TS` atau `SEV TURB`. */
|
|
50
|
+
phenomenon: string;
|
|
51
|
+
/** Pembatalan pesan lain (`CNL SIGMET 02 011200/011600`). */
|
|
52
|
+
cancel?: {
|
|
53
|
+
series: string;
|
|
54
|
+
validFrom: Date;
|
|
55
|
+
validTo: Date;
|
|
56
|
+
};
|
|
57
|
+
/** Keterangan tambahan pada pembatalan (mis. `VA MOV TO YUDO FIR`). */
|
|
58
|
+
note?: string;
|
|
59
|
+
volcano?: {
|
|
60
|
+
name: string | null;
|
|
61
|
+
position?: GeoPosition;
|
|
62
|
+
};
|
|
63
|
+
cyclone?: {
|
|
64
|
+
name: string;
|
|
65
|
+
position?: GeoPosition;
|
|
66
|
+
cumulonimbus?: boolean;
|
|
67
|
+
};
|
|
68
|
+
status?: "OBS" | "FCST" | "OBS/FCST";
|
|
69
|
+
/** Waktu pengamatan (OBS) atau prakiraan (FCST) yang disebut pada `AT hhmmZ`. */
|
|
70
|
+
statusAt?: Date;
|
|
71
|
+
/** Area utama (yang pertama disebut). */
|
|
72
|
+
area: SigmetArea | null;
|
|
73
|
+
/** Semua area bila lebih dari satu (`N OF N28 AND S OF N33`). */
|
|
74
|
+
areas?: SigmetArea[];
|
|
75
|
+
altitude?: AltitudeRange;
|
|
76
|
+
movement?: Movement;
|
|
77
|
+
trend?: "NC" | "INTSF" | "WKN";
|
|
78
|
+
forecast?: SigmetForecast;
|
|
79
|
+
surfaceWindKt?: number;
|
|
80
|
+
surfaceVisibilityM?: number;
|
|
81
|
+
/** Bagian teks yang tidak dikenali (tidak diam-diam hilang). */
|
|
82
|
+
unparsed: string[];
|
|
83
|
+
raw: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Baca satu SIGMET atau AIRMET berformat ICAO (Annex 3): `WIIZ SIGMET 03 VALID 021200/021600 WIII-
|
|
87
|
+
* WIIZ JAKARTA FIR EMBD TS FCST WI ...`. Mengembalikan null bila kepala pesannya tidak terbaca.
|
|
88
|
+
* `reference` = waktu pesan diterima (menentukan bulan dan tahun).
|
|
89
|
+
*/
|
|
90
|
+
export declare function parseSigmet(rawText: string, reference?: Date): Sigmet | null;
|
|
91
|
+
//# sourceMappingURL=sigmet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sigmet.d.ts","sourceRoot":"","sources":["../src/sigmet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Satu runway pada SNOWTAM berformat lama (butir C sampai H). */
|
|
2
|
+
export interface SnowtamRunway {
|
|
3
|
+
/** Penunjuk runway, mis. `04L`. */
|
|
4
|
+
designator: string;
|
|
5
|
+
/** Panjang runway yang dibersihkan (m), bila kurang dari panjang yang dipublikasikan. */
|
|
6
|
+
clearedLengthM?: number;
|
|
7
|
+
/** Lebar runway yang dibersihkan (m); `side` bila hanya satu sisi dari sumbu (L/R). */
|
|
8
|
+
clearedWidthM?: {
|
|
9
|
+
value: number;
|
|
10
|
+
side?: "L" | "R";
|
|
11
|
+
};
|
|
12
|
+
/** Endapan per sepertiga runway: 1 bersih/kering ... 9 salju padat, atau null = NIL/tidak dilaporkan. */
|
|
13
|
+
deposits?: (number | null)[];
|
|
14
|
+
/** Kedalaman rata-rata per sepertiga (mm); null = NR/XX. */
|
|
15
|
+
meanDepthMm?: (number | null)[];
|
|
16
|
+
/** Gesekan permukaan per sepertiga, apa adanya (koefisien atau kode perkiraan). */
|
|
17
|
+
friction?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface Snowtam {
|
|
20
|
+
kind: "SNOWTAM";
|
|
21
|
+
/** `lettered` = butir A) sampai T) (Annex 15 lama); `grf` = format pelaporan global (setelah 2021). */
|
|
22
|
+
format: "lettered" | "grf";
|
|
23
|
+
number: string | null;
|
|
24
|
+
aerodrome: string | null;
|
|
25
|
+
/** Waktu penilaian (butir B). */
|
|
26
|
+
assessedAt: Date | null;
|
|
27
|
+
runways: SnowtamRunway[];
|
|
28
|
+
/** Butir selain A-H (J, K, L, M, N, P, R, S, T), apa adanya. */
|
|
29
|
+
items: Record<string, string>;
|
|
30
|
+
/** Rencana pengamatan berikutnya (butir S). */
|
|
31
|
+
nextObservationAt?: Date | null;
|
|
32
|
+
/** Catatan bebas (butir T). */
|
|
33
|
+
remarks?: string;
|
|
34
|
+
unparsed: string[];
|
|
35
|
+
raw: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Baca SNOWTAM. Format lama berbutir `A) ... T)` dibaca penuh (aerodrom, waktu, runway, endapan,
|
|
39
|
+
* kedalaman, gesekan, rencana pengamatan, catatan). Format pelaporan global (tanpa huruf butir) hanya
|
|
40
|
+
* dibaca kepalanya (nomor, aerodrom, waktu, runway); sisanya dilaporkan di `unparsed`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseSnowtam(rawText: string, reference?: Date): Snowtam | null;
|
|
43
|
+
//# sourceMappingURL=snowtam.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snowtam.d.ts","sourceRoot":"","sources":["../src/snowtam.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAA;KAAE,CAAC;IACpD,yGAAyG;IACzG,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,WAAW,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAChC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,uGAAuG;IACvG,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iCAAiC;IACjC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAyBD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,OAAO,GAAG,IAAI,CAqF1F"}
|
package/dist/store.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type AnimationSnapshot } from "./animation.js";
|
|
1
|
+
import { type AnimationSnapshot, type SelectedConditions } from "./animation.js";
|
|
2
2
|
import { type GeoPoint, type GridBounds, type NudgeOptions, type ScalarGrid, type WindGrid } from "./grid.js";
|
|
3
|
-
import type { TafChange } from "./types.js";
|
|
3
|
+
import type { Metar, Taf, TafChange } from "./types.js";
|
|
4
4
|
export type Locate = (icao: string) => GeoPoint | undefined;
|
|
5
5
|
export interface IngestOptions {
|
|
6
6
|
/** Waktu pesan diterima (menentukan bulan/tahun laporan). Bawaan: sekarang. */
|
|
@@ -11,6 +11,10 @@ export interface IngestOptions {
|
|
|
11
11
|
export interface IngestResult {
|
|
12
12
|
metars: number;
|
|
13
13
|
tafs: number;
|
|
14
|
+
/** Laporan `NIL` (stasiun tidak mengirim isi); tidak mengubah data yang ada. */
|
|
15
|
+
nil: number;
|
|
16
|
+
/** Pesan yang dikenali tetapi bukan METAR/SPECI/TAF (SIGMET, AIRMET, VAA, SNOWTAM). */
|
|
17
|
+
other: number;
|
|
14
18
|
/** Laporan yang dikenali kata kuncinya tetapi tidak terbaca. */
|
|
15
19
|
skipped: number;
|
|
16
20
|
stations: string[];
|
|
@@ -83,6 +87,15 @@ export declare class WeatherStore {
|
|
|
83
87
|
maxObservationAgeMs?: number;
|
|
84
88
|
includeProbable?: boolean;
|
|
85
89
|
}): AnimationSnapshot | null;
|
|
90
|
+
/** Kondisi (belum diubah menjadi parameter animasi) di satu stasiun pada waktu `at`. */
|
|
91
|
+
conditionsAt(station: string, at: Date, options?: {
|
|
92
|
+
maxObservationAgeMs?: number;
|
|
93
|
+
includeProbable?: boolean;
|
|
94
|
+
}): SelectedConditions | null;
|
|
95
|
+
/** TAF yang berlaku di satu stasiun pada waktu `at` (manual didahulukan), atau null. */
|
|
96
|
+
forecastFor(station: string, at: Date): Taf | null;
|
|
97
|
+
/** Pengamatan terakhir (paling baru dulu) di satu stasiun sampai waktu `at`, paling banyak `count`. */
|
|
98
|
+
observationsUntil(station: string, at: Date, count: number): Metar[];
|
|
86
99
|
/** Rentang waktu dan pembagian periode (BASE/BECMG/TEMPO/FM) dari TAF, untuk timeline. */
|
|
87
100
|
timeline(): Timeline | null;
|
|
88
101
|
/**
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/taf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taf.d.ts","sourceRoot":"","sources":["../src/taf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAwB,MAAM,YAAY,CAAC;AAgBxE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,GAAG,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"taf.d.ts","sourceRoot":"","sources":["../src/taf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAwB,MAAM,YAAY,CAAC;AAgBxE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,GAAG,GAAG,IAAI,CA4J9E;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,mFAAmF;IACnF,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AASD,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAgCnF;AAED,wGAAwG;AACxG,wBAAgB,UAAU,CACxB,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,IAAI,EACR,OAAO,GAAE,eAAoB,GAC5B,UAAU,GAAG,IAAI,CA2CnB"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import type { NilReport } from "./nil.js";
|
|
2
|
+
import type { Sigmet } from "./sigmet.js";
|
|
3
|
+
import type { Snowtam } from "./snowtam.js";
|
|
4
|
+
import type { VolcanicAshAdvisory } from "./vaa.js";
|
|
5
|
+
export type ReportKind = "METAR" | "SPECI" | "TAF" | "SIGMET" | "AIRMET" | "VAA" | "SNOWTAM";
|
|
2
6
|
export type CloudCover = "FEW" | "SCT" | "BKN" | "OVC" | "VV" | "SKC" | "NSC" | "NCD";
|
|
3
7
|
export interface CloudLayer {
|
|
4
8
|
cover: CloudCover;
|
|
@@ -26,6 +30,20 @@ export interface PresentWeather {
|
|
|
26
30
|
/** Kode asli, mis. `+TSRA`. */
|
|
27
31
|
code: string;
|
|
28
32
|
}
|
|
33
|
+
/** Jarak pandang landasan (RVR) di satu runway. */
|
|
34
|
+
export interface Rvr {
|
|
35
|
+
/** Runway, mis. `06R` atau `28`. */
|
|
36
|
+
runway: string;
|
|
37
|
+
/** Nilai dalam meter (feet dikonversi); batas bawah/atas ada di `modifier`. */
|
|
38
|
+
meters: number;
|
|
39
|
+
/** `above` = lebih dari (P), `below` = kurang dari (M). */
|
|
40
|
+
modifier?: "above" | "below";
|
|
41
|
+
/** Rentang RVR berubah-ubah (V): nilai terkecil dan terbesar (meter). */
|
|
42
|
+
variableMinM?: number;
|
|
43
|
+
variableMaxM?: number;
|
|
44
|
+
/** Tren: naik (U), turun (D), tidak berubah (N). */
|
|
45
|
+
trend?: "up" | "down" | "none";
|
|
46
|
+
}
|
|
29
47
|
/** Kondisi cuaca pada satu titik waktu. */
|
|
30
48
|
export interface Conditions {
|
|
31
49
|
wind: Wind;
|
|
@@ -34,6 +52,8 @@ export interface Conditions {
|
|
|
34
52
|
cavok: boolean;
|
|
35
53
|
clouds: CloudLayer[];
|
|
36
54
|
weather: PresentWeather[];
|
|
55
|
+
/** RVR per runway, bila dilaporkan. */
|
|
56
|
+
rvr?: Rvr[];
|
|
37
57
|
}
|
|
38
58
|
export interface Metar {
|
|
39
59
|
kind: "METAR" | "SPECI";
|
|
@@ -46,6 +66,8 @@ export interface Metar {
|
|
|
46
66
|
dewPointC: number | null;
|
|
47
67
|
qnhHpa: number | null;
|
|
48
68
|
trend: "NOSIG" | "BECMG" | "TEMPO" | null;
|
|
69
|
+
/** Token laporan yang tidak dikenali parser (tidak diam-diam hilang). */
|
|
70
|
+
unparsed: string[];
|
|
49
71
|
raw: string;
|
|
50
72
|
}
|
|
51
73
|
export type TafChange = "BASE" | "FM" | "BECMG" | "TEMPO" | "PROB";
|
|
@@ -59,6 +81,8 @@ export interface TafPeriod {
|
|
|
59
81
|
conditions: Partial<Conditions> & {
|
|
60
82
|
noSignificantWeather?: boolean;
|
|
61
83
|
};
|
|
84
|
+
/** Token grup ini yang tidak dikenali parser. */
|
|
85
|
+
unparsed: string[];
|
|
62
86
|
raw: string;
|
|
63
87
|
}
|
|
64
88
|
export interface Taf {
|
|
@@ -70,8 +94,16 @@ export interface Taf {
|
|
|
70
94
|
amended: boolean;
|
|
71
95
|
corrected: boolean;
|
|
72
96
|
cancelled: boolean;
|
|
97
|
+
/** `AMD NOT SKED`: amendments are not scheduled for this TAF. */
|
|
98
|
+
amendmentsNotScheduled?: boolean;
|
|
73
99
|
periods: TafPeriod[];
|
|
100
|
+
/**
|
|
101
|
+
* Token yang tidak masuk ke periode mana pun: grup perubahan dengan periode rusak (mis.
|
|
102
|
+
* `TEMPO 0214/02014`) dibuang beserta isinya, bukan digabungkan diam-diam ke kondisi dasar.
|
|
103
|
+
*/
|
|
104
|
+
unparsed: string[];
|
|
74
105
|
raw: string;
|
|
75
106
|
}
|
|
76
|
-
|
|
107
|
+
/** Hasil `decodeWeatherMessage`: bedakan lewat `kind`. */
|
|
108
|
+
export type Report = Metar | Taf | NilReport | Sigmet | VolcanicAshAdvisory | Snowtam;
|
|
77
109
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|