atmosx-nwws-parser 1.0.19 → 1.0.22
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 +182 -64
- package/dist/cjs/index.cjs +3799 -0
- package/dist/esm/index.mjs +3757 -0
- package/package.json +49 -37
- package/src/bootstrap.ts +196 -0
- package/src/database.ts +148 -0
- package/src/dictionaries/awips.ts +342 -0
- package/src/dictionaries/events.ts +142 -0
- package/src/dictionaries/icao.ts +237 -0
- package/src/dictionaries/offshore.ts +12 -0
- package/src/dictionaries/signatures.ts +107 -0
- package/src/eas.ts +493 -0
- package/src/index.ts +229 -0
- package/src/parsers/events/api.ts +151 -0
- package/src/parsers/events/cap.ts +138 -0
- package/src/parsers/events/text.ts +106 -0
- package/src/parsers/events/ugc.ts +109 -0
- package/src/parsers/events/vtec.ts +78 -0
- package/src/parsers/events.ts +367 -0
- package/src/parsers/hvtec.ts +46 -0
- package/src/parsers/pvtec.ts +71 -0
- package/src/parsers/stanza.ts +132 -0
- package/src/parsers/text.ts +166 -0
- package/src/parsers/ugc.ts +197 -0
- package/src/types.ts +251 -0
- package/src/utils.ts +314 -0
- package/src/xmpp.ts +144 -0
- package/test.js +58 -34
- package/tsconfig.json +12 -5
- package/tsup.config.ts +14 -0
- package/bootstrap.ts +0 -122
- package/dist/bootstrap.js +0 -153
- package/dist/src/events.js +0 -585
- package/dist/src/helper.js +0 -463
- package/dist/src/stanza.js +0 -147
- package/dist/src/text-parser.js +0 -119
- package/dist/src/ugc.js +0 -214
- package/dist/src/vtec.js +0 -125
- package/src/events.ts +0 -394
- package/src/helper.ts +0 -298
- package/src/stanza.ts +0 -102
- package/src/text-parser.ts +0 -120
- package/src/ugc.ts +0 -122
- package/src/vtec.ts +0 -99
package/dist/src/text-parser.js
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
_ _ __ __
|
|
4
|
-
/\ | | | | (_) \ \ / /
|
|
5
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
6
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
7
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
8
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
9
|
-
| |
|
|
10
|
-
|_|
|
|
11
|
-
|
|
12
|
-
Written by: k3yomi@GitHub
|
|
13
|
-
*/
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.mTextParser = void 0;
|
|
16
|
-
var mTextParser = /** @class */ (function () {
|
|
17
|
-
function mTextParser() {
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* @function getString
|
|
21
|
-
* @description Extracts a substring from a message based on a specified starting string and optional removal patterns.
|
|
22
|
-
*
|
|
23
|
-
* @param {string} message - The full text message to search within.
|
|
24
|
-
* @param {string} string - The starting string to look for in the message.
|
|
25
|
-
* @param {Array|string|null} removal - Optional patterns (string or array of strings) to remove from the extracted substring.
|
|
26
|
-
*/
|
|
27
|
-
mTextParser.getString = function (message, string, removal) {
|
|
28
|
-
if (removal === void 0) { removal = null; }
|
|
29
|
-
var lines = message.split('\n');
|
|
30
|
-
for (var i = 0; i < lines.length; i++) {
|
|
31
|
-
if (lines[i].includes(string)) {
|
|
32
|
-
var start = lines[i].indexOf(string) + string.length;
|
|
33
|
-
var result = lines[i].substring(start).trim();
|
|
34
|
-
if (Array.isArray(removal)) {
|
|
35
|
-
for (var j = 0; j < removal.length; j++) {
|
|
36
|
-
result = result.replace(removal[j], '');
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return result.replace(string, '').replace(/^\s+|\s+$/g, '').replace('<', '').trim();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return null;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* @function getEventCode
|
|
46
|
-
* @description Extracts the event code from a weather alert message.
|
|
47
|
-
*
|
|
48
|
-
* @param {string} message - The full text message to search within.
|
|
49
|
-
*/
|
|
50
|
-
mTextParser.getForecastOffice = function (message) {
|
|
51
|
-
return this.getString(message, "National Weather Service") || this.getString(message, "NWS STORM PREDICTION CENTER ") || null;
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* @function getEventCode
|
|
55
|
-
* @description Extracts the event code from a weather alert message.
|
|
56
|
-
*
|
|
57
|
-
* @param {string} message - The full text message to search within.
|
|
58
|
-
*/
|
|
59
|
-
mTextParser.getPolygonCoordinates = function (message) {
|
|
60
|
-
var coordinates = [];
|
|
61
|
-
var latLon = message.match(/LAT\.{3}LON\s+([\d\s]+)/i);
|
|
62
|
-
if (latLon && latLon[1]) {
|
|
63
|
-
var coordStrings = latLon[1].replace(/\n/g, ' ').trim().split(/\s+/);
|
|
64
|
-
for (var i = 0; i < coordStrings.length - 1; i += 2) {
|
|
65
|
-
var lat = parseFloat(coordStrings[i]) / 100;
|
|
66
|
-
var long = -1 * (parseFloat(coordStrings[i + 1]) / 100);
|
|
67
|
-
if (!isNaN(lat) && !isNaN(long)) {
|
|
68
|
-
coordinates.push([long, lat]);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (coordinates.length > 2) {
|
|
72
|
-
coordinates.push(coordinates[0]);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return coordinates;
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* @function getCleanDescription
|
|
79
|
-
* @description Cleans the description text of a weather alert message by removing headers, footers, and extraneous information.
|
|
80
|
-
*
|
|
81
|
-
* @param {string} message - The full text message to clean.
|
|
82
|
-
* @param {string} handle - The VTEC handle to help identify the start of the main content.
|
|
83
|
-
*/
|
|
84
|
-
mTextParser.getCleanDescription = function (message, handle) {
|
|
85
|
-
var dateLineMatches = Array.from(message.matchAll(/\d{3,4}\s*(AM|PM)?\s*[A-Z]{2,4}\s+[A-Z]{3,}\s+[A-Z]{3,}\s+\d{1,2}\s+\d{4}/gim));
|
|
86
|
-
if (dateLineMatches.length) {
|
|
87
|
-
var dateLineMatch = dateLineMatches[dateLineMatches.length - 1];
|
|
88
|
-
var nwsStart = message.lastIndexOf(dateLineMatch[0]);
|
|
89
|
-
if (nwsStart !== -1) {
|
|
90
|
-
var latStart = message.indexOf("&&", nwsStart);
|
|
91
|
-
message = latStart !== -1 ? message.substring(nwsStart + dateLineMatch[0].length, latStart).trim() : message.substring(nwsStart + dateLineMatch[0].length).trim();
|
|
92
|
-
if (message.startsWith('/'))
|
|
93
|
-
message = message.substring(1).trim();
|
|
94
|
-
if (handle && handle && message.includes(handle)) {
|
|
95
|
-
var vtecIndex = message.indexOf(handle);
|
|
96
|
-
if (vtecIndex !== -1) {
|
|
97
|
-
message = message.substring(vtecIndex + handle.length).trim();
|
|
98
|
-
if (message.startsWith('/'))
|
|
99
|
-
message = message.substring(1).trim();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else if (handle && handle) {
|
|
105
|
-
var vtecStart = message.indexOf(handle);
|
|
106
|
-
if (vtecStart !== -1) {
|
|
107
|
-
var afterVtec = message.substring(vtecStart + handle.length);
|
|
108
|
-
if (afterVtec.startsWith('/'))
|
|
109
|
-
afterVtec = afterVtec.substring(1);
|
|
110
|
-
var latStart = afterVtec.indexOf("&&");
|
|
111
|
-
message = latStart !== -1 ? afterVtec.substring(0, latStart).trim() : afterVtec.trim();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return message;
|
|
115
|
-
};
|
|
116
|
-
return mTextParser;
|
|
117
|
-
}());
|
|
118
|
-
exports.mTextParser = mTextParser;
|
|
119
|
-
exports.default = mTextParser;
|
package/dist/src/ugc.js
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
_ _ __ __
|
|
4
|
-
/\ | | | | (_) \ \ / /
|
|
5
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
6
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
7
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
8
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
9
|
-
| |
|
|
10
|
-
|_|
|
|
11
|
-
|
|
12
|
-
Written by: k3yomi@GitHub
|
|
13
|
-
*/
|
|
14
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
-
}
|
|
20
|
-
Object.defineProperty(o, k2, desc);
|
|
21
|
-
}) : (function(o, m, k, k2) {
|
|
22
|
-
if (k2 === undefined) k2 = k;
|
|
23
|
-
o[k2] = m[k];
|
|
24
|
-
}));
|
|
25
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
-
}) : function(o, v) {
|
|
28
|
-
o["default"] = v;
|
|
29
|
-
});
|
|
30
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
-
var ownKeys = function(o) {
|
|
32
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
-
var ar = [];
|
|
34
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
-
return ar;
|
|
36
|
-
};
|
|
37
|
-
return ownKeys(o);
|
|
38
|
-
};
|
|
39
|
-
return function (mod) {
|
|
40
|
-
if (mod && mod.__esModule) return mod;
|
|
41
|
-
var result = {};
|
|
42
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
-
__setModuleDefault(result, mod);
|
|
44
|
-
return result;
|
|
45
|
-
};
|
|
46
|
-
})();
|
|
47
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
48
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
49
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
50
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
51
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
52
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
53
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
54
|
-
});
|
|
55
|
-
};
|
|
56
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
57
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
58
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
59
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
60
|
-
function step(op) {
|
|
61
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
62
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
63
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
64
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
65
|
-
switch (op[0]) {
|
|
66
|
-
case 0: case 1: t = op; break;
|
|
67
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
68
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
69
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
70
|
-
default:
|
|
71
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
72
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
73
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
74
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
75
|
-
if (t[2]) _.ops.pop();
|
|
76
|
-
_.trys.pop(); continue;
|
|
77
|
-
}
|
|
78
|
-
op = body.call(thisArg, _);
|
|
79
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
80
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
84
|
-
exports.mUgcParser = void 0;
|
|
85
|
-
var loader = __importStar(require("../bootstrap"));
|
|
86
|
-
var mUgcParser = /** @class */ (function () {
|
|
87
|
-
function mUgcParser() {
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* @function getUGC
|
|
91
|
-
* @description Extracts UGC codes and associated locations from a weather alert message.
|
|
92
|
-
*
|
|
93
|
-
* @param {string} message - The full text message to search within.
|
|
94
|
-
*/
|
|
95
|
-
mUgcParser.getUGC = function (message) {
|
|
96
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
97
|
-
var header, zones, locations, ugc;
|
|
98
|
-
return __generator(this, function (_a) {
|
|
99
|
-
switch (_a.label) {
|
|
100
|
-
case 0:
|
|
101
|
-
header = this.getHeader(message);
|
|
102
|
-
zones = this.getZones(header);
|
|
103
|
-
return [4 /*yield*/, this.getLocations(zones)];
|
|
104
|
-
case 1:
|
|
105
|
-
locations = _a.sent();
|
|
106
|
-
ugc = zones.length > 0 ? { zones: zones, locations: locations } : null;
|
|
107
|
-
return [2 /*return*/, ugc];
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
/**
|
|
113
|
-
* @function getHeader
|
|
114
|
-
* @description Extracts the UGC header from a weather alert message.
|
|
115
|
-
*
|
|
116
|
-
* @param {string} message - The full text message to search within.
|
|
117
|
-
*/
|
|
118
|
-
mUgcParser.getHeader = function (message) {
|
|
119
|
-
var start = message.search(new RegExp(loader.definitions.expressions.ugc1, "gimu"));
|
|
120
|
-
var end = message.substring(start).search(new RegExp(loader.definitions.expressions.ugc2, "gimu"));
|
|
121
|
-
var full = message.substring(start, start + end).replace(/\s+/g, '').slice(0, -1);
|
|
122
|
-
return full;
|
|
123
|
-
};
|
|
124
|
-
/**
|
|
125
|
-
* @function getLocations
|
|
126
|
-
* @description Retrieves location names from a database based on UGC zone codes.
|
|
127
|
-
*
|
|
128
|
-
* @param {Array} zones - An array of UGC zone codes.
|
|
129
|
-
*/
|
|
130
|
-
mUgcParser.getLocations = function (zones) {
|
|
131
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
132
|
-
var locations, i, id, statement, located;
|
|
133
|
-
return __generator(this, function (_a) {
|
|
134
|
-
switch (_a.label) {
|
|
135
|
-
case 0:
|
|
136
|
-
locations = [];
|
|
137
|
-
i = 0;
|
|
138
|
-
_a.label = 1;
|
|
139
|
-
case 1:
|
|
140
|
-
if (!(i < zones.length)) return [3 /*break*/, 4];
|
|
141
|
-
id = zones[i].trim();
|
|
142
|
-
statement = "SELECT location FROM shapefiles WHERE id = ?";
|
|
143
|
-
return [4 /*yield*/, loader.statics.db.prepare(statement).get(id)];
|
|
144
|
-
case 2:
|
|
145
|
-
located = _a.sent();
|
|
146
|
-
located != undefined ? locations.push(located.location) : locations.push(id);
|
|
147
|
-
_a.label = 3;
|
|
148
|
-
case 3:
|
|
149
|
-
i++;
|
|
150
|
-
return [3 /*break*/, 1];
|
|
151
|
-
case 4: return [2 /*return*/, Array.from(new Set(locations)).sort()];
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
};
|
|
156
|
-
/**
|
|
157
|
-
* @function getCoordinates
|
|
158
|
-
* @description Retrieves geographical coordinates from a database based on UGC zone codes.
|
|
159
|
-
*
|
|
160
|
-
* @param {Array} zones - An array of UGC zone codes.
|
|
161
|
-
*/
|
|
162
|
-
mUgcParser.getCoordinates = function (zones) {
|
|
163
|
-
var coordinates = [];
|
|
164
|
-
for (var i = 0; i < zones.length; i++) {
|
|
165
|
-
var id = zones[i].trim();
|
|
166
|
-
var statement = "SELECT geometry FROM shapefiles WHERE id = ?";
|
|
167
|
-
var located = loader.statics.db.prepare(statement).get(id);
|
|
168
|
-
if (located != undefined) {
|
|
169
|
-
var geometry = JSON.parse(located.geometry);
|
|
170
|
-
if ((geometry === null || geometry === void 0 ? void 0 : geometry.type) === 'Polygon') {
|
|
171
|
-
coordinates.push.apply(coordinates, geometry.coordinates[0].map(function (coord) { return [coord[0], coord[1]]; }));
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return coordinates;
|
|
177
|
-
};
|
|
178
|
-
/**
|
|
179
|
-
* @function getZones
|
|
180
|
-
* @description Parses the UGC header to extract individual UGC zone codes, handling ranges and formats.
|
|
181
|
-
*
|
|
182
|
-
* @param {string} header - The UGC header string.
|
|
183
|
-
*/
|
|
184
|
-
mUgcParser.getZones = function (header) {
|
|
185
|
-
var ugcSplit = header.split('-');
|
|
186
|
-
var zones = [];
|
|
187
|
-
var state = ugcSplit[0].substring(0, 2);
|
|
188
|
-
var format = ugcSplit[0].substring(2, 3);
|
|
189
|
-
for (var i = 0; i < ugcSplit.length; i++) {
|
|
190
|
-
if (/^[A-Z]/.test(ugcSplit[i])) {
|
|
191
|
-
state = ugcSplit[i].substring(0, 2);
|
|
192
|
-
if (ugcSplit[i].includes('>')) {
|
|
193
|
-
var _a = ugcSplit[i].split('>'), start = _a[0], end = _a[1], startNum = parseInt(start.substring(3), 10), endNum = parseInt(end, 10);
|
|
194
|
-
for (var j = startNum; j <= endNum; j++)
|
|
195
|
-
zones.push("".concat(state).concat(format).concat(j.toString().padStart(3, '0')));
|
|
196
|
-
}
|
|
197
|
-
else
|
|
198
|
-
zones.push(ugcSplit[i]);
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
if (ugcSplit[i].includes('>')) {
|
|
202
|
-
var _b = ugcSplit[i].split('>'), start = _b[0], end = _b[1], startNum = parseInt(start, 10), endNum = parseInt(end, 10);
|
|
203
|
-
for (var j = startNum; j <= endNum; j++)
|
|
204
|
-
zones.push("".concat(state).concat(format).concat(j.toString().padStart(3, '0')));
|
|
205
|
-
}
|
|
206
|
-
else
|
|
207
|
-
zones.push("".concat(state).concat(format).concat(ugcSplit[i]));
|
|
208
|
-
}
|
|
209
|
-
return zones.filter(function (item) { return item !== ''; });
|
|
210
|
-
};
|
|
211
|
-
return mUgcParser;
|
|
212
|
-
}());
|
|
213
|
-
exports.mUgcParser = mUgcParser;
|
|
214
|
-
exports.default = mUgcParser;
|
package/dist/src/vtec.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
_ _ __ __
|
|
4
|
-
/\ | | | | (_) \ \ / /
|
|
5
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
6
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
7
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
8
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
9
|
-
| |
|
|
10
|
-
|_|
|
|
11
|
-
|
|
12
|
-
Written by: k3yomi@GitHub
|
|
13
|
-
*/
|
|
14
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
-
}
|
|
20
|
-
Object.defineProperty(o, k2, desc);
|
|
21
|
-
}) : (function(o, m, k, k2) {
|
|
22
|
-
if (k2 === undefined) k2 = k;
|
|
23
|
-
o[k2] = m[k];
|
|
24
|
-
}));
|
|
25
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
-
}) : function(o, v) {
|
|
28
|
-
o["default"] = v;
|
|
29
|
-
});
|
|
30
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
-
var ownKeys = function(o) {
|
|
32
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
-
var ar = [];
|
|
34
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
-
return ar;
|
|
36
|
-
};
|
|
37
|
-
return ownKeys(o);
|
|
38
|
-
};
|
|
39
|
-
return function (mod) {
|
|
40
|
-
if (mod && mod.__esModule) return mod;
|
|
41
|
-
var result = {};
|
|
42
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
-
__setModuleDefault(result, mod);
|
|
44
|
-
return result;
|
|
45
|
-
};
|
|
46
|
-
})();
|
|
47
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
-
exports.mVtecParser = void 0;
|
|
49
|
-
var loader = __importStar(require("../bootstrap"));
|
|
50
|
-
var mVtecParser = /** @class */ (function () {
|
|
51
|
-
function mVtecParser() {
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* @function getVTEC
|
|
55
|
-
* @description Extracts VTEC information from a weather alert message.
|
|
56
|
-
*
|
|
57
|
-
* @param {string} message - The full text message to search within.
|
|
58
|
-
* @param {object} attributes - Additional attributes such as issue time.
|
|
59
|
-
*/
|
|
60
|
-
mVtecParser.getVTEC = function (message, attributes) {
|
|
61
|
-
var vtecs = []; // Array to hold all VTEC objects (Alerts CAN have multiple VTECs so we need to account for that)
|
|
62
|
-
var matches = message.match(new RegExp(loader.definitions.expressions.vtec, 'g'));
|
|
63
|
-
if (!matches)
|
|
64
|
-
return null; // No VTEC Found
|
|
65
|
-
for (var i = 0; i < matches.length; i++) {
|
|
66
|
-
var vtec = matches[i];
|
|
67
|
-
var parts = vtec.split(".");
|
|
68
|
-
var dates = parts[6].split("-");
|
|
69
|
-
vtecs.push({
|
|
70
|
-
handle: vtec,
|
|
71
|
-
tracking: this.getTracking(parts),
|
|
72
|
-
event: this.getEventName(parts),
|
|
73
|
-
status: this.getEventStatus(parts),
|
|
74
|
-
wmo: message.match(new RegExp(loader.definitions.expressions.wmo, 'gimu')),
|
|
75
|
-
expires: this.getEventExpires(dates),
|
|
76
|
-
issued: attributes.issue
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
return vtecs;
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* @function getTracking
|
|
83
|
-
* @description Constructs a tracking code from VTEC parts.
|
|
84
|
-
*
|
|
85
|
-
* @param {Array} args - An array of VTEC parts.
|
|
86
|
-
*/
|
|
87
|
-
mVtecParser.getTracking = function (args) {
|
|
88
|
-
return "".concat(args[2], "-").concat(args[3], "-").concat(args[4], "-").concat(args[5]);
|
|
89
|
-
};
|
|
90
|
-
/**
|
|
91
|
-
* @function getEventName
|
|
92
|
-
* @description Constructs an event name from VTEC parts.
|
|
93
|
-
*
|
|
94
|
-
* @param {Array} args - An array of VTEC parts.
|
|
95
|
-
*/
|
|
96
|
-
mVtecParser.getEventName = function (args) {
|
|
97
|
-
return "".concat(loader.definitions.events[args[3]], " ").concat(loader.definitions.actions[args[4]]);
|
|
98
|
-
};
|
|
99
|
-
/**
|
|
100
|
-
* @function getEventStatus
|
|
101
|
-
* @description Retrieves the event status from VTEC parts.
|
|
102
|
-
*
|
|
103
|
-
* @param {Array} args - An array of VTEC parts.
|
|
104
|
-
*/
|
|
105
|
-
mVtecParser.getEventStatus = function (args) {
|
|
106
|
-
return loader.definitions.status[args[1]];
|
|
107
|
-
};
|
|
108
|
-
/**
|
|
109
|
-
* @function getEventExpires
|
|
110
|
-
* @description Constructs an expiration date-time string from VTEC date parts.
|
|
111
|
-
*
|
|
112
|
-
* @param {Array} args - An array containing the start and end date-time strings.
|
|
113
|
-
*/
|
|
114
|
-
mVtecParser.getEventExpires = function (args) {
|
|
115
|
-
if (args[1] == "000000T0000Z")
|
|
116
|
-
return "Invalid Date Format";
|
|
117
|
-
var expires = "".concat(new Date().getFullYear().toString().substring(0, 2)).concat(args[1].substring(0, 2), "-").concat(args[1].substring(2, 4), "-").concat(args[1].substring(4, 6), "T").concat(args[1].substring(7, 9), ":").concat(args[1].substring(9, 11), ":00");
|
|
118
|
-
var local = new Date(new Date(expires).getTime() - 4 * 60 * 60000);
|
|
119
|
-
var pad = function (n) { return n.toString().padStart(2, '0'); };
|
|
120
|
-
return "".concat(local.getFullYear(), "-").concat(pad(local.getMonth() + 1), "-").concat(pad(local.getDate()), "T").concat(pad(local.getHours()), ":").concat(pad(local.getMinutes()), ":00.000-04:00");
|
|
121
|
-
};
|
|
122
|
-
return mVtecParser;
|
|
123
|
-
}());
|
|
124
|
-
exports.mVtecParser = mVtecParser;
|
|
125
|
-
exports.default = mVtecParser;
|