🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@vnedyalk0v/react19-simple-maps

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vnedyalk0v/react19-simple-maps - npm Package Compare versions

Comparing version
2.0.2
to
2.0.3
+35
-0
CHANGELOG.md
# Changelog
## 2.0.3
### Patch Changes
- 863c579: Fix all confirmed findings from the React 19 package audit:
- **(4.1, 4.2) Geography loading model:** Remove broken Suspense wrapper from `Geographies` that never triggered. Expose `isLoading` and `error` from `useGeographies` and render SVG-safe loading/error fallbacks instead of invalid HTML `<div>` elements inside `<g>`.
- **(5.1) Custom memo comparators:** Remove custom `memo` comparators from `Geographies` and `Geography` that silently blocked updates to forwarded DOM props (`aria-*`, `data-*`, `opacity`, `role`, etc.). Default `memo` shallow comparison is now used.
- **(5.2) Focused style variant:** Separate hover and keyboard focus into independent state variables in `Geography` and `Marker`. The `focused` style variant is now applied on keyboard focus (`onFocus`/`onBlur`), while `hover` applies on mouse enter/leave.
- **(5.3) scaleExtent prop:** `ZoomableGroup` now honors the `scaleExtent` prop when provided directly, instead of always deriving zoom bounds from `minZoom`/`maxZoom`.
- **(6.1) Validation error messages:** Fix ~20 calls to `createGeographyFetchError` in `input-validation.ts` where the descriptive error message was passed in the wrong argument position (URL slot), resulting in generic error text. Security-related validation errors now correctly use the `SECURITY_ERROR` type.
- **(6.2) Lockfile sync:** Regenerate `package-lock.json` to match `package.json` version `2.0.2`.
- **(7.1) Debug render purity:** Move `setDebugMode` and `logRender` calls out of the render phase into `useEffect` to prevent global state mutation and console I/O during rendering, which is problematic under StrictMode and concurrent rendering.
- **Error boundary SVG safety:** Change `DefaultErrorFallback` in `GeographyErrorBoundary` to render SVG-safe `<text>`/`<g>` elements instead of HTML `<div>`/`<button>`.
- dad7925: Fix security vulnerabilities identified in security best-practices review:
- **SEC-001 (High):** Fix IPv6 private-address bypass in URL validation. Strip IPv6 brackets from `new URL().hostname` before matching, add IPv4-mapped IPv6 detection (both dotted-quad and hex forms), and expand reserved range coverage.
- **SEC-002 (Medium):** Run `validateGeographyUrl()` in the preloading pipeline before any DNS prefetch, preconnect, or preload network activity.
- **SEC-003 (Medium):** Canonicalize URLs (strip fragment, normalize port/host) before SRI hash lookup to prevent bypass via trivial URL variants.
- **SEC-004 (Low):** Remove `frame-ancestors` and `X-Frame-Options` from HTML meta tags in examples (not enforced by browsers via meta); strengthen dev-only comments.
- **SEC-005 (Low):** Redact `git.branch` in persisted bundle reports to prevent sensitive branch names leaking into CI artifacts. Add `BUNDLE_REPORT_REDACT_GIT` env var to omit all git metadata from reports.
- **Build:** Set `NODE_ENV=production` in the `build` script so the Rollup Terser plugin is applied, enabling `drop_console` and `pure_funcs` to strip `console.log`/`console.warn`/`console.debug` from production bundles.
Bundle Monitor Improvements:
- Fix optimization status mapping — 0% completion now correctly reports `"not_started"` instead of `"partial"`. Status derives from numeric completionRate consistently (0% → not_started, 1–99% → partial, 100% → complete).
- **Breaking (report schema):** `utilization.raw`, `utilization.gzip`, and `utilization.brotli` are now numbers (e.g. `93.7`) instead of strings (`"93.7"`). Brotli emits `null` instead of `"N/A"` when unavailable. Parallel formatted fields (`utilization.rawFormatted`, `utilization.gzipFormatted`, `utilization.brotliFormatted`) provide display-ready strings (e.g. `"93.7%"`).
- **Breaking (report schema):** `react19Optimizations.*.completionRate` is now a number (e.g. `50`) instead of a string (`"50.0"`). A parallel `completionRateFormatted` field (e.g. `"50.0%"`) is provided for display.
- 44afd4a: Address follow-up review findings:
- **useGeographies:** Abort stale async updates with an effect cleanup flag; expose `refetch()` to retry string URL loads.
- **Types:** `GeographyData.error` is now `GeographyError | Error | null`; optional `refetch` on the hook result.
- **Geographies / Geography:** Restore targeted `memo` comparators; stable loading fallback element; wire fallback retry to `refetch`.
- **GeographyErrorBoundary:** Default fallback shows an accessible Retry control and vertically centers error text in SVG.
- **Security:** Canonicalize URLs in `addCustomSRI`; extend IPv4 documentation (TEST-NET) ranges; clarify example HTML comments on meta vs HTTP headers.
- **Preloading:** Mark URLs in the dedupe set after DNS/preconnect hints to avoid redundant hint calls in development.
## 2.0.2

@@ -4,0 +39,0 @@

+11
-1

@@ -88,2 +88,8 @@ import * as react from 'react';

type ProjectionConfigConditional<T extends string> = T extends 'geoAlbers' ? ProjectionConfig & Required<Pick<ProjectionConfig, 'parallels'>> : T extends 'geoConicEqualArea' | 'geoConicConformal' ? ProjectionConfig & Required<Pick<ProjectionConfig, 'parallels'>> : ProjectionConfig;
type GeographyError = Error & {
type: 'GEOGRAPHY_LOAD_ERROR' | 'GEOGRAPHY_PARSE_ERROR' | 'PROJECTION_ERROR' | 'VALIDATION_ERROR' | 'SECURITY_ERROR' | 'CONFIGURATION_ERROR' | 'CONTEXT_ERROR';
geography?: string;
details?: Record<string, unknown>;
timestamp?: string;
};
type ProjectionName = `geo${Capitalize<string>}`;

@@ -236,3 +242,7 @@ interface ProjectionConfig {

borders: string;
isLoading: boolean;
error: GeographyError | Error | null;
center?: Coordinates;
/** Re-runs the fetch for string `geography` URLs (no-op for object geographies). */
refetch?: () => void;
}

@@ -361,3 +371,3 @@ interface ZoomPanState {

declare function Geographies({ geography, children, parseGeographies, className, errorBoundary, onGeographyError, fallback, ref, ...restProps }: GeographiesProps & {
declare function Geographies({ geography, children, parseGeographies, className, errorBoundary, onGeographyError, fallback, ref, ...restProps }: GeographiesProps<boolean> & {
ref?: Ref<SVGGElement>;

@@ -364,0 +374,0 @@ }): react_jsx_runtime.JSX.Element;

@@ -218,3 +218,7 @@ import { Feature, Geometry, FeatureCollection, MultiLineString, LineString } from 'geojson';

/**
* Check if SRI validation is required for a URL
* Check if SRI validation is required for a URL.
* The URL is canonicalized (fragment stripped, host lowercased, default port
* removed) before lookup so that trivial URL variants don't bypass known
* SRI entries.
*
* @param url - URL to check

@@ -221,0 +225,0 @@ * @returns SRI configuration if validation is required, null otherwise

+1
-1099

@@ -1,1100 +0,2 @@

import { feature, mesh } from 'topojson-client';
import { cache } from 'react';
import { prefetchDNS, preconnect, preload } from 'react-dom';
// Helper functions to create branded types
const createLongitude = (value) => value;
const createLatitude = (value) => value;
const createCoordinates = (lon, lat) => [
createLongitude(lon),
createLatitude(lat),
];
/**
* Calculates coordinates from zoom transform
* @param w - Width of the map
* @param h - Height of the map
* @param t - Zoom transform object
* @returns Branded coordinates
*/
function getCoords(w, h, t) {
const xOffset = (w * t.k - w) / 2;
const yOffset = (h * t.k - h) / 2;
const lon = w / 2 - (xOffset + t.x) / t.k;
const lat = h / 2 - (yOffset + t.y) / t.k;
return createCoordinates(lon, lat);
}
/**
* Creates a standardized geography fetch error
* @param type - Error type
* @param message - Error message
* @param url - URL that caused the error (optional)
* @param originalError - Original error that caused this error (optional)
* @returns GeographyError instance
*/
function createGeographyFetchError(type, message, url, originalError) {
const error = new Error(message);
error.name = 'GeographyError';
error.type = type;
error.timestamp = new Date().toISOString();
if (url) {
error.geography = url;
}
if (originalError) {
error.cause = originalError;
if (originalError.stack) {
error.stack = originalError.stack;
}
error.details = {
originalMessage: originalError.message,
originalName: originalError.name,
};
}
return error;
}
/**
* Simple URL validation to avoid circular dependency
* @param url - URL to validate
* @returns Validated URL string
*/
function validateURL(url) {
if (!url || typeof url !== 'string') {
throw new Error('URL must be a non-empty string');
}
// Basic URL validation
try {
new URL(url);
return url.trim();
}
catch {
throw new Error('Invalid URL format');
}
}
const DEFAULT_GEOGRAPHY_FETCH_CONFIG = {
TIMEOUT_MS: 10000, // 10 seconds
MAX_RESPONSE_SIZE: 50 * 1024 * 1024, // 50MB
ALLOWED_CONTENT_TYPES: ['application/json', 'application/geo+json'],
ALLOWED_PROTOCOLS: ['https:'], // HTTPS only by default
ALLOW_HTTP_LOCALHOST: false, // Disabled by default for security
STRICT_HTTPS_ONLY: true, // Strict HTTPS-only mode by default
};
// Development configuration (can be enabled explicitly)
const DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG = {
...DEFAULT_GEOGRAPHY_FETCH_CONFIG,
ALLOWED_PROTOCOLS: ['https:', 'http:'],
ALLOW_HTTP_LOCALHOST: true, // Allow HTTP for localhost in development
STRICT_HTTPS_ONLY: false,
};
// Current active configuration (defaults to secure)
let GEOGRAPHY_FETCH_CONFIG = DEFAULT_GEOGRAPHY_FETCH_CONFIG;
/**
* Configure geography fetching security settings
* @param config - Security configuration to apply
*/
function configureGeographySecurity(config) {
GEOGRAPHY_FETCH_CONFIG = {
...DEFAULT_GEOGRAPHY_FETCH_CONFIG,
...config,
};
}
/**
* Enable development mode with relaxed security (use with caution)
* @param allowHttpLocalhost - Whether to allow HTTP for localhost
*/
function enableDevelopmentMode(allowHttpLocalhost = true) {
if (process.env.NODE_ENV === 'production') {
// eslint-disable-next-line no-console
console.warn('Attempted to enable development mode in production - ignoring for security');
return;
}
GEOGRAPHY_FETCH_CONFIG = {
...DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG,
ALLOW_HTTP_LOCALHOST: allowHttpLocalhost,
};
// eslint-disable-next-line no-console
console.warn('Development mode enabled with relaxed security settings. Do not use in production!');
}
/**
* Checks if a hostname is a private IP address
* @param hostname - The hostname to check
* @returns True if the hostname is a private IP address
*/
function isPrivateIPAddress(hostname) {
// Skip non-IP hostnames
if (!hostname || hostname === 'localhost') {
return false;
}
// IPv4 private ranges
const ipv4PrivateRanges = [
/^10\./, // 10.0.0.0/8
/^172\.(1[6-9]|2[0-9]|3[01])\./, // 172.16.0.0/12
/^192\.168\./, // 192.168.0.0/16
/^127\./, // 127.0.0.0/8 (loopback)
/^169\.254\./, // 169.254.0.0/16 (link-local)
];
// Check IPv4 private ranges
for (const range of ipv4PrivateRanges) {
if (range.test(hostname)) {
return true;
}
}
// IPv6 private ranges (simplified check)
const ipv6PrivateRanges = [
/^::1$/, // ::1 (loopback)
/^fe80:/, // fe80::/10 (link-local)
/^fc00:/, // fc00::/7 (unique local)
/^fd00:/, // fd00::/8 (unique local)
];
// Check IPv6 private ranges
for (const range of ipv6PrivateRanges) {
if (range.test(hostname)) {
return true;
}
}
return false;
}
/**
* Validates a geography URL for security and format compliance
* @param url - The URL to validate
* @throws {Error} If the URL is invalid or insecure
*/
function validateGeographyUrl(url) {
// Use comprehensive URL validation from input-validation module
const validatedUrl = validateURL(url);
try {
const parsedUrl = new URL(validatedUrl);
// Strict HTTPS-only mode
if (GEOGRAPHY_FETCH_CONFIG.STRICT_HTTPS_ONLY) {
if (parsedUrl.protocol !== 'https:') {
throw createGeographyFetchError('SECURITY_ERROR', `Strict HTTPS-only mode: ${parsedUrl.protocol} is not allowed. Only HTTPS is permitted.`, url);
}
}
else {
// Check protocol security with configured protocols
if (!GEOGRAPHY_FETCH_CONFIG.ALLOWED_PROTOCOLS.includes(parsedUrl.protocol)) {
const allowedProtocols = GEOGRAPHY_FETCH_CONFIG.ALLOWED_PROTOCOLS.join(', ');
throw createGeographyFetchError('SECURITY_ERROR', `Unsupported protocol: ${parsedUrl.protocol}. Only ${allowedProtocols} are allowed.`, url);
}
// HTTP protocol validation
if (parsedUrl.protocol === 'http:') {
// Check if HTTP localhost is explicitly allowed
if (!GEOGRAPHY_FETCH_CONFIG.ALLOW_HTTP_LOCALHOST) {
throw createGeographyFetchError('SECURITY_ERROR', 'HTTP protocol is disabled for security. Use HTTPS or enable development mode explicitly.', url);
}
// If HTTP localhost is allowed, validate hostname
if (parsedUrl.hostname !== 'localhost' &&
parsedUrl.hostname !== '127.0.0.1') {
throw createGeographyFetchError('SECURITY_ERROR', 'HTTP protocol is only allowed for localhost. Use HTTPS for remote URLs.', url);
}
// Additional production check
if (process.env.NODE_ENV === 'production') {
throw createGeographyFetchError('SECURITY_ERROR', 'HTTP localhost access is not allowed in production', url);
}
// Development warning for HTTP localhost usage
// eslint-disable-next-line no-console
console.warn(`Security Warning: Using HTTP for localhost (${url}). This should only be used in development.`);
}
}
// Additional security checks for localhost access
if (parsedUrl.hostname === 'localhost' ||
parsedUrl.hostname === '127.0.0.1') {
if (process.env.NODE_ENV === 'production') {
throw createGeographyFetchError('SECURITY_ERROR', 'Localhost access is not allowed in production', url);
}
}
// Validate against private IP ranges (additional security)
if (isPrivateIPAddress(parsedUrl.hostname)) {
throw createGeographyFetchError('SECURITY_ERROR', `Access to private IP address ${parsedUrl.hostname} is not allowed`, url);
}
}
catch (error) {
if (error instanceof TypeError) {
throw createGeographyFetchError('VALIDATION_ERROR', `Invalid URL format: ${url}`, url, error);
}
throw error;
}
}
/**
* Validates response content type
* @param response - The fetch response to validate
* @throws {Error} If content type is invalid
*/
function validateContentType(response) {
const contentType = response.headers.get('content-type');
if (!contentType) {
throw createGeographyFetchError('VALIDATION_ERROR', 'Missing Content-Type header');
}
const isValidType = GEOGRAPHY_FETCH_CONFIG.ALLOWED_CONTENT_TYPES.some((type) => contentType.toLowerCase().includes(type));
if (!isValidType) {
throw createGeographyFetchError('VALIDATION_ERROR', `Invalid content type: ${contentType}. Expected one of: ${GEOGRAPHY_FETCH_CONFIG.ALLOWED_CONTENT_TYPES.join(', ')}`);
}
}
/**
* Fast pre-check of Content-Length header to reject obviously oversized responses.
* NOTE: This is only a pre-check — the header can be omitted or falsified.
* Use {@link readResponseWithSizeLimit} for authoritative enforcement.
* @param response - The fetch response to validate
* @throws {Error} If Content-Length exceeds the configured maximum
*/
async function validateResponseSize(response) {
const contentLength = response.headers.get('content-length');
if (contentLength) {
const size = parseInt(contentLength, 10);
if (size > GEOGRAPHY_FETCH_CONFIG.MAX_RESPONSE_SIZE) {
throw createGeographyFetchError('VALIDATION_ERROR', `Response too large: ${size} bytes. Maximum allowed: ${GEOGRAPHY_FETCH_CONFIG.MAX_RESPONSE_SIZE} bytes`);
}
}
}
/**
* Reads the response body as an ArrayBuffer while enforcing a hard byte-count limit.
* Protects against responses that omit or falsify Content-Length.
* @param response - The fetch response to read
* @param maxBytes - Maximum allowed bytes (defaults to GEOGRAPHY_FETCH_CONFIG.MAX_RESPONSE_SIZE)
* @returns The response body as ArrayBuffer
* @throws {Error} If the body exceeds the byte limit
*/
async function readResponseWithSizeLimit(response, maxBytes = GEOGRAPHY_FETCH_CONFIG.MAX_RESPONSE_SIZE) {
const reader = response.body?.getReader();
// Fallback: if ReadableStream is not available, read the whole body and check size.
// NOTE: response.arrayBuffer() loads the entire response into memory before the size
// check runs, which can cause high memory usage or OOM for very large responses.
// The ReadableStream path above is preferred as it streams data and enforces the
// size limit incrementally, failing fast without buffering the full payload.
if (!reader) {
const buffer = await response.arrayBuffer();
if (buffer.byteLength > maxBytes) {
throw createGeographyFetchError('VALIDATION_ERROR', `Response too large: ${buffer.byteLength} bytes exceeds limit of ${maxBytes} bytes`);
}
return buffer;
}
const chunks = [];
let totalBytes = 0;
for (;;) {
const { done, value } = await reader.read();
if (done)
break;
totalBytes += value.byteLength;
if (totalBytes > maxBytes) {
reader.cancel().catch(() => { });
throw createGeographyFetchError('VALIDATION_ERROR', `Response too large: exceeded limit of ${maxBytes} bytes`);
}
chunks.push(value);
}
// Concatenate chunks into a single ArrayBuffer
const result = new Uint8Array(totalBytes);
let offset = 0;
for (const chunk of chunks) {
result.set(chunk, offset);
offset += chunk.byteLength;
}
return result.buffer;
}
/**
* Validates that the parsed data is a valid geography object
* @param data - The parsed JSON data to validate
* @throws {Error} If data is not a valid geography object
*/
function validateGeographyData(data) {
if (!data || typeof data !== 'object') {
throw createGeographyFetchError('VALIDATION_ERROR', 'Invalid geography data: not a valid object');
}
const obj = data;
if (!obj.type ||
(obj.type !== 'Topology' && obj.type !== 'FeatureCollection')) {
throw createGeographyFetchError('VALIDATION_ERROR', `Invalid geography data: expected Topology or FeatureCollection, got ${obj.type}`);
}
}
/**
* Known SRI hashes for common geography data sources
* These hashes are automatically generated and verified
* Run 'npm run generate-sri' to update these hashes
*/
const KNOWN_GEOGRAPHY_SRI = {
// World Atlas from unpkg.com - Countries data
'https://unpkg.com/world-atlas@2/countries-110m.json': {
algorithm: 'sha384',
hash: 'sha384-yOCJ+8ShBm8UDqtAVtAvxTDDf4gXo5edxl/YG0FmVC5OTmqVLl7utuVGBDEeZWHf',
enforceIntegrity: true,
},
'https://unpkg.com/world-atlas@2/countries-50m.json': {
algorithm: 'sha384',
hash: 'sha384-Aw4s9pX1PTPntIYkZ/qV9IYiF5Gv8eTl6Dd/TT56zfO1Wwd+owFwYUuuXNUMrWkc',
enforceIntegrity: true,
},
// World Atlas from unpkg.com - Land data
'https://unpkg.com/world-atlas@2/land-110m.json': {
algorithm: 'sha384',
hash: 'sha384-5oFOGoMd0tkagYW08lVco4uAi7XDEDBwBxOdeKx+SA1ihbsHiR/aFAJGretluTzG',
enforceIntegrity: true,
},
'https://unpkg.com/world-atlas@2/land-50m.json': {
algorithm: 'sha384',
hash: 'sha384-c0VeCJd1wVbV5WQZNjf1hcMqPr9QXweEArnbdgS1k75TBNjta2M/NddyAulA/Glb',
enforceIntegrity: true,
},
};
const DEFAULT_SRI_CONFIG = {
enforceForKnownSources: true,
enforceForAllSources: false, // Don't enforce for all sources by default
allowUnknownSources: true, // Allow unknown sources by default
customSRIMap: {},
};
let currentSRIConfig = DEFAULT_SRI_CONFIG;
/**
* Configure SRI enforcement settings
* @param config - SRI enforcement configuration
*/
function configureSRI(config) {
currentSRIConfig = {
...DEFAULT_SRI_CONFIG,
...config,
};
}
/**
* Enable strict SRI mode (enforce for all sources)
*/
function enableStrictSRI() {
currentSRIConfig = {
...currentSRIConfig,
enforceForKnownSources: true,
enforceForAllSources: true,
allowUnknownSources: false,
};
}
/**
* Disable SRI enforcement (not recommended for production)
*/
function disableSRI() {
if (process.env.NODE_ENV === 'production') {
// eslint-disable-next-line no-console
console.warn('Disabling SRI in production is not recommended for security');
}
currentSRIConfig = {
...currentSRIConfig,
enforceForKnownSources: false,
enforceForAllSources: false,
allowUnknownSources: true,
};
}
/**
* Calculate SHA hash of data
* @param data - Data to hash
* @param algorithm - Hash algorithm to use
* @returns Promise resolving to base64-encoded hash
*/
async function calculateHash(data, algorithm) {
// Use Web Crypto API (available in browsers and Node.js 16+)
const hashBuffer = await globalThis.crypto.subtle.digest(algorithm, data);
const hashArray = new Uint8Array(hashBuffer);
// Convert to base64 (browser-compatible)
let hashBase64;
if (typeof globalThis.btoa !== 'undefined') {
// Browser environment
hashBase64 = globalThis.btoa(String.fromCharCode(...hashArray));
}
else {
// Node.js environment - use manual base64 encoding
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
let result = '';
let i = 0;
while (i < hashArray.length) {
const a = hashArray[i++] || 0;
const b = i < hashArray.length ? hashArray[i++] || 0 : 0;
const c = i < hashArray.length ? hashArray[i++] || 0 : 0;
const bitmap = (a << 16) | (b << 8) | c;
result += chars.charAt((bitmap >> 18) & 63);
result += chars.charAt((bitmap >> 12) & 63);
result +=
i - 2 < hashArray.length ? chars.charAt((bitmap >> 6) & 63) : '=';
result += i - 1 < hashArray.length ? chars.charAt(bitmap & 63) : '=';
}
hashBase64 = result;
}
return hashBase64;
}
/**
* Validate response integrity using SRI
* @param response - Fetch response to validate
* @param url - URL of the resource
* @param expectedSRI - Expected SRI configuration
* @returns Promise resolving to validated response
*/
async function validateSRI(response, url, expectedSRI) {
// Clone response to avoid consuming the body
const responseClone = response.clone();
const data = await responseClone.arrayBuffer();
// Validate using the ArrayBuffer approach
await validateSRIFromArrayBuffer(data, url, expectedSRI);
return response;
}
/**
* Validate ArrayBuffer integrity using SRI
* @param arrayBuffer - Data to validate
* @param url - URL of the resource
* @param expectedSRI - Expected SRI configuration
* @returns Promise that resolves if validation passes, throws if it fails
*/
async function validateSRIFromArrayBuffer(arrayBuffer, url, expectedSRI) {
// Calculate hash based on algorithm
const algorithmMap = {
sha256: 'SHA-256',
sha384: 'SHA-384',
sha512: 'SHA-512',
};
const calculatedHash = await calculateHash(arrayBuffer, algorithmMap[expectedSRI.algorithm]);
const expectedHash = expectedSRI.hash.replace(`${expectedSRI.algorithm}-`, '');
if (calculatedHash !== expectedHash) {
const sriError = new Error(`Subresource Integrity check failed for ${url}. Expected ${expectedSRI.algorithm}-${expectedHash}, got ${expectedSRI.algorithm}-${calculatedHash}`);
sriError.expectedHash = expectedSRI.hash;
sriError.calculatedHash = `${expectedSRI.algorithm}-${calculatedHash}`;
sriError.algorithm = expectedSRI.algorithm;
throw createGeographyFetchError('SECURITY_ERROR', sriError.message, url, sriError);
}
}
/**
* Check if SRI validation is required for a URL
* @param url - URL to check
* @returns SRI configuration if validation is required, null otherwise
*/
function getSRIForUrl(url) {
// Check custom SRI map first
if (currentSRIConfig.customSRIMap[url]) {
return currentSRIConfig.customSRIMap[url];
}
// Check known sources
if (KNOWN_GEOGRAPHY_SRI[url] && currentSRIConfig.enforceForKnownSources) {
return KNOWN_GEOGRAPHY_SRI[url];
}
// If enforcing for all sources but no SRI available
if (currentSRIConfig.enforceForAllSources) {
if (!currentSRIConfig.allowUnknownSources) {
throw createGeographyFetchError('SECURITY_ERROR', `SRI enforcement is enabled but no integrity hash is available for ${url}`, url);
}
}
return null;
}
/**
* Add custom SRI configuration for a URL
* @param url - URL to add SRI for
* @param sri - SRI configuration
*/
function addCustomSRI(url, sri) {
currentSRIConfig.customSRIMap[url] = sri;
}
/**
* Generate SRI hash for a given URL (utility for developers)
* This function fetches the resource and calculates its hash
* @param url - URL to generate SRI for
* @param algorithm - Hash algorithm to use
* @returns Promise resolving to SRI hash string
*/
async function generateSRIHash(url, algorithm = 'sha384') {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
}
const data = await response.arrayBuffer();
const algorithmMap = {
sha256: 'SHA-256',
sha384: 'SHA-384',
sha512: 'SHA-512',
};
const hash = await calculateHash(data, algorithmMap[algorithm]);
return `${algorithm}-${hash}`;
}
catch (error) {
throw createGeographyFetchError('GEOGRAPHY_LOAD_ERROR', `Failed to generate SRI hash for ${url}: ${error instanceof Error ? error.message : 'Unknown error'}`, url, error instanceof Error ? error : new Error(String(error)));
}
}
/**
* Validate multiple URLs and generate SRI configuration
* Utility function for setting up SRI for multiple geography sources
* @param urls - Array of URLs to generate SRI for
* @param algorithm - Hash algorithm to use
* @returns Promise resolving to SRI configuration map
*/
async function generateSRIForUrls(urls, algorithm = 'sha384') {
const sriMap = {};
for (const url of urls) {
try {
const hash = await generateSRIHash(url, algorithm);
sriMap[url] = {
algorithm,
hash,
enforceIntegrity: true,
};
}
catch (error) {
// eslint-disable-next-line no-console
console.warn(`Failed to generate SRI for ${url}:`, error);
}
}
return sriMap;
}
/** Maximum number of redirect hops allowed */
const MAX_REDIRECTS = 5;
/**
* Creates fetch options with security headers and timeout.
* Uses `redirect: 'manual'` so each redirect hop can be validated against the URL policy.
* @param signal - AbortController signal for timeout
* @returns Fetch options object
*/
function createSecureFetchOptions(signal) {
return {
signal,
headers: {
Accept: GEOGRAPHY_FETCH_CONFIG.ALLOWED_CONTENT_TYPES.join(', '),
'Cache-Control': 'public, max-age=3600', // Cache for 1 hour
},
// Security headers
mode: 'cors',
credentials: 'omit', // Don't send credentials
redirect: 'manual', // Handle redirects manually to validate each hop
};
}
/**
* Follows redirects manually, validating each hop against the URL security policy.
* Prevents redirect-based SSRF bypasses.
* @param url - The initial URL to fetch
* @param options - Fetch options (must have redirect: 'manual')
* @returns The final non-redirect response
*/
async function fetchWithRedirectValidation(url, options) {
let currentUrl = url;
for (let hop = 0; hop < MAX_REDIRECTS; hop++) {
const response = await fetch(currentUrl, options);
// Not a redirect — return directly
if (response.status < 300 || response.status >= 400) {
return response;
}
// Consume the redirect response body to release connection resources
try {
await response.arrayBuffer();
}
catch {
// Ignore body-consumption errors — they must not mask redirect handling
}
// Extract and validate the redirect target
const location = response.headers.get('location');
if (!location) {
throw createGeographyFetchError('SECURITY_ERROR', `Redirect response (HTTP ${response.status}) missing Location header`, currentUrl);
}
// Resolve relative redirects against current URL
const redirectUrl = new URL(location, currentUrl).href;
// Validate the redirect target against the same URL security policy
validateGeographyUrl(redirectUrl);
currentUrl = redirectUrl;
}
throw createGeographyFetchError('SECURITY_ERROR', `Too many redirects (exceeded ${MAX_REDIRECTS} hops)`, url);
}
/**
* Creates an abort controller with timeout
* @param timeoutMs - Timeout in milliseconds
* @returns Object with controller and cleanup function
*/
function createTimeoutController(timeoutMs) {
const controller = new AbortController();
const timeoutId = setTimeout(() => {
controller.abort();
}, timeoutMs);
return {
controller,
cleanup: () => clearTimeout(timeoutId),
};
}
/**
* Handles fetch errors and converts them to geography-specific errors
* @param error - The original error
* @param url - The URL that was being fetched
* @returns A GeographyError
*/
function handleFetchError(error, url) {
if (error instanceof Error) {
if (error.name === 'AbortError') {
return createGeographyFetchError('GEOGRAPHY_LOAD_ERROR', `Request timeout after ${GEOGRAPHY_FETCH_CONFIG.TIMEOUT_MS}ms`, url, error);
}
if (error.name === 'TypeError' && error.message.includes('fetch')) {
return createGeographyFetchError('GEOGRAPHY_LOAD_ERROR', `Network error: Unable to fetch geography from ${url}`, url, error);
}
if (error.message.includes('Invalid geography data')) {
return createGeographyFetchError('GEOGRAPHY_PARSE_ERROR', error.message, url, error);
}
}
// Re-throw if it's already a GeographyError
if (error instanceof Error && 'type' in error) {
return error;
}
// Default error
return createGeographyFetchError('GEOGRAPHY_LOAD_ERROR', error instanceof Error ? error.message : 'Unknown error occurred', url, error instanceof Error ? error : undefined);
}
/**
* Parses JSON from ArrayBuffer with proper error handling
* @param arrayBuffer - The response data as ArrayBuffer
* @param url - The URL for error context
* @returns Parsed geography data
*/
async function parseGeographyFromArrayBuffer(arrayBuffer, url) {
try {
const text = new TextDecoder().decode(arrayBuffer);
const data = JSON.parse(text);
validateGeographyData(data);
return data;
}
catch (jsonError) {
if (jsonError instanceof SyntaxError) {
throw createGeographyFetchError('GEOGRAPHY_PARSE_ERROR', 'Invalid JSON format in geography data', url, jsonError);
}
throw jsonError;
}
}
/**
* Fetch geography data with full security validation.
*
* @deprecated Since v2.1.0 — use {@link fetchGeographiesCache} instead for
* cached, secure fetching. This function now delegates to the hardened pipeline
* but swallows errors for backward compatibility.
*
* @param url - The URL to fetch geography data from
* @returns Promise resolving to geography data or undefined on error
*/
async function fetchGeographies(url) {
if (typeof process !== 'undefined' &&
process?.env?.NODE_ENV !== 'production') {
// eslint-disable-next-line no-console
console.warn('fetchGeographies is deprecated. Use fetchGeographiesCache for secure, cached fetching.');
}
try {
return await fetchGeographiesCache(url);
}
catch {
return undefined;
}
}
/**
* Secure, cached geography fetching with comprehensive validation
* This function is cached using React's cache() for optimal performance
*/
const fetchGeographiesCache = cache(async (url) => {
// Validate URL before making request
validateGeographyUrl(url);
// Check if SRI validation is required
const sriConfig = getSRIForUrl(url);
// Create timeout controller
const { controller, cleanup } = createTimeoutController(GEOGRAPHY_FETCH_CONFIG.TIMEOUT_MS);
try {
// Make secure fetch request with redirect validation
const response = await fetchWithRedirectValidation(url, createSecureFetchOptions(controller.signal));
cleanup();
// Validate response
if (!response.ok) {
throw createGeographyFetchError('GEOGRAPHY_LOAD_ERROR', `HTTP ${response.status}: ${response.statusText}`, url);
}
// Validate content type and fast pre-check of Content-Length
validateContentType(response);
await validateResponseSize(response);
// Read body with hard streaming size limit (guards against falsified Content-Length)
const arrayBuffer = await readResponseWithSizeLimit(response);
// Handle SRI validation if required
if (sriConfig) {
await validateSRIFromArrayBuffer(arrayBuffer, url, sriConfig);
}
// Parse JSON from the already-read ArrayBuffer
return await parseGeographyFromArrayBuffer(arrayBuffer, url);
}
catch (error) {
cleanup();
throw handleFetchError(error, url);
}
});
/**
* Preloads geography data for better performance
* @param url - The URL to preload
*/
function preloadGeography$1(url) {
// Import and use the preload utility with immediate flag
Promise.resolve().then(function () { return preloading; })
.then(({ preloadGeography: preloadUtil }) => {
preloadUtil(url, true); // immediate = true
})
.catch(() => {
// Silently handle import errors
});
// Also preload the actual data
fetchGeographiesCache(url).catch(() => {
// Silently ignore preload errors
});
}
/**
* Checks if the input is a string (URL)
* @param geo - Geography data or URL
* @returns True if input is a string
*/
function isString(geo) {
return typeof geo === 'string';
}
/**
* Extracts features from topology data
* @param topology - Topology object
* @param parseGeographies - Optional parser function
* @returns Array of features
*/
function extractFeaturesFromTopology(topology, parseGeographies) {
const objectKeys = Object.keys(topology.objects);
if (objectKeys.length === 0) {
return [];
}
// Get the first object (usually countries, states, etc.)
const firstObjectKey = objectKeys[0];
if (!firstObjectKey) {
return [];
}
const geometryObject = topology.objects[firstObjectKey];
if (!geometryObject) {
return [];
}
const featureCollection = feature(topology, geometryObject);
const features = 'features' in featureCollection ? featureCollection.features || [] : [];
return parseGeographies ? parseGeographies(features) : features;
}
/**
* Extracts features from FeatureCollection
* @param featureCollection - FeatureCollection object
* @param parseGeographies - Optional parser function
* @returns Array of features
*/
function extractFeaturesFromCollection(featureCollection, parseGeographies) {
const features = featureCollection.features || [];
return parseGeographies ? parseGeographies(features) : features;
}
/**
* Extracts features from various geography data formats
* @param geographies - Geography data (Topology, FeatureCollection, or Feature array)
* @param parseGeographies - Optional parser function for features
* @returns Array of features
*/
function getFeatures(geographies, parseGeographies) {
// Handle array of features
if (Array.isArray(geographies)) {
return parseGeographies ? parseGeographies(geographies) : geographies;
}
// Handle Topology
if (geographies.type === 'Topology') {
return extractFeaturesFromTopology(geographies, parseGeographies);
}
// Handle FeatureCollection
if (geographies.type === 'FeatureCollection') {
return extractFeaturesFromCollection(geographies, parseGeographies);
}
return [];
}
/**
* Extracts mesh data from topology for borders and outlines
* @param topology - Topology object
* @returns Mesh data with outline and borders, or null if not available
*/
function extractMeshFromTopology(topology) {
const objectKeys = Object.keys(topology.objects);
if (objectKeys.length === 0) {
return null;
}
const firstObjectKey = objectKeys[0];
if (!firstObjectKey) {
return null;
}
const geometryObject = topology.objects[firstObjectKey];
if (!geometryObject) {
return null;
}
try {
// Generate outline (exterior boundaries)
const outline = mesh(topology, geometryObject, (a, b) => a === b);
// Generate borders (interior boundaries)
const borders = mesh(topology, geometryObject, (a, b) => a !== b);
return { outline, borders };
}
catch {
return null;
}
}
/**
* Extracts mesh data from geography data
* @param geographies - Geography data (only Topology supports mesh)
* @returns Mesh data or null
*/
function getMesh(geographies) {
// Only Topology supports mesh generation
if (geographies &&
typeof geographies === 'object' &&
!Array.isArray(geographies) &&
'type' in geographies &&
geographies.type === 'Topology') {
return extractMeshFromTopology(geographies);
}
return null;
}
/**
* Prepares mesh data by generating SVG paths
* @param outline - Outline geometry
* @param borders - Borders geometry
* @param path - D3 path generator
* @returns Object with SVG path strings
*/
function prepareMesh(outline, borders, path) {
const result = {};
if (outline) {
const outlinePath = path(outline);
if (outlinePath) {
result.outline = outlinePath;
}
}
if (borders) {
const bordersPath = path(borders);
if (bordersPath) {
result.borders = bordersPath;
}
}
return result;
}
/**
* Prepares features by generating SVG paths for each feature
* @param features - Array of features to prepare
* @param path - D3 path generator
* @returns Array of prepared features with SVG paths
*/
function prepareFeatures(features, path) {
if (!features || features.length === 0) {
return [];
}
return features
.map((feature) => {
const svgPath = path(feature);
if (!svgPath) {
return null;
}
return {
...feature,
svgPath,
};
})
.filter((feature) => feature !== null);
}
/**
* Creates a connector path between two coordinates
* @param start - Starting coordinates [longitude, latitude]
* @param end - Ending coordinates [longitude, latitude]
* @param curve - D3 curve function for path interpolation
* @returns SVG path string
*/
function createConnectorPath(start, end, curve) {
// Type guard for curve function
if (typeof curve !== 'function') {
return '';
}
try {
// Use type assertion for D3 curve - this is a known external API
const curveFactory = curve;
const line = curveFactory()
.x((d) => d[0])
.y((d) => d[1]);
return line([start, end]) || '';
}
catch {
return '';
}
}
// Re-export utilities from focused modules
// Type guards and validation utilities remain in this file
// Advanced type guards for runtime type checking
// Geography data type guards
function isTopology(value) {
if (typeof value !== 'object' || value === null)
return false;
const obj = value;
return (obj.type === 'Topology' &&
typeof obj.objects === 'object' &&
obj.objects !== null &&
Array.isArray(obj.arcs));
}
function isFeatureCollection(value) {
if (typeof value !== 'object' || value === null)
return false;
const obj = value;
return obj.type === 'FeatureCollection' && Array.isArray(obj.features);
}
function isFeature(value) {
if (typeof value !== 'object' || value === null)
return false;
const obj = value;
return obj.type === 'Feature' && 'geometry' in obj && 'properties' in obj;
}
function isValidGeometry(value) {
if (typeof value !== 'object' || value === null)
return false;
const obj = value;
if (!('type' in obj))
return false;
const validTypes = [
'Point',
'LineString',
'Polygon',
'MultiPoint',
'MultiLineString',
'MultiPolygon',
'GeometryCollection',
];
return validTypes.includes(obj.type);
}
// Coordinate type guards
function isValidLongitude(value) {
return typeof value === 'number' && value >= -180 && value <= 180;
}
function isValidLatitude(value) {
return typeof value === 'number' && value >= -90 && value <= 90;
}
function isValidCoordinates(value) {
return (Array.isArray(value) &&
value.length === 2 &&
isValidLongitude(value[0]) &&
isValidLatitude(value[1]));
}
// Projection type guards
function isGeoProjection(value) {
return (typeof value === 'function' &&
'invert' in value &&
typeof value.invert === 'function');
}
function isProjectionName(value) {
return (typeof value === 'string' && value.startsWith('geo') && value.length > 3);
}
// Error type guards
function isGeographyError(error) {
if (!(error instanceof Error))
return false;
const errorObj = error;
return ('type' in errorObj &&
typeof errorObj.type === 'string' &&
[
'GEOGRAPHY_LOAD_ERROR',
'GEOGRAPHY_PARSE_ERROR',
'PROJECTION_ERROR',
'VALIDATION_ERROR',
'SECURITY_ERROR',
'CONFIGURATION_ERROR',
'CONTEXT_ERROR',
].includes(errorObj.type));
}
// URL validation type guard
function isValidGeographyUrl(value) {
if (typeof value !== 'string')
return false;
try {
const url = new URL(value);
// Allow HTTPS and HTTP for localhost only
if (url.protocol === 'https:')
return true;
if (url.protocol === 'http:' && url.hostname === 'localhost')
return true;
return false;
}
catch {
return false;
}
}
// Complex validation type guards
function isValidGeographyData(value) {
return isTopology(value) || isFeatureCollection(value);
}
function isValidMapDimensions(width, height) {
return (typeof width === 'number' &&
typeof height === 'number' &&
width > 0 &&
height > 0 &&
Number.isFinite(width) &&
Number.isFinite(height));
}
// Factory function for creating custom type guards
function createTypeGuard(predicate) {
return (value) => predicate(value);
}
// Utility functions to create enhanced geography errors
function createGeographyError(type, message, geography, details) {
const error = new Error(message);
error.type = type;
if (geography)
error.geography = geography;
if (details)
error.details = details;
return error;
}
// Convenience functions for creating specific error types
function createValidationError(message, geography, details) {
return createGeographyError('VALIDATION_ERROR', message, geography, details);
}
function createSecurityError(message, geography, details) {
return createGeographyError('SECURITY_ERROR', message, geography, details);
}
function createProjectionError(message, geography, details) {
return createGeographyError('PROJECTION_ERROR', message, geography, details);
}
function createConfigurationError(message, geography, details) {
return createGeographyError('CONFIGURATION_ERROR', message, geography, details);
}
function createContextError(message, geography, details) {
return createGeographyError('CONTEXT_ERROR', message, geography, details);
}
// React 19 resource preloading utilities for geography data
// Track preloaded URLs to avoid duplicate preloads
const preloadedUrls = new Set();
/**
* Preload geography resources for better performance
* Only preloads if the resource will be used soon
*/
function preloadGeography(url, immediate = false) {
if (typeof url !== 'string' || !url) {
return;
}
// Avoid duplicate preloads
if (preloadedUrls.has(url)) {
return;
}
try {
const parsedUrl = new URL(url);
// Always prefetch DNS and preconnect (lightweight operations)
prefetchDNS(parsedUrl.origin);
preconnect(parsedUrl.origin);
// Only preload the actual resource if immediate or in production
const shouldPreloadResource = immediate ||
(typeof process !== 'undefined' && process.env.NODE_ENV === 'production');
if (shouldPreloadResource) {
preload(url, {
as: 'fetch',
crossOrigin: 'anonymous', // Most geography APIs support CORS
});
preloadedUrls.add(url);
}
}
catch (error) {
// Silently handle invalid URLs in development only
if (typeof process !== 'undefined' &&
process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line no-console
console.warn('Failed to preload geography resource:', error);
}
}
}
var preloading = /*#__PURE__*/Object.freeze({
__proto__: null,
preloadGeography: preloadGeography
});
export { DEFAULT_GEOGRAPHY_FETCH_CONFIG, DEFAULT_SRI_CONFIG, DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG, KNOWN_GEOGRAPHY_SRI, addCustomSRI, configureGeographySecurity, configureSRI, createConfigurationError, createConnectorPath, createContextError, createGeographyError, createGeographyFetchError, createProjectionError, createSecurityError, createTypeGuard, createValidationError, disableSRI, enableDevelopmentMode, enableStrictSRI, fetchGeographies, fetchGeographiesCache, generateSRIForUrls, generateSRIHash, getCoords, getFeatures, getMesh, getSRIForUrl, isFeature, isFeatureCollection, isGeoProjection, isGeographyError, isProjectionName, isString, isTopology, isValidCoordinates, isValidGeographyData, isValidGeographyUrl, isValidGeometry, isValidLatitude, isValidLongitude, isValidMapDimensions, preloadGeography$1 as preloadGeography, prepareFeatures, prepareMesh, readResponseWithSizeLimit, validateContentType, validateGeographyData, validateGeographyUrl, validateResponseSize, validateSRI };
function t(t,n,o){const r=(t*o.k-t)/2,e=(n*o.k-n)/2;return c=t/2-(r+o.x)/o.k,i=n/2-(e+o.y)/o.k,[c,i];var c,i}function n(t,n,o,r){const e=new Error(n);return e.name="GeographyError",e.type=t,e.timestamp=(new Date).toISOString(),o&&(e.geography=o),r&&(e.cause=r,r.stack&&(e.stack=r.stack),e.details={originalMessage:r.message,originalName:r.name}),e}function o(t){et={...ot,...t}}function r(t=!0){if("production"===process.env.NODE_ENV)return void 0,void 0;et={...rt,ALLOW_HTTP_LOCALHOST:t}}function e(t){return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}function c(t){if(!t||"localhost"===t)return!1;const n=e(t),o=[/^10\./,/^172\.(1[6-9]|2[0-9]|3[01])\./,/^192\.168\./,/^127\./,/^169\.254\./,/^0\./,/^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./,/^192\.0\.0\./,/^192\.0\.2\./,/^198\.51\.100\./,/^203\.0\.113\./,/^198\.1[89]\./,/^233\.252\.0\./];for(const t of o)if(t.test(n))return!0;const r=[/^::1$/i,/^fe[89ab][0-9a-f]:/i,/^f[cd][0-9a-f]{2}:/i,/^::$/i,/^ff[0-9a-f]{2}:/i,/^100::/i,/^2001:db8:/i,/^2001:(?:0{1,4}:|:)/i];for(const t of r)if(t.test(n))return!0;const i=n.match(/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i);if(i?.[1])return c(i[1]);const s=n.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);if(s?.[1]&&s[2]){const t=parseInt(s[1],16),n=parseInt(s[2],16);return c(`${t>>8&255}.${255&t}.${n>>8&255}.${255&n}`)}return!1}function i(t){const o=function(t){if(!t||"string"!=typeof t)throw new Error("URL must be a non-empty string");try{return new URL(t),t.trim()}catch{throw new Error("Invalid URL format")}}(t);try{const r=new URL(o);if(et.STRICT_HTTPS_ONLY){if("https:"!==r.protocol)throw n("SECURITY_ERROR",`Strict HTTPS-only mode: ${r.protocol} is not allowed. Only HTTPS is permitted.`,t)}else{if(!et.ALLOWED_PROTOCOLS.includes(r.protocol)){const o=et.ALLOWED_PROTOCOLS.join(", ");throw n("SECURITY_ERROR",`Unsupported protocol: ${r.protocol}. Only ${o} are allowed.`,t)}if("http:"===r.protocol){if(!et.ALLOW_HTTP_LOCALHOST)throw n("SECURITY_ERROR","HTTP protocol is disabled for security. Use HTTPS or enable development mode explicitly.",t);const o=e(r.hostname);if("localhost"!==o&&"127.0.0.1"!==o&&"::1"!==o)throw n("SECURITY_ERROR","HTTP protocol is only allowed for localhost. Use HTTPS for remote URLs.",t);if("production"===process.env.NODE_ENV)throw n("SECURITY_ERROR","HTTP localhost access is not allowed in production",t);void 0}}const i=e(r.hostname);if(("localhost"===i||"127.0.0.1"===i||"::1"===i)&&"production"===process.env.NODE_ENV)throw n("SECURITY_ERROR","Localhost access is not allowed in production",t);if(c(r.hostname))throw n("SECURITY_ERROR",`Access to private IP address ${r.hostname} is not allowed`,t)}catch(o){if(o instanceof TypeError)throw n("VALIDATION_ERROR",`Invalid URL format: ${t}`,t,o);throw o}}function s(t){const o=t.headers.get("content-type");if(!o)throw n("VALIDATION_ERROR","Missing Content-Type header");if(!et.ALLOWED_CONTENT_TYPES.some(t=>o.toLowerCase().includes(t)))throw n("VALIDATION_ERROR",`Invalid content type: ${o}. Expected one of: ${et.ALLOWED_CONTENT_TYPES.join(", ")}`)}async function a(t){const o=t.headers.get("content-length");if(o){const t=parseInt(o,10);if(t>et.MAX_RESPONSE_SIZE)throw n("VALIDATION_ERROR",`Response too large: ${t} bytes. Maximum allowed: ${et.MAX_RESPONSE_SIZE} bytes`)}}async function f(t,o=et.MAX_RESPONSE_SIZE){const r=t.body?.getReader();if(!r){const r=await t.arrayBuffer();if(r.byteLength>o)throw n("VALIDATION_ERROR",`Response too large: ${r.byteLength} bytes exceeds limit of ${o} bytes`);return r}const e=[];let c=0;for(;;){const{done:t,value:i}=await r.read();if(t)break;if(c+=i.byteLength,c>o)throw r.cancel().catch(()=>{}),n("VALIDATION_ERROR",`Response too large: exceeded limit of ${o} bytes`);e.push(i)}const i=new Uint8Array(c);let s=0;for(const t of e)i.set(t,s),s+=t.byteLength;return i.buffer}function u(t){if(!t||"object"!=typeof t)throw n("VALIDATION_ERROR","Invalid geography data: not a valid object");const o=t;if(!o.type||"Topology"!==o.type&&"FeatureCollection"!==o.type)throw n("VALIDATION_ERROR",`Invalid geography data: expected Topology or FeatureCollection, got ${o.type}`)}function l(t){st={...it,...t}}function R(){st={...st,enforceForKnownSources:!0,enforceForAllSources:!0,allowUnknownSources:!1}}function h(){"production"===process.env.NODE_ENV,0,st={...st,enforceForKnownSources:!1,enforceForAllSources:!1,allowUnknownSources:!0}}async function p(t,n){const o=await globalThis.crypto.subtle.digest(n,t),r=new Uint8Array(o);let e;if(void 0!==globalThis.btoa)e=globalThis.btoa(String.fromCharCode(...r));else{const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";let n="",o=0;for(;o<r.length;){const e=(r[o++]||0)<<16|(o<r.length&&r[o++]||0)<<8|(o<r.length&&r[o++]||0);n+=t.charAt(e>>18&63),n+=t.charAt(e>>12&63),n+=o-2<r.length?t.charAt(e>>6&63):"=",n+=o-1<r.length?t.charAt(63&e):"="}e=n}return e}async function O(t,n,o){const r=t.clone(),e=await r.arrayBuffer();return await y(e,n,o),t}async function y(t,o,r){const e=await p(t,{sha256:"SHA-256",sha384:"SHA-384",sha512:"SHA-512"}[r.algorithm]),c=r.hash.replace(`${r.algorithm}-`,"");if(e!==c){const t=new Error(`Subresource Integrity check failed for ${o}. Expected ${r.algorithm}-${c}, got ${r.algorithm}-${e}`);throw t.expectedHash=r.hash,t.calculatedHash=`${r.algorithm}-${e}`,t.algorithm=r.algorithm,n("SECURITY_ERROR",t.message,o,t)}}function E(t){try{const n=new URL(t);return n.hash="",("https:"===n.protocol&&"443"===n.port||"http:"===n.protocol&&"80"===n.port)&&(n.port=""),n.pathname=n.pathname.replace(/\/+$/,"")||"/",n.href}catch{return t}}function d(t){const o=E(t);if(st.customSRIMap[o])return st.customSRIMap[o];if(st.customSRIMap[t])return st.customSRIMap[t];if(ct[o]&&st.enforceForKnownSources)return ct[o];if(ct[t]&&st.enforceForKnownSources)return ct[t];if(st.enforceForAllSources&&!st.allowUnknownSources)throw n("SECURITY_ERROR",`SRI enforcement is enabled but no integrity hash is available for ${t}`,t);return null}function T(t,n){const o=E(t);st.customSRIMap[o]=n,o!==t&&(st.customSRIMap[t]=n)}async function w(t,o="sha384"){try{const n=await fetch(t);if(!n.ok)throw new Error(`Failed to fetch ${t}: ${n.statusText}`);const r=await n.arrayBuffer(),e={sha256:"SHA-256",sha384:"SHA-384",sha512:"SHA-512"};return`${o}-${await p(r,e[o])}`}catch(o){throw n("GEOGRAPHY_LOAD_ERROR",`Failed to generate SRI hash for ${t}: ${o instanceof Error?o.message:"Unknown error"}`,t,o instanceof Error?o:new Error(String(o)))}}async function A(t,n="sha384"){const o={};for(const r of t)try{const t=await w(r,n);o[r]={algorithm:n,hash:t,enforceIntegrity:!0}}catch(t){void 0}return o}async function g(t){"undefined"!=typeof process&&"production"!==process?.env?.NODE_ENV,0;try{return await at(t)}catch{return}}function _(t){Promise.resolve().then(function(){return ut}).then(({preloadGeography:n})=>{n(t,!0)}).catch(()=>{}),at(t).catch(()=>{})}function S(t){return"string"==typeof t}function I(t,n){return Array.isArray(t)?n?n(t):t:"Topology"===t.type?function(t,n){const o=Object.keys(t.objects);if(0===o.length)return[];const r=o[0];if(!r)return[];const e=t.objects[r];if(!e)return[];const c=K(t,e),i="features"in c&&c.features||[];return n?n(i):i}(t,n):"FeatureCollection"===t.type?function(t,n){const o=t.features||[];return n?n(o):o}(t,n):[]}function m(t){return t&&"object"==typeof t&&!Array.isArray(t)&&"type"in t&&"Topology"===t.type?function(t){const n=Object.keys(t.objects);if(0===n.length)return null;const o=n[0];if(!o)return null;const r=t.objects[o];if(!r)return null;try{return{outline:Z(t,r,(t,n)=>t===n),borders:Z(t,r,(t,n)=>t!==n)}}catch{return null}}(t):null}function L(t,n,o){const r={};if(t){const n=o(t);n&&(r.outline=n)}if(n){const t=o(n);t&&(r.borders=t)}return r}function b(t,n){return t&&0!==t.length?t.map(t=>{const o=n(t);return o?{...t,svgPath:o}:null}).filter(t=>null!==t):[]}function P(t,n,o){if("function"!=typeof o)return"";try{return o().x(t=>t[0]).y(t=>t[1])([t,n])||""}catch{return""}}function $(t){if("object"!=typeof t||null===t)return!1;const n=t;return"Topology"===n.type&&"object"==typeof n.objects&&null!==n.objects&&Array.isArray(n.arcs)}function U(t){if("object"!=typeof t||null===t)return!1;const n=t;return"FeatureCollection"===n.type&&Array.isArray(n.features)}function C(t){if("object"!=typeof t||null===t)return!1;const n=t;return"Feature"===n.type&&"geometry"in n&&"properties"in n}function H(t){return"object"==typeof t&&null!==t&&("type"in t&&["Point","LineString","Polygon","MultiPoint","MultiLineString","MultiPolygon","GeometryCollection"].includes(t.type))}function N(t){return"number"==typeof t&&t>=-180&&t<=180}function G(t){return"number"==typeof t&&t>=-90&&t<=90}function Y(t){return Array.isArray(t)&&2===t.length&&N(t[0])&&G(t[1])}function D(t){return"function"==typeof t&&"invert"in t&&"function"==typeof t.invert}function v(t){return"string"==typeof t&&t.startsWith("geo")&&t.length>3}function j(t){if(!(t instanceof Error))return!1;const n=t;return"type"in n&&"string"==typeof n.type&&["GEOGRAPHY_LOAD_ERROR","GEOGRAPHY_PARSE_ERROR","PROJECTION_ERROR","VALIDATION_ERROR","SECURITY_ERROR","CONFIGURATION_ERROR","CONTEXT_ERROR"].includes(n.type)}function F(t){if("string"!=typeof t)return!1;try{const n=new URL(t);return"https:"===n.protocol||"http:"===n.protocol&&"localhost"===n.hostname}catch{return!1}}function V(t){return $(t)||U(t)}function k(t,n){return"number"==typeof t&&"number"==typeof n&&t>0&&n>0&&Number.isFinite(t)&&Number.isFinite(n)}function x(t){return n=>t(n)}function M(t,n,o,r){const e=new Error(n);return e.type=t,o&&(e.geography=o),r&&(e.details=r),e}function W(t,n,o){return M("VALIDATION_ERROR",t,n,o)}function X(t,n,o){return M("SECURITY_ERROR",t,n,o)}function J(t,n,o){return M("PROJECTION_ERROR",t,n,o)}function q(t,n,o){return M("CONFIGURATION_ERROR",t,n,o)}function B(t,n,o){return M("CONTEXT_ERROR",t,n,o)}import{feature as K,mesh as Z}from"topojson-client";import{cache as z}from"react";import{prefetchDNS as Q,preconnect as tt,preload as nt}from"react-dom";const ot={TIMEOUT_MS:1e4,MAX_RESPONSE_SIZE:52428800,ALLOWED_CONTENT_TYPES:["application/json","application/geo+json"],ALLOWED_PROTOCOLS:["https:"],ALLOW_HTTP_LOCALHOST:!1,STRICT_HTTPS_ONLY:!0},rt={...ot,ALLOWED_PROTOCOLS:["https:","http:"],ALLOW_HTTP_LOCALHOST:!0,STRICT_HTTPS_ONLY:!1};let et=ot;const ct={"https://unpkg.com/world-atlas@2/countries-110m.json":{algorithm:"sha384",hash:"sha384-yOCJ+8ShBm8UDqtAVtAvxTDDf4gXo5edxl/YG0FmVC5OTmqVLl7utuVGBDEeZWHf",enforceIntegrity:!0},"https://unpkg.com/world-atlas@2/countries-50m.json":{algorithm:"sha384",hash:"sha384-Aw4s9pX1PTPntIYkZ/qV9IYiF5Gv8eTl6Dd/TT56zfO1Wwd+owFwYUuuXNUMrWkc",enforceIntegrity:!0},"https://unpkg.com/world-atlas@2/land-110m.json":{algorithm:"sha384",hash:"sha384-5oFOGoMd0tkagYW08lVco4uAi7XDEDBwBxOdeKx+SA1ihbsHiR/aFAJGretluTzG",enforceIntegrity:!0},"https://unpkg.com/world-atlas@2/land-50m.json":{algorithm:"sha384",hash:"sha384-c0VeCJd1wVbV5WQZNjf1hcMqPr9QXweEArnbdgS1k75TBNjta2M/NddyAulA/Glb",enforceIntegrity:!0}},it={enforceForKnownSources:!0,enforceForAllSources:!1,allowUnknownSources:!0,customSRIMap:{}};let st=it;const at=z(async t=>{i(t);const o=d(t),{controller:r,cleanup:e}=function(t){const n=new AbortController,o=setTimeout(()=>{n.abort()},t);return{controller:n,cleanup:()=>clearTimeout(o)}}(et.TIMEOUT_MS);try{const l=await async function(t,o){let r=t;for(let t=0;t<5;t++){const t=await fetch(r,o);if(t.status<300||t.status>=400)return t;try{await t.arrayBuffer()}catch{}const e=t.headers.get("location");if(!e)throw n("SECURITY_ERROR",`Redirect response (HTTP ${t.status}) missing Location header`,r);const c=new URL(e,r).href;i(c),r=c}throw n("SECURITY_ERROR","Too many redirects (exceeded 5 hops)",t)}(t,(c=r.signal,{signal:c,headers:{Accept:et.ALLOWED_CONTENT_TYPES.join(", "),"Cache-Control":"public, max-age=3600"},mode:"cors",credentials:"omit",redirect:"manual"}));if(e(),!l.ok)throw n("GEOGRAPHY_LOAD_ERROR",`HTTP ${l.status}: ${l.statusText}`,t);s(l),await a(l);const R=await f(l);return o&&await y(R,t,o),await async function(t,o){try{const n=(new TextDecoder).decode(t),o=JSON.parse(n);return u(o),o}catch(t){if(t instanceof SyntaxError)throw n("GEOGRAPHY_PARSE_ERROR","Invalid JSON format in geography data",o,t);throw t}}(R,t)}catch(o){throw e(),function(t,o){if(t instanceof Error){if("AbortError"===t.name)return n("GEOGRAPHY_LOAD_ERROR",`Request timeout after ${et.TIMEOUT_MS}ms`,o,t);if("TypeError"===t.name&&t.message.includes("fetch"))return n("GEOGRAPHY_LOAD_ERROR",`Network error: Unable to fetch geography from ${o}`,o,t);if(t.message.includes("Invalid geography data"))return n("GEOGRAPHY_PARSE_ERROR",t.message,o,t)}return t instanceof Error&&"type"in t?t:n("GEOGRAPHY_LOAD_ERROR",t instanceof Error?t.message:"Unknown error occurred",o,t instanceof Error?t:void 0)}(o,t)}var c}),ft=new Set;var ut=Object.freeze({__proto__:null,preloadGeography:function(t,n=!1){if("string"==typeof t&&t&&!ft.has(t))try{i(t);const o=new URL(t);Q(o.origin),tt(o.origin),ft.add(t),(n||"undefined"!=typeof process&&"production"===process.env.NODE_ENV)&&nt(t,{as:"fetch",crossOrigin:"anonymous"})}catch(t){"undefined"!=typeof process&&"production"!==process.env.NODE_ENV&&(t instanceof Error?t.message:String(t))}}});export{ot as DEFAULT_GEOGRAPHY_FETCH_CONFIG,it as DEFAULT_SRI_CONFIG,rt as DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG,ct as KNOWN_GEOGRAPHY_SRI,T as addCustomSRI,o as configureGeographySecurity,l as configureSRI,q as createConfigurationError,P as createConnectorPath,B as createContextError,M as createGeographyError,n as createGeographyFetchError,J as createProjectionError,X as createSecurityError,x as createTypeGuard,W as createValidationError,h as disableSRI,r as enableDevelopmentMode,R as enableStrictSRI,g as fetchGeographies,at as fetchGeographiesCache,A as generateSRIForUrls,w as generateSRIHash,t as getCoords,I as getFeatures,m as getMesh,d as getSRIForUrl,C as isFeature,U as isFeatureCollection,D as isGeoProjection,j as isGeographyError,v as isProjectionName,S as isString,$ as isTopology,Y as isValidCoordinates,V as isValidGeographyData,F as isValidGeographyUrl,H as isValidGeometry,G as isValidLatitude,N as isValidLongitude,k as isValidMapDimensions,_ as preloadGeography,b as prepareFeatures,L as prepareMesh,f as readResponseWithSizeLimit,s as validateContentType,u as validateGeographyData,i as validateGeographyUrl,a as validateResponseSize,O as validateSRI};
//# sourceMappingURL=utils.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"utils.js","sources":["../src/types.ts","../src/utils/coordinate-utils.ts","../src/utils/error-utils.ts","../src/utils/geography-validation.ts","../src/utils/subresource-integrity.ts","../src/utils/geography-fetching.ts","../src/utils/geography-processing.ts","../src/utils.ts","../src/utils/preloading.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["preloadGeography"],"mappings":"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"}
{"version":3,"file":"utils.js","sources":["../src/utils/coordinate-utils.ts","../src/types.ts","../src/utils/error-utils.ts","../src/utils/geography-validation.ts","../src/utils/subresource-integrity.ts","../src/utils/geography-fetching.ts","../src/utils/geography-processing.ts","../src/utils.ts","../src/utils/preloading.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["getCoords","w","h","t","xOffset","k","yOffset","lon","x","lat","y","createGeographyFetchError","type","message","url","originalError","error","Error","name","timestamp","Date","toISOString","geography","cause","stack","details","originalMessage","originalName","configureGeographySecurity","config","GEOGRAPHY_FETCH_CONFIG","DEFAULT_GEOGRAPHY_FETCH_CONFIG","enableDevelopmentMode","allowHttpLocalhost","process","env","NODE_ENV","console","DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG","ALLOW_HTTP_LOCALHOST","stripIPv6Brackets","hostname","startsWith","endsWith","slice","isPrivateIPAddress","normalised","ipv4PrivateRanges","range","test","ipv6PrivateRanges","ipv4MappedDottedMatch","match","ipv4MappedHexMatch","hi","parseInt","lo","validateGeographyUrl","validatedUrl","URL","trim","validateURL","parsedUrl","STRICT_HTTPS_ONLY","protocol","ALLOWED_PROTOCOLS","includes","allowedProtocols","join","httpHost","bareHostname","TypeError","validateContentType","response","contentType","headers","get","ALLOWED_CONTENT_TYPES","some","toLowerCase","async","validateResponseSize","contentLength","size","MAX_RESPONSE_SIZE","readResponseWithSizeLimit","maxBytes","reader","body","getReader","buffer","arrayBuffer","byteLength","chunks","totalBytes","done","value","read","cancel","catch","push","result","Uint8Array","offset","chunk","set","validateGeographyData","data","obj","configureSRI","currentSRIConfig","DEFAULT_SRI_CONFIG","enableStrictSRI","enforceForKnownSources","enforceForAllSources","allowUnknownSources","disableSRI","calculateHash","algorithm","hashBuffer","globalThis","crypto","subtle","digest","hashArray","hashBase64","btoa","String","fromCharCode","chars","i","length","bitmap","charAt","validateSRI","expectedSRI","responseClone","clone","validateSRIFromArrayBuffer","calculatedHash","sha256","sha384","sha512","expectedHash","hash","replace","sriError","canonicalizeUrlForSRI","parsed","port","pathname","href","getSRIForUrl","canonical","customSRIMap","KNOWN_GEOGRAPHY_SRI","addCustomSRI","sri","generateSRIHash","fetch","ok","statusText","algorithmMap","generateSRIForUrls","urls","sriMap","enforceIntegrity","fetchGeographies","fetchGeographiesCache","preloadGeography","Promise","resolve","then","preloading","preloadUtil","isString","geo","getFeatures","geographies","parseGeographies","Array","isArray","topology","objectKeys","Object","keys","objects","firstObjectKey","geometryObject","featureCollection","feature","features","extractFeaturesFromTopology","extractFeaturesFromCollection","getMesh","outline","mesh","a","b","borders","extractMeshFromTopology","prepareMesh","path","outlinePath","bordersPath","prepareFeatures","map","svgPath","filter","createConnectorPath","start","end","curve","d","line","isTopology","arcs","isFeatureCollection","isFeature","isValidGeometry","isValidLongitude","isValidLatitude","isValidCoordinates","isGeoProjection","invert","isProjectionName","isGeographyError","errorObj","isValidGeographyUrl","isValidGeographyData","isValidMapDimensions","width","height","Number","isFinite","createTypeGuard","predicate","createGeographyError","createValidationError","createSecurityError","createProjectionError","createConfigurationError","createContextError","TIMEOUT_MS","cache","sriConfig","controller","cleanup","timeoutMs","AbortController","timeoutId","setTimeout","abort","clearTimeout","createTimeoutController","options","currentUrl","hop","status","location","redirectUrl","fetchWithRedirectValidation","signal","Accept","mode","credentials","redirect","text","TextDecoder","decode","JSON","parse","jsonError","SyntaxError","parseGeographyFromArrayBuffer","undefined","handleFetchError","preloadedUrls","Set","immediate","has","prefetchDNS","origin","preconnect","add","preload","as","crossOrigin"],"mappings":"SAUgBA,EAAUC,EAAWC,EAAWC,GAC9C,MAAMC,GAAWH,EAAIE,EAAEE,EAAIJ,GAAK,EAC1BK,GAAWJ,EAAIC,EAAEE,EAAIH,GAAK,EAGhC,OCegCK,EDjBpBN,EAAI,GAAKG,EAAUD,EAAEK,GAAKL,EAAEE,ECiBKI,EDhBjCP,EAAI,GAAKI,EAAUH,EAAEO,GAAKP,EAAEE,ECgBkC,CAC1DE,EACDE,GAFgB,IAACF,EAAaE,CDd/C,CENM,SAAUE,EACdC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAQ,IAAIC,MAAMJ,GAoBxB,OAnBAG,EAAME,KAAO,iBACbF,EAAMJ,KAAOA,EACbI,EAAMG,WAAY,IAAIC,MAAOC,cAEzBP,IACFE,EAAMM,UAAYR,GAGhBC,IACFC,EAAMO,MAAQR,EACVA,EAAcS,QAChBR,EAAMQ,MAAQT,EAAcS,OAE9BR,EAAMS,QAAU,CACdC,gBAAiBX,EAAcF,QAC/Bc,aAAcZ,EAAcG,OAIzBF,CACT,CCmBM,SAAUY,EACdC,GAEAC,GAAyB,IACpBC,MACAF,EAEP,CAMM,SAAUG,EACdC,GAA8B,GAE9B,GAA6B,eAAzBC,QAAQC,IAAIC,SAKd,YAHAC,OAGA,EAGFP,GAAyB,IACpBQ,GACHC,qBAAsBN,EAO1B,CAMA,SAASO,EAAkBC,GACzB,OAAIA,EAASC,WAAW,MAAQD,EAASE,SAAS,KACzCF,EAASG,MAAM,MAEjBH,CACT,CAYA,SAASI,EAAmBJ,GAC1B,IAAKA,GAAyB,cAAbA,EACf,OAAO,EAIT,MAAMK,EAAaN,EAAkBC,GAG/BM,EAAoB,CACxB,QACA,gCACA,cACA,SACA,cACA,OACA,2CACA,eACA,eACA,kBACA,iBACA,gBACA,kBAGF,IAAK,MAAMC,KAASD,EAClB,GAAIC,EAAMC,KAAKH,GACb,OAAO,EAKX,MAAMI,EAAoB,CACxB,SACA,sBACA,sBACA,QACA,mBACA,UACA,cAGA,wBAGF,IAAK,MAAMF,KAASE,EAClB,GAAIF,EAAMC,KAAKH,GACb,OAAO,EAMX,MAAMK,EAAwBL,EAAWM,MACvC,kDAEF,GAAID,IAAwB,GAC1B,OAAON,EAAmBM,EAAsB,IAIlD,MAAME,EAAqBP,EAAWM,MACpC,6CAEF,GAAIC,IAAqB,IAAMA,EAAmB,GAAI,CACpD,MAAMC,EAAKC,SAASF,EAAmB,GAAI,IACrCG,EAAKD,SAASF,EAAmB,GAAI,IAE3C,OAAOR,EADe,GAAIS,GAAM,EAAK,OAAa,IAALA,KAAcE,GAAM,EAAK,OAAa,IAALA,IAEhF,CAEA,OAAO,CACT,CAOM,SAAUC,EAAqB3C,GAEnC,MAAM4C,EA1LR,SAAqB5C,GACnB,IAAKA,GAAsB,iBAARA,EACjB,MAAM,IAAIG,MAAM,kCAIlB,IAEE,OADA,IAAI0C,IAAI7C,GACDA,EAAI8C,MACb,CAAE,MACA,MAAM,IAAI3C,MAAM,qBAClB,CACF,CA8KuB4C,CAAY/C,GAEjC,IACE,MAAMgD,EAAY,IAAIH,IAAID,GAG1B,GAAI5B,GAAuBiC,mBACzB,GAA2B,WAAvBD,EAAUE,SACZ,MAAMrD,EACJ,iBACA,2BAA2BmD,EAAUE,oDACrClD,OAGC,CAEL,IACGgB,GAAuBmC,kBAAkBC,SAASJ,EAAUE,UAC7D,CACA,MAAMG,EACJrC,GAAuBmC,kBAAkBG,KAAK,MAChD,MAAMzD,EACJ,iBACA,yBAAyBmD,EAAUE,kBAAkBG,iBACrDrD,EAEJ,CAGA,GAA2B,UAAvBgD,EAAUE,SAAsB,CAElC,IAAKlC,GAAuBS,qBAC1B,MAAM5B,EACJ,iBACA,2FACAG,GAKJ,MAAMuD,EAAW7B,EAAkBsB,EAAUrB,UAC7C,GACe,cAAb4B,GACa,cAAbA,GACa,QAAbA,EAEA,MAAM1D,EACJ,iBACA,0EACAG,GAKJ,GAA6B,eAAzBoB,QAAQC,IAAIC,SACd,MAAMzB,EACJ,iBACA,qDACAG,QAMJuB,CAGF,CACF,CAGA,MAAMiC,EAAe9B,EAAkBsB,EAAUrB,UACjD,IACmB,cAAjB6B,GACiB,cAAjBA,GACiB,QAAjBA,IAE6B,eAAzBpC,QAAQC,IAAIC,SACd,MAAMzB,EACJ,iBACA,gDACAG,GAMN,GAAI+B,EAAmBiB,EAAUrB,UAC/B,MAAM9B,EACJ,iBACA,gCAAgCmD,EAAUrB,0BAC1C3B,EAGN,CAAE,MAAOE,GACP,GAAIA,aAAiBuD,UACnB,MAAM5D,EACJ,mBACA,uBAAuBG,IACvBA,EACAE,GAGJ,MAAMA,CACR,CACF,CAOM,SAAUwD,EAAoBC,GAClC,MAAMC,EAAcD,EAASE,QAAQC,IAAI,gBACzC,IAAKF,EACH,MAAM/D,EACJ,mBACA,+BAQJ,IAJoBmB,GAAuB+C,sBAAsBC,KAC9DlE,GAAS8D,EAAYK,cAAcb,SAAStD,IAI7C,MAAMD,EACJ,mBACA,yBAAyB+D,uBAAiC5C,GAAuB+C,sBAAsBT,KAAK,QAGlH,CASOY,eAAeC,EAAqBR,GACzC,MAAMS,EAAgBT,EAASE,QAAQC,IAAI,kBAC3C,GAAIM,EAAe,CACjB,MAAMC,EAAO5B,SAAS2B,EAAe,IACrC,GAAIC,EAAOrD,GAAuBsD,kBAChC,MAAMzE,EACJ,mBACA,uBAAuBwE,6BAAgCrD,GAAuBsD,0BAGpF,CACF,CAUOJ,eAAeK,EACpBZ,EACAa,EAAmBxD,GAAuBsD,mBAE1C,MAAMG,EAASd,EAASe,MAAMC,YAO9B,IAAKF,EAAQ,CACX,MAAMG,QAAejB,EAASkB,cAC9B,GAAID,EAAOE,WAAaN,EACtB,MAAM3E,EACJ,mBACA,uBAAuB+E,EAAOE,qCAAqCN,WAGvE,OAAOI,CACT,CAEA,MAAMG,EAAuB,GAC7B,IAAIC,EAAa,EAEjB,OAAS,CACP,MAAMC,KAAEA,EAAIC,MAAEA,SAAgBT,EAAOU,OACrC,GAAIF,EAAM,MAGV,GADAD,GAAcE,EAAMJ,WAChBE,EAAaR,EAEf,MADAC,EAAOW,SAASC,MAAM,QAChBxF,EACJ,mBACA,yCAAyC2E,WAG7CO,EAAOO,KAAKJ,EACd,CAGA,MAAMK,EAAS,IAAIC,WAAWR,GAC9B,IAAIS,EAAS,EACb,IAAK,MAAMC,KAASX,EAClBQ,EAAOI,IAAID,EAAOD,GAClBA,GAAUC,EAAMZ,WAElB,OAAOS,EAAOX,MAChB,CAOM,SAAUgB,EAAsBC,GACpC,IAAKA,GAAwB,iBAATA,EAClB,MAAMhG,EACJ,mBACA,8CAIJ,MAAMiG,EAAMD,EACZ,IACGC,EAAIhG,MACS,aAAbgG,EAAIhG,MAAoC,sBAAbgG,EAAIhG,KAEhC,MAAMD,EACJ,mBACA,uEAAuEiG,EAAIhG,OAGjF,CC3WM,SAAUiG,EAAahF,GAC3BiF,GAAmB,IACdC,MACAlF,EAEP,UAKgBmF,IACdF,GAAmB,IACdA,GACHG,wBAAwB,EACxBC,sBAAsB,EACtBC,qBAAqB,EAEzB,UAKgBC,IACe,eAAzBlF,QAAQC,IAAIC,SAAhB,EAKA0E,GAAmB,IACdA,GACHG,wBAAwB,EACxBC,sBAAsB,EACtBC,qBAAqB,EAEzB,CAQAnC,eAAeqC,EACbV,EACAW,GAGA,MAAMC,QAAmBC,WAAWC,OAAOC,OAAOC,OAAOL,EAAWX,GAC9DiB,EAAY,IAAItB,WAAWiB,GAGjC,IAAIM,EACJ,QAA+B,IAApBL,WAAWM,KAEpBD,EAAaL,WAAWM,KAAKC,OAAOC,gBAAgBJ,QAC/C,CAEL,MAAMK,EACJ,mEACF,IAAI5B,EAAS,GACT6B,EAAI,EACR,KAAOA,EAAIN,EAAUO,QAAQ,CAC3B,MAGMC,GAHIR,EAAUM,MAAQ,IAGP,IAFXA,EAAIN,EAAUO,QAASP,EAAUM,MAAY,IAEtB,GADvBA,EAAIN,EAAUO,QAASP,EAAUM,MAAY,GAEvD7B,GAAU4B,EAAMI,OAAQD,GAAU,GAAM,IACxC/B,GAAU4B,EAAMI,OAAQD,GAAU,GAAM,IACxC/B,GACE6B,EAAI,EAAIN,EAAUO,OAASF,EAAMI,OAAQD,GAAU,EAAK,IAAM,IAChE/B,GAAU6B,EAAI,EAAIN,EAAUO,OAASF,EAAMI,OAAgB,GAATD,GAAe,GACnE,CACAP,EAAaxB,CACf,CAEA,OAAOwB,CACT,CASO7C,eAAesD,EACpB7D,EACA3D,EACAyH,GAGA,MAAMC,EAAgB/D,EAASgE,QACzB9B,QAAa6B,EAAc7C,cAKjC,aAFM+C,EAA2B/B,EAAM7F,EAAKyH,GAErC9D,CACT,CASOO,eAAe0D,EACpB/C,EACA7E,EACAyH,GAGA,MAMMI,QAAuBtB,EAC3B1B,EAPmB,CACnBiD,OAAQ,UACRC,OAAQ,UACRC,OAAQ,WAKKP,EAAYjB,YAErByB,EAAeR,EAAYS,KAAKC,QACpC,GAAGV,EAAYjB,aACf,IAGF,GAAIqB,IAAmBI,EAAc,CACnC,MAAMG,EAAW,IAAIjI,MACnB,0CAA0CH,eAAiByH,EAAYjB,aAAayB,UAAqBR,EAAYjB,aAAaqB,KAwBpI,MArBEO,EAKAH,aAAeR,EAAYS,KAE3BE,EAKAP,eAAiB,GAAGJ,EAAYjB,aAAaqB,IAE7CO,EAKA5B,UAAYiB,EAAYjB,UAEpB3G,EACJ,iBACAuI,EAASrI,QACTC,EACAoI,EAEJ,CACF,CAQA,SAASC,EAAsBrI,GAC7B,IACE,MAAMsI,EAAS,IAAIzF,IAAI7C,GAavB,OAXAsI,EAAOJ,KAAO,IAIS,WAApBI,EAAOpF,UAAyC,QAAhBoF,EAAOC,MACnB,UAApBD,EAAOpF,UAAwC,OAAhBoF,EAAOC,QAEvCD,EAAOC,KAAO,IAGhBD,EAAOE,SAAWF,EAAOE,SAASL,QAAQ,OAAQ,KAAO,IAClDG,EAAOG,IAChB,CAAE,MAGA,OAAOzI,CACT,CACF,CAWM,SAAU0I,EAAa1I,GAC3B,MAAM2I,EAAYN,EAAsBrI,GAGxC,GAAIgG,GAAiB4C,aAAaD,GAChC,OAAO3C,GAAiB4C,aAAaD,GAEvC,GAAI3C,GAAiB4C,aAAa5I,GAChC,OAAOgG,GAAiB4C,aAAa5I,GAIvC,GACE6I,GAAoBF,IACpB3C,GAAiBG,uBAEjB,OAAO0C,GAAoBF,GAE7B,GAAIE,GAAoB7I,IAAQgG,GAAiBG,uBAC/C,OAAO0C,GAAoB7I,GAI7B,GAAIgG,GAAiBI,uBACdJ,GAAiBK,oBACpB,MAAMxG,EACJ,iBACA,qEAAqEG,IACrEA,GAKN,OAAO,IACT,CAOM,SAAU8I,EAAa9I,EAAa+I,GACxC,MAAMJ,EAAYN,EAAsBrI,GACxCgG,GAAiB4C,aAAaD,GAAaI,EACvCJ,IAAc3I,IAChBgG,GAAiB4C,aAAa5I,GAAO+I,EAEzC,CASO7E,eAAe8E,EACpBhJ,EACAwG,EAA4C,UAE5C,IACE,MAAM7C,QAAiBsF,MAAMjJ,GAC7B,IAAK2D,EAASuF,GACZ,MAAM,IAAI/I,MAAM,mBAAmBH,MAAQ2D,EAASwF,cAGtD,MAAMtD,QAAalC,EAASkB,cACtBuE,EAAe,CACnBtB,OAAQ,UACRC,OAAQ,UACRC,OAAQ,WAIV,MAAO,GAAGxB,WADSD,EAAcV,EAAMuD,EAAa5C,KAEtD,CAAE,MAAOtG,GACP,MAAML,EACJ,uBACA,mCAAmCG,MAAQE,aAAiBC,MAAQD,EAAMH,QAAU,kBACpFC,EACAE,aAAiBC,MAAQD,EAAQ,IAAIC,MAAM8G,OAAO/G,IAEtD,CACF,CASOgE,eAAemF,EACpBC,EACA9C,EAA4C,UAE5C,MAAM+C,EAAoC,CAAA,EAE1C,IAAK,MAAMvJ,KAAOsJ,EAChB,IACE,MAAMpB,QAAac,EAAgBhJ,EAAKwG,GACxC+C,EAAOvJ,GAAO,CACZwG,YACA0B,OACAsB,kBAAkB,EAEtB,CAAE,MAAOtJ,QAEPqB,CACF,CAGF,OAAOgI,CACT,CCjLOrF,eAAeuF,EACpBzJ,GAGqB,oBAAZoB,SACoB,eAA3BA,SAASC,KAAKC,SAFhB,EASA,IACE,aAAaoI,GAAsB1J,EACrC,CAAE,MACA,MACF,CACF,CA6DM,SAAU2J,EAAiB3J,GAE/B4J,QAAAC,UAAAC,KAAA,WAAA,OAAAC,EAAA,GACGD,KAAK,EAAGH,iBAAkBK,MACzBA,EAAYhK,GAAK,KAElBqF,MAAM,QAKTqE,GAAsB1J,GAAKqF,MAAM,OAGnC,CClRM,SAAU4E,EACdC,GAEA,MAAsB,iBAARA,CAChB,CAsDM,SAAUC,EACdC,EACAC,GAGA,OAAIC,MAAMC,QAAQH,GACTC,EAAmBA,EAAiBD,GAAeA,EAInC,aAArBA,EAAYtK,KAxDlB,SACE0K,EACAH,GAEA,MAAMI,EAAaC,OAAOC,KAAKH,EAASI,SACxC,GAA0B,IAAtBH,EAAWpD,OACb,MAAO,GAIT,MAAMwD,EAAiBJ,EAAW,GAClC,IAAKI,EACH,MAAO,GAGT,MAAMC,EAAiBN,EAASI,QAAQC,GACxC,IAAKC,EACH,MAAO,GAGT,MAAMC,EAAoBC,EAAQR,EAAUM,GACtCG,EACJ,aAAcF,GAAoBA,EAAkBE,UAAiB,GACvE,OAAOZ,EAAmBA,EAAiBY,GAAYA,CACzD,CAiCWC,CAA4Bd,EAAaC,GAIzB,sBAArBD,EAAYtK,KA7BlB,SACEiL,EACAV,GAEA,MAAMY,EAAWF,EAAkBE,UAAY,GAC/C,OAAOZ,EAAmBA,EAAiBY,GAAYA,CACzD,CAwBWE,CAA8Bf,EAAaC,GAG7C,EACT,CAoDM,SAAUe,EACdhB,GAGA,OACEA,GACuB,iBAAhBA,IACNE,MAAMC,QAAQH,IACf,SAAUA,GACW,aAArBA,EAAYtK,KAtDhB,SAAiC0K,GAI/B,MAAMC,EAAaC,OAAOC,KAAKH,EAASI,SACxC,GAA0B,IAAtBH,EAAWpD,OACb,OAAO,KAGT,MAAMwD,EAAiBJ,EAAW,GAClC,IAAKI,EACH,OAAO,KAGT,MAAMC,EAAiBN,EAASI,QAAQC,GACxC,IAAKC,EACH,OAAO,KAGT,IAeE,MAAO,CAAEO,QAbOC,EACdd,EACAM,EACA,CAACS,EAAGC,IAAMD,IAAMC,GAUAC,QANFH,EACdd,EACAM,EACA,CAACS,EAAGC,IAAMD,IAAMC,GAIpB,CAAE,MACA,OAAO,IACT,CACF,CAkBWE,CAAwBtB,GAG1B,IACT,UASgBuB,EACdN,EACAI,EACAG,GAEA,MAAMrG,EAAiD,CAAA,EAEvD,GAAI8F,EAAS,CACX,MAAMQ,EAAcD,EAAKP,GACrBQ,IACFtG,EAAO8F,QAAUQ,EAErB,CAEA,GAAIJ,EAAS,CACX,MAAMK,EAAcF,EAAKH,GACrBK,IACFvG,EAAOkG,QAAUK,EAErB,CAEA,OAAOvG,CACT,CAQM,SAAUwG,EACdd,EACAW,GAEA,OAAKX,GAAgC,IAApBA,EAAS5D,OAInB4D,EACJe,IAAKhB,IACJ,MAAMiB,EAAUL,EAAKZ,GACrB,OAAKiB,EAIE,IACFjB,EACHiB,WALO,OAQVC,OAAQlB,GAAoD,OAAZA,GAf1C,EAgBX,UASgBmB,EACdC,EACAC,EACAC,GAGA,GAAqB,mBAAVA,EACT,MAAO,GAGT,IAiBE,OAfqBA,IAYlB5M,EAAG6M,GAAwBA,EAAE,IAC7B3M,EAAG2M,GAAwBA,EAAE,GAEzBC,CAAK,CAACJ,EAAOC,KAAS,EAC/B,CAAE,MACA,MAAO,EACT,CACF,CC3MM,SAAUI,EAAWvH,GACzB,GAAqB,iBAAVA,GAAgC,OAAVA,EAAgB,OAAO,EAExD,MAAMY,EAAMZ,EACZ,MACe,aAAbY,EAAIhG,MACmB,iBAAhBgG,EAAI8E,SACK,OAAhB9E,EAAI8E,SACJN,MAAMC,QAAQzE,EAAI4G,KAEtB,CAEM,SAAUC,EACdzH,GAEA,GAAqB,iBAAVA,GAAgC,OAAVA,EAAgB,OAAO,EAExD,MAAMY,EAAMZ,EACZ,MAAoB,sBAAbY,EAAIhG,MAAgCwK,MAAMC,QAAQzE,EAAImF,SAC/D,CAEM,SAAU2B,EAAU1H,GACxB,GAAqB,iBAAVA,GAAgC,OAAVA,EAAgB,OAAO,EAExD,MAAMY,EAAMZ,EACZ,MAAoB,YAAbY,EAAIhG,MAAsB,aAAcgG,GAAO,eAAgBA,CACxE,CAEM,SAAU+G,EAAgB3H,GAC9B,MAAqB,iBAAVA,GAAgC,OAAVA,IAG3B,SADMA,GAGO,CACjB,QACA,aACA,UACA,aACA,kBACA,eACA,sBAGgB9B,SAbN8B,EAamBpF,MACjC,CAGM,SAAUgN,EAAiB5H,GAC/B,MAAwB,iBAAVA,GAAsBA,IAAS,KAAQA,GAAS,GAChE,CAEM,SAAU6H,EAAgB7H,GAC9B,MAAwB,iBAAVA,GAAsBA,IAAS,IAAOA,GAAS,EAC/D,CAEM,SAAU8H,EAAmB9H,GACjC,OACEoF,MAAMC,QAAQrF,IACG,IAAjBA,EAAMmC,QACNyF,EAAiB5H,EAAM,KACvB6H,EAAgB7H,EAAM,GAE1B,CAGM,SAAU+H,EAAgB/H,GAC9B,MACmB,mBAAVA,GACP,WAAYA,GACyC,mBAA7CA,EAAkCgI,MAE9C,CAEM,SAAUC,EAAiBjI,GAC/B,MACmB,iBAAVA,GAAsBA,EAAMtD,WAAW,QAAUsD,EAAMmC,OAAS,CAE3E,CAGM,SAAU+F,EAAiBlN,GAC/B,KAAMA,aAAiBC,OAAQ,OAAO,EAEtC,MAAMkN,EAAWnN,EACjB,MACE,SAAUmN,GACe,iBAAlBA,EAASvN,MAChB,CACE,uBACA,wBACA,mBACA,mBACA,iBACA,sBACA,iBACAsD,SAASiK,EAASvN,KAExB,CAGM,SAAUwN,EAAoBpI,GAClC,GAAqB,iBAAVA,EAAoB,OAAO,EAEtC,IACE,MAAMlF,EAAM,IAAI6C,IAAIqC,GAEpB,MAAqB,WAAjBlF,EAAIkD,UACa,UAAjBlD,EAAIkD,UAAyC,cAAjBlD,EAAI2B,QAEtC,CAAE,MACA,OAAO,CACT,CACF,CAGM,SAAU4L,EACdrI,GAEA,OAAOuH,EAAWvH,IAAUyH,EAAoBzH,EAClD,CAEM,SAAUsI,EAAqBC,EAAgBC,GACnD,MACmB,iBAAVD,GACW,iBAAXC,GACPD,EAAQ,GACRC,EAAS,GACTC,OAAOC,SAASH,IAChBE,OAAOC,SAASF,EAEpB,CAGM,SAAUG,EACdC,GAEA,OAAQ5I,GAA+B4I,EAAU5I,EACnD,CAGM,SAAU6I,EACdjO,EACAC,EACAS,EACAG,GAEA,MAAMT,EAAQ,IAAIC,MAAMJ,GAIxB,OAHAG,EAAMJ,KAAOA,EACTU,IAAWN,EAAMM,UAAYA,GAC7BG,IAAST,EAAMS,QAAUA,GACtBT,CACT,UAGgB8N,EACdjO,EACAS,EACAG,GAEA,OAAOoN,EAAqB,mBAAoBhO,EAASS,EAAWG,EACtE,UAEgBsN,EACdlO,EACAS,EACAG,GAEA,OAAOoN,EAAqB,iBAAkBhO,EAASS,EAAWG,EACpE,UAEgBuN,EACdnO,EACAS,EACAG,GAEA,OAAOoN,EAAqB,mBAAoBhO,EAASS,EAAWG,EACtE,UAEgBwN,EACdpO,EACAS,EACAG,GAEA,OAAOoN,EACL,sBACAhO,EACAS,EACAG,EAEJ,UAEgByN,EACdrO,EACAS,EACAG,GAEA,OAAOoN,EAAqB,gBAAiBhO,EAASS,EAAWG,EACnE,0JNvOO,MEGMM,GAA0D,CACrEoN,WAAY,IACZ/J,kBAAmB,SACnBP,sBAAuB,CAAC,mBAAoB,wBAC5CZ,kBAAmB,CAAC,UACpB1B,sBAAsB,EACtBwB,mBAAmB,GAIRzB,GAA8D,IACtEP,GACHkC,kBAAmB,CAAC,SAAU,SAC9B1B,sBAAsB,EACtBwB,mBAAmB,GAId,IAAIjC,GACTC,GClCK,MAAM4H,GAAiD,CAE5D,sDAAuD,CACrDrC,UAAW,SACX0B,KAAM,0EACNsB,kBAAkB,GAEpB,qDAAsD,CACpDhD,UAAW,SACX0B,KAAM,0EACNsB,kBAAkB,GAGpB,iDAAkD,CAChDhD,UAAW,SACX0B,KAAM,0EACNsB,kBAAkB,GAEpB,gDAAiD,CAC/ChD,UAAW,SACX0B,KAAM,0EACNsB,kBAAkB,IAcTvD,GAA2C,CACtDE,wBAAwB,EACxBC,sBAAsB,EACtBC,qBAAqB,EACrBuC,aAAc,CAAA,GAGhB,IAAI5C,GAAyCC,GCvC7C,MA6MayD,GAAwB4E,EACnCpK,MAAOlE,IAEL2C,EAAqB3C,GAGrB,MAAMuO,EAAY7F,EAAa1I,IAGzBwO,WAAEA,EAAUC,QAAEA,GArIxB,SAAiCC,GAI/B,MAAMF,EAAa,IAAIG,gBACjBC,EAAYC,WAAW,KAC3BL,EAAWM,SACVJ,GAEH,MAAO,CACLF,aACAC,QAAS,IAAMM,aAAaH,GAEhC,CAwHoCI,CAC9BhO,GAAuBqN,YAGzB,IAEE,MAAM1K,QA/LZO,eACElE,EACAiP,GAEA,IAAIC,EAAalP,EAEjB,IAAK,IAAImP,EAAM,EAAGA,EAnCE,EAmCmBA,IAAO,CAC5C,MAAMxL,QAAiBsF,MAAMiG,EAAYD,GAGzC,GAAItL,EAASyL,OAAS,KAAOzL,EAASyL,QAAU,IAC9C,OAAOzL,EAIT,UACQA,EAASkB,aACjB,CAAE,MAEF,CAGA,MAAMwK,EAAW1L,EAASE,QAAQC,IAAI,YACtC,IAAKuL,EACH,MAAMxP,EACJ,iBACA,2BAA2B8D,EAASyL,kCACpCF,GAKJ,MAAMI,EAAc,IAAIzM,IAAIwM,EAAUH,GAAYzG,KAGlD9F,EAAqB2M,GAErBJ,EAAaI,CACf,CAEA,MAAMzP,EACJ,iBACA,uCACAG,EAEJ,CAkJ6BuP,CACrBvP,GArN0BwP,EAsNDhB,EAAWgB,OArNnC,CACLA,SACA3L,QAAS,CACP4L,OAAQzO,GAAuB+C,sBAAsBT,KAAK,MAC1D,gBAAiB,wBAGnBoM,KAAM,OACNC,YAAa,OACbC,SAAU,YAiNR,GAHAnB,KAGK9K,EAASuF,GACZ,MAAMrJ,EACJ,uBACA,QAAQ8D,EAASyL,WAAWzL,EAASwF,aACrCnJ,GAKJ0D,EAAoBC,SACdQ,EAAqBR,GAG3B,MAAMkB,QAAoBN,EAA0BZ,GAQpD,OALI4K,SACI3G,EAA2B/C,EAAa7E,EAAKuO,SA9F3DrK,eACEW,EACA7E,GAEA,IACE,MAAM6P,GAAO,IAAIC,aAAcC,OAAOlL,GAChCgB,EAAOmK,KAAKC,MAAMJ,GAExB,OADAjK,EAAsBC,GACfA,CACT,CAAE,MAAOqK,GACP,GAAIA,aAAqBC,YACvB,MAAMtQ,EACJ,wBACA,wCACAG,EACAkQ,GAGJ,MAAMA,CACR,CACF,CA8EmBE,CAA8BvL,EAAa7E,EAC1D,CAAE,MAAOE,GAEP,MADAuO,IApJN,SAA0BvO,EAAgBF,GACxC,GAAIE,aAAiBC,MAAO,CAC1B,GAAmB,eAAfD,EAAME,KACR,OAAOP,EACL,uBACA,yBAAyBmB,GAAuBqN,eAChDrO,EACAE,GAGJ,GAAmB,cAAfA,EAAME,MAAwBF,EAAMH,QAAQqD,SAAS,SACvD,OAAOvD,EACL,uBACA,iDAAiDG,IACjDA,EACAE,GAGJ,GAAIA,EAAMH,QAAQqD,SAAS,0BACzB,OAAOvD,EACL,wBACAK,EAAMH,QACNC,EACAE,EAGN,CAGA,OAAIA,aAAiBC,OAAS,SAAUD,EAC/BA,EAIFL,EACL,uBACAK,aAAiBC,MAAQD,EAAMH,QAAU,yBACzCC,EACAE,aAAiBC,MAAQD,OAAQmQ,EAErC,CA6GYC,CAAiBpQ,EAAOF,EAChC,CApPJ,IAAkCwP,IGuB5Be,GAAgB,IAAIC,mEAOOxQ,EAAayQ,GAAY,GACxD,GAAmB,iBAARzQ,GAAqBA,IAK5BuQ,GAAcG,IAAI1Q,GAItB,IAEE2C,EAAqB3C,GAErB,MAAMgD,EAAY,IAAIH,IAAI7C,GAG1B2Q,EAAY3N,EAAU4N,QACtBC,GAAW7N,EAAU4N,QAIrBL,GAAcO,IAAI9Q,IAIhByQ,GACoB,oBAAZrP,SAAoD,eAAzBA,QAAQC,IAAIC,WAG/CyP,GAAQ/Q,EAAK,CACXgR,GAAI,QACJC,YAAa,aAGnB,CAAE,MAAO/Q,GAGc,oBAAZkB,SACkB,eAAzBA,QAAQC,IAAIC,WAEIpB,aAAiBC,MAAQD,EAAMH,QAAUkH,OAAO/G,GAIpE,CACF"}
{
"name": "@vnedyalk0v/react19-simple-maps",
"version": "2.0.2",
"version": "2.0.3",
"description": "An svg map chart component built exclusively for React 19+ - Modern TypeScript-first library with cutting-edge React patterns",

@@ -30,3 +30,3 @@ "type": "module",

"scripts": {
"build": "tsc --project tsconfig.build.json && rollup -c",
"build": "tsc --project tsconfig.build.json && NODE_ENV=production rollup -c",
"build:types": "tsc --project tsconfig.build.json",

@@ -47,5 +47,5 @@ "watch": "rollup -cw",

"clean": "rm -rf dist",
"analyze": "npm run build && node scripts/enhanced-bundle-monitor.js",
"analyze:compare": "npm run build && node scripts/analyze-bundle.js --compare",
"analyze:dashboard": "npm run build && node scripts/bundle-dashboard.js --detailed",
"analyze": "npm run build && NODE_ENV=production node scripts/enhanced-bundle-monitor.js",
"analyze:compare": "npm run build && NODE_ENV=production node scripts/analyze-bundle.js --compare",
"analyze:dashboard": "npm run build && NODE_ENV=production node scripts/bundle-dashboard.js --detailed",
"optimize": "node scripts/bundle-optimizer.js",

@@ -52,0 +52,0 @@ "size": "npm run build && ls -lh dist/*.js dist/*.d.ts",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display