bd-geo-location 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -84,4 +84,4 @@ type GeoLocation = Division | District | Upazila | Union | Pourosova | CityCorpo
|
|
|
84
84
|
*/
|
|
85
85
|
type GeoLevel = 'division' | 'district' | 'upazila' | 'thana' | 'union' | 'pourosova' | 'cityCorporation' | 'village';
|
|
86
86
|
|
|
87
|
-
export type { BangladeshGeoData as B, CityCorporation as C, District as D, FilterOptions as F, GeoLevel as G, Pourosova as P,
|
|
87
|
+
export type { BangladeshGeoData as B, CityCorporation as C, District as D, FilterOptions as F, GeoLevel as G, Pourosova as P, Upazila as U, Village as V, Division as a, Union as b, GeoLocation as c };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as Division, C as CityCorporation, D as District,
|
|
2
|
-
export { B as BangladeshGeoData, F as FilterOptions, G as GeoLevel, c as GeoLocation } from './index-
|
|
1
|
+
import { a as Division, C as CityCorporation, D as District, U as Upazila, P as Pourosova, b as Union, V as Village } from './index-UgYYjMwe.js';
|
|
2
|
+
export { B as BangladeshGeoData, F as FilterOptions, G as GeoLevel, c as GeoLocation } from './index-UgYYjMwe.js';
|
|
3
3
|
|
|
4
4
|
var divisions = [
|
|
5
5
|
{
|
package/dist/react-native.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { useCityCorporations, useDistricts, useDivisions, useLocationById, usePourosovas, useSearch, useUnions, useUpazilas } from './react.js';
|
|
2
|
-
export { B as BangladeshGeoData, C as CityCorporation, D as District, a as Division, F as FilterOptions, G as GeoLevel, c as GeoLocation, P as Pourosova,
|
|
2
|
+
export { B as BangladeshGeoData, C as CityCorporation, D as District, a as Division, F as FilterOptions, G as GeoLevel, c as GeoLocation, P as Pourosova, b as Union, U as Upazila, V as Village } from './index-UgYYjMwe.js';
|
package/dist/react.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as CityCorporation, D as District, a as Division, U as
|
|
2
|
-
export { B as BangladeshGeoData, F as FilterOptions, G as GeoLevel, c as GeoLocation, V as Village } from './index-
|
|
1
|
+
import { C as CityCorporation, D as District, a as Division, U as Upazila, b as Union, P as Pourosova } from './index-UgYYjMwe.js';
|
|
2
|
+
export { B as BangladeshGeoData, F as FilterOptions, G as GeoLevel, c as GeoLocation, V as Village } from './index-UgYYjMwe.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* React Hook: Get all divisions
|
|
@@ -39,6 +39,6 @@ declare function useSearch(searchTerm: string): {
|
|
|
39
39
|
/**
|
|
40
40
|
* React Hook: Get location by ID and type
|
|
41
41
|
*/
|
|
42
|
-
declare function useLocationById(id: string | null, type: 'division' | 'district' | 'upazila' | 'union' | 'pourosova' | 'cityCorporation'):
|
|
42
|
+
declare function useLocationById(id: string | null, type: 'division' | 'district' | 'upazila' | 'union' | 'pourosova' | 'cityCorporation'): Division | District | Upazila | Union | CityCorporation | null;
|
|
43
43
|
|
|
44
44
|
export { CityCorporation, District, Division, Pourosova, Union, Upazila, useCityCorporations, useDistricts, useDivisions, useLocationById, usePourosovas, useSearch, useUnions, useUpazilas };
|
package/dist/vue.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { Ref } from 'vue';
|
|
3
|
-
import { C as CityCorporation, D as District, a as Division, U as
|
|
4
|
-
export { B as BangladeshGeoData, F as FilterOptions, G as GeoLevel, c as GeoLocation, V as Village } from './index-
|
|
3
|
+
import { C as CityCorporation, D as District, a as Division, U as Upazila, b as Union, P as Pourosova } from './index-UgYYjMwe.js';
|
|
4
|
+
export { B as BangladeshGeoData, F as FilterOptions, G as GeoLevel, c as GeoLocation, V as Village } from './index-UgYYjMwe.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Vue Composable: Get all divisions
|
|
@@ -56,7 +56,7 @@ declare function useSearch(searchTerm?: Ref<string> | string): {
|
|
|
56
56
|
* Vue Composable: Get location by ID and type
|
|
57
57
|
*/
|
|
58
58
|
declare function useLocationById(id: Ref<string | null> | string | null, type: Ref<'division' | 'district' | 'upazila' | 'union' | 'pourosova' | 'cityCorporation'> | 'division' | 'district' | 'upazila' | 'union' | 'pourosova' | 'cityCorporation'): {
|
|
59
|
-
location: vue.ComputedRef<
|
|
59
|
+
location: vue.ComputedRef<Division | District | Upazila | Union | CityCorporation | null>;
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
export { CityCorporation, District, Division, Pourosova, Union, Upazila, useCityCorporations, useDistricts, useDivisions, useLocationById, usePourosovas, useSearch, useUnions, useUpazilas };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bd-geo-location",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Bangladesh geographical location data - Divisions, Districts, Upazilas/Thanas, Unions, Pourosovas, and Villages",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -113,6 +113,5 @@
|
|
|
113
113
|
"react-native": {
|
|
114
114
|
"optional": true
|
|
115
115
|
}
|
|
116
|
-
}
|
|
117
|
-
"readme": "# BD Geo Location\n\n> 🇧🇩 Complete geographical location data for Bangladesh with multi-platform support\n\nA comprehensive TypeScript package for Bangladesh's geographical administrative divisions. This package provides complete hierarchical data for Divisions, Districts, Upazilas/Thanas, City Corporations, Unions, Pourosovas, and Villages.\n\n## ✅ Production Ready\n\n**Status**: All platforms tested and verified production-ready\n\n- ✅ React (Web)\n- ✅ Vue (Web)\n- ✅ Angular (Web)\n- ✅ React Native (Mobile)\n- ✅ Flutter (Mobile)\n- ✅ iOS/macOS (Native)\n\n[📖 View Production Readiness Report](./generated/FINAL_PRODUCTION_READINESS.md)\n\n---\n\n## 🚀 Quick Start\n\n### React\n\n```bash\nnpm install bd-geo-location\n```\n\n```tsx\nimport { useDivisions, useDistricts } from 'bd-geo-location/react';\n\nfunction App() {\n const divisions = useDivisions();\n const [divisionId, setDivisionId] = useState(null);\n const districts = useDistricts(divisionId);\n\n return <YourLocationSelector divisions={divisions} districts={districts} />;\n}\n```\n\n### Vue\n\n```bash\nnpm install bd-geo-location\n```\n\n```vue\n<script setup>\nimport { useDivisions, useDistricts } from 'bd-geo-location/vue';\n\nconst { divisions } = useDivisions();\nconst divisionId = ref(null);\nconst { districts } = useDistricts(divisionId);\n</script>\n```\n\n### Flutter\n\n```bash\n# Generate Dart code\nnpm run generate:dart\n\n# Copy to your Flutter project\ncp -r generated/flutter/lib/models/* your_flutter_project/lib/models/\n```\n\n```dart\nimport 'package:bd_geo_location/models/models.dart';\n\nfinal geoData = BangladeshGeoData.fromJson(jsonData);\nfinal districts = geoData.getDistrictsByDivision('30');\n```\n\n### iOS/macOS (Swift)\n\n```bash\n# Generate Swift code\nnpm run generate:swift\n\n# Add to Xcode project\ncp -r generated/ios/Sources your_project/\n```\n\n```swift\nimport BdGeoLocation\n\nlet geoData = try BangladeshGeoData.load(from: jsonData)\nlet districts = geoData.getDistricts(divisionId: \"30\")\n```\n\n[📖 Full Installation Guide](./docs/INSTALLATION.md) | [⚡ Quick Start Guide](./docs/QUICK_START.md)\n\n---\n\n## Features\n\n- **Complete data for Bangladesh**: 8 Divisions, 68 Districts, 531 Upazilas, 4,916 Unions\n- **JSON-based data format** - Easy to edit and extend without recompiling\n- **JSON Schema validation** - Ensures data integrity\n- **TypeScript support** with full type definitions\n- **Framework-specific integrations**:\n - React Hooks\n - Vue 3 Composables\n - React Native components\n - Angular compatible\n- **Platform-specific code generators**:\n - Flutter (Dart models)\n - iOS/macOS (Swift models)\n- **Support for both English and Bengali names**\n- **Tree-shakeable and optimized bundle size**\n- **ES Modules and CommonJS support**\n- **Production-ready with security best practices**\n\n## Data Coverage\n\n| Division | Districts | Upazilas | Unions |\n|----------|-----------|----------|--------|\n| Barisal | 6 | 42 | 355 |\n| Chittagong | 12 | 117 | 1,052 |\n| Dhaka | 16 | 112 | 1,142 |\n| Khulna | 10 | 59 | 580 |\n| Mymensingh | 4 | 35 | 351 |\n| Rajshahi | 8 | 67 | 567 |\n| Rangpur | 8 | 58 | 533 |\n| Sylhet | 4 | 41 | 336 |\n| **Total** | **68** | **531** | **4,916** |\n\n## Working with JSON Data\n\nThe package data is stored in JSON format, making it easy to:\n\n1. **View and edit directly** - No TypeScript compilation needed\n2. **Validate easily** - Use any JSON validator\n3. **Extend data** - Add new divisions, districts, upazilas, etc.\n4. **Import from other sources** - Convert CSV, Excel, or other formats to JSON\n\n### Access Raw JSON Data\n\nYou can import the raw JSON data directly:\n\n```typescript\nimport bangladeshData from 'bd-geo-location/dist/data/bangladesh.json';\n\nconsole.log(bangladeshData.divisions);\n// [\n// { id: '30', name: 'Dhaka', nameBn: 'ঢাকা', districts: [...] },\n// { id: '20', name: 'Chittagong', nameBn: 'চট্টগ্রাম', districts: [...] },\n// ...\n// ]\n```\n\n### Custom Data Processing\n\n```typescript\nimport bangladeshData from 'bd-geo-location/dist/data/bangladesh.json';\n\n// Count all districts\nconst totalDistricts = bangladeshData.divisions.reduce((sum, division) => {\n return sum + (division.districts?.length || 0);\n}, 0);\n\n// Get all upazilas in a division\nfunction getAllUpazilasInDivision(divisionId: string) {\n const division = bangladeshData.divisions.find(d => d.id === divisionId);\n const upazilas = [];\n\n division?.districts?.forEach(district => {\n if (district.upazilas) {\n upazilas.push(...district.upazilas);\n }\n });\n\n return upazilas;\n}\n```\n\nFor more details on the JSON structure and how to extend it, see [DATA_STRUCTURE.md](./DATA_STRUCTURE.md).\n\n## Data Validation\n\nThe package includes JSON Schema validation to ensure data integrity:\n\n```bash\n# Validate the JSON data\nnpm run data:validate\n\n# Test the data\nnpm run data:test\n```\n\n## 📚 Documentation\n\n| Document | Description |\n|----------|-------------|\n| [Installation Guide](./docs/INSTALLATION.md) | Complete setup instructions for all platforms |\n| [Usage Guide](./docs/USAGE_GUIDE.md) | Comprehensive usage examples and patterns |\n| [Quick Start Guide](./docs/QUICK_START.md) | Get started in 5 minutes |\n| [Production Readiness](./generated/FINAL_PRODUCTION_READINESS.md) | Full verification and security report |\n\n---\n\n## 📦 Installation\n\n### npm Package (JavaScript/TypeScript Frameworks)\n\n```bash\nnpm install bd-geo-location\n# or\nyarn add bd-geo-location\n# or\npnpm add bd-geo-location\n```\n\n**Framework-specific imports**:\n\n```typescript\n// React\nimport { useDivisions } from 'bd-geo-location/react';\n\n// Vue\nimport { useDivisions } from 'bd-geo-location/vue';\n\n// Angular/Vanilla TypeScript\nimport { getAllDivisions } from 'bd-geo-location';\n\n// React Native\nimport { LocationSelector } from 'bd-geo-location/react-native';\n```\n\n### Platform Code Generators\n\nGenerate platform-specific code:\n\n```bash\n# Flutter (Dart)\nnpm run generate:dart\n\n# iOS/macOS (Swift)\nnpm run generate:swift\n\n# React Native components\nnpm run generate:react-native\n\n# All platforms\nnpm run generate:all\n```\n\n[📖 Detailed Installation Guide](./docs/INSTALLATION.md)\n\n## Data Hierarchy\n\n```\nDivision (বিভাগ)\n └── District (জেলা)\n ├── City Corporation (সিটি কর্পোরেশন)\n │ └── Thana\n └── Upazila/Thana (উপজেলা/থানা)\n ├── Union (ইউনিয়ন)\n │ └── Village (গ্রাম)\n └── Pourosova (পৌরসভা)\n └── Village (গ্রাম)\n```\n\n## 💻 Basic Usage\n\n### TypeScript/JavaScript (Vanilla, Angular)\n\n```typescript\nimport {\n getAllDivisions,\n getDistrictsByDivision,\n searchByName\n} from 'bd-geo-location';\n\n// Get all divisions\nconst divisions = getAllDivisions();\n\n// Get districts by division ID\nconst dhakaDistricts = getDistrictsByDivision('30');\n\n// Search locations\nconst results = searchByName('Dhaka');\n```\n\n### React\n\n```tsx\nimport { useDivisions, useDistricts } from 'bd-geo-location/react';\n\nfunction LocationSelector() {\n const divisions = useDivisions();\n const [divisionId, setDivisionId] = useState(null);\n const districts = useDistricts(divisionId);\n\n return (\n <div>\n <select onChange={(e) => setDivisionId(e.target.value)}>\n {divisions.map(d => (\n <option key={d.id} value={d.id}>{d.name}</option>\n ))}\n </select>\n <select>\n {districts.map(d => (\n <option key={d.id} value={d.id}>{d.name}</option>\n ))}\n </select>\n </div>\n );\n}\n```\n\n### Vue 3\n\n```vue\n<script setup>\nimport { useDivisions, useDistricts } from 'bd-geo-location/vue';\n\nconst { divisions } = useDivisions();\nconst divisionId = ref(null);\nconst { districts } = useDistricts(divisionId);\n</script>\n\n<template>\n <select v-model=\"divisionId\">\n <option v-for=\"d in divisions\" :key=\"d.id\" :value=\"d.id\">\n {{ d.name }}\n </option>\n </select>\n</template>\n```\n\n### React Native\n\n```tsx\nimport { LocationSelector } from 'bd-geo-location/react-native';\n\n<LocationSelector\n onLocationChange={(location) => console.log(location)}\n showUnion={true}\n/>\n```\n\n### Flutter\n\n```dart\nimport 'package:bd_geo_location/models/models.dart';\n\nfinal geoData = BangladeshGeoData.fromJson(jsonData);\nfinal divisions = geoData.getAllDivisions();\nfinal dhakaDistricts = geoData.getDistrictsByDivision('30');\n```\n\n### iOS/macOS (Swift)\n\n```swift\nimport BdGeoLocation\n\nlet geoData = try BangladeshGeoData.load(from: jsonData)\nlet divisions = geoData.getAllDivisions()\nlet dhakaDistricts = geoData.getDistricts(divisionId: \"30\")\n```\n\n[📖 Full Usage Guide](./docs/USAGE_GUIDE.md)\n\n### React\n\n```tsx\nimport {\n useDivisions,\n useDistricts,\n useUpazilas,\n useUnions,\n useSearch\n} from 'bd-geo-location/react';\n\nfunction LocationSelector() {\n const divisions = useDivisions();\n const [selectedDivision, setSelectedDivision] = useState(null);\n const districts = useDistricts(selectedDivision);\n\n return (\n <div>\n <select onChange={(e) => setSelectedDivision(e.target.value)}>\n <option value=\"\">Select Division</option>\n {divisions.map(division => (\n <option key={division.id} value={division.id}>\n {division.name} ({division.nameBn})\n </option>\n ))}\n </select>\n\n <select>\n <option value=\"\">Select District</option>\n {districts.map(district => (\n <option key={district.id} value={district.id}>\n {district.name} ({district.nameBn})\n </option>\n ))}\n </select>\n </div>\n );\n}\n\n// Search example\nfunction SearchComponent() {\n const [searchTerm, setSearchTerm] = useState('');\n const results = useSearch(searchTerm);\n\n return (\n <div>\n <input\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder=\"Search locations...\"\n />\n\n <div>\n <h3>Divisions</h3>\n {results.divisions.map(division => (\n <div key={division.id}>{division.name}</div>\n ))}\n\n <h3>Districts</h3>\n {results.districts.map(district => (\n <div key={district.id}>{district.name}</div>\n ))}\n </div>\n </div>\n );\n}\n```\n\n### Vue 3\n\n```vue\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport {\n useDivisions,\n useDistricts,\n useUpazilas,\n useSearch\n} from 'bd-geo-location/vue';\n\nconst selectedDivision = ref(null);\nconst { divisions } = useDivisions();\nconst { districts } = useDistricts(selectedDivision);\nconst searchTerm = ref('');\nconst { results } = useSearch(searchTerm);\n</script>\n\n<template>\n <div>\n <select v-model=\"selectedDivision\">\n <option value=\"\">Select Division</option>\n <option v-for=\"division in divisions\" :key=\"division.id\" :value=\"division.id\">\n {{ division.name }} ({{ division.nameBn }})\n </option>\n </select>\n\n <select>\n <option value=\"\">Select District</option>\n <option v-for=\"district in districts\" :key=\"district.id\" :value=\"district.id\">\n {{ district.name }} ({{ district.nameBn }})\n </option>\n </select>\n\n <!-- Search -->\n <input v-model=\"searchTerm\" type=\"text\" placeholder=\"Search locations...\" />\n\n <div>\n <h3>Search Results</h3>\n <div v-for=\"division in results.divisions\" :key=\"division.id\">\n {{ division.name }}\n </div>\n </div>\n </div>\n</template>\n```\n\n### Angular\n\n```typescript\nimport { Component } from '@angular/core';\nimport {\n getAllDivisions,\n getDistrictsByDivision\n} from 'bd-geo-location';\n\n@Component({\n selector: 'app-location',\n template: `\n <select (change)=\"onDivisionChange($event)\">\n <option value=\"\">Select Division</option>\n <option *ngFor=\"let division of divisions\" [value]=\"division.id\">\n {{ division.name }} ({{ division.nameBn }})\n </option>\n </select>\n\n <select>\n <option value=\"\">Select District</option>\n <option *ngFor=\"let district of districts\" [value]=\"district.id\">\n {{ district.name }} ({{ district.nameBn }})\n </option>\n </select>\n `\n})\nexport class LocationComponent {\n divisions = getAllDivisions();\n districts: any[] = [];\n\n onDivisionChange(event: any) {\n const divisionId = event.target.value;\n this.districts = getDistrictsByDivision(divisionId);\n }\n}\n```\n\n### React Native\n\n```tsx\nimport React, { useState } from 'react';\nimport { View, Picker, Text } from 'react-native';\nimport { useDivisions, useDistricts } from 'bd-geo-location/react';\n\nfunction LocationScreen() {\n const divisions = useDivisions();\n const [selectedDivision, setSelectedDivision] = useState(null);\n const districts = useDistricts(selectedDivision);\n\n return (\n <View>\n <Picker\n selectedValue={selectedDivision}\n onValueChange={(itemValue) => setSelectedDivision(itemValue)}\n >\n <Picker.Item label=\"Select Division\" value=\"\" />\n {divisions.map(division => (\n <Picker.Item\n key={division.id}\n label={`${division.name} (${division.nameBn})`}\n value={division.id}\n />\n ))}\n </Picker>\n\n <Picker>\n <Picker.Item label=\"Select District\" value=\"\" />\n {districts.map(district => (\n <Picker.Item\n key={district.id}\n label={`${district.name} (${district.nameBn})`}\n value={district.id}\n />\n ))}\n </Picker>\n </View>\n );\n}\n```\n\n## 🔧 Platform-Specific Code Generators\n\nThis package includes code generators for creating platform-specific models and components:\n\n### Flutter (Dart)\n\n```bash\nnpm run generate:dart\n```\n\nCreates:\n- Dart model classes for all geo data types\n- Helper methods for querying data\n- Files in `generated/flutter/lib/models/`\n\n### iOS/macOS (Swift)\n\n```bash\nnpm run generate:swift\n```\n\nCreates:\n- Swift structs with Codable support\n- Helper methods for querying data\n- Swift Package Manager setup\n- Files in `generated/ios/Sources/BdGeoLocation/`\n\n### React Native\n\n```bash\nnpm run generate:react-native\n```\n\nCreates:\n- Ready-to-use React Native components\n- AsyncStorage utilities for caching\n- Location selector component\n- Files in `generated/react-native/`\n\n### All Platforms\n\n```bash\nnpm run generate:all\n```\n\n[📖 Full Usage Guide](./docs/USAGE_GUIDE.md)\n\n## 📖 API Reference\n\n### Core Functions\n\n- `getAllDivisions()` - Returns all divisions\n- `getDivisionById(id: string)` - Get division by ID\n- `getDistrictsByDivision(divisionId: string)` - Get districts by division\n- `getUpazilasByDistrict(districtId: string)` - Get upazilas by district\n- `getUnionsByUpazila(upazilaId: string, districtId: string)` - Get unions by upazila\n- `getPourosovasByUpazila(upazilaId: string, districtId: string)` - Get pourosovas by upazila\n- `getCityCorporationsByDistrict(districtId: string)` - Get city corporations by district\n- `searchByName(searchTerm: string)` - Search locations by name\n- `getGeoHierarchy(locationId: string, level: string)` - Get complete hierarchy\n\n### React Hooks\n\n- `useDivisions()` - Get all divisions\n- `useDistricts(divisionId)` - Get districts by division ID\n- `useUpazilas(districtId, divisionId)` - Get upazilas by district ID\n- `useUnions(upazilaId, districtId, divisionId)` - Get unions by upazila ID\n- `usePourosovas(upazilaId, districtId, divisionId)` - Get pourosovas by upazila ID\n- `useCityCorporations(districtId, divisionId)` - Get city corporations by district ID\n- `useSearch(searchTerm)` - Search locations by name\n- `useLocationById(id, type)` - Get location by ID and type\n\n### Vue Composables\n\nSame as React hooks but return reactive objects:\n\n```typescript\nconst { divisions } = useDivisions();\nconst { districts } = useDistricts(divisionId);\n```\n\n## Types\n\n```typescript\ninterface Village {\n id: string;\n name: string;\n nameBn: string;\n}\n\ninterface Union {\n id: string;\n name: string;\n nameBn: string;\n villages?: Village[];\n}\n\ninterface Pourosova {\n id: string;\n name: string;\n nameBn: string;\n villages?: Village[];\n}\n\ninterface Upazila {\n id: string;\n name: string;\n nameBn: string;\n unions?: Union[];\n pourosovas?: Pourosova[];\n}\n\ninterface CityCorporation {\n id: string;\n name: string;\n nameBn: string;\n thanas?: Upazila[];\n}\n\ninterface District {\n id: string;\n name: string;\n nameBn: string;\n upazilas?: Upazila[];\n cityCorporations?: CityCorporation[];\n}\n\ninterface Division {\n id: string;\n name: string;\n nameBn: string;\n districts?: District[];\n}\n```\n\n## 🔒 Security\n\nAll platforms include security best practices:\n\n- ✅ Input validation and sanitization\n- ✅ DoS protection (search terms limited to 100 characters)\n- ✅ Type-safe operations\n- ✅ Safe error handling\n- ✅ No unsafe type casting\n\n[📖 Security Analysis Report](./generated/SECURITY_ANALYSIS.md)\n\n---\n\n## 📊 Platform Support Matrix\n\n| Platform | Status | Documentation |\n|----------|--------|---------------|\n| **React** | ✅ Production Ready | [React Guide](./docs/USAGE_GUIDE.md#react-hooks) |\n| **Vue** | ✅ Production Ready | [Vue Guide](./docs/USAGE_GUIDE.md#vue-composables) |\n| **Angular** | ✅ Production Ready | [Angular Guide](./docs/USAGE_GUIDE.md#angular-services) |\n| **React Native** | ✅ Production Ready | [React Native Guide](./docs/USAGE_GUIDE.md#react-native-components) |\n| **Flutter** | ✅ Production Ready | [Flutter Guide](./docs/USAGE_GUIDE.md#flutter-dart) |\n| **iOS** | ✅ Production Ready | [iOS Guide](./docs/USAGE_GUIDE.md#iosmacos-swift) |\n| **macOS** | ✅ Production Ready | [iOS Guide](./docs/USAGE_GUIDE.md#iosmacos-swift) |\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Submit a pull request\n\n---\n\n## 📄 License\n\nMIT © [Mazharul Islam](https://github.com/mazharvai007)\n\n---\n\n## 📞 Support\n\n- 📖 [Documentation](./docs/)\n- 🐛 [Issues](https://github.com/mazharvai007/bd-geo-location/issues)\n- 💬 [Discussions](https://github.com/mazharvai007/bd-geo-location/discussions)\n\n---\n\n**Made with ❤️ for Bangladesh 🇧🇩**\n"
|
|
116
|
+
}
|
|
118
117
|
}
|