@tomtom-org/maps-sdk 0.41.1 → 0.41.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/README.md +6 -6
- package/core/dist/THIRD_PARTY.txt +1 -1
- package/core/dist/core.es.js +1 -1
- package/core/dist/core.es.js.map +1 -1
- package/core/package.json +0 -3
- package/map/dist/THIRD_PARTY.txt +5 -5
- package/map/dist/index.d.ts +156 -10
- package/map/dist/map.es.js +1 -1
- package/map/dist/map.es.js.map +1 -1
- package/map/package.json +2 -4
- package/package.json +7 -5
- package/services/dist/THIRD_PARTY.txt +2 -2
- package/services/dist/services.es.js +1 -1
- package/services/dist/services.es.js.map +1 -1
- package/services/package.json +1 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.es.js","sources":["../src/shared/types/apiResponseErrorTypes.ts","../src/shared/errors.ts","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/core.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/util.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/errors.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/versions.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/registries.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js","../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/mini/schemas.js","../src/shared/schema/commonParamsSchema.ts","../src/shared/schema/validation.ts","../src/shared/serviceTemplate.ts","../src/shared/fetch.ts","../src/shared/schema/geometriesSchema.ts","../src/autocomplete-search/autocompleteSearchRequestSchema.ts","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_freeGlobal.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_root.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_Symbol.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getRawTag.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_objectToString.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseGetTag.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isObjectLike.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isSymbol.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_arrayMap.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isArray.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseToString.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isObject.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isFunction.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_coreJsData.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_isMasked.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_toSource.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseIsNative.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getNative.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getValue.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_WeakMap.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_shortOut.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_defineProperty.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseSetToString.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/constant.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/identity.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_setToString.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_isIndex.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseAssignValue.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/eq.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_assignValue.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_overRest.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isLength.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_isPrototype.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseIsArguments.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isArguments.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isBuffer.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/stubFalse.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseIsTypedArray.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseUnary.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_nodeUtil.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isTypedArray.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_arrayLikeKeys.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseTimes.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseKeysIn.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_nativeKeysIn.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/keysIn.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isArrayLike.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_isKey.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_nativeCreate.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_hashGet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_hashHas.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_Hash.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_assocIndexOf.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_hashClear.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_hashDelete.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_hashSet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_listCacheDelete.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_ListCache.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_listCacheClear.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_listCacheGet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_listCacheHas.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_listCacheSet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_Map.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getMapData.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_isKeyable.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_MapCache.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_mapCacheClear.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_mapCacheDelete.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_mapCacheGet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_mapCacheHas.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_mapCacheSet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/memoize.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_stringToPath.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_memoizeCapped.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_castPath.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/toString.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_toKey.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_arrayPush.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_isFlattenable.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/flatten.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseFlatten.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getPrototype.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_overArg.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isPlainObject.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_Stack.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_stackClear.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_stackDelete.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_stackGet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_stackHas.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_stackSet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_cloneBuffer.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/stubArray.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getSymbols.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_arrayFilter.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getSymbolsIn.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getAllKeysIn.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseGetAllKeys.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_DataView.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_Promise.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_Set.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_getTag.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_initCloneArray.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_Uint8Array.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_cloneArrayBuffer.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_cloneRegExp.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_cloneSymbol.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_initCloneByTag.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_cloneDataView.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_cloneTypedArray.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isMap.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseIsMap.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isSet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseIsSet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseClone.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_arrayEach.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_parent.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseGet.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseSlice.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/isNil.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_baseUnset.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/last.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_customOmitClone.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/omit.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_flatRest.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_apply.js","../../node_modules/.pnpm/lodash-es@4.17.22/node_modules/lodash-es/_copyObject.js","../src/shared/request/requestBuildingUtils.ts","../src/shared/request/commonSearchRequestBuilder.ts","../src/autocomplete-search/requestBuilder.ts","../src/shared/geometry.ts","../src/autocomplete-search/responseParser.ts","../src/autocomplete-search/autocompleteSearchTemplate.ts","../src/autocomplete-search/autocompleteSearch.ts","../src/autocomplete-search/customize.ts","../src/ev-charging-stations-availability/requestBuilder.ts","../src/shared/ev.ts","../src/ev-charging-stations-availability/connectorAvailability.ts","../src/shared/searchResultParsing.ts","../src/ev-charging-stations-availability/responseParser.ts","../src/ev-charging-stations-availability/evChargingStationsAvailabilityTemplate.ts","../src/ev-charging-stations-availability/evChargingStationsAvailabilityRequestSchema.ts","../src/ev-charging-stations-availability/evChargingStationsAvailabilityResponseErrorParser.ts","../src/ev-charging-stations-availability/customize.ts","../src/shared/schema/commonGeocodeAndFuzzySearchParamsSchema.ts","../src/shared/schema/commonPlacesParamsSchema.ts","../src/geocode/geocodingRequestSchema.ts","../src/shared/arrays.ts","../src/geocode/requestBuilder.ts","../src/geocode/responseParser.ts","../src/geocode/geocodingTemplate.ts","../src/geocode/customize.ts","../src/geometry-data/geometryDataRequestSchema.ts","../src/geometry-data/requestBuilder.ts","../src/geometry-data/responseParser.ts","../src/geometry-data/geometryDataTemplate.ts","../src/geometry-data/customize.ts","../src/search/commonSearchParamsSchema.ts","../src/geometry-search/geometrySearchRequestSchema.ts","../src/geometry-search/requestBuilder.ts","../src/geometry-search/responseParser.ts","../src/geometry-search/geometrySearchTemplate.ts","../src/geometry-search/geometrySearch.ts","../src/geometry-search/customize.ts","../src/place-by-id/placeByIdSchema.ts","../src/place-by-id/requestBuilder.ts","../src/place-by-id/responseParser.ts","../src/place-by-id/placeByIdTemplate.ts","../src/place-by-id/customize.ts","../src/shared/types/commonRoutingParams.ts","../src/shared/types/vehicleRestrictionParams.ts","../src/shared/schema/vehicleParamsSchema.ts","../src/shared/schema/commonRoutingRequestSchema.ts","../src/reachable-range/reachableRangeRequestSchema.ts","../src/reachable-range/types/reachableRangeParams.ts","../src/shared/request/routingVehicleParamsBuilder.ts","../src/shared/request/commonRoutingRequestBuilder.ts","../src/reachable-range/requestBuilder.ts","../src/reachable-range/responseParser.ts","../src/reachable-range/customize.ts","../src/reachable-range/reachableRangeTemplate.ts","../src/revgeo/requestBuilder.ts","../src/revgeo/responseParser.ts","../src/revgeo/reverseGeocodingTemplate.ts","../src/revgeo/revGeocodeRequestSchema.ts","../src/revgeo/customize.ts","../src/routing/calculateRouteRequestSchema.ts","../src/routing/requestBuilder.ts","../src/routing/responseParser.ts","../src/routing/calculateRouteTemplate.ts","../src/routing/routingResponseErrorParser.ts","../src/customize/index.ts","../src/routing/customize.ts","../src/ev-charging-stations-availability/evChargingStationsAvailability.ts","../src/geocode/geocoding.ts","../src/geometry-data/geometryData.ts","../src/place-by-id/placeById.ts","../src/revgeo/reverseGeocoding.ts","../src/routing/calculateRoute.ts","../src/fuzzy-search/fuzzySearchRequestSchema.ts","../src/fuzzy-search/responseParser.ts","../src/fuzzy-search/fuzzySearchTemplate.ts","../src/fuzzy-search/requestBuilder.ts","../src/search/search.ts","../src/fuzzy-search/fuzzySearch.ts"],"sourcesContent":["/**\n * @ignore\n */\nexport interface BaseAPIResponseErrorBody {\n /*\n * HTTP error code.\n */\n httpStatusCode: number;\n /*\n * Detailed information about the error.\n */\n detailedError: {\n /*\n * One of the defined error codes.\n */\n code: string;\n /*\n * A human-readable representation of the error code.\n */\n message: string;\n /*\n * Target of the particular error.\n * Value: The name of the request parameter.\n */\n target: string;\n };\n}\n\n/**\n * @ignore\n */\nexport interface DefaultAPIResponseErrorBody extends BaseAPIResponseErrorBody {\n /*\n * A human-readable description of the error code.\n */\n error?: string;\n errorText?: string;\n}\n\n/**\n * @ignore\n */\nexport interface RoutingAPIResponseError {\n /*\n * \tThe format version\n */\n formatVersion: string;\n error: {\n /*\n * A human-readable representation of the error code.\n */\n description: string;\n };\n detailedError: {\n /*\n * A human-readable representation of the error code.\n */\n message: string;\n /*\n * One of the defined error codes.\n */\n code: string;\n };\n}\n\n/**\n * Error returned by an API.\n * @ignore\n */\nexport type APIErrorResponse<T = DefaultAPIResponseErrorBody> = {\n status?: number;\n message: string;\n data?: T;\n};\n\n/**\n * @ignore\n */\nexport enum APICode {\n TOO_MANY_REQUESTS = 429,\n FORBIDDEN = 403,\n}\n","import { $ZodIssue } from 'zod/v4/core';\nimport type { ValidationError } from './schema/validation';\nimport type { ParseResponseError } from './serviceTypes';\nimport type { APIErrorResponse, DefaultAPIResponseErrorBody } from './types/apiResponseErrorTypes';\nimport { APICode } from './types/apiResponseErrorTypes';\nimport type { ServiceName } from './types/servicesTypes';\n\n/**\n * Base error class for all SDK-related errors.\n *\n * The SDK handles two distinct categories of errors:\n * 1. **Programming errors**: Configuration or usage errors in the user's application,\n * such as passing incorrect types to parameters or functions.\n * 2. **API errors**: Recoverable errors that occur during SDK operations,\n * such as network failures or invalid API responses.\n *\n * @example\n * ```typescript\n * try {\n * // SDK operation\n * } catch (error) {\n * if (error instanceof SDKError) {\n * console.error(`Error in ${error.service}: ${error.message}`);\n * }\n * }\n * ```\n *\n * @group Errors\n */\nexport class SDKError extends Error {\n /**\n * Creates a new SDKError instance.\n *\n * @param message - Human-readable error description\n * @param service - Name of the service where the error occurred\n * @param issues - Optional array of Zod validation issues for detailed error information\n */\n constructor(\n message: string,\n readonly service: string,\n readonly issues?: $ZodIssue[],\n ) {\n super(message);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SDKError);\n }\n }\n}\n\n/**\n * Mapping of API error codes to human-readable error messages.\n *\n * Provides standardized error messages for common API response codes,\n * ensuring consistent error handling across the SDK.\n *\n * @group Errors\n */\nexport const APIErrorCode: { readonly [K in APICode as number]: string } = {\n [APICode.TOO_MANY_REQUESTS]: 'Too Many Requests: The API Key is over QPS (Queries per second)',\n [APICode.FORBIDDEN]: 'Request failed with status code 403',\n};\n\n/**\n * Error class for HTTP API response errors.\n *\n * Extends {@link SDKError} to include HTTP status codes and automatically\n * maps known error codes to user-friendly messages using {@link APIErrorCode}.\n *\n * @example\n * ```typescript\n * throw new SDKServiceError('Invalid request', 'geocoding', 400);\n * ```\n *\n * @group Errors\n */\nexport class SDKServiceError extends SDKError {\n /**\n * HTTP status code of the failed API request.\n *\n * Common values:\n * - `400`: Bad Request\n * - `403`: Forbidden\n * - `429`: Too Many Requests\n * - `500`: Internal Server Error\n */\n status?: number;\n\n /**\n * Creates a new SDKServiceError instance.\n *\n * If the status code matches a known error in {@link APIErrorCode},\n * the message will be automatically replaced with the standardized message.\n *\n * @param message - Error message from the API or custom message\n * @param service - Name of the service that generated the error\n * @param status - HTTP status code of the failed request\n */\n constructor(message: string, service: string, status?: number) {\n super(message, service);\n this.status = status;\n\n /*\n * We use as message what returns from API if any, otherwise we have our APIErrorCode as a fallback\n * Check if there is a status and if the status exists in the mapped API error types\n */\n if (this.status && APIErrorCode[this.status]) {\n this.message = APIErrorCode[this.status];\n }\n }\n}\n\n/**\n * @ignore\n * @param error\n * @param serviceName\n */\nexport const parseDefaultResponseError: ParseResponseError<DefaultAPIResponseErrorBody> = (error, serviceName) => {\n const { data, message, status } = error;\n // Different services uses property error or errorText or detailedError\n // Here we cover all situations as a default error parser\n const errorMessage = data?.error || data?.errorText || message;\n return new SDKServiceError(errorMessage, serviceName, status);\n};\n\n/**\n * @ignore\n * Generate error for APIResponse, any other error type will be returned as it is.\n * @param error The error captured by a catch function.\n * @param serviceName The name of the service.\n * @param parseResponseError\n */\nexport const buildResponseError = (\n error: unknown,\n serviceName: ServiceName,\n parseResponseError?: ParseResponseError<unknown>,\n): SDKError => {\n if ((error as APIErrorResponse).status) {\n const fetchError = error as APIErrorResponse;\n if (parseResponseError) {\n return parseResponseError(fetchError, serviceName);\n }\n return parseDefaultResponseError(fetchError, serviceName);\n }\n\n return new SDKError((error as Error).message, serviceName);\n};\n\n/**\n * @ignore\n * @param error\n * @param serviceName\n */\nexport const buildValidationError = (error: ValidationError, serviceName: ServiceName): SDKError =>\n new SDKError(error.message, serviceName, error.issues);\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export const version = {\n major: 4,\n minor: 3,\n patch: 5,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key failed with \"expected number\", retry with Number(key)\n const checkNumericKey = typeof key === \"string\" &&\n regexes.number.test(key) &&\n keyResult.issues.length &&\n keyResult.issues.some((iss) => iss.code === \"invalid_type\" && iss.expected === \"number\");\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import * as core from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodMiniType = /*@__PURE__*/ core.$constructor(\"ZodMiniType\", (inst, def) => {\n if (!inst._zod)\n throw new Error(\"Uninitialized schema in ZodMiniType.\");\n core.$ZodType.init(inst, def);\n inst.def = def;\n inst.type = def.type;\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.check = (...checks) => {\n return inst.clone({\n ...def,\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }, { parent: true });\n };\n inst.with = inst.check;\n inst.clone = (_def, params) => core.clone(inst, _def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n inst.apply = (fn) => fn(inst);\n});\nexport const ZodMiniString = /*@__PURE__*/ core.$constructor(\"ZodMiniString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function string(params) {\n return core._string(ZodMiniString, params);\n}\nexport const ZodMiniStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n ZodMiniString.init(inst, def);\n});\nexport const ZodMiniEmail = /*@__PURE__*/ core.$constructor(\"ZodMiniEmail\", (inst, def) => {\n core.$ZodEmail.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function email(params) {\n return core._email(ZodMiniEmail, params);\n}\nexport const ZodMiniGUID = /*@__PURE__*/ core.$constructor(\"ZodMiniGUID\", (inst, def) => {\n core.$ZodGUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function guid(params) {\n return core._guid(ZodMiniGUID, params);\n}\nexport const ZodMiniUUID = /*@__PURE__*/ core.$constructor(\"ZodMiniUUID\", (inst, def) => {\n core.$ZodUUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function uuid(params) {\n return core._uuid(ZodMiniUUID, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function uuidv4(params) {\n return core._uuidv4(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv6\n// @__NO_SIDE_EFFECTS__\nexport function uuidv6(params) {\n return core._uuidv6(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv7\n// @__NO_SIDE_EFFECTS__\nexport function uuidv7(params) {\n return core._uuidv7(ZodMiniUUID, params);\n}\nexport const ZodMiniURL = /*@__PURE__*/ core.$constructor(\"ZodMiniURL\", (inst, def) => {\n core.$ZodURL.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function url(params) {\n return core._url(ZodMiniURL, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function httpUrl(params) {\n return core._url(ZodMiniURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniEmoji = /*@__PURE__*/ core.$constructor(\"ZodMiniEmoji\", (inst, def) => {\n core.$ZodEmoji.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function emoji(params) {\n return core._emoji(ZodMiniEmoji, params);\n}\nexport const ZodMiniNanoID = /*@__PURE__*/ core.$constructor(\"ZodMiniNanoID\", (inst, def) => {\n core.$ZodNanoID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nanoid(params) {\n return core._nanoid(ZodMiniNanoID, params);\n}\nexport const ZodMiniCUID = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID\", (inst, def) => {\n core.$ZodCUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cuid(params) {\n return core._cuid(ZodMiniCUID, params);\n}\nexport const ZodMiniCUID2 = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID2\", (inst, def) => {\n core.$ZodCUID2.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cuid2(params) {\n return core._cuid2(ZodMiniCUID2, params);\n}\nexport const ZodMiniULID = /*@__PURE__*/ core.$constructor(\"ZodMiniULID\", (inst, def) => {\n core.$ZodULID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ulid(params) {\n return core._ulid(ZodMiniULID, params);\n}\nexport const ZodMiniXID = /*@__PURE__*/ core.$constructor(\"ZodMiniXID\", (inst, def) => {\n core.$ZodXID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function xid(params) {\n return core._xid(ZodMiniXID, params);\n}\nexport const ZodMiniKSUID = /*@__PURE__*/ core.$constructor(\"ZodMiniKSUID\", (inst, def) => {\n core.$ZodKSUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ksuid(params) {\n return core._ksuid(ZodMiniKSUID, params);\n}\nexport const ZodMiniIPv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv4\", (inst, def) => {\n core.$ZodIPv4.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ipv4(params) {\n return core._ipv4(ZodMiniIPv4, params);\n}\nexport const ZodMiniIPv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv6\", (inst, def) => {\n core.$ZodIPv6.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ipv6(params) {\n return core._ipv6(ZodMiniIPv6, params);\n}\nexport const ZodMiniCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cidrv4(params) {\n return core._cidrv4(ZodMiniCIDRv4, params);\n}\nexport const ZodMiniCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cidrv6(params) {\n return core._cidrv6(ZodMiniCIDRv6, params);\n}\nexport const ZodMiniMAC = /*@__PURE__*/ core.$constructor(\"ZodMiniMAC\", (inst, def) => {\n core.$ZodMAC.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function mac(params) {\n return core._mac(ZodMiniMAC, params);\n}\nexport const ZodMiniBase64 = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64\", (inst, def) => {\n core.$ZodBase64.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function base64(params) {\n return core._base64(ZodMiniBase64, params);\n}\nexport const ZodMiniBase64URL = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64URL\", (inst, def) => {\n core.$ZodBase64URL.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function base64url(params) {\n return core._base64url(ZodMiniBase64URL, params);\n}\nexport const ZodMiniE164 = /*@__PURE__*/ core.$constructor(\"ZodMiniE164\", (inst, def) => {\n core.$ZodE164.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function e164(params) {\n return core._e164(ZodMiniE164, params);\n}\nexport const ZodMiniJWT = /*@__PURE__*/ core.$constructor(\"ZodMiniJWT\", (inst, def) => {\n core.$ZodJWT.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function jwt(params) {\n return core._jwt(ZodMiniJWT, params);\n}\nexport const ZodMiniCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniCustomStringFormat\", (inst, def) => {\n core.$ZodCustomStringFormat.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodMiniCustomStringFormat, format, fnOrRegex, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hostname(_params) {\n return core._stringFormat(ZodMiniCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hex(_params) {\n return core._stringFormat(ZodMiniCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n // check for unrecognized format\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodMiniCustomStringFormat, format, regex, params);\n}\nexport const ZodMiniNumber = /*@__PURE__*/ core.$constructor(\"ZodMiniNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function number(params) {\n return core._number(ZodMiniNumber, params);\n}\nexport const ZodMiniNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodMiniNumber.init(inst, def);\n});\n// int\n// @__NO_SIDE_EFFECTS__\nexport function int(params) {\n return core._int(ZodMiniNumberFormat, params);\n}\n// float32\n// @__NO_SIDE_EFFECTS__\nexport function float32(params) {\n return core._float32(ZodMiniNumberFormat, params);\n}\n// float64\n// @__NO_SIDE_EFFECTS__\nexport function float64(params) {\n return core._float64(ZodMiniNumberFormat, params);\n}\n// int32\n// @__NO_SIDE_EFFECTS__\nexport function int32(params) {\n return core._int32(ZodMiniNumberFormat, params);\n}\n// uint32\n// @__NO_SIDE_EFFECTS__\nexport function uint32(params) {\n return core._uint32(ZodMiniNumberFormat, params);\n}\nexport const ZodMiniBoolean = /*@__PURE__*/ core.$constructor(\"ZodMiniBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function boolean(params) {\n return core._boolean(ZodMiniBoolean, params);\n}\nexport const ZodMiniBigInt = /*@__PURE__*/ core.$constructor(\"ZodMiniBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function bigint(params) {\n return core._bigint(ZodMiniBigInt, params);\n}\nexport const ZodMiniBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodMiniBigInt.init(inst, def);\n});\n// int64\n// @__NO_SIDE_EFFECTS__\nexport function int64(params) {\n return core._int64(ZodMiniBigIntFormat, params);\n}\n// uint64\n// @__NO_SIDE_EFFECTS__\nexport function uint64(params) {\n return core._uint64(ZodMiniBigIntFormat, params);\n}\nexport const ZodMiniSymbol = /*@__PURE__*/ core.$constructor(\"ZodMiniSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function symbol(params) {\n return core._symbol(ZodMiniSymbol, params);\n}\nexport const ZodMiniUndefined = /*@__PURE__*/ core.$constructor(\"ZodMiniUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _undefined(params) {\n return core._undefined(ZodMiniUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodMiniNull = /*@__PURE__*/ core.$constructor(\"ZodMiniNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _null(params) {\n return core._null(ZodMiniNull, params);\n}\nexport { _null as null };\nexport const ZodMiniAny = /*@__PURE__*/ core.$constructor(\"ZodMiniAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function any() {\n return core._any(ZodMiniAny);\n}\nexport const ZodMiniUnknown = /*@__PURE__*/ core.$constructor(\"ZodMiniUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function unknown() {\n return core._unknown(ZodMiniUnknown);\n}\nexport const ZodMiniNever = /*@__PURE__*/ core.$constructor(\"ZodMiniNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function never(params) {\n return core._never(ZodMiniNever, params);\n}\nexport const ZodMiniVoid = /*@__PURE__*/ core.$constructor(\"ZodMiniVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _void(params) {\n return core._void(ZodMiniVoid, params);\n}\nexport { _void as void };\nexport const ZodMiniDate = /*@__PURE__*/ core.$constructor(\"ZodMiniDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function date(params) {\n return core._date(ZodMiniDate, params);\n}\nexport const ZodMiniArray = /*@__PURE__*/ core.$constructor(\"ZodMiniArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function array(element, params) {\n return new ZodMiniArray({\n type: \"array\",\n element: element,\n ...util.normalizeParams(params),\n });\n}\n// .keyof\n// @__NO_SIDE_EFFECTS__\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodMiniObject = /*@__PURE__*/ core.$constructor(\"ZodMiniObject\", (inst, def) => {\n core.$ZodObject.init(inst, def);\n ZodMiniType.init(inst, def);\n util.defineLazy(inst, \"shape\", () => def.shape);\n});\n// @__NO_SIDE_EFFECTS__\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodMiniObject(def);\n}\n// strictObject\n// @__NO_SIDE_EFFECTS__\nexport function strictObject(shape, params) {\n return new ZodMiniObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\n// @__NO_SIDE_EFFECTS__\nexport function looseObject(shape, params) {\n return new ZodMiniObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\n// object methods\n// @__NO_SIDE_EFFECTS__\nexport function extend(schema, shape) {\n return util.extend(schema, shape);\n}\n// @__NO_SIDE_EFFECTS__\nexport function safeExtend(schema, shape) {\n return util.safeExtend(schema, shape);\n}\n// @__NO_SIDE_EFFECTS__\nexport function merge(schema, shape) {\n return util.extend(schema, shape);\n}\n// @__NO_SIDE_EFFECTS__\nexport function pick(schema, mask) {\n return util.pick(schema, mask);\n}\n// .omit\n// @__NO_SIDE_EFFECTS__\nexport function omit(schema, mask) {\n return util.omit(schema, mask);\n}\n// @__NO_SIDE_EFFECTS__\nexport function partial(schema, mask) {\n return util.partial(ZodMiniOptional, schema, mask);\n}\n// @__NO_SIDE_EFFECTS__\nexport function required(schema, mask) {\n return util.required(ZodMiniNonOptional, schema, mask);\n}\n// @__NO_SIDE_EFFECTS__\nexport function catchall(inst, catchall) {\n return inst.clone({ ...inst._zod.def, catchall: catchall });\n}\nexport const ZodMiniUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function union(options, params) {\n return new ZodMiniUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniXor = /*@__PURE__*/ core.$constructor(\"ZodMiniXor\", (inst, def) => {\n ZodMiniUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodMiniXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniDiscriminatedUnion\", (inst, def) => {\n core.$ZodDiscriminatedUnion.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function discriminatedUnion(discriminator, options, params) {\n return new ZodMiniDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniIntersection = /*@__PURE__*/ core.$constructor(\"ZodMiniIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function intersection(left, right) {\n return new ZodMiniIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodMiniTuple = /*@__PURE__*/ core.$constructor(\"ZodMiniTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodMiniTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniRecord = /*@__PURE__*/ core.$constructor(\"ZodMiniRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function record(keyType, valueType, params) {\n return new ZodMiniRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodMiniRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodMiniRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniMap = /*@__PURE__*/ core.$constructor(\"ZodMiniMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function map(keyType, valueType, params) {\n return new ZodMiniMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniSet = /*@__PURE__*/ core.$constructor(\"ZodMiniSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function set(valueType, params) {\n return new ZodMiniSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniEnum = /*@__PURE__*/ core.$constructor(\"ZodMiniEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodMiniType.init(inst, def);\n inst.options = Object.values(def.entries);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodMiniEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodMiniEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function literal(value, params) {\n return new ZodMiniLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniFile = /*@__PURE__*/ core.$constructor(\"ZodMiniFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function file(params) {\n return core._file(ZodMiniFile, params);\n}\nexport const ZodMiniTransform = /*@__PURE__*/ core.$constructor(\"ZodMiniTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function transform(fn) {\n return new ZodMiniTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodMiniOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function optional(innerType) {\n return new ZodMiniOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodMiniExactOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function exactOptional(innerType) {\n return new ZodMiniExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodMiniNullable = /*@__PURE__*/ core.$constructor(\"ZodMiniNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nullable(innerType) {\n return new ZodMiniNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\n// @__NO_SIDE_EFFECTS__\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodMiniDefault = /*@__PURE__*/ core.$constructor(\"ZodMiniDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function _default(innerType, defaultValue) {\n return new ZodMiniDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodMiniPrefault = /*@__PURE__*/ core.$constructor(\"ZodMiniPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function prefault(innerType, defaultValue) {\n return new ZodMiniPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodMiniNonOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nonoptional(innerType, params) {\n return new ZodMiniNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniSuccess = /*@__PURE__*/ core.$constructor(\"ZodMiniSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function success(innerType) {\n return new ZodMiniSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodMiniCatch = /*@__PURE__*/ core.$constructor(\"ZodMiniCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _catch(innerType, catchValue) {\n return new ZodMiniCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodMiniNaN = /*@__PURE__*/ core.$constructor(\"ZodMiniNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nan(params) {\n return core._nan(ZodMiniNaN, params);\n}\nexport const ZodMiniPipe = /*@__PURE__*/ core.$constructor(\"ZodMiniPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function pipe(in_, out) {\n return new ZodMiniPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n });\n}\nexport const ZodMiniCodec = /*@__PURE__*/ core.$constructor(\"ZodMiniCodec\", (inst, def) => {\n ZodMiniPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function codec(in_, out, params) {\n return new ZodMiniCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodMiniReadonly = /*@__PURE__*/ core.$constructor(\"ZodMiniReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function readonly(innerType) {\n return new ZodMiniReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodMiniTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function templateLiteral(parts, params) {\n return new ZodMiniTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniLazy = /*@__PURE__*/ core.$constructor(\"ZodMiniLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// export function lazy<T extends object>(getter: () => T): T {\n// return util.createTransparentProxy<T>(getter);\n// }\n// @__NO_SIDE_EFFECTS__\nfunction _lazy(getter) {\n return new ZodMiniLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport { _lazy as lazy };\nexport const ZodMiniPromise = /*@__PURE__*/ core.$constructor(\"ZodMiniPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function promise(innerType) {\n return new ZodMiniPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodMiniCustom = /*@__PURE__*/ core.$constructor(\"ZodMiniCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// custom checks\n// @__NO_SIDE_EFFECTS__\nexport function check(fn, params) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// ZodCustom\n// custom schema\n// @__NO_SIDE_EFFECTS__\nexport function custom(fn, _params) {\n return core._custom(ZodMiniCustom, fn ?? (() => true), _params);\n}\n// refine\n// @__NO_SIDE_EFFECTS__\nexport function refine(fn, _params = {}) {\n return core._refine(ZodMiniCustom, fn, _params);\n}\n// superRefine\n// @__NO_SIDE_EFFECTS__\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\n// instanceof\nclass Class {\n constructor(..._args) { }\n}\n// @__NO_SIDE_EFFECTS__\nfunction _instanceof(cls, params = {}) {\n const inst = custom((data) => data instanceof cls, params);\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodMiniCodec,\n Boolean: ZodMiniBoolean,\n String: ZodMiniString,\n}, ...args);\n// @__NO_SIDE_EFFECTS__\nexport function json() {\n const jsonSchema = _lazy(() => {\n return union([string(), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\nexport const ZodMiniFunction = /*@__PURE__*/ core.$constructor(\"ZodMiniFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function _function(params) {\n return new ZodMiniFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\n","import { z } from 'zod/v4-mini';\n\n/**\n * @ignore\n */\nexport const commonServiceRequestSchema = z.partial(\n z.object({\n apiKey: z.string(),\n commonBaseURL: z.string(),\n customServiceBaseURL: z.string(),\n language: z.string(),\n }),\n);\n","import type { $ZodError, $ZodIssue } from 'zod/v4/core';\nimport { z } from 'zod/v4-mini';\nimport type { CommonServiceParams } from '../serviceTypes';\nimport type { RequestValidationConfig } from '../types/validation';\nimport { commonServiceRequestSchema } from './commonParamsSchema';\n\n/**\n * Validate Error Class for validating params input, this will be used by SDKError class.\n * @ignore\n */\nexport class ValidationError extends Error {\n issues: $ZodIssue[];\n\n constructor(zodError: $ZodError) {\n super(z.prettifyError(zodError));\n this.issues = zodError.issues;\n }\n}\n\n/**\n * @ignore\n * @param params\n * @param config\n */\nexport const validateRequestSchema = <T extends CommonServiceParams>(\n params: T,\n config?: RequestValidationConfig,\n): T => {\n const requestSchema = config?.schema\n ? z.extend(commonServiceRequestSchema, config.schema.shape)\n : commonServiceRequestSchema;\n // If there's no schema provided, we still validate the common params:\n const mergedSchema = requestSchema.check(\n z.refine(\n (data) => 'commonBaseURL' in data || 'customServiceBaseURL' in data,\n 'commonBaseURL or customServiceBaseURL is required',\n ),\n );\n\n // Adding optional refinements:\n let refinedMergedSchema: typeof mergedSchema | undefined;\n if (config?.refinements?.length) {\n refinedMergedSchema = mergedSchema;\n for (const refinement of config.refinements) {\n refinedMergedSchema = refinedMergedSchema.check(z.refine(refinement.check, refinement.message));\n }\n }\n\n const validation = (refinedMergedSchema ?? mergedSchema).safeParse(params);\n if (!validation.success) {\n throw new ValidationError(validation.error);\n }\n\n return params;\n};\n","import { generateTomTomHeaders, mergeFromGlobal } from '@tomtom-org/maps-sdk/core';\nimport { buildResponseError, buildValidationError } from './errors';\nimport type { ValidationError } from './schema/validation';\nimport { validateRequestSchema } from './schema/validation';\nimport type { CommonServiceParams, ServiceTemplate } from './serviceTypes';\nimport type { ServiceName } from './types/servicesTypes';\n\n/**\n * @ignore\n * Template execution of a service call.\n * Any service goes through the same template steps:\n * 1- Build request\n * 2- Send request and get API response\n * 3- Parse and return API response\n * @param params The parameters for that specific service call.\n * @param template The implementation of the template steps.\n * @param serviceName The name of the service.\n */\nexport const callService = async <PARAMS extends CommonServiceParams, ApiRequest, ApiResponse, RESPONSE>(\n params: PARAMS,\n template: ServiceTemplate<PARAMS, ApiRequest, ApiResponse, RESPONSE>,\n serviceName: ServiceName,\n): Promise<RESPONSE> => {\n const customApiVersion = template.getAPIVersion?.(params);\n const mergedParams = mergeFromGlobal({ ...params, ...(customApiVersion && { apiVersion: customApiVersion }) });\n // (params.validateRequest defaults to true, thus true and undefined are the same)\n if (params.validateRequest === undefined || params.validateRequest) {\n try {\n validateRequestSchema<PARAMS>(mergedParams, template.requestValidation);\n } catch (e) {\n return Promise.reject(buildValidationError(e as ValidationError, serviceName));\n }\n }\n const apiRequest = template.buildRequest(mergedParams);\n const headers = generateTomTomHeaders(mergedParams);\n params.onAPIRequest?.(apiRequest);\n\n try {\n const apiResponse = await template.sendRequest(apiRequest, headers);\n params.onAPIResponse?.(apiRequest, apiResponse);\n return template.parseResponse(await apiResponse.data, mergedParams);\n } catch (e) {\n params.onAPIResponse?.(apiRequest, e);\n return Promise.reject(buildResponseError(e, serviceName, template.parseResponseError));\n }\n};\n","import type { TomTomHeaders } from '@tomtom-org/maps-sdk/core';\nimport type { FetchInput, ParsedFetchResponse, PostObject } from './types/fetch';\n\n/**\n * Custom error class for HTTP fetch errors.\n */\nclass FetchError extends Error {\n public readonly status: number;\n public readonly data?: unknown;\n\n constructor(status: number, message?: string, data?: unknown) {\n super(message ?? `HTTP Error ${status}`);\n this.name = 'FetchError';\n this.status = status;\n this.data = data;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FetchError);\n }\n }\n}\n\n// Returns the response as a JSON object or throws an error if the response isn't successful.\nconst returnOrThrow = async <T>(response: Response): ParsedFetchResponse<T> => {\n if (response.ok) {\n return { data: await response.json(), status: response.status };\n }\n let message: string | undefined;\n let errorBody;\n const contentType = response.headers.get('content-type');\n if (response.bodyUsed) {\n message = response.statusText;\n } else if (contentType?.includes('application/json')) {\n errorBody = await response.json();\n message = errorBody?.errorText ?? errorBody?.message ?? errorBody?.detailedError?.message;\n } else if (contentType?.includes('text/xml')) {\n errorBody = await response.text();\n message = response.statusText;\n }\n\n throw new FetchError(response.status, message, errorBody);\n};\n\n/**\n * Fetches the given HTTP JSON resource with an HTTP GET request and returns a promise with the response as a JSON object.\n * If the response isn't successful, it returns a rejected promise with the http error code.\n * @ignore\n * @param url The URL to fetch.\n * @param headers The headers to be sent with the request.\n */\nexport const get = async <T>(url: URL, headers: TomTomHeaders): ParsedFetchResponse<T> =>\n returnOrThrow(await fetch(url, { headers }));\n\n/**\n * Fetches the given HTTP JSON resource with an HTTP POST request and returns a promise with the response as a JSON object.\n * If the response isn't successful, it returns a rejected promise with the http error code.\n * @ignore\n * @param input The POST object with URL and optional payload.\n * @param headers The headers to be sent with the request.\n */\nexport const post = async <T, D>(input: PostObject<D>, headers: TomTomHeaders): ParsedFetchResponse<T> =>\n returnOrThrow(\n await fetch(input.url, {\n method: 'POST',\n body: JSON.stringify(input.data),\n headers: { ...headers, 'Content-Type': 'application/json' },\n }),\n );\n\n/**\n * Fetches the given HTTP JSON resource with the given HTTP operation and URL/Payload as applicable.\n * * Useful for services which can use different HTTP methods depending on the parameters.\n * @param input The input object (e.g. containing either GET or POST data)\n * @param headers The headers to be sent with the request.\n * @ignore\n */\nexport const fetchWith = async <T, D = void>(input: FetchInput<D>, headers: TomTomHeaders): ParsedFetchResponse<T> => {\n const method = input.method;\n if (method === 'GET') {\n return get<T>(input.url, headers);\n }\n if (method === 'POST') {\n return post<T, D>(input, headers);\n }\n throw new Error(`Unsupported HTTP method received: ${method}`);\n};\n","import { z } from 'zod/v4-mini';\n\n/**\n * @ignore\n */\nexport const lineStringCoordsSchema = z.array(z.array(z.number()));\n\n/**\n * @ignore\n */\nexport const geometrySchema = z\n .object({\n type: z.enum([\n 'Point',\n 'MultiPoint',\n 'LineString',\n 'MultiLineString',\n 'Polygon',\n 'MultiPolygon',\n 'GeometryCollection',\n 'Circle',\n ]),\n coordinates: z.union([\n z.array(z.number()),\n lineStringCoordsSchema,\n z.array(z.array(z.array(z.number()))),\n z.array(z.array(z.array(z.array(z.number())))),\n ]),\n radius: z.optional(z.number()),\n radiusMeters: z.optional(z.number()),\n bbox: z.optional(z.array(z.number())),\n })\n .check(\n z.refine(\n (data) => (data.type === 'Circle' ? Boolean(data.radius) : true),\n 'type: \"Circle\" must have radius property',\n ),\n );\n\n/**\n * @ignore\n */\nexport const featureSchema = z.object({\n type: z.literal('Feature'),\n geometry: geometrySchema,\n id: z.optional(z.union([z.string(), z.number()])),\n properties: z.any(),\n bbox: z.optional(z.array(z.number())),\n});\n\n/**\n * @ignore\n */\nexport const featureCollectionSchema = z.object({\n type: z.literal('FeatureCollection'),\n features: z.array(featureSchema),\n id: z.optional(z.union([z.string(), z.number()])),\n properties: z.any(),\n bbox: z.optional(z.array(z.number())),\n});\n\n/**\n * @ignore\n */\nexport const hasLngLatSchema = z.union([\n z.tuple([z.number().check(z.minimum(-180), z.maximum(180)), z.number().check(z.minimum(-90), z.maximum(90))]),\n z.tuple([\n z.number().check(z.minimum(-180), z.maximum(180)),\n z.number().check(z.minimum(-90), z.maximum(90)),\n z.number(),\n ]),\n z.object({\n type: z.literal('Point'),\n coordinates: z.array(z.number()),\n }),\n featureSchema,\n]);\n\n/**\n * @ignore\n */\nconst geoJsonbBoxSchema = z.union([z.array(z.number()).check(z.length(4)), z.array(z.number()).check(z.length(6))]);\n\n/**\n * @ignore\n */\nexport const geoJSONObjectSchema = z.union([geometrySchema, featureSchema, featureCollectionSchema]);\n\n/**\n * @ignore\n */\nexport const hasBBoxSchema = z.union([geoJsonbBoxSchema, geoJSONObjectSchema, z.array(geoJSONObjectSchema)]);\n","import { z } from 'zod/v4-mini';\nimport { hasLngLatSchema } from '../shared/schema/geometriesSchema';\n\nconst autocompleteSearchRequestMandatory = z.object({\n query: z.string(),\n});\n\nconst autocompleteSearchRequestOptional = z.partial(\n z.object({\n position: hasLngLatSchema,\n limit: z.number().check(z.maximum(100)),\n radiusMeters: z.number(),\n countries: z.array(z.string()),\n resultType: z.array(z.string()),\n }),\n);\n\n/**\n * @ignore\n */\nexport const autocompleteSearchRequestSchema = z.extend(\n autocompleteSearchRequestMandatory,\n autocompleteSearchRequestOptional.shape,\n);\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nexport default isNil;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n\n // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n var index = -1,\n length = path.length;\n\n if (!length) {\n return true;\n }\n\n var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function');\n\n while (++index < length) {\n var key = path[index];\n\n // skip non-string keys (e.g., Symbols, numbers)\n if (typeof key !== 'string') {\n continue;\n }\n\n // Always block \"__proto__\" anywhere in the path if it's not expected\n if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n return false;\n }\n\n // Block \"constructor.prototype\" chains\n if (key === 'constructor' &&\n (index + 1) < length &&\n typeof path[index + 1] === 'string' &&\n path[index + 1] === 'prototype') {\n\n // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a')\n if (isRootPrimitive && index === 0) {\n continue;\n }\n\n return false;\n }\n }\n\n var obj = parent(object, path);\n return obj == null || delete obj[toKey(last(path))];\n}\n\nexport default baseUnset;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nexport default omit;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import type { HasLngLat, POICategory } from '@tomtom-org/maps-sdk/core';\nimport { getPosition, poiCategoriesToID } from '@tomtom-org/maps-sdk/core';\nimport { isNil } from 'lodash-es';\nimport type { CommonServiceParams } from '../serviceTypes';\n\n/**\n * @ignore\n * @param urlParams\n * @param params\n */\nexport const appendCommonParams = (urlParams: URLSearchParams, params: CommonServiceParams): void => {\n urlParams.append('apiVersion', String(params.apiVersion));\n\n // TODO: restore apiAccessToken if we implement oauth2 access:\n // if (!params.apiAccessToken) {\n urlParams.append('key', params.apiKey as string);\n // }\n\n params.language && urlParams.append('language', params.language);\n};\n\n/**\n * Adds parameter from the array by repeating each array part into a query parameter of the same name.\n * E.g. ...&avoid=motorways&avoid=ferries&...\n * @ignore\n * @param urlParams\n * @param paramName\n * @param paramArray\n */\nexport const appendByRepeatingParamName = (\n urlParams: URLSearchParams,\n paramName: string,\n paramArray?: string[],\n): void => {\n for (const param of paramArray || []) {\n urlParams.append(paramName, param);\n }\n};\n\n/**\n * @ignore\n */\nexport const appendByJoiningParamValue = (\n urlParams: URLSearchParams,\n name: string,\n values?: string[] | number[] | (string | number)[],\n): void => {\n if (Array.isArray(values) && values.length > 0) {\n urlParams.append(name, values.join(','));\n }\n};\n\n/**\n * @ignore\n */\nexport const appendOptionalParam = (\n urlParams: URLSearchParams,\n name: string,\n value?: string | number | boolean,\n): void => {\n !isNil(value) && urlParams.append(name, String(value));\n};\n\n/**\n * Adds lat and lon parameters to the url.\n * @ignore\n * @param urlParams\n * @param hasLngLat\n */\nexport const appendLatLonParamsFromPosition = (urlParams: URLSearchParams, hasLngLat: HasLngLat | undefined): void => {\n const position = getPosition(hasLngLat);\n if (position) {\n urlParams.append('lat', String(position[1]));\n urlParams.append('lon', String(position[0]));\n }\n};\n\n/**\n * map human-readable poi categories to their ID.\n * @ignore\n * @param poiCategories\n */\nexport const mapPOICategoriesToIDs = (poiCategories: (number | POICategory)[]): number[] => {\n return poiCategories.map((poiCategory) => {\n if (typeof poiCategory !== 'number') {\n return poiCategoriesToID[poiCategory];\n }\n return poiCategory;\n });\n};\n","import type { FuzzySearchParams } from '../../fuzzy-search';\nimport type { GeometrySearchParams } from '../../geometry-search';\nimport {\n appendByJoiningParamValue,\n appendCommonParams,\n appendLatLonParamsFromPosition,\n appendOptionalParam,\n mapPOICategoriesToIDs,\n} from './requestBuildingUtils';\n\n/**\n * @ignore\n */\nexport const PLACES_URL_PATH = '/maps/orbis/places';\n\n/**\n * Appends request parameters common to search APIs such as fuzzy + geometry search.\n * * Mutates the given searchURL with the appended parameters.\n * @param searchUrl The search URL to append parameters to. Should come without any parameters at this point.\n * @param params The search parameters, with global configuration already merged into them.\n */\nexport const appendCommonSearchParams = (searchUrl: URL, params: FuzzySearchParams | GeometrySearchParams): void => {\n const urlParams = searchUrl.searchParams;\n appendCommonParams(urlParams, params);\n appendOptionalParam(urlParams, 'limit', params.limit);\n appendLatLonParamsFromPosition(urlParams, params.position);\n\n appendByJoiningParamValue(urlParams, 'fuelSet', params.fuelTypes);\n appendByJoiningParamValue(urlParams, 'idxSet', params.indexes);\n appendByJoiningParamValue(urlParams, 'brandSet', params.poiBrands);\n params.poiCategories &&\n appendByJoiningParamValue(urlParams, 'categorySet', mapPOICategoriesToIDs(params.poiCategories));\n appendByJoiningParamValue(urlParams, 'connectorSet', params.connectors);\n appendByJoiningParamValue(urlParams, 'mapcodes', params.mapcodes);\n appendByJoiningParamValue(urlParams, 'extendedPostalCodesFor', params.extendedPostalCodesFor);\n\n appendOptionalParam(urlParams, 'minPowerKW', params.minPowerKW);\n appendOptionalParam(urlParams, 'maxPowerKW', params.maxPowerKW);\n appendOptionalParam(urlParams, 'view', params.view);\n appendOptionalParam(urlParams, 'openingHours', params.openingHours);\n appendOptionalParam(urlParams, 'timeZone', params.timeZone);\n appendOptionalParam(urlParams, 'relatedPois', params.relatedPois);\n appendByJoiningParamValue(urlParams, 'entityTypeSet', params.geographyTypes);\n};\n","import { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport {\n appendByJoiningParamValue,\n appendCommonParams,\n appendLatLonParamsFromPosition,\n appendOptionalParam,\n} from '../shared/request/requestBuildingUtils';\nimport type { AutocompleteSearchParams } from './types';\n\nconst buildUrlBasePath = (mergedOptions: AutocompleteSearchParams): string =>\n mergedOptions.customServiceBaseURL ||\n `${mergedOptions.commonBaseURL}${PLACES_URL_PATH}/autocomplete/${mergedOptions.query}.json`;\n\n/**\n * Default function for building autocomplete request from {@link AutocompleteSearchParams}\n * @param params The autocomplete parameters, with global configuration already merged into them.\n */\nexport const buildAutocompleteSearchRequest = (params: AutocompleteSearchParams): URL => {\n const url = new URL(`${buildUrlBasePath(params)}`);\n const urlParams = url.searchParams;\n /**\n * Auto-complete service defaults the language to en-GB if not specified explicitly as service param\n * Or global config\n */\n params.language = params.language ?? 'en-GB';\n appendCommonParams(urlParams, params);\n appendOptionalParam(urlParams, 'limit', params.limit);\n appendLatLonParamsFromPosition(urlParams, params.position);\n appendByJoiningParamValue(urlParams, 'countrySet', params.countries);\n appendOptionalParam(urlParams, 'radius', params.radiusMeters);\n appendByJoiningParamValue(urlParams, 'resultSet', params.resultType);\n\n return url;\n};\n","import type { BBox } from '@tomtom-org/maps-sdk/core';\nimport type { Position } from 'geojson';\nimport type { BoundingBoxAPI, BoundingBoxTopLeftAPI, LatLonAPI } from './types/apiPlacesResponseTypes';\n\n/**\n * @ignore\n * @param csv\n */\nexport const csvLatLngToPosition = (csv: string): Position => {\n const splitLatLng = csv.split(',');\n return [Number(splitLatLng[1]), Number(splitLatLng[0])];\n};\n\n/**\n * @ignore\n * @param position\n */\nexport const positionToCSVLatLon = (position: Position): string => `${position[1]},${position[0]}`;\n\nconst hasTopLeftPoint = (bbox: BoundingBoxAPI): bbox is BoundingBoxTopLeftAPI => {\n return (<BoundingBoxTopLeftAPI>bbox).topLeftPoint !== undefined;\n};\n\n/**\n * @ignore\n * @param apiBBox\n */\nexport const apiToGeoJSONBBox = (apiBBox: BoundingBoxAPI): BBox => {\n let westSouth: Position;\n let eastNorth: Position;\n if (hasTopLeftPoint(apiBBox)) {\n westSouth = [apiBBox.topLeftPoint.lon, apiBBox.btmRightPoint.lat];\n eastNorth = [apiBBox.btmRightPoint.lon, apiBBox.topLeftPoint.lat];\n } else {\n westSouth = csvLatLngToPosition(apiBBox.southWest);\n eastNorth = csvLatLngToPosition(apiBBox.northEast);\n }\n return [westSouth[0], westSouth[1], eastNorth[0], eastNorth[1]];\n};\n\n/**\n * @ignore\n * @param point\n */\nexport const latLonAPIToPosition = (point: LatLonAPI): Position => {\n return [point.lon, point.lat];\n};\n","import { latLonAPIToPosition } from '../shared/geometry';\nimport type { AutocompleteSearchResponse, AutocompleteSearchResponseAPI } from './types';\n\n/**\n * Default function to parse autocomplete response.\n * @param apiResponse The API response.\n */\nexport const parseAutocompleteSearchResponse = (\n apiResponse: AutocompleteSearchResponseAPI,\n): AutocompleteSearchResponse => {\n const { position, ...geoBias } = apiResponse.context.geoBias || {};\n return {\n ...apiResponse,\n context: {\n ...apiResponse.context,\n geoBias: {\n ...(position && { position: latLonAPIToPosition(position) }),\n radiusMeters: geoBias.radius,\n },\n },\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { autocompleteSearchRequestSchema } from './autocompleteSearchRequestSchema';\nimport { buildAutocompleteSearchRequest } from './requestBuilder';\nimport { parseAutocompleteSearchResponse } from './responseParser';\nimport type { AutocompleteSearchParams, AutocompleteSearchResponse, AutocompleteSearchResponseAPI } from './types';\n\n/**\n * Autocomplete service template type.\n * @ignore\n */\nexport type AutocompleteSearchTemplate = ServiceTemplate<\n AutocompleteSearchParams,\n URL,\n AutocompleteSearchResponseAPI,\n AutocompleteSearchResponse\n>;\n\n/**\n * Autocomplete service template main implementation.\n * @ignore\n */\nexport const autocompleteSearchTemplate: AutocompleteSearchTemplate = {\n requestValidation: { schema: autocompleteSearchRequestSchema },\n buildRequest: buildAutocompleteSearchRequest,\n sendRequest: get,\n parseResponse: parseAutocompleteSearchResponse,\n};\n","import { callService } from '../shared/serviceTemplate';\nimport type { AutocompleteSearchTemplate } from './autocompleteSearchTemplate';\nimport { autocompleteSearchTemplate } from './autocompleteSearchTemplate';\nimport type { AutocompleteSearchParams, AutocompleteSearchResponse } from './types';\n\n/**\n * Autocomplete search queries as the user types, enabling faster and more accurate search.\n *\n * The Autocomplete service recognizes entities (places, addresses, POIs) within a partial\n * input query and offers them as completion suggestions. This enables real-time search\n * assistance and improves the search experience.\n *\n * @remarks\n * Key features:\n * - **Real-time suggestions**: Returns results as the user types\n * - **Entity recognition**: Identifies addresses, POIs, and geographic areas\n * - **Structured results**: Provides both plain text and structured data\n * - **Query refinement**: Helps users formulate more accurate search queries\n * - **Fast response**: Optimized for low-latency interactive use\n *\n * Typical use cases:\n * - Search box autocomplete dropdowns\n * - Address entry forms\n * - Location pickers\n * - Navigation apps\n *\n * @param params - Autocomplete parameters including the partial query\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to autocomplete suggestions\n *\n * @example\n * ```typescript\n * // Autocomplete as user types \"amster\"\n * const suggestions = await autocompleteSearch({\n * key: 'your-api-key',\n * query: 'amster',\n * limit: 5\n * });\n * // Returns: Amsterdam, Amsterdam Centraal, etc.\n *\n * // Autocomplete with position bias\n * const localSuggestions = await autocompleteSearch({\n * key: 'your-api-key',\n * query: 'main st',\n * at: [4.9041, 52.3676], // Near Amsterdam\n * limit: 10\n * });\n *\n * // Autocomplete with category filter\n * const restaurantSuggestions = await autocompleteSearch({\n * key: 'your-api-key',\n * query: 'pizz',\n * categorySet: [7315], // Restaurant category\n * at: [4.9041, 52.3676]\n * });\n * ```\n *\n * @see [Autocomplete API Documentation](https://docs.tomtom.com/search-api/documentation/autocomplete-service/autocomplete)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Search Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/search)\n *\n * @group Autocomplete Search\n */\nexport const autocompleteSearch = async (\n params: AutocompleteSearchParams,\n customTemplate?: Partial<AutocompleteSearchTemplate>,\n): Promise<AutocompleteSearchResponse> =>\n callService(params, { ...autocompleteSearchTemplate, ...customTemplate }, 'Autocomplete');\n\nexport default autocompleteSearch;\n","import { autocompleteSearch } from './autocompleteSearch';\nimport type { AutocompleteSearchTemplate } from './autocompleteSearchTemplate';\nimport { autocompleteSearchTemplate } from './autocompleteSearchTemplate';\nimport { buildAutocompleteSearchRequest } from './requestBuilder';\nimport { parseAutocompleteSearchResponse } from './responseParser';\n\nconst customize: {\n autocompleteSearch: typeof autocompleteSearch;\n buildAutocompleteSearchRequest: typeof buildAutocompleteSearchRequest;\n parseAutocompleteSearchResponse: typeof parseAutocompleteSearchResponse;\n autocompleteSearchTemplate: AutocompleteSearchTemplate;\n} = {\n autocompleteSearch,\n buildAutocompleteSearchRequest,\n parseAutocompleteSearchResponse,\n autocompleteSearchTemplate,\n};\nexport default customize;\n","import { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendCommonParams } from '../shared/request/requestBuildingUtils';\nimport type { ChargingStationsAvailabilityParams } from './types/evChargingStationsAvailabilityParams';\n\nconst buildUrlBasePath = (params: ChargingStationsAvailabilityParams): string =>\n params.customServiceBaseURL ?? `${params.commonBaseURL}${PLACES_URL_PATH}/ev/id`;\n\n/**\n * Default method for building ev charging stations availability request from {@link ChargingStationsAvailabilityParams}\n * @param params The charging availability parameters, with global configuration already merged into them.\n */\nexport const buildEVChargingStationsAvailabilityRequest = (params: ChargingStationsAvailabilityParams): URL => {\n const url = new URL(buildUrlBasePath(params));\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n urlParams.append('id', params.id);\n return url;\n};\n","import { ChargingSpeed } from '@tomtom-org/maps-sdk/core';\n\n/**\n * @ignore\n */\nexport const toChargingSpeed = (powerInKW: number): ChargingSpeed => {\n if (powerInKW < 12) {\n return 'slow';\n } else if (powerInKW < 50) {\n return 'regular';\n } else if (powerInKW < 150) {\n return 'fast';\n }\n return 'ultra-fast';\n};\n","import type {\n ChargingPointAvailability,\n ChargingPointStatus,\n ChargingStation,\n Connector,\n ConnectorAvailability,\n ConnectorCount,\n} from '@tomtom-org/maps-sdk/core';\n\n/**\n * @ignore\n */\nexport const toChargingPointAvailability = (chargingStations: ChargingStation[]): ChargingPointAvailability => {\n const availability: ChargingPointAvailability = { count: 0, statusCounts: {} };\n for (const station of chargingStations) {\n for (const chargingPoint of station.chargingPoints) {\n availability.count++;\n availability.statusCounts[chargingPoint.status] =\n (availability.statusCounts[chargingPoint.status] || 0) + 1;\n }\n }\n return availability;\n};\n\n// Two connectors can be considered equal when they have the same type and power:\nconst areEqual = (connectorA: Connector, connectorB: Connector) =>\n connectorA.type === connectorB.type && connectorA.ratedPowerKW === connectorB.ratedPowerKW;\n\nconst addConnectorCount = (\n connectors: Connector[] | undefined,\n counts: ConnectorCount[], // we are mutating this input\n): void => {\n if (!connectors) {\n // defensive check, sometimes connectors are undefined\n return;\n }\n for (const connector of connectors) {\n const existingCount = counts.find((connectorCount) => areEqual(connector, connectorCount.connector));\n if (existingCount) {\n existingCount.count++;\n } else {\n // new count entry:\n counts.push({ connector, count: 1 });\n }\n }\n};\n\nconst addConnectorCountAndStatus = (\n connectors: Connector[] | undefined,\n status: ChargingPointStatus | undefined,\n availabilities: ConnectorAvailability[], // we are mutating this input\n): void => {\n if (!connectors) {\n // defensive check, sometimes connectors are undefined\n return;\n }\n for (const connector of connectors) {\n const existingAvailability = availabilities.find((connectorAvailability) =>\n areEqual(connector, connectorAvailability.connector),\n );\n if (existingAvailability) {\n existingAvailability.count++;\n if (status) {\n // we're mutating the input object here:\n const statusCounts = existingAvailability.statusCounts;\n existingAvailability.statusCounts[status] = (statusCounts[status] || 0) + 1;\n }\n } else {\n // new availability entry:\n availabilities.push({ connector, count: 1, statusCounts: status ? { [status]: 1 } : {} });\n }\n }\n};\n\n/**\n * @ignore\n */\nexport const toConnectorCounts = (connectors: Connector[]): ConnectorCount[] => {\n const availabilities: ConnectorAvailability[] = [];\n addConnectorCount(connectors, availabilities);\n return availabilities;\n};\n\n/**\n * @ignore\n */\nexport const toConnectorBasedAvailabilities = (chargingStations: ChargingStation[]): ConnectorAvailability[] => {\n const availabilities: ConnectorAvailability[] = [];\n for (const station of chargingStations) {\n for (const chargingPoint of station.chargingPoints) {\n addConnectorCountAndStatus(chargingPoint.connectors, chargingPoint.status, availabilities);\n }\n }\n return availabilities;\n};\n","import type { Moment, OpeningHours, Place, SearchPlaceProps, TimeRange } from '@tomtom-org/maps-sdk/core';\nimport { toPointGeometry } from '@tomtom-org/maps-sdk/core';\nimport { omit } from 'lodash-es';\nimport { toConnectorCounts } from '../ev-charging-stations-availability/connectorAvailability';\nimport { toChargingSpeed } from './ev';\nimport { apiToGeoJSONBBox, latLonAPIToPosition } from './geometry';\nimport type {\n BrandAPI,\n CommonSearchPlaceResultAPI,\n MomentAPI,\n OpeningHoursAPI,\n SummaryAPI,\n} from './types/apiPlacesResponseTypes';\nimport type { SearchSummary } from './types/searchSummary';\n\nconst parseYyyymmddDate = (dateYyyymmdd: string): { year: number; month: number; day: number } => {\n const splitDate = dateYyyymmdd.split('-');\n return {\n year: Number.parseInt(splitDate[0]),\n month: Number.parseInt(splitDate[1]),\n day: Number.parseInt(splitDate[2]),\n };\n};\n\nconst parseMoment = (momentApi: MomentAPI): Moment => {\n const { year, month, day } = parseYyyymmddDate(momentApi.date);\n return {\n dateYYYYMMDD: momentApi.date,\n year,\n month,\n day,\n hour: momentApi.hour,\n minute: momentApi.minute,\n date: new Date(year, month - 1, day, momentApi.hour, momentApi.minute),\n };\n};\n\nconst alwaysOpenInThisPeriod = (timeRanges: TimeRange[]): boolean =>\n timeRanges.length === 1 && timeRanges[0].start.hour === 0 && timeRanges[0].end.hour === 0;\n\n/**\n * @ignore\n */\nexport const parseOpeningHours = (openingHoursApi: OpeningHoursAPI): OpeningHours => {\n const timeRanges = openingHoursApi.timeRanges.map(\n (timeRangeApi): TimeRange => ({\n start: parseMoment(timeRangeApi.startTime),\n end: parseMoment(timeRangeApi.endTime),\n }),\n );\n return {\n mode: openingHoursApi.mode,\n timeRanges,\n alwaysOpenThisPeriod: alwaysOpenInThisPeriod(timeRanges),\n };\n};\n\n/**\n * Shared response parsing between geometry search and place by id service.\n * @ignore\n */\nexport const parseSearchAPIResult = (result: CommonSearchPlaceResultAPI): Place<SearchPlaceProps> => {\n const { position, entryPoints, poi, id, dist, boundingBox, chargingPark, ...rest } = result;\n const connectors = chargingPark?.connectors?.map((connector) => ({\n ...omit(connector, 'connectorType'),\n type: connector.connectorType,\n chargingSpeed: toChargingSpeed(connector.ratedPowerKW),\n }));\n return {\n type: 'Feature',\n geometry: toPointGeometry(latLonAPIToPosition(position)),\n ...(boundingBox && { bbox: apiToGeoJSONBBox(boundingBox) }),\n id,\n properties: {\n ...omit(rest, 'viewport'),\n ...(dist && { distance: dist }),\n ...(entryPoints?.length && {\n entryPoints: entryPoints.map((entrypoint) => ({\n ...entrypoint,\n position: latLonAPIToPosition(entrypoint.position),\n })),\n }),\n ...(connectors?.length && {\n chargingPark: {\n ...chargingPark,\n connectors: toConnectorCounts(connectors),\n },\n }),\n ...(poi && {\n poi: {\n ...omit(poi, 'categorySet', 'openingHours'),\n brands: poi?.brands?.map((brand: BrandAPI) => brand.name) ?? [],\n categoryIds: poi?.categorySet?.map((category) => category.id) ?? [],\n ...(poi?.openingHours && { openingHours: parseOpeningHours(poi?.openingHours) }),\n },\n }),\n },\n };\n};\n\n/**\n * @ignore\n */\nexport const parseSummaryAPI = (summary: SummaryAPI): SearchSummary => {\n const { geoBias, ...rest } = summary;\n\n return {\n ...(geoBias && { geoBias: latLonAPIToPosition(geoBias) }),\n ...rest,\n };\n};\n","import type { ChargingStation, ChargingStationsAvailability } from '@tomtom-org/maps-sdk/core';\nimport { toChargingSpeed } from '../shared/ev';\nimport { parseOpeningHours } from '../shared/searchResultParsing';\nimport { toChargingPointAvailability, toConnectorBasedAvailabilities } from './connectorAvailability';\nimport type { ChargingStationsAvailabilityResponseAPI } from './types/apiTypes';\n\nconst toChargingPointStations = (stations: ChargingStation[]) =>\n stations.map((station) => ({\n ...station,\n chargingPoints: station.chargingPoints.map((chargingPoint) => ({\n ...chargingPoint,\n connectors: chargingPoint.connectors?.map((connector) => ({\n ...connector,\n chargingSpeed: toChargingSpeed(connector.ratedPowerKW),\n })),\n })),\n }));\n\n/**\n * Default method for parsing ev charging stations availability from {@link ChargingStationsAvailability}\n * @param apiResponse\n */\nexport const parseEVChargingStationsAvailabilityResponse = (\n apiResponse: ChargingStationsAvailabilityResponseAPI,\n): ChargingStationsAvailability | undefined => {\n const result = apiResponse.results?.[0];\n return result\n ? {\n id: result.id,\n accessType: result.accessType,\n chargingStations: toChargingPointStations(result.chargingStations),\n chargingPointAvailability: toChargingPointAvailability(result.chargingStations),\n connectorAvailabilities: toConnectorBasedAvailabilities(result.chargingStations),\n ...(result.openingHours && { openingHours: parseOpeningHours(result.openingHours) }),\n }\n : undefined;\n};\n","import type { ChargingStationsAvailability } from '@tomtom-org/maps-sdk/core';\nimport type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { evChargingStationsAvailabilityRequestSchema } from './evChargingStationsAvailabilityRequestSchema';\nimport { parseEVChargingStationsAvailabilityResponseError } from './evChargingStationsAvailabilityResponseErrorParser';\nimport { buildEVChargingStationsAvailabilityRequest } from './requestBuilder';\nimport { parseEVChargingStationsAvailabilityResponse } from './responseParser';\nimport type { ChargingStationsAvailabilityResponseAPI } from './types/apiTypes';\nimport type { ChargingStationsAvailabilityParams } from './types/evChargingStationsAvailabilityParams';\n\n/**\n * EV Charging Stations Availability service template type.\n * @ignore\n */\nexport type EVChargingStationsAvailabilityTemplate = ServiceTemplate<\n ChargingStationsAvailabilityParams,\n URL,\n ChargingStationsAvailabilityResponseAPI,\n ChargingStationsAvailability | undefined\n>;\n\n/**\n * EV Charging Stations Availability service template main implementation.\n * @ignore\n */\nexport const evChargingStationsAvailabilityTemplate: EVChargingStationsAvailabilityTemplate = {\n requestValidation: { schema: evChargingStationsAvailabilityRequestSchema },\n buildRequest: buildEVChargingStationsAvailabilityRequest,\n sendRequest: get,\n parseResponse: parseEVChargingStationsAvailabilityResponse,\n parseResponseError: parseEVChargingStationsAvailabilityResponseError,\n};\n","import { z } from 'zod/v4-mini';\n\n/**\n * @ignore\n */\nexport const evChargingStationsAvailabilityRequestSchema = z.object({\n id: z.string(),\n});\n","import type { ParseResponseError } from '../shared';\nimport { SDKServiceError } from '../shared';\n\n/**\n * @ignore\n * @param apiError\n * @param serviceName\n */\nexport const parseEVChargingStationsAvailabilityResponseError: ParseResponseError = (apiError, serviceName) => {\n const errorMessage = apiError.data?.detailedError?.message ?? apiError.message;\n return new SDKServiceError(errorMessage, serviceName, apiError.status);\n};\n","import type { EVChargingStationsAvailabilityTemplate } from './evChargingStationsAvailabilityTemplate';\nimport { evChargingStationsAvailabilityTemplate } from './evChargingStationsAvailabilityTemplate';\nimport { buildEVChargingStationsAvailabilityRequest } from './requestBuilder';\nimport { parseEVChargingStationsAvailabilityResponse } from './responseParser';\n\nconst customize: {\n buildEVChargingStationsAvailabilityRequest: typeof buildEVChargingStationsAvailabilityRequest;\n parseEVChargingStationsAvailabilityResponse: typeof parseEVChargingStationsAvailabilityResponse;\n evChargingStationsAvailabilityTemplate: EVChargingStationsAvailabilityTemplate;\n} = {\n buildEVChargingStationsAvailabilityRequest,\n parseEVChargingStationsAvailabilityResponse,\n evChargingStationsAvailabilityTemplate,\n};\nexport default customize;\n","import { z } from 'zod/v4-mini';\nimport { hasBBoxSchema } from './geometriesSchema';\n\n/**\n * @ignore\n */\nexport const commonGeocodeAndFuzzySearchParamsSchema = z.partial(\n z.object({\n typeahead: z.boolean(),\n offset: z.number().check(z.maximum(1900)),\n radiusMeters: z.number(),\n boundingBox: hasBBoxSchema,\n countries: z.array(z.string()),\n }),\n);\n","import { views } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { hasLngLatSchema } from './geometriesSchema';\n\nconst placesParamsMandatory = z.object({\n query: z.string(),\n});\n\nconst placesParamsOptional = z.partial(\n z.object({\n position: hasLngLatSchema,\n limit: z.number().check(z.maximum(100)),\n extendedPostalCodesFor: z.array(z.string()),\n mapcodes: z.array(z.string()),\n view: z.enum(views),\n geographyTypes: z.array(z.string()),\n }),\n);\n\n/**\n * @ignore\n */\nexport const commonPlacesParamsSchema = z.extend(placesParamsMandatory, placesParamsOptional.shape);\n","import { z } from 'zod/v4-mini';\nimport { commonGeocodeAndFuzzySearchParamsSchema } from '../shared/schema/commonGeocodeAndFuzzySearchParamsSchema';\nimport { commonPlacesParamsSchema } from '../shared/schema/commonPlacesParamsSchema';\n\n/**\n * @ignore\n */\nexport const geocodingRequestSchema = z.extend(commonPlacesParamsSchema, commonGeocodeAndFuzzySearchParamsSchema.shape);\n","/**\n * @ignore\n * @param input\n */\nexport const arrayToCSV = (input: unknown | unknown[]): string =>\n !input ? '' : Array.isArray(input) ? input.join(',') : typeof input === 'string' ? input : String(input);\n\n/**\n * Samples, if necessary, the given array to fit within the given max length.\n * * If the array already fits within maxLength, the same array is returned.\n * * The sampling is done by spreading the array points at a constant increment.\n * * The first and last points are always included if array and max lengths are > 1.\n * * The sampling is done with speed in mind, so it's not guaranteed to always fit maxLength. Very often it will be shorter.\n *\n * Use this when needing to quickly simplify an array to fit some max length without caring too much on the lost detail.\n * * If both the array and max length are long enough, the loss of detail won't likely be an issue.\n * @ignore\n */\nexport const sampleWithinMaxLength = <T>(array: T[], maxLength: number): T[] => {\n const length = array.length;\n if (length <= maxLength) {\n return array;\n }\n\n const sampledArray = [];\n let i;\n const increment = Math.ceil(length / maxLength);\n for (i = 0; i < length; i += increment) {\n sampledArray.push(array[i]);\n }\n // ensuring the last point is always added:\n if (maxLength > 1 && i >= length - increment) {\n if (sampledArray.length < maxLength) {\n sampledArray.push(array[length - 1]);\n } else {\n sampledArray[sampledArray.length - 1] = array[length - 1];\n }\n }\n\n return sampledArray;\n};\n","import { bboxFromGeoJSON } from '@tomtom-org/maps-sdk/core';\nimport { isNil } from 'lodash-es';\nimport { arrayToCSV } from '../shared/arrays';\nimport { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendCommonParams, appendLatLonParamsFromPosition } from '../shared/request/requestBuildingUtils';\nimport type { GeocodingParams } from './types/geocodingParams';\n\nconst buildUrlBasePath = (params: GeocodingParams): string =>\n params.customServiceBaseURL || `${params.commonBaseURL}${PLACES_URL_PATH}/geocode`;\n\n/**\n * Default method for building geocoding request from {@link GeocodingParams}\n * @param params The geocoding parameters, with global configuration already merged into them.\n */\nexport const buildGeocodingRequest = (params: GeocodingParams): URL => {\n const url = new URL(`${buildUrlBasePath(params)}/${params.query}.json`);\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n // geocoding specific parameters:\n params.typeahead && urlParams.append('typeahead', String(params.typeahead));\n !isNil(params.limit) && urlParams.append('limit', String(params.limit));\n !isNil(params.offset) && urlParams.append('ofs', String(params.offset));\n appendLatLonParamsFromPosition(urlParams, params.position);\n params.countries && urlParams.append('countrySet', arrayToCSV(params.countries));\n !isNil(params.radiusMeters) && urlParams.append('radius', String(params.radiusMeters));\n const bbox = params.boundingBox && bboxFromGeoJSON(params.boundingBox);\n if (bbox) {\n urlParams.append('topLeft', arrayToCSV([bbox[3], bbox[0]]));\n urlParams.append('btmRight', arrayToCSV([bbox[1], bbox[2]]));\n }\n params.extendedPostalCodesFor &&\n urlParams.append('extendedPostalCodesFor', arrayToCSV(params.extendedPostalCodesFor));\n params.mapcodes && urlParams.append('mapcodes', arrayToCSV(params.mapcodes));\n params.view && urlParams.append('view', params.view);\n params.geographyTypes && urlParams.append('entityTypeSet', arrayToCSV(params.geographyTypes));\n return url;\n};\n","import type { GeographyType, Place } from '@tomtom-org/maps-sdk/core';\nimport { bboxFromGeoJSON, bboxOnlyIfWithArea, toPointGeometry } from '@tomtom-org/maps-sdk/core';\nimport { omit } from 'lodash-es';\nimport { apiToGeoJSONBBox, latLonAPIToPosition } from '../shared/geometry';\nimport type { GeocodingResponseAPI, GeocodingResultAPI } from './types/apiTypes';\nimport type { GeocodingProps, GeocodingResponse } from './types/geocodingResponse';\n\nconst parseApiResult = (result: GeocodingResultAPI): Place<GeocodingProps> => {\n const { position, boundingBox, dist, entryPoints, addressRanges, entityType, id, ...rest } = result;\n\n return {\n type: 'Feature',\n geometry: toPointGeometry(latLonAPIToPosition(position)),\n ...(boundingBox && { bbox: apiToGeoJSONBBox(boundingBox) }),\n id,\n properties: {\n ...omit(rest, 'viewport'),\n ...(dist && { distance: dist }),\n ...(entityType && { geographyType: entityType.split(',') as GeographyType[] }),\n ...(entryPoints && {\n entryPoints: entryPoints.map((entrypoint) => ({\n ...entrypoint,\n position: latLonAPIToPosition(entrypoint.position),\n })),\n }),\n ...(addressRanges && {\n addressRanges: {\n ...addressRanges,\n from: latLonAPIToPosition(addressRanges.from),\n to: latLonAPIToPosition(addressRanges.to),\n },\n }),\n },\n };\n};\n\n/**\n * Default method for parsing geocoding request from {@link GeocodingResponse}\n * @param apiResponse\n */\nexport const parseGeocodingResponse = (apiResponse: GeocodingResponseAPI): GeocodingResponse => {\n const results = apiResponse.results;\n const features = results.map(parseApiResult);\n const bbox = bboxOnlyIfWithArea(bboxFromGeoJSON(features));\n return {\n type: 'FeatureCollection',\n features,\n ...(bbox && { bbox }),\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { geocodingRequestSchema } from './geocodingRequestSchema';\nimport { buildGeocodingRequest } from './requestBuilder';\nimport { parseGeocodingResponse } from './responseParser';\nimport type { GeocodingResponseAPI } from './types/apiTypes';\nimport type { GeocodingParams } from './types/geocodingParams';\nimport type { GeocodingResponse } from './types/geocodingResponse';\n\n/**\n * Geocoding service template type.\n * @ignore\n */\nexport type GeocodingTemplate = ServiceTemplate<GeocodingParams, URL, GeocodingResponseAPI, GeocodingResponse>;\n\n/**\n * Geocoding service template main implementation.\n * @ignore\n */\nexport const geocodingTemplate: GeocodingTemplate = {\n requestValidation: { schema: geocodingRequestSchema },\n buildRequest: buildGeocodingRequest,\n sendRequest: get,\n parseResponse: parseGeocodingResponse,\n};\n","import type { GeocodingTemplate } from './geocodingTemplate';\nimport { geocodingTemplate } from './geocodingTemplate';\nimport { buildGeocodingRequest } from './requestBuilder';\nimport { parseGeocodingResponse } from './responseParser';\n\nconst customize: {\n buildGeocodingRequest: typeof buildGeocodingRequest;\n parseGeocodingResponse: typeof parseGeocodingResponse;\n geocodingTemplate: GeocodingTemplate;\n} = {\n buildGeocodingRequest,\n parseGeocodingResponse,\n geocodingTemplate,\n};\nexport default customize;\n","import { z } from 'zod/v4-mini';\nimport { featureCollectionSchema, featureSchema } from '../shared/schema/geometriesSchema';\n\nconst geometryDataRequestMandatory = z.object({\n geometries: z.union([\n featureCollectionSchema,\n z.array(z.union([z.string(), featureSchema])).check(z.minLength(1), z.maxLength(20)),\n ]),\n});\n\nconst geometryDataRequestOptional = z.partial(\n z.object({\n zoom: z.number().check(z.minimum(0), z.maximum(22)),\n }),\n);\n\nexport const geometryDataRequestSchema = z.extend(geometryDataRequestMandatory, geometryDataRequestOptional.shape);\n","import type { Place, Places } from '@tomtom-org/maps-sdk/core';\nimport { arrayToCSV } from '../shared/arrays';\nimport { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendOptionalParam } from '../shared/request/requestBuildingUtils';\nimport type { GeometriesInput, GeometryParams } from './types/geometryDataParams';\n\nconst buildUrlBasePath = (params: GeometryParams): string =>\n params.customServiceBaseURL || `${params.commonBaseURL}${PLACES_URL_PATH}/additionalData.json`;\n\nconst getGeometryIDs = (placesArray: Place[]): string[] =>\n placesArray.map((place) => place.properties.dataSources?.geometry?.id as string).filter((id) => id);\n\n// (@see geometryDataRequestSchema)\nconst appendGeometries = (urlParams: URLSearchParams, geometries: GeometriesInput | Places | Place[]): void => {\n let geometryIDs: string[];\n\n if (Array.isArray(geometries)) {\n // (assuming min and max length already validated)\n if (typeof geometries[0] === 'string') {\n geometryIDs = geometries as string[];\n } else {\n geometryIDs = getGeometryIDs(geometries as Place[]);\n }\n } else {\n // (assuming already validated as FeatureCollection)\n geometryIDs = getGeometryIDs(geometries.features);\n }\n\n urlParams.append('geometries', arrayToCSV(geometryIDs));\n};\n\n/**\n * Default function for building a geometry data request from {@link GeometryDataParams}\n * @param params The geometry data parameters, with global configuration already merged into them.\n */\nexport const buildGeometryDataRequest = (params: GeometryParams): URL => {\n const url = new URL(buildUrlBasePath(params));\n const urlParams = url.searchParams;\n // (no language in this service)\n urlParams.append('apiVersion', String(params.apiVersion));\n urlParams.append('key', params.apiKey as string);\n appendGeometries(urlParams, params.geometries);\n appendOptionalParam(urlParams, 'geometriesZoom', params.zoom);\n return url;\n};\n","import { bboxFromGeoJSON, generateId, PolygonFeature, PolygonFeatures } from '@tomtom-org/maps-sdk/core';\nimport type { GeometryDataResponseAPI } from './types/apiTypes';\n\n/**\n * Default geometry data API response parsing.\n * * The API response consists of an array, with a FeatureCollection (with only one feature) for each geometry.\n * * The parsed response consists of a fully-GeoJSON-compatible FeatureCollection with a Feature for each geometry.\n * * Each geometry ID is included in each GeoJSON feature \"id\" field.\n * @param apiResponse\n */\nexport const parseGeometryDataResponse = (apiResponse: GeometryDataResponseAPI): PolygonFeatures => {\n const features = apiResponse.additionalData\n .flatMap((data) =>\n (data.geometryData as PolygonFeatures)?.features.map((feature) => ({\n ...feature,\n id: feature.id ?? generateId(),\n bbox: bboxFromGeoJSON(feature.geometry),\n })),\n )\n .filter((feature) => feature) as PolygonFeature[];\n return {\n type: 'FeatureCollection',\n bbox: bboxFromGeoJSON(features),\n features,\n };\n};\n","import type { PolygonFeatures } from '@tomtom-org/maps-sdk/core';\nimport type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { geometryDataRequestSchema } from './geometryDataRequestSchema';\nimport { buildGeometryDataRequest } from './requestBuilder';\nimport { parseGeometryDataResponse } from './responseParser';\nimport type { GeometryDataResponseAPI } from './types/apiTypes';\nimport type { GeometryParams } from './types/geometryDataParams';\n\n/**\n * @ignore\n */\nexport type GeometryDataTemplate = ServiceTemplate<GeometryParams, URL, GeometryDataResponseAPI, PolygonFeatures>;\n\n/**\n * @ignore\n */\nexport const geometryDataTemplate: GeometryDataTemplate = {\n requestValidation: { schema: geometryDataRequestSchema },\n buildRequest: buildGeometryDataRequest,\n sendRequest: get,\n parseResponse: parseGeometryDataResponse,\n};\n","import type { GeometryDataTemplate } from './geometryDataTemplate';\nimport { geometryDataTemplate } from './geometryDataTemplate';\nimport { buildGeometryDataRequest } from './requestBuilder';\nimport { parseGeometryDataResponse } from './responseParser';\n\nconst customize: {\n buildGeometryDataRequest: typeof buildGeometryDataRequest;\n parseGeometryDataResponse: typeof parseGeometryDataResponse;\n geometryDataTemplate: GeometryDataTemplate;\n} = {\n buildGeometryDataRequest,\n parseGeometryDataResponse,\n geometryDataTemplate,\n};\nexport default customize;\n","import { poiCategoriesToID } from '@tomtom-org/maps-sdk/core';\nimport { type ZodMiniObject, z } from 'zod/v4-mini';\nimport { commonPlacesParamsSchema } from '../shared/schema/commonPlacesParamsSchema';\n\nconst poiCategoriesToIdZodObject = z.object(poiCategoriesToID) as unknown as ZodMiniObject;\n\nconst searchExtraParamsOptional = z.partial(\n z.object({\n indexes: z.array(z.string()),\n poiCategories: z.array(z.union([z.number(), z.keyof(poiCategoriesToIdZodObject)])),\n poiBrands: z.array(z.string()),\n connectors: z.array(z.string()),\n fuelTypes: z.array(z.string()),\n openingHours: z.string(),\n timeZone: z.string(),\n relatedPois: z.string(),\n minPowerKW: z.number(),\n maxPowerKW: z.number(),\n minFuzzyLevel: z.number(),\n mixFuzzyLevel: z.number(),\n }),\n);\n\n/**\n * @ignore\n */\nexport const commonSearchParamsSchema = z.extend(commonPlacesParamsSchema, searchExtraParamsOptional.shape);\n","import { z } from 'zod/v4-mini';\nimport { commonSearchParamsSchema } from '../search/commonSearchParamsSchema';\nimport { featureCollectionSchema, geometrySchema } from '../shared/schema/geometriesSchema';\n\nconst geometrySearchRequestMandatory = z.object({\n geometries: z.array(z.union([featureCollectionSchema, geometrySchema])),\n});\n\n/**\n * @ignore\n */\nexport const geometrySearchRequestSchema = z.extend(commonSearchParamsSchema, geometrySearchRequestMandatory.shape);\n","import { bboxFromCoordsArray } from '@tomtom-org/maps-sdk/core';\nimport type { MultiPolygon, Position } from 'geojson';\nimport type { PostObject } from '../shared';\nimport { sampleWithinMaxLength } from '../shared/arrays';\nimport { positionToCSVLatLon } from '../shared/geometry';\nimport { appendCommonSearchParams, PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport type { GeometryAPI, GeometrySearchParams, GeometrySearchPayloadAPI, SearchGeometryInput } from './types';\n\nconst findFiftyLargestPolygons = (searchGeometry: MultiPolygon): Position[][][] => {\n // we calculate the size of each polygon based on bounding box (simplified)\n // we put it into a map for easy sorting\n // we sort the map by using size and keep only 50 largest polygons\n let polygonSizeMap = new Map<Position[][], number>();\n searchGeometry.coordinates.forEach((polygon) => {\n const bboxOfPolygon = bboxFromCoordsArray(polygon[0]);\n if (bboxOfPolygon) {\n const polygonSize = Math.abs((bboxOfPolygon[2] - bboxOfPolygon[0]) * (bboxOfPolygon[3] - bboxOfPolygon[1]));\n polygonSizeMap.set(polygon, polygonSize);\n }\n });\n polygonSizeMap = new Map([...polygonSizeMap.entries()].sort((a, b) => b[1] - a[1]).splice(0, 50));\n return [...polygonSizeMap.keys()];\n};\n\nconst sdkGeometryToApiGeometries = (searchGeometry: SearchGeometryInput): GeometryAPI[] => {\n switch (searchGeometry.type) {\n case 'Circle':\n return [\n {\n type: 'CIRCLE',\n radius: searchGeometry.radius,\n position: positionToCSVLatLon(searchGeometry.coordinates),\n },\n ];\n case 'Polygon':\n return [\n {\n type: 'POLYGON',\n vertices: sampleWithinMaxLength(searchGeometry.coordinates[0], 50).map((coord) =>\n positionToCSVLatLon(coord),\n ),\n },\n ];\n case 'MultiPolygon': {\n if (searchGeometry.coordinates.length > 50) {\n // we have too many polygons for the service to work\n return findFiftyLargestPolygons(searchGeometry).flatMap((polygonCoords) =>\n sdkGeometryToApiGeometries({ type: 'Polygon', coordinates: polygonCoords }),\n );\n }\n return searchGeometry.coordinates.flatMap((polygonCoords) =>\n sdkGeometryToApiGeometries({ type: 'Polygon', coordinates: polygonCoords }),\n );\n }\n case 'FeatureCollection':\n return searchGeometry.features.flatMap((feature) => sdkGeometryToApiGeometries(feature.geometry));\n default:\n // @ts-ignore\n throw new Error(`Type ${(searchGeometry as unknown).type} is not supported`);\n }\n};\n\nconst buildUrlBasePath = (mergedOptions: GeometrySearchParams): string =>\n mergedOptions.customServiceBaseURL ??\n `${mergedOptions.commonBaseURL}${PLACES_URL_PATH}/geometrySearch/${mergedOptions.query}.json`;\n\n/**\n * Default function for building a geometry search request from {@link GeometrySearchParams}\n * @param params The geometry search parameters, with global configuration already merged into them.\n */\nexport const buildGeometrySearchRequest = (params: GeometrySearchParams): PostObject<GeometrySearchPayloadAPI> => {\n const url = new URL(`${buildUrlBasePath(params)}`);\n appendCommonSearchParams(url, params);\n\n return {\n url,\n data: {\n geometryList: params.geometries.flatMap(sdkGeometryToApiGeometries),\n },\n };\n};\n","import { bboxFromGeoJSON, bboxOnlyIfWithArea } from '@tomtom-org/maps-sdk/core';\nimport { parseSearchAPIResult, parseSummaryAPI } from '../shared/searchResultParsing';\nimport type { GeometrySearchResponse, GeometrySearchResponseAPI } from './types';\n\n/**\n * Default function to parse a geometry search response.\n * @param apiResponse The API response.\n */\nexport const parseGeometrySearchResponse = (apiResponse: GeometrySearchResponseAPI): GeometrySearchResponse => {\n const features = apiResponse.results.map(parseSearchAPIResult);\n const bbox = bboxOnlyIfWithArea(bboxFromGeoJSON(features));\n return {\n type: 'FeatureCollection',\n properties: {\n ...parseSummaryAPI(apiResponse.summary),\n },\n features,\n ...(bbox && { bbox }),\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { post } from '../shared/fetch';\nimport { geometrySearchRequestSchema } from './geometrySearchRequestSchema';\nimport { buildGeometrySearchRequest } from './requestBuilder';\nimport { parseGeometrySearchResponse } from './responseParser';\nimport type {\n GeometrySearchParams,\n GeometrySearchRequestAPI,\n GeometrySearchResponse,\n GeometrySearchResponseAPI,\n} from './types';\n\n/**\n * Geometry search service template type.\n */\nexport type GeometrySearchTemplate = ServiceTemplate<\n GeometrySearchParams,\n GeometrySearchRequestAPI,\n GeometrySearchResponseAPI,\n GeometrySearchResponse\n>;\n\n/**\n * Geometry search service template main implementation.\n */\nexport const geometrySearchTemplate: GeometrySearchTemplate = {\n requestValidation: { schema: geometrySearchRequestSchema },\n buildRequest: buildGeometrySearchRequest,\n sendRequest: post,\n parseResponse: parseGeometrySearchResponse,\n};\n","import { callService } from '../shared/serviceTemplate';\nimport type { GeometrySearchTemplate } from './geometrySearchTemplate';\nimport { geometrySearchTemplate } from './geometrySearchTemplate';\nimport type { GeometrySearchParams, GeometrySearchResponse } from './types';\n\n/**\n * Search for places within specific geographic boundaries.\n *\n * The Geometry Search service finds places that fall within one or more defined areas,\n * such as polygons, circles, or corridors. This is essential for location-based filtering\n * and spatial queries where you need results constrained to specific regions.\n *\n * @remarks\n * Key features:\n * - **Area-based search**: Find places within polygons, circles, or along routes\n * - **Multiple geometries**: Search across several areas simultaneously\n * - **Precise boundaries**: Only returns results within the specified areas\n * - **Combined with text**: Filter by query text within the geometric boundaries\n * - **Category filtering**: Narrow results by POI categories\n *\n * Common use cases:\n * - **Route-based search**: \"Find gas stations along my route\"\n * - **Area filtering**: \"Restaurants within this neighborhood polygon\"\n * - **Corridor search**: \"Hotels within 5km of the highway\"\n * - **Service areas**: \"Stores within our delivery zone\"\n * - **Geofencing**: Places within administrative or custom boundaries\n *\n * @param params Geometry search parameters including geometries and optional query\n * @param customTemplate Advanced customization for request/response handling\n *\n * @returns Promise resolving to places within the specified geometries\n *\n * @example\n * ```typescript\n * // Search within a polygon (neighborhood boundaries)\n * const inArea = await geometrySearch({\n * key: 'your-api-key',\n * query: 'coffee shop',\n * geometries: [{\n * type: 'Polygon',\n * coordinates: [[\n * [4.88, 52.36],\n * [4.90, 52.36],\n * [4.90, 52.38],\n * [4.88, 52.38],\n * [4.88, 52.36]\n * ]]\n * }]\n * });\n *\n * // Find POIs along a route corridor\n * const alongRoute = await geometrySearch({\n * key: 'your-api-key',\n * query: 'gas station',\n * geometries: [routeLineString], // From calculateRoute result\n * geometryList: [{\n * position: 0,\n * radius: 5000 // 5km corridor along route\n * }]\n * });\n *\n * // Search multiple areas at once\n * const multiArea = await geometrySearch({\n * key: 'your-api-key',\n * query: 'pharmacy',\n * geometries: [polygonA, polygonB, polygonC],\n * limit: 20\n * });\n *\n * // Category search within geometry\n * const restaurants = await geometrySearch({\n * key: 'your-api-key',\n * categorySet: [7315], // Restaurant category\n * geometries: [cityBoundary]\n * });\n * ```\n *\n * @see [Geometry Search API Documentation](https://docs.tomtom.com/search-api/documentation/search-service/geometry-search)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Search Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/search)\n *\n * @ignore (exposed via 'search')\n */\nexport const geometrySearch = async (\n params: GeometrySearchParams,\n customTemplate?: Partial<GeometrySearchTemplate>,\n): Promise<GeometrySearchResponse> =>\n callService(params, { ...geometrySearchTemplate, ...customTemplate }, 'GeometrySearch');\n\nexport default geometrySearch;\n","import { geometrySearch } from './geometrySearch';\nimport type { GeometrySearchTemplate } from './geometrySearchTemplate';\nimport { geometrySearchTemplate } from './geometrySearchTemplate';\nimport { buildGeometrySearchRequest } from './requestBuilder';\nimport { parseGeometrySearchResponse } from './responseParser';\n\nconst customize: {\n geometrySearch: typeof geometrySearch;\n buildGeometrySearchRequest: typeof buildGeometrySearchRequest;\n parseGeometrySearchResponse: typeof parseGeometrySearchResponse;\n geometrySearchTemplate: GeometrySearchTemplate;\n} = {\n geometrySearch,\n buildGeometrySearchRequest,\n parseGeometrySearchResponse,\n geometrySearchTemplate,\n};\nexport default customize;\n","import { views } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\n\nconst placeByIdRequestMandatory = z.object({\n entityId: z.string(),\n});\n\nconst placeByIdRequestOptional = z.partial(\n z.object({\n mapcodes: z.array(z.string()),\n view: z.enum(views),\n openingHours: z.string(),\n timeZone: z.string(),\n relatedPois: z.string(),\n }),\n);\n\n/**\n * @ignore\n */\nexport const placeByIdRequestSchema = z.extend(placeByIdRequestMandatory, placeByIdRequestOptional.shape);\n","import type { CommonServiceParams } from '../shared';\nimport { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport {\n appendByJoiningParamValue,\n appendCommonParams,\n appendOptionalParam,\n} from '../shared/request/requestBuildingUtils';\nimport type { PlaceByIdParams } from './types';\n\nconst buildUrlBasePath = (params: CommonServiceParams): string =>\n params.customServiceBaseURL || `${params.commonBaseURL}${PLACES_URL_PATH}/place.json`;\n\n/**\n * Default method for building place by id request from {@link PlaceByIdParams}\n * @param params The place by id parameters, with global configuration already merged into them.\n */\nexport const buildPlaceByIdRequest = (params: PlaceByIdParams): URL => {\n const url = new URL(`${buildUrlBasePath(params)}`);\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n appendOptionalParam(urlParams, 'entityId', params.entityId);\n appendByJoiningParamValue(urlParams, 'mapcodes', params.mapcodes);\n appendOptionalParam(urlParams, 'view', params.view);\n appendOptionalParam(urlParams, 'openingHours', params.openingHours);\n appendOptionalParam(urlParams, 'timeZone', params.timeZone);\n appendOptionalParam(urlParams, 'relatedPois', params.relatedPois);\n return url;\n};\n","import { parseSearchAPIResult } from '../shared/searchResultParsing';\nimport type { PlaceByIdResponse, PlaceByIdResponseAPI } from './types';\n\n/**\n * Default method for parsing place by id response.\n * @param apiResponse The place by id response.\n */\nexport const parsePlaceByIdResponse = (apiResponse: PlaceByIdResponseAPI): PlaceByIdResponse =>\n apiResponse.results?.length ? parseSearchAPIResult(apiResponse.results[0]) : undefined;\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { placeByIdRequestSchema } from './placeByIdSchema';\nimport { buildPlaceByIdRequest } from './requestBuilder';\nimport { parsePlaceByIdResponse } from './responseParser';\nimport type { PlaceByIdParams, PlaceByIdResponse, PlaceByIdResponseAPI } from './types';\n\n/**\n * Place By Is template type.\n * @ignore\n */\nexport type PlaceByIdTemplate = ServiceTemplate<PlaceByIdParams, URL, PlaceByIdResponseAPI, PlaceByIdResponse>;\n\n/**\n * Place By Id template main implementation.\n * @ignore\n */\nexport const placeByIdTemplate: PlaceByIdTemplate = {\n requestValidation: { schema: placeByIdRequestSchema },\n buildRequest: buildPlaceByIdRequest,\n sendRequest: get,\n parseResponse: parsePlaceByIdResponse,\n};\n","import type { PlaceByIdTemplate } from './placeByIdTemplate';\nimport { placeByIdTemplate } from './placeByIdTemplate';\nimport { buildPlaceByIdRequest } from './requestBuilder';\nimport { parsePlaceByIdResponse } from './responseParser';\n\nconst customize: {\n buildPlaceByIdRequest: typeof buildPlaceByIdRequest;\n parsePlaceByIdResponse: typeof parsePlaceByIdResponse;\n placeByIdTemplate: PlaceByIdTemplate;\n} = {\n buildPlaceByIdRequest,\n parsePlaceByIdResponse,\n placeByIdTemplate,\n};\nexport default customize;\n","import type { Avoidable, TravelMode } from '@tomtom-org/maps-sdk/core';\nimport { VehicleParameters } from './vehicleParams';\n\n/**\n * Basic low/normal/high intensity level option.\n *\n * Used for configuring route characteristics like hilliness or windingness.\n *\n * @remarks\n * - `low`: Minimal intensity\n * - `normal`: Moderate intensity\n * - `high`: Maximum intensity\n *\n * @group Routing\n */\nexport type LNH = 'low' | 'normal' | 'high';\n\n// TODO: there is no slope data yet in Orbis, thus hilliness isn't supported yet\n// /**\n// * Options applicable to the thrilling route type.\n// */\n// export type ThrillingParams = {\n// /**\n// * The level of hilliness on a thrilling route.\n// * * Possible values: low, normal, high.\n// * * This parameter can only be used in conjunction with routeType thrilling.\n// * @default None\n// */\n// hilliness?: LNH;\n//\n// /**\n// * The level of windingness on a thrilling route.\n// *\n// * * Possible values: low, normal, high.\n// * * This parameter can only be used in conjunction with routeType thrilling.\n// * @default None\n// */\n// windingness?: LNH;\n// };\n\n/**\n * Available route types, where each type specifies the type of optimization used when calculating routes:\n * * **fast**: Route calculation is optimized by travel time, while keeping the routes sensible. For example, the calculation may avoid shortcuts along inconvenient side roads or long detours that only save very little time.\n * * **short**: Route calculation is optimized such that a good compromise between small travel time and short travel distance is achieved.\n * * **efficient**: Route calculation is optimized such that a good compromise between small travel time and low fuel or energy consumption is achieved.\n * * **thrilling**: Route calculation is optimized such that routes include interesting or challenging roads and use as few motorways as possible.\n * There is a limit of 900km on routes planned with routeType=thrilling.\n *\n * @group Routing\n */\nexport const routeTypes = ['fast', 'short', 'efficient', 'thrilling'] as const;\n\n/**\n * Route optimization strategy for route calculation.\n *\n * Determines what the routing engine optimizes for when calculating the route.\n * Each type produces different routes suited to different use cases.\n *\n * @remarks\n * **Route Type Strategies:**\n *\n * - **`fast`**: Minimize travel time while maintaining practicality\n * - Prefers major roads and highways\n * - Avoids unnecessary detours and shortcuts on minor roads\n * - Best for most everyday use cases (commuting, business travel)\n *\n * - **`short`**: Balance between time and distance\n * - Good compromise between speed and mileage\n * - May use smaller roads to save distance\n * - Useful for short trips or when fuel costs matter\n *\n * - **`efficient`**: Minimize fuel or energy consumption\n * - Optimizes for least energy use\n * - Considers vehicle consumption model\n * - Avoids rapid acceleration/deceleration\n * - Best used with vehicle consumption parameters\n *\n * - **`thrilling`**: Scenic and engaging routes\n * - Prefers curvy, interesting roads\n * - Minimizes motorway usage\n * - **Limited to 900km maximum route length**\n * - Ideal for motorcycle rides or scenic drives\n *\n * @example\n * ```typescript\n * // Fastest route for commuting\n * const routeType: RouteType = 'fast';\n *\n * // Most fuel-efficient route for long trip\n * const ecoRoute: RouteType = 'efficient';\n *\n * // Scenic route for leisure\n * const scenicRoute: RouteType = 'thrilling';\n * ```\n *\n * @group Routing\n */\nexport type RouteType = (typeof routeTypes)[number];\n\n/**\n * Traffic consideration mode for route calculation.\n *\n * Controls how traffic conditions are factored into routing and travel time estimates.\n *\n * @remarks\n * **Traffic Modes:**\n *\n * - **`live`**: Real-time + historical traffic\n * - Includes current traffic jams and incidents\n * - Considers short-term and long-term road closures\n * - Most accurate for immediate departures\n * - Updates with current conditions\n *\n * - **`historical`**: Typical traffic patterns only\n * - Based on historical data for time of day/week\n * - Ignores current traffic conditions\n * - Good for future trip planning\n * - More predictable for scheduled departures\n *\n * @example\n * ```typescript\n * // Route considering current traffic (departing now)\n * const trafficMode: TrafficInput = 'live';\n *\n * // Route based on typical patterns (planning ahead)\n * const plannedRoute: TrafficInput = 'historical';\n * ```\n *\n * @group Routing\n */\nexport type TrafficInput = 'live' | 'historical';\n\n/**\n * Cost model criteria for route optimization.\n *\n * Defines routing preferences and constraints that influence path selection.\n * Combines route type, traffic consideration, and avoidance criteria to determine\n * what makes a route \"better\" in the eyes of the routing engine.\n *\n * @remarks\n * The cost model affects how the route path is calculated, but does not affect what other data the response includes.\n *\n * The cost model balances multiple factors:\n * - Time efficiency\n * - Distance\n * - Fuel/energy consumption\n * - User preferences (avoid tolls, ferries, etc.)\n * - Traffic conditions\n *\n * @example\n * ```typescript\n * // Fast route avoiding tolls\n * const costModel: CostModel = {\n * routeType: 'fast',\n * traffic: 'live',\n * avoid: ['tollRoads']\n * };\n *\n * // Eco-friendly route avoiding highways\n * const ecoCostModel: CostModel = {\n * routeType: 'efficient',\n * traffic: 'historical',\n * avoid: ['motorways', 'ferries']\n * };\n *\n * // Scenic route for leisure\n * const scenicCostModel: CostModel = {\n * routeType: 'thrilling',\n * avoid: ['motorways', 'tollRoads']\n * };\n * ```\n *\n * @group Routing\n */\nexport type CostModel = {\n /**\n * Specifies something that the route calculation should try to avoid when determining the route.\n * @default None\n */\n avoid?: Avoidable[];\n\n /**\n * Decides how traffic is considered for computing routes.\n *\n * Possible values are:\n * * live: In addition to historical travel times, routing and estimated travel time\n * consider traffic jams and short- and long-term closures during the travel time window.\n * * historical: Routing and estimated travel time consider historical travel times and long term closures.\n * Traffic jams and short-term closures during the travel time window do not influence routing or travel time.\n *\n * @default live\n *\n * @remarks\n * This setting does not affect whether live traffic is included in the response or not.\n * * Considering historical traffic in cost model does not mean live traffic is not included in the response.\n */\n traffic?: TrafficInput;\n\n /**\n * Specifies the type of optimization used when calculating routes.\n * Possible values are:\n *\n * * **fast**: Route calculation is optimized by travel time, while keeping the routes sensible. For example, the calculation may avoid shortcuts along inconvenient side roads or long detours that only save very little time.\n * * **short**: Route calculation is optimized such that a good compromise between small travel time and short travel distance is achieved.\n * * **efficient**: Route calculation is optimized such that a good compromise between small travel time and low fuel or energy consumption is achieved.\n * * **thrilling**: Route calculation is optimized such that routes include interesting or challenging roads and use as few motorways as possible.\n * There is a limit of 900km on routes planned with routeType=thrilling.\n * @default fast\n */\n routeType?: RouteType;\n\n /**\n * Optional parameters if the route type is \"thrilling\" to indicate how curvy and hilly the route should be.\n */\n // TODO not supported yet in Orbis (no slope data)\n // thrillingParams?: ThrillingParams;\n};\n\ntype DepartArriveOption = 'departAt' | 'arriveBy';\n\n/**\n * Departure or arrival time specification for route planning.\n *\n * Allows specifying either when to depart from the origin or when to arrive at the destination.\n * The routing engine calculates the route optimized for that specific time window, considering\n * traffic patterns for that time of day.\n *\n * @typeParam Option - Whether this specifies departure or arrival time\n *\n * @remarks\n * Traffic conditions vary significantly by:\n * - Time of day (rush hour vs off-peak)\n * - Day of week (weekday vs weekend)\n * - Special events or holidays\n *\n * Specifying a departure or arrival time enables the router to:\n * - Use appropriate traffic data for that time\n * - Plan around rush hour or quiet periods\n * - Calculate accurate arrival/departure times\n * - Account for time-dependent road restrictions\n *\n * **Important Notes:**\n * - Times are processed in the timezone of the origin/destination\n *\n * @example\n * ```typescript\n * // Depart at specific time (morning commute)\n * const departParams: DepartArriveParams = {\n * option: 'departAt',\n * date: new Date('2025-10-20T08:00:00Z')\n * };\n *\n * // Arrive by specific time (catch a flight)\n * const arriveParams: DepartArriveParams = {\n * option: 'arriveBy',\n * date: new Date('2025-10-20T14:00:00Z')\n * };\n *\n * // Plan route avoiding rush hour\n * const offPeakDepart: DepartArriveParams = {\n * option: 'departAt',\n * date: new Date('2025-10-20T10:30:00Z') // After morning rush\n * };\n * ```\n *\n * @group Routing\n */\nexport type DepartArriveParams<Option extends DepartArriveOption = DepartArriveOption> = {\n /**\n * Whether to specify a departure or arrival time.\n *\n * @remarks\n * - `departAt`: Calculate route from this departure time forward\n * - `arriveBy`: Calculate route backward to arrive by this time\n */\n option: Option;\n\n /**\n * The date and time to depart or arrive.\n *\n * @remarks\n * If past dates are supplied or dates that are impossible to achieve\n * (e.g., an imminent arrival date for a very long route), the system\n * will default to departing immediately.\n *\n * Times should be specified in ISO 8601 format or as JavaScript Date objects.\n */\n date: Date;\n};\n\n/**\n * Common parameters shared across all routing service requests.\n *\n * These parameters configure how routes are calculated, including optimization\n * strategy, vehicle characteristics, timing constraints, and travel preferences.\n * They provide a consistent interface across different routing services.\n *\n * @remarks\n * Most routing services (calculateRoute, calculateMatrixRoute, calculateReachableRange)\n * accept these parameters to customize route calculation. They control:\n * - What to optimize for (time, distance, fuel)\n * - Vehicle constraints and capabilities\n * - When to travel (affecting traffic)\n * - What features to avoid\n * - Mode of transportation\n *\n * **Service Compatibility:**\n * - {@link calculateRoute}: All parameters supported\n * - {@link calculateMatrixRoute}: Subset of parameters\n * - {@link calculateReachableRange}: Subset of parameters\n *\n * @example\n * ```typescript\n * // Standard car route avoiding tolls\n * const routingParams: CommonRoutingParams = {\n * costModel: {\n * routeType: 'fast',\n * traffic: 'live',\n * avoid: ['tollRoads']\n * },\n * travelMode: 'car',\n * when: {\n * option: 'departAt',\n * date: new Date('2025-10-20T08:00:00Z')\n * }\n * };\n *\n * // Electric vehicle route with consumption model\n * const evRoutingParams: CommonRoutingParams = {\n * costModel: {\n * routeType: 'efficient',\n * traffic: 'live'\n * },\n * travelMode: 'car',\n * vehicle: {\n * engineType: 'electric',\n * model: {\n * dimensions: {\n * weightKG: 2000\n * },\n * engine: {\n * consumption: {\n * speedToConsumption: [\n * { speedKMH: 50, consumptionUnitsPer100KM: 15 },\n * { speedKMH: 90, consumptionUnitsPer100KM: 18 },\n * { speedKMH: 120, consumptionUnitsPer100KM: 22 }\n * ]\n * }\n * }\n * },\n * state: {\n * currentChargeInkWh: 60\n * }\n * }\n * };\n *\n * // Truck route with restrictions\n * const truckParams: CommonRoutingParams = {\n * costModel: {\n * routeType: 'short',\n * avoid: ['tollRoads', 'ferries']\n * },\n * travelMode: 'truck',\n * vehicle: {\n * model: {\n * dimensions: {\n * lengthMeters: 16.5,\n * widthMeters: 2.5,\n * heightMeters: 4.0,\n * weightKG: 40000\n * },\n * restrictions: {\n * restrictions: {\n * commercial: true,\n * maxSpeedKMH: 90\n * }\n * }\n * }\n * }\n * };\n * ```\n *\n * @see [Common Routing Parameters Documentation](https://docs.tomtom.com/routing-api/documentation/routing/common-routing-parameters)\n *\n * @group Routing\n */\nexport type CommonRoutingParams = {\n /**\n * Criteria that specifies what paths to prefer during routing.\n */\n costModel?: CostModel;\n\n /**\n * The primary means of transportation to be used while routing.\n *\n * The travel mode for the requested route.\n * Note that the requested travelMode may not be available for the entire route. Where\n * the requested travelMode is not available for a particular section, the element of the\n * response for that section will be 'other'.\n * @default None\n */\n travelMode?: TravelMode;\n\n /**\n * Specifies when to depart or arrive.\n * If past dates are supplied or in a way that are impossible to achieve\n * (e.g. an imminent arrival date for a long route), then it will default to departing now.\n * @default depart now\n */\n when?: DepartArriveParams;\n\n /**\n * Parameters for the vehicle that will be used to drive the route.\n */\n vehicle?: VehicleParameters;\n\n /**\n * The version of the API to use.\n * * The SDK will use the right default when not specified.\n * * Use it only if you really need to target a specific API version.\n */\n apiVersion?: number;\n};\n","/**\n * Known hazardous truck load types. Should be used for trucks carrying hazardous materials.\n */\nexport const loadTypes = [\n 'USHazmatClass1',\n 'USHazmatClass2',\n 'USHazmatClass3',\n 'USHazmatClass4',\n 'USHazmatClass5',\n 'USHazmatClass6',\n 'USHazmatClass7',\n 'USHazmatClass8',\n 'USHazmatClass9',\n 'otherHazmatExplosive',\n 'otherHazmatGeneral',\n 'otherHazmatHarmfulToWater',\n] as const;\n\n/**\n * Known hazardous truck load types. Should be used for trucks carrying hazardous materials.\n *\n * Use these values for routing in the USA:\n * * USHazmatClass1: Explosives\n * * USHazmatClass2: Compressed gas\n * * USHazmatClass3: Flammable liquids\n * * USHazmatClass4: Flammable solids\n * * USHazmatClass5: Oxidizers\n * * USHazmatClass6: Poisons\n * * USHazmatClass7: Radioactive\n * * USHazmatClass8: Corrosives\n * * USHazmatClass9: Miscellaneous\n *\n * Use these values for routing in all other countries:\n * * otherHazmatExplosive: Explosives\n * * otherHazmatGeneral: Miscellaneous\n * * otherHazmatHarmfulToWater: Harmful to water\n */\nexport type LoadType = (typeof loadTypes)[number];\n\n/**\n * Parameters for a vehicle which are related to restrictions (e.g. related to the cargo and purpose of the vehicle).\n */\nexport type VehicleRestrictions = {\n /**\n * Vehicle restrictions including load types, speed limits, ADR codes, and commercial usage.\n */\n restrictions?: {\n /**\n * Specifies types of cargo that may be classified as hazardous materials and are restricted from some roads.\n */\n loadTypes?: LoadType[];\n /**\n * Maximum speed of the vehicle in kilometers/hour.\n * * Must have a value in the range [0, 250].\n * * A value of 0 means that an appropriate value for the vehicle will be determined and applied during route planning.\n *\n * @default 0\n */\n maxSpeedKMH?: number;\n /**\n * Subjects the vehicle to ADR tunnel restrictions.\n * * Vehicles with code B are restricted from roads with ADR tunnel categories B, C, D, and E.\n * * Vehicles with code C are restricted from roads with ADR tunnel categories C, D, and E.\n * * Vehicles with code D are restricted from roads with ADR tunnel categories D and E.\n * * Vehicles with code E are restricted from roads with ADR tunnel category E.\n *\n * Notes:\n * If travelMode is pedestrian or bicycle, adrCode is not considered.\n * The adrCode and loadType parameters are independent; please provide both if applicable.\n * @see https://unece.org/about-adr\n */\n adrCode?: 'B' | 'C' | 'D' | 'E';\n /**\n *\n * The vehicle is used for commercial purposes (big letters on the side) and thus may not be allowed to drive on some roads.\n * This restriction is applicable only in some countries (e.g. US).\n *\n * @default false\n */\n commercial?: boolean;\n };\n};\n","import { currentTypes, plugTypes } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { loadTypes } from '../types/vehicleRestrictionParams';\n\n// Common validation schemas\nconst positiveNumber = z.number().check(z.positive());\nconst nonNegativeNumber = z.number().check(z.minimum(0));\nconst percentageNumber = z.number().check(z.minimum(0), z.maximum(100));\n\n// Common optional schemas\nconst optionalPositiveNumber = z.optional(positiveNumber);\nconst optionalNonNegativeNumber = z.optional(nonNegativeNumber);\nconst optionalNormalizedNumber = z.optional(z.number().check(z.minimum(0), z.maximum(1)));\n\n// Speed to consumption rate schema\nconst speedToConsumptionRateSchema = z.object({\n speedKMH: z.number(),\n consumptionUnitsPer100KM: z.number(),\n});\n\n// Efficiency schema for consumption models\nconst efficiencySchema = z.optional(\n z.object({\n acceleration: optionalNormalizedNumber,\n deceleration: optionalNormalizedNumber,\n uphill: optionalNormalizedNumber,\n downhill: optionalNormalizedNumber,\n }),\n);\n\n// Base consumption model schema\nconst baseConsumptionModelSchema = {\n efficiency: efficiencySchema,\n};\n\n// Consumption array validation\nconst speedConsumptionArray = z.array(speedToConsumptionRateSchema).check(z.minLength(1), z.maxLength(25));\n\n// Combustion consumption model schema\nconst combustionConsumptionModelSchema = z.object({\n ...baseConsumptionModelSchema,\n speedsToConsumptionsLiters: speedConsumptionArray,\n auxiliaryPowerInLitersPerHour: optionalNonNegativeNumber,\n fuelEnergyDensityInMJoulesPerLiter: z.optional(z.number().check(z.minimum(1))),\n});\n\n// Electric consumption model schema\nconst electricConsumptionModelSchema = z.object({\n ...baseConsumptionModelSchema,\n speedsToConsumptionsKWH: speedConsumptionArray,\n auxiliaryPowerInkW: optionalNonNegativeNumber,\n consumptionInKWHPerKMAltitudeGain: z.optional(z.number().check(z.maximum(500))),\n recuperationInKWHPerKMAltitudeLoss: optionalNonNegativeNumber,\n});\n\n// Charging connector schema\nconst chargingConnectorSchema = z.object({\n currentType: z.enum(currentTypes),\n plugTypes: z.array(z.enum(plugTypes)).check(z.minLength(1)),\n efficiency: optionalNormalizedNumber,\n baseLoadInkW: optionalNonNegativeNumber,\n maxPowerInkW: optionalNonNegativeNumber,\n maxVoltageInV: optionalNonNegativeNumber,\n maxCurrentInA: optionalNonNegativeNumber,\n voltageRange: z.optional(\n z.object({\n minVoltageInV: optionalNonNegativeNumber,\n maxVoltageInV: z.optional(z.number()),\n }),\n ),\n});\n\n// Battery curve schema\nconst batteryCurveSchema = z.object({\n stateOfChargeInkWh: nonNegativeNumber,\n maxPowerInkW: positiveNumber,\n});\n\n// Charging model schema\nconst chargingModelSchema = z.object({\n maxChargeKWH: positiveNumber,\n batteryCurve: z.optional(z.array(batteryCurveSchema).check(z.maxLength(20))),\n chargingConnectors: z.optional(z.array(chargingConnectorSchema).check(z.minLength(1))),\n chargingTimeOffsetInSec: optionalNonNegativeNumber,\n});\n\n// Engine model schemas\nconst combustionEngineModelSchema = z.object({ consumption: combustionConsumptionModelSchema });\nconst electricEngineModelSchema = z.object({\n consumption: electricConsumptionModelSchema,\n charging: z.optional(chargingModelSchema),\n});\n\n// Vehicle dimensions schema\nconst vehicleDimensionsSchema = z.optional(\n z.object({\n lengthMeters: optionalPositiveNumber,\n widthMeters: optionalPositiveNumber,\n heightMeters: optionalPositiveNumber,\n weightKG: optionalPositiveNumber,\n axleWeightKG: optionalPositiveNumber,\n }),\n);\n\n// Vehicle model schemas\nconst predefinedVehicleModelSchema = z.object({ variantId: z.string() });\nconst explicitVehicleModelSchema = z.object({\n dimensions: vehicleDimensionsSchema,\n engine: z.optional(z.union([combustionEngineModelSchema, electricEngineModelSchema])),\n});\nconst vehicleModelSchema = z.optional(z.union([predefinedVehicleModelSchema, explicitVehicleModelSchema]));\n\n// Vehicle state schemas\nconst genericVehicleStateSchema = z.object({\n heading: z.optional(z.number().check(z.minimum(0), z.maximum(360))),\n});\n\nconst combustionVehicleStateSchema = z.extend(\n genericVehicleStateSchema,\n z.object({ currentFuelInLiters: nonNegativeNumber }).shape,\n);\n\nconst electricVehicleStateByPercentageSchema = z.extend(\n genericVehicleStateSchema,\n z.object({ currentChargePCT: percentageNumber }).shape,\n);\n\nconst electricVehicleStateByKwhSchema = z.extend(\n genericVehicleStateSchema,\n z.object({ currentChargeInkWh: nonNegativeNumber }).shape,\n);\n\nconst electricVehicleStateSchema = z.union([electricVehicleStateByPercentageSchema, electricVehicleStateByKwhSchema]);\n\n// Charging preferences schemas\nconst chargingPreferencesPCTSchema = z.object({\n minChargeAtDestinationPCT: percentageNumber,\n minChargeAtChargingStopsPCT: z.number().check(z.minimum(0), z.maximum(50)),\n});\n\nconst chargingPreferencesKWHSchema = z.object({\n minChargeAtDestinationInkWh: nonNegativeNumber,\n minChargeAtChargingStopsInkWh: nonNegativeNumber,\n});\n\nconst chargingPreferencesSchema = z.union([chargingPreferencesPCTSchema, chargingPreferencesKWHSchema]);\nconst electricVehiclePreferencesSchema = z.object({\n chargingPreferences: z.optional(chargingPreferencesSchema),\n});\n\n// Vehicle restrictions schema\nconst vehicleRestrictionsSchema = z.optional(\n z.object({\n loadTypes: z.optional(z.array(z.enum(loadTypes))),\n maxSpeedKMH: z.optional(z.number().check(z.minimum(0), z.maximum(250))),\n adrCode: z.optional(z.enum(['B', 'C', 'D', 'E'])),\n commercial: z.optional(z.boolean()),\n }),\n);\n\n// Base vehicle parameters schema\nconst baseVehicleParamsSchema = {\n model: vehicleModelSchema,\n restrictions: vehicleRestrictionsSchema,\n};\n\n// Vehicle parameters schemas\nconst genericVehicleParamsSchema = z.object({\n ...baseVehicleParamsSchema,\n engineType: z.undefined(),\n state: z.optional(genericVehicleStateSchema),\n preferences: z.optional(z.object({})),\n});\n\nconst combustionVehicleParamsSchema = z.object({\n ...baseVehicleParamsSchema,\n engineType: z.literal('combustion'),\n state: z.optional(combustionVehicleStateSchema),\n preferences: z.optional(z.object({})),\n});\n\nconst electricVehicleParamsSchema = z.object({\n ...baseVehicleParamsSchema,\n engineType: z.literal('electric'),\n state: z.optional(electricVehicleStateSchema),\n preferences: z.optional(electricVehiclePreferencesSchema),\n});\n\n/**\n * @ignore\n */\nexport const vehicleParametersSchema = z.union([\n z.discriminatedUnion('engineType', [combustionVehicleParamsSchema, electricVehicleParamsSchema]),\n genericVehicleParamsSchema,\n]);\n","import { avoidableTypes } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { routeTypes } from '../types/commonRoutingParams';\nimport { vehicleParametersSchema } from './vehicleParamsSchema';\n\n/**\n * @ignore\n */\nexport const commonRoutingRequestSchema = z.partial(\n z.object({\n costModel: z.partial(\n z.object({\n avoid: z.array(z.enum(avoidableTypes)),\n traffic: z.optional(z.enum(['live', 'historical'])),\n routeType: z.optional(z.enum(routeTypes)),\n thrillingParams: z.optional(\n z.object({\n hilliness: z.optional(z.enum(['low', 'normal', 'high'])),\n windingness: z.optional(z.enum(['low', 'normal', 'high'])),\n }),\n ),\n }),\n ),\n travelMode: z.string(),\n vehicle: vehicleParametersSchema,\n when: z.object({\n option: z.enum(['departAt', 'arriveBy']),\n date: z.date(),\n }),\n }),\n);\n","import { z } from 'zod/v4-mini';\nimport { commonRoutingRequestSchema } from '../shared/schema/commonRoutingRequestSchema';\nimport { hasLngLatSchema } from '../shared/schema/geometriesSchema';\nimport { budgetTypes } from './types/reachableRangeParams';\n\n// import { SchemaRefinement } from \"../shared/types/validation\";\n\nconst reachableRangeRequestSchemaMandatory = z.object({\n origin: hasLngLatSchema,\n budget: z.object({\n type: z.enum(budgetTypes),\n value: z.number().check(z.minimum(0)),\n }),\n});\n\nconst reachableRangeRequestSchemaOptional = z.object({\n maxFerryLengthMeters: z.optional(z.number().check(z.minimum(0))),\n});\n\nconst reachableRangeRequestSchema = z.extend(\n commonRoutingRequestSchema,\n z.extend(reachableRangeRequestSchemaMandatory, reachableRangeRequestSchemaOptional.shape).shape,\n);\n\n// const departArriveRefinement: SchemaRefinement<ReachableRangeParams> = {\n// check: (data: ReachableRangeParams): boolean => (data.when?.option as string) != \"arriveBy\",\n// message: \"When calculating a reachable range, departure date-time can be specified, but not arrival date-time\"\n// };\n\n// const evRangeRefinement: SchemaRefinement<ReachableRangeParams> = {\n// check: (data: ReachableRangeParams): boolean =>\n// !(\n// (data.budget.type === \"remainingChargeCPT\" || data.budget.type === \"spentChargePCT\") &&\n// data.vehicle?.engine?.type != \"electric\"\n// ),\n// message: \"With an EV reachable range, the vehicle parameters must be set, with 'electric' engine type\"\n// };\n//\n// const fuelRangeRefinement: SchemaRefinement<ReachableRangeParams> = {\n// check: (data: ReachableRangeParams): boolean =>\n// !(data.budget.type === \"spentFuelLiters\" && data.vehicle?.engine?.type != \"combustion\"),\n// message: \"With a fuel reachable range, the vehicle parameters must be set, with 'combustion' engine type\"\n// };\n\n/**\n * @ignore\n */\nexport const reachableRangeRequestValidationConfig = {\n schema: reachableRangeRequestSchema,\n // refinements: [evRangeRefinement, fuelRangeRefinement, departArriveRefinement]\n};\n","import type { HasLngLat } from '@tomtom-org/maps-sdk/core';\nimport type { CommonRoutingParams, CommonServiceParams, DepartArriveParams } from '../../shared';\nimport type { ReachableRangeResponseAPI } from './apiResponseTypes';\n\nexport const budgetTypes = [\n 'timeMinutes',\n 'remainingChargeCPT',\n 'spentChargePCT',\n 'spentFuelLiters',\n 'distanceKM',\n] as const;\n\n/**\n * Type of budget constraint for reachable range calculation.\n *\n * @remarks\n * **Budget Types:**\n * - `timeMinutes`: Travel time in minutes (isochrone)\n * - `distanceKM`: Travel distance in kilometers (isodistance)\n * - `remainingChargeCPT`: Remaining battery charge in percentage (EV)\n * - `spentChargePCT`: Battery charge consumed in percentage (EV)\n * - `spentFuelLiters`: Fuel consumed in liters (combustion)\n *\n * **Common Use Cases:**\n * - Time: \"Where can I reach in 30 minutes?\"\n * - Distance: \"What's within 10 km?\"\n * - EV charge: \"How far can I go on 50% battery?\"\n * - Fuel: \"Range with 20 liters of fuel\"\n *\n * @example\n * ```typescript\n * const timeType: BudgetType = 'timeMinutes';\n * const distanceType: BudgetType = 'distanceKM';\n * const evType: BudgetType = 'remainingChargeCPT';\n * ```\n *\n * @group Reachable Range\n */\nexport type BudgetType = (typeof budgetTypes)[number];\n\n/**\n * Budget constraint for reachable range calculation.\n *\n * Defines the limit (time, distance, or fuel/charge) for calculating\n * how far you can travel from a starting point.\n *\n * @remarks\n * **Use Cases:**\n * - Service area visualization (30-min delivery zone)\n * - EV range anxiety mitigation (show reachable area)\n * - Emergency response coverage (10-min response time)\n * - Delivery zone planning\n * - Store location analysis\n *\n * @example\n * ```typescript\n * // 30-minute travel time\n * const timeBudget: ReachableRangeBudget = {\n * type: 'timeMinutes',\n * value: 30\n * };\n *\n * // 50 km distance\n * const distanceBudget: ReachableRangeBudget = {\n * type: 'distanceKM',\n * value: 50\n * };\n *\n * // 50% battery remaining\n * const evBudget: ReachableRangeBudget = {\n * type: 'remainingChargeCPT',\n * value: 50\n * };\n *\n * // 20 liters of fuel\n * const fuelBudget: ReachableRangeBudget = {\n * type: 'spentFuelLiters',\n * value: 20\n * };\n * ```\n *\n * @group Reachable Range\n */\nexport type ReachableRangeBudget = {\n /**\n * The type of budget, including units.\n *\n * @remarks\n * - `timeMinutes`: Minutes of travel time\n * - `distanceKM`: Kilometers of travel distance\n * - `remainingChargeCPT`: Battery percentage remaining\n * - `spentChargePCT`: Battery percentage consumed\n * - `spentFuelLiters`: Liters of fuel consumed\n */\n type: BudgetType;\n\n /**\n * The value of the budget based on the units mentioned in the type.\n *\n * @remarks\n * **Typical Values:**\n * - Time: 5-60 minutes\n * - Distance: 5-100 km\n * - Charge: 10-100 percentage\n * - Fuel: 5-50 liters\n *\n * @example\n * ```typescript\n * value: 30 // 30 minutes/km/percent/liters depending on type\n * value: 15.5 // Decimal values supported\n * ```\n */\n value: number;\n};\n\n/**\n * Parameters specific to reachable range calculation.\n *\n * @remarks\n * These parameters are combined with common routing parameters to calculate\n * the reachable area from a starting point.\n *\n * @group Reachable Range\n */\nexport type ReachableRangeOwnParams = {\n /**\n * Location from which the range calculation should start.\n *\n * @remarks\n * The center point from which reachability is calculated. Can be:\n * - An object with `lon` and `lat` properties\n * - An array `[longitude, latitude]`\n *\n * @example\n * ```typescript\n * // Object format\n * origin: { lon: 4.9, lat: 52.3 }\n *\n * // Array format\n * origin: [4.9, 52.3]\n * ```\n */\n origin: HasLngLat;\n\n /**\n * The budget for the reachable range calculation.\n *\n * @remarks\n * Consists of a type indicating whether it's about time, distance, or\n * fuel/charge and the units, plus its value.\n *\n * Determines the extent of the reachable area polygon.\n */\n budget: ReachableRangeBudget;\n\n /**\n * Maximum ferry length in meters to consider.\n *\n * @remarks\n * Ferries longer than this value will be avoided in the calculation.\n * Useful for excluding long ferry routes that might extend the range\n * unrealistically.\n *\n * @example\n * ```typescript\n * maxFerryLengthMeters: 5000 // Avoid ferries longer than 5 km\n * ```\n */\n maxFerryLengthMeters?: number;\n\n /**\n * Specifies when to depart.\n *\n * @remarks\n * If past dates are supplied or dates that are impossible to achieve,\n * it will default to departing now.\n *\n * **Traffic Impact:**\n * - Future departure times use predictive traffic\n * - Current time uses live traffic\n * - Historic times use historical patterns\n *\n * @default Depart now\n *\n * @example\n * ```typescript\n * when: { departAt: new Date('2025-10-20T08:00:00Z') }\n * when: { departAt: 'now' }\n * ```\n */\n when?: DepartArriveParams<'departAt'>;\n};\n\n/**\n * Complete parameters for calculating a reachable range.\n *\n * Combines common service parameters, routing parameters, and reachable range\n * specific options to compute an isochrone or isodistance polygon.\n *\n * @remarks\n * **What it Returns:**\n * A polygon representing the area reachable from the origin within the\n * specified budget (time, distance, or fuel/charge).\n *\n * **Use Cases:**\n * - Delivery zone visualization\n * - Service area mapping\n * - Emergency response coverage\n * - EV range display\n * - Store catchment areas\n * - Real estate search (30-min commute)\n *\n * **Traffic Consideration:**\n * Results vary based on departure time and traffic conditions. Use\n * appropriate `when` values for accurate predictions.\n *\n * @example\n * ```typescript\n * // 30-minute driving range\n * const params: ReachableRangeParams = {\n * key: 'your-api-key',\n * origin: [4.9, 52.3],\n * budget: {\n * type: 'timeMinutes',\n * value: 30\n * },\n * routeType: 'fastest',\n * traffic: 'live',\n * when: { departAt: 'now' }\n * };\n *\n * // 50 km distance range\n * const distanceParams: ReachableRangeParams = {\n * key: 'your-api-key',\n * origin: [4.9, 52.3],\n * budget: {\n * type: 'distanceKM',\n * value: 50\n * }\n * };\n *\n * // EV range with 50% battery\n * const evParams: ReachableRangeParams = {\n * key: 'your-api-key',\n * origin: [4.9, 52.3],\n * budget: {\n * type: 'remainingChargeCPT',\n * value: 50\n * },\n * vehicle: {\n * engineType: 'electric',\n * model: {\n * engine: {\n * consumption: {\n * charging: { maxChargeKWH: 100 }\n * }\n * }\n * },\n * state: {\n * currentChargePCT: 80\n * }\n * }\n * };\n *\n * // Avoid toll roads\n * const noTollParams: ReachableRangeParams = {\n * key: 'your-api-key',\n * origin: [4.9, 52.3],\n * budget: {\n * type: 'timeMinutes',\n * value: 45\n * },\n * avoid: ['tollRoads']\n * };\n * ```\n *\n * @group Reachable Range\n */\nexport type ReachableRangeParams = CommonServiceParams<URL, ReachableRangeResponseAPI> &\n CommonRoutingParams &\n ReachableRangeOwnParams;\n","import { isNil } from 'lodash-es';\nimport {\n CombustionEngineModel,\n ConsumptionModelEfficiency,\n ElectricConsumptionModel,\n ElectricEngineModel,\n SpeedToConsumptionRate,\n VehicleEngineModel,\n VehicleEngineType,\n} from '../types/vehicleEngineParams';\nimport { VehicleDimensions } from '../types/vehicleModel';\nimport { ElectricVehicleParams, VehicleParameters } from '../types/vehicleParams';\nimport { ChargingPreferencesKWH, ChargingPreferencesPCT } from '../types/vehiclePreferences';\nimport { ElectricVehicleStateKWH, ElectricVehicleStatePCT, VehicleState } from '../types/vehicleState';\nimport { appendByRepeatingParamName } from './requestBuildingUtils';\n\nconst appendConsumptionEfficiency = (urlParams: URLSearchParams, efficiency?: ConsumptionModelEfficiency): void => {\n if (efficiency) {\n !isNil(efficiency.acceleration) && urlParams.append('accelerationEfficiency', String(efficiency.acceleration));\n !isNil(efficiency.deceleration) && urlParams.append('decelerationEfficiency', String(efficiency.deceleration));\n !isNil(efficiency.uphill) && urlParams.append('uphillEfficiency', String(efficiency.uphill));\n !isNil(efficiency.downhill) && urlParams.append('downhillEfficiency', String(efficiency.downhill));\n }\n};\n\n// e.g. 50,6.3:130,11.5\nconst buildSpeedToConsumptionString = (speedsToConsumptions: SpeedToConsumptionRate[]): string =>\n speedsToConsumptions\n .map((speedToConsumption) => `${speedToConsumption.speedKMH},${speedToConsumption.consumptionUnitsPer100KM}`)\n .join(':');\n\nconst appendCombustionEngine = (urlParams: URLSearchParams, engine: CombustionEngineModel): void => {\n // (no need to append combustion vehicleEngineType since it's the default)\n const consumptionModel = engine.consumption;\n consumptionModel.speedsToConsumptionsLiters &&\n urlParams.append(\n 'constantSpeedConsumptionInLitersPerHundredkm',\n buildSpeedToConsumptionString(consumptionModel.speedsToConsumptionsLiters),\n );\n !isNil(consumptionModel.auxiliaryPowerInLitersPerHour) &&\n urlParams.append('auxiliaryPowerInLitersPerHour', String(consumptionModel.auxiliaryPowerInLitersPerHour));\n !isNil(consumptionModel.fuelEnergyDensityInMJoulesPerLiter) &&\n urlParams.append(\n 'fuelEnergyDensityInMJoulesPerLiter',\n String(consumptionModel.fuelEnergyDensityInMJoulesPerLiter),\n );\n};\n\nconst appendElectricConsumptionModel = (urlParams: URLSearchParams, model: ElectricConsumptionModel): void => {\n model.speedsToConsumptionsKWH &&\n urlParams.append(\n 'constantSpeedConsumptionInkWhPerHundredkm',\n buildSpeedToConsumptionString(model.speedsToConsumptionsKWH),\n );\n !isNil(model.auxiliaryPowerInkW) && urlParams.append('auxiliaryPowerInkW', String(model.auxiliaryPowerInkW));\n !isNil(model.consumptionInKWHPerKMAltitudeGain) &&\n urlParams.append('consumptionInkWhPerkmAltitudeGain', String(model.consumptionInKWHPerKMAltitudeGain));\n !isNil(model.recuperationInKWHPerKMAltitudeLoss) &&\n urlParams.append('recuperationInkWhPerkmAltitudeLoss', String(model.recuperationInKWHPerKMAltitudeLoss));\n};\n\nconst appendChargingModel = (urlParams: URLSearchParams, engine: ElectricEngineModel): void => {\n const chargingModel = engine.charging;\n if (chargingModel?.maxChargeKWH) {\n urlParams.append('maxChargeInkWh', String(chargingModel.maxChargeKWH));\n }\n // (the rest of the charging model goes as POST data)\n};\n\nconst appendVehicleState = (urlParams: URLSearchParams, vehicleParams: VehicleParameters): void => {\n if (!vehicleParams.state) {\n return;\n }\n\n // Generic state props:\n vehicleParams.state.heading && urlParams.append('vehicleHeading', String(vehicleParams.state.heading));\n\n if (!('engineType' in vehicleParams)) {\n // Generic vehicle, no engine-specific state to append:\n return;\n }\n\n // Engine-specific state props:\n if (vehicleParams.engineType === 'combustion') {\n const combustionState: VehicleState<'combustion'> = vehicleParams.state;\n combustionState.currentFuelInLiters &&\n urlParams.append('currentFuelInLiters', String(combustionState.currentFuelInLiters));\n } else if (vehicleParams.engineType === 'electric') {\n const electricState: VehicleState<'electric'> = vehicleParams.state;\n const kwhElectricState = electricState as ElectricVehicleStateKWH;\n const pctElectricState = electricState as ElectricVehicleStatePCT;\n\n if (kwhElectricState.currentChargeInkWh) {\n urlParams.append('currentChargeInkWh', String(kwhElectricState.currentChargeInkWh));\n } else if (\n pctElectricState.currentChargePCT &&\n vehicleParams.model &&\n 'engine' in vehicleParams.model &&\n vehicleParams.model.engine\n ) {\n const engine = vehicleParams.model.engine;\n const maxChargeKWH = engine.charging?.maxChargeKWH;\n if (maxChargeKWH) {\n // currentChargePCT needs maxChargeKWH to be converted to kWh\n urlParams.append(\n 'currentChargeInkWh',\n String((maxChargeKWH * pctElectricState.currentChargePCT) / 100),\n );\n }\n }\n }\n};\n\nconst appendVehiclePreferences = (urlParams: URLSearchParams, vehicleParams: VehicleParameters): void => {\n if (!vehicleParams.preferences) {\n return;\n }\n\n if ('engineType' in vehicleParams && vehicleParams.engineType === 'electric') {\n const preferences = vehicleParams.preferences;\n if (preferences.chargingPreferences) {\n const chargingPrefs = preferences.chargingPreferences;\n const kwhChargingPrefs = chargingPrefs as ChargingPreferencesKWH;\n const pctChargingPrefs = chargingPrefs as ChargingPreferencesPCT;\n\n // Check if absolute kWh values are available and use them directly\n if (kwhChargingPrefs.minChargeAtChargingStopsInkWh || kwhChargingPrefs.minChargeAtDestinationInkWh) {\n urlParams.append('minChargeAtDestinationInkWh', String(kwhChargingPrefs.minChargeAtDestinationInkWh));\n urlParams.append(\n 'minChargeAtChargingStopsInkWh',\n String(kwhChargingPrefs.minChargeAtChargingStopsInkWh),\n );\n } else if (\n (pctChargingPrefs.minChargeAtChargingStopsPCT || pctChargingPrefs.minChargeAtDestinationPCT) &&\n vehicleParams.model &&\n 'engine' in vehicleParams.model &&\n vehicleParams.model.engine\n ) {\n // Considering percentage values if absolute values not available and maxChargeKWH exists\n const engine = vehicleParams.model.engine;\n const maxChargeKWH = engine.charging?.maxChargeKWH;\n if (maxChargeKWH) {\n urlParams.append(\n 'minChargeAtDestinationInkWh',\n String((maxChargeKWH * pctChargingPrefs.minChargeAtDestinationPCT) / 100),\n );\n urlParams.append(\n 'minChargeAtChargingStopsInkWh',\n String((maxChargeKWH * pctChargingPrefs.minChargeAtChargingStopsPCT) / 100),\n );\n }\n }\n }\n }\n};\n\nconst appendVehicleDimensions = (urlParams: URLSearchParams, dimensions?: VehicleDimensions): void => {\n if (dimensions) {\n // (defaults are 0):\n dimensions.lengthMeters && urlParams.append('vehicleLength', String(dimensions.lengthMeters));\n dimensions.heightMeters && urlParams.append('vehicleHeight', String(dimensions.heightMeters));\n dimensions.widthMeters && urlParams.append('vehicleWidth', String(dimensions.widthMeters));\n dimensions.weightKG && urlParams.append('vehicleWeight', String(dimensions.weightKG));\n dimensions.axleWeightKG && urlParams.append('vehicleAxleWeight', String(dimensions.axleWeightKG));\n }\n};\n\nconst appendVehicleRestrictions = (urlParams: URLSearchParams, vehicleParams: VehicleParameters): void => {\n // Vehicle restrictions from VehicleRestrictions intersection:\n const restrictions = vehicleParams.restrictions;\n if (!restrictions) {\n return;\n }\n\n appendByRepeatingParamName(urlParams, 'vehicleLoadType', restrictions.loadTypes);\n restrictions.adrCode && urlParams.append('vehicleAdrTunnelRestrictionCode', restrictions.adrCode);\n restrictions.commercial && urlParams.append('vehicleCommercial', String(restrictions.commercial));\n // (default is 0):\n restrictions.maxSpeedKMH && urlParams.append('vehicleMaxSpeed', String(restrictions.maxSpeedKMH));\n};\n\nconst appendVehicleEngineModel = (\n urlParams: URLSearchParams,\n engineType: VehicleEngineType,\n engine: VehicleEngineModel<VehicleEngineType>,\n): void => {\n // (efficiency params have the same names between engine types)\n appendConsumptionEfficiency(urlParams, engine.consumption.efficiency);\n\n if (engineType === 'electric') {\n appendElectricConsumptionModel(urlParams, (engine as ElectricEngineModel).consumption);\n appendChargingModel(urlParams, engine as ElectricEngineModel);\n } else {\n // (no need to append combustion vehicleEngineType since it's the default)\n appendCombustionEngine(urlParams, engine as CombustionEngineModel);\n }\n};\n\nconst appendVehicleModel = (urlParams: URLSearchParams, vehicleParams: VehicleParameters): void => {\n if (!vehicleParams.model) {\n return;\n }\n\n // Handle predefined vehicle model\n if ('variantId' in vehicleParams.model) {\n urlParams.append('vehicleModelId', vehicleParams.model.variantId);\n } else {\n // Handle explicit vehicle model (dimensions and engine)\n appendVehicleDimensions(urlParams, vehicleParams.model.dimensions);\n\n if (vehicleParams.model.engine) {\n appendVehicleEngineModel(\n urlParams,\n 'engineType' in vehicleParams ? vehicleParams.engineType : undefined,\n vehicleParams.model.engine,\n );\n }\n }\n};\n\n/**\n * Appends vehicle parameters to the URL search params for routing requests.\n * @param urlParams - The URLSearchParams to append to\n * @param vehicleParams - The vehicle parameters to append\n */\nexport const appendVehicleParams = (urlParams: URLSearchParams, vehicleParams?: VehicleParameters): void => {\n if (!vehicleParams) {\n return;\n }\n\n // the engine type defaults to combustion, thus we only bother to append it if it's electric:\n if ((vehicleParams as ElectricVehicleParams).engineType === 'electric') {\n urlParams.append('vehicleEngineType', 'electric');\n }\n\n appendVehicleModel(urlParams, vehicleParams);\n appendVehicleState(urlParams, vehicleParams);\n appendVehiclePreferences(urlParams, vehicleParams);\n appendVehicleRestrictions(urlParams, vehicleParams);\n};\n","import type { CommonRoutingParams, DepartArriveParams } from '../types/commonRoutingParams';\nimport { appendByRepeatingParamName, appendOptionalParam } from './requestBuildingUtils';\nimport { appendVehicleParams } from './routingVehicleParamsBuilder';\n\nconst appendWhenParams = (urlParams: URLSearchParams, when?: DepartArriveParams): void => {\n if (when?.date) {\n const formattedDate = when.date.toISOString();\n if (when.option === 'departAt') {\n urlParams.append('departAt', formattedDate);\n } else if (when.option === 'arriveBy') {\n urlParams.append('arriveAt', formattedDate);\n }\n }\n};\n\n// TODO: not supported yet in Orbis\n// const appendThrillingParams = (urlParams: URLSearchParams, thrillingParams?: ThrillingParams): void => {\n// if (thrillingParams) {\n// thrillingParams.hilliness && urlParams.append('hilliness', thrillingParams.hilliness);\n// thrillingParams.windingness && urlParams.append('windingness', thrillingParams.windingness);\n// }\n// };\n\n/**\n * @ignore\n */\nexport const appendCommonRoutingParams = (urlParams: URLSearchParams, params: CommonRoutingParams): void => {\n const costModel = params.costModel;\n appendByRepeatingParamName(urlParams, 'avoid', costModel?.avoid);\n appendOptionalParam(urlParams, 'traffic', costModel?.traffic);\n appendWhenParams(urlParams, params.when);\n appendOptionalParam(urlParams, 'routeType', costModel?.routeType);\n // TODO not supported in Orbis\n // if (costModel?.routeType === 'thrilling') {\n // appendThrillingParams(urlParams, costModel.thrillingParams);\n // }\n appendOptionalParam(urlParams, 'travelMode', params.travelMode);\n appendVehicleParams(urlParams, params.vehicle);\n};\n","import { getPositionStrict } from '@tomtom-org/maps-sdk/core';\nimport { positionToCSVLatLon } from '../shared/geometry';\nimport { appendCommonRoutingParams } from '../shared/request/commonRoutingRequestBuilder';\nimport { appendCommonParams, appendOptionalParam } from '../shared/request/requestBuildingUtils';\nimport type { ReachableRangeParams } from './types/reachableRangeParams';\n\n// import { ElectricVehicleEngine } from \"../shared/types/vehicleEngineParams\";\n\nconst buildUrlBasePath = (params: ReachableRangeParams): string =>\n params.customServiceBaseURL ||\n `${params.commonBaseURL}/routing/1/calculateReachableRange/${positionToCSVLatLon(\n getPositionStrict(params.origin),\n )}/json`;\n\n// const toKWH = (chargePCT: number, engine: ElectricVehicleEngine): number =>\n// (engine.model.charging?.maxChargeKWH as number) * (chargePCT / 100);\n\n// const toRemainingKWH = (remainingChargeCPT: number, engine: ElectricVehicleEngine): number => {\n// const maxChargeKWH = engine.model.charging?.maxChargeKWH as number;\n// const currentChargeKWH = maxChargeKWH * (engine.currentChargePCT / 100);\n// return currentChargeKWH - maxChargeKWH * (remainingChargeCPT / 100);\n// };\n\n// const appendBudget = (/*urlParams: URLSearchParams, params: ReachableRangeParams*/): void => {\n// const budget = params.budget;\n// switch (budget.type) {\n// case \"timeMinutes\":\n// urlParams.append(\"timeBudgetInSec\", (budget.value * 60).toString());\n// break;\n// case \"remainingChargeCPT\":\n// urlParams.append(\n// \"energyBudgetInkWh\",\n// toRemainingKWH(budget.value, params.vehicle?.engine as ElectricVehicleEngine).toString()\n// );\n// break;\n// case \"spentChargePCT\":\n// urlParams.append(\n// \"energyBudgetInkWh\",\n// toKWH(budget.value, params.vehicle?.engine as ElectricVehicleEngine).toString()\n// );\n// break;\n// case \"spentFuelLiters\":\n// urlParams.append(\"fuelBudgetInLiters\", budget.value.toString());\n// break;\n// case \"distanceKM\":\n// urlParams.append(\"distanceBudgetInMeters\", (budget.value * 1000).toString());\n// break;\n// default:\n// // Unsupported by SDK but will attempt to send it anyway (most likely will fail API-side)\n// urlParams.append(budget.type, budget.value.toString());\n// }\n// };\n\n/**\n *\n * @param params\n * @returns\n */\nexport const buildReachableRangeRequest = (params: ReachableRangeParams): URL => {\n const url = new URL(buildUrlBasePath(params));\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n appendCommonRoutingParams(urlParams, params);\n // appendBudget(urlParams, params);\n appendOptionalParam(urlParams, 'maxFerryLengthInMeters', params.maxFerryLengthMeters);\n return url;\n};\n","import type { BBox, PolygonFeature } from '@tomtom-org/maps-sdk/core';\nimport { bboxFromGeoJSON } from '@tomtom-org/maps-sdk/core';\nimport type { Polygon } from 'geojson';\nimport type { ReachableRangeResponseAPI } from './types/apiResponseTypes';\nimport type { ReachableRangeParams } from './types/reachableRangeParams';\n\n/**\n *\n * @param apiResponse\n * @param params\n */\nexport const parseReachableRangeResponse = (\n apiResponse: ReachableRangeResponseAPI,\n params: ReachableRangeParams,\n): PolygonFeature<ReachableRangeParams> => {\n const geometry: Polygon = {\n type: 'Polygon',\n coordinates: [apiResponse.reachableRange.boundary.map((point) => [point.longitude, point.latitude])],\n };\n const bbox = bboxFromGeoJSON(geometry) as BBox; // the geometry should always have a bbox\n return { type: 'Feature', geometry, bbox, properties: params };\n};\n","import type { ReachableRangeTemplate } from './reachableRangeTemplate';\nimport { reachableRangeTemplate } from './reachableRangeTemplate';\nimport { buildReachableRangeRequest } from './requestBuilder';\nimport { parseReachableRangeResponse } from './responseParser';\n\nconst customize: {\n buildReachableRangeRequest: typeof buildReachableRangeRequest;\n parseReachableRangeResponse: typeof parseReachableRangeResponse;\n reachableRangeTemplate: ReachableRangeTemplate;\n} = {\n buildReachableRangeRequest,\n parseReachableRangeResponse,\n reachableRangeTemplate,\n};\nexport default customize;\n","import type { PolygonFeature } from '@tomtom-org/maps-sdk/core';\nimport type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { reachableRangeRequestValidationConfig } from './reachableRangeRequestSchema';\nimport { buildReachableRangeRequest } from './requestBuilder';\nimport { parseReachableRangeResponse } from './responseParser';\nimport type { ReachableRangeResponseAPI } from './types/apiResponseTypes';\nimport type { ReachableRangeParams } from './types/reachableRangeParams';\n\nexport type ReachableRangeTemplate = ServiceTemplate<\n ReachableRangeParams,\n URL,\n ReachableRangeResponseAPI,\n PolygonFeature<ReachableRangeParams>\n>;\n\nexport const reachableRangeTemplate: ReachableRangeTemplate = {\n requestValidation: reachableRangeRequestValidationConfig,\n buildRequest: buildReachableRangeRequest,\n sendRequest: get,\n parseResponse: parseReachableRangeResponse,\n};\n","import { getPositionStrict } from '@tomtom-org/maps-sdk/core';\nimport { isNil } from 'lodash-es';\nimport type { CommonServiceParams } from '../shared';\nimport { arrayToCSV } from '../shared/arrays';\nimport { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendCommonParams } from '../shared/request/requestBuildingUtils';\nimport type { ReverseGeocodingParams } from './types/reverseGeocodingParams';\n\nconst buildUrlBasePath = (params: CommonServiceParams): string =>\n params.customServiceBaseURL || `${params.commonBaseURL}${PLACES_URL_PATH}/reverseGeocode`;\n\n/**\n * Default function for building a reverse geocoding request from {@link ReverseGeocodingParams}\n * @param params The reverse geocoding parameters, with global configuration already merged into them.\n */\nexport const buildRevGeoRequest = (params: ReverseGeocodingParams): URL => {\n const lngLat = getPositionStrict(params.position);\n const url = new URL(`${buildUrlBasePath(params)}/${lngLat[1]},${lngLat[0]}.json`);\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n\n // rev-geo specific parameters:\n params.allowFreeformNewline && urlParams.append('allowFreeformNewline', String(params.allowFreeformNewline));\n params.geographyType && urlParams.append('entityType', arrayToCSV(params.geographyType));\n !isNil(params.heading) && urlParams.append('heading', String(params.heading));\n params.mapcodes && urlParams.append('mapcodes', arrayToCSV(params.mapcodes));\n params.number && urlParams.append('number', params.number);\n !isNil(params.radiusMeters) && urlParams.append('radius', String(params.radiusMeters));\n params.returnSpeedLimit && urlParams.append('returnSpeedLimit', String(params.returnSpeedLimit));\n params.returnRoadUse && urlParams.append('returnRoadUse', String(params.returnRoadUse));\n params.roadUses && urlParams.append('roadUse', JSON.stringify(params.roadUses));\n return url;\n};\n","import { generateId, getPositionStrict, toPointGeometry } from '@tomtom-org/maps-sdk/core';\nimport { apiToGeoJSONBBox, csvLatLngToPosition } from '../shared/geometry';\nimport type { ReverseGeocodingResponse } from './reverseGeocoding';\nimport type { ReverseGeocodingResponseAPI } from './types/apiTypes';\nimport type { ReverseGeocodingParams } from './types/reverseGeocodingParams';\n\n/**\n * Default method for parsing reverse geocoding request from {@link ReverseGeocodingResponse}\n * @param params\n * @param apiResponse\n */\nexport const parseRevGeoResponse = (\n apiResponse: ReverseGeocodingResponseAPI,\n params: ReverseGeocodingParams,\n): ReverseGeocodingResponse => {\n const firstApiResult = apiResponse.addresses[0];\n const { boundingBox, sideOfStreet, offsetPosition, ...address } = firstApiResult?.address || {};\n return {\n type: 'Feature',\n // The requested coordinates are the primary ones, and set as the GeoJSON Feature geometry:\n geometry: toPointGeometry(getPositionStrict(params.position)),\n ...(boundingBox && { bbox: apiToGeoJSONBBox(boundingBox) }),\n id: generateId(),\n ...(firstApiResult && {\n properties: {\n type: firstApiResult?.entityType ? 'Geography' : !address.streetNumber ? 'Street' : 'Point Address',\n address,\n ...(firstApiResult.dataSources && { dataSources: firstApiResult.dataSources }),\n ...(firstApiResult.mapcodes && { mapcodes: firstApiResult.mapcodes }),\n ...(sideOfStreet && { sideOfStreet }),\n ...(offsetPosition && { offsetPosition: csvLatLngToPosition(offsetPosition) }),\n // The reverse geocoded coordinates are secondary and set in the GeoJSON properties:\n originalPosition: csvLatLngToPosition(firstApiResult.position),\n },\n }),\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { buildRevGeoRequest } from './requestBuilder';\nimport { parseRevGeoResponse } from './responseParser';\nimport type { ReverseGeocodingResponse } from './reverseGeocoding';\nimport { revGeocodeRequestSchema } from './revGeocodeRequestSchema';\nimport type { ReverseGeocodingResponseAPI } from './types/apiTypes';\nimport type { ReverseGeocodingParams } from './types/reverseGeocodingParams';\n\n/**\n * Reverse Geocoding service template type.\n * @ignore\n */\nexport type ReverseGeocodingTemplate = ServiceTemplate<\n ReverseGeocodingParams,\n URL,\n ReverseGeocodingResponseAPI,\n ReverseGeocodingResponse\n>;\n\n/**\n * Reverse Geocoding service template main implementation.\n * @ignore\n */\nexport const reverseGeocodingTemplate: ReverseGeocodingTemplate = {\n requestValidation: { schema: revGeocodeRequestSchema },\n buildRequest: buildRevGeoRequest,\n sendRequest: get,\n parseResponse: parseRevGeoResponse,\n};\n","import { views } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { hasLngLatSchema } from '../shared/schema/geometriesSchema';\n\nconst revGeocodeRequestMandatory = z.object({\n position: hasLngLatSchema,\n});\n\nconst revGeocodeRequestOptional = z.partial(\n z.object({\n allowFreeformNewline: z.boolean(),\n geographyType: z.array(z.string()),\n heading: z.number().check(z.minimum(-360), z.maximum(360)),\n mapcodes: z.array(z.string()),\n number: z.string(),\n radiusMeters: z.number(),\n returnMatchType: z.boolean(),\n returnRoadUse: z.boolean(),\n returnSpeedLimit: z.boolean(),\n roadUses: z.array(z.string()),\n view: z.enum(views),\n }),\n);\n\n/**\n * @ignore\n */\nexport const revGeocodeRequestSchema = z.extend(revGeocodeRequestMandatory, revGeocodeRequestOptional.shape);\n","import { buildRevGeoRequest } from './requestBuilder';\nimport { parseRevGeoResponse } from './responseParser';\nimport type { ReverseGeocodingTemplate } from './reverseGeocodingTemplate';\nimport { reverseGeocodingTemplate } from './reverseGeocodingTemplate';\n\nconst customize: {\n buildRevGeoRequest: typeof buildRevGeoRequest;\n parseRevGeoResponse: typeof parseRevGeoResponse;\n reverseGeocodingTemplate: ReverseGeocodingTemplate;\n} = {\n buildRevGeoRequest,\n parseRevGeoResponse,\n reverseGeocodingTemplate,\n};\nexport default customize;\n","import type { SectionType } from '@tomtom-org/maps-sdk/core';\nimport { getRoutePlanningLocationType, inputSectionTypesWithGuidance } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { commonRoutingRequestSchema } from '../shared/schema/commonRoutingRequestSchema';\nimport {\n featureSchema,\n geometrySchema,\n hasLngLatSchema,\n lineStringCoordsSchema,\n} from '../shared/schema/geometriesSchema';\nimport type { SchemaRefinement } from '../shared/types/validation';\nimport type { CalculateRouteParams } from './types/calculateRouteParams';\n\nconst waypointLikeSchema = z.union([hasLngLatSchema, geometrySchema]);\nconst pathLikeSchema = z.union([lineStringCoordsSchema, featureSchema]);\n\nconst mandatorySchema = z.object({\n locations: z.array(z.union([waypointLikeSchema, pathLikeSchema])).check(z.minLength(1)), // see calculateRouteLocationsRefinement\n});\n\nconst optionalSchema = z.partial(\n z.object({\n computeAdditionalTravelTimeFor: z.enum(['none', 'all']),\n vehicleHeading: z.number().check(z.minimum(0), z.maximum(359.5)),\n // TODO add proper instructionsInfo check\n // instructionsType: z.enum(instructionsTypes),\n maxAlternatives: z.number().check(z.minimum(0), z.maximum(5)),\n sectionTypes: z.array(z.enum(inputSectionTypesWithGuidance as [SectionType, ...SectionType[]])),\n }),\n);\n\nconst schema = z.extend(commonRoutingRequestSchema, z.extend(mandatorySchema, optionalSchema.shape).shape);\n\nconst locationsRefinement: SchemaRefinement<CalculateRouteParams> = {\n check: (data: CalculateRouteParams): boolean => {\n const routePlanningLocationTypes = data.locations.map(getRoutePlanningLocationType);\n if (!routePlanningLocationTypes.includes('path')) {\n return data.locations.length >= 2;\n }\n return true; // see calculateRouteRequestSchemaMandatory\n },\n message:\n 'When passing waypoints only: at least 2 must be defined. ' +\n 'If passing also paths, at least one path must be defined',\n};\n\n/**\n * @ignore\n */\nexport const routeRequestValidationConfig = { schema, refinements: [locationsRefinement] };\n","import type {\n GetPositionEntryPointOption,\n PathLike,\n RoutePlanningLocation,\n RoutePlanningLocationType,\n Waypoint,\n WaypointLike,\n WaypointProps,\n} from '@tomtom-org/maps-sdk/core';\nimport {\n getPositionStrict,\n getRoutePlanningLocationType,\n inputSectionTypes,\n inputSectionTypesWithGuidance,\n} from '@tomtom-org/maps-sdk/core';\nimport type { Position } from 'geojson';\nimport { isNil, omit } from 'lodash-es';\nimport type { FetchInput } from '../shared';\nimport { VehiclePreferences } from '../shared';\nimport { positionToCSVLatLon } from '../shared/geometry';\nimport { appendCommonRoutingParams } from '../shared/request/commonRoutingRequestBuilder';\nimport {\n appendByRepeatingParamName,\n appendCommonParams,\n appendOptionalParam,\n} from '../shared/request/requestBuildingUtils';\nimport { ExplicitVehicleModel } from '../shared/types/vehicleModel';\nimport type { CalculateRoutePOSTDataAPI, PointWaypointAPI } from './types/apiRequestTypes';\nimport type { LatitudeLongitudePointAPI } from './types/apiResponseTypes';\nimport type { CalculateRouteParams, GuidanceParams, InputSectionTypes } from './types/calculateRouteParams';\n\n// Are these params about Long Distance EV Routing:\nconst getChargingPreferences = (params: CalculateRouteParams) =>\n (params.vehicle?.preferences as VehiclePreferences<'electric'>)?.chargingPreferences;\n\nconst buildUrlBasePath = (params: CalculateRouteParams): string =>\n params.customServiceBaseURL ||\n `${params.commonBaseURL}/maps/orbis/routing/${getChargingPreferences(params) ? 'calculateLongDistanceEVRoute' : 'calculateRoute'}`;\n\nconst getWaypointProps = (waypointInput: WaypointLike): WaypointProps | null =>\n (waypointInput as Waypoint).properties || null;\n\nconst defaultUseEntryPointOption: GetPositionEntryPointOption = 'main-when-available';\n\nconst buildLocationsStringFromWaypoints = (\n waypointInputs: WaypointLike[],\n useEntryPoint: GetPositionEntryPointOption,\n): string =>\n waypointInputs\n .map((waypointInput: WaypointLike) => {\n const lngLatString = positionToCSVLatLon(getPositionStrict(waypointInput, { useEntryPoint }));\n const radius = getWaypointProps(waypointInput)?.radiusMeters;\n return radius ? `circle(${lngLatString},${radius})` : lngLatString;\n })\n .join(':');\n\nconst getPositionsFromPath = (pathLike: PathLike): Position[] => {\n if (Array.isArray(pathLike)) {\n return pathLike;\n }\n return pathLike.geometry.coordinates;\n};\n\nconst getFirstAndLastPoints = (\n locations: RoutePlanningLocation[],\n types: RoutePlanningLocationType[],\n useEntryPoint: GetPositionEntryPointOption,\n): [Position, Position] => {\n let firstPoint;\n const firstRoutePlanningLocation = locations[0];\n if (types[0] === 'path') {\n const positions = getPositionsFromPath(firstRoutePlanningLocation as PathLike);\n firstPoint = positions[0];\n } else {\n firstPoint = getPositionStrict(firstRoutePlanningLocation as WaypointLike, { useEntryPoint });\n }\n\n const lastRoutePlanningLocation = locations[locations.length - 1];\n let lastPoint;\n if (types[types.length - 1] === 'path') {\n const positions = getPositionsFromPath(lastRoutePlanningLocation as PathLike);\n lastPoint = positions[positions.length - 1];\n } else {\n lastPoint = getPositionStrict(lastRoutePlanningLocation as WaypointLike, { useEntryPoint });\n }\n\n return [firstPoint, lastPoint];\n};\n\nconst buildLocationsString = (\n locations: RoutePlanningLocation[],\n routePlanningLocationTypes: RoutePlanningLocationType[],\n useEntryPoint: GetPositionEntryPointOption,\n): string =>\n buildLocationsStringFromWaypoints(\n routePlanningLocationTypes.includes('path')\n ? getFirstAndLastPoints(locations, routePlanningLocationTypes, useEntryPoint)\n : (locations as WaypointLike[]),\n useEntryPoint,\n );\n\nconst appendSectionTypes = (\n urlParams: URLSearchParams,\n sectionTypes: InputSectionTypes | undefined,\n instructionsInclude: boolean,\n): void => {\n const effectiveSectionTypes = (\n sectionTypes ?? (instructionsInclude ? inputSectionTypesWithGuidance : inputSectionTypes)\n ).map((sectionType) => (sectionType === 'vehicleRestricted' ? 'travelMode' : sectionType));\n appendByRepeatingParamName(urlParams, 'sectionType', effectiveSectionTypes);\n};\n\nconst appendGuidanceParams = (urlParams: URLSearchParams, params?: CalculateRouteParams): void => {\n if (params?.guidance) {\n const guidance: GuidanceParams = params.guidance;\n urlParams.append('instructionsType', guidance.type);\n urlParams.append('guidanceVersion', String(guidance.version ?? 2));\n urlParams.append('instructionPhonetics', guidance.phonetics ?? 'IPA');\n urlParams.append('instructionRoadShieldReferences', guidance.roadShieldReferences ?? 'all');\n urlParams.append('language', params.language ?? 'en-US');\n }\n};\n\nconst toLatLngPointApi = (position: Position): LatitudeLongitudePointAPI => ({\n latitude: position[1],\n longitude: position[0],\n});\n\n// appends a path into the given post data, adding to supportingPoints and pointWaypoints as applicable\nconst appendPathPostData = (\n pathRoutePlanningLocation: PathLike,\n routePlanningLocationIndex: number,\n locations: RoutePlanningLocation[],\n supportingPoints: LatitudeLongitudePointAPI[],\n pointWaypoints: PointWaypointAPI[],\n): void => {\n // first, we add the supportingPoints from the path coordinates:\n const supportingPointsLengthBeforePath = supportingPoints.length;\n for (const position of getPositionsFromPath(pathRoutePlanningLocation)) {\n supportingPoints.push(toLatLngPointApi(position));\n }\n // then we check if it's a route, and if so we add waypoints from its legs as applicable\n // (a route leg is the portion of the path between 2 waypoints)\n if (!Array.isArray(pathRoutePlanningLocation)) {\n const legs = pathRoutePlanningLocation.properties.sections.leg;\n // (We assume all routes have at least 1 leg)\n legs.forEach((leg, legIndex) => {\n // If the route is the first geo-input, we skip adding the leg...\n // ... since it's expected to be already in the origin \"location\"\n if (routePlanningLocationIndex > 0 || legIndex > 0) {\n pointWaypoints.push({\n supportingPointIndex: supportingPointsLengthBeforePath + (leg.startPointIndex as number),\n waypointSourceType: 'USER_DEFINED',\n });\n }\n });\n // If the route isn't the last geo-input, we add its destination as pointWaypoint too:\n // (If it's the last geo-input, we skip adding the leg...\n // ... since it's expected to be already in the destination \"location\")\n if (routePlanningLocationIndex < locations.length - 1) {\n pointWaypoints.push({\n supportingPointIndex:\n supportingPointsLengthBeforePath + pathRoutePlanningLocation.geometry.coordinates.length - 1,\n waypointSourceType: 'USER_DEFINED',\n });\n }\n }\n};\n\n// appends a waypoint into the given post data, adding to supportingPoints and pointWaypoints as applicable\nconst appendWaypointPostData = (\n waypoint: WaypointLike,\n routePlanningLocationIndex: number,\n locations: RoutePlanningLocation[],\n supportingPoints: LatitudeLongitudePointAPI[],\n pointWaypoints: PointWaypointAPI[],\n useEntryPoint: GetPositionEntryPointOption,\n) => {\n // individual points are treated like POST waypoints\n supportingPoints.push(toLatLngPointApi(getPositionStrict(waypoint, { useEntryPoint })));\n // for origin and destination we do not add pointWaypoints, since they end up as the URL \"locations\":\n if (routePlanningLocationIndex > 0 && routePlanningLocationIndex < locations.length - 1) {\n pointWaypoints.push({\n supportingPointIndex: supportingPoints.length - 1,\n waypointSourceType: 'USER_DEFINED',\n });\n }\n};\n\nconst buildlocationsPostData = (\n locations: RoutePlanningLocation[],\n types: RoutePlanningLocationType[],\n useEntryPoints: GetPositionEntryPointOption,\n): { supportingPoints: LatitudeLongitudePointAPI[]; pointWaypoints?: PointWaypointAPI[] } => {\n const supportingPoints: LatitudeLongitudePointAPI[] = [];\n const pointWaypoints: PointWaypointAPI[] = [];\n\n locations.forEach((routePlanningLocation, routePlanningLocationIndex) => {\n if (types[routePlanningLocationIndex] === 'path') {\n appendPathPostData(\n routePlanningLocation as PathLike,\n routePlanningLocationIndex,\n locations,\n supportingPoints,\n pointWaypoints,\n );\n } else {\n appendWaypointPostData(\n routePlanningLocation as WaypointLike,\n routePlanningLocationIndex,\n locations,\n supportingPoints,\n pointWaypoints,\n useEntryPoints,\n );\n }\n });\n\n return { supportingPoints, ...(pointWaypoints.length && { pointWaypoints }) };\n};\n\nconst buildPostData = (\n params: CalculateRouteParams,\n types: RoutePlanningLocationType[],\n useEntryPoints: GetPositionEntryPointOption,\n): CalculateRoutePOSTDataAPI | null => {\n const pathsIncluded = types.includes('path');\n const isLdevr = !!getChargingPreferences(params);\n if (!pathsIncluded && !isLdevr) {\n // (if no paths in the given locations nor LDEVR, there'll be no POST data, which will trigger a GET call)\n return null;\n }\n\n const vehicleModel = params.vehicle?.model as ExplicitVehicleModel<'electric'>;\n const chargingModel = vehicleModel?.engine?.charging;\n return {\n ...(pathsIncluded && buildlocationsPostData(params.locations, types, useEntryPoints)),\n ...(isLdevr &&\n chargingModel && {\n chargingParameters: omit(chargingModel, 'maxChargeKWH'),\n }),\n };\n};\n\n/**\n * Default function for building calculate route request from {@link CalculateRouteParams}\n * @param params The calculate route parameters, with global configuration already merged into them.\n */\nexport const buildCalculateRouteRequest = (params: CalculateRouteParams): FetchInput<CalculateRoutePOSTDataAPI> => {\n const routePlanningLocationTypes = params.locations.map(getRoutePlanningLocationType);\n const useEntryPoints = params.useEntryPoints ?? defaultUseEntryPointOption;\n const url = new URL(\n `${buildUrlBasePath(params)}/${buildLocationsString(params.locations, routePlanningLocationTypes, useEntryPoints)}/json`,\n );\n const urlParams: URLSearchParams = url.searchParams;\n appendCommonParams(urlParams, params);\n if (!('language' in params)) {\n // for routing we ensure to always have a default language input since by default we fetch some language-specific sections:\n // (see importantRoadStretch as default, and instructionsType when guidance is provided)\n // It's still possible to force the language to be undefined if skipping such sections for performance reasons\n urlParams.append('language', 'en-GB');\n }\n appendCommonRoutingParams(urlParams, params);\n appendOptionalParam(urlParams, 'computeTravelTimeFor', params.computeAdditionalTravelTimeFor);\n appendGuidanceParams(urlParams, params);\n !isNil(params.maxAlternatives) && urlParams.append('maxAlternatives', String(params.maxAlternatives));\n appendSectionTypes(urlParams, params.sectionTypes, !!params.guidance?.type);\n for (const representation of params.extendedRouteRepresentations ?? ['distance', 'travelTime']) {\n urlParams.append('extendedRouteRepresentation', representation);\n }\n\n const postData = buildPostData(params, routePlanningLocationTypes, useEntryPoints);\n return postData ? { method: 'POST', url, data: postData } : { method: 'GET', url };\n};\n","import {\n BBox,\n bboxFromGeoJSON,\n type ChargingStop,\n type CountrySectionProps,\n type CurrentType,\n type Guidance,\n generateId,\n type ImportantRoadStretchProps,\n type Instruction,\n indexedMagnitudes,\n type LaneDirection,\n type LaneSectionProps,\n type LegSectionProps,\n type LegSummary,\n type PossibleLaneSeparator,\n type RoadShieldReference,\n type RoadShieldSectionProps,\n type Route,\n type RouteSummary,\n type Routes,\n type SectionProps,\n type SectionsProps,\n type SectionType,\n type SpeedLimitSectionProps,\n type TrafficCategory,\n type TrafficIncidentTEC,\n type TrafficSectionProps,\n} from '@tomtom-org/maps-sdk/core';\nimport type { LineString, Position } from 'geojson';\nimport { isNil, omit } from 'lodash-es';\nimport { toChargingSpeed } from '../shared/ev';\nimport { ExplicitVehicleModel } from '../shared/types/vehicleModel';\nimport {\n CalculateRouteResponseAPI,\n ChargingStopAPI,\n CurrentTypeAPI,\n GuidanceAPI,\n LegAPI,\n RouteAPI,\n RoutePathPointAPI,\n SectionAPI,\n SummaryAPI,\n} from './types/apiResponseTypes';\nimport { CalculateRouteParams } from './types/calculateRouteParams';\n\nconst toCurrentType = (apiCurrentType: CurrentTypeAPI): CurrentType | undefined => {\n switch (apiCurrentType) {\n case 'Direct_Current':\n return 'DC';\n case 'Alternating_Current_1_Phase':\n return 'AC1';\n case 'Alternating_Current_3_Phase':\n return 'AC3';\n default:\n return undefined;\n }\n};\n\nconst toChargingStop = (\n chargingInformationAtEndOfLeg: ChargingStopAPI,\n maxChargeKWH: number | undefined,\n): ChargingStop => {\n const chargingConnectionInfo = chargingInformationAtEndOfLeg.chargingConnectionInfo;\n const chargingParkLocation = chargingInformationAtEndOfLeg.chargingParkLocation;\n const coordinates = [chargingParkLocation.coordinate.longitude, chargingParkLocation.coordinate.latitude];\n\n // Build freeformAddress from available components\n const addressParts = [chargingParkLocation.street, chargingParkLocation.houseNumber].filter(Boolean);\n const freeformAddress = addressParts.length > 0 ? addressParts.join(', ') : '';\n\n return {\n type: 'Feature',\n id: chargingInformationAtEndOfLeg.chargingParkId,\n geometry: { type: 'Point', coordinates },\n properties: {\n ...omit(chargingInformationAtEndOfLeg, ['chargingConnectionInfo', 'chargingParkLocation']),\n type: 'POI',\n address: {\n freeformAddress,\n ...(chargingParkLocation.street && { streetName: chargingParkLocation.street }),\n ...(chargingParkLocation.houseNumber && { streetNumber: chargingParkLocation.houseNumber }),\n ...(chargingParkLocation.city && { municipality: chargingParkLocation.city }),\n ...(chargingParkLocation.region && { countrySubdivision: chargingParkLocation.region }),\n ...(chargingParkLocation.postalCode && { postalCode: chargingParkLocation.postalCode }),\n ...(chargingParkLocation.country && { country: chargingParkLocation.country }),\n },\n ...(chargingConnectionInfo && {\n chargingConnectionInfo: {\n plugType: chargingConnectionInfo.chargingPlugType,\n currentInA: chargingConnectionInfo.chargingCurrentInA,\n voltageInV: chargingConnectionInfo.chargingVoltageInV,\n chargingPowerInkW: chargingConnectionInfo.chargingPowerInkW,\n currentType: toCurrentType(chargingConnectionInfo.chargingCurrentType),\n chargingSpeed: toChargingSpeed(chargingConnectionInfo.chargingPowerInkW),\n },\n }),\n ...(maxChargeKWH && {\n targetChargeInPCT: (100 * chargingInformationAtEndOfLeg.targetChargeInkWh) / maxChargeKWH,\n }),\n ...(chargingInformationAtEndOfLeg.chargingParkPowerInkW && {\n chargingParkSpeed: toChargingSpeed(chargingInformationAtEndOfLeg.chargingParkPowerInkW),\n }),\n },\n };\n};\n\nconst parseSummary = (apiSummary: SummaryAPI, params: CalculateRouteParams): RouteSummary | LegSummary => {\n const maxChargeKWH = (params?.vehicle?.model as ExplicitVehicleModel<'electric'>)?.engine?.charging?.maxChargeKWH;\n return {\n lengthInMeters: apiSummary.lengthInMeters,\n historicTrafficTravelTimeInSeconds: apiSummary.historicTrafficTravelTimeInSeconds,\n liveTrafficIncidentsTravelTimeInSeconds: apiSummary.liveTrafficIncidentsTravelTimeInSeconds,\n noTrafficTravelTimeInSeconds: apiSummary.noTrafficTravelTimeInSeconds,\n trafficDelayInSeconds: apiSummary.trafficDelayInSeconds,\n trafficLengthInMeters: apiSummary.trafficLengthInMeters,\n travelTimeInSeconds: apiSummary.travelTimeInSeconds,\n departureTime: new Date(apiSummary.departureTime),\n arrivalTime: new Date(apiSummary.arrivalTime),\n deviationDistanceInMeters: apiSummary.deviationDistance,\n fuelConsumptionInLiters: apiSummary.fuelConsumptionInLiters,\n ...(apiSummary.deviationPoint && {\n deviationPoint: [apiSummary.deviationPoint.longitude, apiSummary.deviationPoint.latitude],\n }),\n // EV-specific fields:\n totalChargingTimeInSeconds: apiSummary.totalChargingTimeInSeconds,\n batteryConsumptionInkWh: apiSummary.batteryConsumptionInkWh,\n ...(maxChargeKWH &&\n apiSummary.batteryConsumptionInkWh && {\n batteryConsumptionInPCT: (100 * apiSummary.batteryConsumptionInkWh) / maxChargeKWH,\n }),\n remainingChargeAtArrivalInkWh: apiSummary.remainingChargeAtArrivalInkWh,\n ...(maxChargeKWH &&\n apiSummary.remainingChargeAtArrivalInkWh && {\n remainingChargeAtArrivalInPCT: (100 * apiSummary.remainingChargeAtArrivalInkWh) / maxChargeKWH,\n }),\n ...(apiSummary.chargingInformationAtEndOfLeg && {\n chargingInformationAtEndOfLeg: toChargingStop(apiSummary.chargingInformationAtEndOfLeg, maxChargeKWH),\n }),\n };\n};\n\nconst parseRoutePath = (apiRouteLegs: LegAPI[]): LineString => ({\n type: 'LineString',\n coordinates: apiRouteLegs.flatMap((apiLeg) =>\n apiLeg.points?.map((apiPoint) => [apiPoint.longitude, apiPoint.latitude]),\n ),\n});\n\nconst parseLegSectionProps = (apiLegs: LegAPI[], params: CalculateRouteParams): LegSectionProps[] =>\n apiLegs.reduce<LegSectionProps[]>((accumulatedParsedLegs, nextApiLeg, currentIndex) => {\n const lastLegEndPointIndex = currentIndex === 0 ? 0 : accumulatedParsedLegs[currentIndex - 1]?.endPointIndex;\n let endPointIndex;\n if (!isNil(lastLegEndPointIndex)) {\n if (lastLegEndPointIndex === 0) {\n // in case of first or only leg, we reduce the length by one to be consistent with other sections\n // endPointIndex is inclusive\n endPointIndex = nextApiLeg.points?.length > 0 ? nextApiLeg.points.length - 1 : 0;\n } else {\n endPointIndex = lastLegEndPointIndex + nextApiLeg.points?.length;\n }\n }\n accumulatedParsedLegs.push({\n ...(!isNil(lastLegEndPointIndex) && { startPointIndex: lastLegEndPointIndex }),\n ...(endPointIndex && { endPointIndex }),\n summary: parseSummary(nextApiLeg.summary, params),\n id: generateId(),\n });\n return accumulatedParsedLegs;\n }, []);\n\nconst toSectionProps = (apiSection: SectionAPI): SectionProps => ({\n id: generateId(),\n startPointIndex: apiSection.startPointIndex,\n endPointIndex: apiSection.endPointIndex,\n});\n\nconst toRoadStretchSectionProps = (apiSection: SectionAPI): ImportantRoadStretchProps => ({\n ...toSectionProps(apiSection),\n index: apiSection.importantRoadStretchIndex as number,\n streetName: apiSection.streetName?.text,\n roadNumbers: apiSection.roadNumbers?.map((roadNumber) => roadNumber.text),\n});\n\nconst toCountrySectionProps = (apiSection: SectionAPI): CountrySectionProps => ({\n ...toSectionProps(apiSection),\n countryCodeISO3: apiSection.countryCode as string,\n});\n\nconst toVehicleRestrictedSectionProps = (apiSection: SectionAPI): SectionProps | null =>\n apiSection.travelMode === 'other' ? toSectionProps(apiSection) : null;\n\nconst calculateTrafficCategory = (tecMainCauseCode: number | undefined): TrafficCategory => {\n switch (tecMainCauseCode) {\n case 1:\n return 'jam';\n case 2:\n return 'accident';\n case 3:\n return 'roadworks';\n case 4:\n return 'narrow-lanes';\n case 5:\n return 'road-closed';\n case 9:\n return 'danger';\n case 11:\n return 'animals-on-road';\n case 13:\n return 'broken-down-vehicle';\n case 16:\n return 'lane-closed';\n case 17:\n return 'wind';\n case 18:\n return 'fog';\n case 19:\n return 'rain';\n case 22:\n return 'frost';\n case 23:\n return 'flooding';\n default:\n return 'other';\n }\n};\n\n/**\n * @ignore\n */\nexport const toTrafficCategories = (apiSection: SectionAPI): TrafficCategory[] => {\n if (apiSection.tec?.causes?.length) {\n return apiSection.tec.causes.map((cause) => calculateTrafficCategory(cause.mainCauseCode));\n }\n // else\n switch (apiSection.simpleCategory) {\n case 'JAM':\n return ['jam'];\n case 'ROAD_WORK':\n return ['roadworks'];\n case 'ROAD_CLOSURE':\n return ['road-closed'];\n default:\n return ['other'];\n }\n};\n\nconst toTrafficSectionProps = (apiSection: SectionAPI): TrafficSectionProps => ({\n ...toSectionProps(apiSection),\n delayInSeconds: apiSection.delayInSeconds,\n effectiveSpeedInKmh: apiSection.effectiveSpeedInKmh,\n categories: toTrafficCategories(apiSection),\n magnitudeOfDelay: indexedMagnitudes[apiSection.magnitudeOfDelay as number],\n tec: apiSection.tec as TrafficIncidentTEC,\n});\n\nconst toLaneSectionProps = (apiSection: SectionAPI): LaneSectionProps => ({\n ...toSectionProps(apiSection),\n lanes: apiSection.lanes as LaneDirection[],\n laneSeparators: apiSection.laneSeparators as PossibleLaneSeparator[],\n properties: apiSection.properties,\n});\n\nconst toSpeedLimitSectionProps = (apiSection: SectionAPI): SpeedLimitSectionProps => ({\n ...toSectionProps(apiSection),\n maxSpeedLimitInKmh: apiSection.maxSpeedLimitInKmh as number,\n});\n\nconst toRoadShieldsSectionProps = (apiSection: SectionAPI): RoadShieldSectionProps => ({\n ...toSectionProps(apiSection),\n roadShieldReferences: apiSection.roadShieldReferences as RoadShieldReference[],\n});\n\nconst ensureInit = <S extends SectionProps>(sectionType: SectionType, result: SectionsProps): S[] => {\n if (!result[sectionType]) {\n result[sectionType] = [];\n }\n return result[sectionType] as S[];\n};\n\nconst getSectionMapping = (\n apiSection: SectionAPI,\n): { sectionType: SectionType; mappingFunction: (apiSection: SectionAPI) => SectionProps | null } => {\n switch (apiSection.sectionType) {\n case 'CAR_TRAIN':\n return { sectionType: 'carTrain', mappingFunction: toSectionProps };\n case 'COUNTRY':\n return { sectionType: 'country', mappingFunction: toCountrySectionProps };\n case 'FERRY':\n return { sectionType: 'ferry', mappingFunction: toSectionProps };\n case 'MOTORWAY':\n return { sectionType: 'motorway', mappingFunction: toSectionProps };\n case 'PEDESTRIAN':\n return { sectionType: 'pedestrian', mappingFunction: toSectionProps };\n case 'TOLL_VIGNETTE':\n return { sectionType: 'tollVignette', mappingFunction: toCountrySectionProps };\n case 'TOLL':\n return { sectionType: 'toll', mappingFunction: toSectionProps };\n case 'TRAFFIC':\n return { sectionType: 'traffic', mappingFunction: toTrafficSectionProps };\n case 'TRAVEL_MODE':\n // NOTE: vehicleRestricted sections come from TRAVEL_MODE \"other\" ones:\n return { sectionType: 'vehicleRestricted', mappingFunction: toVehicleRestrictedSectionProps };\n case 'TUNNEL':\n return { sectionType: 'tunnel', mappingFunction: toSectionProps };\n case 'UNPAVED':\n return { sectionType: 'unpaved', mappingFunction: toSectionProps };\n case 'URBAN':\n return { sectionType: 'urban', mappingFunction: toSectionProps };\n case 'CARPOOL':\n return { sectionType: 'carpool', mappingFunction: toSectionProps };\n case 'LOW_EMISSION_ZONE':\n return { sectionType: 'lowEmissionZone', mappingFunction: toSectionProps };\n case 'LANES':\n return { sectionType: 'lanes', mappingFunction: toLaneSectionProps };\n case 'SPEED_LIMIT':\n return { sectionType: 'speedLimit', mappingFunction: toSpeedLimitSectionProps };\n case 'ROAD_SHIELDS':\n return { sectionType: 'roadShields', mappingFunction: toRoadShieldsSectionProps };\n case 'IMPORTANT_ROAD_STRETCH':\n return { sectionType: 'importantRoadStretch', mappingFunction: toRoadStretchSectionProps };\n }\n};\n\nconst parseSectionsAndAppendToResult = (apiSections: SectionAPI[], result: SectionsProps): void => {\n if (!Array.isArray(apiSections)) {\n return;\n }\n\n for (const apiSection of apiSections) {\n const sectionMapping = getSectionMapping(apiSection);\n const mappedSection = sectionMapping?.mappingFunction(apiSection);\n if (mappedSection) {\n ensureInit(sectionMapping.sectionType, result).push(mappedSection);\n }\n }\n};\n\nconst parseSections = (apiRoute: RouteAPI, params: CalculateRouteParams): SectionsProps => {\n const result = {\n leg: parseLegSectionProps(apiRoute.legs, params),\n // (the rest of sections are parsed below)\n } as SectionsProps;\n parseSectionsAndAppendToResult(apiRoute.sections, result);\n return result;\n};\n\nconst DELTA = 0.0001;\n\nconst similar = (a: Position, b: Position): boolean => Math.abs(a[0] - b[0]) < DELTA && Math.abs(a[1] - b[1]) < DELTA;\n\nconst parseGuidance = (apiGuidance: GuidanceAPI, path: Position[]): Guidance => {\n const instructions: Instruction[] = [];\n let lastInstructionPathIndex = 0;\n\n for (const apiInstruction of apiGuidance.instructions) {\n const maneuverPoint = [apiInstruction.maneuverPoint.longitude, apiInstruction.maneuverPoint.latitude];\n\n // we determine the path point index for the instruction by matching maneuverPoint to the path:\n for (let pathIndex = lastInstructionPathIndex; pathIndex < path.length; pathIndex++) {\n if (similar(path[pathIndex], maneuverPoint)) {\n lastInstructionPathIndex = pathIndex;\n break;\n }\n if (pathIndex === path.length - 1) {\n // (we do not advance lastInstructionPathIndex here to prevent missing a whole path section while mapping following instructions)\n break;\n }\n }\n instructions.push({\n ...apiInstruction,\n maneuverPoint,\n pathPointIndex: lastInstructionPathIndex,\n routePath: apiInstruction.routePath.map((apiPoint: RoutePathPointAPI) => ({\n ...apiPoint,\n point: [apiPoint.point.longitude, apiPoint.point.latitude],\n })),\n });\n }\n\n return { instructions };\n};\n\nconst parseRoute = (apiRoute: RouteAPI, index: number, params: CalculateRouteParams): Route => {\n const geometry = parseRoutePath(apiRoute.legs);\n return {\n type: 'Feature',\n geometry,\n id: generateId(),\n bbox: bboxFromGeoJSON(geometry) as BBox, // Route geometry should always have area\n properties: {\n index,\n summary: parseSummary(apiRoute.summary, params),\n sections: parseSections(apiRoute, params),\n ...(apiRoute.guidance && { guidance: parseGuidance(apiRoute.guidance, geometry.coordinates) }),\n ...(apiRoute.progress && { progress: apiRoute.progress }),\n },\n };\n};\n\n/**\n * Default method for parsing calculate route response from {@link CalculateRouteResponseAPI}\n * @param apiResponse The Routing API response.\n * @param params The params used to calculate this route.\n */\nexport const parseCalculateRouteResponse = (\n apiResponse: CalculateRouteResponseAPI,\n params: CalculateRouteParams,\n): Routes => {\n const features = apiResponse.routes.map((apiRoute, index) => parseRoute(apiRoute, index, params));\n const bbox = bboxFromGeoJSON(features);\n return { type: 'FeatureCollection', ...(bbox && { bbox }), features };\n};\n","import type { Routes } from '@tomtom-org/maps-sdk/core';\nimport type { FetchInput, ServiceTemplate } from '../shared';\nimport { fetchWith } from '../shared/fetch';\nimport { routeRequestValidationConfig } from './calculateRouteRequestSchema';\nimport { buildCalculateRouteRequest } from './requestBuilder';\nimport { parseCalculateRouteResponse } from './responseParser';\nimport { parseRoutingResponseError } from './routingResponseErrorParser';\nimport type { CalculateRoutePOSTDataAPI } from './types/apiRequestTypes';\nimport type { CalculateRouteResponseAPI } from './types/apiResponseTypes';\nimport type { CalculateRouteParams } from './types/calculateRouteParams';\n\n/**\n * @ignore\n */\nexport type CalculateRouteTemplate = ServiceTemplate<\n CalculateRouteParams,\n FetchInput<CalculateRoutePOSTDataAPI>,\n CalculateRouteResponseAPI,\n Routes\n>;\n\n/**\n * @ignore\n */\nexport const calculateRouteTemplate: CalculateRouteTemplate = {\n requestValidation: routeRequestValidationConfig,\n buildRequest: buildCalculateRouteRequest,\n sendRequest: fetchWith,\n parseResponse: parseCalculateRouteResponse,\n parseResponseError: parseRoutingResponseError,\n getAPIVersion: () => 2,\n};\n","import type { ParseResponseError } from '../shared';\nimport { SDKServiceError } from '../shared';\nimport type { RoutingAPIResponseError } from '../shared/types/apiResponseErrorTypes';\n\n/**\n * @ignore\n * @param apiError\n * @param serviceName\n */\nexport const parseRoutingResponseError: ParseResponseError<RoutingAPIResponseError> = (apiError, serviceName) => {\n const { data, message, status } = apiError;\n const errorMessage = data?.error?.description ?? data?.detailedError?.message ?? message;\n return new SDKServiceError(errorMessage, serviceName, status);\n};\n","/**\n * @module services-customization\n * @group Customization\n */\n\nimport autocompleteCustomize from '../autocomplete-search/customize';\nimport evChargingStationsAvailabilityCustomize from '../ev-charging-stations-availability/customize';\nimport geocodeCustomize from '../geocode/customize';\nimport geometryDataCustomize from '../geometry-data/customize';\nimport geometrySearchCustomize from '../geometry-search/customize';\nimport placeByIdCustomize from '../place-by-id/customize';\nimport reachableRangeCustomize from '../reachable-range/customize';\nimport revgeoCustomize from '../revgeo/customize';\nimport routingCustomize from '../routing/customize';\n\n/**\n * Access to service implementation components for advanced customization.\n *\n * This object provides low-level access to the internal components of each service,\n * allowing developers to customize request building, response parsing, and other\n * aspects of service behavior. This is useful for advanced use cases like:\n * - Custom request/response transformations\n * - Integration with custom API gateways or proxies\n * - Adding custom validation or error handling\n * - Implementing request/response logging or monitoring\n * - Adapting to custom API endpoints or versions\n *\n * @remarks\n * Most developers won't need to use this directly. The standard service functions\n * (like `geocode`, `search`, `calculateRoute`) are sufficient for typical use cases.\n * Only use customization when you need to modify the internal service behavior.\n *\n * Each service exposes:\n * - Request builders: Functions that construct API requests\n * - Response parsers: Functions that transform API responses\n * - Templates: Configuration objects defining service behavior\n * - Validation schemas: Input parameter validation rules\n *\n * @example\n * ```typescript\n * // Access request builder for custom processing\n * import { customizeService } from '@tomtom-international/web-sdk-services';\n *\n * const { buildRequest } = customizeService.geocode;\n * const request = buildRequest({\n * key: 'your-api-key',\n * query: 'Amsterdam'\n * });\n *\n * // Access response parser for custom handling\n * const { parseResponse } = customizeService.geocode;\n * const rawApiResponse = await fetch(request.url);\n * const parsedData = parseResponse(await rawApiResponse.json());\n * ```\n *\n * @group Advanced\n */\nexport const customizeService: {\n reverseGeocode: typeof revgeoCustomize;\n geocode: typeof geocodeCustomize;\n geometryData: typeof geometryDataCustomize;\n geometrySearch: typeof geometrySearchCustomize;\n calculateRoute: typeof routingCustomize;\n reachableRange: typeof reachableRangeCustomize;\n evChargingStationsAvailability: typeof evChargingStationsAvailabilityCustomize;\n placeByID: typeof placeByIdCustomize;\n autocompleteSearch: typeof autocompleteCustomize;\n} = {\n reverseGeocode: revgeoCustomize,\n geocode: geocodeCustomize,\n geometryData: geometryDataCustomize,\n geometrySearch: geometrySearchCustomize,\n calculateRoute: routingCustomize,\n reachableRange: reachableRangeCustomize,\n evChargingStationsAvailability: evChargingStationsAvailabilityCustomize,\n placeByID: placeByIdCustomize,\n autocompleteSearch: autocompleteCustomize,\n};\n","import type { CalculateRouteTemplate } from './calculateRouteTemplate';\nimport { calculateRouteTemplate } from './calculateRouteTemplate';\nimport { buildCalculateRouteRequest } from './requestBuilder';\nimport { parseCalculateRouteResponse } from './responseParser';\n\nconst customize: {\n buildCalculateRouteRequest: typeof buildCalculateRouteRequest;\n parseCalculateRouteResponse: typeof parseCalculateRouteResponse;\n calculateRouteTemplate: CalculateRouteTemplate;\n} = {\n buildCalculateRouteRequest,\n parseCalculateRouteResponse,\n calculateRouteTemplate,\n};\nexport default customize;\n","import type {\n ChargingPark,\n ChargingParkWithAvailability,\n ChargingStationsAvailability,\n CommonPlaceProps,\n EVChargingStationWithAvailabilityPlaceProps,\n Place,\n Places,\n} from '@tomtom-org/maps-sdk/core';\nimport { bboxFromGeoJSON } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { EVChargingStationsAvailabilityTemplate } from './evChargingStationsAvailabilityTemplate';\nimport { evChargingStationsAvailabilityTemplate } from './evChargingStationsAvailabilityTemplate';\nimport type { ChargingStationsAvailabilityParams } from './types/evChargingStationsAvailabilityParams';\n\n/**\n * Get real-time availability of electric vehicle charging stations.\n *\n * Provides current operational status of charging points and connectors at EV charging parks,\n * enabling drivers to find available chargers before arriving at a location.\n *\n * @remarks\n * Key information returned:\n * - **Point-level status**: Available, Occupied, Reserved, Out of Service\n * - **Connector details**: Power ratings, plug types, current availability\n * - **Aggregated counts**: Quick overview of available vs occupied chargers\n * - **Access information**: Public, private, or restricted access\n * - **Opening hours**: When the charging facility is accessible\n *\n * @param params - Charging availability parameters with station ID\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to charging station availability information\n *\n * @example\n * ```typescript\n * // Get availability for a specific charging park\n * const availability = await evChargingStationsAvailability({\n * key: 'your-api-key',\n * id: 'charging-park-id-123'\n * });\n *\n * // Check how many chargers are available\n * const availableCount = availability.chargingPointAvailability.statusCounts.Available;\n * console.log(`${availableCount} chargers available`);\n *\n * // Find available CCS connectors\n * const ccsConnectors = availability.connectorAvailabilities.find(\n * ca => ca.connector.type === 'IEC62196Type2CCS'\n * );\n * ```\n *\n * @see [EV Charging Availability API](https://docs.tomtom.com/search-api/documentation)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [EV Charging Stations Availability Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/ev-charging-stations-availability)\n *\n * @group EV Charging\n */\nexport const evChargingStationsAvailability = async (\n params: ChargingStationsAvailabilityParams,\n customTemplate?: Partial<EVChargingStationsAvailabilityTemplate>,\n): Promise<ChargingStationsAvailability | undefined> =>\n callService(\n params,\n { ...evChargingStationsAvailabilityTemplate, ...customTemplate },\n 'EVChargingStationsAvailability',\n );\n\n/**\n * Enhance a place with real-time EV charging availability data.\n *\n * Fetches availability information for an EV charging station and merges it into\n * the place properties.\n *\n * @param place - The place to enhance with availability data\n *\n * @returns Promise resolving to the place with merged availability information\n * @returns undefined if no availability data is present for the `place` input parameter.\n *\n * @example\n * ```typescript\n * // After search, enhance place with availability\n * const searchResult = await search({ query: 'EV charging', ... });\n * const place = searchResult.features[0];\n *\n * const enhancedPlace = await getPlaceWithEVAvailability(place);\n * const availability = enhancedPlace.properties.chargingPark?.availability;\n *\n * if (availability) {\n * console.log('Available chargers:', availability.chargingPointAvailability.count);\n * }\n * ```\n *\n * @group EV Charging\n */\nexport const getPlaceWithEVAvailability = async <P extends CommonPlaceProps = CommonPlaceProps>(\n place: Place<P>,\n): Promise<Place<EVChargingStationWithAvailabilityPlaceProps> | undefined> => {\n const availabilityId = place.properties.dataSources?.chargingAvailability?.id;\n if (!availabilityId) {\n return undefined;\n }\n try {\n const availability = await evChargingStationsAvailability({ id: availabilityId });\n const poi = place.properties.poi;\n return availability\n ? {\n ...place,\n properties: {\n ...place.properties,\n // We override poi opening hours with the ones from the EV call, which might be better supported:\n ...(poi && { poi: { ...poi, openingHours: availability.openingHours } }),\n chargingPark: {\n ...(place.properties.chargingPark as ChargingPark),\n availability,\n },\n },\n }\n : undefined;\n } catch (e) {\n // (Likely a QPS limit error)\n console.error(e);\n return undefined;\n }\n};\n\n/**\n * Enhance multiple places with real-time EV charging availability data.\n *\n * Fetches availability information for all EV charging stations in a collection\n * and merges it into their properties. Non-EV places and EV stations without availability data are returned unchanged.\n *\n * @remarks\n * **Important**: Availability requests are made sequentially to avoid exceeding\n * API rate limits (QPS - Queries Per Second). For large result sets, this may\n * take some time.\n *\n * @param places - Collection of places to enhance\n * @param options - Configuration options\n *\n * @returns Promise resolving to places collection with merged availability\n *\n * @example\n * ```typescript\n * // Search for charging stations and add availability\n * const results = await search({\n * query: 'EV charging',\n * at: [4.9, 52.3],\n * radius: 5000\n * });\n *\n * const withAvailability = await getPlacesWithEVAvailability(results, {\n * excludeIfAvailabilityUnknown: true // Filter out stations with unknown availability\n * });\n *\n * // Display only stations with known availability\n * withAvailability.features.forEach(place => {\n * const available = place.properties.chargingPark?.availability?.chargingPointAvailability.count;\n * console.log(`${place.properties.poi?.name}: ${available} chargers`);\n * });\n * ```\n *\n * @group EV Charging\n */\nexport async function getPlacesWithEVAvailability<P extends CommonPlaceProps = CommonPlaceProps>(\n places: Places<P>,\n options?: {\n excludeIfAvailabilityUnknown: true;\n },\n): Promise<Places<EVChargingStationWithAvailabilityPlaceProps>>;\n\nexport async function getPlacesWithEVAvailability<P extends CommonPlaceProps = CommonPlaceProps>(\n places: Places<P>,\n options?: {\n /**\n * If true, places with unknown availability will be filtered out. Otherwise, they will be included.\n * @default false\n */\n excludeIfAvailabilityUnknown?: boolean;\n },\n): Promise<Places<P | EVChargingStationWithAvailabilityPlaceProps>> {\n const enhancedPlaces: Array<Place<P> | Place<EVChargingStationWithAvailabilityPlaceProps>> = [];\n for (const place of places.features) {\n // (We fetch the availabilities sequentially on purpose to prevent QPS limit errors)\n const placeWithAvailability = await getPlaceWithEVAvailability(place);\n if (placeWithAvailability) {\n enhancedPlaces.push(placeWithAvailability);\n } else if (!options?.excludeIfAvailabilityUnknown) {\n enhancedPlaces.push(place);\n }\n }\n return { ...places, features: enhancedPlaces, bbox: bboxFromGeoJSON(enhancedPlaces) };\n}\n\n/**\n * Type guard to check if a ChargingPark has availability data.\n *\n * @param chargingPark - The charging park to check\n * @returns True if the charging park has availability data\n *\n * @group EV Charging\n */\nexport const hasChargingAvailability = (\n chargingPark: ChargingPark | ChargingParkWithAvailability | undefined,\n): chargingPark is ChargingParkWithAvailability =>\n Boolean(chargingPark && 'availability' in chargingPark && chargingPark.availability);\n\nexport default evChargingStationsAvailability;\n","import type { Place } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { GeocodingTemplate } from './geocodingTemplate';\nimport { geocodingTemplate } from './geocodingTemplate';\nimport type { GeocodingParams } from './types/geocodingParams';\nimport type { GeocodingProps, GeocodingResponse } from './types/geocodingResponse';\n\n/**\n * Convert addresses into geographic coordinates (geocoding).\n *\n * The Geocode service translates addresses and place names into geographic coordinates,\n * enabling you to position markers on maps, calculate routes, or perform spatial analysis.\n *\n * @remarks\n * This service is optimized for address lookup and does not return POIs (Points of Interest).\n * For POI search, use the {@link search} function instead.\n *\n * Features:\n * - Highly tolerant of typos and incomplete addresses\n * - Handles various address formats and components\n * - Supports street addresses, intersections, and cross streets\n * - Works with higher-level geographies (cities, counties, states, countries)\n * - Returns structured address components\n *\n * @param params - Geocoding parameters including the address query\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to geocoded location results\n *\n * @example\n * ```typescript\n * // Geocode a complete address\n * const result = await geocode({\n * key: 'your-api-key',\n * query: '1600 Pennsylvania Avenue NW, Washington, DC'\n * });\n *\n * // Geocode with partial address\n * const partialResult = await geocode({\n * key: 'your-api-key',\n * query: 'Amsterdam, Netherlands'\n * });\n *\n * // Geocode with bias towards specific location\n * const biasedResult = await geocode({\n * key: 'your-api-key',\n * query: 'Main Street',\n * at: [4.9041, 52.3676], // Bias toward Amsterdam\n * limit: 5\n * });\n *\n * // Geocode an intersection\n * const intersection = await geocode({\n * key: 'your-api-key',\n * query: '5th Avenue & 42nd Street, New York'\n * });\n * ```\n *\n * @see [Geocode API Documentation](https://docs.tomtom.com/search-api/documentation/geocoding-service/geocode)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Geocoding Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/geocoding)\n *\n * @group Geocoding\n */\nexport const geocode = async (\n params: GeocodingParams,\n customTemplate?: Partial<GeocodingTemplate>,\n): Promise<GeocodingResponse> => callService(params, { ...geocodingTemplate, ...customTemplate }, 'Geocode');\n\n/**\n *\n * @param query\n * @group Geocoding\n */\nexport const geocodeOne = async (query: string): Promise<Place<GeocodingProps>> =>\n (await geocode({ query, limit: 1 })).features[0];\n","import type { CommonPlaceProps, Places, PolygonFeatures } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { GeometryDataTemplate } from './geometryDataTemplate';\nimport { geometryDataTemplate } from './geometryDataTemplate';\nimport type { GeometryDataParams, GeometryParams, GeometryPlaceParams } from './types/geometryDataParams';\n\n/**\n * Merge our internal Places \"properties\" response with Geometry data\n * @param places\n * @param geometries\n * @returns FeatureCollection<Polygon | MultiPolygon>,\n */\nconst mergePlacesWithGeometries = (places: Places, geometries: PolygonFeatures): PolygonFeatures<CommonPlaceProps> => {\n const placesIdMap = places.features.reduce(\n (acc, place) => {\n const geometryId = place.properties.dataSources?.geometry?.id;\n\n if (geometryId) {\n acc[geometryId] = {\n ...place.properties,\n placeCoordinates: place.geometry.coordinates,\n };\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n\n const features = geometries.features.map((feature) => {\n if (feature.id && placesIdMap[feature.id]) {\n return { ...feature, properties: placesIdMap[feature.id] };\n }\n\n return feature;\n });\n\n return {\n type: 'FeatureCollection',\n bbox: geometries.bbox,\n features,\n } as PolygonFeatures<CommonPlaceProps>;\n};\n\n/**\n * Retrieve polygon geometries representing geographic area boundaries.\n *\n * The Geometry Data service returns coordinate sets that define the outlines of\n * geographic areas such as cities, countries, administrative regions, or POI footprints.\n * These polygons enable visualization of area boundaries, spatial analysis, and\n * geofencing applications.\n *\n * @remarks\n * Key features:\n * - **Batch requests**: Fetch up to 20 geometries in a single call\n * - **Multiple scales**: From countries down to building footprints\n * - **Place integration**: Can merge with place data for enriched results\n * - **Standard GeoJSON**: Returns standard Polygon/MultiPolygon features\n *\n * Common use cases:\n * - Display city or country boundaries on maps\n * - Show POI building footprints\n * - Create geofences for spatial queries\n * - Visualize administrative divisions\n * - Calculate areas and spatial relationships\n *\n * @param params - Geometry parameters with IDs or places to fetch boundaries for\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to polygon features representing area boundaries\n *\n * @example\n * ```typescript\n * // Fetch geometry by ID\n * const cityBoundary = await geometryData({\n * key: 'your-api-key',\n * geometries: ['geometry-id-123']\n * });\n *\n * // Fetch multiple geometries at once\n * const boundaries = await geometryData({\n * key: 'your-api-key',\n * geometries: ['country-id-1', 'city-id-2', 'poi-id-3']\n * });\n *\n * // Fetch and merge with place data\n * const searchResults = await search({ query: 'Amsterdam' });\n * const withBoundaries = await geometryData({\n * key: 'your-api-key',\n * geometries: searchResults // Places with geometry IDs\n * });\n * // Result includes both place properties and polygon boundaries\n * ```\n *\n * @see [Geometry Data API Documentation](https://docs.tomtom.com/search-api/documentation/additional-data-service/additional-data)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Geometry Data Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/geometry-data)\n *\n * @group Geometry\n */\nexport async function geometryData(\n params: GeometryDataParams,\n customTemplate?: Partial<GeometryDataTemplate>,\n): Promise<PolygonFeatures>;\nexport async function geometryData(\n params: GeometryPlaceParams,\n customTemplate?: Partial<GeometryDataTemplate>,\n): Promise<PolygonFeatures<CommonPlaceProps>>;\nexport async function geometryData(params: GeometryParams, customTemplate?: Partial<GeometryDataTemplate>) {\n const geometryResult = await callService(params, { ...geometryDataTemplate, ...customTemplate }, 'GeometryData');\n\n // If params.geometries is a FeatureCollection(Place), the properties will be merged with geometry results.\n if (!Array.isArray(params.geometries) && params.geometries.type === 'FeatureCollection') {\n return mergePlacesWithGeometries(params.geometries, geometryResult);\n }\n\n return geometryResult;\n}\n","import { callService } from '../shared/serviceTemplate';\nimport type { PlaceByIdTemplate } from './placeByIdTemplate';\nimport { placeByIdTemplate } from './placeByIdTemplate';\nimport type { PlaceByIdParams, PlaceByIdResponse } from './types';\n\n/**\n * Retrieve detailed information about a place using its unique identifier.\n *\n * The Place by ID service fetches comprehensive data for a specific place when you\n * have its ID from a previous search or from a place's dataSources. This is useful\n * for getting additional details or refreshing information about a known location.\n *\n * @remarks\n * Use cases:\n * - **Fetch POI details**: Get extended information like reviews, photos, amenities\n * - **Refresh place data**: Update information for a cached place\n * - **Deep linking**: Allow users to share/bookmark specific places\n * - **Related POI navigation**: Explore parent/child relationships\n *\n * The ID can be obtained from:\n * - Previous search results (place.id)\n * - POI details data source (place.properties.dataSources.poiDetails.id)\n * - Related POIs (place.properties.relatedPois[].id)\n * - Deep links or bookmarks\n *\n * @param params - Place by ID parameters with the place identifier\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to detailed place information\n *\n * @example\n * ```typescript\n * // Get place by ID from search result\n * const searchResult = await search({ query: 'Eiffel Tower' });\n * const placeId = searchResult.features[0].id;\n *\n * const placeDetails = await placeById({\n * key: 'your-api-key',\n * entityId: placeId\n * });\n *\n * // Get extended POI details\n * const place = searchResult.features[0];\n * const poiDetailsId = place.properties.dataSources?.poiDetails?.id;\n *\n * if (poiDetailsId) {\n * const detailedPOI = await placeById({\n * key: 'your-api-key',\n * entityId: poiDetailsId\n * });\n * // May include additional photos, reviews, extended hours, etc.\n * }\n *\n * // Navigate to related POI\n * const relatedPOI = place.properties.relatedPois?.[0];\n * if (relatedPOI) {\n * const parentPlace = await placeById({\n * key: 'your-api-key',\n * entityId: relatedPOI.id\n * });\n * console.log('Parent location:', parentPlace.properties.address);\n * }\n * ```\n *\n * @see [Place by ID API Documentation](https://docs.tomtom.com/search-api/documentation/place-by-id-service/place-by-id)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n *\n * @group Place\n */\nexport const placeById = async (\n params: PlaceByIdParams,\n customTemplate?: Partial<PlaceByIdTemplate>,\n): Promise<PlaceByIdResponse> => callService(params, { ...placeByIdTemplate, ...customTemplate }, 'PlaceById');\n\nexport default placeById;\n","import type { Place, RevGeoAddressProps } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { ReverseGeocodingTemplate } from './reverseGeocodingTemplate';\nimport { reverseGeocodingTemplate } from './reverseGeocodingTemplate';\nimport type { ReverseGeocodingParams } from './types/reverseGeocodingParams';\n\n/**\n * Response from the reverse geocoding service.\n *\n * Contains a place with address information for the given coordinates.\n *\n * @group Reverse Geocoding\n */\nexport type ReverseGeocodingResponse = Place<RevGeoAddressProps>;\n\n/**\n * Convert geographic coordinates into human-readable addresses (reverse geocoding).\n *\n * Reverse geocoding translates latitude/longitude coordinates into street addresses,\n * which is essential for location-based applications that need to display addresses\n * from GPS coordinates or map clicks.\n *\n * @remarks\n * Common use cases:\n * - **Tracking applications**: Convert GPS coordinates from devices into addresses\n * - **Map interactions**: Display address when user clicks on map\n * - **Location sharing**: Show readable location instead of coordinates\n * - **Delivery apps**: Confirm pickup/dropoff addresses from driver location\n * - **Asset tracking**: Display current location of vehicles or equipment\n *\n * Features:\n * - Returns complete address hierarchy (street, city, state, country)\n * - Supports cross-street results\n * - Includes side of street information\n * - Provides address ranges for streets\n * - Returns multiple result types (street, POI, geography)\n *\n * @param params - Reverse geocoding parameters including coordinates\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to the address for the given coordinates\n *\n * @example\n * ```typescript\n * // Get address for coordinates\n * const address = await reverseGeocode({\n * key: 'your-api-key',\n * position: [4.9041, 52.3676] // Amsterdam coordinates\n * });\n * // Returns: Dam, 1012 Amsterdam, Netherlands\n *\n * // Get address with specific street number\n * const specificAddress = await reverseGeocode({\n * key: 'your-api-key',\n * position: [-77.0369, 38.8977], // Washington DC\n * number: '1600'\n * });\n * // Returns: 1600 Pennsylvania Avenue NW\n *\n * // Get nearest cross street\n * const crossStreet = await reverseGeocode({\n * key: 'your-api-key',\n * position: [-74.0060, 40.7128], // New York\n * returnRoadUse: true\n * });\n * ```\n *\n * @see [Reverse Geocode API Documentation](https://docs.tomtom.com/search-api/documentation/reverse-geocoding-service/reverse-geocode)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Reverse Geocoding Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/reverse-geocoding)\n *\n * @group Reverse Geocoding\n */\nexport const reverseGeocode = async (\n params: ReverseGeocodingParams,\n customTemplate?: Partial<ReverseGeocodingTemplate>,\n): Promise<ReverseGeocodingResponse> =>\n callService(params, { ...reverseGeocodingTemplate, ...customTemplate }, 'ReverseGeocode');\n\nexport default reverseGeocode;\n","import type { Routes } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { CalculateRouteTemplate } from './calculateRouteTemplate';\nimport { calculateRouteTemplate } from './calculateRouteTemplate';\nimport type { CalculateRouteParams } from './types/calculateRouteParams';\n\n/**\n * Calculates a route between an origin and destination, optionally passing through extra waypoints.\n *\n * @param params - Route calculation parameters including locations, travel mode, and other options\n * @param customTemplate - Optional template customization for request/response handling\n * @returns Promise resolving to calculated route(s) with geometry, distance, and travel time\n *\n * @see [Calculate Route API Documentation](https://docs.tomtom.com/routing-api/documentation/tomtom-maps/calculate-route)\n *\n * @group Routing\n */\nexport const calculateRoute = async (\n params: CalculateRouteParams,\n customTemplate?: Partial<CalculateRouteTemplate>,\n): Promise<Routes> => callService(params, { ...calculateRouteTemplate, ...customTemplate }, 'Routing');\n","import { z } from 'zod/v4-mini';\nimport { commonSearchParamsSchema } from '../search/commonSearchParamsSchema';\nimport { commonGeocodeAndFuzzySearchParamsSchema } from '../shared/schema/commonGeocodeAndFuzzySearchParamsSchema';\n\nconst fuzzySearchRequestOptional = z.partial(\n z.object({\n minFuzzyLevel: z.number().check(z.minimum(1), z.maximum(4)),\n maxFuzzyLevel: z.number().check(z.minimum(1), z.maximum(4)),\n }),\n);\n\n/**\n * @ignore\n */\nexport const fuzzySearchRequestSchema = z.extend(\n commonSearchParamsSchema,\n z.extend(commonGeocodeAndFuzzySearchParamsSchema, fuzzySearchRequestOptional.shape).shape,\n);\n","import { bboxFromGeoJSON, bboxOnlyIfWithArea } from '@tomtom-org/maps-sdk/core';\nimport { latLonAPIToPosition } from '../shared/geometry';\nimport { parseSearchAPIResult, parseSummaryAPI } from '../shared/searchResultParsing';\nimport type { FuzzySearchResponse, FuzzySearchResponseAPI, QueryIntent, QueryIntentAPI } from './types';\n\nconst queryIntentApiToSdk = (intentApi: QueryIntentAPI): QueryIntent => {\n let intent;\n switch (intentApi.type) {\n case 'COORDINATE':\n intent = { ...intentApi, details: { position: latLonAPIToPosition(intentApi.details) } };\n break;\n case 'NEARBY':\n intent = {\n ...intentApi,\n details: {\n position: latLonAPIToPosition({ lon: intentApi.details.lon, lat: intentApi.details.lat }),\n text: intentApi.details.text,\n query: intentApi.details.query,\n },\n };\n break;\n case 'BOOKMARK':\n case 'W3W':\n intent = intentApi;\n }\n return intent;\n};\n\n/**\n * Default function to parse a fuzzy search response.\n * @param apiResponse The API response.\n */\nexport const parseFuzzySearchResponse = (apiResponse: FuzzySearchResponseAPI): FuzzySearchResponse => {\n const features = apiResponse.results.map(parseSearchAPIResult);\n const bbox = bboxOnlyIfWithArea(bboxFromGeoJSON(features));\n return {\n type: 'FeatureCollection',\n properties: {\n ...parseSummaryAPI(apiResponse.summary),\n queryIntent: apiResponse.summary.queryIntent.map(queryIntentApiToSdk),\n },\n features,\n ...(bbox && { bbox }),\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { fuzzySearchRequestSchema } from './fuzzySearchRequestSchema';\nimport { buildFuzzySearchRequest } from './requestBuilder';\nimport { parseFuzzySearchResponse } from './responseParser';\nimport type { FuzzySearchParams, FuzzySearchResponse, FuzzySearchResponseAPI } from './types';\n\n/**\n * Fuzzy search service template type.\n * @ignore\n */\nexport type FuzzySearchTemplate = ServiceTemplate<FuzzySearchParams, URL, FuzzySearchResponseAPI, FuzzySearchResponse>;\n\n/**\n * Fuzzy search service template main implementation.\n * @ignore\n */\nexport const fuzzySearchTemplate: FuzzySearchTemplate = {\n requestValidation: { schema: fuzzySearchRequestSchema },\n buildRequest: buildFuzzySearchRequest,\n sendRequest: get,\n parseResponse: parseFuzzySearchResponse,\n};\n","import { bboxFromGeoJSON } from '@tomtom-org/maps-sdk/core';\nimport { arrayToCSV } from '../shared/arrays';\nimport { appendCommonSearchParams, PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendByJoiningParamValue, appendOptionalParam } from '../shared/request/requestBuildingUtils';\nimport type { FuzzySearchParams } from './types';\n\nconst buildUrlBasePath = (mergedOptions: FuzzySearchParams): string =>\n mergedOptions.customServiceBaseURL ??\n `${mergedOptions.commonBaseURL}${PLACES_URL_PATH}/search/${mergedOptions.query}.json`;\n\n/**\n * Default function for building a fuzzy search request from {@link FuzzySearchParams}\n * @param params The fuzzy search parameters, with global configuration already merged into them.\n */\nexport const buildFuzzySearchRequest = (params: FuzzySearchParams): URL => {\n const url = new URL(`${buildUrlBasePath(params)}`);\n appendCommonSearchParams(url, params);\n const urlParams = url.searchParams;\n appendOptionalParam(urlParams, 'typeahead', params.typeahead);\n appendOptionalParam(urlParams, 'ofs', params.offset);\n appendByJoiningParamValue(urlParams, 'countrySet', params.countries);\n appendOptionalParam(urlParams, 'radius', params.radiusMeters);\n const bbox = params.boundingBox && bboxFromGeoJSON(params.boundingBox);\n if (bbox) {\n urlParams.append('topLeft', arrayToCSV([bbox[3], bbox[0]]));\n urlParams.append('btmRight', arrayToCSV([bbox[1], bbox[2]]));\n }\n appendOptionalParam(urlParams, 'minFuzzyLevel', params.minFuzzyLevel);\n appendOptionalParam(urlParams, 'maxFuzzyLevel', params.maxFuzzyLevel);\n return url;\n};\n","import type { Place, Places, SearchPlaceProps } from '@tomtom-org/maps-sdk/core';\nimport type { FuzzySearchParams, QueryIntent } from '../fuzzy-search';\nimport { fuzzySearch } from '../fuzzy-search/fuzzySearch';\nimport type { FuzzySearchTemplate } from '../fuzzy-search/fuzzySearchTemplate';\nimport type { GeometrySearchParams } from '../geometry-search';\nimport { geometrySearch } from '../geometry-search/geometrySearch';\nimport type { GeometrySearchTemplate } from '../geometry-search/geometrySearchTemplate';\nimport type { SearchSummary } from '../shared';\n\ntype SearchFeatureCollectionProps = SearchSummary & {\n queryIntent?: QueryIntent[];\n};\n\n/**\n * Search service response containing places that match the query.\n *\n * Collection of place features with search-specific properties like relevance scores and distances.\n *\n * @group Search\n */\nexport type SearchResponse = Places<SearchPlaceProps, SearchFeatureCollectionProps>;\n\n/**\n * Universal search function for finding places by text query or within geometries.\n *\n * This is a unified interface that automatically routes to either:\n * - **Geometry Search**: When geometries parameter is provided (search within specific areas)\n * - **Fuzzy Search**: When no geometries provided (free-text search)\n *\n * @remarks\n * The search service provides:\n * - POI (Points of Interest) search\n * - Address search\n * - Geographic area search\n * - Category-based filtering\n * - Position-based relevance ranking\n *\n * Results are ranked by relevance with scores and optional distances.\n *\n * @param params - Search parameters (either GeometrySearchParams or FuzzySearchParams)\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to a collection of matching places\n *\n * @example\n * ```typescript\n * // Free-text search near a location\n * const results = await search({\n * key: 'your-api-key',\n * query: 'pizza restaurant',\n * at: [4.9041, 52.3676], // Amsterdam\n * limit: 10\n * });\n *\n * // Search within a specific area\n * const areaResults = await search({\n * key: 'your-api-key',\n * query: 'coffee shop',\n * geometries: [polygon], // Search within this polygon\n * limit: 20\n * });\n *\n * // Category search\n * const restaurants = await search({\n * key: 'your-api-key',\n * query: 'restaurant',\n * categorySet: [7315], // Restaurant category\n * at: [4.9041, 52.3676],\n * radius: 5000 // Within 5km\n * });\n * ```\n *\n * @see [Search API Documentation](https://docs.tomtom.com/search-api/documentation/search-service/search-service)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Search Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/search)\n *\n * @group Search\n */\nexport const search = async (\n params: GeometrySearchParams | FuzzySearchParams,\n customTemplate?: Partial<GeometrySearchTemplate | FuzzySearchTemplate>,\n): Promise<SearchResponse> =>\n 'geometries' in params\n ? geometrySearch(params, customTemplate as GeometrySearchTemplate)\n : fuzzySearch(params, customTemplate as FuzzySearchTemplate);\n\n/**\n * Search for a single place by text query.\n *\n * Convenience function that calls {@link search} and returns the first result.\n *\n * @param query - Search query string\n * @returns Promise resolving to the first matching place, or undefined if no results\n *\n * @example\n * ```typescript\n * const place = await searchOne('Vondelpark Amsterdam');\n * if (place) {\n * console.log(place.properties.name);\n * }\n * ```\n *\n * @remarks\n * * Useful to quickly find a single place, particularly a POI.\n * * If you want to find a single address, consider 'geocodeOne'.\n *\n * @group Search\n */\nexport const searchOne = async (query: string): Promise<Place<SearchPlaceProps> | undefined> =>\n (await search({ query, limit: 1 })).features[0];\n","import { callService } from '../shared/serviceTemplate';\nimport type { FuzzySearchTemplate } from './fuzzySearchTemplate';\nimport { fuzzySearchTemplate } from './fuzzySearchTemplate';\nimport type { FuzzySearchParams, FuzzySearchResponse } from './types';\n\n/**\n * Search for places using free-text queries with fuzzy matching.\n *\n * The Fuzzy Search service provides a flexible search that handles typos, abbreviations,\n * and incomplete addresses. It searches across POIs (Points of Interest), addresses,\n * and geographic areas to find the best matches for your query.\n *\n * @remarks\n * Key features:\n * - **Typo tolerance**: Handles misspellings and typing errors\n * - **Partial matching**: Works with incomplete queries\n * - **Multi-category search**: Searches POIs, addresses, and places simultaneously\n * - **Position bias**: Prioritizes results near a given location\n * - **Flexible input**: Accepts natural language queries\n *\n * The service is ideal for:\n * - User-facing search boxes where typos are common\n * - Location lookup without knowing exact names\n * - General \"find anything\" search functionality\n * - Autocomplete with final selection\n *\n * @param params Fuzzy search parameters including the search query\n * @param customTemplate Advanced customization for request/response handling\n *\n * @returns Promise resolving to a collection of matching places\n *\n * @example\n * ```typescript\n * // Basic search with typo tolerance\n * const results = await fuzzySearch({\n * key: 'your-api-key',\n * query: 'amstrdam' // Typo: missing 'e'\n * });\n * // Still finds \"Amsterdam\"\n *\n * // Search near a specific location\n * const nearby = await fuzzySearch({\n * key: 'your-api-key',\n * query: 'pizza',\n * at: [4.9041, 52.3676], // Amsterdam\n * radius: 2000, // Within 2km\n * limit: 10\n * });\n *\n * // Search with category filter\n * const restaurants = await fuzzySearch({\n * key: 'your-api-key',\n * query: 'italian',\n * categorySet: [7315], // Restaurant category\n * at: [4.9041, 52.3676]\n * });\n *\n * // Partial address search\n * const addresses = await fuzzySearch({\n * key: 'your-api-key',\n * query: '123 main st',\n * countrySet: ['US'],\n * limit: 5\n * });\n * ```\n *\n * @see [Fuzzy Search API Documentation](https://docs.tomtom.com/search-api/documentation/search-service/fuzzy-search)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Search Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/search)\n *\n * @ignore (exposed via 'search')\n */\nexport const fuzzySearch = async (\n params: FuzzySearchParams,\n customTemplate?: Partial<FuzzySearchTemplate>,\n): Promise<FuzzySearchResponse> => callService(params, { ...fuzzySearchTemplate, ...customTemplate }, 'FuzzySearch');\n\nexport default fuzzySearch;\n"],"names":["APICode","SDKError","Error","constructor","message","service","issues","super","this","captureStackTrace","APIErrorCode","TOO_MANY_REQUESTS","FORBIDDEN","SDKServiceError","status","parseDefaultResponseError","error","serviceName","data","errorText","buildResponseError","parseResponseError","fetchError","buildValidationError","$constructor","name","initializer","params","init","inst","def","_zod","Object","defineProperty","value","constr","_","traits","Set","enumerable","has","add","proto","prototype","keys","i","length","k","bind","Parent","Definition","_a","deferred","fn","Symbol","hasInstance","$ZodAsyncError","globalConfig","config","newConfig","jsonStringifyReplacer","toString","cached","getter","nullish","input","cleanRegex","source","start","startsWith","end","endsWith","slice","EVALUATING","defineLazy","object","key","get","set","v","configurable","assignProp","target","prop","writable","mergeDefs","defs","mergedDescriptors","descriptors","getOwnPropertyDescriptors","assign","defineProperties","_args","isObject","Array","isArray","propertyKeyTypes","escapeRegex","str","replace","clone","cl","parent","normalizeParams","_params","extend","schema","shape","o","ctor","prot","hasOwnProperty","call","isPlainObject","checks","existingShape","getOwnPropertyDescriptor","_shape","aborted","x","startIndex","continue","prefixIssues","path","map","iss","unshift","unwrapMessage","finalizeIssue","ctx","full","customError","localeError","reportInput","getLengthableOrigin","JSON","stringify","util.jsonStringifyReplacer","$ZodError","$ZodRealError","toDotPath","_path","segs","seg","push","String","test","join","parse","_Err","_ctx","async","result","run","Promise","core.$ZodAsyncError","e","Err","util.finalizeIssue","core.config","util.captureStackTrace","callee","errors.$ZodRealError","parseAsync","safeParse","success","errors.$ZodError","safeParseAsync","number","boolean","_undefined","$ZodCheck","core.$constructor","onattach","numericOriginMap","bigint","$ZodCheckLessThan","origin","bag","curr","inclusive","maximum","exclusiveMaximum","Number","POSITIVE_INFINITY","check","payload","code","getTime","abort","$ZodCheckGreaterThan","minimum","exclusiveMinimum","NEGATIVE_INFINITY","$ZodCheckMaxLength","when","val","util.nullish","util.getLengthableOrigin","$ZodCheckMinLength","$ZodCheckLengthEquals","tooBig","exact","version","major","minor","patch","$ZodType","ch","runChecks","asyncResult","isAborted","util.aborted","currLen","resolve","then","handleCanaryResult","canary","checkResult","skipChecks","direction","util.defineLazy","validate","r","vendor","$ZodString","pattern","patterns","pop","RegExp","coerce","expected","$ZodNumber","regexes.number","isNaN","isFinite","received","$ZodBoolean","regexes.boolean","Boolean","$ZodUndefined","regexes.undefined","values","optin","optout","$ZodAny","$ZodDate","Date","_err","isDate","handleArrayResult","final","index","util.prefixIssues","$ZodArray","proms","item","element","all","handlePropertyResult","isOptionalOut","normalizeDef","okeys","filter","keySet","numKeys","optionalKeys","$ZodObject","desc","sh","newSh","_normalized","util.cached","propValues","field","util.isObject","catchall","el","unrecognized","_catchall","t","type","handleCatchall","handleUnionResults","results","nonaborted","errors","$ZodUnion","options","some","every","flatMap","option","from","p","util.cleanRegex","single","first","$ZodDiscriminatedUnion","_super","pv","indexOf","entries","disc","opts","Map","discriminator","size","opt","unionFallback","note","$ZodTuple","items","reversedIndex","reverse","findIndex","optStart","rest","tooSmall","handleTupleResult","$ZodEnum","numericValues","util.getEnumValues","valuesSet","util.propertyKeyTypes","util.escapeRegex","$ZodLiteral","handleOptionalResult","$ZodOptional","innerType","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","args","util.issue","$ZodRegistry","_map","WeakMap","_idmap","_meta","meta","id","clear","remove","delete","pm","f","_string","Class","util.normalizeParams","_number","_boolean","_any","_date","_lte","checks.$ZodCheckLessThan","_gt","checks.$ZodCheckGreaterThan","_gte","_positive","_maxLength","checks.$ZodCheckMaxLength","_minLength","checks.$ZodCheckMinLength","_length","checks.$ZodCheckLengthEquals","_refine","globalThis","__zod_globalRegistry","ZodMiniType","core.$ZodType","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","with","_def","core.clone","brand","register","reg","apply","ZodMiniString","core.$ZodString","string","core._string","ZodMiniNumber","core.$ZodNumber","core._number","ZodMiniBoolean","core.$ZodBoolean","core._boolean","ZodMiniUndefined","core.$ZodUndefined","core._undefined","ZodMiniAny","core.$ZodAny","any","ZodMiniDate","core.$ZodDate","date","core._date","ZodMiniArray","core.$ZodArray","array","keyof","_enum","ZodMiniObject","core.$ZodObject","util.extend","partial","mask","oldShape","util.partial","ZodMiniOptional","ZodMiniUnion","core.$ZodUnion","union","ZodMiniDiscriminatedUnion","core.$ZodDiscriminatedUnion","discriminatedUnion","ZodMiniTuple","core.$ZodTuple","tuple","_paramsOrRest","hasRest","ZodMiniEnum","core.$ZodEnum","fromEntries","ZodMiniLiteral","core.$ZodLiteral","literal","core.$ZodOptional","optional","ZodMiniCustom","core.$ZodCustom","refine","core._refine","commonServiceRequestSchema","z.partial","z.object","apiKey","z.string","commonBaseURL","customServiceBaseURL","language","ValidationError","zodError","lines","sort","a","b","issue","z.prettifyError","callService","template","customApiVersion","getAPIVersion","mergedParams","mergeFromGlobal","apiVersion","validateRequest","mergedSchema","z.extend","z.refine","refinedMergedSchema","refinements","refinement","validation","validateRequestSchema","requestValidation","reject","apiRequest","buildRequest","headers","generateTomTomHeaders","onAPIRequest","apiResponse","sendRequest","onAPIResponse","parseResponse","FetchError","returnOrThrow","response","ok","json","errorBody","contentType","bodyUsed","statusText","includes","detailedError","text","url","fetch","post","method","body","lineStringCoordsSchema","z.array","z.number","geometrySchema","z.enum","coordinates","z.union","radius","z.optional","radiusMeters","bbox","featureSchema","geometry","properties","z.any","featureCollectionSchema","features","hasLngLatSchema","z.tuple","z.minimum","z.maximum","geoJsonbBoxSchema","z.length","geoJSONObjectSchema","hasBBoxSchema","autocompleteSearchRequestSchema","query","position","limit","countries","resultType","freeGlobal","global","freeSelf","self","root","Function","objectProto","nativeObjectToString","symToStringTag","toStringTag","baseGetTag","isOwn","tag","unmasked","getRawTag","objectToString","isObjectLike","isSymbol","arrayMap","iteratee","symbolProto","symbolToString","baseToString","isFunction","uid","coreJsData","maskSrcKey","exec","IE_PROTO","funcToString","toSource","func","reIsHostCtor","funcProto","reIsNative","baseIsNative","getNative","getValue","nativeNow","now","count","lastCalled","baseSetToString","setToString","stamp","remaining","arguments","reIsUint","isIndex","baseAssignValue","eq","other","assignValue","objValue","nativeMax","Math","max","isLength","baseIsArguments","propertyIsEnumerable","isArguments","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","typedArrayTags","baseUnary","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","n","baseTimes","baseKeysIn","nativeKeysIn","Ctor","isProto","keysIn","reIsDeepProp","reIsPlainProp","nativeCreate","Hash","entry","assocIndexOf","__data__","splice","ListCache","getMapData","MapCache","hash","memoize","resolver","TypeError","memoized","cache","Cache","rePropName","reEscapeChar","stringToPath","memoizeCapped","charCodeAt","match","quote","subString","castPath","isKey","toKey","arrayPush","offset","spreadableSymbol","isConcatSpreadable","isFlattenable","flatten","depth","predicate","isStrict","baseFlatten","getPrototype","transform","arg","overArg","getPrototypeOf","objectCtorString","Stack","pairs","LARGE_ARRAY_SIZE","stubArray","allocUnsafe","nativeGetSymbols","getOwnPropertySymbols","getSymbols","resIndex","arrayFilter","symbol","getSymbolsIn","getAllKeysIn","keysFunc","symbolsFunc","baseGetAllKeys","DataView","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","Uint8Array","cloneArrayBuffer","arrayBuffer","byteLength","reFlags","symbolValueOf","valueOf","initCloneByTag","isDeep","regexp","dataView","buffer","byteOffset","typedArray","cloneTypedArray","lastIndex","nodeIsMap","isMap","nodeIsSet","isSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","stack","initCloneArray","isFunc","stacked","forEach","subValue","props","arrayEach","baseGet","baseSlice","isNil","baseUnset","isRootPrimitive","obj","last","customOmitClone","omit","otherArgs","thisArg","overRest","flatRest","paths","isNew","newValue","copyObject","CLONE_DEEP_FLAG","appendCommonParams","urlParams","append","appendByRepeatingParamName","paramName","paramArray","param","appendByJoiningParamValue","appendOptionalParam","appendLatLonParamsFromPosition","hasLngLat","getPosition","PLACES_URL_PATH","appendCommonSearchParams","searchUrl","searchParams","fuelTypes","indexes","poiBrands","poiCategories","poiCategory","poiCategoriesToID","connectors","mapcodes","extendedPostalCodesFor","minPowerKW","maxPowerKW","view","openingHours","timeZone","relatedPois","geographyTypes","buildAutocompleteSearchRequest","URL","mergedOptions","csvLatLngToPosition","csv","splitLatLng","split","positionToCSVLatLon","apiToGeoJSONBBox","apiBBox","westSouth","eastNorth","topLeftPoint","lon","btmRightPoint","lat","southWest","northEast","latLonAPIToPosition","point","parseAutocompleteSearchResponse","geoBias","context","autocompleteSearchTemplate","autocompleteSearch","customTemplate","customize","buildEVChargingStationsAvailabilityRequest","buildUrlBasePath","toChargingSpeed","powerInKW","toChargingPointAvailability","chargingStations","availability","statusCounts","station","chargingPoint","chargingPoints","areEqual","connectorA","connectorB","ratedPowerKW","addConnectorCountAndStatus","availabilities","connector","existingAvailability","find","connectorAvailability","toConnectorCounts","counts","existingCount","connectorCount","addConnectorCount","toConnectorBasedAvailabilities","parseMoment","momentApi","year","month","day","dateYyyymmdd","splitDate","parseInt","parseYyyymmddDate","dateYYYYMMDD","hour","minute","alwaysOpenInThisPeriod","timeRanges","parseOpeningHours","openingHoursApi","timeRangeApi","startTime","endTime","mode","alwaysOpenThisPeriod","parseSearchAPIResult","entryPoints","poi","dist","boundingBox","chargingPark","connectorType","chargingSpeed","toPointGeometry","distance","entrypoint","brands","categoryIds","categorySet","category","parseSummaryAPI","summary","parseEVChargingStationsAvailabilityResponse","accessType","stations","chargingPointAvailability","connectorAvailabilities","evChargingStationsAvailabilityTemplate","apiError","errorMessage","commonGeocodeAndFuzzySearchParamsSchema","typeahead","z.boolean","commonPlacesParamsSchema","views","geocodingRequestSchema","arrayToCSV","sampleWithinMaxLength","maxLength","sampledArray","increment","ceil","buildGeocodingRequest","bboxFromGeoJSON","parseApiResult","addressRanges","entityType","geographyType","to","parseGeocodingResponse","bboxOnlyIfWithArea","geocodingTemplate","geometryDataRequestSchema","geometries","z.minLength","z.maxLength","zoom","getGeometryIDs","placesArray","place","dataSources","buildGeometryDataRequest","geometryIDs","appendGeometries","parseGeometryDataResponse","additionalData","geometryData","feature","generateId","geometryDataTemplate","poiCategoriesToIdZodObject","commonSearchParamsSchema","z.keyof","minFuzzyLevel","mixFuzzyLevel","geometrySearchRequestSchema","sdkGeometryToApiGeometries","searchGeometry","vertices","coord","polygonSizeMap","polygon","bboxOfPolygon","bboxFromCoordsArray","polygonSize","abs","findFiftyLargestPolygons","polygonCoords","buildGeometrySearchRequest","geometryList","parseGeometrySearchResponse","geometrySearchTemplate","geometrySearch","placeByIdRequestSchema","entityId","buildPlaceByIdRequest","parsePlaceByIdResponse","placeByIdTemplate","routeTypes","loadTypes","positiveNumber","nonNegativeNumber","percentageNumber","optionalPositiveNumber","optionalNonNegativeNumber","optionalNormalizedNumber","speedToConsumptionRateSchema","speedKMH","consumptionUnitsPer100KM","baseConsumptionModelSchema","efficiency","acceleration","deceleration","uphill","downhill","speedConsumptionArray","combustionConsumptionModelSchema","speedsToConsumptionsLiters","auxiliaryPowerInLitersPerHour","fuelEnergyDensityInMJoulesPerLiter","electricConsumptionModelSchema","speedsToConsumptionsKWH","auxiliaryPowerInkW","consumptionInKWHPerKMAltitudeGain","recuperationInKWHPerKMAltitudeLoss","chargingConnectorSchema","currentType","currentTypes","plugTypes","baseLoadInkW","maxPowerInkW","maxVoltageInV","maxCurrentInA","voltageRange","minVoltageInV","chargingModelSchema","maxChargeKWH","batteryCurve","stateOfChargeInkWh","chargingConnectors","chargingTimeOffsetInSec","combustionEngineModelSchema","consumption","electricEngineModelSchema","charging","vehicleDimensionsSchema","lengthMeters","widthMeters","heightMeters","weightKG","axleWeightKG","vehicleModelSchema","variantId","dimensions","engine","genericVehicleStateSchema","heading","combustionVehicleStateSchema","currentFuelInLiters","electricVehicleStateSchema","currentChargePCT","currentChargeInkWh","electricVehiclePreferencesSchema","chargingPreferences","minChargeAtDestinationPCT","minChargeAtChargingStopsPCT","minChargeAtDestinationInkWh","minChargeAtChargingStopsInkWh","baseVehicleParamsSchema","model","restrictions","maxSpeedKMH","adrCode","commercial","genericVehicleParamsSchema","engineType","z.undefined","state","preferences","vehicleParametersSchema","z.discriminatedUnion","commonRoutingRequestSchema","costModel","avoid","avoidableTypes","traffic","routeType","thrillingParams","hilliness","windingness","travelMode","vehicle","z.date","reachableRangeRequestSchema","budget","maxFerryLengthMeters","buildSpeedToConsumptionString","speedsToConsumptions","speedToConsumption","appendVehicleEngineModel","appendConsumptionEfficiency","appendElectricConsumptionModel","chargingModel","appendChargingModel","consumptionModel","appendCombustionEngine","appendVehicleModel","vehicleParams","appendVehicleDimensions","appendVehicleParams","combustionState","electricState","kwhElectricState","pctElectricState","appendVehicleState","chargingPrefs","kwhChargingPrefs","pctChargingPrefs","appendVehiclePreferences","appendVehicleRestrictions","appendCommonRoutingParams","formattedDate","toISOString","appendWhenParams","buildReachableRangeRequest","getPositionStrict","parseReachableRangeResponse","reachableRange","boundary","longitude","latitude","reachableRangeTemplate","buildRevGeoRequest","lngLat","allowFreeformNewline","returnSpeedLimit","returnRoadUse","roadUses","parseRevGeoResponse","firstApiResult","addresses","sideOfStreet","offsetPosition","address","streetNumber","originalPosition","reverseGeocodingTemplate","returnMatchType","locations","computeAdditionalTravelTimeFor","vehicleHeading","maxAlternatives","sectionTypes","inputSectionTypesWithGuidance","getChargingPreferences","getPositionsFromPath","pathLike","buildLocationsString","routePlanningLocationTypes","useEntryPoint","waypointInputs","waypointInput","lngLatString","getWaypointProps","buildLocationsStringFromWaypoints","firstPoint","firstRoutePlanningLocation","lastRoutePlanningLocation","lastPoint","positions","getFirstAndLastPoints","toLatLngPointApi","buildlocationsPostData","useEntryPoints","supportingPoints","pointWaypoints","routePlanningLocation","routePlanningLocationIndex","pathRoutePlanningLocation","supportingPointsLengthBeforePath","sections","leg","legIndex","supportingPointIndex","startPointIndex","waypointSourceType","appendPathPostData","waypoint","appendWaypointPostData","buildCalculateRouteRequest","getRoutePlanningLocationType","guidance","phonetics","roadShieldReferences","appendGuidanceParams","instructionsInclude","effectiveSectionTypes","inputSectionTypes","sectionType","appendSectionTypes","representation","extendedRouteRepresentations","postData","pathsIncluded","isLdevr","vehicleModel","chargingParameters","buildPostData","toCurrentType","apiCurrentType","toChargingStop","chargingInformationAtEndOfLeg","chargingConnectionInfo","chargingParkLocation","coordinate","addressParts","street","houseNumber","freeformAddress","chargingParkId","streetName","city","municipality","region","countrySubdivision","postalCode","country","plugType","chargingPlugType","currentInA","chargingCurrentInA","voltageInV","chargingVoltageInV","chargingPowerInkW","chargingCurrentType","targetChargeInPCT","targetChargeInkWh","chargingParkPowerInkW","chargingParkSpeed","parseSummary","apiSummary","lengthInMeters","historicTrafficTravelTimeInSeconds","liveTrafficIncidentsTravelTimeInSeconds","noTrafficTravelTimeInSeconds","trafficDelayInSeconds","trafficLengthInMeters","travelTimeInSeconds","departureTime","arrivalTime","deviationDistanceInMeters","deviationDistance","fuelConsumptionInLiters","deviationPoint","totalChargingTimeInSeconds","batteryConsumptionInkWh","batteryConsumptionInPCT","remainingChargeAtArrivalInkWh","remainingChargeAtArrivalInPCT","parseLegSectionProps","apiLegs","reduce","accumulatedParsedLegs","nextApiLeg","currentIndex","lastLegEndPointIndex","endPointIndex","points","toSectionProps","apiSection","toRoadStretchSectionProps","importantRoadStretchIndex","roadNumbers","roadNumber","toCountrySectionProps","countryCodeISO3","countryCode","toVehicleRestrictedSectionProps","toTrafficCategories","tec","causes","cause","tecMainCauseCode","calculateTrafficCategory","mainCauseCode","simpleCategory","toTrafficSectionProps","delayInSeconds","effectiveSpeedInKmh","categories","magnitudeOfDelay","indexedMagnitudes","toLaneSectionProps","lanes","laneSeparators","toSpeedLimitSectionProps","maxSpeedLimitInKmh","toRoadShieldsSectionProps","ensureInit","getSectionMapping","mappingFunction","parseSections","apiRoute","legs","apiSections","sectionMapping","mappedSection","parseSectionsAndAppendToResult","DELTA","similar","parseGuidance","apiGuidance","instructions","lastInstructionPathIndex","apiInstruction","maneuverPoint","pathIndex","pathPointIndex","routePath","apiPoint","parseCalculateRouteResponse","routes","apiLeg","progress","parseRoute","calculateRouteTemplate","description","customizeService","reverseGeocode","revgeoCustomize","geocode","geocodeCustomize","geometryDataCustomize","geometrySearchCustomize","calculateRoute","reachableRangeCustomize","evChargingStationsAvailability","evChargingStationsAvailabilityCustomize","placeByID","placeByIdCustomize","autocompleteCustomize","getPlaceWithEVAvailability","availabilityId","chargingAvailability","console","getPlacesWithEVAvailability","places","enhancedPlaces","placeWithAvailability","excludeIfAvailabilityUnknown","hasChargingAvailability","geocodeOne","geometryResult","placesIdMap","acc","geometryId","placeCoordinates","mergePlacesWithGeometries","placeById","fuzzySearchRequestSchema","maxFuzzyLevel","queryIntentApiToSdk","intentApi","intent","details","fuzzySearchTemplate","queryIntent","search","fuzzySearch","searchOne"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144]}
|
|
1
|
+
{"version":3,"file":"services.es.js","sources":["../src/shared/types/apiResponseErrorTypes.ts","../src/shared/errors.ts","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js","../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/mini/schemas.js","../src/shared/schema/commonParamsSchema.ts","../src/shared/schema/validation.ts","../src/shared/serviceTemplate.ts","../src/shared/fetch.ts","../src/shared/schema/geometriesSchema.ts","../src/autocomplete-search/autocompleteSearchRequestSchema.ts","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_freeGlobal.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_root.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Symbol.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getRawTag.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_objectToString.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGetTag.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isObjectLike.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isSymbol.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayMap.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArray.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseToString.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isObject.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isFunction.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_coreJsData.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isMasked.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_toSource.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsNative.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getNative.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getValue.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_WeakMap.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_shortOut.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_defineProperty.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSetToString.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/constant.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/identity.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setToString.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isIndex.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseAssignValue.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/eq.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_assignValue.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_overRest.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isLength.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isPrototype.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsArguments.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArguments.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isBuffer.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/stubFalse.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsTypedArray.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseUnary.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nodeUtil.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isTypedArray.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayLikeKeys.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseTimes.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseKeysIn.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nativeKeysIn.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/keysIn.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArrayLike.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isKey.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nativeCreate.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashGet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashHas.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Hash.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_assocIndexOf.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashClear.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashDelete.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashSet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheDelete.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_ListCache.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheClear.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheGet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheHas.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheSet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Map.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getMapData.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isKeyable.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_MapCache.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheClear.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheDelete.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheGet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheHas.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheSet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/memoize.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stringToPath.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_memoizeCapped.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_castPath.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toString.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_toKey.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayPush.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isFlattenable.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/flatten.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseFlatten.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getPrototype.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_overArg.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isPlainObject.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Stack.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackClear.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackDelete.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackGet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackHas.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackSet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneBuffer.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/stubArray.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getSymbols.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayFilter.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getSymbolsIn.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getAllKeysIn.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGetAllKeys.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_DataView.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Promise.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Set.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getTag.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_initCloneArray.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Uint8Array.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneArrayBuffer.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneRegExp.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneSymbol.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_initCloneByTag.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneDataView.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cloneTypedArray.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isMap.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsMap.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isSet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsSet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseClone.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayEach.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_parent.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGet.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSlice.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isNil.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseUnset.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/last.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_customOmitClone.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/omit.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_flatRest.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_apply.js","../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_copyObject.js","../src/shared/request/requestBuildingUtils.ts","../src/shared/request/commonSearchRequestBuilder.ts","../src/autocomplete-search/requestBuilder.ts","../src/shared/geometry.ts","../src/autocomplete-search/responseParser.ts","../src/autocomplete-search/autocompleteSearchTemplate.ts","../src/autocomplete-search/autocompleteSearch.ts","../src/autocomplete-search/customize.ts","../src/ev-charging-stations-availability/requestBuilder.ts","../src/shared/ev.ts","../src/ev-charging-stations-availability/connectorAvailability.ts","../src/shared/searchResultParsing.ts","../src/ev-charging-stations-availability/responseParser.ts","../src/ev-charging-stations-availability/evChargingStationsAvailabilityTemplate.ts","../src/ev-charging-stations-availability/evChargingStationsAvailabilityRequestSchema.ts","../src/ev-charging-stations-availability/evChargingStationsAvailabilityResponseErrorParser.ts","../src/ev-charging-stations-availability/customize.ts","../src/shared/schema/commonGeocodeAndFuzzySearchParamsSchema.ts","../src/shared/schema/commonPlacesParamsSchema.ts","../src/geocode/geocodingRequestSchema.ts","../src/shared/arrays.ts","../src/geocode/requestBuilder.ts","../src/geocode/responseParser.ts","../src/geocode/geocodingTemplate.ts","../src/geocode/customize.ts","../src/geometry-data/geometryDataRequestSchema.ts","../src/geometry-data/requestBuilder.ts","../src/geometry-data/responseParser.ts","../src/geometry-data/geometryDataTemplate.ts","../src/geometry-data/customize.ts","../src/search/commonSearchParamsSchema.ts","../src/geometry-search/geometrySearchRequestSchema.ts","../src/geometry-search/requestBuilder.ts","../src/geometry-search/responseParser.ts","../src/geometry-search/geometrySearchTemplate.ts","../src/geometry-search/geometrySearch.ts","../src/geometry-search/customize.ts","../src/place-by-id/placeByIdSchema.ts","../src/place-by-id/requestBuilder.ts","../src/place-by-id/responseParser.ts","../src/place-by-id/placeByIdTemplate.ts","../src/place-by-id/customize.ts","../src/shared/types/commonRoutingParams.ts","../src/shared/types/vehicleRestrictionParams.ts","../src/shared/schema/vehicleParamsSchema.ts","../src/shared/schema/commonRoutingRequestSchema.ts","../src/reachable-range/reachableRangeRequestSchema.ts","../src/reachable-range/types/reachableRangeParams.ts","../src/shared/request/routingVehicleParamsBuilder.ts","../src/shared/request/commonRoutingRequestBuilder.ts","../src/reachable-range/requestBuilder.ts","../src/reachable-range/responseParser.ts","../src/reachable-range/customize.ts","../src/reachable-range/reachableRangeTemplate.ts","../src/revgeo/requestBuilder.ts","../src/revgeo/responseParser.ts","../src/revgeo/reverseGeocodingTemplate.ts","../src/revgeo/revGeocodeRequestSchema.ts","../src/revgeo/customize.ts","../src/routing/calculateRouteRequestSchema.ts","../src/routing/requestBuilder.ts","../src/routing/responseParser.ts","../src/routing/calculateRouteTemplate.ts","../src/routing/routingResponseErrorParser.ts","../src/customize/index.ts","../src/routing/customize.ts","../src/ev-charging-stations-availability/evChargingStationsAvailability.ts","../src/geocode/geocoding.ts","../src/geometry-data/geometryData.ts","../src/place-by-id/placeById.ts","../src/revgeo/reverseGeocoding.ts","../src/routing/calculateRoute.ts","../src/fuzzy-search/fuzzySearchRequestSchema.ts","../src/fuzzy-search/responseParser.ts","../src/fuzzy-search/fuzzySearchTemplate.ts","../src/fuzzy-search/requestBuilder.ts","../src/search/search.ts","../src/fuzzy-search/fuzzySearch.ts"],"sourcesContent":["/**\n * @ignore\n */\nexport interface BaseAPIResponseErrorBody {\n /*\n * HTTP error code.\n */\n httpStatusCode: number;\n /*\n * Detailed information about the error.\n */\n detailedError: {\n /*\n * One of the defined error codes.\n */\n code: string;\n /*\n * A human-readable representation of the error code.\n */\n message: string;\n /*\n * Target of the particular error.\n * Value: The name of the request parameter.\n */\n target: string;\n };\n}\n\n/**\n * @ignore\n */\nexport interface DefaultAPIResponseErrorBody extends BaseAPIResponseErrorBody {\n /*\n * A human-readable description of the error code.\n */\n error?: string;\n errorText?: string;\n}\n\n/**\n * @ignore\n */\nexport interface RoutingAPIResponseError {\n /*\n * \tThe format version\n */\n formatVersion: string;\n error: {\n /*\n * A human-readable representation of the error code.\n */\n description: string;\n };\n detailedError: {\n /*\n * A human-readable representation of the error code.\n */\n message: string;\n /*\n * One of the defined error codes.\n */\n code: string;\n };\n}\n\n/**\n * Error returned by an API.\n * @ignore\n */\nexport type APIErrorResponse<T = DefaultAPIResponseErrorBody> = {\n status?: number;\n message: string;\n data?: T;\n};\n\n/**\n * @ignore\n */\nexport enum APICode {\n TOO_MANY_REQUESTS = 429,\n FORBIDDEN = 403,\n}\n","import { $ZodIssue } from 'zod/v4/core';\nimport type { ValidationError } from './schema/validation';\nimport type { ParseResponseError } from './serviceTypes';\nimport type { APIErrorResponse, DefaultAPIResponseErrorBody } from './types/apiResponseErrorTypes';\nimport { APICode } from './types/apiResponseErrorTypes';\nimport type { ServiceName } from './types/servicesTypes';\n\n/**\n * Base error class for all SDK-related errors.\n *\n * The SDK handles two distinct categories of errors:\n * 1. **Programming errors**: Configuration or usage errors in the user's application,\n * such as passing incorrect types to parameters or functions.\n * 2. **API errors**: Recoverable errors that occur during SDK operations,\n * such as network failures or invalid API responses.\n *\n * @example\n * ```typescript\n * try {\n * // SDK operation\n * } catch (error) {\n * if (error instanceof SDKError) {\n * console.error(`Error in ${error.service}: ${error.message}`);\n * }\n * }\n * ```\n *\n * @group Errors\n */\nexport class SDKError extends Error {\n /**\n * Creates a new SDKError instance.\n *\n * @param message - Human-readable error description\n * @param service - Name of the service where the error occurred\n * @param issues - Optional array of Zod validation issues for detailed error information\n */\n constructor(\n message: string,\n readonly service: string,\n readonly issues?: $ZodIssue[],\n ) {\n super(message);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SDKError);\n }\n }\n}\n\n/**\n * Mapping of API error codes to human-readable error messages.\n *\n * Provides standardized error messages for common API response codes,\n * ensuring consistent error handling across the SDK.\n *\n * @group Errors\n */\nexport const APIErrorCode: { readonly [K in APICode as number]: string } = {\n [APICode.TOO_MANY_REQUESTS]: 'Too Many Requests: The API Key is over QPS (Queries per second)',\n [APICode.FORBIDDEN]: 'Request failed with status code 403',\n};\n\n/**\n * Error class for HTTP API response errors.\n *\n * Extends {@link SDKError} to include HTTP status codes and automatically\n * maps known error codes to user-friendly messages using {@link APIErrorCode}.\n *\n * @example\n * ```typescript\n * throw new SDKServiceError('Invalid request', 'geocoding', 400);\n * ```\n *\n * @group Errors\n */\nexport class SDKServiceError extends SDKError {\n /**\n * HTTP status code of the failed API request.\n *\n * Common values:\n * - `400`: Bad Request\n * - `403`: Forbidden\n * - `429`: Too Many Requests\n * - `500`: Internal Server Error\n */\n status?: number;\n\n /**\n * Creates a new SDKServiceError instance.\n *\n * If the status code matches a known error in {@link APIErrorCode},\n * the message will be automatically replaced with the standardized message.\n *\n * @param message - Error message from the API or custom message\n * @param service - Name of the service that generated the error\n * @param status - HTTP status code of the failed request\n */\n constructor(message: string, service: string, status?: number) {\n super(message, service);\n this.status = status;\n\n /*\n * We use as message what returns from API if any, otherwise we have our APIErrorCode as a fallback\n * Check if there is a status and if the status exists in the mapped API error types\n */\n if (this.status && APIErrorCode[this.status]) {\n this.message = APIErrorCode[this.status];\n }\n }\n}\n\n/**\n * @ignore\n * @param error\n * @param serviceName\n */\nexport const parseDefaultResponseError: ParseResponseError<DefaultAPIResponseErrorBody> = (error, serviceName) => {\n const { data, message, status } = error;\n // Different services uses property error or errorText or detailedError\n // Here we cover all situations as a default error parser\n const errorMessage = data?.error || data?.errorText || message;\n return new SDKServiceError(errorMessage, serviceName, status);\n};\n\n/**\n * @ignore\n * Generate error for APIResponse, any other error type will be returned as it is.\n * @param error The error captured by a catch function.\n * @param serviceName The name of the service.\n * @param parseResponseError\n */\nexport const buildResponseError = (\n error: unknown,\n serviceName: ServiceName,\n parseResponseError?: ParseResponseError<unknown>,\n): SDKError => {\n if ((error as APIErrorResponse).status) {\n const fetchError = error as APIErrorResponse;\n if (parseResponseError) {\n return parseResponseError(fetchError, serviceName);\n }\n return parseDefaultResponseError(fetchError, serviceName);\n }\n\n return new SDKError((error as Error).message, serviceName);\n};\n\n/**\n * @ignore\n * @param error\n * @param serviceName\n */\nexport const buildValidationError = (error: ValidationError, serviceName: ServiceName): SDKError =>\n new SDKError(error.message, serviceName, error.issues);\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import * as core from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodMiniType = /*@__PURE__*/ core.$constructor(\"ZodMiniType\", (inst, def) => {\n if (!inst._zod)\n throw new Error(\"Uninitialized schema in ZodMiniType.\");\n core.$ZodType.init(inst, def);\n inst.def = def;\n inst.type = def.type;\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.check = (...checks) => {\n return inst.clone({\n ...def,\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }, { parent: true });\n };\n inst.with = inst.check;\n inst.clone = (_def, params) => core.clone(inst, _def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n inst.apply = (fn) => fn(inst);\n});\nexport const ZodMiniString = /*@__PURE__*/ core.$constructor(\"ZodMiniString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function string(params) {\n return core._string(ZodMiniString, params);\n}\nexport const ZodMiniStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n ZodMiniString.init(inst, def);\n});\nexport const ZodMiniEmail = /*@__PURE__*/ core.$constructor(\"ZodMiniEmail\", (inst, def) => {\n core.$ZodEmail.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function email(params) {\n return core._email(ZodMiniEmail, params);\n}\nexport const ZodMiniGUID = /*@__PURE__*/ core.$constructor(\"ZodMiniGUID\", (inst, def) => {\n core.$ZodGUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function guid(params) {\n return core._guid(ZodMiniGUID, params);\n}\nexport const ZodMiniUUID = /*@__PURE__*/ core.$constructor(\"ZodMiniUUID\", (inst, def) => {\n core.$ZodUUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function uuid(params) {\n return core._uuid(ZodMiniUUID, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function uuidv4(params) {\n return core._uuidv4(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv6\n// @__NO_SIDE_EFFECTS__\nexport function uuidv6(params) {\n return core._uuidv6(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv7\n// @__NO_SIDE_EFFECTS__\nexport function uuidv7(params) {\n return core._uuidv7(ZodMiniUUID, params);\n}\nexport const ZodMiniURL = /*@__PURE__*/ core.$constructor(\"ZodMiniURL\", (inst, def) => {\n core.$ZodURL.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function url(params) {\n return core._url(ZodMiniURL, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function httpUrl(params) {\n return core._url(ZodMiniURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniEmoji = /*@__PURE__*/ core.$constructor(\"ZodMiniEmoji\", (inst, def) => {\n core.$ZodEmoji.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function emoji(params) {\n return core._emoji(ZodMiniEmoji, params);\n}\nexport const ZodMiniNanoID = /*@__PURE__*/ core.$constructor(\"ZodMiniNanoID\", (inst, def) => {\n core.$ZodNanoID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nanoid(params) {\n return core._nanoid(ZodMiniNanoID, params);\n}\nexport const ZodMiniCUID = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID\", (inst, def) => {\n core.$ZodCUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cuid(params) {\n return core._cuid(ZodMiniCUID, params);\n}\nexport const ZodMiniCUID2 = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID2\", (inst, def) => {\n core.$ZodCUID2.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cuid2(params) {\n return core._cuid2(ZodMiniCUID2, params);\n}\nexport const ZodMiniULID = /*@__PURE__*/ core.$constructor(\"ZodMiniULID\", (inst, def) => {\n core.$ZodULID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ulid(params) {\n return core._ulid(ZodMiniULID, params);\n}\nexport const ZodMiniXID = /*@__PURE__*/ core.$constructor(\"ZodMiniXID\", (inst, def) => {\n core.$ZodXID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function xid(params) {\n return core._xid(ZodMiniXID, params);\n}\nexport const ZodMiniKSUID = /*@__PURE__*/ core.$constructor(\"ZodMiniKSUID\", (inst, def) => {\n core.$ZodKSUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ksuid(params) {\n return core._ksuid(ZodMiniKSUID, params);\n}\nexport const ZodMiniIPv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv4\", (inst, def) => {\n core.$ZodIPv4.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ipv4(params) {\n return core._ipv4(ZodMiniIPv4, params);\n}\nexport const ZodMiniIPv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv6\", (inst, def) => {\n core.$ZodIPv6.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ipv6(params) {\n return core._ipv6(ZodMiniIPv6, params);\n}\nexport const ZodMiniCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cidrv4(params) {\n return core._cidrv4(ZodMiniCIDRv4, params);\n}\nexport const ZodMiniCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cidrv6(params) {\n return core._cidrv6(ZodMiniCIDRv6, params);\n}\nexport const ZodMiniMAC = /*@__PURE__*/ core.$constructor(\"ZodMiniMAC\", (inst, def) => {\n core.$ZodMAC.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function mac(params) {\n return core._mac(ZodMiniMAC, params);\n}\nexport const ZodMiniBase64 = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64\", (inst, def) => {\n core.$ZodBase64.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function base64(params) {\n return core._base64(ZodMiniBase64, params);\n}\nexport const ZodMiniBase64URL = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64URL\", (inst, def) => {\n core.$ZodBase64URL.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function base64url(params) {\n return core._base64url(ZodMiniBase64URL, params);\n}\nexport const ZodMiniE164 = /*@__PURE__*/ core.$constructor(\"ZodMiniE164\", (inst, def) => {\n core.$ZodE164.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function e164(params) {\n return core._e164(ZodMiniE164, params);\n}\nexport const ZodMiniJWT = /*@__PURE__*/ core.$constructor(\"ZodMiniJWT\", (inst, def) => {\n core.$ZodJWT.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function jwt(params) {\n return core._jwt(ZodMiniJWT, params);\n}\nexport const ZodMiniCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniCustomStringFormat\", (inst, def) => {\n core.$ZodCustomStringFormat.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodMiniCustomStringFormat, format, fnOrRegex, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hostname(_params) {\n return core._stringFormat(ZodMiniCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hex(_params) {\n return core._stringFormat(ZodMiniCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n // check for unrecognized format\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodMiniCustomStringFormat, format, regex, params);\n}\nexport const ZodMiniNumber = /*@__PURE__*/ core.$constructor(\"ZodMiniNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function number(params) {\n return core._number(ZodMiniNumber, params);\n}\nexport const ZodMiniNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodMiniNumber.init(inst, def);\n});\n// int\n// @__NO_SIDE_EFFECTS__\nexport function int(params) {\n return core._int(ZodMiniNumberFormat, params);\n}\n// float32\n// @__NO_SIDE_EFFECTS__\nexport function float32(params) {\n return core._float32(ZodMiniNumberFormat, params);\n}\n// float64\n// @__NO_SIDE_EFFECTS__\nexport function float64(params) {\n return core._float64(ZodMiniNumberFormat, params);\n}\n// int32\n// @__NO_SIDE_EFFECTS__\nexport function int32(params) {\n return core._int32(ZodMiniNumberFormat, params);\n}\n// uint32\n// @__NO_SIDE_EFFECTS__\nexport function uint32(params) {\n return core._uint32(ZodMiniNumberFormat, params);\n}\nexport const ZodMiniBoolean = /*@__PURE__*/ core.$constructor(\"ZodMiniBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function boolean(params) {\n return core._boolean(ZodMiniBoolean, params);\n}\nexport const ZodMiniBigInt = /*@__PURE__*/ core.$constructor(\"ZodMiniBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function bigint(params) {\n return core._bigint(ZodMiniBigInt, params);\n}\nexport const ZodMiniBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodMiniBigInt.init(inst, def);\n});\n// int64\n// @__NO_SIDE_EFFECTS__\nexport function int64(params) {\n return core._int64(ZodMiniBigIntFormat, params);\n}\n// uint64\n// @__NO_SIDE_EFFECTS__\nexport function uint64(params) {\n return core._uint64(ZodMiniBigIntFormat, params);\n}\nexport const ZodMiniSymbol = /*@__PURE__*/ core.$constructor(\"ZodMiniSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function symbol(params) {\n return core._symbol(ZodMiniSymbol, params);\n}\nexport const ZodMiniUndefined = /*@__PURE__*/ core.$constructor(\"ZodMiniUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _undefined(params) {\n return core._undefined(ZodMiniUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodMiniNull = /*@__PURE__*/ core.$constructor(\"ZodMiniNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _null(params) {\n return core._null(ZodMiniNull, params);\n}\nexport { _null as null };\nexport const ZodMiniAny = /*@__PURE__*/ core.$constructor(\"ZodMiniAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function any() {\n return core._any(ZodMiniAny);\n}\nexport const ZodMiniUnknown = /*@__PURE__*/ core.$constructor(\"ZodMiniUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function unknown() {\n return core._unknown(ZodMiniUnknown);\n}\nexport const ZodMiniNever = /*@__PURE__*/ core.$constructor(\"ZodMiniNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function never(params) {\n return core._never(ZodMiniNever, params);\n}\nexport const ZodMiniVoid = /*@__PURE__*/ core.$constructor(\"ZodMiniVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _void(params) {\n return core._void(ZodMiniVoid, params);\n}\nexport { _void as void };\nexport const ZodMiniDate = /*@__PURE__*/ core.$constructor(\"ZodMiniDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function date(params) {\n return core._date(ZodMiniDate, params);\n}\nexport const ZodMiniArray = /*@__PURE__*/ core.$constructor(\"ZodMiniArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function array(element, params) {\n return new ZodMiniArray({\n type: \"array\",\n element: element,\n ...util.normalizeParams(params),\n });\n}\n// .keyof\n// @__NO_SIDE_EFFECTS__\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodMiniObject = /*@__PURE__*/ core.$constructor(\"ZodMiniObject\", (inst, def) => {\n core.$ZodObject.init(inst, def);\n ZodMiniType.init(inst, def);\n util.defineLazy(inst, \"shape\", () => def.shape);\n});\n// @__NO_SIDE_EFFECTS__\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodMiniObject(def);\n}\n// strictObject\n// @__NO_SIDE_EFFECTS__\nexport function strictObject(shape, params) {\n return new ZodMiniObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\n// @__NO_SIDE_EFFECTS__\nexport function looseObject(shape, params) {\n return new ZodMiniObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\n// object methods\n// @__NO_SIDE_EFFECTS__\nexport function extend(schema, shape) {\n return util.extend(schema, shape);\n}\n// @__NO_SIDE_EFFECTS__\nexport function safeExtend(schema, shape) {\n return util.safeExtend(schema, shape);\n}\n// @__NO_SIDE_EFFECTS__\nexport function merge(schema, shape) {\n return util.extend(schema, shape);\n}\n// @__NO_SIDE_EFFECTS__\nexport function pick(schema, mask) {\n return util.pick(schema, mask);\n}\n// .omit\n// @__NO_SIDE_EFFECTS__\nexport function omit(schema, mask) {\n return util.omit(schema, mask);\n}\n// @__NO_SIDE_EFFECTS__\nexport function partial(schema, mask) {\n return util.partial(ZodMiniOptional, schema, mask);\n}\n// @__NO_SIDE_EFFECTS__\nexport function required(schema, mask) {\n return util.required(ZodMiniNonOptional, schema, mask);\n}\n// @__NO_SIDE_EFFECTS__\nexport function catchall(inst, catchall) {\n return inst.clone({ ...inst._zod.def, catchall: catchall });\n}\nexport const ZodMiniUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function union(options, params) {\n return new ZodMiniUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniXor = /*@__PURE__*/ core.$constructor(\"ZodMiniXor\", (inst, def) => {\n ZodMiniUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodMiniXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniDiscriminatedUnion\", (inst, def) => {\n core.$ZodDiscriminatedUnion.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function discriminatedUnion(discriminator, options, params) {\n return new ZodMiniDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniIntersection = /*@__PURE__*/ core.$constructor(\"ZodMiniIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function intersection(left, right) {\n return new ZodMiniIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodMiniTuple = /*@__PURE__*/ core.$constructor(\"ZodMiniTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodMiniTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniRecord = /*@__PURE__*/ core.$constructor(\"ZodMiniRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function record(keyType, valueType, params) {\n return new ZodMiniRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodMiniRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodMiniRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniMap = /*@__PURE__*/ core.$constructor(\"ZodMiniMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function map(keyType, valueType, params) {\n return new ZodMiniMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniSet = /*@__PURE__*/ core.$constructor(\"ZodMiniSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function set(valueType, params) {\n return new ZodMiniSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniEnum = /*@__PURE__*/ core.$constructor(\"ZodMiniEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodMiniType.init(inst, def);\n inst.options = Object.values(def.entries);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodMiniEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodMiniEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function literal(value, params) {\n return new ZodMiniLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniFile = /*@__PURE__*/ core.$constructor(\"ZodMiniFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function file(params) {\n return core._file(ZodMiniFile, params);\n}\nexport const ZodMiniTransform = /*@__PURE__*/ core.$constructor(\"ZodMiniTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function transform(fn) {\n return new ZodMiniTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodMiniOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function optional(innerType) {\n return new ZodMiniOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodMiniExactOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function exactOptional(innerType) {\n return new ZodMiniExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodMiniNullable = /*@__PURE__*/ core.$constructor(\"ZodMiniNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nullable(innerType) {\n return new ZodMiniNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\n// @__NO_SIDE_EFFECTS__\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodMiniDefault = /*@__PURE__*/ core.$constructor(\"ZodMiniDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function _default(innerType, defaultValue) {\n return new ZodMiniDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodMiniPrefault = /*@__PURE__*/ core.$constructor(\"ZodMiniPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function prefault(innerType, defaultValue) {\n return new ZodMiniPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodMiniNonOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nonoptional(innerType, params) {\n return new ZodMiniNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniSuccess = /*@__PURE__*/ core.$constructor(\"ZodMiniSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function success(innerType) {\n return new ZodMiniSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodMiniCatch = /*@__PURE__*/ core.$constructor(\"ZodMiniCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _catch(innerType, catchValue) {\n return new ZodMiniCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodMiniNaN = /*@__PURE__*/ core.$constructor(\"ZodMiniNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nan(params) {\n return core._nan(ZodMiniNaN, params);\n}\nexport const ZodMiniPipe = /*@__PURE__*/ core.$constructor(\"ZodMiniPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function pipe(in_, out) {\n return new ZodMiniPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n });\n}\nexport const ZodMiniCodec = /*@__PURE__*/ core.$constructor(\"ZodMiniCodec\", (inst, def) => {\n ZodMiniPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function codec(in_, out, params) {\n return new ZodMiniCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodMiniReadonly = /*@__PURE__*/ core.$constructor(\"ZodMiniReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function readonly(innerType) {\n return new ZodMiniReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodMiniTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function templateLiteral(parts, params) {\n return new ZodMiniTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniLazy = /*@__PURE__*/ core.$constructor(\"ZodMiniLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// export function lazy<T extends object>(getter: () => T): T {\n// return util.createTransparentProxy<T>(getter);\n// }\n// @__NO_SIDE_EFFECTS__\nfunction _lazy(getter) {\n return new ZodMiniLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport { _lazy as lazy };\nexport const ZodMiniPromise = /*@__PURE__*/ core.$constructor(\"ZodMiniPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function promise(innerType) {\n return new ZodMiniPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodMiniCustom = /*@__PURE__*/ core.$constructor(\"ZodMiniCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// custom checks\n// @__NO_SIDE_EFFECTS__\nexport function check(fn, params) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// ZodCustom\n// custom schema\n// @__NO_SIDE_EFFECTS__\nexport function custom(fn, _params) {\n return core._custom(ZodMiniCustom, fn ?? (() => true), _params);\n}\n// refine\n// @__NO_SIDE_EFFECTS__\nexport function refine(fn, _params = {}) {\n return core._refine(ZodMiniCustom, fn, _params);\n}\n// superRefine\n// @__NO_SIDE_EFFECTS__\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\n// instanceof\nclass Class {\n constructor(..._args) { }\n}\n// @__NO_SIDE_EFFECTS__\nfunction _instanceof(cls, params = {}) {\n const inst = custom((data) => data instanceof cls, params);\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodMiniCodec,\n Boolean: ZodMiniBoolean,\n String: ZodMiniString,\n}, ...args);\n// @__NO_SIDE_EFFECTS__\nexport function json() {\n const jsonSchema = _lazy(() => {\n return union([string(), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\nexport const ZodMiniFunction = /*@__PURE__*/ core.$constructor(\"ZodMiniFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function _function(params) {\n return new ZodMiniFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\n","import { z } from 'zod/v4-mini';\n\n/**\n * @ignore\n */\nexport const commonServiceRequestSchema = z.partial(\n z.object({\n apiKey: z.string(),\n commonBaseURL: z.string(),\n customServiceBaseURL: z.string(),\n language: z.string(),\n }),\n);\n","import type { $ZodError, $ZodIssue } from 'zod/v4/core';\nimport { z } from 'zod/v4-mini';\nimport type { CommonServiceParams } from '../serviceTypes';\nimport type { RequestValidationConfig } from '../types/validation';\nimport { commonServiceRequestSchema } from './commonParamsSchema';\n\n/**\n * Validate Error Class for validating params input, this will be used by SDKError class.\n * @ignore\n */\nexport class ValidationError extends Error {\n issues: $ZodIssue[];\n\n constructor(zodError: $ZodError) {\n super(z.prettifyError(zodError));\n this.issues = zodError.issues;\n }\n}\n\n/**\n * @ignore\n * @param params\n * @param config\n */\nexport const validateRequestSchema = <T extends CommonServiceParams>(\n params: T,\n config?: RequestValidationConfig,\n): T => {\n const requestSchema = config?.schema\n ? z.extend(commonServiceRequestSchema, config.schema.shape)\n : commonServiceRequestSchema;\n // If there's no schema provided, we still validate the common params:\n const mergedSchema = requestSchema.check(\n z.refine(\n (data) => 'commonBaseURL' in data || 'customServiceBaseURL' in data,\n 'commonBaseURL or customServiceBaseURL is required',\n ),\n );\n\n // Adding optional refinements:\n let refinedMergedSchema: typeof mergedSchema | undefined;\n if (config?.refinements?.length) {\n refinedMergedSchema = mergedSchema;\n for (const refinement of config.refinements) {\n refinedMergedSchema = refinedMergedSchema.check(z.refine(refinement.check, refinement.message));\n }\n }\n\n const validation = (refinedMergedSchema ?? mergedSchema).safeParse(params);\n if (!validation.success) {\n throw new ValidationError(validation.error);\n }\n\n return params;\n};\n","import { generateTomTomHeaders, mergeFromGlobal } from '@tomtom-org/maps-sdk/core';\nimport { buildResponseError, buildValidationError } from './errors';\nimport type { ValidationError } from './schema/validation';\nimport { validateRequestSchema } from './schema/validation';\nimport type { CommonServiceParams, ServiceTemplate } from './serviceTypes';\nimport type { ServiceName } from './types/servicesTypes';\n\n/**\n * @ignore\n * Template execution of a service call.\n * Any service goes through the same template steps:\n * 1- Build request\n * 2- Send request and get API response\n * 3- Parse and return API response\n * @param params The parameters for that specific service call.\n * @param template The implementation of the template steps.\n * @param serviceName The name of the service.\n */\nexport const callService = async <PARAMS extends CommonServiceParams, ApiRequest, ApiResponse, RESPONSE>(\n params: PARAMS,\n template: ServiceTemplate<PARAMS, ApiRequest, ApiResponse, RESPONSE>,\n serviceName: ServiceName,\n): Promise<RESPONSE> => {\n const customApiVersion = template.getAPIVersion?.(params);\n const mergedParams = mergeFromGlobal({ ...params, ...(customApiVersion && { apiVersion: customApiVersion }) });\n // (params.validateRequest defaults to true, thus true and undefined are the same)\n if (params.validateRequest === undefined || params.validateRequest) {\n try {\n validateRequestSchema<PARAMS>(mergedParams, template.requestValidation);\n } catch (e) {\n return Promise.reject(buildValidationError(e as ValidationError, serviceName));\n }\n }\n const apiRequest = template.buildRequest(mergedParams);\n const headers = generateTomTomHeaders(mergedParams);\n params.onAPIRequest?.(apiRequest);\n\n try {\n const apiResponse = await template.sendRequest(apiRequest, headers);\n params.onAPIResponse?.(apiRequest, apiResponse);\n return template.parseResponse(await apiResponse.data, mergedParams);\n } catch (e) {\n params.onAPIResponse?.(apiRequest, e);\n return Promise.reject(buildResponseError(e, serviceName, template.parseResponseError));\n }\n};\n","import type { TomTomHeaders } from '@tomtom-org/maps-sdk/core';\nimport type { FetchInput, ParsedFetchResponse, PostObject } from './types/fetch';\n\n/**\n * Custom error class for HTTP fetch errors.\n */\nclass FetchError extends Error {\n public readonly status: number;\n public readonly data?: unknown;\n\n constructor(status: number, message?: string, data?: unknown) {\n super(message ?? `HTTP Error ${status}`);\n this.name = 'FetchError';\n this.status = status;\n this.data = data;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FetchError);\n }\n }\n}\n\n// Returns the response as a JSON object or throws an error if the response isn't successful.\nconst returnOrThrow = async <T>(response: Response): ParsedFetchResponse<T> => {\n if (response.ok) {\n return { data: await response.json(), status: response.status };\n }\n let message: string | undefined;\n let errorBody;\n const contentType = response.headers.get('content-type');\n if (response.bodyUsed) {\n message = response.statusText;\n } else if (contentType?.includes('application/json')) {\n errorBody = await response.json();\n message = errorBody?.errorText ?? errorBody?.message ?? errorBody?.detailedError?.message;\n } else if (contentType?.includes('text/xml')) {\n errorBody = await response.text();\n message = response.statusText;\n }\n\n throw new FetchError(response.status, message, errorBody);\n};\n\n/**\n * Fetches the given HTTP JSON resource with an HTTP GET request and returns a promise with the response as a JSON object.\n * If the response isn't successful, it returns a rejected promise with the http error code.\n * @ignore\n * @param url The URL to fetch.\n * @param headers The headers to be sent with the request.\n */\nexport const get = async <T>(url: URL, headers: TomTomHeaders): ParsedFetchResponse<T> =>\n returnOrThrow(await fetch(url, { headers }));\n\n/**\n * Fetches the given HTTP JSON resource with an HTTP POST request and returns a promise with the response as a JSON object.\n * If the response isn't successful, it returns a rejected promise with the http error code.\n * @ignore\n * @param input The POST object with URL and optional payload.\n * @param headers The headers to be sent with the request.\n */\nexport const post = async <T, D>(input: PostObject<D>, headers: TomTomHeaders): ParsedFetchResponse<T> =>\n returnOrThrow(\n await fetch(input.url, {\n method: 'POST',\n body: JSON.stringify(input.data),\n headers: { ...headers, 'Content-Type': 'application/json' },\n }),\n );\n\n/**\n * Fetches the given HTTP JSON resource with the given HTTP operation and URL/Payload as applicable.\n * * Useful for services which can use different HTTP methods depending on the parameters.\n * @param input The input object (e.g. containing either GET or POST data)\n * @param headers The headers to be sent with the request.\n * @ignore\n */\nexport const fetchWith = async <T, D = void>(input: FetchInput<D>, headers: TomTomHeaders): ParsedFetchResponse<T> => {\n const method = input.method;\n if (method === 'GET') {\n return get<T>(input.url, headers);\n }\n if (method === 'POST') {\n return post<T, D>(input, headers);\n }\n throw new Error(`Unsupported HTTP method received: ${method}`);\n};\n","import { z } from 'zod/v4-mini';\n\n/**\n * @ignore\n */\nexport const lineStringCoordsSchema = z.array(z.array(z.number()));\n\n/**\n * @ignore\n */\nexport const geometrySchema = z\n .object({\n type: z.enum([\n 'Point',\n 'MultiPoint',\n 'LineString',\n 'MultiLineString',\n 'Polygon',\n 'MultiPolygon',\n 'GeometryCollection',\n 'Circle',\n ]),\n coordinates: z.union([\n z.array(z.number()),\n lineStringCoordsSchema,\n z.array(z.array(z.array(z.number()))),\n z.array(z.array(z.array(z.array(z.number())))),\n ]),\n radius: z.optional(z.number()),\n radiusMeters: z.optional(z.number()),\n bbox: z.optional(z.array(z.number())),\n })\n .check(\n z.refine(\n (data) => (data.type === 'Circle' ? Boolean(data.radius) : true),\n 'type: \"Circle\" must have radius property',\n ),\n );\n\n/**\n * @ignore\n */\nexport const featureSchema = z.object({\n type: z.literal('Feature'),\n geometry: geometrySchema,\n id: z.optional(z.union([z.string(), z.number()])),\n properties: z.any(),\n bbox: z.optional(z.array(z.number())),\n});\n\n/**\n * @ignore\n */\nexport const featureCollectionSchema = z.object({\n type: z.literal('FeatureCollection'),\n features: z.array(featureSchema),\n id: z.optional(z.union([z.string(), z.number()])),\n properties: z.any(),\n bbox: z.optional(z.array(z.number())),\n});\n\n/**\n * @ignore\n */\nexport const hasLngLatSchema = z.union([\n z.tuple([z.number().check(z.minimum(-180), z.maximum(180)), z.number().check(z.minimum(-90), z.maximum(90))]),\n z.tuple([\n z.number().check(z.minimum(-180), z.maximum(180)),\n z.number().check(z.minimum(-90), z.maximum(90)),\n z.number(),\n ]),\n z.object({\n type: z.literal('Point'),\n coordinates: z.array(z.number()),\n }),\n featureSchema,\n]);\n\n/**\n * @ignore\n */\nconst geoJsonbBoxSchema = z.union([z.array(z.number()).check(z.length(4)), z.array(z.number()).check(z.length(6))]);\n\n/**\n * @ignore\n */\nexport const geoJSONObjectSchema = z.union([geometrySchema, featureSchema, featureCollectionSchema]);\n\n/**\n * @ignore\n */\nexport const hasBBoxSchema = z.union([geoJsonbBoxSchema, geoJSONObjectSchema, z.array(geoJSONObjectSchema)]);\n","import { z } from 'zod/v4-mini';\nimport { hasLngLatSchema } from '../shared/schema/geometriesSchema';\n\nconst autocompleteSearchRequestMandatory = z.object({\n query: z.string(),\n});\n\nconst autocompleteSearchRequestOptional = z.partial(\n z.object({\n position: hasLngLatSchema,\n limit: z.number().check(z.maximum(100)),\n radiusMeters: z.number(),\n countries: z.array(z.string()),\n resultType: z.array(z.string()),\n }),\n);\n\n/**\n * @ignore\n */\nexport const autocompleteSearchRequestSchema = z.extend(\n autocompleteSearchRequestMandatory,\n autocompleteSearchRequestOptional.shape,\n);\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nexport default isNil;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n\n // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n var index = -1,\n length = path.length;\n\n if (!length) {\n return true;\n }\n\n var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function');\n\n while (++index < length) {\n var key = path[index];\n\n // skip non-string keys (e.g., Symbols, numbers)\n if (typeof key !== 'string') {\n continue;\n }\n\n // Always block \"__proto__\" anywhere in the path if it's not expected\n if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n return false;\n }\n\n // Block \"constructor.prototype\" chains\n if (key === 'constructor' &&\n (index + 1) < length &&\n typeof path[index + 1] === 'string' &&\n path[index + 1] === 'prototype') {\n\n // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a')\n if (isRootPrimitive && index === 0) {\n continue;\n }\n\n return false;\n }\n }\n\n var obj = parent(object, path);\n return obj == null || delete obj[toKey(last(path))];\n}\n\nexport default baseUnset;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nexport default omit;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import type { HasLngLat, POICategory } from '@tomtom-org/maps-sdk/core';\nimport { getPosition, poiCategoriesToID } from '@tomtom-org/maps-sdk/core';\nimport { isNil } from 'lodash-es';\nimport type { CommonServiceParams } from '../serviceTypes';\n\n/**\n * @ignore\n * @param urlParams\n * @param params\n */\nexport const appendCommonParams = (urlParams: URLSearchParams, params: CommonServiceParams): void => {\n urlParams.append('apiVersion', String(params.apiVersion));\n\n // TODO: restore apiAccessToken if we implement oauth2 access:\n // if (!params.apiAccessToken) {\n urlParams.append('key', params.apiKey as string);\n // }\n\n params.language && urlParams.append('language', params.language);\n};\n\n/**\n * Adds parameter from the array by repeating each array part into a query parameter of the same name.\n * E.g. ...&avoid=motorways&avoid=ferries&...\n * @ignore\n * @param urlParams\n * @param paramName\n * @param paramArray\n */\nexport const appendByRepeatingParamName = (\n urlParams: URLSearchParams,\n paramName: string,\n paramArray?: string[],\n): void => {\n for (const param of paramArray || []) {\n urlParams.append(paramName, param);\n }\n};\n\n/**\n * @ignore\n */\nexport const appendByJoiningParamValue = (\n urlParams: URLSearchParams,\n name: string,\n values?: string[] | number[] | (string | number)[],\n): void => {\n if (Array.isArray(values) && values.length > 0) {\n urlParams.append(name, values.join(','));\n }\n};\n\n/**\n * @ignore\n */\nexport const appendOptionalParam = (\n urlParams: URLSearchParams,\n name: string,\n value?: string | number | boolean,\n): void => {\n !isNil(value) && urlParams.append(name, String(value));\n};\n\n/**\n * Adds lat and lon parameters to the url.\n * @ignore\n * @param urlParams\n * @param hasLngLat\n */\nexport const appendLatLonParamsFromPosition = (urlParams: URLSearchParams, hasLngLat: HasLngLat | undefined): void => {\n const position = getPosition(hasLngLat);\n if (position) {\n urlParams.append('lat', String(position[1]));\n urlParams.append('lon', String(position[0]));\n }\n};\n\n/**\n * map human-readable poi categories to their ID.\n * @ignore\n * @param poiCategories\n */\nexport const mapPOICategoriesToIDs = (poiCategories: (number | POICategory)[]): number[] => {\n return poiCategories.map((poiCategory) => {\n if (typeof poiCategory !== 'number') {\n return poiCategoriesToID[poiCategory];\n }\n return poiCategory;\n });\n};\n","import type { FuzzySearchParams } from '../../fuzzy-search';\nimport type { GeometrySearchParams } from '../../geometry-search';\nimport {\n appendByJoiningParamValue,\n appendCommonParams,\n appendLatLonParamsFromPosition,\n appendOptionalParam,\n mapPOICategoriesToIDs,\n} from './requestBuildingUtils';\n\n/**\n * @ignore\n */\nexport const PLACES_URL_PATH = '/maps/orbis/places';\n\n/**\n * Appends request parameters common to search APIs such as fuzzy + geometry search.\n * * Mutates the given searchURL with the appended parameters.\n * @param searchUrl The search URL to append parameters to. Should come without any parameters at this point.\n * @param params The search parameters, with global configuration already merged into them.\n */\nexport const appendCommonSearchParams = (searchUrl: URL, params: FuzzySearchParams | GeometrySearchParams): void => {\n const urlParams = searchUrl.searchParams;\n appendCommonParams(urlParams, params);\n appendOptionalParam(urlParams, 'limit', params.limit);\n appendLatLonParamsFromPosition(urlParams, params.position);\n\n appendByJoiningParamValue(urlParams, 'fuelSet', params.fuelTypes);\n appendByJoiningParamValue(urlParams, 'idxSet', params.indexes);\n appendByJoiningParamValue(urlParams, 'brandSet', params.poiBrands);\n params.poiCategories &&\n appendByJoiningParamValue(urlParams, 'categorySet', mapPOICategoriesToIDs(params.poiCategories));\n appendByJoiningParamValue(urlParams, 'connectorSet', params.connectors);\n appendByJoiningParamValue(urlParams, 'mapcodes', params.mapcodes);\n appendByJoiningParamValue(urlParams, 'extendedPostalCodesFor', params.extendedPostalCodesFor);\n\n appendOptionalParam(urlParams, 'minPowerKW', params.minPowerKW);\n appendOptionalParam(urlParams, 'maxPowerKW', params.maxPowerKW);\n appendOptionalParam(urlParams, 'view', params.view);\n appendOptionalParam(urlParams, 'openingHours', params.openingHours);\n appendOptionalParam(urlParams, 'timeZone', params.timeZone);\n appendOptionalParam(urlParams, 'relatedPois', params.relatedPois);\n appendByJoiningParamValue(urlParams, 'entityTypeSet', params.geographyTypes);\n};\n","import { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport {\n appendByJoiningParamValue,\n appendCommonParams,\n appendLatLonParamsFromPosition,\n appendOptionalParam,\n} from '../shared/request/requestBuildingUtils';\nimport type { AutocompleteSearchParams } from './types';\n\nconst buildUrlBasePath = (mergedOptions: AutocompleteSearchParams): string =>\n mergedOptions.customServiceBaseURL ||\n `${mergedOptions.commonBaseURL}${PLACES_URL_PATH}/autocomplete/${mergedOptions.query}.json`;\n\n/**\n * Default function for building autocomplete request from {@link AutocompleteSearchParams}\n * @param params The autocomplete parameters, with global configuration already merged into them.\n */\nexport const buildAutocompleteSearchRequest = (params: AutocompleteSearchParams): URL => {\n const url = new URL(`${buildUrlBasePath(params)}`);\n const urlParams = url.searchParams;\n /**\n * Auto-complete service defaults the language to en-GB if not specified explicitly as service param\n * Or global config\n */\n params.language = params.language ?? 'en-GB';\n appendCommonParams(urlParams, params);\n appendOptionalParam(urlParams, 'limit', params.limit);\n appendLatLonParamsFromPosition(urlParams, params.position);\n appendByJoiningParamValue(urlParams, 'countrySet', params.countries);\n appendOptionalParam(urlParams, 'radius', params.radiusMeters);\n appendByJoiningParamValue(urlParams, 'resultSet', params.resultType);\n\n return url;\n};\n","import type { BBox } from '@tomtom-org/maps-sdk/core';\nimport type { Position } from 'geojson';\nimport type { BoundingBoxAPI, BoundingBoxTopLeftAPI, LatLonAPI } from './types/apiPlacesResponseTypes';\n\n/**\n * @ignore\n * @param csv\n */\nexport const csvLatLngToPosition = (csv: string): Position => {\n const splitLatLng = csv.split(',');\n return [Number(splitLatLng[1]), Number(splitLatLng[0])];\n};\n\n/**\n * @ignore\n * @param position\n */\nexport const positionToCSVLatLon = (position: Position): string => `${position[1]},${position[0]}`;\n\nconst hasTopLeftPoint = (bbox: BoundingBoxAPI): bbox is BoundingBoxTopLeftAPI => {\n return (<BoundingBoxTopLeftAPI>bbox).topLeftPoint !== undefined;\n};\n\n/**\n * @ignore\n * @param apiBBox\n */\nexport const apiToGeoJSONBBox = (apiBBox: BoundingBoxAPI): BBox => {\n let westSouth: Position;\n let eastNorth: Position;\n if (hasTopLeftPoint(apiBBox)) {\n westSouth = [apiBBox.topLeftPoint.lon, apiBBox.btmRightPoint.lat];\n eastNorth = [apiBBox.btmRightPoint.lon, apiBBox.topLeftPoint.lat];\n } else {\n westSouth = csvLatLngToPosition(apiBBox.southWest);\n eastNorth = csvLatLngToPosition(apiBBox.northEast);\n }\n return [westSouth[0], westSouth[1], eastNorth[0], eastNorth[1]];\n};\n\n/**\n * @ignore\n * @param point\n */\nexport const latLonAPIToPosition = (point: LatLonAPI): Position => {\n return [point.lon, point.lat];\n};\n","import { latLonAPIToPosition } from '../shared/geometry';\nimport type { AutocompleteSearchResponse, AutocompleteSearchResponseAPI } from './types';\n\n/**\n * Default function to parse autocomplete response.\n * @param apiResponse The API response.\n */\nexport const parseAutocompleteSearchResponse = (\n apiResponse: AutocompleteSearchResponseAPI,\n): AutocompleteSearchResponse => {\n const { position, ...geoBias } = apiResponse.context.geoBias || {};\n return {\n ...apiResponse,\n context: {\n ...apiResponse.context,\n geoBias: {\n ...(position && { position: latLonAPIToPosition(position) }),\n radiusMeters: geoBias.radius,\n },\n },\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { autocompleteSearchRequestSchema } from './autocompleteSearchRequestSchema';\nimport { buildAutocompleteSearchRequest } from './requestBuilder';\nimport { parseAutocompleteSearchResponse } from './responseParser';\nimport type { AutocompleteSearchParams, AutocompleteSearchResponse, AutocompleteSearchResponseAPI } from './types';\n\n/**\n * Autocomplete service template type.\n * @ignore\n */\nexport type AutocompleteSearchTemplate = ServiceTemplate<\n AutocompleteSearchParams,\n URL,\n AutocompleteSearchResponseAPI,\n AutocompleteSearchResponse\n>;\n\n/**\n * Autocomplete service template main implementation.\n * @ignore\n */\nexport const autocompleteSearchTemplate: AutocompleteSearchTemplate = {\n requestValidation: { schema: autocompleteSearchRequestSchema },\n buildRequest: buildAutocompleteSearchRequest,\n sendRequest: get,\n parseResponse: parseAutocompleteSearchResponse,\n};\n","import { callService } from '../shared/serviceTemplate';\nimport type { AutocompleteSearchTemplate } from './autocompleteSearchTemplate';\nimport { autocompleteSearchTemplate } from './autocompleteSearchTemplate';\nimport type { AutocompleteSearchParams, AutocompleteSearchResponse } from './types';\n\n/**\n * Autocomplete search queries as the user types, enabling faster and more accurate search.\n *\n * The Autocomplete service recognizes entities (places, addresses, POIs) within a partial\n * input query and offers them as completion suggestions. This enables real-time search\n * assistance and improves the search experience.\n *\n * @remarks\n * Key features:\n * - **Real-time suggestions**: Returns results as the user types\n * - **Entity recognition**: Identifies addresses, POIs, and geographic areas\n * - **Structured results**: Provides both plain text and structured data\n * - **Query refinement**: Helps users formulate more accurate search queries\n * - **Fast response**: Optimized for low-latency interactive use\n *\n * Typical use cases:\n * - Search box autocomplete dropdowns\n * - Address entry forms\n * - Location pickers\n * - Navigation apps\n *\n * @param params - Autocomplete parameters including the partial query\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to autocomplete suggestions\n *\n * @example\n * ```typescript\n * // Autocomplete as user types \"amster\"\n * const suggestions = await autocompleteSearch({\n * key: 'your-api-key',\n * query: 'amster',\n * limit: 5\n * });\n * // Returns: Amsterdam, Amsterdam Centraal, etc.\n *\n * // Autocomplete with position bias\n * const localSuggestions = await autocompleteSearch({\n * key: 'your-api-key',\n * query: 'main st',\n * at: [4.9041, 52.3676], // Near Amsterdam\n * limit: 10\n * });\n *\n * // Autocomplete with category filter\n * const restaurantSuggestions = await autocompleteSearch({\n * key: 'your-api-key',\n * query: 'pizz',\n * categorySet: [7315], // Restaurant category\n * at: [4.9041, 52.3676]\n * });\n * ```\n *\n * @see [Autocomplete API Documentation](https://docs.tomtom.com/search-api/documentation/autocomplete-service/autocomplete)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Search Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/search)\n *\n * @group Autocomplete Search\n */\nexport const autocompleteSearch = async (\n params: AutocompleteSearchParams,\n customTemplate?: Partial<AutocompleteSearchTemplate>,\n): Promise<AutocompleteSearchResponse> =>\n callService(params, { ...autocompleteSearchTemplate, ...customTemplate }, 'Autocomplete');\n\nexport default autocompleteSearch;\n","import { autocompleteSearch } from './autocompleteSearch';\nimport type { AutocompleteSearchTemplate } from './autocompleteSearchTemplate';\nimport { autocompleteSearchTemplate } from './autocompleteSearchTemplate';\nimport { buildAutocompleteSearchRequest } from './requestBuilder';\nimport { parseAutocompleteSearchResponse } from './responseParser';\n\nconst customize: {\n autocompleteSearch: typeof autocompleteSearch;\n buildAutocompleteSearchRequest: typeof buildAutocompleteSearchRequest;\n parseAutocompleteSearchResponse: typeof parseAutocompleteSearchResponse;\n autocompleteSearchTemplate: AutocompleteSearchTemplate;\n} = {\n autocompleteSearch,\n buildAutocompleteSearchRequest,\n parseAutocompleteSearchResponse,\n autocompleteSearchTemplate,\n};\nexport default customize;\n","import { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendCommonParams } from '../shared/request/requestBuildingUtils';\nimport type { ChargingStationsAvailabilityParams } from './types/evChargingStationsAvailabilityParams';\n\nconst buildUrlBasePath = (params: ChargingStationsAvailabilityParams): string =>\n params.customServiceBaseURL ?? `${params.commonBaseURL}${PLACES_URL_PATH}/ev/id`;\n\n/**\n * Default method for building ev charging stations availability request from {@link ChargingStationsAvailabilityParams}\n * @param params The charging availability parameters, with global configuration already merged into them.\n */\nexport const buildEVChargingStationsAvailabilityRequest = (params: ChargingStationsAvailabilityParams): URL => {\n const url = new URL(buildUrlBasePath(params));\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n urlParams.append('id', params.id);\n return url;\n};\n","import { ChargingSpeed } from '@tomtom-org/maps-sdk/core';\n\n/**\n * @ignore\n */\nexport const toChargingSpeed = (powerInKW: number): ChargingSpeed => {\n if (powerInKW < 12) {\n return 'slow';\n } else if (powerInKW < 50) {\n return 'regular';\n } else if (powerInKW < 150) {\n return 'fast';\n }\n return 'ultra-fast';\n};\n","import type {\n ChargingPointAvailability,\n ChargingPointStatus,\n ChargingStation,\n Connector,\n ConnectorAvailability,\n ConnectorCount,\n} from '@tomtom-org/maps-sdk/core';\n\n/**\n * @ignore\n */\nexport const toChargingPointAvailability = (chargingStations: ChargingStation[]): ChargingPointAvailability => {\n const availability: ChargingPointAvailability = { count: 0, statusCounts: {} };\n for (const station of chargingStations) {\n for (const chargingPoint of station.chargingPoints) {\n availability.count++;\n availability.statusCounts[chargingPoint.status] =\n (availability.statusCounts[chargingPoint.status] || 0) + 1;\n }\n }\n return availability;\n};\n\n// Two connectors can be considered equal when they have the same type and power:\nconst areEqual = (connectorA: Connector, connectorB: Connector) =>\n connectorA.type === connectorB.type && connectorA.ratedPowerKW === connectorB.ratedPowerKW;\n\nconst addConnectorCount = (\n connectors: Connector[] | undefined,\n counts: ConnectorCount[], // we are mutating this input\n): void => {\n if (!connectors) {\n // defensive check, sometimes connectors are undefined\n return;\n }\n for (const connector of connectors) {\n const existingCount = counts.find((connectorCount) => areEqual(connector, connectorCount.connector));\n if (existingCount) {\n existingCount.count++;\n } else {\n // new count entry:\n counts.push({ connector, count: 1 });\n }\n }\n};\n\nconst addConnectorCountAndStatus = (\n connectors: Connector[] | undefined,\n status: ChargingPointStatus | undefined,\n availabilities: ConnectorAvailability[], // we are mutating this input\n): void => {\n if (!connectors) {\n // defensive check, sometimes connectors are undefined\n return;\n }\n for (const connector of connectors) {\n const existingAvailability = availabilities.find((connectorAvailability) =>\n areEqual(connector, connectorAvailability.connector),\n );\n if (existingAvailability) {\n existingAvailability.count++;\n if (status) {\n // we're mutating the input object here:\n const statusCounts = existingAvailability.statusCounts;\n existingAvailability.statusCounts[status] = (statusCounts[status] || 0) + 1;\n }\n } else {\n // new availability entry:\n availabilities.push({ connector, count: 1, statusCounts: status ? { [status]: 1 } : {} });\n }\n }\n};\n\n/**\n * @ignore\n */\nexport const toConnectorCounts = (connectors: Connector[]): ConnectorCount[] => {\n const availabilities: ConnectorAvailability[] = [];\n addConnectorCount(connectors, availabilities);\n return availabilities;\n};\n\n/**\n * @ignore\n */\nexport const toConnectorBasedAvailabilities = (chargingStations: ChargingStation[]): ConnectorAvailability[] => {\n const availabilities: ConnectorAvailability[] = [];\n for (const station of chargingStations) {\n for (const chargingPoint of station.chargingPoints) {\n addConnectorCountAndStatus(chargingPoint.connectors, chargingPoint.status, availabilities);\n }\n }\n return availabilities;\n};\n","import type { Moment, OpeningHours, Place, SearchPlaceProps, TimeRange } from '@tomtom-org/maps-sdk/core';\nimport { toPointGeometry } from '@tomtom-org/maps-sdk/core';\nimport { omit } from 'lodash-es';\nimport { toConnectorCounts } from '../ev-charging-stations-availability/connectorAvailability';\nimport { toChargingSpeed } from './ev';\nimport { apiToGeoJSONBBox, latLonAPIToPosition } from './geometry';\nimport type {\n BrandAPI,\n CommonSearchPlaceResultAPI,\n MomentAPI,\n OpeningHoursAPI,\n SummaryAPI,\n} from './types/apiPlacesResponseTypes';\nimport type { SearchSummary } from './types/searchSummary';\n\nconst parseYyyymmddDate = (dateYyyymmdd: string): { year: number; month: number; day: number } => {\n const splitDate = dateYyyymmdd.split('-');\n return {\n year: Number.parseInt(splitDate[0]),\n month: Number.parseInt(splitDate[1]),\n day: Number.parseInt(splitDate[2]),\n };\n};\n\nconst parseMoment = (momentApi: MomentAPI): Moment => {\n const { year, month, day } = parseYyyymmddDate(momentApi.date);\n return {\n dateYYYYMMDD: momentApi.date,\n year,\n month,\n day,\n hour: momentApi.hour,\n minute: momentApi.minute,\n date: new Date(year, month - 1, day, momentApi.hour, momentApi.minute),\n };\n};\n\nconst alwaysOpenInThisPeriod = (timeRanges: TimeRange[]): boolean =>\n timeRanges.length === 1 && timeRanges[0].start.hour === 0 && timeRanges[0].end.hour === 0;\n\n/**\n * @ignore\n */\nexport const parseOpeningHours = (openingHoursApi: OpeningHoursAPI): OpeningHours => {\n const timeRanges = openingHoursApi.timeRanges.map(\n (timeRangeApi): TimeRange => ({\n start: parseMoment(timeRangeApi.startTime),\n end: parseMoment(timeRangeApi.endTime),\n }),\n );\n return {\n mode: openingHoursApi.mode,\n timeRanges,\n alwaysOpenThisPeriod: alwaysOpenInThisPeriod(timeRanges),\n };\n};\n\n/**\n * Shared response parsing between geometry search and place by id service.\n * @ignore\n */\nexport const parseSearchAPIResult = (result: CommonSearchPlaceResultAPI): Place<SearchPlaceProps> => {\n const { position, entryPoints, poi, id, dist, boundingBox, chargingPark, ...rest } = result;\n const connectors = chargingPark?.connectors?.map((connector) => ({\n ...omit(connector, 'connectorType'),\n type: connector.connectorType,\n chargingSpeed: toChargingSpeed(connector.ratedPowerKW),\n }));\n return {\n type: 'Feature',\n geometry: toPointGeometry(latLonAPIToPosition(position)),\n ...(boundingBox && { bbox: apiToGeoJSONBBox(boundingBox) }),\n id,\n properties: {\n ...omit(rest, 'viewport'),\n ...(dist && { distance: dist }),\n ...(entryPoints?.length && {\n entryPoints: entryPoints.map((entrypoint) => ({\n ...entrypoint,\n position: latLonAPIToPosition(entrypoint.position),\n })),\n }),\n ...(connectors?.length && {\n chargingPark: {\n ...chargingPark,\n connectors: toConnectorCounts(connectors),\n },\n }),\n ...(poi && {\n poi: {\n ...omit(poi, 'categorySet', 'openingHours'),\n brands: poi?.brands?.map((brand: BrandAPI) => brand.name) ?? [],\n categoryIds: poi?.categorySet?.map((category) => category.id) ?? [],\n ...(poi?.openingHours && { openingHours: parseOpeningHours(poi?.openingHours) }),\n },\n }),\n },\n };\n};\n\n/**\n * @ignore\n */\nexport const parseSummaryAPI = (summary: SummaryAPI): SearchSummary => {\n const { geoBias, ...rest } = summary;\n\n return {\n ...(geoBias && { geoBias: latLonAPIToPosition(geoBias) }),\n ...rest,\n };\n};\n","import type { ChargingStation, ChargingStationsAvailability } from '@tomtom-org/maps-sdk/core';\nimport { toChargingSpeed } from '../shared/ev';\nimport { parseOpeningHours } from '../shared/searchResultParsing';\nimport { toChargingPointAvailability, toConnectorBasedAvailabilities } from './connectorAvailability';\nimport type { ChargingStationsAvailabilityResponseAPI } from './types/apiTypes';\n\nconst toChargingPointStations = (stations: ChargingStation[]) =>\n stations.map((station) => ({\n ...station,\n chargingPoints: station.chargingPoints.map((chargingPoint) => ({\n ...chargingPoint,\n connectors: chargingPoint.connectors?.map((connector) => ({\n ...connector,\n chargingSpeed: toChargingSpeed(connector.ratedPowerKW),\n })),\n })),\n }));\n\n/**\n * Default method for parsing ev charging stations availability from {@link ChargingStationsAvailability}\n * @param apiResponse\n */\nexport const parseEVChargingStationsAvailabilityResponse = (\n apiResponse: ChargingStationsAvailabilityResponseAPI,\n): ChargingStationsAvailability | undefined => {\n const result = apiResponse.results?.[0];\n return result\n ? {\n id: result.id,\n accessType: result.accessType,\n chargingStations: toChargingPointStations(result.chargingStations),\n chargingPointAvailability: toChargingPointAvailability(result.chargingStations),\n connectorAvailabilities: toConnectorBasedAvailabilities(result.chargingStations),\n ...(result.openingHours && { openingHours: parseOpeningHours(result.openingHours) }),\n }\n : undefined;\n};\n","import type { ChargingStationsAvailability } from '@tomtom-org/maps-sdk/core';\nimport type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { evChargingStationsAvailabilityRequestSchema } from './evChargingStationsAvailabilityRequestSchema';\nimport { parseEVChargingStationsAvailabilityResponseError } from './evChargingStationsAvailabilityResponseErrorParser';\nimport { buildEVChargingStationsAvailabilityRequest } from './requestBuilder';\nimport { parseEVChargingStationsAvailabilityResponse } from './responseParser';\nimport type { ChargingStationsAvailabilityResponseAPI } from './types/apiTypes';\nimport type { ChargingStationsAvailabilityParams } from './types/evChargingStationsAvailabilityParams';\n\n/**\n * EV Charging Stations Availability service template type.\n * @ignore\n */\nexport type EVChargingStationsAvailabilityTemplate = ServiceTemplate<\n ChargingStationsAvailabilityParams,\n URL,\n ChargingStationsAvailabilityResponseAPI,\n ChargingStationsAvailability | undefined\n>;\n\n/**\n * EV Charging Stations Availability service template main implementation.\n * @ignore\n */\nexport const evChargingStationsAvailabilityTemplate: EVChargingStationsAvailabilityTemplate = {\n requestValidation: { schema: evChargingStationsAvailabilityRequestSchema },\n buildRequest: buildEVChargingStationsAvailabilityRequest,\n sendRequest: get,\n parseResponse: parseEVChargingStationsAvailabilityResponse,\n parseResponseError: parseEVChargingStationsAvailabilityResponseError,\n};\n","import { z } from 'zod/v4-mini';\n\n/**\n * @ignore\n */\nexport const evChargingStationsAvailabilityRequestSchema = z.object({\n id: z.string(),\n});\n","import type { ParseResponseError } from '../shared';\nimport { SDKServiceError } from '../shared';\n\n/**\n * @ignore\n * @param apiError\n * @param serviceName\n */\nexport const parseEVChargingStationsAvailabilityResponseError: ParseResponseError = (apiError, serviceName) => {\n const errorMessage = apiError.data?.detailedError?.message ?? apiError.message;\n return new SDKServiceError(errorMessage, serviceName, apiError.status);\n};\n","import type { EVChargingStationsAvailabilityTemplate } from './evChargingStationsAvailabilityTemplate';\nimport { evChargingStationsAvailabilityTemplate } from './evChargingStationsAvailabilityTemplate';\nimport { buildEVChargingStationsAvailabilityRequest } from './requestBuilder';\nimport { parseEVChargingStationsAvailabilityResponse } from './responseParser';\n\nconst customize: {\n buildEVChargingStationsAvailabilityRequest: typeof buildEVChargingStationsAvailabilityRequest;\n parseEVChargingStationsAvailabilityResponse: typeof parseEVChargingStationsAvailabilityResponse;\n evChargingStationsAvailabilityTemplate: EVChargingStationsAvailabilityTemplate;\n} = {\n buildEVChargingStationsAvailabilityRequest,\n parseEVChargingStationsAvailabilityResponse,\n evChargingStationsAvailabilityTemplate,\n};\nexport default customize;\n","import { z } from 'zod/v4-mini';\nimport { hasBBoxSchema } from './geometriesSchema';\n\n/**\n * @ignore\n */\nexport const commonGeocodeAndFuzzySearchParamsSchema = z.partial(\n z.object({\n typeahead: z.boolean(),\n offset: z.number().check(z.maximum(1900)),\n radiusMeters: z.number(),\n boundingBox: hasBBoxSchema,\n countries: z.array(z.string()),\n }),\n);\n","import { views } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { hasLngLatSchema } from './geometriesSchema';\n\nconst placesParamsMandatory = z.object({\n query: z.string(),\n});\n\nconst placesParamsOptional = z.partial(\n z.object({\n position: hasLngLatSchema,\n limit: z.number().check(z.maximum(100)),\n extendedPostalCodesFor: z.array(z.string()),\n mapcodes: z.array(z.string()),\n view: z.enum(views),\n geographyTypes: z.array(z.string()),\n }),\n);\n\n/**\n * @ignore\n */\nexport const commonPlacesParamsSchema = z.extend(placesParamsMandatory, placesParamsOptional.shape);\n","import { z } from 'zod/v4-mini';\nimport { commonGeocodeAndFuzzySearchParamsSchema } from '../shared/schema/commonGeocodeAndFuzzySearchParamsSchema';\nimport { commonPlacesParamsSchema } from '../shared/schema/commonPlacesParamsSchema';\n\n/**\n * @ignore\n */\nexport const geocodingRequestSchema = z.extend(commonPlacesParamsSchema, commonGeocodeAndFuzzySearchParamsSchema.shape);\n","/**\n * @ignore\n * @param input\n */\nexport const arrayToCSV = (input: unknown | unknown[]): string =>\n !input ? '' : Array.isArray(input) ? input.join(',') : typeof input === 'string' ? input : String(input);\n\n/**\n * Samples, if necessary, the given array to fit within the given max length.\n * * If the array already fits within maxLength, the same array is returned.\n * * The sampling is done by spreading the array points at a constant increment.\n * * The first and last points are always included if array and max lengths are > 1.\n * * The sampling is done with speed in mind, so it's not guaranteed to always fit maxLength. Very often it will be shorter.\n *\n * Use this when needing to quickly simplify an array to fit some max length without caring too much on the lost detail.\n * * If both the array and max length are long enough, the loss of detail won't likely be an issue.\n * @ignore\n */\nexport const sampleWithinMaxLength = <T>(array: T[], maxLength: number): T[] => {\n const length = array.length;\n if (length <= maxLength) {\n return array;\n }\n\n const sampledArray = [];\n let i;\n const increment = Math.ceil(length / maxLength);\n for (i = 0; i < length; i += increment) {\n sampledArray.push(array[i]);\n }\n // ensuring the last point is always added:\n if (maxLength > 1 && i >= length - increment) {\n if (sampledArray.length < maxLength) {\n sampledArray.push(array[length - 1]);\n } else {\n sampledArray[sampledArray.length - 1] = array[length - 1];\n }\n }\n\n return sampledArray;\n};\n","import { bboxFromGeoJSON } from '@tomtom-org/maps-sdk/core';\nimport { isNil } from 'lodash-es';\nimport { arrayToCSV } from '../shared/arrays';\nimport { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendCommonParams, appendLatLonParamsFromPosition } from '../shared/request/requestBuildingUtils';\nimport type { GeocodingParams } from './types/geocodingParams';\n\nconst buildUrlBasePath = (params: GeocodingParams): string =>\n params.customServiceBaseURL || `${params.commonBaseURL}${PLACES_URL_PATH}/geocode`;\n\n/**\n * Default method for building geocoding request from {@link GeocodingParams}\n * @param params The geocoding parameters, with global configuration already merged into them.\n */\nexport const buildGeocodingRequest = (params: GeocodingParams): URL => {\n const url = new URL(`${buildUrlBasePath(params)}/${params.query}.json`);\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n // geocoding specific parameters:\n params.typeahead && urlParams.append('typeahead', String(params.typeahead));\n !isNil(params.limit) && urlParams.append('limit', String(params.limit));\n !isNil(params.offset) && urlParams.append('ofs', String(params.offset));\n appendLatLonParamsFromPosition(urlParams, params.position);\n params.countries && urlParams.append('countrySet', arrayToCSV(params.countries));\n !isNil(params.radiusMeters) && urlParams.append('radius', String(params.radiusMeters));\n const bbox = params.boundingBox && bboxFromGeoJSON(params.boundingBox);\n if (bbox) {\n urlParams.append('topLeft', arrayToCSV([bbox[3], bbox[0]]));\n urlParams.append('btmRight', arrayToCSV([bbox[1], bbox[2]]));\n }\n params.extendedPostalCodesFor &&\n urlParams.append('extendedPostalCodesFor', arrayToCSV(params.extendedPostalCodesFor));\n params.mapcodes && urlParams.append('mapcodes', arrayToCSV(params.mapcodes));\n params.view && urlParams.append('view', params.view);\n params.geographyTypes && urlParams.append('entityTypeSet', arrayToCSV(params.geographyTypes));\n return url;\n};\n","import type { GeographyType, Place } from '@tomtom-org/maps-sdk/core';\nimport { bboxFromGeoJSON, bboxOnlyIfWithArea, toPointGeometry } from '@tomtom-org/maps-sdk/core';\nimport { omit } from 'lodash-es';\nimport { apiToGeoJSONBBox, latLonAPIToPosition } from '../shared/geometry';\nimport type { GeocodingResponseAPI, GeocodingResultAPI } from './types/apiTypes';\nimport type { GeocodingProps, GeocodingResponse } from './types/geocodingResponse';\n\nconst parseApiResult = (result: GeocodingResultAPI): Place<GeocodingProps> => {\n const { position, boundingBox, dist, entryPoints, addressRanges, entityType, id, ...rest } = result;\n\n return {\n type: 'Feature',\n geometry: toPointGeometry(latLonAPIToPosition(position)),\n ...(boundingBox && { bbox: apiToGeoJSONBBox(boundingBox) }),\n id,\n properties: {\n ...omit(rest, 'viewport'),\n ...(dist && { distance: dist }),\n ...(entityType && { geographyType: entityType.split(',') as GeographyType[] }),\n ...(entryPoints && {\n entryPoints: entryPoints.map((entrypoint) => ({\n ...entrypoint,\n position: latLonAPIToPosition(entrypoint.position),\n })),\n }),\n ...(addressRanges && {\n addressRanges: {\n ...addressRanges,\n from: latLonAPIToPosition(addressRanges.from),\n to: latLonAPIToPosition(addressRanges.to),\n },\n }),\n },\n };\n};\n\n/**\n * Default method for parsing geocoding request from {@link GeocodingResponse}\n * @param apiResponse\n */\nexport const parseGeocodingResponse = (apiResponse: GeocodingResponseAPI): GeocodingResponse => {\n const results = apiResponse.results;\n const features = results.map(parseApiResult);\n const bbox = bboxOnlyIfWithArea(bboxFromGeoJSON(features));\n return {\n type: 'FeatureCollection',\n features,\n ...(bbox && { bbox }),\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { geocodingRequestSchema } from './geocodingRequestSchema';\nimport { buildGeocodingRequest } from './requestBuilder';\nimport { parseGeocodingResponse } from './responseParser';\nimport type { GeocodingResponseAPI } from './types/apiTypes';\nimport type { GeocodingParams } from './types/geocodingParams';\nimport type { GeocodingResponse } from './types/geocodingResponse';\n\n/**\n * Geocoding service template type.\n * @ignore\n */\nexport type GeocodingTemplate = ServiceTemplate<GeocodingParams, URL, GeocodingResponseAPI, GeocodingResponse>;\n\n/**\n * Geocoding service template main implementation.\n * @ignore\n */\nexport const geocodingTemplate: GeocodingTemplate = {\n requestValidation: { schema: geocodingRequestSchema },\n buildRequest: buildGeocodingRequest,\n sendRequest: get,\n parseResponse: parseGeocodingResponse,\n};\n","import type { GeocodingTemplate } from './geocodingTemplate';\nimport { geocodingTemplate } from './geocodingTemplate';\nimport { buildGeocodingRequest } from './requestBuilder';\nimport { parseGeocodingResponse } from './responseParser';\n\nconst customize: {\n buildGeocodingRequest: typeof buildGeocodingRequest;\n parseGeocodingResponse: typeof parseGeocodingResponse;\n geocodingTemplate: GeocodingTemplate;\n} = {\n buildGeocodingRequest,\n parseGeocodingResponse,\n geocodingTemplate,\n};\nexport default customize;\n","import { z } from 'zod/v4-mini';\nimport { featureCollectionSchema, featureSchema } from '../shared/schema/geometriesSchema';\n\nconst geometryDataRequestMandatory = z.object({\n geometries: z.union([\n featureCollectionSchema,\n z.array(z.union([z.string(), featureSchema])).check(z.minLength(1), z.maxLength(20)),\n ]),\n});\n\nconst geometryDataRequestOptional = z.partial(\n z.object({\n zoom: z.number().check(z.minimum(0), z.maximum(22)),\n }),\n);\n\nexport const geometryDataRequestSchema = z.extend(geometryDataRequestMandatory, geometryDataRequestOptional.shape);\n","import type { Place, Places } from '@tomtom-org/maps-sdk/core';\nimport { arrayToCSV } from '../shared/arrays';\nimport { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendOptionalParam } from '../shared/request/requestBuildingUtils';\nimport type { GeometriesInput, GeometryParams } from './types/geometryDataParams';\n\nconst buildUrlBasePath = (params: GeometryParams): string =>\n params.customServiceBaseURL || `${params.commonBaseURL}${PLACES_URL_PATH}/additionalData.json`;\n\nconst getGeometryIDs = (placesArray: Place[]): string[] =>\n placesArray.map((place) => place.properties.dataSources?.geometry?.id as string).filter((id) => id);\n\n// (@see geometryDataRequestSchema)\nconst appendGeometries = (urlParams: URLSearchParams, geometries: GeometriesInput | Places | Place[]): void => {\n let geometryIDs: string[];\n\n if (Array.isArray(geometries)) {\n // (assuming min and max length already validated)\n if (typeof geometries[0] === 'string') {\n geometryIDs = geometries as string[];\n } else {\n geometryIDs = getGeometryIDs(geometries as Place[]);\n }\n } else {\n // (assuming already validated as FeatureCollection)\n geometryIDs = getGeometryIDs(geometries.features);\n }\n\n urlParams.append('geometries', arrayToCSV(geometryIDs));\n};\n\n/**\n * Default function for building a geometry data request from {@link GeometryDataParams}\n * @param params The geometry data parameters, with global configuration already merged into them.\n */\nexport const buildGeometryDataRequest = (params: GeometryParams): URL => {\n const url = new URL(buildUrlBasePath(params));\n const urlParams = url.searchParams;\n // (no language in this service)\n urlParams.append('apiVersion', String(params.apiVersion));\n urlParams.append('key', params.apiKey as string);\n appendGeometries(urlParams, params.geometries);\n appendOptionalParam(urlParams, 'geometriesZoom', params.zoom);\n return url;\n};\n","import { bboxFromGeoJSON, generateId, PolygonFeature, PolygonFeatures } from '@tomtom-org/maps-sdk/core';\nimport type { GeometryDataResponseAPI } from './types/apiTypes';\n\n/**\n * Default geometry data API response parsing.\n * * The API response consists of an array, with a FeatureCollection (with only one feature) for each geometry.\n * * The parsed response consists of a fully-GeoJSON-compatible FeatureCollection with a Feature for each geometry.\n * * Each geometry ID is included in each GeoJSON feature \"id\" field.\n * @param apiResponse\n */\nexport const parseGeometryDataResponse = (apiResponse: GeometryDataResponseAPI): PolygonFeatures => {\n const features = apiResponse.additionalData\n .flatMap((data) =>\n (data.geometryData as PolygonFeatures)?.features.map((feature) => ({\n ...feature,\n id: feature.id ?? generateId(),\n bbox: bboxFromGeoJSON(feature.geometry),\n })),\n )\n .filter((feature) => feature) as PolygonFeature[];\n return {\n type: 'FeatureCollection',\n bbox: bboxFromGeoJSON(features),\n features,\n };\n};\n","import type { PolygonFeatures } from '@tomtom-org/maps-sdk/core';\nimport type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { geometryDataRequestSchema } from './geometryDataRequestSchema';\nimport { buildGeometryDataRequest } from './requestBuilder';\nimport { parseGeometryDataResponse } from './responseParser';\nimport type { GeometryDataResponseAPI } from './types/apiTypes';\nimport type { GeometryParams } from './types/geometryDataParams';\n\n/**\n * @ignore\n */\nexport type GeometryDataTemplate = ServiceTemplate<GeometryParams, URL, GeometryDataResponseAPI, PolygonFeatures>;\n\n/**\n * @ignore\n */\nexport const geometryDataTemplate: GeometryDataTemplate = {\n requestValidation: { schema: geometryDataRequestSchema },\n buildRequest: buildGeometryDataRequest,\n sendRequest: get,\n parseResponse: parseGeometryDataResponse,\n};\n","import type { GeometryDataTemplate } from './geometryDataTemplate';\nimport { geometryDataTemplate } from './geometryDataTemplate';\nimport { buildGeometryDataRequest } from './requestBuilder';\nimport { parseGeometryDataResponse } from './responseParser';\n\nconst customize: {\n buildGeometryDataRequest: typeof buildGeometryDataRequest;\n parseGeometryDataResponse: typeof parseGeometryDataResponse;\n geometryDataTemplate: GeometryDataTemplate;\n} = {\n buildGeometryDataRequest,\n parseGeometryDataResponse,\n geometryDataTemplate,\n};\nexport default customize;\n","import { poiCategoriesToID } from '@tomtom-org/maps-sdk/core';\nimport { type ZodMiniObject, z } from 'zod/v4-mini';\nimport { commonPlacesParamsSchema } from '../shared/schema/commonPlacesParamsSchema';\n\nconst poiCategoriesToIdZodObject = z.object(poiCategoriesToID) as unknown as ZodMiniObject;\n\nconst searchExtraParamsOptional = z.partial(\n z.object({\n indexes: z.array(z.string()),\n poiCategories: z.array(z.union([z.number(), z.keyof(poiCategoriesToIdZodObject)])),\n poiBrands: z.array(z.string()),\n connectors: z.array(z.string()),\n fuelTypes: z.array(z.string()),\n openingHours: z.string(),\n timeZone: z.string(),\n relatedPois: z.string(),\n minPowerKW: z.number(),\n maxPowerKW: z.number(),\n minFuzzyLevel: z.number(),\n mixFuzzyLevel: z.number(),\n }),\n);\n\n/**\n * @ignore\n */\nexport const commonSearchParamsSchema = z.extend(commonPlacesParamsSchema, searchExtraParamsOptional.shape);\n","import { z } from 'zod/v4-mini';\nimport { commonSearchParamsSchema } from '../search/commonSearchParamsSchema';\nimport { featureCollectionSchema, geometrySchema } from '../shared/schema/geometriesSchema';\n\nconst geometrySearchRequestMandatory = z.object({\n geometries: z.array(z.union([featureCollectionSchema, geometrySchema])),\n});\n\n/**\n * @ignore\n */\nexport const geometrySearchRequestSchema = z.extend(commonSearchParamsSchema, geometrySearchRequestMandatory.shape);\n","import { bboxFromCoordsArray } from '@tomtom-org/maps-sdk/core';\nimport type { MultiPolygon, Position } from 'geojson';\nimport type { PostObject } from '../shared';\nimport { sampleWithinMaxLength } from '../shared/arrays';\nimport { positionToCSVLatLon } from '../shared/geometry';\nimport { appendCommonSearchParams, PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport type { GeometryAPI, GeometrySearchParams, GeometrySearchPayloadAPI, SearchGeometryInput } from './types';\n\nconst findFiftyLargestPolygons = (searchGeometry: MultiPolygon): Position[][][] => {\n // we calculate the size of each polygon based on bounding box (simplified)\n // we put it into a map for easy sorting\n // we sort the map by using size and keep only 50 largest polygons\n let polygonSizeMap = new Map<Position[][], number>();\n searchGeometry.coordinates.forEach((polygon) => {\n const bboxOfPolygon = bboxFromCoordsArray(polygon[0]);\n if (bboxOfPolygon) {\n const polygonSize = Math.abs((bboxOfPolygon[2] - bboxOfPolygon[0]) * (bboxOfPolygon[3] - bboxOfPolygon[1]));\n polygonSizeMap.set(polygon, polygonSize);\n }\n });\n polygonSizeMap = new Map([...polygonSizeMap.entries()].sort((a, b) => b[1] - a[1]).splice(0, 50));\n return [...polygonSizeMap.keys()];\n};\n\nconst sdkGeometryToApiGeometries = (searchGeometry: SearchGeometryInput): GeometryAPI[] => {\n switch (searchGeometry.type) {\n case 'Circle':\n return [\n {\n type: 'CIRCLE',\n radius: searchGeometry.radius,\n position: positionToCSVLatLon(searchGeometry.coordinates),\n },\n ];\n case 'Polygon':\n return [\n {\n type: 'POLYGON',\n vertices: sampleWithinMaxLength(searchGeometry.coordinates[0], 50).map((coord) =>\n positionToCSVLatLon(coord),\n ),\n },\n ];\n case 'MultiPolygon': {\n if (searchGeometry.coordinates.length > 50) {\n // we have too many polygons for the service to work\n return findFiftyLargestPolygons(searchGeometry).flatMap((polygonCoords) =>\n sdkGeometryToApiGeometries({ type: 'Polygon', coordinates: polygonCoords }),\n );\n }\n return searchGeometry.coordinates.flatMap((polygonCoords) =>\n sdkGeometryToApiGeometries({ type: 'Polygon', coordinates: polygonCoords }),\n );\n }\n case 'FeatureCollection':\n return searchGeometry.features.flatMap((feature) => sdkGeometryToApiGeometries(feature.geometry));\n default:\n // @ts-ignore\n throw new Error(`Type ${(searchGeometry as unknown).type} is not supported`);\n }\n};\n\nconst buildUrlBasePath = (mergedOptions: GeometrySearchParams): string =>\n mergedOptions.customServiceBaseURL ??\n `${mergedOptions.commonBaseURL}${PLACES_URL_PATH}/geometrySearch/${mergedOptions.query}.json`;\n\n/**\n * Default function for building a geometry search request from {@link GeometrySearchParams}\n * @param params The geometry search parameters, with global configuration already merged into them.\n */\nexport const buildGeometrySearchRequest = (params: GeometrySearchParams): PostObject<GeometrySearchPayloadAPI> => {\n const url = new URL(`${buildUrlBasePath(params)}`);\n appendCommonSearchParams(url, params);\n\n return {\n url,\n data: {\n geometryList: params.geometries.flatMap(sdkGeometryToApiGeometries),\n },\n };\n};\n","import { bboxFromGeoJSON, bboxOnlyIfWithArea } from '@tomtom-org/maps-sdk/core';\nimport { parseSearchAPIResult, parseSummaryAPI } from '../shared/searchResultParsing';\nimport type { GeometrySearchResponse, GeometrySearchResponseAPI } from './types';\n\n/**\n * Default function to parse a geometry search response.\n * @param apiResponse The API response.\n */\nexport const parseGeometrySearchResponse = (apiResponse: GeometrySearchResponseAPI): GeometrySearchResponse => {\n const features = apiResponse.results.map(parseSearchAPIResult);\n const bbox = bboxOnlyIfWithArea(bboxFromGeoJSON(features));\n return {\n type: 'FeatureCollection',\n properties: {\n ...parseSummaryAPI(apiResponse.summary),\n },\n features,\n ...(bbox && { bbox }),\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { post } from '../shared/fetch';\nimport { geometrySearchRequestSchema } from './geometrySearchRequestSchema';\nimport { buildGeometrySearchRequest } from './requestBuilder';\nimport { parseGeometrySearchResponse } from './responseParser';\nimport type {\n GeometrySearchParams,\n GeometrySearchRequestAPI,\n GeometrySearchResponse,\n GeometrySearchResponseAPI,\n} from './types';\n\n/**\n * Geometry search service template type.\n */\nexport type GeometrySearchTemplate = ServiceTemplate<\n GeometrySearchParams,\n GeometrySearchRequestAPI,\n GeometrySearchResponseAPI,\n GeometrySearchResponse\n>;\n\n/**\n * Geometry search service template main implementation.\n */\nexport const geometrySearchTemplate: GeometrySearchTemplate = {\n requestValidation: { schema: geometrySearchRequestSchema },\n buildRequest: buildGeometrySearchRequest,\n sendRequest: post,\n parseResponse: parseGeometrySearchResponse,\n};\n","import { callService } from '../shared/serviceTemplate';\nimport type { GeometrySearchTemplate } from './geometrySearchTemplate';\nimport { geometrySearchTemplate } from './geometrySearchTemplate';\nimport type { GeometrySearchParams, GeometrySearchResponse } from './types';\n\n/**\n * Search for places within specific geographic boundaries.\n *\n * The Geometry Search service finds places that fall within one or more defined areas,\n * such as polygons, circles, or corridors. This is essential for location-based filtering\n * and spatial queries where you need results constrained to specific regions.\n *\n * @remarks\n * Key features:\n * - **Area-based search**: Find places within polygons, circles, or along routes\n * - **Multiple geometries**: Search across several areas simultaneously\n * - **Precise boundaries**: Only returns results within the specified areas\n * - **Combined with text**: Filter by query text within the geometric boundaries\n * - **Category filtering**: Narrow results by POI categories\n *\n * Common use cases:\n * - **Route-based search**: \"Find gas stations along my route\"\n * - **Area filtering**: \"Restaurants within this neighborhood polygon\"\n * - **Corridor search**: \"Hotels within 5km of the highway\"\n * - **Service areas**: \"Stores within our delivery zone\"\n * - **Geofencing**: Places within administrative or custom boundaries\n *\n * @param params Geometry search parameters including geometries and optional query\n * @param customTemplate Advanced customization for request/response handling\n *\n * @returns Promise resolving to places within the specified geometries\n *\n * @example\n * ```typescript\n * // Search within a polygon (neighborhood boundaries)\n * const inArea = await geometrySearch({\n * key: 'your-api-key',\n * query: 'coffee shop',\n * geometries: [{\n * type: 'Polygon',\n * coordinates: [[\n * [4.88, 52.36],\n * [4.90, 52.36],\n * [4.90, 52.38],\n * [4.88, 52.38],\n * [4.88, 52.36]\n * ]]\n * }]\n * });\n *\n * // Find POIs along a route corridor\n * const alongRoute = await geometrySearch({\n * key: 'your-api-key',\n * query: 'gas station',\n * geometries: [routeLineString], // From calculateRoute result\n * geometryList: [{\n * position: 0,\n * radius: 5000 // 5km corridor along route\n * }]\n * });\n *\n * // Search multiple areas at once\n * const multiArea = await geometrySearch({\n * key: 'your-api-key',\n * query: 'pharmacy',\n * geometries: [polygonA, polygonB, polygonC],\n * limit: 20\n * });\n *\n * // Category search within geometry\n * const restaurants = await geometrySearch({\n * key: 'your-api-key',\n * categorySet: [7315], // Restaurant category\n * geometries: [cityBoundary]\n * });\n * ```\n *\n * @see [Geometry Search API Documentation](https://docs.tomtom.com/search-api/documentation/search-service/geometry-search)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Search Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/search)\n *\n * @ignore (exposed via 'search')\n */\nexport const geometrySearch = async (\n params: GeometrySearchParams,\n customTemplate?: Partial<GeometrySearchTemplate>,\n): Promise<GeometrySearchResponse> =>\n callService(params, { ...geometrySearchTemplate, ...customTemplate }, 'GeometrySearch');\n\nexport default geometrySearch;\n","import { geometrySearch } from './geometrySearch';\nimport type { GeometrySearchTemplate } from './geometrySearchTemplate';\nimport { geometrySearchTemplate } from './geometrySearchTemplate';\nimport { buildGeometrySearchRequest } from './requestBuilder';\nimport { parseGeometrySearchResponse } from './responseParser';\n\nconst customize: {\n geometrySearch: typeof geometrySearch;\n buildGeometrySearchRequest: typeof buildGeometrySearchRequest;\n parseGeometrySearchResponse: typeof parseGeometrySearchResponse;\n geometrySearchTemplate: GeometrySearchTemplate;\n} = {\n geometrySearch,\n buildGeometrySearchRequest,\n parseGeometrySearchResponse,\n geometrySearchTemplate,\n};\nexport default customize;\n","import { views } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\n\nconst placeByIdRequestMandatory = z.object({\n entityId: z.string(),\n});\n\nconst placeByIdRequestOptional = z.partial(\n z.object({\n mapcodes: z.array(z.string()),\n view: z.enum(views),\n openingHours: z.string(),\n timeZone: z.string(),\n relatedPois: z.string(),\n }),\n);\n\n/**\n * @ignore\n */\nexport const placeByIdRequestSchema = z.extend(placeByIdRequestMandatory, placeByIdRequestOptional.shape);\n","import type { CommonServiceParams } from '../shared';\nimport { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport {\n appendByJoiningParamValue,\n appendCommonParams,\n appendOptionalParam,\n} from '../shared/request/requestBuildingUtils';\nimport type { PlaceByIdParams } from './types';\n\nconst buildUrlBasePath = (params: CommonServiceParams): string =>\n params.customServiceBaseURL || `${params.commonBaseURL}${PLACES_URL_PATH}/place.json`;\n\n/**\n * Default method for building place by id request from {@link PlaceByIdParams}\n * @param params The place by id parameters, with global configuration already merged into them.\n */\nexport const buildPlaceByIdRequest = (params: PlaceByIdParams): URL => {\n const url = new URL(`${buildUrlBasePath(params)}`);\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n appendOptionalParam(urlParams, 'entityId', params.entityId);\n appendByJoiningParamValue(urlParams, 'mapcodes', params.mapcodes);\n appendOptionalParam(urlParams, 'view', params.view);\n appendOptionalParam(urlParams, 'openingHours', params.openingHours);\n appendOptionalParam(urlParams, 'timeZone', params.timeZone);\n appendOptionalParam(urlParams, 'relatedPois', params.relatedPois);\n return url;\n};\n","import { parseSearchAPIResult } from '../shared/searchResultParsing';\nimport type { PlaceByIdResponse, PlaceByIdResponseAPI } from './types';\n\n/**\n * Default method for parsing place by id response.\n * @param apiResponse The place by id response.\n */\nexport const parsePlaceByIdResponse = (apiResponse: PlaceByIdResponseAPI): PlaceByIdResponse =>\n apiResponse.results?.length ? parseSearchAPIResult(apiResponse.results[0]) : undefined;\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { placeByIdRequestSchema } from './placeByIdSchema';\nimport { buildPlaceByIdRequest } from './requestBuilder';\nimport { parsePlaceByIdResponse } from './responseParser';\nimport type { PlaceByIdParams, PlaceByIdResponse, PlaceByIdResponseAPI } from './types';\n\n/**\n * Place By Is template type.\n * @ignore\n */\nexport type PlaceByIdTemplate = ServiceTemplate<PlaceByIdParams, URL, PlaceByIdResponseAPI, PlaceByIdResponse>;\n\n/**\n * Place By Id template main implementation.\n * @ignore\n */\nexport const placeByIdTemplate: PlaceByIdTemplate = {\n requestValidation: { schema: placeByIdRequestSchema },\n buildRequest: buildPlaceByIdRequest,\n sendRequest: get,\n parseResponse: parsePlaceByIdResponse,\n};\n","import type { PlaceByIdTemplate } from './placeByIdTemplate';\nimport { placeByIdTemplate } from './placeByIdTemplate';\nimport { buildPlaceByIdRequest } from './requestBuilder';\nimport { parsePlaceByIdResponse } from './responseParser';\n\nconst customize: {\n buildPlaceByIdRequest: typeof buildPlaceByIdRequest;\n parsePlaceByIdResponse: typeof parsePlaceByIdResponse;\n placeByIdTemplate: PlaceByIdTemplate;\n} = {\n buildPlaceByIdRequest,\n parsePlaceByIdResponse,\n placeByIdTemplate,\n};\nexport default customize;\n","import type { Avoidable, TravelMode } from '@tomtom-org/maps-sdk/core';\nimport { VehicleParameters } from './vehicleParams';\n\n/**\n * Basic low/normal/high intensity level option.\n *\n * Used for configuring route characteristics like hilliness or windingness.\n *\n * @remarks\n * - `low`: Minimal intensity\n * - `normal`: Moderate intensity\n * - `high`: Maximum intensity\n *\n * @group Routing\n */\nexport type LNH = 'low' | 'normal' | 'high';\n\n// TODO: there is no slope data yet in Orbis, thus hilliness isn't supported yet\n// /**\n// * Options applicable to the thrilling route type.\n// */\n// export type ThrillingParams = {\n// /**\n// * The level of hilliness on a thrilling route.\n// * * Possible values: low, normal, high.\n// * * This parameter can only be used in conjunction with routeType thrilling.\n// * @default None\n// */\n// hilliness?: LNH;\n//\n// /**\n// * The level of windingness on a thrilling route.\n// *\n// * * Possible values: low, normal, high.\n// * * This parameter can only be used in conjunction with routeType thrilling.\n// * @default None\n// */\n// windingness?: LNH;\n// };\n\n/**\n * Available route types, where each type specifies the type of optimization used when calculating routes:\n * * **fast**: Route calculation is optimized by travel time, while keeping the routes sensible. For example, the calculation may avoid shortcuts along inconvenient side roads or long detours that only save very little time.\n * * **short**: Route calculation is optimized such that a good compromise between small travel time and short travel distance is achieved.\n * * **efficient**: Route calculation is optimized such that a good compromise between small travel time and low fuel or energy consumption is achieved.\n * * **thrilling**: Route calculation is optimized such that routes include interesting or challenging roads and use as few motorways as possible.\n * There is a limit of 900km on routes planned with routeType=thrilling.\n *\n * @group Routing\n */\nexport const routeTypes = ['fast', 'short', 'efficient', 'thrilling'] as const;\n\n/**\n * Route optimization strategy for route calculation.\n *\n * Determines what the routing engine optimizes for when calculating the route.\n * Each type produces different routes suited to different use cases.\n *\n * @remarks\n * **Route Type Strategies:**\n *\n * - **`fast`**: Minimize travel time while maintaining practicality\n * - Prefers major roads and highways\n * - Avoids unnecessary detours and shortcuts on minor roads\n * - Best for most everyday use cases (commuting, business travel)\n *\n * - **`short`**: Balance between time and distance\n * - Good compromise between speed and mileage\n * - May use smaller roads to save distance\n * - Useful for short trips or when fuel costs matter\n *\n * - **`efficient`**: Minimize fuel or energy consumption\n * - Optimizes for least energy use\n * - Considers vehicle consumption model\n * - Avoids rapid acceleration/deceleration\n * - Best used with vehicle consumption parameters\n *\n * - **`thrilling`**: Scenic and engaging routes\n * - Prefers curvy, interesting roads\n * - Minimizes motorway usage\n * - **Limited to 900km maximum route length**\n * - Ideal for motorcycle rides or scenic drives\n *\n * @example\n * ```typescript\n * // Fastest route for commuting\n * const routeType: RouteType = 'fast';\n *\n * // Most fuel-efficient route for long trip\n * const ecoRoute: RouteType = 'efficient';\n *\n * // Scenic route for leisure\n * const scenicRoute: RouteType = 'thrilling';\n * ```\n *\n * @group Routing\n */\nexport type RouteType = (typeof routeTypes)[number];\n\n/**\n * Traffic consideration mode for route calculation.\n *\n * Controls how traffic conditions are factored into routing and travel time estimates.\n *\n * @remarks\n * **Traffic Modes:**\n *\n * - **`live`**: Real-time + historical traffic\n * - Includes current traffic jams and incidents\n * - Considers short-term and long-term road closures\n * - Most accurate for immediate departures\n * - Updates with current conditions\n *\n * - **`historical`**: Typical traffic patterns only\n * - Based on historical data for time of day/week\n * - Ignores current traffic conditions\n * - Good for future trip planning\n * - More predictable for scheduled departures\n *\n * @example\n * ```typescript\n * // Route considering current traffic (departing now)\n * const trafficMode: TrafficInput = 'live';\n *\n * // Route based on typical patterns (planning ahead)\n * const plannedRoute: TrafficInput = 'historical';\n * ```\n *\n * @group Routing\n */\nexport type TrafficInput = 'live' | 'historical';\n\n/**\n * Cost model criteria for route optimization.\n *\n * Defines routing preferences and constraints that influence path selection.\n * Combines route type, traffic consideration, and avoidance criteria to determine\n * what makes a route \"better\" in the eyes of the routing engine.\n *\n * @remarks\n * The cost model affects how the route path is calculated, but does not affect what other data the response includes.\n *\n * The cost model balances multiple factors:\n * - Time efficiency\n * - Distance\n * - Fuel/energy consumption\n * - User preferences (avoid tolls, ferries, etc.)\n * - Traffic conditions\n *\n * @example\n * ```typescript\n * // Fast route avoiding tolls\n * const costModel: CostModel = {\n * routeType: 'fast',\n * traffic: 'live',\n * avoid: ['tollRoads']\n * };\n *\n * // Eco-friendly route avoiding highways\n * const ecoCostModel: CostModel = {\n * routeType: 'efficient',\n * traffic: 'historical',\n * avoid: ['motorways', 'ferries']\n * };\n *\n * // Scenic route for leisure\n * const scenicCostModel: CostModel = {\n * routeType: 'thrilling',\n * avoid: ['motorways', 'tollRoads']\n * };\n * ```\n *\n * @group Routing\n */\nexport type CostModel = {\n /**\n * Specifies something that the route calculation should try to avoid when determining the route.\n * @default None\n */\n avoid?: Avoidable[];\n\n /**\n * Decides how traffic is considered for computing routes.\n *\n * Possible values are:\n * * live: In addition to historical travel times, routing and estimated travel time\n * consider traffic jams and short- and long-term closures during the travel time window.\n * * historical: Routing and estimated travel time consider historical travel times and long term closures.\n * Traffic jams and short-term closures during the travel time window do not influence routing or travel time.\n *\n * @default live\n *\n * @remarks\n * This setting does not affect whether live traffic is included in the response or not.\n * * Considering historical traffic in cost model does not mean live traffic is not included in the response.\n */\n traffic?: TrafficInput;\n\n /**\n * Specifies the type of optimization used when calculating routes.\n * Possible values are:\n *\n * * **fast**: Route calculation is optimized by travel time, while keeping the routes sensible. For example, the calculation may avoid shortcuts along inconvenient side roads or long detours that only save very little time.\n * * **short**: Route calculation is optimized such that a good compromise between small travel time and short travel distance is achieved.\n * * **efficient**: Route calculation is optimized such that a good compromise between small travel time and low fuel or energy consumption is achieved.\n * * **thrilling**: Route calculation is optimized such that routes include interesting or challenging roads and use as few motorways as possible.\n * There is a limit of 900km on routes planned with routeType=thrilling.\n * @default fast\n */\n routeType?: RouteType;\n\n /**\n * Optional parameters if the route type is \"thrilling\" to indicate how curvy and hilly the route should be.\n */\n // TODO not supported yet in Orbis (no slope data)\n // thrillingParams?: ThrillingParams;\n};\n\ntype DepartArriveOption = 'departAt' | 'arriveBy';\n\n/**\n * Departure or arrival time specification for route planning.\n *\n * Allows specifying either when to depart from the origin or when to arrive at the destination.\n * The routing engine calculates the route optimized for that specific time window, considering\n * traffic patterns for that time of day.\n *\n * @typeParam Option - Whether this specifies departure or arrival time\n *\n * @remarks\n * Traffic conditions vary significantly by:\n * - Time of day (rush hour vs off-peak)\n * - Day of week (weekday vs weekend)\n * - Special events or holidays\n *\n * Specifying a departure or arrival time enables the router to:\n * - Use appropriate traffic data for that time\n * - Plan around rush hour or quiet periods\n * - Calculate accurate arrival/departure times\n * - Account for time-dependent road restrictions\n *\n * **Important Notes:**\n * - Times are processed in the timezone of the origin/destination\n *\n * @example\n * ```typescript\n * // Depart at specific time (morning commute)\n * const departParams: DepartArriveParams = {\n * option: 'departAt',\n * date: new Date('2025-10-20T08:00:00Z')\n * };\n *\n * // Arrive by specific time (catch a flight)\n * const arriveParams: DepartArriveParams = {\n * option: 'arriveBy',\n * date: new Date('2025-10-20T14:00:00Z')\n * };\n *\n * // Plan route avoiding rush hour\n * const offPeakDepart: DepartArriveParams = {\n * option: 'departAt',\n * date: new Date('2025-10-20T10:30:00Z') // After morning rush\n * };\n * ```\n *\n * @group Routing\n */\nexport type DepartArriveParams<Option extends DepartArriveOption = DepartArriveOption> = {\n /**\n * Whether to specify a departure or arrival time.\n *\n * @remarks\n * - `departAt`: Calculate route from this departure time forward\n * - `arriveBy`: Calculate route backward to arrive by this time\n */\n option: Option;\n\n /**\n * The date and time to depart or arrive.\n *\n * @remarks\n * If past dates are supplied or dates that are impossible to achieve\n * (e.g., an imminent arrival date for a very long route), the system\n * will default to departing immediately.\n *\n * Times should be specified in ISO 8601 format or as JavaScript Date objects.\n */\n date: Date;\n};\n\n/**\n * Common parameters shared across all routing service requests.\n *\n * These parameters configure how routes are calculated, including optimization\n * strategy, vehicle characteristics, timing constraints, and travel preferences.\n * They provide a consistent interface across different routing services.\n *\n * @remarks\n * Most routing services (calculateRoute, calculateMatrixRoute, calculateReachableRange)\n * accept these parameters to customize route calculation. They control:\n * - What to optimize for (time, distance, fuel)\n * - Vehicle constraints and capabilities\n * - When to travel (affecting traffic)\n * - What features to avoid\n * - Mode of transportation\n *\n * **Service Compatibility:**\n * - {@link calculateRoute}: All parameters supported\n * - {@link calculateMatrixRoute}: Subset of parameters\n * - {@link calculateReachableRange}: Subset of parameters\n *\n * @example\n * ```typescript\n * // Standard car route avoiding tolls\n * const routingParams: CommonRoutingParams = {\n * costModel: {\n * routeType: 'fast',\n * traffic: 'live',\n * avoid: ['tollRoads']\n * },\n * travelMode: 'car',\n * when: {\n * option: 'departAt',\n * date: new Date('2025-10-20T08:00:00Z')\n * }\n * };\n *\n * // Electric vehicle route with consumption model\n * const evRoutingParams: CommonRoutingParams = {\n * costModel: {\n * routeType: 'efficient',\n * traffic: 'live'\n * },\n * travelMode: 'car',\n * vehicle: {\n * engineType: 'electric',\n * model: {\n * dimensions: {\n * weightKG: 2000\n * },\n * engine: {\n * consumption: {\n * speedToConsumption: [\n * { speedKMH: 50, consumptionUnitsPer100KM: 15 },\n * { speedKMH: 90, consumptionUnitsPer100KM: 18 },\n * { speedKMH: 120, consumptionUnitsPer100KM: 22 }\n * ]\n * }\n * }\n * },\n * state: {\n * currentChargeInkWh: 60\n * }\n * }\n * };\n *\n * // Truck route with restrictions\n * const truckParams: CommonRoutingParams = {\n * costModel: {\n * routeType: 'short',\n * avoid: ['tollRoads', 'ferries']\n * },\n * travelMode: 'truck',\n * vehicle: {\n * model: {\n * dimensions: {\n * lengthMeters: 16.5,\n * widthMeters: 2.5,\n * heightMeters: 4.0,\n * weightKG: 40000\n * },\n * restrictions: {\n * restrictions: {\n * commercial: true,\n * maxSpeedKMH: 90\n * }\n * }\n * }\n * }\n * };\n * ```\n *\n * @see [Common Routing Parameters Documentation](https://docs.tomtom.com/routing-api/documentation/routing/common-routing-parameters)\n *\n * @group Routing\n */\nexport type CommonRoutingParams = {\n /**\n * Criteria that specifies what paths to prefer during routing.\n */\n costModel?: CostModel;\n\n /**\n * The primary means of transportation to be used while routing.\n *\n * The travel mode for the requested route.\n * Note that the requested travelMode may not be available for the entire route. Where\n * the requested travelMode is not available for a particular section, the element of the\n * response for that section will be 'other'.\n * @default None\n */\n travelMode?: TravelMode;\n\n /**\n * Specifies when to depart or arrive.\n * If past dates are supplied or in a way that are impossible to achieve\n * (e.g. an imminent arrival date for a long route), then it will default to departing now.\n * @default depart now\n */\n when?: DepartArriveParams;\n\n /**\n * Parameters for the vehicle that will be used to drive the route.\n */\n vehicle?: VehicleParameters;\n\n /**\n * The version of the API to use.\n * * The SDK will use the right default when not specified.\n * * Use it only if you really need to target a specific API version.\n */\n apiVersion?: number;\n};\n","/**\n * Known hazardous truck load types. Should be used for trucks carrying hazardous materials.\n */\nexport const loadTypes = [\n 'USHazmatClass1',\n 'USHazmatClass2',\n 'USHazmatClass3',\n 'USHazmatClass4',\n 'USHazmatClass5',\n 'USHazmatClass6',\n 'USHazmatClass7',\n 'USHazmatClass8',\n 'USHazmatClass9',\n 'otherHazmatExplosive',\n 'otherHazmatGeneral',\n 'otherHazmatHarmfulToWater',\n] as const;\n\n/**\n * Known hazardous truck load types. Should be used for trucks carrying hazardous materials.\n *\n * Use these values for routing in the USA:\n * * USHazmatClass1: Explosives\n * * USHazmatClass2: Compressed gas\n * * USHazmatClass3: Flammable liquids\n * * USHazmatClass4: Flammable solids\n * * USHazmatClass5: Oxidizers\n * * USHazmatClass6: Poisons\n * * USHazmatClass7: Radioactive\n * * USHazmatClass8: Corrosives\n * * USHazmatClass9: Miscellaneous\n *\n * Use these values for routing in all other countries:\n * * otherHazmatExplosive: Explosives\n * * otherHazmatGeneral: Miscellaneous\n * * otherHazmatHarmfulToWater: Harmful to water\n */\nexport type LoadType = (typeof loadTypes)[number];\n\n/**\n * Parameters for a vehicle which are related to restrictions (e.g. related to the cargo and purpose of the vehicle).\n */\nexport type VehicleRestrictions = {\n /**\n * Vehicle restrictions including load types, speed limits, ADR codes, and commercial usage.\n */\n restrictions?: {\n /**\n * Specifies types of cargo that may be classified as hazardous materials and are restricted from some roads.\n */\n loadTypes?: LoadType[];\n /**\n * Maximum speed of the vehicle in kilometers/hour.\n * * Must have a value in the range [0, 250].\n * * A value of 0 means that an appropriate value for the vehicle will be determined and applied during route planning.\n *\n * @default 0\n */\n maxSpeedKMH?: number;\n /**\n * Subjects the vehicle to ADR tunnel restrictions.\n * * Vehicles with code B are restricted from roads with ADR tunnel categories B, C, D, and E.\n * * Vehicles with code C are restricted from roads with ADR tunnel categories C, D, and E.\n * * Vehicles with code D are restricted from roads with ADR tunnel categories D and E.\n * * Vehicles with code E are restricted from roads with ADR tunnel category E.\n *\n * Notes:\n * If travelMode is pedestrian or bicycle, adrCode is not considered.\n * The adrCode and loadType parameters are independent; please provide both if applicable.\n * @see https://unece.org/about-adr\n */\n adrCode?: 'B' | 'C' | 'D' | 'E';\n /**\n *\n * The vehicle is used for commercial purposes (big letters on the side) and thus may not be allowed to drive on some roads.\n * This restriction is applicable only in some countries (e.g. US).\n *\n * @default false\n */\n commercial?: boolean;\n };\n};\n","import { currentTypes, plugTypes } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { loadTypes } from '../types/vehicleRestrictionParams';\n\n// Common validation schemas\nconst positiveNumber = z.number().check(z.positive());\nconst nonNegativeNumber = z.number().check(z.minimum(0));\nconst percentageNumber = z.number().check(z.minimum(0), z.maximum(100));\n\n// Common optional schemas\nconst optionalPositiveNumber = z.optional(positiveNumber);\nconst optionalNonNegativeNumber = z.optional(nonNegativeNumber);\nconst optionalNormalizedNumber = z.optional(z.number().check(z.minimum(0), z.maximum(1)));\n\n// Speed to consumption rate schema\nconst speedToConsumptionRateSchema = z.object({\n speedKMH: z.number(),\n consumptionUnitsPer100KM: z.number(),\n});\n\n// Efficiency schema for consumption models\nconst efficiencySchema = z.optional(\n z.object({\n acceleration: optionalNormalizedNumber,\n deceleration: optionalNormalizedNumber,\n uphill: optionalNormalizedNumber,\n downhill: optionalNormalizedNumber,\n }),\n);\n\n// Base consumption model schema\nconst baseConsumptionModelSchema = {\n efficiency: efficiencySchema,\n};\n\n// Consumption array validation\nconst speedConsumptionArray = z.array(speedToConsumptionRateSchema).check(z.minLength(1), z.maxLength(25));\n\n// Combustion consumption model schema\nconst combustionConsumptionModelSchema = z.object({\n ...baseConsumptionModelSchema,\n speedsToConsumptionsLiters: speedConsumptionArray,\n auxiliaryPowerInLitersPerHour: optionalNonNegativeNumber,\n fuelEnergyDensityInMJoulesPerLiter: z.optional(z.number().check(z.minimum(1))),\n});\n\n// Electric consumption model schema\nconst electricConsumptionModelSchema = z.object({\n ...baseConsumptionModelSchema,\n speedsToConsumptionsKWH: speedConsumptionArray,\n auxiliaryPowerInkW: optionalNonNegativeNumber,\n consumptionInKWHPerKMAltitudeGain: z.optional(z.number().check(z.maximum(500))),\n recuperationInKWHPerKMAltitudeLoss: optionalNonNegativeNumber,\n});\n\n// Charging connector schema\nconst chargingConnectorSchema = z.object({\n currentType: z.enum(currentTypes),\n plugTypes: z.array(z.enum(plugTypes)).check(z.minLength(1)),\n efficiency: optionalNormalizedNumber,\n baseLoadInkW: optionalNonNegativeNumber,\n maxPowerInkW: optionalNonNegativeNumber,\n maxVoltageInV: optionalNonNegativeNumber,\n maxCurrentInA: optionalNonNegativeNumber,\n voltageRange: z.optional(\n z.object({\n minVoltageInV: optionalNonNegativeNumber,\n maxVoltageInV: z.optional(z.number()),\n }),\n ),\n});\n\n// Battery curve schema\nconst batteryCurveSchema = z.object({\n stateOfChargeInkWh: nonNegativeNumber,\n maxPowerInkW: positiveNumber,\n});\n\n// Charging model schema\nconst chargingModelSchema = z.object({\n maxChargeKWH: positiveNumber,\n batteryCurve: z.optional(z.array(batteryCurveSchema).check(z.maxLength(20))),\n chargingConnectors: z.optional(z.array(chargingConnectorSchema).check(z.minLength(1))),\n chargingTimeOffsetInSec: optionalNonNegativeNumber,\n});\n\n// Engine model schemas\nconst combustionEngineModelSchema = z.object({ consumption: combustionConsumptionModelSchema });\nconst electricEngineModelSchema = z.object({\n consumption: electricConsumptionModelSchema,\n charging: z.optional(chargingModelSchema),\n});\n\n// Vehicle dimensions schema\nconst vehicleDimensionsSchema = z.optional(\n z.object({\n lengthMeters: optionalPositiveNumber,\n widthMeters: optionalPositiveNumber,\n heightMeters: optionalPositiveNumber,\n weightKG: optionalPositiveNumber,\n axleWeightKG: optionalPositiveNumber,\n }),\n);\n\n// Vehicle model schemas\nconst predefinedVehicleModelSchema = z.object({ variantId: z.string() });\nconst explicitVehicleModelSchema = z.object({\n dimensions: vehicleDimensionsSchema,\n engine: z.optional(z.union([combustionEngineModelSchema, electricEngineModelSchema])),\n});\nconst vehicleModelSchema = z.optional(z.union([predefinedVehicleModelSchema, explicitVehicleModelSchema]));\n\n// Vehicle state schemas\nconst genericVehicleStateSchema = z.object({\n heading: z.optional(z.number().check(z.minimum(0), z.maximum(360))),\n});\n\nconst combustionVehicleStateSchema = z.extend(\n genericVehicleStateSchema,\n z.object({ currentFuelInLiters: nonNegativeNumber }).shape,\n);\n\nconst electricVehicleStateByPercentageSchema = z.extend(\n genericVehicleStateSchema,\n z.object({ currentChargePCT: percentageNumber }).shape,\n);\n\nconst electricVehicleStateByKwhSchema = z.extend(\n genericVehicleStateSchema,\n z.object({ currentChargeInkWh: nonNegativeNumber }).shape,\n);\n\nconst electricVehicleStateSchema = z.union([electricVehicleStateByPercentageSchema, electricVehicleStateByKwhSchema]);\n\n// Charging preferences schemas\nconst chargingPreferencesPCTSchema = z.object({\n minChargeAtDestinationPCT: percentageNumber,\n minChargeAtChargingStopsPCT: z.number().check(z.minimum(0), z.maximum(50)),\n});\n\nconst chargingPreferencesKWHSchema = z.object({\n minChargeAtDestinationInkWh: nonNegativeNumber,\n minChargeAtChargingStopsInkWh: nonNegativeNumber,\n});\n\nconst chargingPreferencesSchema = z.union([chargingPreferencesPCTSchema, chargingPreferencesKWHSchema]);\nconst electricVehiclePreferencesSchema = z.object({\n chargingPreferences: z.optional(chargingPreferencesSchema),\n});\n\n// Vehicle restrictions schema\nconst vehicleRestrictionsSchema = z.optional(\n z.object({\n loadTypes: z.optional(z.array(z.enum(loadTypes))),\n maxSpeedKMH: z.optional(z.number().check(z.minimum(0), z.maximum(250))),\n adrCode: z.optional(z.enum(['B', 'C', 'D', 'E'])),\n commercial: z.optional(z.boolean()),\n }),\n);\n\n// Base vehicle parameters schema\nconst baseVehicleParamsSchema = {\n model: vehicleModelSchema,\n restrictions: vehicleRestrictionsSchema,\n};\n\n// Vehicle parameters schemas\nconst genericVehicleParamsSchema = z.object({\n ...baseVehicleParamsSchema,\n engineType: z.undefined(),\n state: z.optional(genericVehicleStateSchema),\n preferences: z.optional(z.object({})),\n});\n\nconst combustionVehicleParamsSchema = z.object({\n ...baseVehicleParamsSchema,\n engineType: z.literal('combustion'),\n state: z.optional(combustionVehicleStateSchema),\n preferences: z.optional(z.object({})),\n});\n\nconst electricVehicleParamsSchema = z.object({\n ...baseVehicleParamsSchema,\n engineType: z.literal('electric'),\n state: z.optional(electricVehicleStateSchema),\n preferences: z.optional(electricVehiclePreferencesSchema),\n});\n\n/**\n * @ignore\n */\nexport const vehicleParametersSchema = z.union([\n z.discriminatedUnion('engineType', [combustionVehicleParamsSchema, electricVehicleParamsSchema]),\n genericVehicleParamsSchema,\n]);\n","import { avoidableTypes } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { routeTypes } from '../types/commonRoutingParams';\nimport { vehicleParametersSchema } from './vehicleParamsSchema';\n\n/**\n * @ignore\n */\nexport const commonRoutingRequestSchema = z.partial(\n z.object({\n costModel: z.partial(\n z.object({\n avoid: z.array(z.enum(avoidableTypes)),\n traffic: z.optional(z.enum(['live', 'historical'])),\n routeType: z.optional(z.enum(routeTypes)),\n thrillingParams: z.optional(\n z.object({\n hilliness: z.optional(z.enum(['low', 'normal', 'high'])),\n windingness: z.optional(z.enum(['low', 'normal', 'high'])),\n }),\n ),\n }),\n ),\n travelMode: z.string(),\n vehicle: vehicleParametersSchema,\n when: z.object({\n option: z.enum(['departAt', 'arriveBy']),\n date: z.date(),\n }),\n }),\n);\n","import { z } from 'zod/v4-mini';\nimport { commonRoutingRequestSchema } from '../shared/schema/commonRoutingRequestSchema';\nimport { hasLngLatSchema } from '../shared/schema/geometriesSchema';\nimport { budgetTypes } from './types/reachableRangeParams';\n\n// import { SchemaRefinement } from \"../shared/types/validation\";\n\nconst reachableRangeRequestSchemaMandatory = z.object({\n origin: hasLngLatSchema,\n budget: z.object({\n type: z.enum(budgetTypes),\n value: z.number().check(z.minimum(0)),\n }),\n});\n\nconst reachableRangeRequestSchemaOptional = z.object({\n maxFerryLengthMeters: z.optional(z.number().check(z.minimum(0))),\n});\n\nconst reachableRangeRequestSchema = z.extend(\n commonRoutingRequestSchema,\n z.extend(reachableRangeRequestSchemaMandatory, reachableRangeRequestSchemaOptional.shape).shape,\n);\n\n// const departArriveRefinement: SchemaRefinement<ReachableRangeParams> = {\n// check: (data: ReachableRangeParams): boolean => (data.when?.option as string) != \"arriveBy\",\n// message: \"When calculating a reachable range, departure date-time can be specified, but not arrival date-time\"\n// };\n\n// const evRangeRefinement: SchemaRefinement<ReachableRangeParams> = {\n// check: (data: ReachableRangeParams): boolean =>\n// !(\n// (data.budget.type === \"remainingChargeCPT\" || data.budget.type === \"spentChargePCT\") &&\n// data.vehicle?.engine?.type != \"electric\"\n// ),\n// message: \"With an EV reachable range, the vehicle parameters must be set, with 'electric' engine type\"\n// };\n//\n// const fuelRangeRefinement: SchemaRefinement<ReachableRangeParams> = {\n// check: (data: ReachableRangeParams): boolean =>\n// !(data.budget.type === \"spentFuelLiters\" && data.vehicle?.engine?.type != \"combustion\"),\n// message: \"With a fuel reachable range, the vehicle parameters must be set, with 'combustion' engine type\"\n// };\n\n/**\n * @ignore\n */\nexport const reachableRangeRequestValidationConfig = {\n schema: reachableRangeRequestSchema,\n // refinements: [evRangeRefinement, fuelRangeRefinement, departArriveRefinement]\n};\n","import type { HasLngLat } from '@tomtom-org/maps-sdk/core';\nimport type { CommonRoutingParams, CommonServiceParams, DepartArriveParams } from '../../shared';\nimport type { ReachableRangeResponseAPI } from './apiResponseTypes';\n\nexport const budgetTypes = [\n 'timeMinutes',\n 'remainingChargeCPT',\n 'spentChargePCT',\n 'spentFuelLiters',\n 'distanceKM',\n] as const;\n\n/**\n * Type of budget constraint for reachable range calculation.\n *\n * @remarks\n * **Budget Types:**\n * - `timeMinutes`: Travel time in minutes (isochrone)\n * - `distanceKM`: Travel distance in kilometers (isodistance)\n * - `remainingChargeCPT`: Remaining battery charge in percentage (EV)\n * - `spentChargePCT`: Battery charge consumed in percentage (EV)\n * - `spentFuelLiters`: Fuel consumed in liters (combustion)\n *\n * **Common Use Cases:**\n * - Time: \"Where can I reach in 30 minutes?\"\n * - Distance: \"What's within 10 km?\"\n * - EV charge: \"How far can I go on 50% battery?\"\n * - Fuel: \"Range with 20 liters of fuel\"\n *\n * @example\n * ```typescript\n * const timeType: BudgetType = 'timeMinutes';\n * const distanceType: BudgetType = 'distanceKM';\n * const evType: BudgetType = 'remainingChargeCPT';\n * ```\n *\n * @group Reachable Range\n */\nexport type BudgetType = (typeof budgetTypes)[number];\n\n/**\n * Budget constraint for reachable range calculation.\n *\n * Defines the limit (time, distance, or fuel/charge) for calculating\n * how far you can travel from a starting point.\n *\n * @remarks\n * **Use Cases:**\n * - Service area visualization (30-min delivery zone)\n * - EV range anxiety mitigation (show reachable area)\n * - Emergency response coverage (10-min response time)\n * - Delivery zone planning\n * - Store location analysis\n *\n * @example\n * ```typescript\n * // 30-minute travel time\n * const timeBudget: ReachableRangeBudget = {\n * type: 'timeMinutes',\n * value: 30\n * };\n *\n * // 50 km distance\n * const distanceBudget: ReachableRangeBudget = {\n * type: 'distanceKM',\n * value: 50\n * };\n *\n * // 50% battery remaining\n * const evBudget: ReachableRangeBudget = {\n * type: 'remainingChargeCPT',\n * value: 50\n * };\n *\n * // 20 liters of fuel\n * const fuelBudget: ReachableRangeBudget = {\n * type: 'spentFuelLiters',\n * value: 20\n * };\n * ```\n *\n * @group Reachable Range\n */\nexport type ReachableRangeBudget = {\n /**\n * The type of budget, including units.\n *\n * @remarks\n * - `timeMinutes`: Minutes of travel time\n * - `distanceKM`: Kilometers of travel distance\n * - `remainingChargeCPT`: Battery percentage remaining\n * - `spentChargePCT`: Battery percentage consumed\n * - `spentFuelLiters`: Liters of fuel consumed\n */\n type: BudgetType;\n\n /**\n * The value of the budget based on the units mentioned in the type.\n *\n * @remarks\n * **Typical Values:**\n * - Time: 5-60 minutes\n * - Distance: 5-100 km\n * - Charge: 10-100 percentage\n * - Fuel: 5-50 liters\n *\n * @example\n * ```typescript\n * value: 30 // 30 minutes/km/percent/liters depending on type\n * value: 15.5 // Decimal values supported\n * ```\n */\n value: number;\n};\n\n/**\n * Parameters specific to reachable range calculation.\n *\n * @remarks\n * These parameters are combined with common routing parameters to calculate\n * the reachable area from a starting point.\n *\n * @group Reachable Range\n */\nexport type ReachableRangeOwnParams = {\n /**\n * Location from which the range calculation should start.\n *\n * @remarks\n * The center point from which reachability is calculated. Can be:\n * - An object with `lon` and `lat` properties\n * - An array `[longitude, latitude]`\n *\n * @example\n * ```typescript\n * // Object format\n * origin: { lon: 4.9, lat: 52.3 }\n *\n * // Array format\n * origin: [4.9, 52.3]\n * ```\n */\n origin: HasLngLat;\n\n /**\n * The budget for the reachable range calculation.\n *\n * @remarks\n * Consists of a type indicating whether it's about time, distance, or\n * fuel/charge and the units, plus its value.\n *\n * Determines the extent of the reachable area polygon.\n */\n budget: ReachableRangeBudget;\n\n /**\n * Maximum ferry length in meters to consider.\n *\n * @remarks\n * Ferries longer than this value will be avoided in the calculation.\n * Useful for excluding long ferry routes that might extend the range\n * unrealistically.\n *\n * @example\n * ```typescript\n * maxFerryLengthMeters: 5000 // Avoid ferries longer than 5 km\n * ```\n */\n maxFerryLengthMeters?: number;\n\n /**\n * Specifies when to depart.\n *\n * @remarks\n * If past dates are supplied or dates that are impossible to achieve,\n * it will default to departing now.\n *\n * **Traffic Impact:**\n * - Future departure times use predictive traffic\n * - Current time uses live traffic\n * - Historic times use historical patterns\n *\n * @default Depart now\n *\n * @example\n * ```typescript\n * when: { departAt: new Date('2025-10-20T08:00:00Z') }\n * when: { departAt: 'now' }\n * ```\n */\n when?: DepartArriveParams<'departAt'>;\n};\n\n/**\n * Complete parameters for calculating a reachable range.\n *\n * Combines common service parameters, routing parameters, and reachable range\n * specific options to compute an isochrone or isodistance polygon.\n *\n * @remarks\n * **What it Returns:**\n * A polygon representing the area reachable from the origin within the\n * specified budget (time, distance, or fuel/charge).\n *\n * **Use Cases:**\n * - Delivery zone visualization\n * - Service area mapping\n * - Emergency response coverage\n * - EV range display\n * - Store catchment areas\n * - Real estate search (30-min commute)\n *\n * **Traffic Consideration:**\n * Results vary based on departure time and traffic conditions. Use\n * appropriate `when` values for accurate predictions.\n *\n * @example\n * ```typescript\n * // 30-minute driving range\n * const params: ReachableRangeParams = {\n * key: 'your-api-key',\n * origin: [4.9, 52.3],\n * budget: {\n * type: 'timeMinutes',\n * value: 30\n * },\n * routeType: 'fastest',\n * traffic: 'live',\n * when: { departAt: 'now' }\n * };\n *\n * // 50 km distance range\n * const distanceParams: ReachableRangeParams = {\n * key: 'your-api-key',\n * origin: [4.9, 52.3],\n * budget: {\n * type: 'distanceKM',\n * value: 50\n * }\n * };\n *\n * // EV range with 50% battery\n * const evParams: ReachableRangeParams = {\n * key: 'your-api-key',\n * origin: [4.9, 52.3],\n * budget: {\n * type: 'remainingChargeCPT',\n * value: 50\n * },\n * vehicle: {\n * engineType: 'electric',\n * model: {\n * engine: {\n * consumption: {\n * charging: { maxChargeKWH: 100 }\n * }\n * }\n * },\n * state: {\n * currentChargePCT: 80\n * }\n * }\n * };\n *\n * // Avoid toll roads\n * const noTollParams: ReachableRangeParams = {\n * key: 'your-api-key',\n * origin: [4.9, 52.3],\n * budget: {\n * type: 'timeMinutes',\n * value: 45\n * },\n * avoid: ['tollRoads']\n * };\n * ```\n *\n * @group Reachable Range\n */\nexport type ReachableRangeParams = CommonServiceParams<URL, ReachableRangeResponseAPI> &\n CommonRoutingParams &\n ReachableRangeOwnParams;\n","import { isNil } from 'lodash-es';\nimport {\n CombustionEngineModel,\n ConsumptionModelEfficiency,\n ElectricConsumptionModel,\n ElectricEngineModel,\n SpeedToConsumptionRate,\n VehicleEngineModel,\n VehicleEngineType,\n} from '../types/vehicleEngineParams';\nimport { VehicleDimensions } from '../types/vehicleModel';\nimport { ElectricVehicleParams, VehicleParameters } from '../types/vehicleParams';\nimport { ChargingPreferencesKWH, ChargingPreferencesPCT } from '../types/vehiclePreferences';\nimport { ElectricVehicleStateKWH, ElectricVehicleStatePCT, VehicleState } from '../types/vehicleState';\nimport { appendByRepeatingParamName } from './requestBuildingUtils';\n\nconst appendConsumptionEfficiency = (urlParams: URLSearchParams, efficiency?: ConsumptionModelEfficiency): void => {\n if (efficiency) {\n !isNil(efficiency.acceleration) && urlParams.append('accelerationEfficiency', String(efficiency.acceleration));\n !isNil(efficiency.deceleration) && urlParams.append('decelerationEfficiency', String(efficiency.deceleration));\n !isNil(efficiency.uphill) && urlParams.append('uphillEfficiency', String(efficiency.uphill));\n !isNil(efficiency.downhill) && urlParams.append('downhillEfficiency', String(efficiency.downhill));\n }\n};\n\n// e.g. 50,6.3:130,11.5\nconst buildSpeedToConsumptionString = (speedsToConsumptions: SpeedToConsumptionRate[]): string =>\n speedsToConsumptions\n .map((speedToConsumption) => `${speedToConsumption.speedKMH},${speedToConsumption.consumptionUnitsPer100KM}`)\n .join(':');\n\nconst appendCombustionEngine = (urlParams: URLSearchParams, engine: CombustionEngineModel): void => {\n // (no need to append combustion vehicleEngineType since it's the default)\n const consumptionModel = engine.consumption;\n consumptionModel.speedsToConsumptionsLiters &&\n urlParams.append(\n 'constantSpeedConsumptionInLitersPerHundredkm',\n buildSpeedToConsumptionString(consumptionModel.speedsToConsumptionsLiters),\n );\n !isNil(consumptionModel.auxiliaryPowerInLitersPerHour) &&\n urlParams.append('auxiliaryPowerInLitersPerHour', String(consumptionModel.auxiliaryPowerInLitersPerHour));\n !isNil(consumptionModel.fuelEnergyDensityInMJoulesPerLiter) &&\n urlParams.append(\n 'fuelEnergyDensityInMJoulesPerLiter',\n String(consumptionModel.fuelEnergyDensityInMJoulesPerLiter),\n );\n};\n\nconst appendElectricConsumptionModel = (urlParams: URLSearchParams, model: ElectricConsumptionModel): void => {\n model.speedsToConsumptionsKWH &&\n urlParams.append(\n 'constantSpeedConsumptionInkWhPerHundredkm',\n buildSpeedToConsumptionString(model.speedsToConsumptionsKWH),\n );\n !isNil(model.auxiliaryPowerInkW) && urlParams.append('auxiliaryPowerInkW', String(model.auxiliaryPowerInkW));\n !isNil(model.consumptionInKWHPerKMAltitudeGain) &&\n urlParams.append('consumptionInkWhPerkmAltitudeGain', String(model.consumptionInKWHPerKMAltitudeGain));\n !isNil(model.recuperationInKWHPerKMAltitudeLoss) &&\n urlParams.append('recuperationInkWhPerkmAltitudeLoss', String(model.recuperationInKWHPerKMAltitudeLoss));\n};\n\nconst appendChargingModel = (urlParams: URLSearchParams, engine: ElectricEngineModel): void => {\n const chargingModel = engine.charging;\n if (chargingModel?.maxChargeKWH) {\n urlParams.append('maxChargeInkWh', String(chargingModel.maxChargeKWH));\n }\n // (the rest of the charging model goes as POST data)\n};\n\nconst appendVehicleState = (urlParams: URLSearchParams, vehicleParams: VehicleParameters): void => {\n if (!vehicleParams.state) {\n return;\n }\n\n // Generic state props:\n vehicleParams.state.heading && urlParams.append('vehicleHeading', String(vehicleParams.state.heading));\n\n if (!('engineType' in vehicleParams)) {\n // Generic vehicle, no engine-specific state to append:\n return;\n }\n\n // Engine-specific state props:\n if (vehicleParams.engineType === 'combustion') {\n const combustionState: VehicleState<'combustion'> = vehicleParams.state;\n combustionState.currentFuelInLiters &&\n urlParams.append('currentFuelInLiters', String(combustionState.currentFuelInLiters));\n } else if (vehicleParams.engineType === 'electric') {\n const electricState: VehicleState<'electric'> = vehicleParams.state;\n const kwhElectricState = electricState as ElectricVehicleStateKWH;\n const pctElectricState = electricState as ElectricVehicleStatePCT;\n\n if (kwhElectricState.currentChargeInkWh) {\n urlParams.append('currentChargeInkWh', String(kwhElectricState.currentChargeInkWh));\n } else if (\n pctElectricState.currentChargePCT &&\n vehicleParams.model &&\n 'engine' in vehicleParams.model &&\n vehicleParams.model.engine\n ) {\n const engine = vehicleParams.model.engine;\n const maxChargeKWH = engine.charging?.maxChargeKWH;\n if (maxChargeKWH) {\n // currentChargePCT needs maxChargeKWH to be converted to kWh\n urlParams.append(\n 'currentChargeInkWh',\n String((maxChargeKWH * pctElectricState.currentChargePCT) / 100),\n );\n }\n }\n }\n};\n\nconst appendVehiclePreferences = (urlParams: URLSearchParams, vehicleParams: VehicleParameters): void => {\n if (!vehicleParams.preferences) {\n return;\n }\n\n if ('engineType' in vehicleParams && vehicleParams.engineType === 'electric') {\n const preferences = vehicleParams.preferences;\n if (preferences.chargingPreferences) {\n const chargingPrefs = preferences.chargingPreferences;\n const kwhChargingPrefs = chargingPrefs as ChargingPreferencesKWH;\n const pctChargingPrefs = chargingPrefs as ChargingPreferencesPCT;\n\n // Check if absolute kWh values are available and use them directly\n if (kwhChargingPrefs.minChargeAtChargingStopsInkWh || kwhChargingPrefs.minChargeAtDestinationInkWh) {\n urlParams.append('minChargeAtDestinationInkWh', String(kwhChargingPrefs.minChargeAtDestinationInkWh));\n urlParams.append(\n 'minChargeAtChargingStopsInkWh',\n String(kwhChargingPrefs.minChargeAtChargingStopsInkWh),\n );\n } else if (\n (pctChargingPrefs.minChargeAtChargingStopsPCT || pctChargingPrefs.minChargeAtDestinationPCT) &&\n vehicleParams.model &&\n 'engine' in vehicleParams.model &&\n vehicleParams.model.engine\n ) {\n // Considering percentage values if absolute values not available and maxChargeKWH exists\n const engine = vehicleParams.model.engine;\n const maxChargeKWH = engine.charging?.maxChargeKWH;\n if (maxChargeKWH) {\n urlParams.append(\n 'minChargeAtDestinationInkWh',\n String((maxChargeKWH * pctChargingPrefs.minChargeAtDestinationPCT) / 100),\n );\n urlParams.append(\n 'minChargeAtChargingStopsInkWh',\n String((maxChargeKWH * pctChargingPrefs.minChargeAtChargingStopsPCT) / 100),\n );\n }\n }\n }\n }\n};\n\nconst appendVehicleDimensions = (urlParams: URLSearchParams, dimensions?: VehicleDimensions): void => {\n if (dimensions) {\n // (defaults are 0):\n dimensions.lengthMeters && urlParams.append('vehicleLength', String(dimensions.lengthMeters));\n dimensions.heightMeters && urlParams.append('vehicleHeight', String(dimensions.heightMeters));\n dimensions.widthMeters && urlParams.append('vehicleWidth', String(dimensions.widthMeters));\n dimensions.weightKG && urlParams.append('vehicleWeight', String(dimensions.weightKG));\n dimensions.axleWeightKG && urlParams.append('vehicleAxleWeight', String(dimensions.axleWeightKG));\n }\n};\n\nconst appendVehicleRestrictions = (urlParams: URLSearchParams, vehicleParams: VehicleParameters): void => {\n // Vehicle restrictions from VehicleRestrictions intersection:\n const restrictions = vehicleParams.restrictions;\n if (!restrictions) {\n return;\n }\n\n appendByRepeatingParamName(urlParams, 'vehicleLoadType', restrictions.loadTypes);\n restrictions.adrCode && urlParams.append('vehicleAdrTunnelRestrictionCode', restrictions.adrCode);\n restrictions.commercial && urlParams.append('vehicleCommercial', String(restrictions.commercial));\n // (default is 0):\n restrictions.maxSpeedKMH && urlParams.append('vehicleMaxSpeed', String(restrictions.maxSpeedKMH));\n};\n\nconst appendVehicleEngineModel = (\n urlParams: URLSearchParams,\n engineType: VehicleEngineType,\n engine: VehicleEngineModel<VehicleEngineType>,\n): void => {\n // (efficiency params have the same names between engine types)\n appendConsumptionEfficiency(urlParams, engine.consumption.efficiency);\n\n if (engineType === 'electric') {\n appendElectricConsumptionModel(urlParams, (engine as ElectricEngineModel).consumption);\n appendChargingModel(urlParams, engine as ElectricEngineModel);\n } else {\n // (no need to append combustion vehicleEngineType since it's the default)\n appendCombustionEngine(urlParams, engine as CombustionEngineModel);\n }\n};\n\nconst appendVehicleModel = (urlParams: URLSearchParams, vehicleParams: VehicleParameters): void => {\n if (!vehicleParams.model) {\n return;\n }\n\n // Handle predefined vehicle model\n if ('variantId' in vehicleParams.model) {\n urlParams.append('vehicleModelId', vehicleParams.model.variantId);\n } else {\n // Handle explicit vehicle model (dimensions and engine)\n appendVehicleDimensions(urlParams, vehicleParams.model.dimensions);\n\n if (vehicleParams.model.engine) {\n appendVehicleEngineModel(\n urlParams,\n 'engineType' in vehicleParams ? vehicleParams.engineType : undefined,\n vehicleParams.model.engine,\n );\n }\n }\n};\n\n/**\n * Appends vehicle parameters to the URL search params for routing requests.\n * @param urlParams - The URLSearchParams to append to\n * @param vehicleParams - The vehicle parameters to append\n */\nexport const appendVehicleParams = (urlParams: URLSearchParams, vehicleParams?: VehicleParameters): void => {\n if (!vehicleParams) {\n return;\n }\n\n // the engine type defaults to combustion, thus we only bother to append it if it's electric:\n if ((vehicleParams as ElectricVehicleParams).engineType === 'electric') {\n urlParams.append('vehicleEngineType', 'electric');\n }\n\n appendVehicleModel(urlParams, vehicleParams);\n appendVehicleState(urlParams, vehicleParams);\n appendVehiclePreferences(urlParams, vehicleParams);\n appendVehicleRestrictions(urlParams, vehicleParams);\n};\n","import type { CommonRoutingParams, DepartArriveParams } from '../types/commonRoutingParams';\nimport { appendByRepeatingParamName, appendOptionalParam } from './requestBuildingUtils';\nimport { appendVehicleParams } from './routingVehicleParamsBuilder';\n\nconst appendWhenParams = (urlParams: URLSearchParams, when?: DepartArriveParams): void => {\n if (when?.date) {\n const formattedDate = when.date.toISOString();\n if (when.option === 'departAt') {\n urlParams.append('departAt', formattedDate);\n } else if (when.option === 'arriveBy') {\n urlParams.append('arriveAt', formattedDate);\n }\n }\n};\n\n// TODO: not supported yet in Orbis\n// const appendThrillingParams = (urlParams: URLSearchParams, thrillingParams?: ThrillingParams): void => {\n// if (thrillingParams) {\n// thrillingParams.hilliness && urlParams.append('hilliness', thrillingParams.hilliness);\n// thrillingParams.windingness && urlParams.append('windingness', thrillingParams.windingness);\n// }\n// };\n\n/**\n * @ignore\n */\nexport const appendCommonRoutingParams = (urlParams: URLSearchParams, params: CommonRoutingParams): void => {\n const costModel = params.costModel;\n appendByRepeatingParamName(urlParams, 'avoid', costModel?.avoid);\n appendOptionalParam(urlParams, 'traffic', costModel?.traffic);\n appendWhenParams(urlParams, params.when);\n appendOptionalParam(urlParams, 'routeType', costModel?.routeType);\n // TODO not supported in Orbis\n // if (costModel?.routeType === 'thrilling') {\n // appendThrillingParams(urlParams, costModel.thrillingParams);\n // }\n appendOptionalParam(urlParams, 'travelMode', params.travelMode);\n appendVehicleParams(urlParams, params.vehicle);\n};\n","import { getPositionStrict } from '@tomtom-org/maps-sdk/core';\nimport { positionToCSVLatLon } from '../shared/geometry';\nimport { appendCommonRoutingParams } from '../shared/request/commonRoutingRequestBuilder';\nimport { appendCommonParams, appendOptionalParam } from '../shared/request/requestBuildingUtils';\nimport type { ReachableRangeParams } from './types/reachableRangeParams';\n\n// import { ElectricVehicleEngine } from \"../shared/types/vehicleEngineParams\";\n\nconst buildUrlBasePath = (params: ReachableRangeParams): string =>\n params.customServiceBaseURL ||\n `${params.commonBaseURL}/routing/1/calculateReachableRange/${positionToCSVLatLon(\n getPositionStrict(params.origin),\n )}/json`;\n\n// const toKWH = (chargePCT: number, engine: ElectricVehicleEngine): number =>\n// (engine.model.charging?.maxChargeKWH as number) * (chargePCT / 100);\n\n// const toRemainingKWH = (remainingChargeCPT: number, engine: ElectricVehicleEngine): number => {\n// const maxChargeKWH = engine.model.charging?.maxChargeKWH as number;\n// const currentChargeKWH = maxChargeKWH * (engine.currentChargePCT / 100);\n// return currentChargeKWH - maxChargeKWH * (remainingChargeCPT / 100);\n// };\n\n// const appendBudget = (/*urlParams: URLSearchParams, params: ReachableRangeParams*/): void => {\n// const budget = params.budget;\n// switch (budget.type) {\n// case \"timeMinutes\":\n// urlParams.append(\"timeBudgetInSec\", (budget.value * 60).toString());\n// break;\n// case \"remainingChargeCPT\":\n// urlParams.append(\n// \"energyBudgetInkWh\",\n// toRemainingKWH(budget.value, params.vehicle?.engine as ElectricVehicleEngine).toString()\n// );\n// break;\n// case \"spentChargePCT\":\n// urlParams.append(\n// \"energyBudgetInkWh\",\n// toKWH(budget.value, params.vehicle?.engine as ElectricVehicleEngine).toString()\n// );\n// break;\n// case \"spentFuelLiters\":\n// urlParams.append(\"fuelBudgetInLiters\", budget.value.toString());\n// break;\n// case \"distanceKM\":\n// urlParams.append(\"distanceBudgetInMeters\", (budget.value * 1000).toString());\n// break;\n// default:\n// // Unsupported by SDK but will attempt to send it anyway (most likely will fail API-side)\n// urlParams.append(budget.type, budget.value.toString());\n// }\n// };\n\n/**\n *\n * @param params\n * @returns\n */\nexport const buildReachableRangeRequest = (params: ReachableRangeParams): URL => {\n const url = new URL(buildUrlBasePath(params));\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n appendCommonRoutingParams(urlParams, params);\n // appendBudget(urlParams, params);\n appendOptionalParam(urlParams, 'maxFerryLengthInMeters', params.maxFerryLengthMeters);\n return url;\n};\n","import type { BBox, PolygonFeature } from '@tomtom-org/maps-sdk/core';\nimport { bboxFromGeoJSON } from '@tomtom-org/maps-sdk/core';\nimport type { Polygon } from 'geojson';\nimport type { ReachableRangeResponseAPI } from './types/apiResponseTypes';\nimport type { ReachableRangeParams } from './types/reachableRangeParams';\n\n/**\n *\n * @param apiResponse\n * @param params\n */\nexport const parseReachableRangeResponse = (\n apiResponse: ReachableRangeResponseAPI,\n params: ReachableRangeParams,\n): PolygonFeature<ReachableRangeParams> => {\n const geometry: Polygon = {\n type: 'Polygon',\n coordinates: [apiResponse.reachableRange.boundary.map((point) => [point.longitude, point.latitude])],\n };\n const bbox = bboxFromGeoJSON(geometry) as BBox; // the geometry should always have a bbox\n return { type: 'Feature', geometry, bbox, properties: params };\n};\n","import type { ReachableRangeTemplate } from './reachableRangeTemplate';\nimport { reachableRangeTemplate } from './reachableRangeTemplate';\nimport { buildReachableRangeRequest } from './requestBuilder';\nimport { parseReachableRangeResponse } from './responseParser';\n\nconst customize: {\n buildReachableRangeRequest: typeof buildReachableRangeRequest;\n parseReachableRangeResponse: typeof parseReachableRangeResponse;\n reachableRangeTemplate: ReachableRangeTemplate;\n} = {\n buildReachableRangeRequest,\n parseReachableRangeResponse,\n reachableRangeTemplate,\n};\nexport default customize;\n","import type { PolygonFeature } from '@tomtom-org/maps-sdk/core';\nimport type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { reachableRangeRequestValidationConfig } from './reachableRangeRequestSchema';\nimport { buildReachableRangeRequest } from './requestBuilder';\nimport { parseReachableRangeResponse } from './responseParser';\nimport type { ReachableRangeResponseAPI } from './types/apiResponseTypes';\nimport type { ReachableRangeParams } from './types/reachableRangeParams';\n\nexport type ReachableRangeTemplate = ServiceTemplate<\n ReachableRangeParams,\n URL,\n ReachableRangeResponseAPI,\n PolygonFeature<ReachableRangeParams>\n>;\n\nexport const reachableRangeTemplate: ReachableRangeTemplate = {\n requestValidation: reachableRangeRequestValidationConfig,\n buildRequest: buildReachableRangeRequest,\n sendRequest: get,\n parseResponse: parseReachableRangeResponse,\n};\n","import { getPositionStrict } from '@tomtom-org/maps-sdk/core';\nimport { isNil } from 'lodash-es';\nimport type { CommonServiceParams } from '../shared';\nimport { arrayToCSV } from '../shared/arrays';\nimport { PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendCommonParams } from '../shared/request/requestBuildingUtils';\nimport type { ReverseGeocodingParams } from './types/reverseGeocodingParams';\n\nconst buildUrlBasePath = (params: CommonServiceParams): string =>\n params.customServiceBaseURL || `${params.commonBaseURL}${PLACES_URL_PATH}/reverseGeocode`;\n\n/**\n * Default function for building a reverse geocoding request from {@link ReverseGeocodingParams}\n * @param params The reverse geocoding parameters, with global configuration already merged into them.\n */\nexport const buildRevGeoRequest = (params: ReverseGeocodingParams): URL => {\n const lngLat = getPositionStrict(params.position);\n const url = new URL(`${buildUrlBasePath(params)}/${lngLat[1]},${lngLat[0]}.json`);\n const urlParams = url.searchParams;\n appendCommonParams(urlParams, params);\n\n // rev-geo specific parameters:\n params.allowFreeformNewline && urlParams.append('allowFreeformNewline', String(params.allowFreeformNewline));\n params.geographyType && urlParams.append('entityType', arrayToCSV(params.geographyType));\n !isNil(params.heading) && urlParams.append('heading', String(params.heading));\n params.mapcodes && urlParams.append('mapcodes', arrayToCSV(params.mapcodes));\n params.number && urlParams.append('number', params.number);\n !isNil(params.radiusMeters) && urlParams.append('radius', String(params.radiusMeters));\n params.returnSpeedLimit && urlParams.append('returnSpeedLimit', String(params.returnSpeedLimit));\n params.returnRoadUse && urlParams.append('returnRoadUse', String(params.returnRoadUse));\n params.roadUses && urlParams.append('roadUse', JSON.stringify(params.roadUses));\n return url;\n};\n","import { generateId, getPositionStrict, toPointGeometry } from '@tomtom-org/maps-sdk/core';\nimport { apiToGeoJSONBBox, csvLatLngToPosition } from '../shared/geometry';\nimport type { ReverseGeocodingResponse } from './reverseGeocoding';\nimport type { ReverseGeocodingResponseAPI } from './types/apiTypes';\nimport type { ReverseGeocodingParams } from './types/reverseGeocodingParams';\n\n/**\n * Default method for parsing reverse geocoding request from {@link ReverseGeocodingResponse}\n * @param params\n * @param apiResponse\n */\nexport const parseRevGeoResponse = (\n apiResponse: ReverseGeocodingResponseAPI,\n params: ReverseGeocodingParams,\n): ReverseGeocodingResponse => {\n const firstApiResult = apiResponse.addresses[0];\n const { boundingBox, sideOfStreet, offsetPosition, ...address } = firstApiResult?.address || {};\n return {\n type: 'Feature',\n // The requested coordinates are the primary ones, and set as the GeoJSON Feature geometry:\n geometry: toPointGeometry(getPositionStrict(params.position)),\n ...(boundingBox && { bbox: apiToGeoJSONBBox(boundingBox) }),\n id: generateId(),\n ...(firstApiResult && {\n properties: {\n type: firstApiResult?.entityType ? 'Geography' : !address.streetNumber ? 'Street' : 'Point Address',\n address,\n ...(firstApiResult.dataSources && { dataSources: firstApiResult.dataSources }),\n ...(firstApiResult.mapcodes && { mapcodes: firstApiResult.mapcodes }),\n ...(sideOfStreet && { sideOfStreet }),\n ...(offsetPosition && { offsetPosition: csvLatLngToPosition(offsetPosition) }),\n // The reverse geocoded coordinates are secondary and set in the GeoJSON properties:\n originalPosition: csvLatLngToPosition(firstApiResult.position),\n },\n }),\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { buildRevGeoRequest } from './requestBuilder';\nimport { parseRevGeoResponse } from './responseParser';\nimport type { ReverseGeocodingResponse } from './reverseGeocoding';\nimport { revGeocodeRequestSchema } from './revGeocodeRequestSchema';\nimport type { ReverseGeocodingResponseAPI } from './types/apiTypes';\nimport type { ReverseGeocodingParams } from './types/reverseGeocodingParams';\n\n/**\n * Reverse Geocoding service template type.\n * @ignore\n */\nexport type ReverseGeocodingTemplate = ServiceTemplate<\n ReverseGeocodingParams,\n URL,\n ReverseGeocodingResponseAPI,\n ReverseGeocodingResponse\n>;\n\n/**\n * Reverse Geocoding service template main implementation.\n * @ignore\n */\nexport const reverseGeocodingTemplate: ReverseGeocodingTemplate = {\n requestValidation: { schema: revGeocodeRequestSchema },\n buildRequest: buildRevGeoRequest,\n sendRequest: get,\n parseResponse: parseRevGeoResponse,\n};\n","import { views } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { hasLngLatSchema } from '../shared/schema/geometriesSchema';\n\nconst revGeocodeRequestMandatory = z.object({\n position: hasLngLatSchema,\n});\n\nconst revGeocodeRequestOptional = z.partial(\n z.object({\n allowFreeformNewline: z.boolean(),\n geographyType: z.array(z.string()),\n heading: z.number().check(z.minimum(-360), z.maximum(360)),\n mapcodes: z.array(z.string()),\n number: z.string(),\n radiusMeters: z.number(),\n returnMatchType: z.boolean(),\n returnRoadUse: z.boolean(),\n returnSpeedLimit: z.boolean(),\n roadUses: z.array(z.string()),\n view: z.enum(views),\n }),\n);\n\n/**\n * @ignore\n */\nexport const revGeocodeRequestSchema = z.extend(revGeocodeRequestMandatory, revGeocodeRequestOptional.shape);\n","import { buildRevGeoRequest } from './requestBuilder';\nimport { parseRevGeoResponse } from './responseParser';\nimport type { ReverseGeocodingTemplate } from './reverseGeocodingTemplate';\nimport { reverseGeocodingTemplate } from './reverseGeocodingTemplate';\n\nconst customize: {\n buildRevGeoRequest: typeof buildRevGeoRequest;\n parseRevGeoResponse: typeof parseRevGeoResponse;\n reverseGeocodingTemplate: ReverseGeocodingTemplate;\n} = {\n buildRevGeoRequest,\n parseRevGeoResponse,\n reverseGeocodingTemplate,\n};\nexport default customize;\n","import type { SectionType } from '@tomtom-org/maps-sdk/core';\nimport { getRoutePlanningLocationType, inputSectionTypesWithGuidance } from '@tomtom-org/maps-sdk/core';\nimport { z } from 'zod/v4-mini';\nimport { commonRoutingRequestSchema } from '../shared/schema/commonRoutingRequestSchema';\nimport {\n featureSchema,\n geometrySchema,\n hasLngLatSchema,\n lineStringCoordsSchema,\n} from '../shared/schema/geometriesSchema';\nimport type { SchemaRefinement } from '../shared/types/validation';\nimport type { CalculateRouteParams } from './types/calculateRouteParams';\n\nconst waypointLikeSchema = z.union([hasLngLatSchema, geometrySchema]);\nconst pathLikeSchema = z.union([lineStringCoordsSchema, featureSchema]);\n\nconst mandatorySchema = z.object({\n locations: z.array(z.union([waypointLikeSchema, pathLikeSchema])).check(z.minLength(1)), // see calculateRouteLocationsRefinement\n});\n\nconst optionalSchema = z.partial(\n z.object({\n computeAdditionalTravelTimeFor: z.enum(['none', 'all']),\n vehicleHeading: z.number().check(z.minimum(0), z.maximum(359.5)),\n // TODO add proper instructionsInfo check\n // instructionsType: z.enum(instructionsTypes),\n maxAlternatives: z.number().check(z.minimum(0), z.maximum(5)),\n sectionTypes: z.array(z.enum(inputSectionTypesWithGuidance as [SectionType, ...SectionType[]])),\n }),\n);\n\nconst schema = z.extend(commonRoutingRequestSchema, z.extend(mandatorySchema, optionalSchema.shape).shape);\n\nconst locationsRefinement: SchemaRefinement<CalculateRouteParams> = {\n check: (data: CalculateRouteParams): boolean => {\n const routePlanningLocationTypes = data.locations.map(getRoutePlanningLocationType);\n if (!routePlanningLocationTypes.includes('path')) {\n return data.locations.length >= 2;\n }\n return true; // see calculateRouteRequestSchemaMandatory\n },\n message:\n 'When passing waypoints only: at least 2 must be defined. ' +\n 'If passing also paths, at least one path must be defined',\n};\n\n/**\n * @ignore\n */\nexport const routeRequestValidationConfig = { schema, refinements: [locationsRefinement] };\n","import type {\n GetPositionEntryPointOption,\n PathLike,\n RoutePlanningLocation,\n RoutePlanningLocationType,\n Waypoint,\n WaypointLike,\n WaypointProps,\n} from '@tomtom-org/maps-sdk/core';\nimport {\n getPositionStrict,\n getRoutePlanningLocationType,\n inputSectionTypes,\n inputSectionTypesWithGuidance,\n} from '@tomtom-org/maps-sdk/core';\nimport type { Position } from 'geojson';\nimport { isNil, omit } from 'lodash-es';\nimport type { FetchInput } from '../shared';\nimport { VehiclePreferences } from '../shared';\nimport { positionToCSVLatLon } from '../shared/geometry';\nimport { appendCommonRoutingParams } from '../shared/request/commonRoutingRequestBuilder';\nimport {\n appendByRepeatingParamName,\n appendCommonParams,\n appendOptionalParam,\n} from '../shared/request/requestBuildingUtils';\nimport { ExplicitVehicleModel } from '../shared/types/vehicleModel';\nimport type { CalculateRoutePOSTDataAPI, PointWaypointAPI } from './types/apiRequestTypes';\nimport type { LatitudeLongitudePointAPI } from './types/apiResponseTypes';\nimport type { CalculateRouteParams, GuidanceParams, InputSectionTypes } from './types/calculateRouteParams';\n\n// Are these params about Long Distance EV Routing:\nconst getChargingPreferences = (params: CalculateRouteParams) =>\n (params.vehicle?.preferences as VehiclePreferences<'electric'>)?.chargingPreferences;\n\nconst buildUrlBasePath = (params: CalculateRouteParams): string =>\n params.customServiceBaseURL ||\n `${params.commonBaseURL}/maps/orbis/routing/${getChargingPreferences(params) ? 'calculateLongDistanceEVRoute' : 'calculateRoute'}`;\n\nconst getWaypointProps = (waypointInput: WaypointLike): WaypointProps | null =>\n (waypointInput as Waypoint).properties || null;\n\nconst defaultUseEntryPointOption: GetPositionEntryPointOption = 'main-when-available';\n\nconst buildLocationsStringFromWaypoints = (\n waypointInputs: WaypointLike[],\n useEntryPoint: GetPositionEntryPointOption,\n): string =>\n waypointInputs\n .map((waypointInput: WaypointLike) => {\n const lngLatString = positionToCSVLatLon(getPositionStrict(waypointInput, { useEntryPoint }));\n const radius = getWaypointProps(waypointInput)?.radiusMeters;\n return radius ? `circle(${lngLatString},${radius})` : lngLatString;\n })\n .join(':');\n\nconst getPositionsFromPath = (pathLike: PathLike): Position[] => {\n if (Array.isArray(pathLike)) {\n return pathLike;\n }\n return pathLike.geometry.coordinates;\n};\n\nconst getFirstAndLastPoints = (\n locations: RoutePlanningLocation[],\n types: RoutePlanningLocationType[],\n useEntryPoint: GetPositionEntryPointOption,\n): [Position, Position] => {\n let firstPoint;\n const firstRoutePlanningLocation = locations[0];\n if (types[0] === 'path') {\n const positions = getPositionsFromPath(firstRoutePlanningLocation as PathLike);\n firstPoint = positions[0];\n } else {\n firstPoint = getPositionStrict(firstRoutePlanningLocation as WaypointLike, { useEntryPoint });\n }\n\n const lastRoutePlanningLocation = locations[locations.length - 1];\n let lastPoint;\n if (types[types.length - 1] === 'path') {\n const positions = getPositionsFromPath(lastRoutePlanningLocation as PathLike);\n lastPoint = positions[positions.length - 1];\n } else {\n lastPoint = getPositionStrict(lastRoutePlanningLocation as WaypointLike, { useEntryPoint });\n }\n\n return [firstPoint, lastPoint];\n};\n\nconst buildLocationsString = (\n locations: RoutePlanningLocation[],\n routePlanningLocationTypes: RoutePlanningLocationType[],\n useEntryPoint: GetPositionEntryPointOption,\n): string =>\n buildLocationsStringFromWaypoints(\n routePlanningLocationTypes.includes('path')\n ? getFirstAndLastPoints(locations, routePlanningLocationTypes, useEntryPoint)\n : (locations as WaypointLike[]),\n useEntryPoint,\n );\n\nconst appendSectionTypes = (\n urlParams: URLSearchParams,\n sectionTypes: InputSectionTypes | undefined,\n instructionsInclude: boolean,\n): void => {\n const effectiveSectionTypes = (\n sectionTypes ?? (instructionsInclude ? inputSectionTypesWithGuidance : inputSectionTypes)\n ).map((sectionType) => (sectionType === 'vehicleRestricted' ? 'travelMode' : sectionType));\n appendByRepeatingParamName(urlParams, 'sectionType', effectiveSectionTypes);\n};\n\nconst appendGuidanceParams = (urlParams: URLSearchParams, params?: CalculateRouteParams): void => {\n if (params?.guidance) {\n const guidance: GuidanceParams = params.guidance;\n urlParams.append('instructionsType', guidance.type);\n urlParams.append('guidanceVersion', String(guidance.version ?? 2));\n urlParams.append('instructionPhonetics', guidance.phonetics ?? 'IPA');\n urlParams.append('instructionRoadShieldReferences', guidance.roadShieldReferences ?? 'all');\n urlParams.append('language', params.language ?? 'en-US');\n }\n};\n\nconst toLatLngPointApi = (position: Position): LatitudeLongitudePointAPI => ({\n latitude: position[1],\n longitude: position[0],\n});\n\n// appends a path into the given post data, adding to supportingPoints and pointWaypoints as applicable\nconst appendPathPostData = (\n pathRoutePlanningLocation: PathLike,\n routePlanningLocationIndex: number,\n locations: RoutePlanningLocation[],\n supportingPoints: LatitudeLongitudePointAPI[],\n pointWaypoints: PointWaypointAPI[],\n): void => {\n // first, we add the supportingPoints from the path coordinates:\n const supportingPointsLengthBeforePath = supportingPoints.length;\n for (const position of getPositionsFromPath(pathRoutePlanningLocation)) {\n supportingPoints.push(toLatLngPointApi(position));\n }\n // then we check if it's a route, and if so we add waypoints from its legs as applicable\n // (a route leg is the portion of the path between 2 waypoints)\n if (!Array.isArray(pathRoutePlanningLocation)) {\n const legs = pathRoutePlanningLocation.properties.sections.leg;\n // (We assume all routes have at least 1 leg)\n legs.forEach((leg, legIndex) => {\n // If the route is the first geo-input, we skip adding the leg...\n // ... since it's expected to be already in the origin \"location\"\n if (routePlanningLocationIndex > 0 || legIndex > 0) {\n pointWaypoints.push({\n supportingPointIndex: supportingPointsLengthBeforePath + (leg.startPointIndex as number),\n waypointSourceType: 'USER_DEFINED',\n });\n }\n });\n // If the route isn't the last geo-input, we add its destination as pointWaypoint too:\n // (If it's the last geo-input, we skip adding the leg...\n // ... since it's expected to be already in the destination \"location\")\n if (routePlanningLocationIndex < locations.length - 1) {\n pointWaypoints.push({\n supportingPointIndex:\n supportingPointsLengthBeforePath + pathRoutePlanningLocation.geometry.coordinates.length - 1,\n waypointSourceType: 'USER_DEFINED',\n });\n }\n }\n};\n\n// appends a waypoint into the given post data, adding to supportingPoints and pointWaypoints as applicable\nconst appendWaypointPostData = (\n waypoint: WaypointLike,\n routePlanningLocationIndex: number,\n locations: RoutePlanningLocation[],\n supportingPoints: LatitudeLongitudePointAPI[],\n pointWaypoints: PointWaypointAPI[],\n useEntryPoint: GetPositionEntryPointOption,\n) => {\n // individual points are treated like POST waypoints\n supportingPoints.push(toLatLngPointApi(getPositionStrict(waypoint, { useEntryPoint })));\n // for origin and destination we do not add pointWaypoints, since they end up as the URL \"locations\":\n if (routePlanningLocationIndex > 0 && routePlanningLocationIndex < locations.length - 1) {\n pointWaypoints.push({\n supportingPointIndex: supportingPoints.length - 1,\n waypointSourceType: 'USER_DEFINED',\n });\n }\n};\n\nconst buildlocationsPostData = (\n locations: RoutePlanningLocation[],\n types: RoutePlanningLocationType[],\n useEntryPoints: GetPositionEntryPointOption,\n): { supportingPoints: LatitudeLongitudePointAPI[]; pointWaypoints?: PointWaypointAPI[] } => {\n const supportingPoints: LatitudeLongitudePointAPI[] = [];\n const pointWaypoints: PointWaypointAPI[] = [];\n\n locations.forEach((routePlanningLocation, routePlanningLocationIndex) => {\n if (types[routePlanningLocationIndex] === 'path') {\n appendPathPostData(\n routePlanningLocation as PathLike,\n routePlanningLocationIndex,\n locations,\n supportingPoints,\n pointWaypoints,\n );\n } else {\n appendWaypointPostData(\n routePlanningLocation as WaypointLike,\n routePlanningLocationIndex,\n locations,\n supportingPoints,\n pointWaypoints,\n useEntryPoints,\n );\n }\n });\n\n return { supportingPoints, ...(pointWaypoints.length && { pointWaypoints }) };\n};\n\nconst buildPostData = (\n params: CalculateRouteParams,\n types: RoutePlanningLocationType[],\n useEntryPoints: GetPositionEntryPointOption,\n): CalculateRoutePOSTDataAPI | null => {\n const pathsIncluded = types.includes('path');\n const isLdevr = !!getChargingPreferences(params);\n if (!pathsIncluded && !isLdevr) {\n // (if no paths in the given locations nor LDEVR, there'll be no POST data, which will trigger a GET call)\n return null;\n }\n\n const vehicleModel = params.vehicle?.model as ExplicitVehicleModel<'electric'>;\n const chargingModel = vehicleModel?.engine?.charging;\n return {\n ...(pathsIncluded && buildlocationsPostData(params.locations, types, useEntryPoints)),\n ...(isLdevr &&\n chargingModel && {\n chargingParameters: omit(chargingModel, 'maxChargeKWH'),\n }),\n };\n};\n\n/**\n * Default function for building calculate route request from {@link CalculateRouteParams}\n * @param params The calculate route parameters, with global configuration already merged into them.\n */\nexport const buildCalculateRouteRequest = (params: CalculateRouteParams): FetchInput<CalculateRoutePOSTDataAPI> => {\n const routePlanningLocationTypes = params.locations.map(getRoutePlanningLocationType);\n const useEntryPoints = params.useEntryPoints ?? defaultUseEntryPointOption;\n const url = new URL(\n `${buildUrlBasePath(params)}/${buildLocationsString(params.locations, routePlanningLocationTypes, useEntryPoints)}/json`,\n );\n const urlParams: URLSearchParams = url.searchParams;\n appendCommonParams(urlParams, params);\n if (!('language' in params)) {\n // for routing we ensure to always have a default language input since by default we fetch some language-specific sections:\n // (see importantRoadStretch as default, and instructionsType when guidance is provided)\n // It's still possible to force the language to be undefined if skipping such sections for performance reasons\n urlParams.append('language', 'en-GB');\n }\n appendCommonRoutingParams(urlParams, params);\n appendOptionalParam(urlParams, 'computeTravelTimeFor', params.computeAdditionalTravelTimeFor);\n appendGuidanceParams(urlParams, params);\n !isNil(params.maxAlternatives) && urlParams.append('maxAlternatives', String(params.maxAlternatives));\n appendSectionTypes(urlParams, params.sectionTypes, !!params.guidance?.type);\n for (const representation of params.extendedRouteRepresentations ?? ['distance', 'travelTime']) {\n urlParams.append('extendedRouteRepresentation', representation);\n }\n\n const postData = buildPostData(params, routePlanningLocationTypes, useEntryPoints);\n return postData ? { method: 'POST', url, data: postData } : { method: 'GET', url };\n};\n","import {\n BBox,\n bboxFromGeoJSON,\n type ChargingStop,\n type CountrySectionProps,\n type CurrentType,\n type Guidance,\n generateId,\n type ImportantRoadStretchProps,\n type Instruction,\n indexedMagnitudes,\n type LaneDirection,\n type LaneSectionProps,\n type LegSectionProps,\n type LegSummary,\n type PossibleLaneSeparator,\n type RoadShieldReference,\n type RoadShieldSectionProps,\n type Route,\n type RouteSummary,\n type Routes,\n type SectionProps,\n type SectionsProps,\n type SectionType,\n type SpeedLimitSectionProps,\n type TrafficCategory,\n type TrafficIncidentTEC,\n type TrafficSectionProps,\n} from '@tomtom-org/maps-sdk/core';\nimport type { LineString, Position } from 'geojson';\nimport { isNil, omit } from 'lodash-es';\nimport { toChargingSpeed } from '../shared/ev';\nimport { ExplicitVehicleModel } from '../shared/types/vehicleModel';\nimport {\n CalculateRouteResponseAPI,\n ChargingStopAPI,\n CurrentTypeAPI,\n GuidanceAPI,\n LegAPI,\n RouteAPI,\n RoutePathPointAPI,\n SectionAPI,\n SummaryAPI,\n} from './types/apiResponseTypes';\nimport { CalculateRouteParams } from './types/calculateRouteParams';\n\nconst toCurrentType = (apiCurrentType: CurrentTypeAPI): CurrentType | undefined => {\n switch (apiCurrentType) {\n case 'Direct_Current':\n return 'DC';\n case 'Alternating_Current_1_Phase':\n return 'AC1';\n case 'Alternating_Current_3_Phase':\n return 'AC3';\n default:\n return undefined;\n }\n};\n\nconst toChargingStop = (\n chargingInformationAtEndOfLeg: ChargingStopAPI,\n maxChargeKWH: number | undefined,\n): ChargingStop => {\n const chargingConnectionInfo = chargingInformationAtEndOfLeg.chargingConnectionInfo;\n const chargingParkLocation = chargingInformationAtEndOfLeg.chargingParkLocation;\n const coordinates = [chargingParkLocation.coordinate.longitude, chargingParkLocation.coordinate.latitude];\n\n // Build freeformAddress from available components\n const addressParts = [chargingParkLocation.street, chargingParkLocation.houseNumber].filter(Boolean);\n const freeformAddress = addressParts.length > 0 ? addressParts.join(', ') : '';\n\n return {\n type: 'Feature',\n id: chargingInformationAtEndOfLeg.chargingParkId,\n geometry: { type: 'Point', coordinates },\n properties: {\n ...omit(chargingInformationAtEndOfLeg, ['chargingConnectionInfo', 'chargingParkLocation']),\n type: 'POI',\n address: {\n freeformAddress,\n ...(chargingParkLocation.street && { streetName: chargingParkLocation.street }),\n ...(chargingParkLocation.houseNumber && { streetNumber: chargingParkLocation.houseNumber }),\n ...(chargingParkLocation.city && { municipality: chargingParkLocation.city }),\n ...(chargingParkLocation.region && { countrySubdivision: chargingParkLocation.region }),\n ...(chargingParkLocation.postalCode && { postalCode: chargingParkLocation.postalCode }),\n ...(chargingParkLocation.country && { country: chargingParkLocation.country }),\n },\n ...(chargingConnectionInfo && {\n chargingConnectionInfo: {\n plugType: chargingConnectionInfo.chargingPlugType,\n currentInA: chargingConnectionInfo.chargingCurrentInA,\n voltageInV: chargingConnectionInfo.chargingVoltageInV,\n chargingPowerInkW: chargingConnectionInfo.chargingPowerInkW,\n currentType: toCurrentType(chargingConnectionInfo.chargingCurrentType),\n chargingSpeed: toChargingSpeed(chargingConnectionInfo.chargingPowerInkW),\n },\n }),\n ...(maxChargeKWH && {\n targetChargeInPCT: (100 * chargingInformationAtEndOfLeg.targetChargeInkWh) / maxChargeKWH,\n }),\n ...(chargingInformationAtEndOfLeg.chargingParkPowerInkW && {\n chargingParkSpeed: toChargingSpeed(chargingInformationAtEndOfLeg.chargingParkPowerInkW),\n }),\n },\n };\n};\n\nconst parseSummary = (apiSummary: SummaryAPI, params: CalculateRouteParams): RouteSummary | LegSummary => {\n const maxChargeKWH = (params?.vehicle?.model as ExplicitVehicleModel<'electric'>)?.engine?.charging?.maxChargeKWH;\n return {\n lengthInMeters: apiSummary.lengthInMeters,\n historicTrafficTravelTimeInSeconds: apiSummary.historicTrafficTravelTimeInSeconds,\n liveTrafficIncidentsTravelTimeInSeconds: apiSummary.liveTrafficIncidentsTravelTimeInSeconds,\n noTrafficTravelTimeInSeconds: apiSummary.noTrafficTravelTimeInSeconds,\n trafficDelayInSeconds: apiSummary.trafficDelayInSeconds,\n trafficLengthInMeters: apiSummary.trafficLengthInMeters,\n travelTimeInSeconds: apiSummary.travelTimeInSeconds,\n departureTime: new Date(apiSummary.departureTime),\n arrivalTime: new Date(apiSummary.arrivalTime),\n deviationDistanceInMeters: apiSummary.deviationDistance,\n fuelConsumptionInLiters: apiSummary.fuelConsumptionInLiters,\n ...(apiSummary.deviationPoint && {\n deviationPoint: [apiSummary.deviationPoint.longitude, apiSummary.deviationPoint.latitude],\n }),\n // EV-specific fields:\n totalChargingTimeInSeconds: apiSummary.totalChargingTimeInSeconds,\n batteryConsumptionInkWh: apiSummary.batteryConsumptionInkWh,\n ...(maxChargeKWH &&\n apiSummary.batteryConsumptionInkWh && {\n batteryConsumptionInPCT: (100 * apiSummary.batteryConsumptionInkWh) / maxChargeKWH,\n }),\n remainingChargeAtArrivalInkWh: apiSummary.remainingChargeAtArrivalInkWh,\n ...(maxChargeKWH &&\n apiSummary.remainingChargeAtArrivalInkWh && {\n remainingChargeAtArrivalInPCT: (100 * apiSummary.remainingChargeAtArrivalInkWh) / maxChargeKWH,\n }),\n ...(apiSummary.chargingInformationAtEndOfLeg && {\n chargingInformationAtEndOfLeg: toChargingStop(apiSummary.chargingInformationAtEndOfLeg, maxChargeKWH),\n }),\n };\n};\n\nconst parseRoutePath = (apiRouteLegs: LegAPI[]): LineString => ({\n type: 'LineString',\n coordinates: apiRouteLegs.flatMap((apiLeg) =>\n apiLeg.points?.map((apiPoint) => [apiPoint.longitude, apiPoint.latitude]),\n ),\n});\n\nconst parseLegSectionProps = (apiLegs: LegAPI[], params: CalculateRouteParams): LegSectionProps[] =>\n apiLegs.reduce<LegSectionProps[]>((accumulatedParsedLegs, nextApiLeg, currentIndex) => {\n const lastLegEndPointIndex = currentIndex === 0 ? 0 : accumulatedParsedLegs[currentIndex - 1]?.endPointIndex;\n let endPointIndex;\n if (!isNil(lastLegEndPointIndex)) {\n if (lastLegEndPointIndex === 0) {\n // in case of first or only leg, we reduce the length by one to be consistent with other sections\n // endPointIndex is inclusive\n endPointIndex = nextApiLeg.points?.length > 0 ? nextApiLeg.points.length - 1 : 0;\n } else {\n endPointIndex = lastLegEndPointIndex + nextApiLeg.points?.length;\n }\n }\n accumulatedParsedLegs.push({\n ...(!isNil(lastLegEndPointIndex) && { startPointIndex: lastLegEndPointIndex }),\n ...(endPointIndex && { endPointIndex }),\n summary: parseSummary(nextApiLeg.summary, params),\n id: generateId(),\n });\n return accumulatedParsedLegs;\n }, []);\n\nconst toSectionProps = (apiSection: SectionAPI): SectionProps => ({\n id: generateId(),\n startPointIndex: apiSection.startPointIndex,\n endPointIndex: apiSection.endPointIndex,\n});\n\nconst toRoadStretchSectionProps = (apiSection: SectionAPI): ImportantRoadStretchProps => ({\n ...toSectionProps(apiSection),\n index: apiSection.importantRoadStretchIndex as number,\n streetName: apiSection.streetName?.text,\n roadNumbers: apiSection.roadNumbers?.map((roadNumber) => roadNumber.text),\n});\n\nconst toCountrySectionProps = (apiSection: SectionAPI): CountrySectionProps => ({\n ...toSectionProps(apiSection),\n countryCodeISO3: apiSection.countryCode as string,\n});\n\nconst toVehicleRestrictedSectionProps = (apiSection: SectionAPI): SectionProps | null =>\n apiSection.travelMode === 'other' ? toSectionProps(apiSection) : null;\n\nconst calculateTrafficCategory = (tecMainCauseCode: number | undefined): TrafficCategory => {\n switch (tecMainCauseCode) {\n case 1:\n return 'jam';\n case 2:\n return 'accident';\n case 3:\n return 'roadworks';\n case 4:\n return 'narrow-lanes';\n case 5:\n return 'road-closed';\n case 9:\n return 'danger';\n case 11:\n return 'animals-on-road';\n case 13:\n return 'broken-down-vehicle';\n case 16:\n return 'lane-closed';\n case 17:\n return 'wind';\n case 18:\n return 'fog';\n case 19:\n return 'rain';\n case 22:\n return 'frost';\n case 23:\n return 'flooding';\n default:\n return 'other';\n }\n};\n\n/**\n * @ignore\n */\nexport const toTrafficCategories = (apiSection: SectionAPI): TrafficCategory[] => {\n if (apiSection.tec?.causes?.length) {\n return apiSection.tec.causes.map((cause) => calculateTrafficCategory(cause.mainCauseCode));\n }\n // else\n switch (apiSection.simpleCategory) {\n case 'JAM':\n return ['jam'];\n case 'ROAD_WORK':\n return ['roadworks'];\n case 'ROAD_CLOSURE':\n return ['road-closed'];\n default:\n return ['other'];\n }\n};\n\nconst toTrafficSectionProps = (apiSection: SectionAPI): TrafficSectionProps => ({\n ...toSectionProps(apiSection),\n delayInSeconds: apiSection.delayInSeconds,\n effectiveSpeedInKmh: apiSection.effectiveSpeedInKmh,\n categories: toTrafficCategories(apiSection),\n magnitudeOfDelay: indexedMagnitudes[apiSection.magnitudeOfDelay as number],\n tec: apiSection.tec as TrafficIncidentTEC,\n});\n\nconst toLaneSectionProps = (apiSection: SectionAPI): LaneSectionProps => ({\n ...toSectionProps(apiSection),\n lanes: apiSection.lanes as LaneDirection[],\n laneSeparators: apiSection.laneSeparators as PossibleLaneSeparator[],\n properties: apiSection.properties,\n});\n\nconst toSpeedLimitSectionProps = (apiSection: SectionAPI): SpeedLimitSectionProps => ({\n ...toSectionProps(apiSection),\n maxSpeedLimitInKmh: apiSection.maxSpeedLimitInKmh as number,\n});\n\nconst toRoadShieldsSectionProps = (apiSection: SectionAPI): RoadShieldSectionProps => ({\n ...toSectionProps(apiSection),\n roadShieldReferences: apiSection.roadShieldReferences as RoadShieldReference[],\n});\n\nconst ensureInit = <S extends SectionProps>(sectionType: SectionType, result: SectionsProps): S[] => {\n if (!result[sectionType]) {\n result[sectionType] = [];\n }\n return result[sectionType] as S[];\n};\n\nconst getSectionMapping = (\n apiSection: SectionAPI,\n): { sectionType: SectionType; mappingFunction: (apiSection: SectionAPI) => SectionProps | null } => {\n switch (apiSection.sectionType) {\n case 'CAR_TRAIN':\n return { sectionType: 'carTrain', mappingFunction: toSectionProps };\n case 'COUNTRY':\n return { sectionType: 'country', mappingFunction: toCountrySectionProps };\n case 'FERRY':\n return { sectionType: 'ferry', mappingFunction: toSectionProps };\n case 'MOTORWAY':\n return { sectionType: 'motorway', mappingFunction: toSectionProps };\n case 'PEDESTRIAN':\n return { sectionType: 'pedestrian', mappingFunction: toSectionProps };\n case 'TOLL_VIGNETTE':\n return { sectionType: 'tollVignette', mappingFunction: toCountrySectionProps };\n case 'TOLL':\n return { sectionType: 'toll', mappingFunction: toSectionProps };\n case 'TRAFFIC':\n return { sectionType: 'traffic', mappingFunction: toTrafficSectionProps };\n case 'TRAVEL_MODE':\n // NOTE: vehicleRestricted sections come from TRAVEL_MODE \"other\" ones:\n return { sectionType: 'vehicleRestricted', mappingFunction: toVehicleRestrictedSectionProps };\n case 'TUNNEL':\n return { sectionType: 'tunnel', mappingFunction: toSectionProps };\n case 'UNPAVED':\n return { sectionType: 'unpaved', mappingFunction: toSectionProps };\n case 'URBAN':\n return { sectionType: 'urban', mappingFunction: toSectionProps };\n case 'CARPOOL':\n return { sectionType: 'carpool', mappingFunction: toSectionProps };\n case 'LOW_EMISSION_ZONE':\n return { sectionType: 'lowEmissionZone', mappingFunction: toSectionProps };\n case 'LANES':\n return { sectionType: 'lanes', mappingFunction: toLaneSectionProps };\n case 'SPEED_LIMIT':\n return { sectionType: 'speedLimit', mappingFunction: toSpeedLimitSectionProps };\n case 'ROAD_SHIELDS':\n return { sectionType: 'roadShields', mappingFunction: toRoadShieldsSectionProps };\n case 'IMPORTANT_ROAD_STRETCH':\n return { sectionType: 'importantRoadStretch', mappingFunction: toRoadStretchSectionProps };\n }\n};\n\nconst parseSectionsAndAppendToResult = (apiSections: SectionAPI[], result: SectionsProps): void => {\n if (!Array.isArray(apiSections)) {\n return;\n }\n\n for (const apiSection of apiSections) {\n const sectionMapping = getSectionMapping(apiSection);\n const mappedSection = sectionMapping?.mappingFunction(apiSection);\n if (mappedSection) {\n ensureInit(sectionMapping.sectionType, result).push(mappedSection);\n }\n }\n};\n\nconst parseSections = (apiRoute: RouteAPI, params: CalculateRouteParams): SectionsProps => {\n const result = {\n leg: parseLegSectionProps(apiRoute.legs, params),\n // (the rest of sections are parsed below)\n } as SectionsProps;\n parseSectionsAndAppendToResult(apiRoute.sections, result);\n return result;\n};\n\nconst DELTA = 0.0001;\n\nconst similar = (a: Position, b: Position): boolean => Math.abs(a[0] - b[0]) < DELTA && Math.abs(a[1] - b[1]) < DELTA;\n\nconst parseGuidance = (apiGuidance: GuidanceAPI, path: Position[]): Guidance => {\n const instructions: Instruction[] = [];\n let lastInstructionPathIndex = 0;\n\n for (const apiInstruction of apiGuidance.instructions) {\n const maneuverPoint = [apiInstruction.maneuverPoint.longitude, apiInstruction.maneuverPoint.latitude];\n\n // we determine the path point index for the instruction by matching maneuverPoint to the path:\n for (let pathIndex = lastInstructionPathIndex; pathIndex < path.length; pathIndex++) {\n if (similar(path[pathIndex], maneuverPoint)) {\n lastInstructionPathIndex = pathIndex;\n break;\n }\n if (pathIndex === path.length - 1) {\n // (we do not advance lastInstructionPathIndex here to prevent missing a whole path section while mapping following instructions)\n break;\n }\n }\n instructions.push({\n ...apiInstruction,\n maneuverPoint,\n pathPointIndex: lastInstructionPathIndex,\n routePath: apiInstruction.routePath.map((apiPoint: RoutePathPointAPI) => ({\n ...apiPoint,\n point: [apiPoint.point.longitude, apiPoint.point.latitude],\n })),\n });\n }\n\n return { instructions };\n};\n\nconst parseRoute = (apiRoute: RouteAPI, index: number, params: CalculateRouteParams): Route => {\n const geometry = parseRoutePath(apiRoute.legs);\n return {\n type: 'Feature',\n geometry,\n id: generateId(),\n bbox: bboxFromGeoJSON(geometry) as BBox, // Route geometry should always have area\n properties: {\n index,\n summary: parseSummary(apiRoute.summary, params),\n sections: parseSections(apiRoute, params),\n ...(apiRoute.guidance && { guidance: parseGuidance(apiRoute.guidance, geometry.coordinates) }),\n ...(apiRoute.progress && { progress: apiRoute.progress }),\n },\n };\n};\n\n/**\n * Default method for parsing calculate route response from {@link CalculateRouteResponseAPI}\n * @param apiResponse The Routing API response.\n * @param params The params used to calculate this route.\n */\nexport const parseCalculateRouteResponse = (\n apiResponse: CalculateRouteResponseAPI,\n params: CalculateRouteParams,\n): Routes => {\n const features = apiResponse.routes.map((apiRoute, index) => parseRoute(apiRoute, index, params));\n const bbox = bboxFromGeoJSON(features);\n return { type: 'FeatureCollection', ...(bbox && { bbox }), features };\n};\n","import type { Routes } from '@tomtom-org/maps-sdk/core';\nimport type { FetchInput, ServiceTemplate } from '../shared';\nimport { fetchWith } from '../shared/fetch';\nimport { routeRequestValidationConfig } from './calculateRouteRequestSchema';\nimport { buildCalculateRouteRequest } from './requestBuilder';\nimport { parseCalculateRouteResponse } from './responseParser';\nimport { parseRoutingResponseError } from './routingResponseErrorParser';\nimport type { CalculateRoutePOSTDataAPI } from './types/apiRequestTypes';\nimport type { CalculateRouteResponseAPI } from './types/apiResponseTypes';\nimport type { CalculateRouteParams } from './types/calculateRouteParams';\n\n/**\n * @ignore\n */\nexport type CalculateRouteTemplate = ServiceTemplate<\n CalculateRouteParams,\n FetchInput<CalculateRoutePOSTDataAPI>,\n CalculateRouteResponseAPI,\n Routes\n>;\n\n/**\n * @ignore\n */\nexport const calculateRouteTemplate: CalculateRouteTemplate = {\n requestValidation: routeRequestValidationConfig,\n buildRequest: buildCalculateRouteRequest,\n sendRequest: fetchWith,\n parseResponse: parseCalculateRouteResponse,\n parseResponseError: parseRoutingResponseError,\n getAPIVersion: () => 2,\n};\n","import type { ParseResponseError } from '../shared';\nimport { SDKServiceError } from '../shared';\nimport type { RoutingAPIResponseError } from '../shared/types/apiResponseErrorTypes';\n\n/**\n * @ignore\n * @param apiError\n * @param serviceName\n */\nexport const parseRoutingResponseError: ParseResponseError<RoutingAPIResponseError> = (apiError, serviceName) => {\n const { data, message, status } = apiError;\n const errorMessage = data?.error?.description ?? data?.detailedError?.message ?? message;\n return new SDKServiceError(errorMessage, serviceName, status);\n};\n","/**\n * @module services-customization\n * @group Customization\n */\n\nimport autocompleteCustomize from '../autocomplete-search/customize';\nimport evChargingStationsAvailabilityCustomize from '../ev-charging-stations-availability/customize';\nimport geocodeCustomize from '../geocode/customize';\nimport geometryDataCustomize from '../geometry-data/customize';\nimport geometrySearchCustomize from '../geometry-search/customize';\nimport placeByIdCustomize from '../place-by-id/customize';\nimport reachableRangeCustomize from '../reachable-range/customize';\nimport revgeoCustomize from '../revgeo/customize';\nimport routingCustomize from '../routing/customize';\n\n/**\n * Access to service implementation components for advanced customization.\n *\n * This object provides low-level access to the internal components of each service,\n * allowing developers to customize request building, response parsing, and other\n * aspects of service behavior. This is useful for advanced use cases like:\n * - Custom request/response transformations\n * - Integration with custom API gateways or proxies\n * - Adding custom validation or error handling\n * - Implementing request/response logging or monitoring\n * - Adapting to custom API endpoints or versions\n *\n * @remarks\n * Most developers won't need to use this directly. The standard service functions\n * (like `geocode`, `search`, `calculateRoute`) are sufficient for typical use cases.\n * Only use customization when you need to modify the internal service behavior.\n *\n * Each service exposes:\n * - Request builders: Functions that construct API requests\n * - Response parsers: Functions that transform API responses\n * - Templates: Configuration objects defining service behavior\n * - Validation schemas: Input parameter validation rules\n *\n * @example\n * ```typescript\n * // Access request builder for custom processing\n * import { customizeService } from '@tomtom-international/web-sdk-services';\n *\n * const { buildRequest } = customizeService.geocode;\n * const request = buildRequest({\n * key: 'your-api-key',\n * query: 'Amsterdam'\n * });\n *\n * // Access response parser for custom handling\n * const { parseResponse } = customizeService.geocode;\n * const rawApiResponse = await fetch(request.url);\n * const parsedData = parseResponse(await rawApiResponse.json());\n * ```\n *\n * @group Advanced\n */\nexport const customizeService: {\n reverseGeocode: typeof revgeoCustomize;\n geocode: typeof geocodeCustomize;\n geometryData: typeof geometryDataCustomize;\n geometrySearch: typeof geometrySearchCustomize;\n calculateRoute: typeof routingCustomize;\n reachableRange: typeof reachableRangeCustomize;\n evChargingStationsAvailability: typeof evChargingStationsAvailabilityCustomize;\n placeByID: typeof placeByIdCustomize;\n autocompleteSearch: typeof autocompleteCustomize;\n} = {\n reverseGeocode: revgeoCustomize,\n geocode: geocodeCustomize,\n geometryData: geometryDataCustomize,\n geometrySearch: geometrySearchCustomize,\n calculateRoute: routingCustomize,\n reachableRange: reachableRangeCustomize,\n evChargingStationsAvailability: evChargingStationsAvailabilityCustomize,\n placeByID: placeByIdCustomize,\n autocompleteSearch: autocompleteCustomize,\n};\n","import type { CalculateRouteTemplate } from './calculateRouteTemplate';\nimport { calculateRouteTemplate } from './calculateRouteTemplate';\nimport { buildCalculateRouteRequest } from './requestBuilder';\nimport { parseCalculateRouteResponse } from './responseParser';\n\nconst customize: {\n buildCalculateRouteRequest: typeof buildCalculateRouteRequest;\n parseCalculateRouteResponse: typeof parseCalculateRouteResponse;\n calculateRouteTemplate: CalculateRouteTemplate;\n} = {\n buildCalculateRouteRequest,\n parseCalculateRouteResponse,\n calculateRouteTemplate,\n};\nexport default customize;\n","import type {\n ChargingPark,\n ChargingParkWithAvailability,\n ChargingStationsAvailability,\n CommonPlaceProps,\n EVChargingStationWithAvailabilityPlaceProps,\n Place,\n Places,\n} from '@tomtom-org/maps-sdk/core';\nimport { bboxFromGeoJSON } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { EVChargingStationsAvailabilityTemplate } from './evChargingStationsAvailabilityTemplate';\nimport { evChargingStationsAvailabilityTemplate } from './evChargingStationsAvailabilityTemplate';\nimport type { ChargingStationsAvailabilityParams } from './types/evChargingStationsAvailabilityParams';\n\n/**\n * Get real-time availability of electric vehicle charging stations.\n *\n * Provides current operational status of charging points and connectors at EV charging parks,\n * enabling drivers to find available chargers before arriving at a location.\n *\n * @remarks\n * Key information returned:\n * - **Point-level status**: Available, Occupied, Reserved, Out of Service\n * - **Connector details**: Power ratings, plug types, current availability\n * - **Aggregated counts**: Quick overview of available vs occupied chargers\n * - **Access information**: Public, private, or restricted access\n * - **Opening hours**: When the charging facility is accessible\n *\n * @param params - Charging availability parameters with station ID\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to charging station availability information\n *\n * @example\n * ```typescript\n * // Get availability for a specific charging park\n * const availability = await evChargingStationsAvailability({\n * key: 'your-api-key',\n * id: 'charging-park-id-123'\n * });\n *\n * // Check how many chargers are available\n * const availableCount = availability.chargingPointAvailability.statusCounts.Available;\n * console.log(`${availableCount} chargers available`);\n *\n * // Find available CCS connectors\n * const ccsConnectors = availability.connectorAvailabilities.find(\n * ca => ca.connector.type === 'IEC62196Type2CCS'\n * );\n * ```\n *\n * @see [EV Charging Availability API](https://docs.tomtom.com/search-api/documentation)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [EV Charging Stations Availability Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/ev-charging-stations-availability)\n *\n * @group EV Charging\n */\nexport const evChargingStationsAvailability = async (\n params: ChargingStationsAvailabilityParams,\n customTemplate?: Partial<EVChargingStationsAvailabilityTemplate>,\n): Promise<ChargingStationsAvailability | undefined> =>\n callService(\n params,\n { ...evChargingStationsAvailabilityTemplate, ...customTemplate },\n 'EVChargingStationsAvailability',\n );\n\n/**\n * Enhance a place with real-time EV charging availability data.\n *\n * Fetches availability information for an EV charging station and merges it into\n * the place properties.\n *\n * @param place - The place to enhance with availability data\n *\n * @returns Promise resolving to the place with merged availability information\n * @returns undefined if no availability data is present for the `place` input parameter.\n *\n * @example\n * ```typescript\n * // After search, enhance place with availability\n * const searchResult = await search({ query: 'EV charging', ... });\n * const place = searchResult.features[0];\n *\n * const enhancedPlace = await getPlaceWithEVAvailability(place);\n * const availability = enhancedPlace.properties.chargingPark?.availability;\n *\n * if (availability) {\n * console.log('Available chargers:', availability.chargingPointAvailability.count);\n * }\n * ```\n *\n * @group EV Charging\n */\nexport const getPlaceWithEVAvailability = async <P extends CommonPlaceProps = CommonPlaceProps>(\n place: Place<P>,\n): Promise<Place<EVChargingStationWithAvailabilityPlaceProps> | undefined> => {\n const availabilityId = place.properties.dataSources?.chargingAvailability?.id;\n if (!availabilityId) {\n return undefined;\n }\n try {\n const availability = await evChargingStationsAvailability({ id: availabilityId });\n const poi = place.properties.poi;\n return availability\n ? {\n ...place,\n properties: {\n ...place.properties,\n // We override poi opening hours with the ones from the EV call, which might be better supported:\n ...(poi && { poi: { ...poi, openingHours: availability.openingHours } }),\n chargingPark: {\n ...(place.properties.chargingPark as ChargingPark),\n availability,\n },\n },\n }\n : undefined;\n } catch (e) {\n // (Likely a QPS limit error)\n console.error(e);\n return undefined;\n }\n};\n\n/**\n * Enhance multiple places with real-time EV charging availability data.\n *\n * Fetches availability information for all EV charging stations in a collection\n * and merges it into their properties. Non-EV places and EV stations without availability data are returned unchanged.\n *\n * @remarks\n * **Important**: Availability requests are made sequentially to avoid exceeding\n * API rate limits (QPS - Queries Per Second). For large result sets, this may\n * take some time.\n *\n * @param places - Collection of places to enhance\n * @param options - Configuration options\n *\n * @returns Promise resolving to places collection with merged availability\n *\n * @example\n * ```typescript\n * // Search for charging stations and add availability\n * const results = await search({\n * query: 'EV charging',\n * at: [4.9, 52.3],\n * radius: 5000\n * });\n *\n * const withAvailability = await getPlacesWithEVAvailability(results, {\n * excludeIfAvailabilityUnknown: true // Filter out stations with unknown availability\n * });\n *\n * // Display only stations with known availability\n * withAvailability.features.forEach(place => {\n * const available = place.properties.chargingPark?.availability?.chargingPointAvailability.count;\n * console.log(`${place.properties.poi?.name}: ${available} chargers`);\n * });\n * ```\n *\n * @group EV Charging\n */\nexport async function getPlacesWithEVAvailability<P extends CommonPlaceProps = CommonPlaceProps>(\n places: Places<P>,\n options?: {\n excludeIfAvailabilityUnknown: true;\n },\n): Promise<Places<EVChargingStationWithAvailabilityPlaceProps>>;\n\nexport async function getPlacesWithEVAvailability<P extends CommonPlaceProps = CommonPlaceProps>(\n places: Places<P>,\n options?: {\n /**\n * If true, places with unknown availability will be filtered out. Otherwise, they will be included.\n * @default false\n */\n excludeIfAvailabilityUnknown?: boolean;\n },\n): Promise<Places<P | EVChargingStationWithAvailabilityPlaceProps>> {\n const enhancedPlaces: Array<Place<P> | Place<EVChargingStationWithAvailabilityPlaceProps>> = [];\n for (const place of places.features) {\n // (We fetch the availabilities sequentially on purpose to prevent QPS limit errors)\n const placeWithAvailability = await getPlaceWithEVAvailability(place);\n if (placeWithAvailability) {\n enhancedPlaces.push(placeWithAvailability);\n } else if (!options?.excludeIfAvailabilityUnknown) {\n enhancedPlaces.push(place);\n }\n }\n return { ...places, features: enhancedPlaces, bbox: bboxFromGeoJSON(enhancedPlaces) };\n}\n\n/**\n * Type guard to check if a ChargingPark has availability data.\n *\n * @param chargingPark - The charging park to check\n * @returns True if the charging park has availability data\n *\n * @group EV Charging\n */\nexport const hasChargingAvailability = (\n chargingPark: ChargingPark | ChargingParkWithAvailability | undefined,\n): chargingPark is ChargingParkWithAvailability =>\n Boolean(chargingPark && 'availability' in chargingPark && chargingPark.availability);\n\nexport default evChargingStationsAvailability;\n","import type { Place } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { GeocodingTemplate } from './geocodingTemplate';\nimport { geocodingTemplate } from './geocodingTemplate';\nimport type { GeocodingParams } from './types/geocodingParams';\nimport type { GeocodingProps, GeocodingResponse } from './types/geocodingResponse';\n\n/**\n * Convert addresses into geographic coordinates (geocoding).\n *\n * The Geocode service translates addresses and place names into geographic coordinates,\n * enabling you to position markers on maps, calculate routes, or perform spatial analysis.\n *\n * @remarks\n * This service is optimized for address lookup and does not return POIs (Points of Interest).\n * For POI search, use the {@link search} function instead.\n *\n * Features:\n * - Highly tolerant of typos and incomplete addresses\n * - Handles various address formats and components\n * - Supports street addresses, intersections, and cross streets\n * - Works with higher-level geographies (cities, counties, states, countries)\n * - Returns structured address components\n *\n * @param params - Geocoding parameters including the address query\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to geocoded location results\n *\n * @example\n * ```typescript\n * // Geocode a complete address\n * const result = await geocode({\n * key: 'your-api-key',\n * query: '1600 Pennsylvania Avenue NW, Washington, DC'\n * });\n *\n * // Geocode with partial address\n * const partialResult = await geocode({\n * key: 'your-api-key',\n * query: 'Amsterdam, Netherlands'\n * });\n *\n * // Geocode with bias towards specific location\n * const biasedResult = await geocode({\n * key: 'your-api-key',\n * query: 'Main Street',\n * at: [4.9041, 52.3676], // Bias toward Amsterdam\n * limit: 5\n * });\n *\n * // Geocode an intersection\n * const intersection = await geocode({\n * key: 'your-api-key',\n * query: '5th Avenue & 42nd Street, New York'\n * });\n * ```\n *\n * @see [Geocode API Documentation](https://docs.tomtom.com/search-api/documentation/geocoding-service/geocode)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Geocoding Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/geocoding)\n *\n * @group Geocoding\n */\nexport const geocode = async (\n params: GeocodingParams,\n customTemplate?: Partial<GeocodingTemplate>,\n): Promise<GeocodingResponse> => callService(params, { ...geocodingTemplate, ...customTemplate }, 'Geocode');\n\n/**\n *\n * @param query\n * @group Geocoding\n */\nexport const geocodeOne = async (query: string): Promise<Place<GeocodingProps>> =>\n (await geocode({ query, limit: 1 })).features[0];\n","import type { CommonPlaceProps, Places, PolygonFeatures } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { GeometryDataTemplate } from './geometryDataTemplate';\nimport { geometryDataTemplate } from './geometryDataTemplate';\nimport type { GeometryDataParams, GeometryParams, GeometryPlaceParams } from './types/geometryDataParams';\n\n/**\n * Merge our internal Places \"properties\" response with Geometry data\n * @param places\n * @param geometries\n * @returns FeatureCollection<Polygon | MultiPolygon>,\n */\nconst mergePlacesWithGeometries = (places: Places, geometries: PolygonFeatures): PolygonFeatures<CommonPlaceProps> => {\n const placesIdMap = places.features.reduce(\n (acc, place) => {\n const geometryId = place.properties.dataSources?.geometry?.id;\n\n if (geometryId) {\n acc[geometryId] = {\n ...place.properties,\n placeCoordinates: place.geometry.coordinates,\n };\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n\n const features = geometries.features.map((feature) => {\n if (feature.id && placesIdMap[feature.id]) {\n return { ...feature, properties: placesIdMap[feature.id] };\n }\n\n return feature;\n });\n\n return {\n type: 'FeatureCollection',\n bbox: geometries.bbox,\n features,\n } as PolygonFeatures<CommonPlaceProps>;\n};\n\n/**\n * Retrieve polygon geometries representing geographic area boundaries.\n *\n * The Geometry Data service returns coordinate sets that define the outlines of\n * geographic areas such as cities, countries, administrative regions, or POI footprints.\n * These polygons enable visualization of area boundaries, spatial analysis, and\n * geofencing applications.\n *\n * @remarks\n * Key features:\n * - **Batch requests**: Fetch up to 20 geometries in a single call\n * - **Multiple scales**: From countries down to building footprints\n * - **Place integration**: Can merge with place data for enriched results\n * - **Standard GeoJSON**: Returns standard Polygon/MultiPolygon features\n *\n * Common use cases:\n * - Display city or country boundaries on maps\n * - Show POI building footprints\n * - Create geofences for spatial queries\n * - Visualize administrative divisions\n * - Calculate areas and spatial relationships\n *\n * @param params - Geometry parameters with IDs or places to fetch boundaries for\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to polygon features representing area boundaries\n *\n * @example\n * ```typescript\n * // Fetch geometry by ID\n * const cityBoundary = await geometryData({\n * key: 'your-api-key',\n * geometries: ['geometry-id-123']\n * });\n *\n * // Fetch multiple geometries at once\n * const boundaries = await geometryData({\n * key: 'your-api-key',\n * geometries: ['country-id-1', 'city-id-2', 'poi-id-3']\n * });\n *\n * // Fetch and merge with place data\n * const searchResults = await search({ query: 'Amsterdam' });\n * const withBoundaries = await geometryData({\n * key: 'your-api-key',\n * geometries: searchResults // Places with geometry IDs\n * });\n * // Result includes both place properties and polygon boundaries\n * ```\n *\n * @see [Geometry Data API Documentation](https://docs.tomtom.com/search-api/documentation/additional-data-service/additional-data)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Geometry Data Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/geometry-data)\n *\n * @group Geometry\n */\nexport async function geometryData(\n params: GeometryDataParams,\n customTemplate?: Partial<GeometryDataTemplate>,\n): Promise<PolygonFeatures>;\nexport async function geometryData(\n params: GeometryPlaceParams,\n customTemplate?: Partial<GeometryDataTemplate>,\n): Promise<PolygonFeatures<CommonPlaceProps>>;\nexport async function geometryData(params: GeometryParams, customTemplate?: Partial<GeometryDataTemplate>) {\n const geometryResult = await callService(params, { ...geometryDataTemplate, ...customTemplate }, 'GeometryData');\n\n // If params.geometries is a FeatureCollection(Place), the properties will be merged with geometry results.\n if (!Array.isArray(params.geometries) && params.geometries.type === 'FeatureCollection') {\n return mergePlacesWithGeometries(params.geometries, geometryResult);\n }\n\n return geometryResult;\n}\n","import { callService } from '../shared/serviceTemplate';\nimport type { PlaceByIdTemplate } from './placeByIdTemplate';\nimport { placeByIdTemplate } from './placeByIdTemplate';\nimport type { PlaceByIdParams, PlaceByIdResponse } from './types';\n\n/**\n * Retrieve detailed information about a place using its unique identifier.\n *\n * The Place by ID service fetches comprehensive data for a specific place when you\n * have its ID from a previous search or from a place's dataSources. This is useful\n * for getting additional details or refreshing information about a known location.\n *\n * @remarks\n * Use cases:\n * - **Fetch POI details**: Get extended information like reviews, photos, amenities\n * - **Refresh place data**: Update information for a cached place\n * - **Deep linking**: Allow users to share/bookmark specific places\n * - **Related POI navigation**: Explore parent/child relationships\n *\n * The ID can be obtained from:\n * - Previous search results (place.id)\n * - POI details data source (place.properties.dataSources.poiDetails.id)\n * - Related POIs (place.properties.relatedPois[].id)\n * - Deep links or bookmarks\n *\n * @param params - Place by ID parameters with the place identifier\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to detailed place information\n *\n * @example\n * ```typescript\n * // Get place by ID from search result\n * const searchResult = await search({ query: 'Eiffel Tower' });\n * const placeId = searchResult.features[0].id;\n *\n * const placeDetails = await placeById({\n * key: 'your-api-key',\n * entityId: placeId\n * });\n *\n * // Get extended POI details\n * const place = searchResult.features[0];\n * const poiDetailsId = place.properties.dataSources?.poiDetails?.id;\n *\n * if (poiDetailsId) {\n * const detailedPOI = await placeById({\n * key: 'your-api-key',\n * entityId: poiDetailsId\n * });\n * // May include additional photos, reviews, extended hours, etc.\n * }\n *\n * // Navigate to related POI\n * const relatedPOI = place.properties.relatedPois?.[0];\n * if (relatedPOI) {\n * const parentPlace = await placeById({\n * key: 'your-api-key',\n * entityId: relatedPOI.id\n * });\n * console.log('Parent location:', parentPlace.properties.address);\n * }\n * ```\n *\n * @see [Place by ID API Documentation](https://docs.tomtom.com/search-api/documentation/place-by-id-service/place-by-id)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n *\n * @group Place\n */\nexport const placeById = async (\n params: PlaceByIdParams,\n customTemplate?: Partial<PlaceByIdTemplate>,\n): Promise<PlaceByIdResponse> => callService(params, { ...placeByIdTemplate, ...customTemplate }, 'PlaceById');\n\nexport default placeById;\n","import type { Place, RevGeoAddressProps } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { ReverseGeocodingTemplate } from './reverseGeocodingTemplate';\nimport { reverseGeocodingTemplate } from './reverseGeocodingTemplate';\nimport type { ReverseGeocodingParams } from './types/reverseGeocodingParams';\n\n/**\n * Response from the reverse geocoding service.\n *\n * Contains a place with address information for the given coordinates.\n *\n * @group Reverse Geocoding\n */\nexport type ReverseGeocodingResponse = Place<RevGeoAddressProps>;\n\n/**\n * Convert geographic coordinates into human-readable addresses (reverse geocoding).\n *\n * Reverse geocoding translates latitude/longitude coordinates into street addresses,\n * which is essential for location-based applications that need to display addresses\n * from GPS coordinates or map clicks.\n *\n * @remarks\n * Common use cases:\n * - **Tracking applications**: Convert GPS coordinates from devices into addresses\n * - **Map interactions**: Display address when user clicks on map\n * - **Location sharing**: Show readable location instead of coordinates\n * - **Delivery apps**: Confirm pickup/dropoff addresses from driver location\n * - **Asset tracking**: Display current location of vehicles or equipment\n *\n * Features:\n * - Returns complete address hierarchy (street, city, state, country)\n * - Supports cross-street results\n * - Includes side of street information\n * - Provides address ranges for streets\n * - Returns multiple result types (street, POI, geography)\n *\n * @param params - Reverse geocoding parameters including coordinates\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to the address for the given coordinates\n *\n * @example\n * ```typescript\n * // Get address for coordinates\n * const address = await reverseGeocode({\n * key: 'your-api-key',\n * position: [4.9041, 52.3676] // Amsterdam coordinates\n * });\n * // Returns: Dam, 1012 Amsterdam, Netherlands\n *\n * // Get address with specific street number\n * const specificAddress = await reverseGeocode({\n * key: 'your-api-key',\n * position: [-77.0369, 38.8977], // Washington DC\n * number: '1600'\n * });\n * // Returns: 1600 Pennsylvania Avenue NW\n *\n * // Get nearest cross street\n * const crossStreet = await reverseGeocode({\n * key: 'your-api-key',\n * position: [-74.0060, 40.7128], // New York\n * returnRoadUse: true\n * });\n * ```\n *\n * @see [Reverse Geocode API Documentation](https://docs.tomtom.com/search-api/documentation/reverse-geocoding-service/reverse-geocode)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Reverse Geocoding Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/reverse-geocoding)\n *\n * @group Reverse Geocoding\n */\nexport const reverseGeocode = async (\n params: ReverseGeocodingParams,\n customTemplate?: Partial<ReverseGeocodingTemplate>,\n): Promise<ReverseGeocodingResponse> =>\n callService(params, { ...reverseGeocodingTemplate, ...customTemplate }, 'ReverseGeocode');\n\nexport default reverseGeocode;\n","import type { Routes } from '@tomtom-org/maps-sdk/core';\nimport { callService } from '../shared/serviceTemplate';\nimport type { CalculateRouteTemplate } from './calculateRouteTemplate';\nimport { calculateRouteTemplate } from './calculateRouteTemplate';\nimport type { CalculateRouteParams } from './types/calculateRouteParams';\n\n/**\n * Calculates a route between an origin and destination, optionally passing through extra waypoints.\n *\n * @param params - Route calculation parameters including locations, travel mode, and other options\n * @param customTemplate - Optional template customization for request/response handling\n * @returns Promise resolving to calculated route(s) with geometry, distance, and travel time\n *\n * @see [Calculate Route API Documentation](https://docs.tomtom.com/routing-api/documentation/tomtom-maps/calculate-route)\n *\n * @group Routing\n */\nexport const calculateRoute = async (\n params: CalculateRouteParams,\n customTemplate?: Partial<CalculateRouteTemplate>,\n): Promise<Routes> => callService(params, { ...calculateRouteTemplate, ...customTemplate }, 'Routing');\n","import { z } from 'zod/v4-mini';\nimport { commonSearchParamsSchema } from '../search/commonSearchParamsSchema';\nimport { commonGeocodeAndFuzzySearchParamsSchema } from '../shared/schema/commonGeocodeAndFuzzySearchParamsSchema';\n\nconst fuzzySearchRequestOptional = z.partial(\n z.object({\n minFuzzyLevel: z.number().check(z.minimum(1), z.maximum(4)),\n maxFuzzyLevel: z.number().check(z.minimum(1), z.maximum(4)),\n }),\n);\n\n/**\n * @ignore\n */\nexport const fuzzySearchRequestSchema = z.extend(\n commonSearchParamsSchema,\n z.extend(commonGeocodeAndFuzzySearchParamsSchema, fuzzySearchRequestOptional.shape).shape,\n);\n","import { bboxFromGeoJSON, bboxOnlyIfWithArea } from '@tomtom-org/maps-sdk/core';\nimport { latLonAPIToPosition } from '../shared/geometry';\nimport { parseSearchAPIResult, parseSummaryAPI } from '../shared/searchResultParsing';\nimport type { FuzzySearchResponse, FuzzySearchResponseAPI, QueryIntent, QueryIntentAPI } from './types';\n\nconst queryIntentApiToSdk = (intentApi: QueryIntentAPI): QueryIntent => {\n let intent;\n switch (intentApi.type) {\n case 'COORDINATE':\n intent = { ...intentApi, details: { position: latLonAPIToPosition(intentApi.details) } };\n break;\n case 'NEARBY':\n intent = {\n ...intentApi,\n details: {\n position: latLonAPIToPosition({ lon: intentApi.details.lon, lat: intentApi.details.lat }),\n text: intentApi.details.text,\n query: intentApi.details.query,\n },\n };\n break;\n case 'BOOKMARK':\n case 'W3W':\n intent = intentApi;\n }\n return intent;\n};\n\n/**\n * Default function to parse a fuzzy search response.\n * @param apiResponse The API response.\n */\nexport const parseFuzzySearchResponse = (apiResponse: FuzzySearchResponseAPI): FuzzySearchResponse => {\n const features = apiResponse.results.map(parseSearchAPIResult);\n const bbox = bboxOnlyIfWithArea(bboxFromGeoJSON(features));\n return {\n type: 'FeatureCollection',\n properties: {\n ...parseSummaryAPI(apiResponse.summary),\n queryIntent: apiResponse.summary.queryIntent.map(queryIntentApiToSdk),\n },\n features,\n ...(bbox && { bbox }),\n };\n};\n","import type { ServiceTemplate } from '../shared';\nimport { get } from '../shared/fetch';\nimport { fuzzySearchRequestSchema } from './fuzzySearchRequestSchema';\nimport { buildFuzzySearchRequest } from './requestBuilder';\nimport { parseFuzzySearchResponse } from './responseParser';\nimport type { FuzzySearchParams, FuzzySearchResponse, FuzzySearchResponseAPI } from './types';\n\n/**\n * Fuzzy search service template type.\n * @ignore\n */\nexport type FuzzySearchTemplate = ServiceTemplate<FuzzySearchParams, URL, FuzzySearchResponseAPI, FuzzySearchResponse>;\n\n/**\n * Fuzzy search service template main implementation.\n * @ignore\n */\nexport const fuzzySearchTemplate: FuzzySearchTemplate = {\n requestValidation: { schema: fuzzySearchRequestSchema },\n buildRequest: buildFuzzySearchRequest,\n sendRequest: get,\n parseResponse: parseFuzzySearchResponse,\n};\n","import { bboxFromGeoJSON } from '@tomtom-org/maps-sdk/core';\nimport { arrayToCSV } from '../shared/arrays';\nimport { appendCommonSearchParams, PLACES_URL_PATH } from '../shared/request/commonSearchRequestBuilder';\nimport { appendByJoiningParamValue, appendOptionalParam } from '../shared/request/requestBuildingUtils';\nimport type { FuzzySearchParams } from './types';\n\nconst buildUrlBasePath = (mergedOptions: FuzzySearchParams): string =>\n mergedOptions.customServiceBaseURL ??\n `${mergedOptions.commonBaseURL}${PLACES_URL_PATH}/search/${mergedOptions.query}.json`;\n\n/**\n * Default function for building a fuzzy search request from {@link FuzzySearchParams}\n * @param params The fuzzy search parameters, with global configuration already merged into them.\n */\nexport const buildFuzzySearchRequest = (params: FuzzySearchParams): URL => {\n const url = new URL(`${buildUrlBasePath(params)}`);\n appendCommonSearchParams(url, params);\n const urlParams = url.searchParams;\n appendOptionalParam(urlParams, 'typeahead', params.typeahead);\n appendOptionalParam(urlParams, 'ofs', params.offset);\n appendByJoiningParamValue(urlParams, 'countrySet', params.countries);\n appendOptionalParam(urlParams, 'radius', params.radiusMeters);\n const bbox = params.boundingBox && bboxFromGeoJSON(params.boundingBox);\n if (bbox) {\n urlParams.append('topLeft', arrayToCSV([bbox[3], bbox[0]]));\n urlParams.append('btmRight', arrayToCSV([bbox[1], bbox[2]]));\n }\n appendOptionalParam(urlParams, 'minFuzzyLevel', params.minFuzzyLevel);\n appendOptionalParam(urlParams, 'maxFuzzyLevel', params.maxFuzzyLevel);\n return url;\n};\n","import type { Place, Places, SearchPlaceProps } from '@tomtom-org/maps-sdk/core';\nimport type { FuzzySearchParams, QueryIntent } from '../fuzzy-search';\nimport { fuzzySearch } from '../fuzzy-search/fuzzySearch';\nimport type { FuzzySearchTemplate } from '../fuzzy-search/fuzzySearchTemplate';\nimport type { GeometrySearchParams } from '../geometry-search';\nimport { geometrySearch } from '../geometry-search/geometrySearch';\nimport type { GeometrySearchTemplate } from '../geometry-search/geometrySearchTemplate';\nimport type { SearchSummary } from '../shared';\n\ntype SearchFeatureCollectionProps = SearchSummary & {\n queryIntent?: QueryIntent[];\n};\n\n/**\n * Search service response containing places that match the query.\n *\n * Collection of place features with search-specific properties like relevance scores and distances.\n *\n * @group Search\n */\nexport type SearchResponse = Places<SearchPlaceProps, SearchFeatureCollectionProps>;\n\n/**\n * Universal search function for finding places by text query or within geometries.\n *\n * This is a unified interface that automatically routes to either:\n * - **Geometry Search**: When geometries parameter is provided (search within specific areas)\n * - **Fuzzy Search**: When no geometries provided (free-text search)\n *\n * @remarks\n * The search service provides:\n * - POI (Points of Interest) search\n * - Address search\n * - Geographic area search\n * - Category-based filtering\n * - Position-based relevance ranking\n *\n * Results are ranked by relevance with scores and optional distances.\n *\n * @param params - Search parameters (either GeometrySearchParams or FuzzySearchParams)\n * @param customTemplate - Advanced customization for request/response handling\n *\n * @returns Promise resolving to a collection of matching places\n *\n * @example\n * ```typescript\n * // Free-text search near a location\n * const results = await search({\n * key: 'your-api-key',\n * query: 'pizza restaurant',\n * at: [4.9041, 52.3676], // Amsterdam\n * limit: 10\n * });\n *\n * // Search within a specific area\n * const areaResults = await search({\n * key: 'your-api-key',\n * query: 'coffee shop',\n * geometries: [polygon], // Search within this polygon\n * limit: 20\n * });\n *\n * // Category search\n * const restaurants = await search({\n * key: 'your-api-key',\n * query: 'restaurant',\n * categorySet: [7315], // Restaurant category\n * at: [4.9041, 52.3676],\n * radius: 5000 // Within 5km\n * });\n * ```\n *\n * @see [Search API Documentation](https://docs.tomtom.com/search-api/documentation/search-service/search-service)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Search Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/search)\n *\n * @group Search\n */\nexport const search = async (\n params: GeometrySearchParams | FuzzySearchParams,\n customTemplate?: Partial<GeometrySearchTemplate | FuzzySearchTemplate>,\n): Promise<SearchResponse> =>\n 'geometries' in params\n ? geometrySearch(params, customTemplate as GeometrySearchTemplate)\n : fuzzySearch(params, customTemplate as FuzzySearchTemplate);\n\n/**\n * Search for a single place by text query.\n *\n * Convenience function that calls {@link search} and returns the first result.\n *\n * @param query - Search query string\n * @returns Promise resolving to the first matching place, or undefined if no results\n *\n * @example\n * ```typescript\n * const place = await searchOne('Vondelpark Amsterdam');\n * if (place) {\n * console.log(place.properties.name);\n * }\n * ```\n *\n * @remarks\n * * Useful to quickly find a single place, particularly a POI.\n * * If you want to find a single address, consider 'geocodeOne'.\n *\n * @group Search\n */\nexport const searchOne = async (query: string): Promise<Place<SearchPlaceProps> | undefined> =>\n (await search({ query, limit: 1 })).features[0];\n","import { callService } from '../shared/serviceTemplate';\nimport type { FuzzySearchTemplate } from './fuzzySearchTemplate';\nimport { fuzzySearchTemplate } from './fuzzySearchTemplate';\nimport type { FuzzySearchParams, FuzzySearchResponse } from './types';\n\n/**\n * Search for places using free-text queries with fuzzy matching.\n *\n * The Fuzzy Search service provides a flexible search that handles typos, abbreviations,\n * and incomplete addresses. It searches across POIs (Points of Interest), addresses,\n * and geographic areas to find the best matches for your query.\n *\n * @remarks\n * Key features:\n * - **Typo tolerance**: Handles misspellings and typing errors\n * - **Partial matching**: Works with incomplete queries\n * - **Multi-category search**: Searches POIs, addresses, and places simultaneously\n * - **Position bias**: Prioritizes results near a given location\n * - **Flexible input**: Accepts natural language queries\n *\n * The service is ideal for:\n * - User-facing search boxes where typos are common\n * - Location lookup without knowing exact names\n * - General \"find anything\" search functionality\n * - Autocomplete with final selection\n *\n * @param params Fuzzy search parameters including the search query\n * @param customTemplate Advanced customization for request/response handling\n *\n * @returns Promise resolving to a collection of matching places\n *\n * @example\n * ```typescript\n * // Basic search with typo tolerance\n * const results = await fuzzySearch({\n * key: 'your-api-key',\n * query: 'amstrdam' // Typo: missing 'e'\n * });\n * // Still finds \"Amsterdam\"\n *\n * // Search near a specific location\n * const nearby = await fuzzySearch({\n * key: 'your-api-key',\n * query: 'pizza',\n * at: [4.9041, 52.3676], // Amsterdam\n * radius: 2000, // Within 2km\n * limit: 10\n * });\n *\n * // Search with category filter\n * const restaurants = await fuzzySearch({\n * key: 'your-api-key',\n * query: 'italian',\n * categorySet: [7315], // Restaurant category\n * at: [4.9041, 52.3676]\n * });\n *\n * // Partial address search\n * const addresses = await fuzzySearch({\n * key: 'your-api-key',\n * query: '123 main st',\n * countrySet: ['US'],\n * limit: 5\n * });\n * ```\n *\n * @see [Fuzzy Search API Documentation](https://docs.tomtom.com/search-api/documentation/search-service/fuzzy-search)\n * @see [Places Quickstart Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/quickstart)\n * @see [Search Guide](https://docs.tomtom.com/maps-sdk-js/guides/services/places/search)\n *\n * @ignore (exposed via 'search')\n */\nexport const fuzzySearch = async (\n params: FuzzySearchParams,\n customTemplate?: Partial<FuzzySearchTemplate>,\n): Promise<FuzzySearchResponse> => callService(params, { ...fuzzySearchTemplate, ...customTemplate }, 'FuzzySearch');\n\nexport default fuzzySearch;\n"],"names":["APICode","SDKError","Error","constructor","message","service","issues","super","this","captureStackTrace","APIErrorCode","TOO_MANY_REQUESTS","FORBIDDEN","SDKServiceError","status","parseDefaultResponseError","error","serviceName","data","errorText","buildResponseError","parseResponseError","fetchError","buildValidationError","$constructor","name","initializer","params","init","inst","def","_zod","Object","defineProperty","value","constr","_","traits","Set","enumerable","has","add","proto","prototype","keys","i","length","k","bind","Parent","Definition","_a","deferred","fn","Symbol","hasInstance","$ZodAsyncError","globalConfig","config","newConfig","jsonStringifyReplacer","toString","cached","getter","nullish","input","cleanRegex","source","start","startsWith","end","endsWith","slice","EVALUATING","defineLazy","object","key","get","set","v","configurable","assignProp","target","prop","writable","mergeDefs","defs","mergedDescriptors","descriptors","getOwnPropertyDescriptors","assign","defineProperties","_args","isObject","Array","isArray","propertyKeyTypes","escapeRegex","str","replace","clone","cl","parent","normalizeParams","_params","extend","schema","shape","o","ctor","prot","hasOwnProperty","call","isPlainObject","checks","existingShape","getOwnPropertyDescriptor","_shape","aborted","x","startIndex","continue","prefixIssues","path","map","iss","unshift","unwrapMessage","finalizeIssue","ctx","full","customError","localeError","reportInput","getLengthableOrigin","JSON","stringify","util.jsonStringifyReplacer","$ZodError","$ZodRealError","toDotPath","_path","segs","seg","push","String","test","join","parse","_Err","_ctx","async","result","run","Promise","core.$ZodAsyncError","e","Err","util.finalizeIssue","core.config","util.captureStackTrace","callee","errors.$ZodRealError","parseAsync","safeParse","success","errors.$ZodError","safeParseAsync","number","boolean","_undefined","$ZodCheck","core.$constructor","onattach","numericOriginMap","bigint","$ZodCheckLessThan","origin","bag","curr","inclusive","maximum","exclusiveMaximum","Number","POSITIVE_INFINITY","check","payload","code","getTime","abort","$ZodCheckGreaterThan","minimum","exclusiveMinimum","NEGATIVE_INFINITY","$ZodCheckMaxLength","when","val","util.nullish","util.getLengthableOrigin","$ZodCheckMinLength","$ZodCheckLengthEquals","tooBig","exact","version","major","minor","patch","$ZodType","ch","runChecks","asyncResult","isAborted","util.aborted","currLen","resolve","then","handleCanaryResult","canary","checkResult","skipChecks","direction","util.defineLazy","validate","r","vendor","$ZodString","pattern","patterns","pop","RegExp","coerce","expected","$ZodNumber","regexes.number","isNaN","isFinite","received","$ZodBoolean","regexes.boolean","Boolean","$ZodUndefined","regexes.undefined","values","optin","optout","$ZodAny","$ZodDate","Date","_err","isDate","handleArrayResult","final","index","util.prefixIssues","$ZodArray","proms","item","element","all","handlePropertyResult","isOptionalOut","normalizeDef","okeys","filter","keySet","numKeys","optionalKeys","$ZodObject","desc","sh","newSh","_normalized","util.cached","propValues","field","util.isObject","catchall","el","unrecognized","_catchall","t","type","handleCatchall","handleUnionResults","results","nonaborted","errors","$ZodUnion","options","some","every","flatMap","option","from","p","util.cleanRegex","single","first","$ZodDiscriminatedUnion","_super","pv","indexOf","entries","disc","opts","Map","discriminator","size","opt","unionFallback","note","$ZodTuple","items","reversedIndex","reverse","findIndex","optStart","rest","tooSmall","handleTupleResult","$ZodEnum","numericValues","util.getEnumValues","valuesSet","util.propertyKeyTypes","util.escapeRegex","$ZodLiteral","handleOptionalResult","$ZodOptional","innerType","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","args","util.issue","$ZodRegistry","_map","WeakMap","_idmap","_meta","meta","id","clear","remove","delete","pm","f","_string","Class","util.normalizeParams","_number","_boolean","_any","_date","_lte","checks.$ZodCheckLessThan","_gt","checks.$ZodCheckGreaterThan","_gte","_positive","_maxLength","checks.$ZodCheckMaxLength","_minLength","checks.$ZodCheckMinLength","_length","checks.$ZodCheckLengthEquals","_refine","globalThis","__zod_globalRegistry","ZodMiniType","core.$ZodType","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","with","_def","core.clone","brand","register","reg","apply","ZodMiniString","core.$ZodString","string","core._string","ZodMiniNumber","core.$ZodNumber","core._number","ZodMiniBoolean","core.$ZodBoolean","core._boolean","ZodMiniUndefined","core.$ZodUndefined","core._undefined","ZodMiniAny","core.$ZodAny","any","ZodMiniDate","core.$ZodDate","date","core._date","ZodMiniArray","core.$ZodArray","array","keyof","_enum","ZodMiniObject","core.$ZodObject","util.extend","partial","mask","oldShape","util.partial","ZodMiniOptional","ZodMiniUnion","core.$ZodUnion","union","ZodMiniDiscriminatedUnion","core.$ZodDiscriminatedUnion","discriminatedUnion","ZodMiniTuple","core.$ZodTuple","tuple","_paramsOrRest","hasRest","ZodMiniEnum","core.$ZodEnum","fromEntries","ZodMiniLiteral","core.$ZodLiteral","literal","core.$ZodOptional","optional","ZodMiniCustom","core.$ZodCustom","refine","core._refine","commonServiceRequestSchema","z.partial","z.object","apiKey","z.string","commonBaseURL","customServiceBaseURL","language","ValidationError","zodError","lines","sort","a","b","issue","z.prettifyError","callService","template","customApiVersion","getAPIVersion","mergedParams","mergeFromGlobal","apiVersion","validateRequest","mergedSchema","z.extend","z.refine","refinedMergedSchema","refinements","refinement","validation","validateRequestSchema","requestValidation","reject","apiRequest","buildRequest","headers","generateTomTomHeaders","onAPIRequest","apiResponse","sendRequest","onAPIResponse","parseResponse","FetchError","returnOrThrow","response","ok","json","errorBody","contentType","bodyUsed","statusText","includes","detailedError","text","url","fetch","post","method","body","lineStringCoordsSchema","z.array","z.number","geometrySchema","z.enum","coordinates","z.union","radius","z.optional","radiusMeters","bbox","featureSchema","geometry","properties","z.any","featureCollectionSchema","features","hasLngLatSchema","z.tuple","z.minimum","z.maximum","geoJsonbBoxSchema","z.length","geoJSONObjectSchema","hasBBoxSchema","autocompleteSearchRequestSchema","query","position","limit","countries","resultType","freeGlobal","global","freeSelf","self","root","Function","objectProto","nativeObjectToString","symToStringTag","toStringTag","baseGetTag","isOwn","tag","unmasked","getRawTag","objectToString","isObjectLike","isSymbol","arrayMap","iteratee","symbolProto","symbolToString","baseToString","isFunction","uid","coreJsData","maskSrcKey","exec","IE_PROTO","funcToString","toSource","func","reIsHostCtor","funcProto","reIsNative","baseIsNative","getNative","getValue","nativeNow","now","count","lastCalled","baseSetToString","setToString","stamp","remaining","arguments","reIsUint","isIndex","baseAssignValue","eq","other","assignValue","objValue","nativeMax","Math","max","isLength","baseIsArguments","propertyIsEnumerable","isArguments","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","typedArrayTags","baseUnary","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","n","baseTimes","baseKeysIn","nativeKeysIn","Ctor","isProto","keysIn","reIsDeepProp","reIsPlainProp","nativeCreate","Hash","entry","assocIndexOf","__data__","splice","ListCache","getMapData","MapCache","hash","memoize","resolver","TypeError","memoized","cache","Cache","rePropName","reEscapeChar","stringToPath","memoizeCapped","charCodeAt","match","quote","subString","castPath","isKey","toKey","arrayPush","offset","spreadableSymbol","isConcatSpreadable","isFlattenable","flatten","depth","predicate","isStrict","baseFlatten","getPrototype","transform","arg","overArg","getPrototypeOf","objectCtorString","Stack","pairs","LARGE_ARRAY_SIZE","stubArray","allocUnsafe","nativeGetSymbols","getOwnPropertySymbols","getSymbols","resIndex","arrayFilter","symbol","getSymbolsIn","getAllKeysIn","keysFunc","symbolsFunc","baseGetAllKeys","DataView","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","Uint8Array","cloneArrayBuffer","arrayBuffer","byteLength","reFlags","symbolValueOf","valueOf","initCloneByTag","isDeep","regexp","dataView","buffer","byteOffset","typedArray","cloneTypedArray","lastIndex","nodeIsMap","isMap","nodeIsSet","isSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","stack","initCloneArray","isFunc","stacked","forEach","subValue","props","arrayEach","baseGet","baseSlice","isNil","baseUnset","isRootPrimitive","obj","last","customOmitClone","omit","otherArgs","thisArg","overRest","flatRest","paths","isNew","newValue","copyObject","CLONE_DEEP_FLAG","appendCommonParams","urlParams","append","appendByRepeatingParamName","paramName","paramArray","param","appendByJoiningParamValue","appendOptionalParam","appendLatLonParamsFromPosition","hasLngLat","getPosition","PLACES_URL_PATH","appendCommonSearchParams","searchUrl","searchParams","fuelTypes","indexes","poiBrands","poiCategories","poiCategory","poiCategoriesToID","connectors","mapcodes","extendedPostalCodesFor","minPowerKW","maxPowerKW","view","openingHours","timeZone","relatedPois","geographyTypes","buildAutocompleteSearchRequest","URL","mergedOptions","csvLatLngToPosition","csv","splitLatLng","split","positionToCSVLatLon","apiToGeoJSONBBox","apiBBox","westSouth","eastNorth","topLeftPoint","lon","btmRightPoint","lat","southWest","northEast","latLonAPIToPosition","point","parseAutocompleteSearchResponse","geoBias","context","autocompleteSearchTemplate","autocompleteSearch","customTemplate","customize","buildEVChargingStationsAvailabilityRequest","buildUrlBasePath","toChargingSpeed","powerInKW","toChargingPointAvailability","chargingStations","availability","statusCounts","station","chargingPoint","chargingPoints","areEqual","connectorA","connectorB","ratedPowerKW","addConnectorCountAndStatus","availabilities","connector","existingAvailability","find","connectorAvailability","toConnectorCounts","counts","existingCount","connectorCount","addConnectorCount","toConnectorBasedAvailabilities","parseMoment","momentApi","year","month","day","dateYyyymmdd","splitDate","parseInt","parseYyyymmddDate","dateYYYYMMDD","hour","minute","alwaysOpenInThisPeriod","timeRanges","parseOpeningHours","openingHoursApi","timeRangeApi","startTime","endTime","mode","alwaysOpenThisPeriod","parseSearchAPIResult","entryPoints","poi","dist","boundingBox","chargingPark","connectorType","chargingSpeed","toPointGeometry","distance","entrypoint","brands","categoryIds","categorySet","category","parseSummaryAPI","summary","parseEVChargingStationsAvailabilityResponse","accessType","stations","chargingPointAvailability","connectorAvailabilities","evChargingStationsAvailabilityTemplate","apiError","errorMessage","commonGeocodeAndFuzzySearchParamsSchema","typeahead","z.boolean","commonPlacesParamsSchema","views","geocodingRequestSchema","arrayToCSV","sampleWithinMaxLength","maxLength","sampledArray","increment","ceil","buildGeocodingRequest","bboxFromGeoJSON","parseApiResult","addressRanges","entityType","geographyType","to","parseGeocodingResponse","bboxOnlyIfWithArea","geocodingTemplate","geometryDataRequestSchema","geometries","z.minLength","z.maxLength","zoom","getGeometryIDs","placesArray","place","dataSources","buildGeometryDataRequest","geometryIDs","appendGeometries","parseGeometryDataResponse","additionalData","geometryData","feature","generateId","geometryDataTemplate","poiCategoriesToIdZodObject","commonSearchParamsSchema","z.keyof","minFuzzyLevel","mixFuzzyLevel","geometrySearchRequestSchema","sdkGeometryToApiGeometries","searchGeometry","vertices","coord","polygonSizeMap","polygon","bboxOfPolygon","bboxFromCoordsArray","polygonSize","abs","findFiftyLargestPolygons","polygonCoords","buildGeometrySearchRequest","geometryList","parseGeometrySearchResponse","geometrySearchTemplate","geometrySearch","placeByIdRequestSchema","entityId","buildPlaceByIdRequest","parsePlaceByIdResponse","placeByIdTemplate","routeTypes","loadTypes","positiveNumber","nonNegativeNumber","percentageNumber","optionalPositiveNumber","optionalNonNegativeNumber","optionalNormalizedNumber","speedToConsumptionRateSchema","speedKMH","consumptionUnitsPer100KM","baseConsumptionModelSchema","efficiency","acceleration","deceleration","uphill","downhill","speedConsumptionArray","combustionConsumptionModelSchema","speedsToConsumptionsLiters","auxiliaryPowerInLitersPerHour","fuelEnergyDensityInMJoulesPerLiter","electricConsumptionModelSchema","speedsToConsumptionsKWH","auxiliaryPowerInkW","consumptionInKWHPerKMAltitudeGain","recuperationInKWHPerKMAltitudeLoss","chargingConnectorSchema","currentType","currentTypes","plugTypes","baseLoadInkW","maxPowerInkW","maxVoltageInV","maxCurrentInA","voltageRange","minVoltageInV","chargingModelSchema","maxChargeKWH","batteryCurve","stateOfChargeInkWh","chargingConnectors","chargingTimeOffsetInSec","combustionEngineModelSchema","consumption","electricEngineModelSchema","charging","vehicleDimensionsSchema","lengthMeters","widthMeters","heightMeters","weightKG","axleWeightKG","vehicleModelSchema","variantId","dimensions","engine","genericVehicleStateSchema","heading","combustionVehicleStateSchema","currentFuelInLiters","electricVehicleStateSchema","currentChargePCT","currentChargeInkWh","electricVehiclePreferencesSchema","chargingPreferences","minChargeAtDestinationPCT","minChargeAtChargingStopsPCT","minChargeAtDestinationInkWh","minChargeAtChargingStopsInkWh","baseVehicleParamsSchema","model","restrictions","maxSpeedKMH","adrCode","commercial","genericVehicleParamsSchema","engineType","z.undefined","state","preferences","vehicleParametersSchema","z.discriminatedUnion","commonRoutingRequestSchema","costModel","avoid","avoidableTypes","traffic","routeType","thrillingParams","hilliness","windingness","travelMode","vehicle","z.date","reachableRangeRequestSchema","budget","maxFerryLengthMeters","buildSpeedToConsumptionString","speedsToConsumptions","speedToConsumption","appendVehicleEngineModel","appendConsumptionEfficiency","appendElectricConsumptionModel","chargingModel","appendChargingModel","consumptionModel","appendCombustionEngine","appendVehicleModel","vehicleParams","appendVehicleDimensions","appendVehicleParams","combustionState","electricState","kwhElectricState","pctElectricState","appendVehicleState","chargingPrefs","kwhChargingPrefs","pctChargingPrefs","appendVehiclePreferences","appendVehicleRestrictions","appendCommonRoutingParams","formattedDate","toISOString","appendWhenParams","buildReachableRangeRequest","getPositionStrict","parseReachableRangeResponse","reachableRange","boundary","longitude","latitude","reachableRangeTemplate","buildRevGeoRequest","lngLat","allowFreeformNewline","returnSpeedLimit","returnRoadUse","roadUses","parseRevGeoResponse","firstApiResult","addresses","sideOfStreet","offsetPosition","address","streetNumber","originalPosition","reverseGeocodingTemplate","returnMatchType","locations","computeAdditionalTravelTimeFor","vehicleHeading","maxAlternatives","sectionTypes","inputSectionTypesWithGuidance","getChargingPreferences","getPositionsFromPath","pathLike","buildLocationsString","routePlanningLocationTypes","useEntryPoint","waypointInputs","waypointInput","lngLatString","getWaypointProps","buildLocationsStringFromWaypoints","firstPoint","firstRoutePlanningLocation","lastRoutePlanningLocation","lastPoint","positions","getFirstAndLastPoints","toLatLngPointApi","buildlocationsPostData","useEntryPoints","supportingPoints","pointWaypoints","routePlanningLocation","routePlanningLocationIndex","pathRoutePlanningLocation","supportingPointsLengthBeforePath","sections","leg","legIndex","supportingPointIndex","startPointIndex","waypointSourceType","appendPathPostData","waypoint","appendWaypointPostData","buildCalculateRouteRequest","getRoutePlanningLocationType","guidance","phonetics","roadShieldReferences","appendGuidanceParams","instructionsInclude","effectiveSectionTypes","inputSectionTypes","sectionType","appendSectionTypes","representation","extendedRouteRepresentations","postData","pathsIncluded","isLdevr","vehicleModel","chargingParameters","buildPostData","toCurrentType","apiCurrentType","toChargingStop","chargingInformationAtEndOfLeg","chargingConnectionInfo","chargingParkLocation","coordinate","addressParts","street","houseNumber","freeformAddress","chargingParkId","streetName","city","municipality","region","countrySubdivision","postalCode","country","plugType","chargingPlugType","currentInA","chargingCurrentInA","voltageInV","chargingVoltageInV","chargingPowerInkW","chargingCurrentType","targetChargeInPCT","targetChargeInkWh","chargingParkPowerInkW","chargingParkSpeed","parseSummary","apiSummary","lengthInMeters","historicTrafficTravelTimeInSeconds","liveTrafficIncidentsTravelTimeInSeconds","noTrafficTravelTimeInSeconds","trafficDelayInSeconds","trafficLengthInMeters","travelTimeInSeconds","departureTime","arrivalTime","deviationDistanceInMeters","deviationDistance","fuelConsumptionInLiters","deviationPoint","totalChargingTimeInSeconds","batteryConsumptionInkWh","batteryConsumptionInPCT","remainingChargeAtArrivalInkWh","remainingChargeAtArrivalInPCT","parseLegSectionProps","apiLegs","reduce","accumulatedParsedLegs","nextApiLeg","currentIndex","lastLegEndPointIndex","endPointIndex","points","toSectionProps","apiSection","toRoadStretchSectionProps","importantRoadStretchIndex","roadNumbers","roadNumber","toCountrySectionProps","countryCodeISO3","countryCode","toVehicleRestrictedSectionProps","toTrafficCategories","tec","causes","cause","tecMainCauseCode","calculateTrafficCategory","mainCauseCode","simpleCategory","toTrafficSectionProps","delayInSeconds","effectiveSpeedInKmh","categories","magnitudeOfDelay","indexedMagnitudes","toLaneSectionProps","lanes","laneSeparators","toSpeedLimitSectionProps","maxSpeedLimitInKmh","toRoadShieldsSectionProps","ensureInit","getSectionMapping","mappingFunction","parseSections","apiRoute","legs","apiSections","sectionMapping","mappedSection","parseSectionsAndAppendToResult","DELTA","similar","parseGuidance","apiGuidance","instructions","lastInstructionPathIndex","apiInstruction","maneuverPoint","pathIndex","pathPointIndex","routePath","apiPoint","parseCalculateRouteResponse","routes","apiLeg","progress","parseRoute","calculateRouteTemplate","description","customizeService","reverseGeocode","revgeoCustomize","geocode","geocodeCustomize","geometryDataCustomize","geometrySearchCustomize","calculateRoute","reachableRangeCustomize","evChargingStationsAvailability","evChargingStationsAvailabilityCustomize","placeByID","placeByIdCustomize","autocompleteCustomize","getPlaceWithEVAvailability","availabilityId","chargingAvailability","console","getPlacesWithEVAvailability","places","enhancedPlaces","placeWithAvailability","excludeIfAvailabilityUnknown","hasChargingAvailability","geocodeOne","geometryResult","placesIdMap","acc","geometryId","placeCoordinates","mergePlacesWithGeometries","placeById","fuzzySearchRequestSchema","maxFuzzyLevel","queryIntentApiToSdk","intentApi","intent","details","fuzzySearchTemplate","queryIntent","search","fuzzySearch","searchOne"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144]}
|