@vnedyalk0v/react19-simple-maps
Advanced tools
+13
-0
| # Changelog | ||
| ## 2.0.2 | ||
| ### Patch Changes | ||
| - 05f1bfc: Security hardening (7 fixes): | ||
| - **[H-001]** Fix JSON-LD script-breakout XSS by escaping `<`, `>`, `&`, and Unicode line separators in `MapMetadata`. | ||
| - **[H-002]** Prevent redirect-based SSRF bypass by using `redirect: 'manual'` and validating each redirect hop against the URL security policy. | ||
| - **[M-001]** Enforce streaming response-size limits independent of the `Content-Length` header to prevent memory exhaustion. | ||
| - **[M-002]** Deprecate `fetchGeographies` β it now delegates to the hardened `fetchGeographiesCache` pipeline. | ||
| - **[M-003]** Align server actions in `GeographyActions` with the shared secure URL validator and fetch pipeline. | ||
| - **[L-001]** Add prominent dev-only labeling and production CSP guidance in example HTML and SECURITY.md. | ||
| - **[L-002]** Set `X-XSS-Protection: 0` consistently across all examples and documentation. | ||
| ## 2.0.1 | ||
@@ -4,0 +17,0 @@ |
+20
-4
@@ -35,3 +35,8 @@ import { Feature, Geometry, FeatureCollection, MultiLineString, LineString } from 'geojson'; | ||
| /** | ||
| * Basic fetch function for geography data without caching | ||
| * 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 | ||
@@ -135,8 +140,19 @@ * @returns Promise resolving to geography data or undefined on error | ||
| /** | ||
| * Validates response size to prevent memory issues | ||
| * 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 response is too large | ||
| * @throws {Error} If Content-Length exceeds the configured maximum | ||
| */ | ||
| declare function validateResponseSize(response: Response): Promise<void>; | ||
| /** | ||
| * 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 | ||
| */ | ||
| declare function readResponseWithSizeLimit(response: Response, maxBytes?: number): Promise<ArrayBuffer>; | ||
| /** | ||
| * Validates that the parsed data is a valid geography object | ||
@@ -253,3 +269,3 @@ * @param data - The parsed JSON data to validate | ||
| 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, prepareFeatures, prepareMesh, validateContentType, validateGeographyData, validateGeographyUrl, validateResponseSize, validateSRI }; | ||
| 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, prepareFeatures, prepareMesh, readResponseWithSizeLimit, validateContentType, validateGeographyData, validateGeographyUrl, validateResponseSize, validateSRI }; | ||
| export type { GeographySecurityConfig, SRIConfig, SRIEnforcementConfig }; |
+109
-42
@@ -235,5 +235,7 @@ import { feature, mesh } from 'topojson-client'; | ||
| /** | ||
| * Validates response size to prevent memory issues | ||
| * 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 response is too large | ||
| * @throws {Error} If Content-Length exceeds the configured maximum | ||
| */ | ||
@@ -250,2 +252,46 @@ async function validateResponseSize(response) { | ||
| /** | ||
| * 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 | ||
@@ -495,4 +541,7 @@ * @param data - The parsed JSON data to validate | ||
| /** Maximum number of redirect hops allowed */ | ||
| const MAX_REDIRECTS = 5; | ||
| /** | ||
| * Creates fetch options with security headers and timeout | ||
| * 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 | ||
@@ -511,5 +560,41 @@ * @returns Fetch options object | ||
| 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 | ||
@@ -555,21 +640,2 @@ * @param timeoutMs - Timeout in milliseconds | ||
| /** | ||
| * Parses JSON response with proper error handling | ||
| * @param response - The fetch response | ||
| * @param url - The URL for error context | ||
| * @returns Parsed geography data | ||
| */ | ||
| async function parseGeographyResponse(response, url) { | ||
| try { | ||
| const data = await response.json(); | ||
| 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; | ||
| } | ||
| } | ||
| /** | ||
| * Parses JSON from ArrayBuffer with proper error handling | ||
@@ -595,3 +661,8 @@ * @param arrayBuffer - The response data as ArrayBuffer | ||
| /** | ||
| * Basic fetch function for geography data without caching | ||
| * 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 | ||
@@ -601,8 +672,9 @@ * @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 { | ||
| const response = await fetch(url); | ||
| if (!response.ok) { | ||
| throw new Error(response.statusText); | ||
| } | ||
| return await response.json(); | ||
| return await fetchGeographiesCache(url); | ||
| } | ||
@@ -625,4 +697,4 @@ catch { | ||
| try { | ||
| // Make secure fetch request | ||
| const response = await fetch(url, createSecureFetchOptions(controller.signal)); | ||
| // Make secure fetch request with redirect validation | ||
| const response = await fetchWithRedirectValidation(url, createSecureFetchOptions(controller.signal)); | ||
| cleanup(); | ||
@@ -633,18 +705,13 @@ // Validate response | ||
| } | ||
| // Validate content type and size | ||
| // Validate content type and fast pre-check of Content-Length | ||
| validateContentType(response); | ||
| await validateResponseSize(response); | ||
| // Handle SRI validation and parsing in one step to avoid response body consumption issues | ||
| // Read body with hard streaming size limit (guards against falsified Content-Length) | ||
| const arrayBuffer = await readResponseWithSizeLimit(response); | ||
| // Handle SRI validation if required | ||
| if (sriConfig) { | ||
| // Read response body once as ArrayBuffer | ||
| const arrayBuffer = await response.arrayBuffer(); | ||
| // Validate SRI hash | ||
| await validateSRIFromArrayBuffer(arrayBuffer, url, sriConfig); | ||
| // Parse JSON from ArrayBuffer | ||
| return await parseGeographyFromArrayBuffer(arrayBuffer, url); | ||
| } | ||
| else { | ||
| // No SRI validation needed, parse normally | ||
| return await parseGeographyResponse(response, url); | ||
| } | ||
| // Parse JSON from the already-read ArrayBuffer | ||
| return await parseGeographyFromArrayBuffer(arrayBuffer, url); | ||
| } | ||
@@ -1041,3 +1108,3 @@ catch (error) { | ||
| 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, validateContentType, validateGeographyData, validateGeographyUrl, validateResponseSize, validateSRI }; | ||
| 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 }; | ||
| //# 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/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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"} |
+1
-1
| { | ||
| "name": "@vnedyalk0v/react19-simple-maps", | ||
| "version": "2.0.1", | ||
| "version": "2.0.2", | ||
| "description": "An svg map chart component built exclusively for React 19+ - Modern TypeScript-first library with cutting-edge React patterns", | ||
@@ -5,0 +5,0 @@ "type": "module", |
+86
-830
@@ -7,49 +7,31 @@ # @vnedyalk0v/react19-simple-maps | ||
| [](https://www.typescriptlang.org/) | ||
| [](https://reactjs.org/) | ||
| [](https://react.dev/) | ||
| [](https://opensource.org/licenses/MIT) | ||
| [](https://github.com/vnedyalk0v/react19-simple-maps/actions/workflows/ci.yml) | ||
| [](https://github.com/vnedyalk0v/react19-simple-maps/actions/workflows/ci.yml) | ||
| Create beautiful, interactive SVG maps in React with d3-geo and topojson using a declarative, TypeScript-first API built exclusively for React 19+. | ||
| Create interactive SVG maps in React with d3-geo and topojson using a TypeScript-first API for React 19+. | ||
| > **π΄ This is a modernized fork** of the original [react-simple-maps](https://github.com/zcreativelabs/react-simple-maps) by Richard Zimerman, completely rewritten with full TypeScript support, React 19 compatibility, and modern development practices by [Georgi Nedyalkov](mailto:vnedyalk0v@proton.me). | ||
| > Modernized fork of [react-simple-maps](https://github.com/zcreativelabs/react-simple-maps) with React 19 support and TypeScript-first tooling. | ||
| ## β¨ Key Features | ||
| ## Key Features | ||
| - π **Zero Security Vulnerabilities** - Completely secure dependencies with built-in security features | ||
| - π **Full TypeScript Support** - Strict typing with comprehensive type definitions and branded types | ||
| - βοΈ **React 19+ Exclusive** - Built exclusively for React 19+ with cutting-edge features and patterns | ||
| - π **Modern Build System** - ESM-only build with tree-shaking and type definitions | ||
| - π§ͺ **Comprehensive Testing** - 100% test coverage with 159 tests using Vitest | ||
| - π¦ **Optimized Bundle** - Smaller bundle size with better performance than alternatives | ||
| - π‘οΈ **Enterprise Security** - Built-in SRI validation, HTTPS enforcement, and content validation | ||
| - π― **Developer Experience** - Excellent IntelliSense, error boundaries, and debugging support | ||
| - React 19+ only (peer dependencies) | ||
| - ESM-only build with tree-shaking and type definitions | ||
| - TypeScript-first API with branded coordinate helpers | ||
| - Core components: ComposableMap, Geographies, Geography, ZoomableGroup, Marker, Annotation, Line, Sphere, Graticule | ||
| - Optional error boundary + Suspense fallback for geography loading | ||
| - Geography fetching utilities with validation (HTTPS-only default, private IP blocking, content-type/size checks) and optional SRI helpers | ||
| - Opt-in debug logging via `debug` prop or `REACT_SIMPLE_MAPS_DEBUG` | ||
| ## π Quick Links | ||
| ## Quick Links | ||
| - π¦ [npm Package](https://www.npmjs.com/package/@vnedyalk0v/react19-simple-maps) - Primary distribution | ||
| - π¦ [GitHub Packages](https://github.com/vnedyalk0v/react19-simple-maps/packages) - Also available | ||
| - π [Live Examples](./examples/) - Interactive demos with source code | ||
| - π [**Changelog**](https://github.com/vnedyalk0v/react19-simple-maps/blob/main/CHANGELOG.md) - See what's new! | ||
| - π [Issues](https://github.com/vnedyalk0v/react19-simple-maps/issues) - Report bugs or request features | ||
| - π¬ [Discussions](https://github.com/vnedyalk0v/react19-simple-maps/discussions) - Community support and ideas | ||
| - [npm Package](https://www.npmjs.com/package/@vnedyalk0v/react19-simple-maps) | ||
| - [GitHub Packages](https://github.com/vnedyalk0v/react19-simple-maps/packages) | ||
| - [Examples](./examples/) | ||
| - [Changelog](./CHANGELOG.md) | ||
| - [Issues](https://github.com/vnedyalk0v/react19-simple-maps/issues) | ||
| - [Discussions](https://github.com/vnedyalk0v/react19-simple-maps/discussions) | ||
| ## Why @vnedyalk0v/react19-simple-maps? | ||
| ## Installation | ||
| `@vnedyalk0v/react19-simple-maps` makes working with SVG maps in React effortless. It handles complex tasks like panning, zooming, projections, and rendering optimization while leveraging the power of [d3-geo](https://github.com/d3/d3-geo) and topojson-client without requiring the entire d3 library. | ||
| Since the library leaves DOM work to React, it integrates seamlessly with other React libraries like [react-spring](https://github.com/react-spring/react-spring) for animations and [react-annotation](https://github.com/susielu/react-annotation/) for enhanced annotations. | ||
| **Why Choose This Package:** | ||
| - π― **Declarative API** - Build complex maps with simple React components | ||
| - π§ **TypeScript First** - Full type safety with branded types and comprehensive IntelliSense | ||
| - π¨ **Highly Customizable** - Style with CSS-in-JS, regular CSS, or styled-components | ||
| - π± **Touch & Mobile Ready** - Built-in pan, zoom, and touch interactions | ||
| - π **Universal Map Data** - Works with any valid TopoJSON, GeoJSON, or custom data | ||
| - β‘ **Performance Optimized** - Efficient rendering, updates, and memory management | ||
| - π‘οΈ **Enterprise Security** - Built-in security features for production applications | ||
| - π **React 19 Native** - Leverages latest React features like the `use` API and enhanced error boundaries | ||
| ## π¦ Installation | ||
| ### From npm Registry (Recommended) | ||
@@ -82,9 +64,10 @@ | ||
| - **React**: 19.0.0 or higher (React 19+ exclusive - no backward compatibility) | ||
| - **TypeScript**: 5.0.0 or higher (strongly recommended for best developer experience) | ||
| - **Node.js**: 18.0.0 or higher (for development and build tools) | ||
| - **React**: 19.0.0 or higher (peer dependency) | ||
| - **React DOM**: 19.0.0 or higher (peer dependency) | ||
| - **Node.js**: 18.0.0 or higher (development/build) | ||
| - **TypeScript**: 5.0.0 or higher (recommended) | ||
| ### Utilities Subpath | ||
| ## Utilities Subpath | ||
| You can import utility helpers directly from the `./utils` subpath: | ||
| You can import helper utilities directly from the `./utils` subpath: | ||
@@ -98,33 +81,11 @@ ```tsx | ||
| ## π Migration from react-simple-maps | ||
| ## Migration Notes (from react-simple-maps) | ||
| Migrating from the original `react-simple-maps`? We've got you covered! | ||
| 1. Replace package + import path: `react-simple-maps` β `@vnedyalk0v/react19-simple-maps`. | ||
| 2. For TypeScript, use branded helpers like `createCoordinates()` (or an explicit cast) for `Coordinates`. | ||
| 3. Geography event handlers receive `(event, data)` where `data` includes geography info (centroid, bounds, etc.). | ||
| **Quick Migration:** | ||
| ## Quick Start | ||
| 1. `npm uninstall react-simple-maps && npm install @vnedyalk0v/react19-simple-maps` | ||
| 2. Update imports: `from "react-simple-maps"` β `from "@vnedyalk0v/react19-simple-maps"` | ||
| 3. Convert coordinates: `[lon, lat]` β `createCoordinates(lon, lat)` | ||
| 4. Update event handlers to use enhanced data parameter | ||
| **π [Complete Migration Guide](./docs/MIGRATION.md)** - Detailed step-by-step instructions, breaking changes, and troubleshooting tips. | ||
| ### Peer Dependencies | ||
| The package automatically includes these dependencies: | ||
| - `d3-geo` ^3.1.0 - Geographic projections and utilities | ||
| - `d3-zoom` ^3.0.0 - Zoom and pan behavior | ||
| - `d3-selection` ^3.0.0 - DOM selection utilities | ||
| - `d3-color` ^3.1.0 - Color manipulation | ||
| - `d3-interpolate` ^3.0.1 - Value interpolation | ||
| - `topojson-client` ^3.1.0 - TopoJSON parsing and processing | ||
| ## π Quick Start | ||
| `react19-simple-maps` provides a set of composable React components for creating interactive SVG maps. You can combine these components to build everything from simple world maps to complex interactive visualizations. | ||
| ### Basic World Map (JavaScript) | ||
| ```jsx | ||
| ```tsx | ||
| import React from 'react'; | ||
@@ -135,5 +96,5 @@ import { | ||
| Geography, | ||
| createCoordinates, | ||
| } from '@vnedyalk0v/react19-simple-maps'; | ||
| // URL to a valid TopoJSON file | ||
| const geoUrl = 'https://unpkg.com/world-atlas@2/countries-110m.json'; | ||
@@ -147,3 +108,3 @@ | ||
| scale: 147, | ||
| center: [0, 0], | ||
| center: createCoordinates(0, 0), | ||
| }} | ||
@@ -175,105 +136,9 @@ width={800} | ||
| ### Interactive Map with TypeScript | ||
| ## Core Components | ||
| ```tsx | ||
| import React, { useState } from 'react'; | ||
| import { | ||
| ComposableMap, | ||
| Geographies, | ||
| Geography, | ||
| Marker, | ||
| ZoomableGroup, | ||
| createCoordinates, | ||
| createScaleExtent, | ||
| createTranslateExtent, | ||
| } from '@vnedyalk0v/react19-simple-maps'; | ||
| import type { Feature, Geometry } from 'geojson'; | ||
| const geoUrl = 'https://unpkg.com/world-atlas@2/countries-50m.json'; | ||
| const InteractiveMap: React.FC = () => { | ||
| const [selectedCountry, setSelectedCountry] = useState<string | null>(null); | ||
| const handleGeographyClick = (geography: Feature<Geometry>) => { | ||
| const countryName = geography.properties?.name || 'Unknown'; | ||
| setSelectedCountry(countryName); | ||
| }; | ||
| return ( | ||
| <div> | ||
| {selectedCountry && <p>Selected: {selectedCountry}</p>} | ||
| <ComposableMap projection="geoEqualEarth" width={800} height={500}> | ||
| <ZoomableGroup | ||
| zoom={1} | ||
| center={createCoordinates(0, 0)} | ||
| minZoom={0.5} | ||
| maxZoom={8} | ||
| scaleExtent={createScaleExtent(0.5, 8)} | ||
| translateExtent={createTranslateExtent( | ||
| createCoordinates(-2000, -1000), | ||
| createCoordinates(2000, 1000), | ||
| )} | ||
| > | ||
| <Geographies geography={geoUrl}> | ||
| {({ geographies }) => | ||
| geographies.map((geo) => ( | ||
| <Geography | ||
| key={geo.rsmKey} | ||
| geography={geo} | ||
| onClick={() => handleGeographyClick(geo)} | ||
| style={{ | ||
| default: { | ||
| fill: | ||
| selectedCountry === geo.properties?.name | ||
| ? '#1976d2' | ||
| : '#D6D6DA', | ||
| outline: 'none', | ||
| stroke: '#FFFFFF', | ||
| strokeWidth: 0.5, | ||
| }, | ||
| hover: { fill: '#F53', cursor: 'pointer' }, | ||
| pressed: { fill: '#E42' }, | ||
| }} | ||
| /> | ||
| )) | ||
| } | ||
| </Geographies> | ||
| {/* Add a marker for New York */} | ||
| <Marker coordinates={createCoordinates(-74.006, 40.7128)}> | ||
| <circle r={5} fill="#F53" stroke="#fff" strokeWidth={2} /> | ||
| <text | ||
| textAnchor="middle" | ||
| y={-10} | ||
| style={{ fontSize: '12px', fill: '#333' }} | ||
| > | ||
| New York | ||
| </text> | ||
| </Marker> | ||
| </ZoomableGroup> | ||
| </ComposableMap> | ||
| </div> | ||
| ); | ||
| }; | ||
| export default InteractiveMap; | ||
| ``` | ||
| ### π― Live Examples | ||
| Check out our comprehensive examples in the [`examples/`](./examples/) directory: | ||
| - **[Basic Map](./examples/basic-map/)** - Simple world map with click interactions | ||
| - **[Interactive Map](./examples/interactive-map/)** - Advanced features with zoom, pan, and markers | ||
| The examples use the [Equal Earth projection](https://observablehq.com/@d3/equal-earth), which provides an accurate representation of land areas. Learn more about this projection on [Shaded Relief](http://shadedrelief.com/ee_proj/) and [Wikipedia](https://en.wikipedia.org/wiki/Equal_Earth_projection). | ||
| ## π§© Core Components | ||
| ### ComposableMap | ||
| The main wrapper component that provides the SVG context and projection system. | ||
| The main wrapper component that provides SVG context and projection setup. | ||
| **Props:** | ||
| **Common props:** | ||
@@ -284,229 +149,57 @@ - `projection` - Map projection (string name or d3-geo projection function) | ||
| - `className` - CSS class name | ||
| - `debug` - Enable debug logging (default: false, opt-in only) | ||
| - `metadata` - Optional metadata for SEO and accessibility | ||
| - `debug` - Enable opt-in debug logging (default: `false`) | ||
| ```tsx | ||
| import { | ||
| ComposableMap, | ||
| createCoordinates, | ||
| } from '@vnedyalk0v/react19-simple-maps'; | ||
| <ComposableMap | ||
| projection="geoEqualEarth" | ||
| projectionConfig={{ | ||
| scale: 147, | ||
| center: createCoordinates(0, 0), | ||
| rotate: [0, 0, 0], | ||
| }} | ||
| width={800} | ||
| height={600} | ||
| className="my-map" | ||
| > | ||
| {/* Map content */} | ||
| </ComposableMap>; | ||
| ``` | ||
| ### Geographies | ||
| Renders geographic features from TopoJSON or GeoJSON data with built-in error handling. | ||
| Renders geographic features from TopoJSON or GeoJSON data. | ||
| **Props:** | ||
| **Notable props:** | ||
| - `geography` - URL string, TopoJSON object, or GeoJSON FeatureCollection | ||
| - `parseGeographies` - Optional function to transform geography data | ||
| - `className` - CSS class name | ||
| - `errorBoundary` - Enable built-in error boundary and Suspense fallback | ||
| - `onGeographyError`, `fallback` - Error handling hooks when `errorBoundary` is enabled | ||
| ```tsx | ||
| import { Geographies, Geography } from '@vnedyalk0v/react19-simple-maps'; | ||
| <Geographies geography="https://unpkg.com/world-atlas@2/countries-110m.json"> | ||
| {({ geographies, outline, borders }) => | ||
| geographies.map((geo) => ( | ||
| <Geography | ||
| key={geo.rsmKey} | ||
| geography={geo} | ||
| onClick={(event) => console.log('Clicked:', geo.properties?.name)} | ||
| onMouseEnter={(event) => console.log('Hover:', geo.properties?.name)} | ||
| /> | ||
| )) | ||
| } | ||
| </Geographies>; | ||
| ``` | ||
| ### Geography | ||
| Individual geographic feature component with enhanced interaction support. | ||
| Individual geographic feature component with enhanced event handlers. | ||
| **Enhanced Event Handlers:** | ||
| All event handlers receive `(event, GeographyEventData)` where `GeographyEventData` includes: | ||
| `geography`, `centroid`, `bounds`, and `coordinates`. | ||
| All event handlers now receive geographic data as a second parameter: | ||
| ```tsx | ||
| <Geography | ||
| geography={geo} | ||
| onClick={(event, data) => { | ||
| console.log('Country:', data.geography.properties?.name); | ||
| console.log('Centroid:', data.centroid); | ||
| console.log('Bounds:', data.bounds); | ||
| console.log('Coordinates:', data.coordinates); | ||
| }} | ||
| onMouseEnter={(event, data) => { | ||
| // Access to rich geographic data | ||
| }} | ||
| /> | ||
| ``` | ||
| **Props:** | ||
| - `geography` - GeoJSON feature object | ||
| - `style` - Conditional styling object with `default`, `hover`, `pressed` states | ||
| - Enhanced event handlers: `onClick`, `onMouseEnter`, `onMouseLeave`, `onFocus`, `onBlur` | ||
| - All handlers receive `(event, GeographyEventData)` parameters | ||
| ### ZoomableGroup | ||
| Provides zoom and pan functionality with configurable constraints. Supports both simple and advanced APIs. | ||
| Zoom and pan with both simple and advanced APIs. | ||
| **Simple API (Recommended):** | ||
| ```tsx | ||
| import { ZoomableGroup, createZoomConfig, createPanConfig } from '@vnedyalk0v/react19-simple-maps'; | ||
| // Easy zoom configuration | ||
| <ZoomableGroup | ||
| zoom={1} | ||
| center={createCoordinates(0, 0)} | ||
| {...createZoomConfig(0.5, 8)} // minZoom, maxZoom | ||
| > | ||
| {/* Content */} | ||
| </ZoomableGroup> | ||
| // Or use direct props | ||
| <ZoomableGroup | ||
| zoom={1} | ||
| center={createCoordinates(0, 0)} | ||
| minZoom={0.5} | ||
| maxZoom={8} | ||
| enableZoom={true} | ||
| > | ||
| {/* Content */} | ||
| </ZoomableGroup> | ||
| ``` | ||
| **Props:** | ||
| - `zoom` - Current zoom level | ||
| - `center` - Center coordinates | ||
| - `minZoom`, `maxZoom` - Zoom level constraints (simple API) | ||
| - `enableZoom`, `enablePan` - Enable/disable behaviors (simple API) | ||
| - `scaleExtent` - Alternative to minZoom/maxZoom using branded types | ||
| - `translateExtent` - Pan boundaries | ||
| - `filterZoomEvent` - Custom zoom event filtering | ||
| - `onMoveStart`, `onMove`, `onMoveEnd` - Movement event handlers | ||
| ```tsx | ||
| import { | ||
| ZoomableGroup, | ||
| createCoordinates, | ||
| createScaleExtent, | ||
| createTranslateExtent, | ||
| createZoomConfig, | ||
| } from '@vnedyalk0v/react19-simple-maps'; | ||
| // Approach 1: Using enableZoom/enablePan with explicit constraints | ||
| <ZoomableGroup | ||
| zoom={1} | ||
| center={createCoordinates(0, 0)} | ||
| enableZoom={true} | ||
| minZoom={0.5} | ||
| maxZoom={8} | ||
| scaleExtent={createScaleExtent(0.5, 8)} | ||
| enablePan={true} | ||
| translateExtent={createTranslateExtent( | ||
| createCoordinates(-1000, -500), | ||
| createCoordinates(1000, 500), | ||
| )} | ||
| onMoveEnd={(position) => console.log('New position:', position)} | ||
| {...createZoomConfig(0.5, 8)} | ||
| > | ||
| {/* Zoomable content */} | ||
| </ZoomableGroup> | ||
| // Approach 2: Simplified with just constraints | ||
| <ZoomableGroup | ||
| zoom={1} | ||
| center={createCoordinates(0, 0)} | ||
| minZoom={0.5} | ||
| maxZoom={8} | ||
| translateExtent={createTranslateExtent( | ||
| createCoordinates(-1000, -500), | ||
| createCoordinates(1000, 500), | ||
| )} | ||
| > | ||
| {/* Zoomable content */} | ||
| {/* Content */} | ||
| </ZoomableGroup>; | ||
| ``` | ||
| ### Marker | ||
| ### Marker & Annotation | ||
| Add custom markers to specific coordinates on your map. | ||
| Use `Marker` for custom points and `Annotation` for callouts. | ||
| **Props:** | ||
| - `coordinates` - Geographic coordinates using branded types | ||
| - `className` - CSS class name | ||
| - Event handlers: `onClick`, `onMouseEnter`, `onMouseLeave`, `onFocus`, `onBlur` | ||
| ```tsx | ||
| import { Marker, createCoordinates } from '@vnedyalk0v/react19-simple-maps'; | ||
| <Marker coordinates={createCoordinates(-74.006, 40.7128)}> | ||
| <circle r={5} fill="#F53" stroke="#fff" strokeWidth={2} /> | ||
| <text textAnchor="middle" y={-10} style={{ fontSize: '12px' }}> | ||
| New York | ||
| </text> | ||
| </Marker>; | ||
| ``` | ||
| ### Annotation | ||
| Create annotations with connector lines pointing to specific locations. | ||
| **Props:** | ||
| - `subject` - Target coordinates | ||
| - `dx`, `dy` - Offset from subject | ||
| - `curve` - Connector curve amount | ||
| - `connectorProps` - SVG props for the connector line | ||
| ```tsx | ||
| import { Annotation, createCoordinates } from '@vnedyalk0v/react19-simple-maps'; | ||
| <Annotation | ||
| subject={createCoordinates(-74.006, 40.7128)} | ||
| dx={-90} | ||
| dy={-30} | ||
| connectorProps={{ | ||
| stroke: '#FF5533', | ||
| strokeWidth: 2, | ||
| strokeLinecap: 'round', | ||
| }} | ||
| > | ||
| <text textAnchor="end" alignmentBaseline="middle" fill="#F53"> | ||
| New York City | ||
| </text> | ||
| </Annotation>; | ||
| ``` | ||
| ### Additional Components | ||
| - **`Line`** - Draw lines between coordinates | ||
| - **`Graticule`** - Add coordinate grid lines | ||
| - **`Sphere`** - Add map outline/background | ||
| - **`GeographyErrorBoundary`** - React 19 error boundary for geography loading | ||
| - `Line` - Draw lines between coordinates | ||
| - `Graticule` - Add coordinate grid lines | ||
| - `Sphere` - Add map outline/background | ||
| - `GeographyErrorBoundary` - Explicit error boundary wrapper | ||
| - `MapWithMetadata` - Wrapper that renders metadata and a `ComposableMap` | ||
| ## π TypeScript Support | ||
| ## TypeScript Support | ||
| The package includes comprehensive TypeScript definitions with strict typing and branded types for enhanced type safety. | ||
| Branded types help prevent coordinate mistakes: | ||
| ### Branded Types for Coordinates | ||
| ```tsx | ||
@@ -517,22 +210,12 @@ import { | ||
| createLatitude, | ||
| createScaleExtent, | ||
| createTranslateExtent, | ||
| } from '@vnedyalk0v/react19-simple-maps'; | ||
| // Branded types prevent coordinate mistakes | ||
| const longitude = createLongitude(-74.006); // Type: Longitude | ||
| const latitude = createLatitude(40.7128); // Type: Latitude | ||
| const coordinates = createCoordinates(-74.006, 40.7128); // Type: Coordinates | ||
| // Scale and translate extents | ||
| const scaleExtent = createScaleExtent(0.5, 8); | ||
| const translateExtent = createTranslateExtent( | ||
| createCoordinates(-1000, -500), | ||
| createCoordinates(1000, 500), | ||
| ); | ||
| const lon = createLongitude(-74.006); | ||
| const lat = createLatitude(40.7128); | ||
| const coords = createCoordinates(-74.006, 40.7128); | ||
| ``` | ||
| ### Geography Utilities | ||
| ## Geography Utilities | ||
| Extract geographic data from features for enhanced interactions: | ||
| Extract geographic data for interactions and labels: | ||
@@ -544,380 +227,40 @@ ```tsx | ||
| getBestGeographyCoordinates, | ||
| isValidCoordinates, | ||
| } from '@vnedyalk0v/react19-simple-maps'; | ||
| // Extract centroid for map centering | ||
| const centroid = getGeographyCentroid(geography); | ||
| if (centroid) { | ||
| setMapCenter(centroid); | ||
| } | ||
| // Get bounding box for zoom-to-fit | ||
| const bounds = getGeographyBounds(geography); | ||
| if (bounds) { | ||
| const [southwest, northeast] = bounds; | ||
| // Use bounds for map fitting | ||
| } | ||
| // Get best available coordinates | ||
| const coords = getBestGeographyCoordinates(geography); | ||
| ``` | ||
| ### Component Props and Event Handlers | ||
| ## Map Data Sources | ||
| ```tsx | ||
| import type { | ||
| ComposableMapProps, | ||
| GeographyProps, | ||
| GeographyEventData, | ||
| MarkerProps, | ||
| ProjectionConfig, | ||
| Position, | ||
| SimpleZoomableGroupProps, | ||
| } from '@vnedyalk0v/react19-simple-maps'; | ||
| import type { Feature, Geometry } from 'geojson'; | ||
| - [Natural Earth](https://github.com/nvkelso/natural-earth-vector) | ||
| - [TopoJSON Collection](https://github.com/deldersveld/topojson) | ||
| - [World Atlas](https://github.com/topojson/world-atlas) | ||
| - [US Atlas](https://github.com/topojson/us-atlas) | ||
| // Typed projection configuration | ||
| const projectionConfig: ProjectionConfig = { | ||
| scale: 147, | ||
| center: createCoordinates(0, 0), | ||
| rotate: [0, 0, 0], | ||
| }; | ||
| ## Security Utilities | ||
| // Enhanced event handlers with geographic data | ||
| const handleGeographyClick = ( | ||
| event: React.MouseEvent, | ||
| data: GeographyEventData, | ||
| ) => { | ||
| console.log('Country:', data.geography.properties?.name); | ||
| console.log('Centroid:', data.centroid); | ||
| if (data.centroid) { | ||
| setMapCenter(data.centroid); | ||
| } | ||
| }; | ||
| The `./utils` subpath includes helpers for safer geography fetching. When you use URL-based geography data in `Geographies`, the internal fetch path applies URL validation, HTTPS-only defaults, response size checks, and optional SRI validation. | ||
| const handleZoomEnd = (position: Position) => { | ||
| console.log('New position:', position.coordinates, 'Zoom:', position.zoom); | ||
| }; | ||
| ``` | ||
| ## πΊοΈ Map Data Sources | ||
| The library works with any valid TopoJSON or GeoJSON data, giving you complete flexibility in map visualization. | ||
| ### Recommended Data Sources | ||
| - π **[Natural Earth](https://github.com/nvkelso/natural-earth-vector)** - High-quality public domain map data at multiple scales | ||
| - πΊοΈ **[TopoJSON Collection](https://github.com/deldersveld/topojson)** - Ready-to-use TopoJSON files for various regions | ||
| - π **[World Atlas](https://github.com/topojson/world-atlas)** - Comprehensive world and country boundaries | ||
| - π **[World Bank Data](https://datahelpdesk.worldbank.org/knowledgebase/articles/902061)** - Official administrative boundaries | ||
| - ποΈ **[US Atlas](https://github.com/topojson/us-atlas)** - Detailed US states, counties, and congressional districts | ||
| ### Popular Geography URLs | ||
| ```tsx | ||
| // World maps | ||
| const worldCountries = 'https://unpkg.com/world-atlas@2/countries-110m.json'; | ||
| const worldCountriesDetailed = 'https://unpkg.com/world-atlas@2/countries-50m.json'; | ||
| // US maps | ||
| const usStates = 'https://unpkg.com/us-atlas@3/states-10m.json'; | ||
| const usCounties = 'https://unpkg.com/us-atlas@3/counties-10m.json'; | ||
| // Usage | ||
| <Geographies geography={worldCountries}> | ||
| {({ geographies }) => /* render countries */} | ||
| </Geographies> | ||
| ``` | ||
| ### Creating Custom Maps | ||
| To create your own TopoJSON maps from shapefiles: | ||
| 1. **[GDAL/OGR](https://gdal.org/)** - Convert shapefiles to GeoJSON | ||
| 2. **[TopoJSON CLI](https://github.com/topojson/topojson)** - Convert GeoJSON to TopoJSON | ||
| 3. **[Mapshaper](https://mapshaper.org/)** - Simplify and optimize map data | ||
| **Tutorial:** ["How to convert and prepare TopoJSON files for interactive mapping with d3"](https://hackernoon.com/how-to-convert-and-prepare-topojson-files-for-interactive-mapping-with-d3-499cf0ced5f) | ||
| ## π Advanced Features | ||
| ### Built-in Projections | ||
| The library supports all major d3-geo projections out of the box: | ||
| ```tsx | ||
| // Popular projections | ||
| <ComposableMap projection="geoEqualEarth" /> // Equal area, good for world maps | ||
| <ComposableMap projection="geoMercator" /> // Web maps standard | ||
| <ComposableMap projection="geoNaturalEarth1" /> // Compromise projection | ||
| <ComposableMap projection="geoAlbersUsa" /> // US-specific projection | ||
| <ComposableMap projection="geoOrthographic" /> // Globe view | ||
| ``` | ||
| ### Custom Projections | ||
| Use any d3-geo projection or create your own: | ||
| ```tsx | ||
| import { geoMercator, geoConicEqualArea } from 'd3-geo'; | ||
| // Custom Mercator | ||
| const customMercator = geoMercator() | ||
| .scale(100) | ||
| .translate([400, 300]) | ||
| .rotate([-11, 0]); | ||
| // Custom conic projection for specific regions | ||
| const customConic = geoConicEqualArea() | ||
| .parallels([29.5, 45.5]) | ||
| .scale(1000) | ||
| .translate([480, 250]) | ||
| .rotate([96, 0]); | ||
| <ComposableMap projection={customMercator}>{/* Map content */}</ComposableMap>; | ||
| ``` | ||
| ### Advanced Zoom and Pan | ||
| ```tsx | ||
| import { | ||
| ZoomableGroup, | ||
| createCoordinates, | ||
| createTranslateExtent, | ||
| } from '@vnedyalk0v/react19-simple-maps'; | ||
| <ZoomableGroup | ||
| zoom={2} | ||
| center={createCoordinates(-100, 40)} | ||
| minZoom={0.5} | ||
| maxZoom={10} | ||
| translateExtent={createTranslateExtent( | ||
| createCoordinates(-2000, -1000), | ||
| createCoordinates(2000, 1000), | ||
| )} | ||
| filterZoomEvent={(event) => !event.ctrlKey} // Disable zoom with Ctrl | ||
| onMoveStart={(position, event) => console.log('Move started')} | ||
| onMove={(position, event) => console.log('Moving:', position)} | ||
| onMoveEnd={(position, event) => console.log('Move ended:', position)} | ||
| > | ||
| {/* Zoomable content */} | ||
| </ZoomableGroup>; | ||
| ``` | ||
| ## π‘οΈ Enterprise Security Features | ||
| The library includes comprehensive security features designed for production applications. | ||
| ### Geography Data Security | ||
| ```tsx | ||
| import { | ||
| configureGeographySecurity, | ||
| enableDevelopmentMode, | ||
| DEFAULT_GEOGRAPHY_FETCH_CONFIG, | ||
| } from '@vnedyalk0v/react19-simple-maps/utils'; | ||
| // Default: Strict HTTPS-only mode (recommended for production) | ||
| // No configuration needed - secure by default | ||
| configureGeographySecurity({ | ||
| TIMEOUT_MS: 5000, | ||
| MAX_RESPONSE_SIZE: 10 * 1024 * 1024, | ||
| }); | ||
| // For development with local geography files: | ||
| if (process.env.NODE_ENV === 'development') { | ||
| enableDevelopmentMode(true); // Allows HTTP localhost | ||
| enableDevelopmentMode(true); // allow HTTP localhost | ||
| } | ||
| // Custom security configuration: | ||
| configureGeographySecurity({ | ||
| STRICT_HTTPS_ONLY: true, // Force HTTPS only | ||
| ALLOW_HTTP_LOCALHOST: false, // Disable HTTP localhost | ||
| TIMEOUT_MS: 5000, // 5 second timeout | ||
| MAX_RESPONSE_SIZE: 10 * 1024 * 1024, // 10MB max | ||
| ALLOWED_CONTENT_TYPES: [ | ||
| // Restrict content types | ||
| 'application/json', | ||
| 'application/geo+json', | ||
| ], | ||
| }); | ||
| ``` | ||
| ### Built-in Security Features | ||
| ## Debugging | ||
| - π **HTTPS-only by default** - Prevents man-in-the-middle attacks | ||
| - π« **Private IP blocking** - Prevents SSRF attacks | ||
| - β±οΈ **Request timeout protection** - Prevents hanging requests | ||
| - π **Response size limits** - Prevents memory exhaustion | ||
| - π‘οΈ **Content-Type validation** - Ensures valid geography data | ||
| - π **Configurable localhost access** - Safe development mode | ||
| - π **Subresource Integrity (SRI)** - Tamper-proof external resources | ||
| - π‘οΈ **URL validation** - Prevents malicious URLs | ||
| Enable debug logging globally via environment variable or per map: | ||
| ### Subresource Integrity (SRI) | ||
| Protect against tampered external resources with built-in SRI validation: | ||
| ```tsx | ||
| import { | ||
| configureSRI, | ||
| enableStrictSRI, | ||
| addCustomSRI, | ||
| generateSRIHash, | ||
| generateSRIForUrls, | ||
| } from '@vnedyalk0v/react19-simple-maps/utils'; | ||
| // Enable strict SRI for all external resources | ||
| enableStrictSRI(); | ||
| // Add custom SRI for your geography data | ||
| addCustomSRI('https://your-domain.com/data.json', { | ||
| algorithm: 'sha384', | ||
| hash: 'sha384-your-calculated-hash', | ||
| enforceIntegrity: true, | ||
| }); | ||
| // Generate SRI hash for a URL (development utility) | ||
| const hash = await generateSRIHash('https://example.com/data.json'); | ||
| console.log('SRI Hash:', hash); | ||
| // Batch generate SRI for multiple URLs | ||
| const sriMap = await generateSRIForUrls([ | ||
| 'https://unpkg.com/world-atlas@2/countries-110m.json', | ||
| 'https://unpkg.com/us-atlas@3/states-10m.json', | ||
| ]); | ||
| ``` | ||
| ### React 19 Error Boundaries | ||
| Built-in error boundaries for robust geography loading: | ||
| ```tsx | ||
| import { GeographyErrorBoundary } from '@vnedyalk0v/react19-simple-maps'; | ||
| <GeographyErrorBoundary | ||
| fallback={(error, retry) => ( | ||
| <div> | ||
| <p>Failed to load map: {error.message}</p> | ||
| <button onClick={retry}>Retry</button> | ||
| </div> | ||
| )} | ||
| onError={(error) => console.error('Geography error:', error)} | ||
| > | ||
| <Geographies geography="https://example.com/map.json"> | ||
| {({ geographies }) => /* render geographies */} | ||
| </Geographies> | ||
| </GeographyErrorBoundary> | ||
| ``` | ||
| ## π¨ Styling and Customization | ||
| ### CSS-in-JS Styling | ||
| ```tsx | ||
| const geographyStyle = { | ||
| default: { | ||
| fill: '#D6D6DA', | ||
| outline: 'none', | ||
| stroke: '#FFFFFF', | ||
| strokeWidth: 0.5, | ||
| }, | ||
| hover: { | ||
| fill: '#F53', | ||
| outline: 'none', | ||
| cursor: 'pointer', | ||
| }, | ||
| pressed: { | ||
| fill: '#E42', | ||
| outline: 'none', | ||
| }, | ||
| }; | ||
| <Geography geography={geo} style={geographyStyle} />; | ||
| ``` | ||
| ### Conditional Styling | ||
| ```tsx | ||
| const getCountryStyle = ( | ||
| countryName: string, | ||
| selectedCountry: string | null, | ||
| ) => ({ | ||
| default: { | ||
| fill: selectedCountry === countryName ? '#1976d2' : '#D6D6DA', | ||
| outline: 'none', | ||
| stroke: '#FFFFFF', | ||
| strokeWidth: 0.5, | ||
| }, | ||
| hover: { | ||
| fill: selectedCountry === countryName ? '#1565c0' : '#F53', | ||
| cursor: 'pointer', | ||
| }, | ||
| }); | ||
| <Geography | ||
| geography={geo} | ||
| style={getCountryStyle(geo.properties?.name, selectedCountry)} | ||
| />; | ||
| ``` | ||
| ### CSS Classes | ||
| ```tsx | ||
| // Use CSS classes for styling | ||
| <ComposableMap className="world-map"> | ||
| <Geographies geography={geoUrl} className="countries"> | ||
| {({ geographies }) => | ||
| geographies.map((geo) => ( | ||
| <Geography | ||
| key={geo.rsmKey} | ||
| geography={geo} | ||
| className={`country country-${geo.properties?.iso_a2?.toLowerCase()}`} | ||
| /> | ||
| )) | ||
| } | ||
| </Geographies> | ||
| </ComposableMap> | ||
| ``` | ||
| ## π Migration from react-simple-maps | ||
| This is a complete rewrite focused exclusively on React 19+. **No backward compatibility** with React 18 or earlier versions. | ||
| ### Key Differences | ||
| - **React 19+ Exclusive**: No support for React 18 or earlier | ||
| - **Full TypeScript rewrite** with strict typing and zero `any` types | ||
| - **React 19 features**: `use` API, enhanced error boundaries, improved Suspense | ||
| - **Modern build system**: ESM-only with tree-shaking and source maps | ||
| - **Updated dependencies**: Latest D3 versions with security fixes | ||
| - **Performance improvements**: Smaller bundle size and better rendering | ||
| - **Enhanced security**: Built-in SRI, HTTPS enforcement, and validation | ||
| - **Branded types**: Type-safe coordinates and configuration objects | ||
| ### Migration Steps | ||
| 1. **Upgrade React**: Ensure you're using React 19.0.0+ | ||
| 2. **Install package**: `npm install @vnedyalk0v/react19-simple-maps` | ||
| 3. **Update imports**: Change import paths to the new package | ||
| 4. **Use branded types**: Replace coordinate arrays with `createCoordinates()` | ||
| 5. **Add error boundaries**: Wrap geography components for better error handling | ||
| 6. **Update TypeScript**: Use the new comprehensive type definitions | ||
| ## π Debugging | ||
| The library provides opt-in debugging capabilities to help with development and troubleshooting. | ||
| ### Debug Mode | ||
| By default, the library is **quiet** and produces no console output. You can enable debugging in two ways: | ||
| **1. Environment Variable (Global)** | ||
| ```bash | ||
| # Enable debug mode for all maps | ||
| REACT_SIMPLE_MAPS_DEBUG=true npm start | ||
| # Or in your .env file | ||
| REACT_SIMPLE_MAPS_DEBUG=true | ||
| ``` | ||
| **2. Component Prop (Per Map)** | ||
| ```tsx | ||
@@ -927,108 +270,21 @@ <ComposableMap debug={true}>{/* Map content */}</ComposableMap> | ||
| ### Debug Output | ||
| ## Development | ||
| When enabled, debug mode provides: | ||
| - **Component render information** with React 19 Owner Stack | ||
| - **Performance metrics** for render times | ||
| - **Error context** with detailed stack traces | ||
| - **Props and state logging** for troubleshooting | ||
| ```tsx | ||
| // Example debug output in console: | ||
| // πΊοΈ ComposableMap Render | ||
| // Owner Stack: ComposableMap <- App <- Router | ||
| // Props: { width: 800, height: 600, projection: "geoEqualEarth" } | ||
| ``` | ||
| ### Best Practices | ||
| - **Production**: Always keep debug disabled (`debug={false}` or omit the prop) | ||
| - **Development**: Enable only when needed for troubleshooting | ||
| - **CI/CD**: Set `REACT_SIMPLE_MAPS_DEBUG=false` in production environments | ||
| ## π€ Contributing | ||
| We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details. | ||
| ### Development Setup | ||
| ```bash | ||
| # Clone the repository | ||
| git clone https://github.com/vnedyalk0v/react19-simple-maps.git | ||
| cd react19-simple-maps | ||
| # Install dependencies | ||
| npm install | ||
| # Start development with watch mode | ||
| npm run dev | ||
| # Run tests | ||
| npm test | ||
| # Run tests with coverage | ||
| npm run test:coverage | ||
| # Type checking | ||
| npm run build | ||
| npm run test | ||
| npm run type-check | ||
| # Linting | ||
| npm run lint | ||
| # Build the package | ||
| npm run build | ||
| ``` | ||
| ### Development Scripts | ||
| ## Publishing | ||
| - `npm run dev` - Start development with watch mode | ||
| - `npm run build` - Build ESM output and type definitions | ||
| - `npm run test` - Run test suite with Vitest | ||
| - `npm run test:watch` - Run tests in watch mode | ||
| - `npm run test:ui` - Run tests with UI interface | ||
| - `npm run type-check` - TypeScript type checking | ||
| - `npm run lint` - ESLint code linting | ||
| - `npm run format` - Format code with Prettier | ||
| - `npm run analyze` - Bundle size analysis | ||
| Changesets is configured for versioning and releases. The GitHub Actions workflow in `.github/workflows/publish.yml` runs on pushes to `main` and publishes to npm (and GitHub Packages) when configured with tokens. | ||
| ### Publishing | ||
| ## License | ||
| The package uses [Changesets](https://github.com/changesets/changesets) for version management and automated publishing: | ||
| - **npm Registry**: Published on main branch merges | ||
| - **GitHub Packages**: Also published to GitHub Package Registry | ||
| - **Changelog**: Automatically generated from changesets | ||
| ## π License | ||
| MIT licensed. Original work Copyright (c) Richard Zimerman 2017. Fork enhancements Copyright (c) Georgi Nedyalkov 2025. See [LICENSE](./LICENSE) for more details. | ||
| ## π Links & Resources | ||
| ### Package Distribution | ||
| - π¦ **[npm Package](https://www.npmjs.com/package/@vnedyalk0v/react19-simple-maps)** - Primary distribution | ||
| - π¦ **[GitHub Packages](https://github.com/vnedyalk0v/react19-simple-maps/packages)** - Also available | ||
| - π **[Bundle Analysis](https://bundlephobia.com/package/@vnedyalk0v/react19-simple-maps)** - Size and dependencies | ||
| ### Documentation & Examples | ||
| - π **[Live Examples](./examples/)** - Interactive demos with source code | ||
| - π **[Changelog](https://github.com/vnedyalk0v/react19-simple-maps/blob/main/CHANGELOG.md)** - Version history and updates | ||
| - π **[Security Guide](./examples/SECURITY.md)** - Security configuration details | ||
| ### Community & Support | ||
| - π **[Issues](https://github.com/vnedyalk0v/react19-simple-maps/issues)** - Bug reports and feature requests | ||
| - π¬ **[Discussions](https://github.com/vnedyalk0v/react19-simple-maps/discussions)** - Community support and ideas | ||
| - π§ **[Maintainer](mailto:vnedyalk0v@proton.me)** - Direct contact | ||
| ### Original Project | ||
| - π΄ **[Original react-simple-maps](https://github.com/zcreativelabs/react-simple-maps)** - By Richard Zimerman | ||
| - π **[Original Documentation](https://www.react-simple-maps.io/)** - Legacy documentation | ||
| --- | ||
| **Built with β€οΈ for the React community. Powered by React 19, TypeScript, and modern web standards.** | ||
| MIT licensed. Original work Copyright (c) Richard Zimerman 2017. | ||
| Fork maintenance Copyright (c) Georgi Nedyalkov 2025. | ||
| See [LICENSE](./LICENSE) for details. |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
4599
3.53%3
-25%324757
-3.2%281
-72.59%