Files
Laca-City/backend/node_modules/libphonenumber-js/source/isPossible.js
PhongPham c65cc97a33 🎯 MapView v2.0 - Global Deployment Ready
 MAJOR FEATURES:
• Auto-zoom intelligence với smart bounds fitting
• Enhanced 3D GPS markers với pulsing effects
• Professional route display với 6-layer rendering
• Status-based parking icons với availability indicators
• Production-ready build optimizations

🗺️ AUTO-ZOOM FEATURES:
• Smart bounds fitting cho GPS + selected parking
• Adaptive padding (50px) cho visual balance
• Max zoom control (level 16) để tránh quá gần
• Dynamic centering khi không có selection

🎨 ENHANCED VISUALS:
• 3D GPS marker với multi-layer pulse effects
• Advanced parking icons với status colors
• Selection highlighting với animation
• Dimming system cho non-selected items

🛣️ ROUTE SYSTEM:
• OpenRouteService API integration
• Multi-layer route rendering (glow, shadow, main, animated)
• Real-time distance & duration calculation
• Visual route info trong popup

📱 PRODUCTION READY:
• SSR safe với dynamic imports
• Build errors resolved
• Global deployment via Vercel
• Optimized performance

🌍 DEPLOYMENT:
• Vercel: https://whatever-ctk2auuxr-phong12hexdockworks-projects.vercel.app
• Bundle size: 22.8 kB optimized
• Global CDN distribution
• HTTPS enabled

💾 VERSION CONTROL:
• MapView-v2.0.tsx backup created
• MAPVIEW_VERSIONS.md documentation
• Full version history tracking
2025-07-20 19:52:16 +07:00

78 lines
2.8 KiB
JavaScript

import Metadata from './metadata.js'
import checkNumberLength from './helpers/checkNumberLength.js'
/**
* Checks if a phone number is "possible" (basically just checks its length).
*
* isPossible(phoneNumberInstance, { ..., v2: true }, metadata)
*
* isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)
* isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)
*
* @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.
* @param {object} [options]
* @param {object} metadata
* @return {string}
*/
export default function isPossiblePhoneNumber(input, options, metadata) {
/* istanbul ignore if */
if (options === undefined) {
options = {}
}
metadata = new Metadata(metadata)
if (options.v2) {
if (!input.countryCallingCode) {
throw new Error('Invalid phone number object passed')
}
metadata.selectNumberingPlan(input.countryCallingCode)
} else {
if (!input.phone) {
return false
}
if (input.country) {
if (!metadata.hasCountry(input.country)) {
throw new Error(`Unknown country: ${input.country}`)
}
metadata.country(input.country)
} else {
if (!input.countryCallingCode) {
throw new Error('Invalid phone number object passed')
}
metadata.selectNumberingPlan(input.countryCallingCode)
}
}
// Old metadata (< 1.0.18) had no "possible length" data.
if (metadata.possibleLengths()) {
return isPossibleNumber(input.phone || input.nationalNumber, metadata)
} else {
// There was a bug between `1.7.35` and `1.7.37` where "possible_lengths"
// were missing for "non-geographical" numbering plans.
// Just assume the number is possible in such cases:
// it's unlikely that anyone generated their custom metadata
// in that short period of time (one day).
// This code can be removed in some future major version update.
if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {
// "Non-geographic entities" did't have `possibleLengths`
// due to a bug in metadata generation process.
return true
} else {
throw new Error('Missing "possibleLengths" in metadata. Perhaps the metadata has been generated before v1.0.18.');
}
}
}
export function isPossibleNumber(nationalNumber, metadata) { //, isInternational) {
switch (checkNumberLength(nationalNumber, metadata)) {
case 'IS_POSSIBLE':
return true
// This library ignores "local-only" phone numbers (for simplicity).
// See the readme for more info on what are "local-only" phone numbers.
// case 'IS_POSSIBLE_LOCAL_ONLY':
// return !isInternational
default:
return false
}
}