@dangahagan/weather-mcp 1.35.11 → 1.35.12

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 CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://badge.fury.io/js/@dangahagan%2Fweather-mcp.svg)](https://www.npmjs.com/package/@dangahagan/weather-mcp)
4
4
  [![MCP Registry](https://img.shields.io/badge/MCP-Registry-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.dgahagan/weather-mcp)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
- [![Tests](https://img.shields.io/badge/tests-4%2C910%20passing-brightgreen)](./docs/testing/TEST_SUITE_README.md)
6
+ [![Tests](https://img.shields.io/badge/tests-4%2C968%20passing-brightgreen)](./docs/testing/TEST_SUITE_README.md)
7
7
  [![Node](https://img.shields.io/badge/node-%3E%3D18-339933?logo=node.js&logoColor=white)](https://nodejs.org)
8
8
 
9
9
  **Give your AI assistant real weather data — 17 tools, zero API keys, zero signup, zero cost.**
@@ -58,7 +58,7 @@ Choose this one if you want:
58
58
 
59
59
  - **Genuinely free** — every data source is a free public API. No trial that expires, no credit card, no rate-limited "free tier" bait.
60
60
  - **No API keys** — install to first forecast in under a minute. Nothing to configure, nothing to leak into a repo. ([Four optional keys](#optional-api-keys) add extras if you want them; the default configuration needs none.)
61
- - **Fully open source** — MIT licensed, readable TypeScript, 4,910 tests. Audit it, fork it, fix it.
61
+ - **Fully open source** — MIT licensed, readable TypeScript, 4,968 tests. Audit it, fork it, fix it.
62
62
  - **Privacy-respecting** — your queries go directly from your machine to public weather APIs. No middleman server, and no telemetry unless you opt in.
63
63
  - **Breadth** — 17 tools covering weather, safety hazards (lightning, floods, wildfires), marine conditions, air quality, and historical data back to 1940. Most weather MCPs stop at forecasts.
64
64
 
@@ -394,7 +394,7 @@ Being honest about what free public data can and can't do:
394
394
  ```bash
395
395
  npm run build # Compile TypeScript
396
396
  npm run dev # Run in development mode
397
- npm test # Run all 4,910 tests
397
+ npm test # Run all 4,968 tests
398
398
  npm run test:coverage # Coverage report
399
399
  npm run audit # Dependency vulnerability scan
400
400
  ```
@@ -2,8 +2,9 @@
2
2
  * Handler for get_wildfire_info tool.
3
3
  *
4
4
  * Routed by country (see docs/plans/global-wildfire-plan.md D1/D2):
5
- * US → NIFC/WFIGS named incidents (the original path, byte-identical
6
- * output), elsewhere → NASA FIRMS satellite fire detections (VIIRS, near
5
+ * US → NIFC/WFIGS named incidents, each measured to its mapped perimeter
6
+ * (the reported point of origin only when no usable perimeter is
7
+ * published), elsewhere → NASA FIRMS satellite fire detections (VIIRS, near
7
8
  * real-time, global). An explicit `source` forces the branch; there is
8
9
  * deliberately no cross-fallback — managed incidents (names, acreage,
9
10
  * containment) and satellite heat detections are different claims, and
@@ -1 +1 @@
1
- {"version":3,"file":"wildfireHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/wildfireHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AA4B5D,KAAK,aAAa,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAqF3F,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,CAAC,EAAE,YAAY,EAC3B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,aAAa,CAAC,CAyGxB"}
1
+ {"version":3,"file":"wildfireHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/wildfireHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AA6B5D,KAAK,aAAa,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AA+J3F,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,CAAC,EAAE,YAAY,EAC3B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,aAAa,CAAC,CAyGxB"}
@@ -2,8 +2,9 @@
2
2
  * Handler for get_wildfire_info tool.
3
3
  *
4
4
  * Routed by country (see docs/plans/global-wildfire-plan.md D1/D2):
5
- * US → NIFC/WFIGS named incidents (the original path, byte-identical
6
- * output), elsewhere → NASA FIRMS satellite fire detections (VIIRS, near
5
+ * US → NIFC/WFIGS named incidents, each measured to its mapped perimeter
6
+ * (the reported point of origin only when no usable perimeter is
7
+ * published), elsewhere → NASA FIRMS satellite fire detections (VIIRS, near
7
8
  * real-time, global). An explicit `source` forces the branch; there is
8
9
  * deliberately no cross-fallback — managed incidents (names, acreage,
9
10
  * containment) and satellite heat detections are different claims, and
@@ -21,6 +22,7 @@ import { resolveCountryCode, resolveLocationAsync, prependLocationLine } from '.
21
22
  import { validateDetail } from '../utils/validation.js';
22
23
  import { guessTimezoneFromCoords, formatObservationAge } from '../utils/timezone.js';
23
24
  import { calculateDistance, kmToMiles } from '../utils/distance.js';
25
+ import { distanceToPerimeterKm } from '../utils/firePerimeter.js';
24
26
  import { displayValue } from '../utils/displayBanding.js';
25
27
  import { isInUS } from '../utils/geography.js';
26
28
  import { logger } from '../utils/logger.js';
@@ -101,6 +103,81 @@ function formatDistanceFigure(km) {
101
103
  const shownKm = displayValue(km, 1);
102
104
  return `${shownKm.toFixed(1)} km (${kmToMiles(shownKm).toFixed(2)} mi)`;
103
105
  }
106
+ /**
107
+ * Parse NIFC's reported point of origin, or `null` when either coordinate is
108
+ * unusable.
109
+ *
110
+ * Usable means finite, in coordinate range, and **non-zero**. No incident in
111
+ * NIFC's covered set (US, PR, VI, GU) can sit on the equator or the prime
112
+ * meridian, so a `0` is a second "not recorded" encoding beside `null`
113
+ * (GOTCHAS G56), not a coordinate. Treating it as one would measure the fire
114
+ * thousands of km away and drop it at the radius filter; treating it as absent
115
+ * keeps the fire listed as unlocated, the cautious direction.
116
+ */
117
+ function parseOrigin(rawLat, rawLon) {
118
+ if (typeof rawLat !== 'number' || typeof rawLon !== 'number')
119
+ return null;
120
+ if (!Number.isFinite(rawLat) || !Number.isFinite(rawLon))
121
+ return null;
122
+ if (rawLat === 0 || rawLon === 0)
123
+ return null;
124
+ if (rawLat < -90 || rawLat > 90 || rawLon < -180 || rawLon > 180)
125
+ return null;
126
+ return { latitude: rawLat, longitude: rawLon };
127
+ }
128
+ /**
129
+ * The first acreage field that is a finite number greater than zero, or `null`
130
+ * meaning "NIFC published no size". Zero is absent here, unlike containment: a
131
+ * mapped perimeter of zero area is not a reading, it is a second "not
132
+ * recorded" encoding (GOTCHAS G56). The old `|| 0` printed `0 acres`.
133
+ */
134
+ function parseAcres(candidates) {
135
+ for (const raw of candidates) {
136
+ if (typeof raw === 'number' && Number.isFinite(raw) && raw > 0)
137
+ return raw;
138
+ }
139
+ return null;
140
+ }
141
+ /**
142
+ * NIFC's discovery timestamp (epoch ms) as a `Date`, or `null` meaning "NIFC
143
+ * published no discovery date". Epoch `0` is absent, not 1 January 1970: no
144
+ * current incident was discovered then. A finite value outside the `Date`
145
+ * range (e.g. `Number.MAX_VALUE`) is absent too. The old fallback was
146
+ * `new Date()`, which printed today's date and `Days Active: 0`.
147
+ */
148
+ function parseDiscoveryDate(raw) {
149
+ if (typeof raw !== 'number' || !Number.isFinite(raw) || raw <= 0)
150
+ return null;
151
+ const date = new Date(raw);
152
+ return Number.isNaN(date.getTime()) ? null : date;
153
+ }
154
+ /** The line beneath `**Distance:**` naming what the distance was measured to. */
155
+ function formatDistanceBasisLine(fire) {
156
+ switch (fire.distanceBasis) {
157
+ case 'perimeter':
158
+ return fire.distance === 0
159
+ ? `**Measured to:** the mapped fire perimeter — this location is inside it\n`
160
+ : `**Measured to:** nearest edge of the mapped fire perimeter\n`;
161
+ case 'origin':
162
+ return `**Measured to:** reported point of origin (NIFC published no usable perimeter)\n`;
163
+ case 'unlocated':
164
+ return `**Measured to:** not available — NIFC published neither a perimeter nor a point of origin\n`;
165
+ }
166
+ }
167
+ /**
168
+ * The Safety Assessment line for wildfires with no published location. They
169
+ * select no tier, because a tier is a claim about a distance, so the section
170
+ * must say they exist and that it is not an all-clear.
171
+ */
172
+ function formatUnlocatedWildfireLine(names) {
173
+ const n = names.length;
174
+ const shown = names.slice(0, 5).join(', ');
175
+ const more = n > 5 ? ` and ${n - 5} more` : '';
176
+ const one = n === 1;
177
+ return `⚠️ ${n} wildfire${one ? '' : 's'} in this search area ${one ? 'has' : 'have'} no published location (${shown}${more}). ` +
178
+ `${one ? 'Its' : 'Their'} distance is unknown and is not reflected in any tier above. ` +
179
+ `Do not read this section as an all-clear.\n`;
180
+ }
104
181
  export async function handleGetWildfireInfo(args, nifcService, locationStore, geocodingService, firmsService, nominatimService) {
105
182
  // Resolve location from coordinates, a saved location name, or a geocoded city name
106
183
  const resolved = await resolveLocationAsync(args, locationStore, geocodingService);
@@ -189,11 +266,12 @@ export async function handleGetWildfireInfo(args, nifcService, locationStore, ge
189
266
  return result;
190
267
  }
191
268
  /**
192
- * The original US path: NIFC/WFIGS named incidents with acreage,
193
- * containment, and the containment-aware safety assessment. Byte-identical
194
- * to the pre-global behavior (locked by tests/unit/wildfire-handler.test.ts
195
- * passing unedited). `failed` is true only when the catch replaced the fire
196
- * list with the error block.
269
+ * The US path: NIFC/WFIGS named incidents with acreage, containment, and the
270
+ * containment-aware safety assessment. Each fire is measured to its mapped
271
+ * perimeter (zero inside it), else to its reported point of origin, else it is
272
+ * listed as unlocated with no distance; the line beneath `**Distance:**` names
273
+ * which. `failed` is true only when the catch replaced the fire list with the
274
+ * error block.
197
275
  */
198
276
  async function formatNIFCWildfire(nifcService, latitude, longitude, radius, detail,
199
277
  /**
@@ -221,7 +299,82 @@ outsideCoverage = false) {
221
299
  // Query NIFC for fire perimeters
222
300
  const response = await nifcService.queryFirePerimeters(west, south, east, north);
223
301
  const features = response.features || [];
224
- if (features.length === 0 && outsideCoverage) {
302
+ // Measure and filter first, then branch on the filtered list (D3): a
303
+ // response whose every feature lies beyond the radius is the no-fires
304
+ // case (or the coverage disclosure), never a "Found 0 active fire" count.
305
+ const firesWithDistance = [];
306
+ for (const feature of features) {
307
+ const attrs = feature.attributes;
308
+ // Basis order: mapped perimeter → reported point of origin → unlocated.
309
+ // A fire is an area; the origin is a coordinate entered once and is
310
+ // sometimes far from the fire, so it is only the fallback. `null` is
311
+ // a refusal to measure, never a number (GOTCHAS G68).
312
+ const origin = parseOrigin(attrs.attr_InitialLatitude, attrs.attr_InitialLongitude);
313
+ const perimeterKm = distanceToPerimeterKm(latitude, longitude, feature.geometry?.rings);
314
+ let fireDistance;
315
+ let distanceBasis;
316
+ if (perimeterKm !== null) {
317
+ fireDistance = perimeterKm;
318
+ distanceBasis = 'perimeter';
319
+ }
320
+ else if (origin !== null) {
321
+ fireDistance = calculateDistance(latitude, longitude, origin.latitude, origin.longitude);
322
+ distanceBasis = 'origin';
323
+ }
324
+ else {
325
+ fireDistance = null;
326
+ distanceBasis = 'unlocated';
327
+ }
328
+ // Keep a located fire within the radius, and every unlocated fire:
329
+ // an unknown distance is not evidence that the fire is far away.
330
+ if (fireDistance === null || fireDistance <= radius) {
331
+ if (fireDistance === null) {
332
+ logger.warn('NIFC published no usable location for an incident', {
333
+ incident: attrs.poly_IncidentName
334
+ });
335
+ }
336
+ // Parsed before the literal so the warn can be guarded on the result.
337
+ // Warn only when the value is present but unusable — a plain
338
+ // null/undefined is the normal wire shape for a quarter of live rows,
339
+ // and warning on it would emit ~50 lines per request on a healthy
340
+ // feed. This is a data-quality event, not a security one, so no
341
+ // securityEvent flag (unlike the FIRMS row cap below).
342
+ const containment = parseContainment(attrs.attr_PercentContained);
343
+ if (attrs.attr_PercentContained != null && containment === null) {
344
+ logger.warn('NIFC published an unusable containment value', {
345
+ incident: attrs.poly_IncidentName,
346
+ value: attrs.attr_PercentContained
347
+ });
348
+ }
349
+ const fireInfo = {
350
+ name: attrs.poly_IncidentName || 'Unknown Fire',
351
+ distance: fireDistance,
352
+ distanceBasis,
353
+ acres: parseAcres([attrs.poly_GISAcres, attrs.attr_FinalAcres, attrs.attr_CalculatedAcres]),
354
+ containment,
355
+ discoveryDate: parseDiscoveryDate(attrs.attr_FireDiscoveryDateTime),
356
+ latitude: origin?.latitude,
357
+ longitude: origin?.longitude,
358
+ state: attrs.attr_POOState,
359
+ county: attrs.attr_POOCounty,
360
+ city: attrs.attr_POOCity,
361
+ type: attrs.attr_IncidentTypeCategory === 'WF' ? 'Wildfire' :
362
+ attrs.attr_IncidentTypeCategory === 'RX' ? 'Prescribed Fire' : 'Unknown',
363
+ status: attrs.poly_FeatureStatus || 'Active'
364
+ };
365
+ firesWithDistance.push({ fire: fireInfo, distance: fireDistance });
366
+ }
367
+ }
368
+ // Sort by distance (nearest first), unlocated fires last. The sort is
369
+ // stable, so unlocated fires keep the upstream order among themselves.
370
+ firesWithDistance.sort((a, b) => {
371
+ if (a.distance === null)
372
+ return b.distance === null ? 0 : 1;
373
+ if (b.distance === null)
374
+ return -1;
375
+ return a.distance - b.distance;
376
+ });
377
+ if (firesWithDistance.length === 0 && outsideCoverage) {
225
378
  // Forced `source: "nifc"` outside NIFC coverage. An empty result here
226
379
  // means "this authority does not track fires at this location", which
227
380
  // is emphatically not an all-clear — so no ✅ and no "currently clear"
@@ -234,7 +387,7 @@ outsideCoverage = false) {
234
387
  output += `Use \`source: "firms"\` (or omit \`source\`) for NASA FIRMS satellite fire `;
235
388
  output += `detections, which are global.\n`;
236
389
  }
237
- else if (features.length === 0) {
390
+ else if (firesWithDistance.length === 0) {
238
391
  output += `✅ **No active wildfires found within ${radius} km**\n\n`;
239
392
  if (response.exceededTransferLimit) {
240
393
  output += `*Results may be incomplete — the fire data service truncated the response.*\n\n`;
@@ -243,57 +396,6 @@ outsideCoverage = false) {
243
396
  output += `**Note:** This data includes active wildfires and prescribed burns tracked by the National Interagency Fire Center. Small fires or very recent ignitions may not yet be included.\n`;
244
397
  }
245
398
  else {
246
- // Process and filter fires by actual distance
247
- const firesWithDistance = [];
248
- for (const feature of features) {
249
- const attrs = feature.attributes;
250
- // Calculate distance from center point to fire origin
251
- let fireDistance = radius; // default if no coordinates
252
- if (attrs.attr_InitialLatitude && attrs.attr_InitialLongitude) {
253
- fireDistance = calculateDistance(latitude, longitude, attrs.attr_InitialLatitude, attrs.attr_InitialLongitude);
254
- }
255
- else if (feature.geometry?.rings?.[0]?.[0]) {
256
- // Use first point of fire perimeter if no origin coordinates
257
- const [fireLon, fireLat] = feature.geometry.rings[0][0];
258
- fireDistance = calculateDistance(latitude, longitude, fireLat, fireLon);
259
- }
260
- // Only include fires within radius
261
- if (fireDistance <= radius) {
262
- // Parsed before the literal so the warn can be guarded on the result.
263
- // Warn only when the value is present but unusable — a plain
264
- // null/undefined is the normal wire shape for a quarter of live rows,
265
- // and warning on it would emit ~50 lines per request on a healthy
266
- // feed. This is a data-quality event, not a security one, so no
267
- // securityEvent flag (unlike the FIRMS row cap below).
268
- const containment = parseContainment(attrs.attr_PercentContained);
269
- if (attrs.attr_PercentContained != null && containment === null) {
270
- logger.warn('NIFC published an unusable containment value', {
271
- incident: attrs.poly_IncidentName,
272
- value: attrs.attr_PercentContained
273
- });
274
- }
275
- const fireInfo = {
276
- name: attrs.poly_IncidentName || 'Unknown Fire',
277
- distance: fireDistance,
278
- acres: attrs.poly_GISAcres || attrs.attr_FinalAcres || attrs.attr_CalculatedAcres || 0,
279
- containment,
280
- discoveryDate: attrs.attr_FireDiscoveryDateTime
281
- ? new Date(attrs.attr_FireDiscoveryDateTime)
282
- : new Date(),
283
- latitude: attrs.attr_InitialLatitude,
284
- longitude: attrs.attr_InitialLongitude,
285
- state: attrs.attr_POOState,
286
- county: attrs.attr_POOCounty,
287
- city: attrs.attr_POOCity,
288
- type: attrs.attr_IncidentTypeCategory === 'WF' ? 'Wildfire' :
289
- attrs.attr_IncidentTypeCategory === 'RX' ? 'Prescribed Fire' : 'Unknown',
290
- status: attrs.poly_FeatureStatus || 'Active'
291
- };
292
- firesWithDistance.push({ fire: fireInfo, distance: fireDistance });
293
- }
294
- }
295
- // Sort by distance (nearest first)
296
- firesWithDistance.sort((a, b) => a.distance - b.distance);
297
399
  const fireCount = firesWithDistance.length;
298
400
  const wildfireCount = firesWithDistance.filter(f => f.fire.type === 'Wildfire').length;
299
401
  const prescribedCount = firesWithDistance.filter(f => f.fire.type === 'Prescribed Fire').length;
@@ -313,8 +415,8 @@ outsideCoverage = false) {
313
415
  // remainder note stays accurate at every level, including full.
314
416
  const maxFiresToShow = detail === 'full' ? 25 : 5;
315
417
  const firesToShow = firesWithDistance.slice(0, maxFiresToShow);
316
- for (const { fire, distance } of firesToShow) {
317
- output += formatFireDetails(fire, distance, timezone);
418
+ for (const { fire } of firesToShow) {
419
+ output += formatFireDetails(fire, timezone);
318
420
  }
319
421
  if (firesWithDistance.length > maxFiresToShow) {
320
422
  const remaining = firesWithDistance.length - maxFiresToShow;
@@ -343,7 +445,12 @@ outsideCoverage = false) {
343
445
  // old `|| 0` made it: an unknown containment is not evidence of
344
446
  // containment. displayValue does not accept null, so the case is
345
447
  // spelled out rather than coerced.
346
- const nearestWildfire = wildfires.find(f => f.fire.containment === null || displayValue(f.fire.containment, 0) < 100);
448
+ const isDisplayedUncontained = (f) => f.fire.containment === null || displayValue(f.fire.containment, 0) < 100;
449
+ // Only a located fire can select a tier: a tier is a claim about a
450
+ // distance, and an unlocated fire has none (GOTCHAS G68).
451
+ const nearestWildfire = wildfires.find((f) => f.distance !== null && isDisplayedUncontained(f));
452
+ const unlocatedWildfires = wildfires.filter(f => f.distance === null);
453
+ const unlocatedUncontained = unlocatedWildfires.some(isDisplayedUncontained);
347
454
  if (wildfires.length > 0) {
348
455
  output += `\n## Safety Assessment\n\n`;
349
456
  if (nearestWildfire) {
@@ -360,8 +467,11 @@ outsideCoverage = false) {
360
467
  // them, do not assume symmetry. And because the sentence printed
361
468
  // beneath says "within 5 km", which includes 5.0.
362
469
  const dist = displayValue(nearestWildfire.distance, 1);
470
+ // Located fires sort first, so whenever a located nearestWildfire
471
+ // exists, wildfires[0] is located too; the null check narrows the
472
+ // type and is never the deciding term.
363
473
  const nearestOverall = wildfires[0];
364
- if (nearestOverall !== nearestWildfire) {
474
+ if (nearestOverall !== nearestWildfire && nearestOverall.distance !== null) {
365
475
  output += `ℹ️ Nearest fire (${nearestOverall.fire.name}, ${nearestOverall.distance.toFixed(1)} km) is 100% contained and excluded from the danger assessment.\n\n`;
366
476
  }
367
477
  if (dist <= 5) {
@@ -387,7 +497,7 @@ outsideCoverage = false) {
387
497
  output += `- Air quality may be affected by smoke\n`;
388
498
  }
389
499
  }
390
- else {
500
+ else if (!unlocatedUncontained) {
391
501
  // Wildfires are present but every one is 100% contained. Still
392
502
  // surface the section — omitting it would hide that fires exist
393
503
  // nearby — pinned at the lowest (AWARENESS) tier.
@@ -396,6 +506,14 @@ outsideCoverage = false) {
396
506
  output += `- Stay informed about fire progression\n`;
397
507
  output += `- Air quality may be affected by smoke\n`;
398
508
  }
509
+ // Otherwise an unlocated wildfire is not displayed-contained: no
510
+ // tier and no all-contained line. The line below names it.
511
+ if (unlocatedWildfires.length > 0) {
512
+ const blockAbove = nearestWildfire !== undefined || !unlocatedUncontained;
513
+ if (blockAbove)
514
+ output += `\n`;
515
+ output += formatUnlocatedWildfireLine(unlocatedWildfires.map(f => f.fire.name));
516
+ }
399
517
  output += `\n`;
400
518
  }
401
519
  }
@@ -658,13 +776,16 @@ function formatClusterDetails(cluster, ordinal) {
658
776
  /**
659
777
  * Format detailed information for a single wildfire
660
778
  */
661
- function formatFireDetails(fire, distance, timezone) {
779
+ function formatFireDetails(fire, timezone) {
662
780
  let output = `## ${fire.name}\n\n`;
663
781
  // Fire type emoji
664
782
  const typeEmoji = fire.type === 'Wildfire' ? '🔥' :
665
783
  fire.type === 'Prescribed Fire' ? '🟦' : '⚪';
666
784
  output += `**Type:** ${typeEmoji} ${fire.type}\n`;
667
- output += `**Distance:** ${formatDistanceFigure(distance)}\n`;
785
+ output += fire.distance === null
786
+ ? `**Distance:** not reported\n`
787
+ : `**Distance:** ${formatDistanceFigure(fire.distance)}\n`;
788
+ output += formatDistanceBasisLine(fire);
668
789
  if (fire.state) {
669
790
  let location = fire.state;
670
791
  if (fire.county)
@@ -673,22 +794,34 @@ function formatFireDetails(fire, distance, timezone) {
673
794
  location += ` near ${fire.city}`;
674
795
  output += `**Location:** ${location}\n`;
675
796
  }
676
- if (fire.latitude && fire.longitude) {
677
- output += `**Coordinates:** ${fire.latitude.toFixed(4)}, ${fire.longitude.toFixed(4)}\n`;
797
+ // Set only when parseOrigin found both coordinates usable. Labelled as the
798
+ // reported origin because, once distance is measured to the perimeter, an
799
+ // unlabelled coordinate far from the printed distance reads as a contradiction.
800
+ if (fire.latitude !== undefined && fire.longitude !== undefined) {
801
+ output += `**Point of Origin (reported):** ${fire.latitude.toFixed(4)}, ${fire.longitude.toFixed(4)}\n`;
678
802
  }
679
803
  output += `\n`;
680
804
  // Fire statistics
681
805
  output += `### Status\n`;
682
- output += `**Size:** ${fire.acres.toFixed(0)} acres (${(fire.acres * 0.404686).toFixed(0)} hectares)\n`;
806
+ output += fire.acres === null
807
+ ? `**Size:** not reported\n`
808
+ : `**Size:** ${fire.acres.toFixed(0)} acres (${(fire.acres * 0.404686).toFixed(0)} hectares)\n`;
683
809
  // The bar is the completed tenths of the printed figure: a full bar means
684
810
  // the printed figure is `100%`, an empty bar means it is below `10%`, and
685
811
  // each cell is a completed ten percent. A fire NIFC published no usable
686
812
  // containment for reads `not reported`, with no bar at all.
687
813
  output += formatContainmentLine(fire.containment);
688
- const now = new Date();
689
- const daysActive = Math.floor((now.getTime() - fire.discoveryDate.getTime()) / (1000 * 60 * 60 * 24));
690
- output += `**Discovery Date:** ${fire.discoveryDate.toLocaleDateString('en-US', { timeZone: timezone })}\n`;
691
- output += `**Days Active:** ${daysActive}\n`;
814
+ // A day count derived from a date nobody published has no honest value, so
815
+ // Days Active is omitted, not zeroed, when the date is absent.
816
+ if (fire.discoveryDate === null) {
817
+ output += `**Discovery Date:** not reported\n`;
818
+ }
819
+ else {
820
+ const now = new Date();
821
+ const daysActive = Math.floor((now.getTime() - fire.discoveryDate.getTime()) / (1000 * 60 * 60 * 24));
822
+ output += `**Discovery Date:** ${fire.discoveryDate.toLocaleDateString('en-US', { timeZone: timezone })}\n`;
823
+ output += `**Days Active:** ${daysActive}\n`;
824
+ }
692
825
  output += `\n---\n\n`;
693
826
  return output;
694
827
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wildfireHandler.js","sourceRoot":"","sources":["../../src/handlers/wildfireHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wildfireHandler.js","sourceRoot":"","sources":["../../src/handlers/wildfireHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAgB,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAI3E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC7G,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,2BAA2B,CAAC;AAoBnC;;;;;;;;;;;;;GAaG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,gBAAgB,CAAC,GAAY;IACpC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG;QAC9E,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,qBAAqB,CAAC,WAA0B;IACvD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IAC1D,OAAO,oBAAoB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,oBAAoB,CAAC,EAAU;IACtC,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1E,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,WAAW,CAAC,MAAe,EAAE,MAAe;IACnD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,UAAqB;IACvC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,iFAAiF;AACjF,SAAS,uBAAuB,CAAC,IAAkB;IACjD,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,QAAQ,KAAK,CAAC;gBACxB,CAAC,CAAC,2EAA2E;gBAC7E,CAAC,CAAC,8DAA8D,CAAC;QACrE,KAAK,QAAQ;YACX,OAAO,kFAAkF,CAAC;QAC5F,KAAK,WAAW;YACd,OAAO,6FAA6F,CAAC;IACzG,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,2BAA2B,CAAC,KAAe;IAClD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,wBAAwB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,2BAA2B,KAAK,GAAG,IAAI,KAAK;QAC9H,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,+DAA+D;QACvF,6CAA6C,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAa,EACb,WAAwB,EACxB,aAA4B,EAC5B,gBAAkC,EAClC,YAA2B,EAC3B,gBAAmC;IAEnC,oFAAoF;IACpF,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,IAAoB,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACnG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;IAEzC,6EAA6E;IAC7E,MAAM,MAAM,GAAG,cAAc,CAAE,IAAqB,EAAE,MAAM,CAAC,CAAC;IAE9D,4BAA4B;IAC5B,IAAI,MAAM,GAAI,IAAqB,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC,iBAAiB;IACrE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrE,MAAM,GAAG,GAAG,CAAC;IACf,CAAC;IACD,kCAAkC;IAClC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAE5C,wEAAwE;IACxE,gEAAgE;IAChE,IAAI,QAAQ,GAAI,IAAqB,EAAE,SAAS,IAAI,CAAC,CAAC;IACtD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3E,QAAQ,GAAG,CAAC,CAAC;IACf,CAAC;IACD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1D,oEAAoE;IACpE,MAAM,SAAS,GAAI,IAAqB,EAAE,MAAM,CAAC;IACjD,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAElF,kCAAkC;IAClC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,QAAiB,CAAC;IACtB,wEAAwE;IACxE,wEAAwE;IACxE,+CAA+C;IAC/C,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAEhC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,kEAAkE;QAClE,sEAAsE;QACtE,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,qEAAqE;QACrE,wEAAwE;QACxE,oEAAoE;QACpE,sEAAsE;QACtE,QAAQ,GAAG,KAAK,CAAC;QACjB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,kBAAkB,CAC5D,QAAQ,CAAC,YAAY,EACrB,QAAQ,EACR,SAAS,EACT,gBAAgB,CACjB,CAAC;QACF,mBAAmB,GAAG,YAAY,CAAC;QACnC,mBAAmB,GAAG,WAAW;YAC/B,CAAC,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC;YAC1C,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,kBAAkB,CAC5D,QAAQ,CAAC,YAAY,EACrB,QAAQ,EACR,SAAS,EACT,gBAAgB,CACjB,CAAC;QACF,mBAAmB,GAAG,YAAY,CAAC;QAEnC,iEAAiE;QACjE,+DAA+D;QAC/D,kBAAkB;QAClB,IAAI,WAAW,EAAE,CAAC;YAChB,+DAA+D;YAC/D,kEAAkE;YAClE,oEAAoE;YACpE,iCAAiC;YACjC,QAAQ,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,IAAI,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9B,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,IAAI,YAAY;QACvD,CAAC,CAAC,MAAM,mBAAmB,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;QACxF,CAAC,CAAC,MAAM,kBAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAEpG,MAAM,MAAM,GAAG,mBAAmB,CAAC;QACjC,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;aACb;SACF;QACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrC,EAAE,QAAQ,CAAC,CAAC;IAEb,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;YACpB,oGAAoG,CAAC;IACzG,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,kBAAkB,CAC/B,WAAwB,EACxB,QAAgB,EAChB,SAAiB,EACjB,MAAc,EACd,MAAuC;AACvC;;;;;GAKG;AACH,eAAe,GAAG,KAAK;IAEvB,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE9D,IAAI,MAAM,GAAG,mCAAmC,CAAC;IACjD,MAAM,IAAI,iBAAiB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,MAAM,IAAI,sBAAsB,MAAM,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;IAE1F,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC;QACH,sDAAsD;QACtD,0CAA0C;QAC1C,MAAM,SAAS,GAAG,MAAM,GAAG,GAAG,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAEtE,MAAM,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;QACnC,MAAM,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;QACnC,MAAM,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;QAEnC,iCAAiC;QACjC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEzC,qEAAqE;QACrE,sEAAsE;QACtE,0EAA0E;QAC1E,MAAM,iBAAiB,GAA2D,EAAE,CAAC;QAErF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;YAEjC,wEAAwE;YACxE,oEAAoE;YACpE,qEAAqE;YACrE,sDAAsD;YACtD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpF,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxF,IAAI,YAA2B,CAAC;YAChC,IAAI,aAA4C,CAAC;YACjD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,YAAY,GAAG,WAAW,CAAC;gBAC3B,aAAa,GAAG,WAAW,CAAC;YAC9B,CAAC;iBAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAC3B,YAAY,GAAG,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBACzF,aAAa,GAAG,QAAQ,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,IAAI,CAAC;gBACpB,aAAa,GAAG,WAAW,CAAC;YAC9B,CAAC;YAED,mEAAmE;YACnE,iEAAiE;YACjE,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;gBACpD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE;wBAC/D,QAAQ,EAAE,KAAK,CAAC,iBAAiB;qBAClC,CAAC,CAAC;gBACL,CAAC;gBACD,sEAAsE;gBACtE,6DAA6D;gBAC7D,sEAAsE;gBACtE,kEAAkE;gBAClE,gEAAgE;gBAChE,uDAAuD;gBACvD,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAClE,IAAI,KAAK,CAAC,qBAAqB,IAAI,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;oBAChE,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;wBAC1D,QAAQ,EAAE,KAAK,CAAC,iBAAiB;wBACjC,KAAK,EAAE,KAAK,CAAC,qBAAqB;qBACnC,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,QAAQ,GAAiB;oBAC7B,IAAI,EAAE,KAAK,CAAC,iBAAiB,IAAI,cAAc;oBAC/C,QAAQ,EAAE,YAAY;oBACtB,aAAa;oBACb,KAAK,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;oBAC3F,WAAW;oBACX,aAAa,EAAE,kBAAkB,CAAC,KAAK,CAAC,0BAA0B,CAAC;oBACnE,QAAQ,EAAE,MAAM,EAAE,QAAQ;oBAC1B,SAAS,EAAE,MAAM,EAAE,SAAS;oBAC5B,KAAK,EAAE,KAAK,CAAC,aAAa;oBAC1B,MAAM,EAAE,KAAK,CAAC,cAAc;oBAC5B,IAAI,EAAE,KAAK,CAAC,YAAY;oBACxB,IAAI,EAAE,KAAK,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;wBACvD,KAAK,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;oBAC9E,MAAM,EAAE,KAAK,CAAC,kBAAkB,IAAI,QAAQ;iBAC7C,CAAC;gBAEF,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,uEAAuE;QACvE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;YACtD,sEAAsE;YACtE,sEAAsE;YACtE,sEAAsE;YACtE,mEAAmE;YACnE,uCAAuC;YACvC,MAAM,IAAI,sEAAsE,CAAC;YACjF,MAAM,IAAI,gFAAgF,CAAC;YAC3F,MAAM,IAAI,0EAA0E,CAAC;YACrF,MAAM,IAAI,0EAA0E,CAAC;YACrF,MAAM,IAAI,6EAA6E,CAAC;YACxF,MAAM,IAAI,iCAAiC,CAAC;QAC9C,CAAC;aAAM,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,wCAAwC,MAAM,WAAW,CAAC;YACpE,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC;gBACnC,MAAM,IAAI,iFAAiF,CAAC;YAC9F,CAAC;YACD,MAAM,IAAI,gEAAgE,CAAC;YAC3E,MAAM,IAAI,qLAAqL,CAAC;QAClM,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC;YAC3C,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;YACvF,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,MAAM,CAAC;YAEhG,MAAM,IAAI,cAAc,SAAS,eAAe,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;YAC/E,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,QAAQ,aAAa,YAAY,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAC9E,CAAC;YACD,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,QAAQ,eAAe,mBAAmB,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACzF,CAAC;YACD,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC;gBACnC,MAAM,IAAI,iFAAiF,CAAC;YAC9F,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;YAEf,2EAA2E;YAC3E,2EAA2E;YAC3E,gEAAgE;YAChE,MAAM,cAAc,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAE/D,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC;gBACnC,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;gBAC9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,GAAG,cAAc,CAAC;gBAC5D,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,MAAM,IAAI,YAAY,SAAS,mBAAmB,MAAM,yCAAyC,cAAc,MAAM,CAAC;gBACxH,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,YAAY,SAAS,mBAAmB,MAAM,yCAAyC,cAAc,wCAAwC,CAAC;gBAC1J,CAAC;YACH,CAAC;YAED,6EAA6E;YAC7E,2EAA2E;YAC3E,sEAAsE;YACtE,qCAAqC;YACrC,EAAE;YACF,mEAAmE;YACnE,yEAAyE;YACzE,gEAAgE;YAChE,0EAA0E;YAC1E,+DAA+D;YAC/D,iEAAiE;YACjE,kBAAkB;YAClB,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAC5E,oEAAoE;YACpE,gEAAgE;YAChE,iEAAiE;YACjE,mCAAmC;YACnC,MAAM,sBAAsB,GAAG,CAAC,CAAyB,EAAW,EAAE,CACpE,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3E,mEAAmE;YACnE,0DAA0D;YAC1D,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CACpC,CAAC,CAAC,EAAiD,EAAE,CACnD,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,sBAAsB,CAAC,CAAC,CAAC,CACnD,CAAC;YACF,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;YACtE,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAE7E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,4BAA4B,CAAC;gBAEvC,IAAI,eAAe,EAAE,CAAC;oBACpB,iEAAiE;oBACjE,qEAAqE;oBACrE,oEAAoE;oBACpE,+DAA+D;oBAC/D,iEAAiE;oBACjE,qEAAqE;oBACrE,qEAAqE;oBACrE,+DAA+D;oBAC/D,mEAAmE;oBACnE,qEAAqE;oBACrE,iEAAiE;oBACjE,kDAAkD;oBAClD,MAAM,IAAI,GAAG,YAAY,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACvD,kEAAkE;oBAClE,kEAAkE;oBAClE,uCAAuC;oBACvC,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBACpC,IAAI,cAAc,KAAK,eAAe,IAAI,cAAc,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;wBAC3E,MAAM,IAAI,oBAAoB,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,qEAAqE,CAAC;oBACrK,CAAC;oBAED,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;wBACd,MAAM,IAAI,gDAAgD,CAAC;wBAC3D,MAAM,IAAI,oDAAoD,CAAC;wBAC/D,MAAM,IAAI,oCAAoC,CAAC;wBAC/C,MAAM,IAAI,gCAAgC,CAAC;oBAC7C,CAAC;yBAAM,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;wBACtB,MAAM,IAAI,6CAA6C,CAAC;wBACxD,MAAM,IAAI,qCAAqC,CAAC;wBAChD,MAAM,IAAI,qCAAqC,CAAC;wBAChD,MAAM,IAAI,6CAA6C,CAAC;oBAC1D,CAAC;yBAAM,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;wBACtB,MAAM,IAAI,0CAA0C,CAAC;wBACrD,MAAM,IAAI,+CAA+C,CAAC;wBAC1D,MAAM,IAAI,yCAAyC,CAAC;oBACtD,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,+CAA+C,MAAM,OAAO,CAAC;wBACvE,MAAM,IAAI,0CAA0C,CAAC;wBACrD,MAAM,IAAI,0CAA0C,CAAC;oBACvD,CAAC;gBACH,CAAC;qBAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBACjC,+DAA+D;oBAC/D,gEAAgE;oBAChE,kDAAkD;oBAClD,MAAM,IAAI,oBAAoB,CAAC;oBAC/B,MAAM,IAAI,kDAAkD,CAAC;oBAC7D,MAAM,IAAI,0CAA0C,CAAC;oBACrD,MAAM,IAAI,0CAA0C,CAAC;gBACvD,CAAC;gBACD,iEAAiE;gBACjE,2DAA2D;gBAC3D,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,UAAU,GAAG,eAAe,KAAK,SAAS,IAAI,CAAC,oBAAoB,CAAC;oBAC1E,IAAI,UAAU;wBAAE,MAAM,IAAI,IAAI,CAAC;oBAC/B,MAAM,IAAI,2BAA2B,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClF,CAAC;gBACD,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,IAAI,0CAA0C,CAAC;QACrD,MAAM,IAAI,yDAAyD,CAAC;QACpE,MAAM,IAAI,sCAAsC,CAAC;QACjD,MAAM,IAAI,iCAAiC,CAAC;QAC5C,MAAM,IAAI,2BAA2B,CAAC;QACtC,MAAM,IAAI,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IACzF,CAAC;IAED,MAAM,IAAI,SAAS,CAAC;IACpB,MAAM,IAAI,gEAAgE,CAAC;IAC3E,MAAM,IAAI,mIAAmI,CAAC;IAC9I,MAAM,IAAI,kFAAkF,CAAC;IAE7F,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAChC,YAA0B,EAC1B,QAAgB,EAChB,SAAiB,EACjB,MAAc,EACd,QAAgB,EAChB,MAAuC;IAEvC,IAAI,MAAM,GAAG,mCAAmC,CAAC;IACjD,MAAM,IAAI,iBAAiB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,MAAM,IAAI,sBAAsB,MAAM,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;IACxF,MAAM,IAAI,8EAA8E,CAAC;IACzF,MAAM,IAAI,2EAA2E,CAAC;IACtF,MAAM,IAAI,yEAAyE,CAAC;IACpF,MAAM,IAAI,sDAAsD,CAAC;IAEjE,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,UAA4B,CAAC;QACjC,IAAI,SAAkB,CAAC;QACvB,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,8EAA8E;QAC9E,IAAI,UAAU,GAAG,QAAQ,CAAC;QAE1B,IAAI,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,gEAAgE;gBAChE,kEAAkE;gBAClE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,MAAM,SAAS,GAAG,MAAM,GAAG,GAAG,CAAC;gBAC/B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;gBACtE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;gBAEjD,oEAAoE;gBACpE,sEAAsE;gBACtE,qEAAqE;gBACrE,qEAAqE;gBACrE,sEAAsE;gBACtE,sEAAsE;gBACtE,gEAAgE;gBAChE,qEAAqE;gBACrE,qDAAqD;gBACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE5C,8DAA8D;gBAC9D,qEAAqE;gBACrE,sEAAsE;gBACtE,oEAAoE;gBACpE,2DAA2D;gBAC3D,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;gBACtC,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;gBACtC,IAAI,SAA8C,CAAC;gBACnD,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;oBACrB,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;oBAC1B,SAAS,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;oBACzB,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACnC,CAAC;gBAED,8DAA8D;gBAC9D,qEAAqE;gBACrE,oEAAoE;gBACpE,gCAAgC;gBAChC,IAAI,GAAG,GAAqB,EAAE,CAAC;gBAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;oBACrC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;oBAC1F,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC7D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,QAAQ,CAClD,CAAC;gBACF,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,qBAAqB,CAAC,EAAE,CAAC;oBAC9C,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,mEAAmE;gBACnE,2DAA2D;gBAC3D,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACvD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;gBACjE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC/E,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACjE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/E,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,uEAAuE,CAAC;QACpF,CAAC;aAAM,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,6FAA6F,CAAC;QAC1G,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE;gBACzD,GAAG,EAAE,qBAAqB;gBAC1B,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,MAAM,IAAI,0DAA0D,qBAAqB,sCAAsC,CAAC;QAClI,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,UAAU,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;QAE5E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,yCAAyC,UAAU,WAAW,MAAM,YAAY,CAAC;YAC3F,MAAM,IAAI,0EAA0E,CAAC;YACrF,MAAM,IAAI,uEAAuE,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAEpE,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,QAAQ,UAAU,CAAC,MAAM,4BAA4B,eAAe,WAAW,UAAU,IAAI,CAAC;YACxG,MAAM,IAAI,gBAAgB,QAAQ,CAAC,MAAM,WAAW,aAAa,WAAW,MAAM,WAAW,CAAC;YAE9F,8DAA8D;YAC9D,kDAAkD;YAClD,MAAM,iBAAiB,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAE5D,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBACxC,MAAM,IAAI,oBAAoB,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,iBAAiB,CAAC;gBACtD,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,MAAM,IAAI,YAAY,SAAS,sBAAsB,MAAM,yCAAyC,iBAAiB,MAAM,CAAC;gBAC9H,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,YAAY,SAAS,sBAAsB,MAAM,yCAAyC,iBAAiB,wCAAwC,CAAC;gBAChK,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,oEAAoE;YACpE,+BAA+B;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,uEAAuE;YACvE,+DAA+D;YAC/D,gEAAgE;YAChE,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACzD,MAAM,IAAI,4BAA4B,CAAC;YACvC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,iEAAiE,CAAC;gBAC5E,MAAM,IAAI,oDAAoD,CAAC;gBAC/D,MAAM,IAAI,oCAAoC,CAAC;gBAC/C,MAAM,IAAI,gCAAgC,CAAC;YAC7C,CAAC;iBAAM,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;gBAC9B,MAAM,IAAI,8DAA8D,CAAC;gBACzE,MAAM,IAAI,qCAAqC,CAAC;gBAChD,MAAM,IAAI,qCAAqC,CAAC;gBAChD,MAAM,IAAI,6CAA6C,CAAC;YAC1D,CAAC;iBAAM,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;gBAC9B,MAAM,IAAI,2DAA2D,CAAC;gBACtE,MAAM,IAAI,+CAA+C,CAAC;gBAC1D,MAAM,IAAI,yCAAyC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,uDAAuD,MAAM,OAAO,CAAC;gBAC/E,MAAM,IAAI,mDAAmD,CAAC;gBAC9D,MAAM,IAAI,0CAA0C,CAAC;YACvD,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,IAAI,0CAA0C,CAAC;QACrD,MAAM,IAAI,yDAAyD,CAAC;QACpE,MAAM,IAAI,sCAAsC,CAAC;QACjD,MAAM,IAAI,iCAAiC,CAAC;QAC5C,MAAM,IAAI,2BAA2B,CAAC;QACtC,MAAM,IAAI,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IACzF,CAAC;IAED,MAAM,IAAI,SAAS,CAAC;IACpB,MAAM,IAAI,+EAA+E,CAAC;IAC1F,MAAM,IAAI,+JAA+J,CAAC;IAC1K,MAAM,IAAI,4IAA4I,CAAC;IAEvJ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,mEAAmE;AACnE,SAAS,eAAe,CAAC,IAAY;IACnC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,mBAAmB,CAAC;QAC7B,KAAK,GAAG;YACN,OAAO,iBAAiB,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,iBAAiB,CAAC;QAC3B;YACE,OAAO,IAAI,IAAI,SAAS,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,uBAAuB,CAAC,OAAqB;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,UAAU,CAAC,CAAC;IACpG,IAAI,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,CAAC;IACxF,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,UAAU,CAAC,CAAC;IACpG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,OAAqB,EAAE,OAAe;IAClE,IAAI,MAAM,GAAG,wBAAwB,OAAO,MAAM,CAAC;IAEnD,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,MAAM,IAAI,mBAAmB,OAAO,CAAC,KAAK,WAAW,eAAe,EAAE,CAAC;IACvE,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,OAAO,CAAC,QAAQ,UAAU,OAAO,CAAC,UAAU,SAAS,CAAC;IACvE,CAAC;IACD,MAAM,IAAI,IAAI,CAAC;IAEf,MAAM,IAAI,iBAAiB,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC;IAC3F,MAAM,IAAI,eAAe,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5G,MAAM,IAAI,uBAAuB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC;IAEzF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAChF,CAAC;IACF,MAAM,IAAI,yBAAyB,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC;IAExE,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,mBAAmB,iBAAiB,IAAI,CAAC;IACrD,CAAC;IACD,MAAM,IAAI,kBAAkB,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;IAEnE,MAAM,IAAI,WAAW,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAkB,EAAE,QAAgB;IAC7D,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;IAEnC,kBAAkB;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAE/D,MAAM,IAAI,aAAa,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;IAClD,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAC9B,CAAC,CAAC,8BAA8B;QAChC,CAAC,CAAC,iBAAiB,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC7D,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM;YAAE,QAAQ,IAAI,KAAK,IAAI,CAAC,MAAM,SAAS,CAAC;QACvD,IAAI,IAAI,CAAC,IAAI;YAAE,QAAQ,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,iBAAiB,QAAQ,IAAI,CAAC;IAC1C,CAAC;IAED,2EAA2E;IAC3E,0EAA0E;IAC1E,gFAAgF;IAChF,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChE,MAAM,IAAI,mCAAmC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1G,CAAC;IAED,MAAM,IAAI,IAAI,CAAC;IAEf,kBAAkB;IAClB,MAAM,IAAI,cAAc,CAAC;IACzB,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;QAC3B,CAAC,CAAC,0BAA0B;QAC5B,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;IAElG,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,4DAA4D;IAC5D,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAElD,2EAA2E;IAC3E,+DAA+D;IAC/D,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,oCAAoC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,IAAI,uBAAuB,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC;QAC5G,MAAM,IAAI,oBAAoB,UAAU,IAAI,CAAC;IAC/C,CAAC;IAED,MAAM,IAAI,WAAW,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -8,15 +8,15 @@ export interface FirePerimeterAttributes {
8
8
  poly_IncidentName: string;
9
9
  attr_IncidentName?: string;
10
10
  attr_IncidentTypeCategory?: string;
11
- poly_GISAcres?: number;
12
- attr_FinalAcres?: number;
13
- attr_CalculatedAcres?: number;
11
+ poly_GISAcres?: number | null;
12
+ attr_FinalAcres?: number | null;
13
+ attr_CalculatedAcres?: number | null;
14
14
  attr_PercentContained?: number;
15
15
  attr_ContainmentDateTime?: number;
16
16
  poly_FeatureStatus?: string;
17
- attr_FireDiscoveryDateTime?: number;
18
- attr_InitialLatitude?: number;
19
- attr_InitialLongitude?: number;
17
+ attr_FireDiscoveryDateTime?: number | null;
18
+ attr_InitialLatitude?: number | null;
19
+ attr_InitialLongitude?: number | null;
20
20
  attr_POOState?: string;
21
21
  attr_POOCounty?: string;
22
22
  attr_POOCity?: string;
@@ -39,7 +39,8 @@ export interface ArcGISPolygonGeometry {
39
39
  */
40
40
  export interface FirePerimeterFeature {
41
41
  attributes: FirePerimeterAttributes;
42
- geometry: ArcGISPolygonGeometry;
42
+ /** Read through `distanceToPerimeterKm`, which narrows the rings itself. */
43
+ geometry?: ArcGISPolygonGeometry;
43
44
  }
44
45
  /**
45
46
  * Response from NIFC ArcGIS query endpoint
@@ -68,8 +69,17 @@ export interface NIFCQueryResponse {
68
69
  */
69
70
  export interface WildfireInfo {
70
71
  name: string;
71
- distance: number;
72
- acres: number;
72
+ /**
73
+ * Km from the query location to the fire, on the basis `distanceBasis`
74
+ * names, or `null` when NIFC published neither a usable perimeter nor a
75
+ * usable point of origin. `null` means "unlocated", not zero and not far:
76
+ * an unknown distance is not evidence of distance.
77
+ */
78
+ distance: number | null;
79
+ /** What `distance` was measured to. */
80
+ distanceBasis: 'perimeter' | 'origin' | 'unlocated';
81
+ /** Acres, or `null` when NIFC published no size greater than zero ("not reported"). */
82
+ acres: number | null;
73
83
  /**
74
84
  * Containment percentage 0-100, or `null` when NIFC published no usable
75
85
  * containment for this incident. `null` means "not reported", not
@@ -77,7 +87,9 @@ export interface WildfireInfo {
77
87
  * contained) and both encodings occur live.
78
88
  */
79
89
  containment: number | null;
80
- discoveryDate: Date;
90
+ /** Discovery date, or `null` when NIFC published no usable timestamp ("not reported"). */
91
+ discoveryDate: Date | null;
92
+ /** Reported point of origin; set only when both coordinates are usable. */
81
93
  latitude?: number;
82
94
  longitude?: number;
83
95
  state?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wildfire.d.ts","sourceRoot":"","sources":["../../src/types/wildfire.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IAEtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAGnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAGpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,uBAAuB,CAAC;IACpC,QAAQ,EAAE,qBAAqB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC,CAAC;IACH,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"wildfire.d.ts","sourceRoot":"","sources":["../../src/types/wildfire.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function distanceToPerimeterKm(latitude: number, longitude: number, rings: unknown): number | null;
2
+ //# sourceMappingURL=firePerimeter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firePerimeter.d.ts","sourceRoot":"","sources":["../../src/utils/firePerimeter.ts"],"names":[],"mappings":"AAyEA,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACb,MAAM,GAAG,IAAI,CAyCf"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Distance from a point to a wildfire perimeter (NIFC / ArcGIS polygon rings).
3
+ *
4
+ * Returns exactly 0 when the point is inside the polygon, otherwise the
5
+ * great-circle distance in km to the nearest point on any ring edge, or `null`
6
+ * when the geometry carries no usable vertex.
7
+ *
8
+ * Input order: ArcGIS sends each vertex as `[lon, lat]` (WGS84). This is the
9
+ * opposite of `pointInPolygon.ts`, which takes `[lat, lon]` and ORs over rings
10
+ * (a point in a hole still counts as inside any other ring). Neither fits here:
11
+ * a hole must read as outside, so inside is even-odd parity summed over all
12
+ * rings, and that is why `pointInPolygon.ts` is not reused.
13
+ *
14
+ * Pure, zero I/O, no logging. No vertex cap: a trimmed ring set used for
15
+ * "is it inside" would fabricate distance (GOTCHAS G8).
16
+ *
17
+ * Precondition: no ring crosses the antimeridian. NIFC covers the US, PR, USVI
18
+ * and Guam; only the western Aleutians cross 180 deg. Revisit trigger: a WFIGS
19
+ * perimeter with vertices on both sides of 180 deg.
20
+ *
21
+ * The edge foot is picked in a local equirectangular projection centred on the
22
+ * query point; the reported distance is always haversine to that foot.
23
+ */
24
+ import { calculateDistance } from './distance.js';
25
+ function toVertex(raw) {
26
+ if (!Array.isArray(raw))
27
+ return null;
28
+ const lon = raw[0];
29
+ const lat = raw[1];
30
+ if (typeof lon !== 'number' || typeof lat !== 'number')
31
+ return null;
32
+ if (!Number.isFinite(lon) || !Number.isFinite(lat))
33
+ return null;
34
+ if (lon < -180 || lon > 180 || lat < -90 || lat > 90)
35
+ return null;
36
+ return [lon, lat];
37
+ }
38
+ function usableRing(raw) {
39
+ if (!Array.isArray(raw))
40
+ return null;
41
+ const out = [];
42
+ for (const v of raw) {
43
+ const vertex = toVertex(v);
44
+ if (vertex)
45
+ out.push(vertex);
46
+ }
47
+ return out;
48
+ }
49
+ /** Distance in km from the query point to segment a-b (a !== b), via the projected foot. */
50
+ function edgeDistanceKm(latitude, longitude, cosLat, a, b) {
51
+ const ax = (a[0] - longitude) * cosLat;
52
+ const ay = a[1] - latitude;
53
+ const bx = (b[0] - longitude) * cosLat;
54
+ const by = b[1] - latitude;
55
+ const dx = bx - ax;
56
+ const dy = by - ay;
57
+ const lenSq = dx * dx + dy * dy;
58
+ if (lenSq === 0) {
59
+ return calculateDistance(latitude, longitude, a[1], a[0]);
60
+ }
61
+ const t = -(ax * dx + ay * dy) / lenSq;
62
+ if (t <= 0)
63
+ return calculateDistance(latitude, longitude, a[1], a[0]);
64
+ if (t >= 1)
65
+ return calculateDistance(latitude, longitude, b[1], b[0]);
66
+ const footLon = a[0] + t * (b[0] - a[0]);
67
+ const footLat = a[1] + t * (b[1] - a[1]);
68
+ return calculateDistance(latitude, longitude, footLat, footLon);
69
+ }
70
+ export function distanceToPerimeterKm(latitude, longitude, rings) {
71
+ if (!Array.isArray(rings))
72
+ return null;
73
+ const usable = [];
74
+ for (const raw of rings) {
75
+ const ring = usableRing(raw);
76
+ if (ring && ring.length > 0)
77
+ usable.push(ring);
78
+ }
79
+ if (usable.length === 0)
80
+ return null;
81
+ // Inside: even-odd crossing parity over every ring with 3+ usable vertices.
82
+ let crossings = 0;
83
+ for (const ring of usable) {
84
+ if (ring.length < 3)
85
+ continue;
86
+ for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) {
87
+ const [xi, yi] = ring[i];
88
+ const [xj, yj] = ring[j];
89
+ if (yi > latitude !== yj > latitude) {
90
+ const xCross = ((xj - xi) * (latitude - yi)) / (yj - yi) + xi;
91
+ if (longitude < xCross)
92
+ crossings++;
93
+ }
94
+ }
95
+ }
96
+ if (crossings % 2 === 1)
97
+ return 0;
98
+ const cosLat = Math.cos((latitude * Math.PI) / 180);
99
+ let best = Infinity;
100
+ for (const ring of usable) {
101
+ if (ring.length === 1) {
102
+ const v = ring[0];
103
+ best = Math.min(best, calculateDistance(latitude, longitude, v[1], v[0]));
104
+ continue;
105
+ }
106
+ for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) {
107
+ best = Math.min(best, edgeDistanceKm(latitude, longitude, cosLat, ring[j], ring[i]));
108
+ }
109
+ }
110
+ return best;
111
+ }
112
+ //# sourceMappingURL=firePerimeter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firePerimeter.js","sourceRoot":"","sources":["../../src/utils/firePerimeter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dangahagan/weather-mcp",
3
- "version": "1.35.11",
3
+ "version": "1.35.12",
4
4
  "description": "MCP server giving AI assistants 17 weather tools with zero API keys: global forecasts, current conditions, alerts, air quality, marine conditions, lightning detection, radar imagery, river levels, wildfire tracking, and historical weather back to 1940. Built entirely on free public APIs (NOAA, Open-Meteo, USGS, NIFC).",
5
5
  "mcpName": "io.github.dgahagan/weather-mcp",
6
6
  "main": "dist/index.js",