{"version":3,"file":"static/js/main.9279f654.js","mappings":"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","sources":["../node_modules/@babel/runtime/regenerator/index.js","../node_modules/@sentry/hub/src/session.ts","../node_modules/@sentry/hub/src/hub.ts","../node_modules/@sentry/hub/src/scope.ts","../node_modules/@sentry/tracing/src/constants.ts","../node_modules/@sentry/tracing/src/errors.ts","../node_modules/@sentry/tracing/src/hubextensions.ts","../node_modules/@sentry/tracing/src/idletransaction.ts","../node_modules/@sentry/tracing/src/span.ts","../node_modules/@sentry/tracing/src/transaction.ts","../node_modules/@sentry/tracing/src/utils.ts","../node_modules/@sentry/utils/src/browser.ts","../node_modules/@sentry/utils/src/env.ts","../node_modules/@sentry/utils/src/global.ts","../node_modules/@sentry/utils/src/instrument.ts","../node_modules/@sentry/utils/src/is.ts","../node_modules/@sentry/utils/src/logger.ts","../node_modules/@sentry/utils/src/misc.ts","../node_modules/@sentry/utils/src/node.ts","../node_modules/@sentry/utils/src/object.ts","../node_modules/@sentry/utils/src/stacktrace.ts","../node_modules/@sentry/utils/src/string.ts","../node_modules/@sentry/utils/src/supports.ts","../node_modules/@sentry/utils/src/syncpromise.ts","../node_modules/@sentry/utils/src/time.ts","../node_modules/axios/index.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/cancel/Cancel.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/createError.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/enhanceError.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/defaults.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/utils.js","../node_modules/classnames/bind.js","../node_modules/classnames/index.js","../node_modules/clipboard/dist/clipboard.js","../node_modules/file-saver/src/FileSaver.js","../node_modules/fuse.js/src/fuse.js","../node_modules/preact/hooks/src/index.js","../node_modules/preact/compat/src/util.js","../node_modules/preact/compat/src/PureComponent.js","../node_modules/preact/compat/src/memo.js","../node_modules/preact/compat/src/forwardRef.js","../node_modules/preact/compat/src/Children.js","../node_modules/preact/compat/src/suspense.js","../node_modules/preact/compat/src/suspense-list.js","../node_modules/preact/compat/src/portals.js","../node_modules/preact/compat/src/render.js","../node_modules/preact/compat/src/index.js","../node_modules/preact/src/constants.js","../node_modules/preact/src/util.js","../node_modules/preact/src/options.js","../node_modules/preact/src/create-element.js","../node_modules/preact/src/component.js","../node_modules/preact/src/create-context.js","../node_modules/preact/src/diff/children.js","../node_modules/preact/src/diff/props.js","../node_modules/preact/src/diff/index.js","../node_modules/preact/src/render.js","../node_modules/preact/src/clone-element.js","../node_modules/preact/src/diff/catch-error.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-input-mask/index.js","../node_modules/react-input-mask/lib/react-input-mask.production.min.js","../node_modules/libphonenumber-js/source/parsePhoneNumber.js","../node_modules/libphonenumber-js/source/constants.js","../node_modules/libphonenumber-js/source/ParseError.js","../node_modules/libphonenumber-js/source/tools/semver-compare.js","../node_modules/libphonenumber-js/source/metadata.js","../node_modules/libphonenumber-js/source/helpers/extension/createExtensionPattern.js","../node_modules/libphonenumber-js/source/helpers/isViablePhoneNumber.js","../node_modules/libphonenumber-js/source/helpers/extension/extractExtension.js","../node_modules/libphonenumber-js/source/helpers/parseDigits.js","../node_modules/libphonenumber-js/source/parseIncompletePhoneNumber.js","../node_modules/libphonenumber-js/source/helpers/checkNumberLength.js","../node_modules/libphonenumber-js/source/helpers/mergeArrays.js","../node_modules/libphonenumber-js/source/isPossibleNumber_.js","../node_modules/libphonenumber-js/source/helpers/matchesEntirely.js","../node_modules/libphonenumber-js/source/helpers/getNumberType.js","../node_modules/libphonenumber-js/source/helpers/applyInternationalSeparatorStyle.js","../node_modules/libphonenumber-js/source/helpers/formatNationalNumberUsingFormat.js","../node_modules/libphonenumber-js/source/helpers/getIddPrefix.js","../node_modules/libphonenumber-js/source/format_.js","../node_modules/libphonenumber-js/source/helpers/RFC3966.js","../node_modules/libphonenumber-js/source/PhoneNumber.js","../node_modules/libphonenumber-js/source/validate_.js","../node_modules/libphonenumber-js/source/helpers/stripIddPrefix.js","../node_modules/libphonenumber-js/source/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","../node_modules/libphonenumber-js/source/helpers/extractNationalNumber.js","../node_modules/libphonenumber-js/source/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","../node_modules/libphonenumber-js/source/helpers/extractCountryCallingCode.js","../node_modules/libphonenumber-js/source/helpers/getCountryByCallingCode.js","../node_modules/libphonenumber-js/source/parse_.js","../node_modules/libphonenumber-js/source/parsePhoneNumber_.js","../node_modules/libphonenumber-js/source/parsePhoneNumberFromString_.js","../node_modules/libphonenumber-js/source/parsePhoneNumberFromString.js","../node_modules/react-phone-number-input/source/libphonenumber/formatPhoneNumber.js","../node_modules/libphonenumber-js/source/isValidPhoneNumber.js","../node_modules/libphonenumber-js/source/isPossiblePhoneNumber.js","../node_modules/libphonenumber-js/source/getCountries.js","../node_modules/react-phone-number-input/source/PropTypes.js","../node_modules/input-format/source/helpers.js","../node_modules/input-format/source/closeBraces.js","../node_modules/input-format/source/format.js","../node_modules/input-format/source/templateFormatter.js","../node_modules/input-format/source/dom.js","../node_modules/input-format/source/inputControl.js","../node_modules/input-format/source/parse.js","../node_modules/input-format/source/edit.js","../node_modules/input-format/source/react/Input.js","../node_modules/libphonenumber-js/source/AsYouTypeState.js","../node_modules/libphonenumber-js/source/AsYouTypeFormatter.util.js","../node_modules/libphonenumber-js/source/AsYouTypeFormatter.complete.js","../node_modules/libphonenumber-js/source/AsYouTypeFormatter.PatternMatcher.js","../node_modules/libphonenumber-js/source/AsYouTypeFormatter.js","../node_modules/libphonenumber-js/source/AsYouTypeParser.js","../node_modules/libphonenumber-js/source/AsYouType.js","../node_modules/react-phone-number-input/source/helpers/inputValuePrefix.js","../node_modules/react-phone-number-input/source/InputSmart.js","../node_modules/react-phone-number-input/source/InputBasic.js","../node_modules/libphonenumber-js/source/formatIncompletePhoneNumber.js","../node_modules/country-flag-icons/source/unicode.js","../node_modules/react-phone-number-input/source/CountrySelect.js","../node_modules/react-phone-number-input/source/Flag.js","../node_modules/react-phone-number-input/source/InternationalIcon.js","../node_modules/react-phone-number-input/source/helpers/countries.js","../node_modules/react-phone-number-input/source/CountryIcon.js","../node_modules/react-phone-number-input/source/helpers/getInternationalPhoneNumberPrefix.js","../node_modules/react-phone-number-input/source/helpers/phoneInputHelpers.js","../node_modules/react-phone-number-input/source/PhoneInputWithCountry.js","../node_modules/react-phone-number-input/source/helpers/getPhoneInputWithCountryStateUpdateFromNewProps.js","../node_modules/react-phone-number-input/source/PhoneInputWithCountryDefault.js","../node_modules/react-phone-number-input/min/index.js","../node_modules/react-use/lib/misc/util.js","../node_modules/react-use/lib/useLocalStorage.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/tslib/tslib.es6.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/preact/jsx-runtime/src/index.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/harmony module decorator","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/css loading","../webpack/runtime/jsonp chunk loading","../node_modules/dequal/lite/index.mjs","../node_modules/swr/esm/libs/hash.js","../node_modules/swr/esm/cache.js","../node_modules/swr/esm/libs/web-preset.js","../node_modules/swr/esm/config.js","../node_modules/swr/esm/env.js","../node_modules/swr/esm/swr-config-context.js","../node_modules/swr/esm/use-swr.js","../node_modules/swr/esm/index.js","../node_modules/@sentry/core/src/version.ts","../node_modules/@sentry/core/src/integrations/inboundfilters.ts","../node_modules/@sentry/core/src/integrations/functiontostring.ts","../node_modules/@sentry/utils/src/polyfill.ts","../node_modules/@sentry/utils/src/error.ts","../node_modules/@sentry/utils/src/dsn.ts","../node_modules/@sentry/utils/src/normalize.ts","../node_modules/@sentry/utils/src/memo.ts","../node_modules/@sentry/core/src/integration.ts","../node_modules/@sentry/core/src/baseclient.ts","../node_modules/@sentry/core/src/api.ts","../node_modules/@sentry/utils/src/envelope.ts","../node_modules/@sentry/core/src/request.ts","../node_modules/@sentry/core/src/transports/noop.ts","../node_modules/@sentry/types/src/severity.ts","../node_modules/@sentry/core/src/basebackend.ts","../node_modules/@sentry/src/stack-parsers.ts","../node_modules/@sentry/src/eventbuilder.ts","../node_modules/@sentry/utils/src/promisebuffer.ts","../node_modules/@sentry/utils/src/ratelimit.ts","../node_modules/@sentry/src/transports/utils.ts","../node_modules/@sentry/utils/src/async.ts","../node_modules/@sentry/src/transports/base.ts","../node_modules/@sentry/utils/src/clientreport.ts","../node_modules/@sentry/utils/src/status.ts","../node_modules/@sentry/src/transports/fetch.ts","../node_modules/@sentry/src/transports/xhr.ts","../node_modules/@sentry/src/backend.ts","../node_modules/@sentry/minimal/src/index.ts","../node_modules/@sentry/src/helpers.ts","../node_modules/@sentry/utils/src/enums.ts","../node_modules/@sentry/utils/src/severity.ts","../node_modules/@sentry/src/integrations/breadcrumbs.ts","../node_modules/@sentry/src/client.ts","../node_modules/@sentry/src/integrations/trycatch.ts","../node_modules/@sentry/src/integrations/globalhandlers.ts","../node_modules/@sentry/src/integrations/linkederrors.ts","../node_modules/@sentry/src/integrations/dedupe.ts","../node_modules/@sentry/src/integrations/useragent.ts","../node_modules/@sentry/src/sdk.ts","../node_modules/@sentry/core/src/sdk.ts","../node_modules/@sentry/utils/src/tracing.ts","../node_modules/@sentry/tracing/src/browser/backgroundtab.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/lib/bindReporter.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/lib/initMetric.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/lib/generateUniqueID.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/lib/observe.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/lib/onHidden.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/lib/getVisibilityWatcher.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/getLCP.ts","../node_modules/@sentry/tracing/src/browser/metrics.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/getCLS.ts","../node_modules/@sentry/tracing/src/browser/web-vitals/getFID.ts","../node_modules/@sentry/tracing/src/browser/request.ts","../node_modules/@sentry/tracing/src/browser/router.ts","../node_modules/@sentry/tracing/src/browser/browsertracing.ts","../node_modules/@sentry/tracing/src/index.ts","reportWebVitals.ts","components/Container/Container.tsx","webpack://@nutrilogic/self/./src/components/Container/Container.module.css?8fba","icons/logo-short.svg","types/UserType.ts","components/Title/Title.tsx","webpack://@nutrilogic/self/./src/components/Title/Title.module.css?b0d0","api/getPublicToken.ts","api/getBaseApiUrl.ts","api/client.ts","api/getLinkInfo.ts","api/hybrid.ts","utils/getQueryVariable.ts","api/saveRegistrationData.ts","api/get.ts","utils/generatePDFFromTemplate.ts","utils/tranformElementsListForLite.ts","utils/insertCss.ts","api/sendBIMetrics.ts","utils/useStateManager/useRegistration.ts","api/getContactToken.ts","api/dietanamnez.ts","utils/useStateManager/useDietanamnez.ts","icons/welcome_ration.svg","utils/useStateManager/index.ts","components/ScreenInfo/ScreenInfo.tsx","webpack://@nutrilogic/self/./src/components/ScreenInfo/ScreenInfo.module.css?e386","components/IconDotLoader/IconDotLoader.tsx","webpack://@nutrilogic/self/./src/components/IconDotLoader/IconDotLoader.module.css?8816","components/Button/Button.tsx","webpack://@nutrilogic/self/./src/components/Button/Button.module.css?32fa","icons/welcome_schedule.svg","icons/welcome_abort.svg","icons/welcome_trust.svg","icons/welcome_time.svg","types/DietanamnezType.ts","components/WelcomeCarousel/WelcomeCarousel.tsx","webpack://@nutrilogic/self/./src/components/WelcomeCarousel/WelcomeCarousel.module.css?1111","screens/Welcome/Welcome.tsx","webpack://@nutrilogic/self/./src/screens/Welcome/Welcome.module.css?67c8","icons/logo_small.svg","icons/arrow_small_l.svg","components/Footer/Footer.tsx","webpack://@nutrilogic/self/./src/components/Footer/Footer.module.css?ff1b","screens/InvalidLink/InvalidLink.tsx","webpack://@nutrilogic/self/./src/screens/InvalidLink/InvalidLink.module.css?a6e6","components/ProgressBar/ProgressBar.tsx","webpack://@nutrilogic/self/./src/components/ProgressBar/ProgressBar.module.css?8682","components/Screen/Screen.tsx","webpack://@nutrilogic/self/./src/components/Screen/Screen.module.css?e831","screens/Agreement/Agreement.tsx","webpack://@nutrilogic/self/./src/screens/Agreement/Agreement.module.css?5225","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/final-form/dist/final-form.es.js","../node_modules/react-final-form/dist/react-final-form.es.js","api/categories.ts","icons/chevron-right.svg","components/Input/Field.tsx","webpack://@nutrilogic/self/./src/components/Input/Field.module.css?5245","components/InputDate/InputDate.tsx","components/InputPhone/InputPhone.tsx","webpack://@nutrilogic/self/./src/components/InputPhone/InputPhone.module.css?516b","components/Radio/Radio.tsx","webpack://@nutrilogic/self/./src/components/Radio/Radio.module.css?a4d8","components/RadioGroup/RadioGroup.tsx","webpack://@nutrilogic/self/./src/components/RadioGroup/RadioGroup.module.css?280c","icons/chevron-left.svg","icons/search_small.svg","components/AnthropometryFields/AnthropometryFields.tsx","components/MobileSelect/MobileSelect.tsx","webpack://@nutrilogic/self/./src/components/MobileSelect/MobileSelect.module.css?6ab4","components/AnthropometryFields/validation.tsx","webpack://@nutrilogic/self/./src/components/AnthropometryFields/AnthropometryFields.module.css?a4ed","icons/logo64.svg","screens/Registration/Registration.tsx","components/PageLoader/PageLoader.tsx","webpack://@nutrilogic/self/./src/components/PageLoader/PageLoader.module.css?03d3","screens/Registration/validation.tsx","webpack://@nutrilogic/self/./src/screens/Registration/Registration.module.css?ef59","screens/Anthropometry/Anthropometry.tsx","screens/Anthropometry/validation.tsx","webpack://@nutrilogic/self/./src/screens/Anthropometry/Anthropometry.module.css?9630","icons/checkbox_check.svg","icons/cross_small.svg","components/Checkbox/Checkbox.tsx","webpack://@nutrilogic/self/./src/components/Checkbox/Checkbox.module.css?d81b","components/SearchBox/SearchBox.tsx","webpack://@nutrilogic/self/./src/components/SearchBox/SearchBox.module.css?1977","screens/Allergens/Allergens.tsx","screens/RegistrationSuccess/RegistrationSuccess.tsx","webpack://@nutrilogic/self/./src/screens/RegistrationSuccess/RegistrationSuccess.module.css?804a","components/Loader/Loader.tsx","webpack://@nutrilogic/self/./src/components/Loader/Loader.module.css?02db","screens/Dietanamnez/Dietanamnez.tsx","webpack://@nutrilogic/self/./src/screens/Dietanamnez/Dietanamnez.module.css?34d9","../node_modules/react-use/esm/misc/util.js","icons/info.svg","../node_modules/react-use/esm/useLocalStorage.js","components/FrequencyList/FrequencyList.tsx","webpack://@nutrilogic/self/./src/components/FrequencyList/FrequencyList.module.css?a727","components/Tutorial/Tutorial.tsx","webpack://@nutrilogic/self/./src/components/Tutorial/Tutorial.module.css?f93a","components/DietanamnezTile/assets/placeholder.svg","components/DietanamnezTileForm/DietanamnezTileForm.tsx","webpack://@nutrilogic/self/./src/components/DietanamnezTileForm/DietanamnezTileForm.module.css?7237","webpack://@nutrilogic/self/./src/components/DietanamnezTile/DietanamnezTile.module.css?704d","components/DietanamnezTile/DietanamnezTile.tsx","screens/WelcomeBack/WelcomeBack.tsx","webpack://@nutrilogic/self/./src/screens/WelcomeBack/WelcomeBack.module.css?2428","screens/DietanamnezTiles/utils/getVisibleTiles.ts","webpack://@nutrilogic/self/./src/screens/DietanamnezTiles/DietanamnezTiles.module.css?cf12","screens/DietanamnezTiles/DietanamnezTiles.tsx","utils/getEnd.ts","components/DiagramChart/DiagramChart.tsx","webpack://@nutrilogic/self/./src/components/DiagramChart/DiagramChart.module.css?654f","utils/getIsInRange.ts","components/DeficitModal/DeficitModal.tsx","webpack://@nutrilogic/self/./src/components/DeficitModal/DeficitModal.module.css?6b07","components/Modal/Modal.tsx","webpack://@nutrilogic/self/./src/components/Modal/Modal.module.css?e6b3","components/DeficitItem/DeficitItem.tsx","webpack://@nutrilogic/self/./src/components/DeficitItem/DeficitItem.module.css?d9ca","screens/Deficit/Deficit.tsx","webpack://@nutrilogic/self/./src/screens/Deficit/Deficit.module.css?2f7e","components/ScreenMiratorg/ScreenMiratorg.tsx","webpack://@nutrilogic/self/./src/components/ScreenMiratorg/ScreenMiratorg.module.css?24db","utils/saveOrPrintBlob.ts","webpack://@nutrilogic/self/./src/screens/Product/Product.module.css?ca58","../node_modules/@sentry/react/src/sdk.ts","screens/Product/Product.tsx","screens/Supplement/Supplement.tsx","screens/Finish/Finish.tsx","webpack://@nutrilogic/self/./src/screens/Finish/Finish.module.css?15e4","pages/Root/Root.tsx","index.tsx"],"sourcesContent":["module.exports = require(\"regenerator-runtime\");\n","import { Session as SessionInterface, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n\n/**\n * @inheritdoc\n */\nexport class Session implements SessionInterface {\n public userAgent?: string;\n public errors: number = 0;\n public release?: string;\n public sid: string = uuid4();\n public did?: string;\n public timestamp: number;\n public started: number;\n public duration?: number = 0;\n public status: SessionStatus = 'ok';\n public environment?: string;\n public ipAddress?: string;\n public init: boolean = true;\n public ignoreDuration: boolean = false;\n\n public constructor(context?: Omit) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n this.timestamp = startingTime;\n this.started = startingTime;\n if (context) {\n this.update(context);\n }\n }\n\n /** JSDoc */\n // eslint-disable-next-line complexity\n public update(context: SessionContext = {}): void {\n if (context.user) {\n if (!this.ipAddress && context.user.ip_address) {\n this.ipAddress = context.user.ip_address;\n }\n\n if (!this.did && !context.did) {\n this.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n this.timestamp = context.timestamp || timestampInSeconds();\n if (context.ignoreDuration) {\n this.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n this.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n this.init = context.init;\n }\n if (!this.did && context.did) {\n this.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n this.started = context.started;\n }\n if (this.ignoreDuration) {\n this.duration = undefined;\n } else if (typeof context.duration === 'number') {\n this.duration = context.duration;\n } else {\n const duration = this.timestamp - this.started;\n this.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n this.release = context.release;\n }\n if (context.environment) {\n this.environment = context.environment;\n }\n if (!this.ipAddress && context.ipAddress) {\n this.ipAddress = context.ipAddress;\n }\n if (!this.userAgent && context.userAgent) {\n this.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n this.errors = context.errors;\n }\n if (context.status) {\n this.status = context.status;\n }\n }\n\n /** JSDoc */\n public close(status?: Exclude): void {\n if (status) {\n this.update({ status });\n } else if (this.status === 'ok') {\n this.update({ status: 'exited' });\n } else {\n this.update();\n }\n }\n\n /** JSDoc */\n public toJSON(): {\n init: boolean;\n sid: string;\n did?: string;\n timestamp: string;\n started: string;\n duration?: number;\n status: SessionStatus;\n errors: number;\n attrs?: {\n release?: string;\n environment?: string;\n user_agent?: string;\n ip_address?: string;\n };\n } {\n return dropUndefinedKeys({\n sid: `${this.sid}`,\n init: this.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(this.started * 1000).toISOString(),\n timestamp: new Date(this.timestamp * 1000).toISOString(),\n status: this.status,\n errors: this.errors,\n did: typeof this.did === 'number' || typeof this.did === 'string' ? `${this.did}` : undefined,\n duration: this.duration,\n attrs: {\n release: this.release,\n environment: this.environment,\n ip_address: this.ipAddress,\n user_agent: this.userAgent,\n },\n });\n }\n}\n","/* eslint-disable max-lines */\nimport {\n Breadcrumb,\n BreadcrumbHint,\n Client,\n CustomSamplingContext,\n Event,\n EventHint,\n Extra,\n Extras,\n Hub as HubInterface,\n Integration,\n IntegrationClass,\n Primitive,\n SessionContext,\n Severity,\n Span,\n SpanContext,\n Transaction,\n TransactionContext,\n User,\n} from '@sentry/types';\nimport {\n consoleSandbox,\n dateTimestampInSeconds,\n getGlobalObject,\n isDebugBuild,\n isNodeEnv,\n logger,\n uuid4,\n} from '@sentry/utils';\n\nimport { Scope } from './scope';\nimport { Session } from './session';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport const API_VERSION = 4;\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * A layer in the process stack.\n * @hidden\n */\nexport interface Layer {\n client?: Client;\n scope?: Scope;\n}\n\n/**\n * An object that contains a hub and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n __SENTRY__?: {\n hub?: Hub;\n /**\n * Extra Hub properties injected by various SDKs\n */\n integrations?: Integration[];\n extensions?: {\n /** Hack to prevent bundlers from breaking our usage of the domain package in the cross-platform Hub package */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n domain?: { [key: string]: any };\n } & {\n /** Extension methods for the hub, which are bound to the current Hub instance */\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n };\n}\n\n/**\n * @hidden\n * @deprecated Can be removed once `Hub.getActiveDomain` is removed.\n */\nexport interface DomainAsCarrier extends Carrier {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n members: { [key: string]: any }[];\n}\n\n/**\n * @inheritDoc\n */\nexport class Hub implements HubInterface {\n /** Is a {@link Layer}[] containing the client and scope */\n private readonly _stack: Layer[] = [{}];\n\n /** Contains the last event id of a captured event. */\n private _lastEventId?: string;\n\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n public constructor(client?: Client, scope: Scope = new Scope(), private readonly _version: number = API_VERSION) {\n this.getStackTop().scope = scope;\n if (client) {\n this.bindClient(client);\n }\n }\n\n /**\n * @inheritDoc\n */\n public isOlderThan(version: number): boolean {\n return this._version < version;\n }\n\n /**\n * @inheritDoc\n */\n public bindClient(client?: Client): void {\n const top = this.getStackTop();\n top.client = client;\n if (client && client.setupIntegrations) {\n client.setupIntegrations();\n }\n }\n\n /**\n * @inheritDoc\n */\n public pushScope(): Scope {\n // We want to clone the content of prev scope\n const scope = Scope.clone(this.getScope());\n this.getStack().push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * @inheritDoc\n */\n public popScope(): boolean {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n }\n\n /**\n * @inheritDoc\n */\n public withScope(callback: (scope: Scope) => void): void {\n const scope = this.pushScope();\n try {\n callback(scope);\n } finally {\n this.popScope();\n }\n }\n\n /**\n * @inheritDoc\n */\n public getClient(): C | undefined {\n return this.getStackTop().client as C;\n }\n\n /** Returns the scope of the top stack. */\n public getScope(): Scope | undefined {\n return this.getStackTop().scope;\n }\n\n /** Returns the scope stack for domains or the process. */\n public getStack(): Layer[] {\n return this._stack;\n }\n\n /** Returns the topmost scope layer in the order domain > local > process. */\n public getStackTop(): Layer {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n public captureException(exception: any, hint?: EventHint): string {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n let finalHint = hint;\n\n // If there's no explicit hint provided, mimic the same thing that would happen\n // in the minimal itself to create a consistent behavior.\n // We don't do this in the client, as it's the lowest level API, and doing this,\n // would prevent user from having full control over direct calls.\n if (!hint) {\n let syntheticException: Error;\n try {\n throw new Error('Sentry syntheticException');\n } catch (exception) {\n syntheticException = exception as Error;\n }\n finalHint = {\n originalException: exception,\n syntheticException,\n };\n }\n\n this._invokeClient('captureException', exception, {\n ...finalHint,\n event_id: eventId,\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(message: string, level?: Severity, hint?: EventHint): string {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n let finalHint = hint;\n\n // If there's no explicit hint provided, mimic the same thing that would happen\n // in the minimal itself to create a consistent behavior.\n // We don't do this in the client, as it's the lowest level API, and doing this,\n // would prevent user from having full control over direct calls.\n if (!hint) {\n let syntheticException: Error;\n try {\n throw new Error(message);\n } catch (exception) {\n syntheticException = exception as Error;\n }\n finalHint = {\n originalException: message,\n syntheticException,\n };\n }\n\n this._invokeClient('captureMessage', message, level, {\n ...finalHint,\n event_id: eventId,\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n if (event.type !== 'transaction') {\n this._lastEventId = eventId;\n }\n\n this._invokeClient('captureEvent', event, {\n ...hint,\n event_id: eventId,\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public lastEventId(): string | undefined {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n const { scope, client } = this.getStackTop();\n\n if (!scope || !client) return;\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n (client.getOptions && client.getOptions()) || {};\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): void {\n const scope = this.getScope();\n if (scope) scope.setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): void {\n const scope = this.getScope();\n if (scope) scope.setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): void {\n const scope = this.getScope();\n if (scope) scope.setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): void {\n const scope = this.getScope();\n if (scope) scope.setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): void {\n const scope = this.getScope();\n if (scope) scope.setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setContext(name: string, context: { [key: string]: any } | null): void {\n const scope = this.getScope();\n if (scope) scope.setContext(name, context);\n }\n\n /**\n * @inheritDoc\n */\n public configureScope(callback: (scope: Scope) => void): void {\n const { scope, client } = this.getStackTop();\n if (scope && client) {\n callback(scope);\n }\n }\n\n /**\n * @inheritDoc\n */\n public run(callback: (hub: Hub) => void): void {\n const oldHub = makeMain(this);\n try {\n callback(this);\n } finally {\n makeMain(oldHub);\n }\n }\n\n /**\n * @inheritDoc\n */\n public getIntegration(integration: IntegrationClass): T | null {\n const client = this.getClient();\n if (!client) return null;\n try {\n return client.getIntegration(integration);\n } catch (_oO) {\n isDebugBuild() && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n return null;\n }\n }\n\n /**\n * @inheritDoc\n */\n public startSpan(context: SpanContext): Span {\n return this._callExtensionMethod('startSpan', context);\n }\n\n /**\n * @inheritDoc\n */\n public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n }\n\n /**\n * @inheritDoc\n */\n public traceHeaders(): { [key: string]: string } {\n return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n }\n\n /**\n * @inheritDoc\n */\n public captureSession(endSession: boolean = false): void {\n // both send the update and pull the session from the scope\n if (endSession) {\n return this.endSession();\n }\n\n // only send the update\n this._sendSessionUpdate();\n }\n\n /**\n * @inheritDoc\n */\n public endSession(): void {\n const layer = this.getStackTop();\n const scope = layer && layer.scope;\n const session = scope && scope.getSession();\n if (session) {\n session.close();\n }\n this._sendSessionUpdate();\n\n // the session is over; take it off of the scope\n if (scope) {\n scope.setSession();\n }\n }\n\n /**\n * @inheritDoc\n */\n public startSession(context?: SessionContext): Session {\n const { scope, client } = this.getStackTop();\n const { release, environment } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const global = getGlobalObject<{ navigator?: { userAgent?: string } }>();\n const { userAgent } = global.navigator || {};\n\n const session = new Session({\n release,\n environment,\n ...(scope && { user: scope.getUser() }),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n if (scope) {\n // End existing session if there's one\n const currentSession = scope.getSession && scope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n currentSession.update({ status: 'exited' });\n }\n this.endSession();\n\n // Afterwards we set the new session on the scope\n scope.setSession(session);\n }\n\n return session;\n }\n\n /**\n * Sends the current Session on the scope\n */\n private _sendSessionUpdate(): void {\n const { scope, client } = this.getStackTop();\n if (!scope) return;\n\n const session = scope.getSession && scope.getSession();\n if (session) {\n if (client && client.captureSession) {\n client.captureSession(session);\n }\n }\n }\n\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _invokeClient(method: M, ...args: any[]): void {\n const { scope, client } = this.getStackTop();\n if (client && client[method]) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n (client as any)[method](...args, scope);\n }\n }\n\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _callExtensionMethod(method: string, ...args: any[]): T {\n const carrier = getMainCarrier();\n const sentry = carrier.__SENTRY__;\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n isDebugBuild() && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n const carrier = getGlobalObject();\n carrier.__SENTRY__ = carrier.__SENTRY__ || {\n extensions: {},\n hub: undefined,\n };\n return carrier;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nexport function makeMain(hub: Hub): Hub {\n const registry = getMainCarrier();\n const oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nexport function getCurrentHub(): Hub {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n\n // If there's no hub, or its an old API, assign a new one\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n }\n\n // Prefer domains over global if they are there (applicable only to Node environment)\n if (isNodeEnv()) {\n return getHubFromActiveDomain(registry);\n }\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n}\n\n/**\n * Returns the active domain, if one exists\n * @deprecated No longer used; remove in v7\n * @returns The domain, or undefined if there is no active domain\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getActiveDomain(): DomainAsCarrier | undefined {\n isDebugBuild() && logger.warn('Function `getActiveDomain` is deprecated and will be removed in a future version.');\n\n const sentry = getMainCarrier().__SENTRY__;\n\n return sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n}\n\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry: Carrier): Hub {\n try {\n const sentry = getMainCarrier().__SENTRY__;\n const activeDomain = sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n\n // If there's no active domain, just return global hub\n if (!activeDomain) {\n return getHubFromCarrier(registry);\n }\n\n // If there's no hub on current domain, or it's an old API, assign a new one\n if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n const registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n }\n\n // Return hub that lives on a domain\n return getHubFromCarrier(activeDomain);\n } catch (_Oo) {\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n }\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier: Carrier): boolean {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) return carrier.__SENTRY__.hub;\n carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n carrier.__SENTRY__.hub = new Hub();\n return carrier.__SENTRY__.hub;\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n if (!carrier) return false;\n carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n carrier.__SENTRY__.hub = hub;\n return true;\n}\n","/* eslint-disable max-lines */\nimport {\n Breadcrumb,\n CaptureContext,\n Context,\n Contexts,\n Event,\n EventHint,\n EventProcessor,\n Extra,\n Extras,\n Primitive,\n RequestSession,\n Scope as ScopeInterface,\n ScopeContext,\n Severity,\n Span,\n Transaction,\n User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, getGlobalObject, isPlainObject, isThenable, SyncPromise } from '@sentry/utils';\n\nimport { Session } from './session';\n\n/**\n * Absolute maximum number of breadcrumbs added to an event.\n * The `maxBreadcrumbs` option cannot be higher than this value.\n */\nconst MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n /** Flag if notifying is happening. */\n protected _notifyingListeners: boolean = false;\n\n /** Callback for client to receive scope changes. */\n protected _scopeListeners: Array<(scope: Scope) => void> = [];\n\n /** Callback list that will be called after {@link applyToEvent}. */\n protected _eventProcessors: EventProcessor[] = [];\n\n /** Array of breadcrumbs. */\n protected _breadcrumbs: Breadcrumb[] = [];\n\n /** User */\n protected _user: User = {};\n\n /** Tags */\n protected _tags: { [key: string]: Primitive } = {};\n\n /** Extra */\n protected _extra: Extras = {};\n\n /** Contexts */\n protected _contexts: Contexts = {};\n\n /** Fingerprint */\n protected _fingerprint?: string[];\n\n /** Severity */\n protected _level?: Severity;\n\n /** Transaction Name */\n protected _transactionName?: string;\n\n /** Span */\n protected _span?: Span;\n\n /** Session */\n protected _session?: Session;\n\n /** Request Mode Session Status */\n protected _requestSession?: RequestSession;\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n protected _sdkProcessingMetadata?: { [key: string]: unknown } = {};\n\n /**\n * Inherit values from the parent scope.\n * @param scope to clone.\n */\n public static clone(scope?: Scope): Scope {\n const newScope = new Scope();\n if (scope) {\n newScope._breadcrumbs = [...scope._breadcrumbs];\n newScope._tags = { ...scope._tags };\n newScope._extra = { ...scope._extra };\n newScope._contexts = { ...scope._contexts };\n newScope._user = scope._user;\n newScope._level = scope._level;\n newScope._span = scope._span;\n newScope._session = scope._session;\n newScope._transactionName = scope._transactionName;\n newScope._fingerprint = scope._fingerprint;\n newScope._eventProcessors = [...scope._eventProcessors];\n newScope._requestSession = scope._requestSession;\n }\n return newScope;\n }\n\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n public addScopeListener(callback: (scope: Scope) => void): void {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public addEventProcessor(callback: EventProcessor): this {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n this._user = user || {};\n if (this._session) {\n this._session.update({ user });\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getUser(): User | undefined {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n public getRequestSession(): RequestSession | undefined {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n public setRequestSession(requestSession?: RequestSession): this {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): this {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): this {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): this {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): this {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setFingerprint(fingerprint: string[]): this {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setLevel(level: Severity): this {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTransactionName(name?: string): this {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Can be removed in major version.\n * @deprecated in favor of {@link this.setTransactionName}\n */\n public setTransaction(name?: string): this {\n return this.setTransactionName(name);\n }\n\n /**\n * @inheritDoc\n */\n public setContext(key: string, context: Context | null): this {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts = { ...this._contexts, [key]: context };\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setSpan(span?: Span): this {\n this._span = span;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getSpan(): Span | undefined {\n return this._span;\n }\n\n /**\n * @inheritDoc\n */\n public getTransaction(): Transaction | undefined {\n // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n // have a pointer to the currently-active transaction.\n const span = this.getSpan();\n return span && span.transaction;\n }\n\n /**\n * @inheritDoc\n */\n public setSession(session?: Session): this {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getSession(): Session | undefined {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n public update(captureContext?: CaptureContext): this {\n if (!captureContext) {\n return this;\n }\n\n if (typeof captureContext === 'function') {\n const updatedScope = (captureContext as (scope: T) => T)(this);\n return updatedScope instanceof Scope ? updatedScope : this;\n }\n\n if (captureContext instanceof Scope) {\n this._tags = { ...this._tags, ...captureContext._tags };\n this._extra = { ...this._extra, ...captureContext._extra };\n this._contexts = { ...this._contexts, ...captureContext._contexts };\n if (captureContext._user && Object.keys(captureContext._user).length) {\n this._user = captureContext._user;\n }\n if (captureContext._level) {\n this._level = captureContext._level;\n }\n if (captureContext._fingerprint) {\n this._fingerprint = captureContext._fingerprint;\n }\n if (captureContext._requestSession) {\n this._requestSession = captureContext._requestSession;\n }\n } else if (isPlainObject(captureContext)) {\n // eslint-disable-next-line no-param-reassign\n captureContext = captureContext as ScopeContext;\n this._tags = { ...this._tags, ...captureContext.tags };\n this._extra = { ...this._extra, ...captureContext.extra };\n this._contexts = { ...this._contexts, ...captureContext.contexts };\n if (captureContext.user) {\n this._user = captureContext.user;\n }\n if (captureContext.level) {\n this._level = captureContext.level;\n }\n if (captureContext.fingerprint) {\n this._fingerprint = captureContext.fingerprint;\n }\n if (captureContext.requestSession) {\n this._requestSession = captureContext.requestSession;\n }\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clear(): this {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? Math.min(maxBreadcrumbs, MAX_BREADCRUMBS) : MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n this._breadcrumbs = [...this._breadcrumbs, mergedBreadcrumb].slice(-maxCrumbs);\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Applies the current context and fingerprint to the event.\n * Note that breadcrumbs will be added by the client.\n * Also if the event has already breadcrumbs on it, we do not merge them.\n * @param event Event\n * @param hint May contain additional information about the original exception.\n * @hidden\n */\n public applyToEvent(event: Event, hint?: EventHint): PromiseLike {\n if (this._extra && Object.keys(this._extra).length) {\n event.extra = { ...this._extra, ...event.extra };\n }\n if (this._tags && Object.keys(this._tags).length) {\n event.tags = { ...this._tags, ...event.tags };\n }\n if (this._user && Object.keys(this._user).length) {\n event.user = { ...this._user, ...event.user };\n }\n if (this._contexts && Object.keys(this._contexts).length) {\n event.contexts = { ...this._contexts, ...event.contexts };\n }\n if (this._level) {\n event.level = this._level;\n }\n if (this._transactionName) {\n event.transaction = this._transactionName;\n }\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (this._span) {\n event.contexts = { trace: this._span.getTraceContext(), ...event.contexts };\n const transactionName = this._span.transaction && this._span.transaction.name;\n if (transactionName) {\n event.tags = { transaction: transactionName, ...event.tags };\n }\n }\n\n this._applyFingerprint(event);\n\n event.breadcrumbs = [...(event.breadcrumbs || []), ...this._breadcrumbs];\n event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n\n event.sdkProcessingMetadata = this._sdkProcessingMetadata;\n\n return this._notifyEventProcessors([...getGlobalEventProcessors(), ...this._eventProcessors], event, hint);\n }\n\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry\n */\n public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * This will be called after {@link applyToEvent} is finished.\n */\n protected _notifyEventProcessors(\n processors: EventProcessor[],\n event: Event | null,\n hint?: EventHint,\n index: number = 0,\n ): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) as Event | null;\n if (isThenable(result)) {\n void (result as PromiseLike)\n .then(final => this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void this._notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n }\n\n /**\n * This will be called on every set call.\n */\n protected _notifyScopeListeners(): void {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n\n /**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\n private _applyFingerprint(event: Event): void {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint\n ? Array.isArray(event.fingerprint)\n ? event.fingerprint\n : [event.fingerprint]\n : [];\n\n // If we have something on the scope, then merge it with event\n if (this._fingerprint) {\n event.fingerprint = event.fingerprint.concat(this._fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n }\n}\n\n/**\n * Returns the global event processors.\n */\nfunction getGlobalEventProcessors(): EventProcessor[] {\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n const global = getGlobalObject();\n global.__SENTRY__ = global.__SENTRY__ || {};\n global.__SENTRY__.globalEventProcessors = global.__SENTRY__.globalEventProcessors || [];\n return global.__SENTRY__.globalEventProcessors;\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n getGlobalEventProcessors().push(callback);\n}\n","// Store finish reasons in tuple to save on bundle size\n// Readonly type should enforce that this is not mutated.\nexport const FINISH_REASON_TAG = 'finishReason';\n\nexport const IDLE_TRANSACTION_FINISH_REASONS = ['heartbeatFailed', 'idleTimeout', 'documentHidden'] as const;\n","import { addInstrumentationHandler, isDebugBuild, logger } from '@sentry/utils';\n\nimport { SpanStatusType } from './span';\nimport { getActiveTransaction } from './utils';\n\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation(): void {\n addInstrumentationHandler('error', errorCallback);\n addInstrumentationHandler('unhandledrejection', errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback(): void {\n const activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n const status: SpanStatusType = 'internal_error';\n isDebugBuild() && logger.log(`[Tracing] Transaction: ${status} -> Global error occured`);\n activeTransaction.setStatus(status);\n }\n}\n","import { getMainCarrier, Hub } from '@sentry/hub';\nimport {\n CustomSamplingContext,\n Integration,\n IntegrationClass,\n Options,\n SamplingContext,\n TransactionContext,\n} from '@sentry/types';\nimport { dynamicRequire, isDebugBuild, isNodeEnv, loadModule, logger } from '@sentry/utils';\n\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { Transaction } from './transaction';\nimport { hasTracingEnabled } from './utils';\n\n/** Returns all trace headers that are currently on the top scope. */\nfunction traceHeaders(this: Hub): { [key: string]: string } {\n const scope = this.getScope();\n if (scope) {\n const span = scope.getSpan();\n if (span) {\n return {\n 'sentry-trace': span.toTraceparent(),\n };\n }\n }\n return {};\n}\n\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * @param transaction: The transaction needing a sampling decision\n * @param options: The current client's options, so we can access `tracesSampleRate` and/or `tracesSampler`\n * @param samplingContext: Default and user-provided data which may be used to help make the decision\n *\n * @returns The given transaction with its `sampled` value set\n */\nfunction sample(transaction: T, options: Options, samplingContext: SamplingContext): T {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n transaction.sampled = false;\n return transaction;\n }\n\n // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n if (transaction.sampled !== undefined) {\n transaction.setMetadata({\n transactionSampling: { method: 'explicitly_set' },\n });\n return transaction;\n }\n\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should\n // work; prefer the hook if so\n let sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(samplingContext);\n transaction.setMetadata({\n transactionSampling: {\n method: 'client_sampler',\n // cast to number in case it's a boolean\n rate: Number(sampleRate),\n },\n });\n } else if (samplingContext.parentSampled !== undefined) {\n sampleRate = samplingContext.parentSampled;\n transaction.setMetadata({\n transactionSampling: { method: 'inheritance' },\n });\n } else {\n sampleRate = options.tracesSampleRate;\n transaction.setMetadata({\n transactionSampling: {\n method: 'client_rate',\n // cast to number in case it's a boolean\n rate: Number(sampleRate),\n },\n });\n }\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n // only valid values are booleans or numbers between 0 and 1.)\n if (!isValidSampleRate(sampleRate)) {\n isDebugBuild() && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n transaction.sampled = false;\n return transaction;\n }\n\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!sampleRate) {\n isDebugBuild() &&\n logger.log(\n `[Tracing] Discarding transaction because ${\n typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n }`,\n );\n transaction.sampled = false;\n return transaction;\n }\n\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n transaction.sampled = Math.random() < (sampleRate as number | boolean);\n\n // if we're not going to keep it, we're done\n if (!transaction.sampled) {\n isDebugBuild() &&\n logger.log(\n `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n sampleRate,\n )})`,\n );\n return transaction;\n }\n\n isDebugBuild() && logger.log(`[Tracing] starting ${transaction.op} transaction - ${transaction.name}`);\n return transaction;\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate: unknown): boolean {\n // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNaN(rate as any) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n isDebugBuild() &&\n logger.warn(\n `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n rate,\n )} of type ${JSON.stringify(typeof rate)}.`,\n );\n return false;\n }\n\n // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n if (rate < 0 || rate > 1) {\n isDebugBuild() &&\n logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${rate}.`);\n return false;\n }\n return true;\n}\n\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(\n this: Hub,\n transactionContext: TransactionContext,\n customSamplingContext?: CustomSamplingContext,\n): Transaction {\n const client = this.getClient();\n const options = (client && client.getOptions()) || {};\n\n let transaction = new Transaction(transactionContext, this);\n transaction = sample(transaction, options, {\n parentSampled: transactionContext.parentSampled,\n transactionContext,\n ...customSamplingContext,\n });\n if (transaction.sampled) {\n transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n }\n return transaction;\n}\n\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(\n hub: Hub,\n transactionContext: TransactionContext,\n idleTimeout?: number,\n onScope?: boolean,\n customSamplingContext?: CustomSamplingContext,\n): IdleTransaction {\n const client = hub.getClient();\n const options = (client && client.getOptions()) || {};\n\n let transaction = new IdleTransaction(transactionContext, hub, idleTimeout, onScope);\n transaction = sample(transaction, options, {\n parentSampled: transactionContext.parentSampled,\n transactionContext,\n ...customSamplingContext,\n });\n if (transaction.sampled) {\n transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n }\n return transaction;\n}\n\n/**\n * @private\n */\nexport function _addTracingExtensions(): void {\n const carrier = getMainCarrier();\n if (!carrier.__SENTRY__) {\n return;\n }\n carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n if (!carrier.__SENTRY__.extensions.startTransaction) {\n carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n }\n if (!carrier.__SENTRY__.extensions.traceHeaders) {\n carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n }\n}\n\n/**\n * @private\n */\nfunction _autoloadDatabaseIntegrations(): void {\n const carrier = getMainCarrier();\n if (!carrier.__SENTRY__) {\n return;\n }\n\n const packageToIntegrationMapping: Record Integration> = {\n mongodb() {\n const integration = dynamicRequire(module, './integrations/node/mongo') as {\n Mongo: IntegrationClass;\n };\n return new integration.Mongo();\n },\n mongoose() {\n const integration = dynamicRequire(module, './integrations/node/mongo') as {\n Mongo: IntegrationClass;\n };\n return new integration.Mongo({ mongoose: true });\n },\n mysql() {\n const integration = dynamicRequire(module, './integrations/node/mysql') as {\n Mysql: IntegrationClass;\n };\n return new integration.Mysql();\n },\n pg() {\n const integration = dynamicRequire(module, './integrations/node/postgres') as {\n Postgres: IntegrationClass;\n };\n return new integration.Postgres();\n },\n };\n\n const mappedPackages = Object.keys(packageToIntegrationMapping)\n .filter(moduleName => !!loadModule(moduleName))\n .map(pkg => {\n try {\n return packageToIntegrationMapping[pkg]();\n } catch (e) {\n return undefined;\n }\n })\n .filter(p => p) as Integration[];\n\n if (mappedPackages.length > 0) {\n carrier.__SENTRY__.integrations = [...(carrier.__SENTRY__.integrations || []), ...mappedPackages];\n }\n}\n\n/**\n * This patches the global object and injects the Tracing extensions methods\n */\nexport function addExtensionMethods(): void {\n _addTracingExtensions();\n\n // Detect and automatically load specified integrations.\n if (isNodeEnv()) {\n _autoloadDatabaseIntegrations();\n }\n\n // If an error happens globally, we should make sure transaction status is set to error.\n registerErrorInstrumentation();\n}\n","import { Hub } from '@sentry/hub';\nimport { TransactionContext } from '@sentry/types';\nimport { isDebugBuild, logger, timestampWithMs } from '@sentry/utils';\n\nimport { FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS } from './constants';\nimport { Span, SpanRecorder } from './span';\nimport { Transaction } from './transaction';\n\nexport const DEFAULT_IDLE_TIMEOUT = 1000;\nexport const HEARTBEAT_INTERVAL = 5000;\n\n/**\n * @inheritDoc\n */\nexport class IdleTransactionSpanRecorder extends SpanRecorder {\n public constructor(\n private readonly _pushActivity: (id: string) => void,\n private readonly _popActivity: (id: string) => void,\n public transactionSpanId: string = '',\n maxlen?: number,\n ) {\n super(maxlen);\n }\n\n /**\n * @inheritDoc\n */\n public add(span: Span): void {\n // We should make sure we do not push and pop activities for\n // the transaction that this span recorder belongs to.\n if (span.spanId !== this.transactionSpanId) {\n // We patch span.finish() to pop an activity after setting an endTimestamp.\n span.finish = (endTimestamp?: number) => {\n span.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampWithMs();\n this._popActivity(span.spanId);\n };\n\n // We should only push new activities if the span does not have an end timestamp.\n if (span.endTimestamp === undefined) {\n this._pushActivity(span.spanId);\n }\n }\n\n super.add(span);\n }\n}\n\nexport type BeforeFinishCallback = (transactionSpan: IdleTransaction, endTimestamp: number) => void;\n\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nexport class IdleTransaction extends Transaction {\n // Activities store a list of active spans\n public activities: Record = {};\n\n // Track state of activities in previous heartbeat\n private _prevHeartbeatString: string | undefined;\n\n // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n private _heartbeatCounter: number = 0;\n\n // We should not use heartbeat if we finished a transaction\n private _finished: boolean = false;\n\n private readonly _beforeFinishCallbacks: BeforeFinishCallback[] = [];\n\n /**\n * If a transaction is created and no activities are added, we want to make sure that\n * it times out properly. This is cleared and not used when activities are added.\n */\n private _initTimeout: ReturnType | undefined;\n\n public constructor(\n transactionContext: TransactionContext,\n private readonly _idleHub?: Hub,\n /**\n * The time to wait in ms until the idle transaction will be finished.\n * @default 1000\n */\n private readonly _idleTimeout: number = DEFAULT_IDLE_TIMEOUT,\n // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n private readonly _onScope: boolean = false,\n ) {\n super(transactionContext, _idleHub);\n\n if (_idleHub && _onScope) {\n // There should only be one active transaction on the scope\n clearActiveTransaction(_idleHub);\n\n // We set the transaction here on the scope so error events pick up the trace\n // context and attach it to the error.\n isDebugBuild() && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanId}`);\n _idleHub.configureScope(scope => scope.setSpan(this));\n }\n\n this._initTimeout = setTimeout(() => {\n if (!this._finished) {\n this.finish();\n }\n }, this._idleTimeout);\n }\n\n /** {@inheritDoc} */\n public finish(endTimestamp: number = timestampWithMs()): string | undefined {\n this._finished = true;\n this.activities = {};\n\n if (this.spanRecorder) {\n isDebugBuild() &&\n logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestamp * 1000).toISOString(), this.op);\n\n for (const callback of this._beforeFinishCallbacks) {\n callback(this, endTimestamp);\n }\n\n this.spanRecorder.spans = this.spanRecorder.spans.filter((span: Span) => {\n // If we are dealing with the transaction itself, we just return it\n if (span.spanId === this.spanId) {\n return true;\n }\n\n // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n if (!span.endTimestamp) {\n span.endTimestamp = endTimestamp;\n span.setStatus('cancelled');\n isDebugBuild() &&\n logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n }\n\n const keepSpan = span.startTimestamp < endTimestamp;\n if (!keepSpan) {\n isDebugBuild() &&\n logger.log(\n '[Tracing] discarding Span since it happened after Transaction was finished',\n JSON.stringify(span, undefined, 2),\n );\n }\n return keepSpan;\n });\n\n isDebugBuild() && logger.log('[Tracing] flushing IdleTransaction');\n } else {\n isDebugBuild() && logger.log('[Tracing] No active IdleTransaction');\n }\n\n // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n if (this._onScope) {\n clearActiveTransaction(this._idleHub);\n }\n\n return super.finish(endTimestamp);\n }\n\n /**\n * Register a callback function that gets excecuted before the transaction finishes.\n * Useful for cleanup or if you want to add any additional spans based on current context.\n *\n * This is exposed because users have no other way of running something before an idle transaction\n * finishes.\n */\n public registerBeforeFinishCallback(callback: BeforeFinishCallback): void {\n this._beforeFinishCallbacks.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public initSpanRecorder(maxlen?: number): void {\n if (!this.spanRecorder) {\n const pushActivity = (id: string): void => {\n if (this._finished) {\n return;\n }\n this._pushActivity(id);\n };\n const popActivity = (id: string): void => {\n if (this._finished) {\n return;\n }\n this._popActivity(id);\n };\n\n this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen);\n\n // Start heartbeat so that transactions do not run forever.\n isDebugBuild() && logger.log('Starting heartbeat');\n this._pingHeartbeat();\n }\n this.spanRecorder.add(this);\n }\n\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n private _pushActivity(spanId: string): void {\n if (this._initTimeout) {\n clearTimeout(this._initTimeout);\n this._initTimeout = undefined;\n }\n isDebugBuild() && logger.log(`[Tracing] pushActivity: ${spanId}`);\n this.activities[spanId] = true;\n isDebugBuild() && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n private _popActivity(spanId: string): void {\n if (this.activities[spanId]) {\n isDebugBuild() && logger.log(`[Tracing] popActivity ${spanId}`);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.activities[spanId];\n isDebugBuild() && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n if (Object.keys(this.activities).length === 0) {\n const timeout = this._idleTimeout;\n // We need to add the timeout here to have the real endtimestamp of the transaction\n // Remember timestampWithMs is in seconds, timeout is in ms\n const end = timestampWithMs() + timeout / 1000;\n\n setTimeout(() => {\n if (!this._finished) {\n this.setTag(FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS[1]);\n this.finish(end);\n }\n }, timeout);\n }\n }\n\n /**\n * Checks when entries of this.activities are not changing for 3 beats.\n * If this occurs we finish the transaction.\n */\n private _beat(): void {\n // We should not be running heartbeat if the idle transaction is finished.\n if (this._finished) {\n return;\n }\n\n const heartbeatString = Object.keys(this.activities).join('');\n\n if (heartbeatString === this._prevHeartbeatString) {\n this._heartbeatCounter += 1;\n } else {\n this._heartbeatCounter = 1;\n }\n\n this._prevHeartbeatString = heartbeatString;\n\n if (this._heartbeatCounter >= 3) {\n isDebugBuild() && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n this.setStatus('deadline_exceeded');\n this.setTag(FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS[0]);\n this.finish();\n } else {\n this._pingHeartbeat();\n }\n }\n\n /**\n * Pings the heartbeat\n */\n private _pingHeartbeat(): void {\n isDebugBuild() && logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`);\n setTimeout(() => {\n this._beat();\n }, HEARTBEAT_INTERVAL);\n }\n}\n\n/**\n * Reset transaction on scope to `undefined`\n */\nfunction clearActiveTransaction(hub?: Hub): void {\n if (hub) {\n const scope = hub.getScope();\n if (scope) {\n const transaction = scope.getTransaction();\n if (transaction) {\n scope.setSpan(undefined);\n }\n }\n }\n}\n","/* eslint-disable max-lines */\nimport { Primitive, Span as SpanInterface, SpanContext, Transaction } from '@sentry/types';\nimport { dropUndefinedKeys, timestampWithMs, uuid4 } from '@sentry/utils';\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nexport class SpanRecorder {\n public spans: Span[] = [];\n\n private readonly _maxlen: number;\n\n public constructor(maxlen: number = 1000) {\n this._maxlen = maxlen;\n }\n\n /**\n * This is just so that we don't run out of memory while recording a lot\n * of spans. At some point we just stop and flush out the start of the\n * trace tree (i.e.the first n spans with the smallest\n * start_timestamp).\n */\n public add(span: Span): void {\n if (this.spans.length > this._maxlen) {\n span.spanRecorder = undefined;\n } else {\n this.spans.push(span);\n }\n }\n}\n\n/**\n * Span contains all data about a span\n */\nexport class Span implements SpanInterface {\n /**\n * @inheritDoc\n */\n public traceId: string = uuid4();\n\n /**\n * @inheritDoc\n */\n public spanId: string = uuid4().substring(16);\n\n /**\n * @inheritDoc\n */\n public parentSpanId?: string;\n\n /**\n * Internal keeper of the status\n */\n public status?: SpanStatusType | string;\n\n /**\n * @inheritDoc\n */\n public sampled?: boolean;\n\n /**\n * Timestamp in seconds when the span was created.\n */\n public startTimestamp: number = timestampWithMs();\n\n /**\n * Timestamp in seconds when the span ended.\n */\n public endTimestamp?: number;\n\n /**\n * @inheritDoc\n */\n public op?: string;\n\n /**\n * @inheritDoc\n */\n public description?: string;\n\n /**\n * @inheritDoc\n */\n public tags: { [key: string]: Primitive } = {};\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public data: { [key: string]: any } = {};\n\n /**\n * List of spans that were finalized\n */\n public spanRecorder?: SpanRecorder;\n\n /**\n * @inheritDoc\n */\n public transaction?: Transaction;\n\n /**\n * You should never call the constructor manually, always use `Sentry.startTransaction()`\n * or call `startChild()` on an existing span.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(spanContext?: SpanContext) {\n if (!spanContext) {\n return this;\n }\n if (spanContext.traceId) {\n this.traceId = spanContext.traceId;\n }\n if (spanContext.spanId) {\n this.spanId = spanContext.spanId;\n }\n if (spanContext.parentSpanId) {\n this.parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this.sampled = spanContext.sampled;\n }\n if (spanContext.op) {\n this.op = spanContext.op;\n }\n if (spanContext.description) {\n this.description = spanContext.description;\n }\n if (spanContext.data) {\n this.data = spanContext.data;\n }\n if (spanContext.tags) {\n this.tags = spanContext.tags;\n }\n if (spanContext.status) {\n this.status = spanContext.status;\n }\n if (spanContext.startTimestamp) {\n this.startTimestamp = spanContext.startTimestamp;\n }\n if (spanContext.endTimestamp) {\n this.endTimestamp = spanContext.endTimestamp;\n }\n }\n\n /**\n * @inheritDoc\n * @deprecated\n */\n public child(\n spanContext?: Pick>,\n ): Span {\n return this.startChild(spanContext);\n }\n\n /**\n * @inheritDoc\n */\n public startChild(\n spanContext?: Pick>,\n ): Span {\n const childSpan = new Span({\n ...spanContext,\n parentSpanId: this.spanId,\n sampled: this.sampled,\n traceId: this.traceId,\n });\n\n childSpan.spanRecorder = this.spanRecorder;\n if (childSpan.spanRecorder) {\n childSpan.spanRecorder.add(childSpan);\n }\n\n childSpan.transaction = this.transaction;\n\n return childSpan;\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): this {\n this.tags = { ...this.tags, [key]: value };\n return this;\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n public setData(key: string, value: any): this {\n this.data = { ...this.data, [key]: value };\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setStatus(value: SpanStatusType): this {\n this.status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setHttpStatus(httpStatus: number): this {\n this.setTag('http.status_code', String(httpStatus));\n const spanStatus = spanStatusfromHttpCode(httpStatus);\n if (spanStatus !== 'unknown_error') {\n this.setStatus(spanStatus);\n }\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public isSuccess(): boolean {\n return this.status === 'ok';\n }\n\n /**\n * @inheritDoc\n */\n public finish(endTimestamp?: number): void {\n this.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampWithMs();\n }\n\n /**\n * @inheritDoc\n */\n public toTraceparent(): string {\n let sampledString = '';\n if (this.sampled !== undefined) {\n sampledString = this.sampled ? '-1' : '-0';\n }\n return `${this.traceId}-${this.spanId}${sampledString}`;\n }\n\n /**\n * @inheritDoc\n */\n public toContext(): SpanContext {\n return dropUndefinedKeys({\n data: this.data,\n description: this.description,\n endTimestamp: this.endTimestamp,\n op: this.op,\n parentSpanId: this.parentSpanId,\n sampled: this.sampled,\n spanId: this.spanId,\n startTimestamp: this.startTimestamp,\n status: this.status,\n tags: this.tags,\n traceId: this.traceId,\n });\n }\n\n /**\n * @inheritDoc\n */\n public updateWithContext(spanContext: SpanContext): this {\n this.data = spanContext.data ?? {};\n this.description = spanContext.description;\n this.endTimestamp = spanContext.endTimestamp;\n this.op = spanContext.op;\n this.parentSpanId = spanContext.parentSpanId;\n this.sampled = spanContext.sampled;\n this.spanId = spanContext.spanId ?? this.spanId;\n this.startTimestamp = spanContext.startTimestamp ?? this.startTimestamp;\n this.status = spanContext.status;\n this.tags = spanContext.tags ?? {};\n this.traceId = spanContext.traceId ?? this.traceId;\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getTraceContext(): {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: { [key: string]: any };\n description?: string;\n op?: string;\n parent_span_id?: string;\n span_id: string;\n status?: string;\n tags?: { [key: string]: Primitive };\n trace_id: string;\n } {\n return dropUndefinedKeys({\n data: Object.keys(this.data).length > 0 ? this.data : undefined,\n description: this.description,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this.spanId,\n status: this.status,\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n trace_id: this.traceId,\n });\n }\n\n /**\n * @inheritDoc\n */\n public toJSON(): {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: { [key: string]: any };\n description?: string;\n op?: string;\n parent_span_id?: string;\n span_id: string;\n start_timestamp: number;\n status?: string;\n tags?: { [key: string]: Primitive };\n timestamp?: number;\n trace_id: string;\n } {\n return dropUndefinedKeys({\n data: Object.keys(this.data).length > 0 ? this.data : undefined,\n description: this.description,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this.spanId,\n start_timestamp: this.startTimestamp,\n status: this.status,\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n timestamp: this.endTimestamp,\n trace_id: this.traceId,\n });\n }\n}\n\nexport type SpanStatusType =\n /** The operation completed successfully. */\n | 'ok'\n /** Deadline expired before operation could complete. */\n | 'deadline_exceeded'\n /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n | 'unauthenticated'\n /** 403 Forbidden */\n | 'permission_denied'\n /** 404 Not Found. Some requested entity (file or directory) was not found. */\n | 'not_found'\n /** 429 Too Many Requests */\n | 'resource_exhausted'\n /** Client specified an invalid argument. 4xx. */\n | 'invalid_argument'\n /** 501 Not Implemented */\n | 'unimplemented'\n /** 503 Service Unavailable */\n | 'unavailable'\n /** Other/generic 5xx. */\n | 'internal_error'\n /** Unknown. Any non-standard HTTP status code. */\n | 'unknown_error'\n /** The operation was cancelled (typically by the user). */\n | 'cancelled'\n /** Already exists (409) */\n | 'already_exists'\n /** Operation was rejected because the system is not in a state required for the operation's */\n | 'failed_precondition'\n /** The operation was aborted, typically due to a concurrency issue. */\n | 'aborted'\n /** Operation was attempted past the valid range. */\n | 'out_of_range'\n /** Unrecoverable data loss or corruption */\n | 'data_loss';\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport function spanStatusfromHttpCode(httpStatus: number): SpanStatusType {\n if (httpStatus < 400 && httpStatus >= 100) {\n return 'ok';\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return 'unauthenticated';\n case 403:\n return 'permission_denied';\n case 404:\n return 'not_found';\n case 409:\n return 'already_exists';\n case 413:\n return 'failed_precondition';\n case 429:\n return 'resource_exhausted';\n default:\n return 'invalid_argument';\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return 'unimplemented';\n case 503:\n return 'unavailable';\n case 504:\n return 'deadline_exceeded';\n default:\n return 'internal_error';\n }\n }\n\n return 'unknown_error';\n}\n","import { getCurrentHub, Hub } from '@sentry/hub';\nimport {\n Event,\n Measurements,\n Transaction as TransactionInterface,\n TransactionContext,\n TransactionMetadata,\n} from '@sentry/types';\nimport { dropUndefinedKeys, isDebugBuild, isInstanceOf, logger } from '@sentry/utils';\n\nimport { Span as SpanClass, SpanRecorder } from './span';\n\n/** JSDoc */\nexport class Transaction extends SpanClass implements TransactionInterface {\n public name: string;\n\n public metadata: TransactionMetadata;\n\n private _measurements: Measurements = {};\n\n /**\n * The reference to the current hub.\n */\n private readonly _hub: Hub = getCurrentHub() as unknown as Hub;\n\n private _trimEnd?: boolean;\n\n /**\n * This constructor should never be called manually. Those instrumenting tracing should use\n * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(transactionContext: TransactionContext, hub?: Hub) {\n super(transactionContext);\n\n if (isInstanceOf(hub, Hub)) {\n this._hub = hub as Hub;\n }\n\n this.name = transactionContext.name || '';\n\n this.metadata = transactionContext.metadata || {};\n this._trimEnd = transactionContext.trimEnd;\n\n // this is because transactions are also spans, and spans have a transaction pointer\n this.transaction = this;\n }\n\n /**\n * JSDoc\n */\n public setName(name: string): void {\n this.name = name;\n }\n\n /**\n * Attaches SpanRecorder to the span itself\n * @param maxlen maximum number of spans that can be recorded\n */\n public initSpanRecorder(maxlen: number = 1000): void {\n if (!this.spanRecorder) {\n this.spanRecorder = new SpanRecorder(maxlen);\n }\n this.spanRecorder.add(this);\n }\n\n /**\n * Set observed measurements for this transaction.\n * @hidden\n */\n public setMeasurements(measurements: Measurements): void {\n this._measurements = { ...measurements };\n }\n\n /**\n * Set metadata for this transaction.\n * @hidden\n */\n public setMetadata(newMetadata: TransactionMetadata): void {\n this.metadata = { ...this.metadata, ...newMetadata };\n }\n\n /**\n * @inheritDoc\n */\n public finish(endTimestamp?: number): string | undefined {\n // This transaction is already finished, so we should not flush it again.\n if (this.endTimestamp !== undefined) {\n return undefined;\n }\n\n if (!this.name) {\n isDebugBuild() && logger.warn('Transaction has no name, falling back to ``.');\n this.name = '';\n }\n\n // just sets the end timestamp\n super.finish(endTimestamp);\n\n if (this.sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n isDebugBuild() && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n const client = this._hub.getClient();\n const transport = client && client.getTransport && client.getTransport();\n if (transport && transport.recordLostEvent) {\n transport.recordLostEvent('sample_rate', 'transaction');\n }\n return undefined;\n }\n\n const finishedSpans = this.spanRecorder ? this.spanRecorder.spans.filter(s => s !== this && s.endTimestamp) : [];\n\n if (this._trimEnd && finishedSpans.length > 0) {\n this.endTimestamp = finishedSpans.reduce((prev: SpanClass, current: SpanClass) => {\n if (prev.endTimestamp && current.endTimestamp) {\n return prev.endTimestamp > current.endTimestamp ? prev : current;\n }\n return prev;\n }).endTimestamp;\n }\n\n const transaction: Event = {\n contexts: {\n trace: this.getTraceContext(),\n },\n spans: finishedSpans,\n start_timestamp: this.startTimestamp,\n tags: this.tags,\n timestamp: this.endTimestamp,\n transaction: this.name,\n type: 'transaction',\n sdkProcessingMetadata: this.metadata,\n };\n\n const hasMeasurements = Object.keys(this._measurements).length > 0;\n\n if (hasMeasurements) {\n isDebugBuild() &&\n logger.log(\n '[Measurements] Adding measurements to transaction',\n JSON.stringify(this._measurements, undefined, 2),\n );\n transaction.measurements = this._measurements;\n }\n\n isDebugBuild() && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this.name}.`);\n\n return this._hub.captureEvent(transaction);\n }\n\n /**\n * @inheritDoc\n */\n public toContext(): TransactionContext {\n const spanContext = super.toContext();\n\n return dropUndefinedKeys({\n ...spanContext,\n name: this.name,\n trimEnd: this._trimEnd,\n });\n }\n\n /**\n * @inheritDoc\n */\n public updateWithContext(transactionContext: TransactionContext): this {\n super.updateWithContext(transactionContext);\n\n this.name = transactionContext.name ?? '';\n\n this._trimEnd = transactionContext.trimEnd;\n\n return this;\n }\n}\n","import { getCurrentHub, Hub } from '@sentry/hub';\nimport { Options, Transaction } from '@sentry/types';\n\n/**\n * The `extractTraceparentData` function and `TRACEPARENT_REGEXP` constant used\n * to be declared in this file. It was later moved into `@sentry/utils` as part of a\n * move to remove `@sentry/tracing` dependencies from `@sentry/node` (`extractTraceparentData`\n * is the only tracing function used by `@sentry/node`).\n *\n * These exports are kept here for backwards compatability's sake.\n *\n * TODO(v7): Reorganize these exports\n *\n * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n */\nexport { TRACEPARENT_REGEXP, extractTraceparentData } from '@sentry/utils';\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nexport function hasTracingEnabled(maybeOptions?: Options | undefined): boolean {\n const client = getCurrentHub().getClient();\n const options = maybeOptions || (client && client.getOptions());\n return !!options && ('tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\n/** Grabs active transaction off scope, if any */\nexport function getActiveTransaction(maybeHub?: Hub): T | undefined {\n const hub = maybeHub || getCurrentHub();\n const scope = hub.getScope();\n return scope && (scope.getTransaction() as T | undefined);\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nexport function msToSec(time: number): number {\n return time / 1000;\n}\n\n/**\n * Converts from seconds to milliseconds\n * @param time time in seconds\n */\nexport function secToMs(time: number): number {\n return time * 1000;\n}\n\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n","import { getGlobalObject } from './global';\nimport { isString } from './is';\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(elem: unknown, keyAttrs?: string[]): string {\n type SimpleNode = {\n parentNode: SimpleNode;\n } | null;\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n const MAX_OUTPUT_LEN = 80;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n\n // eslint-disable-next-line no-plusplus\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown, keyAttrs?: string[]): string {\n const elem = el as {\n tagName?: string;\n id?: string;\n className?: string;\n getAttribute(key: string): string;\n };\n\n const out = [];\n let className;\n let classes;\n let key;\n let attr;\n let i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n // eslint-disable-next-line prefer-const\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push(`.${classes[i]}`);\n }\n }\n }\n const allowedAttrs = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push(`[${key}=\"${attr}\"]`);\n }\n }\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n const global = getGlobalObject();\n try {\n return global.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n","/**\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nconst __SENTRY_DEBUG__ = true;\n\n/**\n * Figures out if we're building with debug functionality.\n *\n * @returns true if this is a debug build\n */\nexport function isDebugBuild(): boolean {\n return __SENTRY_DEBUG__;\n}\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Integration } from '@sentry/types';\n\nimport { isNodeEnv } from './node';\n\n/** Internal */\ninterface SentryGlobal {\n Sentry?: {\n Integrations?: Integration[];\n };\n SENTRY_ENVIRONMENT?: string;\n SENTRY_DSN?: string;\n SENTRY_RELEASE?: {\n id?: string;\n };\n __SENTRY__: {\n globalEventProcessors: any;\n hub: any;\n logger: any;\n };\n}\n\nconst fallbackGlobalObject = {};\n\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nexport function getGlobalObject(): T & SentryGlobal {\n return (\n isNodeEnv()\n ? global\n : typeof window !== 'undefined' // eslint-disable-line no-restricted-globals\n ? window // eslint-disable-line no-restricted-globals\n : typeof self !== 'undefined'\n ? self\n : fallbackGlobalObject\n ) as T & SentryGlobal;\n}\n","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport { WrappedFunction } from '@sentry/types';\n\nimport { isDebugBuild } from './env';\nimport { getGlobalObject } from './global';\nimport { isInstanceOf, isString } from './is';\nimport { CONSOLE_LEVELS, logger } from './logger';\nimport { fill } from './object';\nimport { getFunctionName } from './stacktrace';\nimport { supportsHistory, supportsNativeFetch } from './supports';\n\nconst global = getGlobalObject();\n\ntype InstrumentHandlerType =\n | 'console'\n | 'dom'\n | 'fetch'\n | 'history'\n | 'sentry'\n | 'xhr'\n | 'error'\n | 'unhandledrejection';\ntype InstrumentHandlerCallback = (data: any) => void;\n\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n * - Console API\n * - Fetch API\n * - XHR API\n * - History API\n * - DOM API (click/typing)\n * - Error API\n * - UnhandledRejection API\n */\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Instruments given API */\nfunction instrument(type: InstrumentHandlerType): void {\n if (instrumented[type]) {\n return;\n }\n\n instrumented[type] = true;\n\n switch (type) {\n case 'console':\n instrumentConsole();\n break;\n case 'dom':\n instrumentDOM();\n break;\n case 'xhr':\n instrumentXHR();\n break;\n case 'fetch':\n instrumentFetch();\n break;\n case 'history':\n instrumentHistory();\n break;\n case 'error':\n instrumentError();\n break;\n case 'unhandledrejection':\n instrumentUnhandledRejection();\n break;\n default:\n isDebugBuild() && logger.warn('unknown instrumentation type:', type);\n return;\n }\n}\n\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addInstrumentationHandler(type: InstrumentHandlerType, callback: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(callback);\n instrument(type);\n}\n\n/** JSDoc */\nfunction triggerHandlers(type: InstrumentHandlerType, data: any): void {\n if (!type || !handlers[type]) {\n return;\n }\n\n for (const handler of handlers[type] || []) {\n try {\n handler(data);\n } catch (e) {\n isDebugBuild() &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\n/** JSDoc */\nfunction instrumentConsole(): void {\n if (!('console' in global)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level: string): void {\n if (!(level in global.console)) {\n return;\n }\n\n fill(global.console, level, function (originalConsoleMethod: () => any): Function {\n return function (...args: any[]): void {\n triggerHandlers('console', { args, level });\n\n // this fails for some browsers. :(\n if (originalConsoleMethod) {\n originalConsoleMethod.apply(global.console, args);\n }\n };\n });\n });\n}\n\n/** JSDoc */\nfunction instrumentFetch(): void {\n if (!supportsNativeFetch()) {\n return;\n }\n\n fill(global, 'fetch', function (originalFetch: () => void): () => void {\n return function (...args: any[]): void {\n const handlerData = {\n args,\n fetchData: {\n method: getFetchMethod(args),\n url: getFetchUrl(args),\n },\n startTimestamp: Date.now(),\n };\n\n triggerHandlers('fetch', {\n ...handlerData,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(global, args).then(\n (response: Response) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: Date.now(),\n response,\n });\n return response;\n },\n (error: Error) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: Date.now(),\n error,\n });\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n },\n );\n };\n });\n}\n\ntype XHRSendInput = null | Blob | BufferSource | FormData | URLSearchParams | string;\n\n/** JSDoc */\ninterface SentryWrappedXMLHttpRequest extends XMLHttpRequest {\n [key: string]: any;\n __sentry_xhr__?: {\n method?: string;\n url?: string;\n status_code?: number;\n body?: XHRSendInput;\n };\n}\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/** Extract `method` from fetch call arguments */\nfunction getFetchMethod(fetchArgs: any[] = []): string {\n if ('Request' in global && isInstanceOf(fetchArgs[0], Request) && fetchArgs[0].method) {\n return String(fetchArgs[0].method).toUpperCase();\n }\n if (fetchArgs[1] && fetchArgs[1].method) {\n return String(fetchArgs[1].method).toUpperCase();\n }\n return 'GET';\n}\n\n/** Extract `url` from fetch call arguments */\nfunction getFetchUrl(fetchArgs: any[] = []): string {\n if (typeof fetchArgs[0] === 'string') {\n return fetchArgs[0];\n }\n if ('Request' in global && isInstanceOf(fetchArgs[0], Request)) {\n return fetchArgs[0].url;\n }\n return String(fetchArgs[0]);\n}\n/* eslint-enable @typescript-eslint/no-unsafe-member-access */\n\n/** JSDoc */\nfunction instrumentXHR(): void {\n if (!('XMLHttpRequest' in global)) {\n return;\n }\n\n const xhrproto = XMLHttpRequest.prototype;\n\n fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n return function (this: SentryWrappedXMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const url = args[1];\n const xhrInfo: SentryWrappedXMLHttpRequest['__sentry_xhr__'] = (xhr.__sentry_xhr__ = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n method: isString(args[0]) ? args[0].toUpperCase() : args[0],\n url: args[1],\n });\n\n // if Sentry key appears in URL, don't capture it as a request\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (isString(url) && xhrInfo.method === 'POST' && url.match(/sentry_key/)) {\n xhr.__sentry_own_request__ = true;\n }\n\n const onreadystatechangeHandler = function (): void {\n if (xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n triggerHandlers('xhr', {\n args,\n endTimestamp: Date.now(),\n startTimestamp: Date.now(),\n xhr,\n });\n }\n };\n\n if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n fill(xhr, 'onreadystatechange', function (original: WrappedFunction): Function {\n return function (...readyStateArgs: any[]): void {\n onreadystatechangeHandler();\n return original.apply(xhr, readyStateArgs);\n };\n });\n } else {\n xhr.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n return originalOpen.apply(xhr, args);\n };\n });\n\n fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n return function (this: SentryWrappedXMLHttpRequest, ...args: any[]): void {\n if (this.__sentry_xhr__ && args[0] !== undefined) {\n this.__sentry_xhr__.body = args[0];\n }\n\n triggerHandlers('xhr', {\n args,\n startTimestamp: Date.now(),\n xhr: this,\n });\n\n return originalSend.apply(this, args);\n };\n });\n}\n\nlet lastHref: string;\n\n/** JSDoc */\nfunction instrumentHistory(): void {\n if (!supportsHistory()) {\n return;\n }\n\n const oldOnPopState = global.onpopstate;\n global.onpopstate = function (this: WindowEventHandlers, ...args: any[]): any {\n const to = global.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n const from = lastHref;\n lastHref = to;\n triggerHandlers('history', {\n from,\n to,\n });\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {\n // no-empty\n }\n }\n };\n\n /** @hidden */\n function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n return function (this: History, ...args: any[]): void {\n const url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n const from = lastHref;\n const to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n triggerHandlers('history', {\n from,\n to,\n });\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n fill(global.history, 'pushState', historyReplacementFunction);\n fill(global.history, 'replaceState', historyReplacementFunction);\n}\n\nconst debounceDuration = 1000;\nlet debounceTimerID: number | undefined;\nlet lastCapturedEvent: Event | undefined;\n\n/**\n * Decide whether the current event should finish the debounce of previously captured one.\n * @param previous previously captured event\n * @param current event to be captured\n */\nfunction shouldShortcircuitPreviousDebounce(previous: Event | undefined, current: Event): boolean {\n // If there was no previous event, it should always be swapped for the new one.\n if (!previous) {\n return true;\n }\n\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (previous.type !== current.type) {\n return true;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (previous.target !== current.target) {\n return true;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return false;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(event: Event): boolean {\n // We are only interested in filtering `keypress` events for now.\n if (event.type !== 'keypress') {\n return false;\n }\n\n try {\n const target = event.target as HTMLElement;\n\n if (!target || !target.tagName) {\n return true;\n }\n\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param handler function that will be triggered\n * @param globalListener indicates whether event was captured by the global event listener\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nfunction makeDOMEventHandler(handler: Function, globalListener: boolean = false): (event: Event) => void {\n return (event: Event): void => {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || lastCapturedEvent === event) {\n return;\n }\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event)) {\n return;\n }\n\n const name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no debounce timer, it means that we can safely capture the new event and store it for future comparisons.\n if (debounceTimerID === undefined) {\n handler({\n event: event,\n name,\n global: globalListener,\n });\n lastCapturedEvent = event;\n }\n // If there is a debounce awaiting, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n else if (shouldShortcircuitPreviousDebounce(lastCapturedEvent, event)) {\n handler({\n event: event,\n name,\n global: globalListener,\n });\n lastCapturedEvent = event;\n }\n\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = global.setTimeout(() => {\n debounceTimerID = undefined;\n }, debounceDuration);\n };\n}\n\ntype AddEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n __sentry_instrumentation_handlers__?: {\n [key in 'click' | 'keypress']?: {\n handler?: Function;\n /** The number of custom listeners attached to this element */\n refCount: number;\n };\n };\n};\n\n/** JSDoc */\nfunction instrumentDOM(): void {\n if (!('document' in global)) {\n return;\n }\n\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n global.document.addEventListener('click', globalDOMEventHandler, false);\n global.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach((target: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = (global as any)[target] && (global as any)[target].prototype;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): AddEventListener {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount += 1;\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = el.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount -= 1;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers).length === 0) {\n delete el.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n },\n );\n });\n}\n\nlet _oldOnErrorHandler: OnErrorEventHandler = null;\n/** JSDoc */\nfunction instrumentError(): void {\n _oldOnErrorHandler = global.onerror;\n\n global.onerror = function (msg: any, url: any, line: any, column: any, error: any): boolean {\n triggerHandlers('error', {\n column,\n error,\n line,\n msg,\n url,\n });\n\n if (_oldOnErrorHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n}\n\nlet _oldOnUnhandledRejectionHandler: ((e: any) => void) | null = null;\n/** JSDoc */\nfunction instrumentUnhandledRejection(): void {\n _oldOnUnhandledRejectionHandler = global.onunhandledrejection;\n\n global.onunhandledrejection = function (e: any): boolean {\n triggerHandlers('unhandledrejection', e);\n\n if (_oldOnUnhandledRejectionHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport { Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): boolean {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n\nfunction isBuiltin(wat: unknown, ty: string): boolean {\n return objectToString.call(wat) === `[object ${ty}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): boolean {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): boolean {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: unknown): boolean {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isNaN(wat: unknown): boolean {\n return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { WrappedFunction } from '@sentry/types';\n\nimport { isDebugBuild } from './env';\nimport { getGlobalObject } from './global';\n\n// TODO: Implement different loggers for different environments\nconst global = getGlobalObject();\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS = ['debug', 'info', 'warn', 'error', 'log', 'assert'];\n\n/** JSDoc */\ninterface ExtensibleConsole extends Console {\n [key: string]: any;\n}\n\n/**\n * Temporarily unwrap `console.log` and friends in order to perform the given callback using the original methods.\n * Restores wrapping after the callback completes.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox(callback: () => any): any {\n const global = getGlobalObject();\n\n if (!('console' in global)) {\n return callback();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const originalConsole = (global as any).console as ExtensibleConsole;\n const wrappedLevels: { [key: string]: any } = {};\n\n // Restore all wrapped console methods\n CONSOLE_LEVELS.forEach(level => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (level in (global as any).console && (originalConsole[level] as WrappedFunction).__sentry_original__) {\n wrappedLevels[level] = originalConsole[level] as WrappedFunction;\n originalConsole[level] = (originalConsole[level] as WrappedFunction).__sentry_original__;\n }\n });\n\n // Perform callback manipulations\n const result = callback();\n\n // Revert restoration to wrapped state\n Object.keys(wrappedLevels).forEach(level => {\n originalConsole[level] = wrappedLevels[level];\n });\n\n return result;\n}\n\n/** JSDoc */\nclass Logger {\n /** JSDoc */\n private _enabled: boolean;\n\n /** JSDoc */\n public constructor() {\n this._enabled = false;\n }\n\n /** JSDoc */\n public disable(): void {\n this._enabled = false;\n }\n\n /** JSDoc */\n public enable(): void {\n this._enabled = true;\n }\n\n /** JSDoc */\n public log(...args: any[]): void {\n if (!this._enabled) {\n return;\n }\n consoleSandbox(() => {\n global.console.log(`${PREFIX}[Log]:`, ...args);\n });\n }\n\n /** JSDoc */\n public warn(...args: any[]): void {\n if (!this._enabled) {\n return;\n }\n consoleSandbox(() => {\n global.console.warn(`${PREFIX}[Warn]:`, ...args);\n });\n }\n\n /** JSDoc */\n public error(...args: any[]): void {\n if (!this._enabled) {\n return;\n }\n consoleSandbox(() => {\n global.console.error(`${PREFIX}[Error]:`, ...args);\n });\n }\n}\n\nconst sentryGlobal = global.__SENTRY__ || {};\nconst logger = (sentryGlobal.logger as Logger) || new Logger();\n\nif (isDebugBuild()) {\n // Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\n sentryGlobal.logger = logger;\n global.__SENTRY__ = sentryGlobal;\n}\n\nexport { logger };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { getGlobalObject } from './global';\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\n\n/**\n * Extended Window interface that allows for Crypto API usage in IE browsers\n */\ninterface MsCryptoWindow extends Window {\n msCrypto?: Crypto;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n const global = getGlobalObject() as MsCryptoWindow;\n const crypto = global.crypto || global.msCrypto;\n\n if (!(crypto === void 0) && crypto.getRandomValues) {\n // Use window.crypto API if available\n const arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n // eslint-disable-next-line no-bitwise\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n // eslint-disable-next-line no-bitwise\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n const pad = (num: number): string => {\n let v = num.toString(16);\n while (v.length < 4) {\n v = `0${v}`;\n }\n return v;\n };\n\n return (\n pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7])\n );\n }\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, c => {\n // eslint-disable-next-line no-bitwise\n const r = (Math.random() * 16) | 0;\n // eslint-disable-next-line no-bitwise\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url: string): {\n host?: string;\n path?: string;\n protocol?: string;\n relative?: string;\n} {\n if (!url) {\n return {};\n }\n\n const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n }\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n const query = match[6] || '';\n const fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n relative: match[5] + query + fragment, // everything minus origin\n };\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial): void {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n major?: number;\n minor?: number;\n patch?: number;\n prerelease?: string;\n buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = parseInt(match[1], 10);\n const minor = parseInt(match[2], 10);\n const patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n const lineno = frame.lineno || 0;\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line: string) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n // eslint-disable-next-line no-useless-escape\n return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && (exception as any).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\nimport { isBrowserBundle } from './env';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (\n !isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\nexport function dynamicRequire(mod: any, request: string): any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nexport function loadModule(moduleName: string): T | undefined {\n let mod: T | undefined;\n\n try {\n mod = dynamicRequire(module, moduleName);\n } catch (e) {\n // no-empty\n }\n\n try {\n const { cwd } = dynamicRequire(module, 'process');\n mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) as T;\n } catch (e) {\n // no-empty\n }\n\n return mod;\n}\n","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ExtendedError, WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] as () => any;\n const wrapped = replacementFactory(original) as WrappedFunction;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n try {\n markFunctionWrapped(wrapped, original);\n } catch (_Oo) {\n // This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: { [key: string]: unknown }, name: string, value: unknown): void {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func: WrappedFunction): WrappedFunction | undefined {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any object into an object literal with all its attributes\n * attached to it.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n */\nexport function getWalkSource(value: any): {\n [key: string]: any;\n} {\n if (isError(value)) {\n const error = value as ExtendedError;\n const err: {\n [key: string]: any;\n stack: string | undefined;\n message: string;\n name: string;\n } = {\n message: error.message,\n name: error.name,\n stack: error.stack,\n };\n\n for (const i in error) {\n if (Object.prototype.hasOwnProperty.call(error, i)) {\n err[i] = error[i];\n }\n }\n\n return err;\n }\n\n if (isEvent(value)) {\n /**\n * Event-like interface that's usable in browser and node\n */\n interface SimpleEvent {\n [key: string]: unknown;\n type: string;\n target?: unknown;\n currentTarget?: unknown;\n }\n\n const event = value as unknown as SimpleEvent;\n\n const source: {\n [key: string]: any;\n } = {};\n\n // Accessing event attributes can throw (see https://github.com/getsentry/sentry-javascript/issues/768 and\n // https://github.com/getsentry/sentry-javascript/issues/838), but accessing `type` hasn't been wrapped in a\n // try-catch in at least two years and no one's complained, so that's likely not an issue anymore\n source.type = event.type;\n\n try {\n source.target = isElement(event.target)\n ? htmlTreeAsString(event.target)\n : Object.prototype.toString.call(event.target);\n } catch (_oO) {\n source.target = '';\n }\n\n try {\n source.currentTarget = isElement(event.currentTarget)\n ? htmlTreeAsString(event.currentTarget)\n : Object.prototype.toString.call(event.currentTarget);\n } catch (_oO) {\n source.currentTarget = '';\n }\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n source.detail = event.detail;\n }\n\n for (const attr in event) {\n if (Object.prototype.hasOwnProperty.call(event, attr)) {\n source[attr] = event[attr];\n }\n }\n\n return source;\n }\n\n return value as {\n [key: string]: any;\n };\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function extractExceptionKeysForMessage(exception: any, maxLength: number = 40): string {\n const keys = Object.keys(getWalkSource(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return the new object with removed keys that value was `undefined`.\n * Works recursively on objects and arrays.\n */\nexport function dropUndefinedKeys(val: T): T {\n if (isPlainObject(val)) {\n const obj = val as { [key: string]: any };\n const rv: { [key: string]: any } = {};\n for (const key of Object.keys(obj)) {\n if (typeof obj[key] !== 'undefined') {\n rv[key] = dropUndefinedKeys(obj[key]);\n }\n }\n return rv as T;\n }\n\n if (Array.isArray(val)) {\n return (val as any[]).map(dropUndefinedKeys) as any;\n }\n\n return val;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat as any).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n","import { StackFrame } from '@sentry/types';\n\nconst STACKTRACE_LIMIT = 50;\n\nexport type StackParser = (stack: string, skipFirst?: number) => StackFrame[];\nexport type StackLineParserFn = (line: string) => StackFrame | undefined;\nexport type StackLineParser = [number, StackLineParserFn];\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack: string, skipFirst: number = 0): StackFrame[] => {\n const frames: StackFrame[] = [];\n\n for (const line of stack.split('\\n').slice(skipFirst)) {\n for (const parser of sortedParsers) {\n const frame = parser(line);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n }\n\n return stripSentryFramesAndReverse(frames);\n };\n}\n\n/**\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: StackFrame[]): StackFrame[] {\n if (!stack.length) {\n return [];\n }\n\n let localStack = stack;\n\n const firstFrameFunction = localStack[0].function || '';\n const lastFrameFunction = localStack[localStack.length - 1].function || '';\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n }\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n }\n\n // The frame where the crash happened, should be the last entry in the array\n return localStack\n .slice(0, STACKTRACE_LIMIT)\n .map(frame => ({\n ...frame,\n filename: frame.filename || localStack[0].filename,\n function: frame.function || '?',\n }))\n .reverse();\n}\n\nconst defaultFunctionName = '';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n","import { isRegExp, isString } from './is';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.substr(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input: any[], delimiter?: string): string {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n output.push(String(value));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the value matches a regex or includes the string\n * @param value The string value to be checked against\n * @param pattern Either a regex or a string that must be contained in value\n */\nexport function isMatchingPattern(value: string, pattern: RegExp | string): boolean {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return (pattern as RegExp).test(value);\n }\n if (typeof pattern === 'string') {\n return value.indexOf(pattern) !== -1;\n }\n return false;\n}\n\n/**\n * Given a string, escape characters which have meaning in the regex grammar, such that the result is safe to feed to\n * `new RegExp()`.\n *\n * Based on https://github.com/sindresorhus/escape-string-regexp. Vendored to a) reduce the size by skipping the runtime\n * type-checking, and b) ensure it gets down-compiled for old versions of Node (the published package only supports Node\n * 12+).\n *\n * @param regexString The string to escape\n * @returns An version of the string with all special regex characters escaped\n */\nexport function escapeStringForRegex(regexString: string): string {\n // escape the hyphen separately so we can also replace it with a unicode literal hyphen, to avoid the problems\n // discussed in https://github.com/sindresorhus/escape-string-regexp/issues/20.\n return regexString.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n","import { isDebugBuild } from './env';\nimport { getGlobalObject } from './global';\nimport { logger } from './logger';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n try {\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-ignore It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n if (!('fetch' in getGlobalObject())) {\n return false;\n }\n\n try {\n new Headers();\n new Request('');\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFetch(func: Function): boolean {\n return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n if (!supportsFetch()) {\n return false;\n }\n\n const global = getGlobalObject();\n\n // Fast path to avoid DOM I/O\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (isNativeFetch(global.fetch)) {\n return true;\n }\n\n // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n let result = false;\n const doc = global.document;\n // eslint-disable-next-line deprecation/deprecation\n if (doc && typeof (doc.createElement as unknown) === 'function') {\n try {\n const sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFetch(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n } catch (err) {\n isDebugBuild() &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n return 'ReportingObserver' in getGlobalObject();\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy(): boolean {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n new Request('_', {\n referrerPolicy: 'origin' as ReferrerPolicy,\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory(): boolean {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n const global = getGlobalObject();\n /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chrome = (global as any).chrome;\n const isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n const hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState;\n\n return !isChromePackagedApp && hasHistoryApi;\n}\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst enum States {\n /** Pending */\n PENDING = 0,\n /** Resolved / OK */\n RESOLVED = 1,\n /** Rejected / Error */\n REJECTED = 2,\n}\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise(value: T | PromiseLike): PromiseLike {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise(reason?: any): PromiseLike {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise implements PromiseLike {\n private _state: States = States.PENDING;\n private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]> = [];\n private _value: any;\n\n public constructor(\n executor: (resolve: (value?: T | PromiseLike | null) => void, reject: (reason?: any) => void) => void,\n ) {\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n public then(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike) | null,\n ): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result as any);\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n public catch(\n onrejected?: ((reason: any) => TResult | PromiseLike) | null,\n ): PromiseLike {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n public finally(onfinally?: (() => void) | null): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n let val: TResult | any;\n let isRejected: boolean;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val as unknown as any);\n });\n });\n }\n\n /** JSDoc */\n private readonly _resolve = (value?: T | PromiseLike | null) => {\n this._setResult(States.RESOLVED, value);\n };\n\n /** JSDoc */\n private readonly _reject = (reason?: any) => {\n this._setResult(States.REJECTED, reason);\n };\n\n /** JSDoc */\n private readonly _setResult = (state: States, value?: T | PromiseLike | any) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value as PromiseLike).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };\n\n /** JSDoc */\n private readonly _executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n handler[1](this._value as unknown as any);\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };\n}\n\nexport { SyncPromise };\n","import { getGlobalObject } from './global';\nimport { dynamicRequire, isNodeEnv } from './node';\n\n/**\n * An object that can return the current timestamp in seconds since the UNIX epoch.\n */\ninterface TimestampSource {\n nowSeconds(): number;\n}\n\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nconst dateTimestampSource: TimestampSource = {\n nowSeconds: () => Date.now() / 1000,\n};\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n /**\n * The millisecond timestamp at which measurement began, measured in Unix time.\n */\n timeOrigin: number;\n /**\n * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n */\n now(): number;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance(): Performance | undefined {\n const { performance } = getGlobalObject();\n if (!performance || !performance.now) {\n return undefined;\n }\n\n // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n //\n // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n // performance.now() gives a date arbitrarily in the past.\n //\n // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n // undefined.\n //\n // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n // interact with data coming out of performance entries.\n //\n // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n // observed skews that can be as long as days, weeks or months.\n //\n // See https://github.com/getsentry/sentry-javascript/issues/2590.\n //\n // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n // transactions of long-lived web pages.\n const timeOrigin = Date.now() - performance.now();\n\n return {\n now: () => performance.now(),\n timeOrigin,\n };\n}\n\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance(): Performance | undefined {\n try {\n const perfHooks = dynamicRequire(module, 'perf_hooks') as { performance: Performance };\n return perfHooks.performance;\n } catch (_) {\n return undefined;\n }\n}\n\n/**\n * The Performance API implementation for the current platform, if available.\n */\nconst platformPerformance: Performance | undefined = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\n\nconst timestampSource: TimestampSource =\n platformPerformance === undefined\n ? dateTimestampSource\n : {\n nowSeconds: () => (platformPerformance.timeOrigin + platformPerformance.now()) / 1000,\n };\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nexport const dateTimestampInSeconds: () => number = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds: () => number = timestampSource.nowSeconds.bind(timestampSource);\n\n// Re-exported with an old name for backwards-compatibility.\nexport const timestampWithMs = timestampInSeconds;\n\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nexport const usingPerformanceAPI = platformPerformance !== undefined;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport const browserPerformanceTimeOrigin = ((): number | undefined => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = getGlobalObject();\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0')\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('./../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar pkg = require('./../../package.json');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\nvar currentVerArr = pkg.version.split('.');\n\n/**\n * Compare package versions\n * @param {string} version\n * @param {string?} thanVersion\n * @returns {boolean}\n */\nfunction isOlderVersion(version, thanVersion) {\n var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;\n var destVer = version.split('.');\n for (var i = 0; i < 3; i++) {\n if (pkgVersionArr[i] > destVer[i]) {\n return true;\n } else if (pkgVersionArr[i] < destVer[i]) {\n return false;\n }\n }\n return false;\n}\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator\n * @param {string?} version\n * @param {string} message\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n var isDeprecated = version && isOlderVersion(version);\n\n function formatMessage(opt, desc) {\n return '[Axios v' + pkg.version + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed in ' + version));\n }\n\n if (isDeprecated && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n isOlderVersion: isOlderVersion,\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(this && this[arg] || arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(this, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(this && this[key] || key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n","/**\n * @license\n * Fuse - Lightweight fuzzy-search\n *\n * Copyright (c) 2012-2016 Kirollos Risk .\n * All Rights Reserved. Apache Software License 2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n;(function (global) {\n 'use strict'\n\n var defaultOptions = {\n // Default sort function\n sortFn: function (a, b) {\n return a.score - b.score\n },\n\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n\n // Regex used to separate words when searching. Only applicable when `tokenize` is `true`.\n tokenSeparator: / +/g,\n }\n\n /**\n * @constructor\n * @param {!Array} list\n * @param {!Object} options\n */\n function Fuse (list, options) {\n var key\n\n this.list = list\n this.options = options = options || {}\n\n for (key in defaultOptions) {\n if (!defaultOptions.hasOwnProperty(key)) {\n continue;\n }\n // Add boolean type options\n if (typeof defaultOptions[key] === 'boolean') {\n this.options[key] = key in options ? options[key] : defaultOptions[key];\n // Add all other options\n } else {\n this.options[key] = options[key] || defaultOptions[key]\n }\n }\n }\n\n Fuse.VERSION = '2.6.2'\n\n /**\n * Sets a new list for Fuse to match against.\n * @param {!Array} list\n * @return {!Array} The newly set list\n * @public\n */\n Fuse.prototype.set = function (list) {\n this.list = list\n return list\n }\n\n Fuse.prototype.search = function (pattern) {\n this.pattern = pattern\n this.results = []\n this.resultMap = {}\n this._keyMap = null\n\n this._prepareSearchers()\n this._startSearch()\n this._computeScore()\n this._sort()\n\n var output = this._format()\n return output\n }\n\n Fuse.prototype._prepareSearchers = function () {\n var options = this.options\n var pattern = this.pattern\n var tokens = pattern.split(options.tokenSeparator)\n var i = 0\n var len = tokens.length\n\n this.tokenSearchers = []\n for (; i < len; i++) {\n if (tokens[i].length < 2) continue\n this.tokenSearchers.push(new BitapSearcher(tokens[i], options))\n }\n }\n\n Fuse.prototype._startSearch = function () {\n var options = this.options\n var list = this.list\n var listLen = list.length\n var keys = this.options.keys\n var keysLen = keys.length\n var key\n var weight\n var item = null\n var i\n var j\n\n // Check the first item in the list, if it's a string, then we assume\n // that every item in the list is also a string, and thus it's a flattened array.\n if (typeof list[0] === 'string') {\n // Iterate over every item\n for (i = 0; i < listLen; i++) {\n this._analyze('', list[i], i, i)\n }\n } else {\n this._keyMap = {}\n // Otherwise, the first item is an Object (hopefully), and thus the searching\n // is done on the values of the keys of each item.\n // Iterate over every item\n for (i = 0; i < listLen; i++) {\n item = list[i]\n // Iterate over every key\n for (j = 0; j < keysLen; j++) {\n key = keys[j]\n if (typeof key !== 'string') {\n weight = (1 - key.weight) || 1\n this._keyMap[key.name] = {\n weight: weight\n }\n if (key.weight <= 0 || key.weight > 1) {\n throw new Error('Key weight has to be > 0 and <= 1')\n }\n key = key.name\n } else {\n this._keyMap[key] = {\n weight: 1\n }\n }\n this._analyze(key, item[key], item, i)\n }\n }\n }\n }\n\n Fuse.prototype._analyze = function (key, text, entity, index) {\n var options = this.options\n var words\n var scores\n var exists = false\n var existingResult\n var averageScore\n var scoresLen\n var mainSearchResult\n var tokenSearcher\n var termScores\n var word\n var tokenSearchResult\n var checkTextMatches\n var i\n var j\n\n // Check if the text can be searched\n if (text == undefined) {\n return\n }\n\n scores = []\n words = text.toLowerCase().split(options.tokenSeparator)\n\n for (i = 0; i < this.tokenSearchers.length; i++) {\n tokenSearcher = this.tokenSearchers[i]\n var tokenScores = [];\n\n for (j = 0; j < words.length; j++) {\n word = words[j];\n if (word.length < 2) continue;\n tokenSearchResult = tokenSearcher.search(word)\n if (tokenSearchResult.isMatch) {\n exists = true\n tokenScores.push(tokenSearchResult.score)\n } else {\n tokenScores.push(1)\n }\n }\n\n scores.push(Math.min.apply(Math, tokenScores));\n }\n\n averageScore = scores[0]\n scoresLen = scores.length\n for (i = 1; i < scoresLen; i++) {\n averageScore += scores[i]\n }\n averageScore = averageScore / scoresLen\n\n // If a match is found, add the item to , including its score\n if (exists) {\n this.resultMap[index] = {\n item: entity,\n output: [{\n key: key,\n score: averageScore,\n }]\n }\n\n this.results.push(this.resultMap[index])\n }\n }\n\n Fuse.prototype._computeScore = function () {\n var i\n var j\n var keyMap = this._keyMap\n var totalScore\n var output\n var scoreLen\n var score\n var weight\n var results = this.results\n var bestScore\n var nScore\n\n for (i = 0; i < results.length; i++) {\n totalScore = 0\n output = results[i].output\n scoreLen = output.length\n\n bestScore = 1\n\n for (j = 0; j < scoreLen; j++) {\n score = output[j].score\n weight = keyMap ? keyMap[output[j].key].weight : 1\n\n nScore = score * weight\n\n if (weight !== 1) {\n bestScore = Math.min(bestScore, nScore)\n } else {\n totalScore += nScore\n output[j].nScore = nScore\n }\n }\n\n if (bestScore === 1) {\n results[i].score = totalScore / scoreLen\n } else {\n results[i].score = bestScore\n }\n }\n }\n\n Fuse.prototype._sort = function () {\n this.results.sort(this.options.sortFn)\n }\n\n Fuse.prototype._format = function () {\n var options = this.options\n var finalOutput = []\n var i\n var len\n var results = this.results\n\n // From the results, push into a new array only the item identifier (if specified)\n // of the entire item. This is because we don't want to return the ,\n // since it contains other metadata\n for (i = 0, len = results.length; i < len; i++) {\n finalOutput.push(results[i].item);\n }\n\n return finalOutput\n }\n\n /**\n * Adapted from \"Diff, Match and Patch\", by Google\n *\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Modified by: Kirollos Risk \n * -----------------------------------------------\n * Details: the algorithm and structure was modified to allow the creation of\n * instances with a method which does the actual\n * bitap search. The (the string that is searched for) is only defined\n * once per instance and thus it eliminates redundant re-creation when searching\n * over a list of strings.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n *\n * @constructor\n */\n function BitapSearcher (pattern, options) {\n options = options || {}\n this.options = options\n this.options.location = options.location || BitapSearcher.defaultOptions.location\n this.options.distance = 'distance' in options ? options.distance : BitapSearcher.defaultOptions.distance\n this.options.threshold = 'threshold' in options ? options.threshold : BitapSearcher.defaultOptions.threshold\n this.options.maxPatternLength = options.maxPatternLength || BitapSearcher.defaultOptions.maxPatternLength\n\n this.pattern = pattern.toLowerCase()\n this.patternLen = pattern.length\n\n this.overflow = this.patternLen > options.maxPatternLength;\n\n this.cache = {};\n if (this.patternLen <= this.options.maxPatternLength) {\n this.matchmask = 1 << (this.patternLen - 1)\n this.patternAlphabet = this._calculatePatternAlphabet()\n }\n }\n\n BitapSearcher.defaultOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100,\n\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n\n // Machine word size\n maxPatternLength: 32\n }\n\n /**\n * Initialize the alphabet for the Bitap algorithm.\n * @return {Object} Hash of character locations.\n * @private\n */\n BitapSearcher.prototype._calculatePatternAlphabet = function () {\n var mask = {},\n i = 0\n\n for (i = 0; i < this.patternLen; i++) {\n mask[this.pattern.charAt(i)] = 0\n }\n\n for (i = 0; i < this.patternLen; i++) {\n mask[this.pattern.charAt(i)] |= 1 << (this.pattern.length - i - 1)\n }\n\n return mask\n }\n\n /**\n * Compute and return the score for a match with `e` errors and `x` location.\n * @param {number} errors Number of errors in match.\n * @param {number} location Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n BitapSearcher.prototype._bitapScore = function (errors, location) {\n var accuracy = errors / this.patternLen,\n proximity = Math.abs(this.options.location - location)\n\n if (!this.options.distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n return accuracy + (proximity / this.options.distance)\n }\n\n /**\n * Compute and return the result of the search\n * @param {string} text The text to search in\n * @return {{isMatch: boolean, score: number}} Literal containing:\n * isMatch - Whether the text is a match or not\n * score - Overall score for the match\n * @public\n */\n BitapSearcher.prototype.search = function (text) {\n if (!this.cache[text]) {\n this.cache[text] = this._search(text)\n }\n\n return this.cache[text];\n }\n\n BitapSearcher.prototype._search = function (text) {\n var options = this.options\n var i\n var j\n var textLen\n var location\n var threshold\n var bestLoc\n var binMin\n var binMid\n var binMax\n var start, finish\n var bitArr\n var lastBitArr\n var charMatch\n var score\n var locations\n var matches\n var isMatched\n var matchMask\n var matchedIndices\n var matchesLen\n var match\n\n if (this.pattern === text || text.indexOf(this.pattern) === 0) {\n // Exact match\n return {\n isMatch: true,\n score: 0,\n }\n }\n\n // When pattern length is greater than the machine word length, just do a a regex comparison\n if (this.overflow) {\n matches = text.match(new RegExp(this.pattern.replace(options.tokenSeparator, '|')))\n isMatched = !!matches\n\n return {\n isMatch: isMatched,\n // TODO: revisit this score\n score: isMatched ? 0.5 : 1,\n }\n }\n\n location = options.location\n // Set starting location at beginning text and initialize the alphabet.\n textLen = text.length\n // Highest score beyond which we give up.\n threshold = options.threshold\n // Is there a nearby exact match? (speedup)\n bestLoc = text.indexOf(this.pattern, location)\n\n // a mask of the matches\n matchMask = []\n for (i = 0; i < textLen; i++) {\n matchMask[i] = 0\n }\n\n if (bestLoc != -1) {\n threshold = Math.min(this._bitapScore(0, bestLoc), threshold)\n // What about in the other direction? (speed up)\n bestLoc = text.lastIndexOf(this.pattern, location + this.patternLen)\n\n if (bestLoc != -1) {\n threshold = Math.min(this._bitapScore(0, bestLoc), threshold)\n }\n }\n\n bestLoc = -1\n score = 1\n locations = []\n binMax = this.patternLen + textLen\n\n for (i = 0; i < this.patternLen; i++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n binMin = 0\n binMid = binMax\n while (binMin < binMid) {\n if (this._bitapScore(i, location + binMid) <= threshold) {\n binMin = binMid\n } else {\n binMax = binMid\n }\n binMid = Math.floor((binMax - binMin) / 2 + binMin)\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid\n start = Math.max(1, location - binMid + 1)\n finish = Math.min(location + binMid, textLen) + this.patternLen\n\n // Initialize the bit array\n bitArr = Array(finish + 2)\n\n bitArr[finish + 1] = (1 << i) - 1\n\n for (j = finish; j >= start; j--) {\n charMatch = this.patternAlphabet[text.charAt(j - 1)]\n\n if (charMatch) {\n matchMask[j - 1] = 1\n }\n\n if (i === 0) {\n // First pass: exact match.\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch\n } else {\n // Subsequent passes: fuzzy match.\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch | (((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1) | lastBitArr[j + 1]\n }\n if (bitArr[j] & this.matchmask) {\n score = this._bitapScore(i, j - 1)\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= threshold) {\n // Indeed it is\n threshold = score\n bestLoc = j - 1\n locations.push(bestLoc)\n\n if (bestLoc > location) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * location - bestLoc)\n } else {\n // Already passed loc, downhill from here on in.\n break\n }\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n if (this._bitapScore(i + 1, location) > threshold) {\n break\n }\n lastBitArr = bitArr\n }\n\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n return {\n isMatch: bestLoc >= 0,\n score: score === 0 ? 0.001 : score,\n }\n }\n\n // Export to Common JS Loader\n if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = Fuse\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function () {\n return Fuse\n })\n } else {\n // Browser globals (root is window)\n global.Fuse = Fuse\n }\n\n})(this);\n","import { options } from 'preact';\n\n/** @type {number} */\nlet currentIndex;\n\n/** @type {import('./internal').Component} */\nlet currentComponent;\n\n/** @type {number} */\nlet currentHook = 0;\n\n/** @type {Array} */\nlet afterPaintEffects = [];\n\nlet oldBeforeDiff = options._diff;\nlet oldBeforeRender = options._render;\nlet oldAfterDiff = options.diffed;\nlet oldCommit = options._commit;\nlet oldBeforeUnmount = options.unmount;\n\nconst RAF_TIMEOUT = 100;\nlet prevRaf;\n\noptions._diff = vnode => {\n\tcurrentComponent = null;\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n};\n\noptions._render = vnode => {\n\tif (oldBeforeRender) oldBeforeRender(vnode);\n\n\tcurrentComponent = vnode._component;\n\tcurrentIndex = 0;\n\n\tconst hooks = currentComponent.__hooks;\n\tif (hooks) {\n\t\thooks._pendingEffects.forEach(invokeCleanup);\n\t\thooks._pendingEffects.forEach(invokeEffect);\n\t\thooks._pendingEffects = [];\n\t}\n};\n\noptions.diffed = vnode => {\n\tif (oldAfterDiff) oldAfterDiff(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks && c.__hooks._pendingEffects.length) {\n\t\tafterPaint(afterPaintEffects.push(c));\n\t}\n\tcurrentComponent = null;\n};\n\noptions._commit = (vnode, commitQueue) => {\n\tcommitQueue.some(component => {\n\t\ttry {\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\n\t\t\t\tcb._value ? invokeEffect(cb) : true\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tcommitQueue.some(c => {\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\n\t\t\t});\n\t\t\tcommitQueue = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t});\n\n\tif (oldCommit) oldCommit(vnode, commitQueue);\n};\n\noptions.unmount = vnode => {\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tlet hasErrored;\n\t\tc.__hooks._list.forEach(s => {\n\t\t\ttry {\n\t\t\t\tinvokeCleanup(s);\n\t\t\t} catch (e) {\n\t\t\t\thasErrored = e;\n\t\t\t}\n\t\t});\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\n\t}\n};\n\n/**\n * Get a hook's state from the currentComponent\n * @param {number} index The index of the hook to get\n * @param {number} type The index of the hook to get\n * @returns {any}\n */\nfunction getHookState(index, type) {\n\tif (options._hook) {\n\t\toptions._hook(currentComponent, index, currentHook || type);\n\t}\n\tcurrentHook = 0;\n\n\t// Largely inspired by:\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\n\t// Other implementations to look at:\n\t// * https://codesandbox.io/s/mnox05qp8\n\tconst hooks =\n\t\tcurrentComponent.__hooks ||\n\t\t(currentComponent.__hooks = {\n\t\t\t_list: [],\n\t\t\t_pendingEffects: []\n\t\t});\n\n\tif (index >= hooks._list.length) {\n\t\thooks._list.push({});\n\t}\n\treturn hooks._list[index];\n}\n\n/**\n * @param {import('./index').StateUpdater} [initialState]\n */\nexport function useState(initialState) {\n\tcurrentHook = 1;\n\treturn useReducer(invokeOrReturn, initialState);\n}\n\n/**\n * @param {import('./index').Reducer} reducer\n * @param {import('./index').StateUpdater} initialState\n * @param {(initialState: any) => void} [init]\n * @returns {[ any, (state: any) => void ]}\n */\nexport function useReducer(reducer, initialState, init) {\n\t/** @type {import('./internal').ReducerHookState} */\n\tconst hookState = getHookState(currentIndex++, 2);\n\thookState._reducer = reducer;\n\tif (!hookState._component) {\n\t\thookState._value = [\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\n\n\t\t\taction => {\n\t\t\t\tconst nextValue = hookState._reducer(hookState._value[0], action);\n\t\t\t\tif (hookState._value[0] !== nextValue) {\n\t\t\t\t\thookState._value = [nextValue, hookState._value[1]];\n\t\t\t\t\thookState._component.setState({});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\thookState._component = currentComponent;\n\t}\n\n\treturn hookState._value;\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 3);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._args = args;\n\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\n\t}\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useLayoutEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 4);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._args = args;\n\n\t\tcurrentComponent._renderCallbacks.push(state);\n\t}\n}\n\nexport function useRef(initialValue) {\n\tcurrentHook = 5;\n\treturn useMemo(() => ({ current: initialValue }), []);\n}\n\n/**\n * @param {object} ref\n * @param {() => object} createHandle\n * @param {any[]} args\n */\nexport function useImperativeHandle(ref, createHandle, args) {\n\tcurrentHook = 6;\n\tuseLayoutEffect(\n\t\t() => {\n\t\t\tif (typeof ref == 'function') ref(createHandle());\n\t\t\telse if (ref) ref.current = createHandle();\n\t\t},\n\t\targs == null ? args : args.concat(ref)\n\t);\n}\n\n/**\n * @param {() => any} factory\n * @param {any[]} args\n */\nexport function useMemo(factory, args) {\n\t/** @type {import('./internal').MemoHookState} */\n\tconst state = getHookState(currentIndex++, 7);\n\tif (argsChanged(state._args, args)) {\n\t\tstate._value = factory();\n\t\tstate._args = args;\n\t\tstate._factory = factory;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * @param {() => void} callback\n * @param {any[]} args\n */\nexport function useCallback(callback, args) {\n\tcurrentHook = 8;\n\treturn useMemo(() => callback, args);\n}\n\n/**\n * @param {import('./internal').PreactContext} context\n */\nexport function useContext(context) {\n\tconst provider = currentComponent.context[context._id];\n\t// We could skip this call here, but than we'd not call\n\t// `options._hook`. We need to do that in order to make\n\t// the devtools aware of this hook.\n\t/** @type {import('./internal').ContextHookState} */\n\tconst state = getHookState(currentIndex++, 9);\n\t// The devtools needs access to the context object to\n\t// be able to pull of the default value when no provider\n\t// is present in the tree.\n\tstate._context = context;\n\tif (!provider) return context._defaultValue;\n\t// This is probably not safe to convert to \"!\"\n\tif (state._value == null) {\n\t\tstate._value = true;\n\t\tprovider.sub(currentComponent);\n\t}\n\treturn provider.props.value;\n}\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {(value: T, cb?: (value: T) => string | number) => void}\n */\nexport function useDebugValue(value, formatter) {\n\tif (options.useDebugValue) {\n\t\toptions.useDebugValue(formatter ? formatter(value) : value);\n\t}\n}\n\n/**\n * @param {(error: any) => void} cb\n */\nexport function useErrorBoundary(cb) {\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\n\tconst state = getHookState(currentIndex++, 10);\n\tconst errState = useState();\n\tstate._value = cb;\n\tif (!currentComponent.componentDidCatch) {\n\t\tcurrentComponent.componentDidCatch = err => {\n\t\t\tif (state._value) state._value(err);\n\t\t\terrState[1](err);\n\t\t};\n\t}\n\treturn [\n\t\terrState[0],\n\t\t() => {\n\t\t\terrState[1](undefined);\n\t\t}\n\t];\n}\n\n/**\n * After paint effects consumer.\n */\nfunction flushAfterPaintEffects() {\n\tlet component;\n\twhile ((component = afterPaintEffects.shift())) {\n\t\tif (!component._parentDom) continue;\n\t\ttry {\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t}\n}\n\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\n\n/**\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\n * the next browser frame.\n *\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\n * even if RAF doesn't fire (for example if the browser tab is not visible)\n *\n * @param {() => void} callback\n */\nfunction afterNextFrame(callback) {\n\tconst done = () => {\n\t\tclearTimeout(timeout);\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\n\t\tsetTimeout(callback);\n\t};\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\n\n\tlet raf;\n\tif (HAS_RAF) {\n\t\traf = requestAnimationFrame(done);\n\t}\n}\n\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\n// Perhaps this is not such a big deal.\n/**\n * Schedule afterPaintEffects flush after the browser paints\n * @param {number} newQueueLength\n */\nfunction afterPaint(newQueueLength) {\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\n\t\tprevRaf = options.requestAnimationFrame;\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\n\t}\n}\n\n/**\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeCleanup(hook) {\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\tlet cleanup = hook._cleanup;\n\tif (typeof cleanup == 'function') {\n\t\thook._cleanup = undefined;\n\t\tcleanup();\n\t}\n\tcurrentComponent = comp;\n}\n\n/**\n * Invoke a Hook's effect\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeEffect(hook) {\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\thook._cleanup = hook._value();\n\tcurrentComponent = comp;\n}\n\n/**\n * @param {any[]} oldArgs\n * @param {any[]} newArgs\n */\nfunction argsChanged(oldArgs, newArgs) {\n\treturn (\n\t\t!oldArgs ||\n\t\toldArgs.length !== newArgs.length ||\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\n\t);\n}\n\nfunction invokeOrReturn(arg, f) {\n\treturn typeof f == 'function' ? f(arg) : f;\n}\n","/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Check if two objects have a different shape\n * @param {object} a\n * @param {object} b\n * @returns {boolean}\n */\nexport function shallowDiffers(a, b) {\n\tfor (let i in a) if (i !== '__source' && !(i in b)) return true;\n\tfor (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;\n\treturn false;\n}\n\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n","import { Component } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Component class with a predefined `shouldComponentUpdate` implementation\n */\nexport function PureComponent(p) {\n\tthis.props = p;\n}\nPureComponent.prototype = new Component();\n// Some third-party libraries check if this property is present\nPureComponent.prototype.isPureReactComponent = true;\nPureComponent.prototype.shouldComponentUpdate = function(props, state) {\n\treturn shallowDiffers(this.props, props) || shallowDiffers(this.state, state);\n};\n","import { createElement } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Memoize a component, so that it only updates when the props actually have\n * changed. This was previously known as `React.pure`.\n * @param {import('./internal').FunctionComponent} c functional component\n * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function\n * @returns {import('./internal').FunctionComponent}\n */\nexport function memo(c, comparer) {\n\tfunction shouldUpdate(nextProps) {\n\t\tlet ref = this.props.ref;\n\t\tlet updateRef = ref == nextProps.ref;\n\t\tif (!updateRef && ref) {\n\t\t\tref.call ? ref(null) : (ref.current = null);\n\t\t}\n\n\t\tif (!comparer) {\n\t\t\treturn shallowDiffers(this.props, nextProps);\n\t\t}\n\n\t\treturn !comparer(this.props, nextProps) || !updateRef;\n\t}\n\n\tfunction Memoed(props) {\n\t\tthis.shouldComponentUpdate = shouldUpdate;\n\t\treturn createElement(c, props);\n\t}\n\tMemoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';\n\tMemoed.prototype.isReactComponent = true;\n\tMemoed._forwarded = true;\n\treturn Memoed;\n}\n","import { options } from 'preact';\nimport { assign } from './util';\n\nlet oldDiffHook = options._diff;\noptions._diff = vnode => {\n\tif (vnode.type && vnode.type._forwarded && vnode.ref) {\n\t\tvnode.props.ref = vnode.ref;\n\t\tvnode.ref = null;\n\t}\n\tif (oldDiffHook) oldDiffHook(vnode);\n};\n\nexport const REACT_FORWARD_SYMBOL =\n\t(typeof Symbol != 'undefined' &&\n\t\tSymbol.for &&\n\t\tSymbol.for('react.forward_ref')) ||\n\t0xf47;\n\n/**\n * Pass ref down to a child. This is mainly used in libraries with HOCs that\n * wrap components. Using `forwardRef` there is an easy way to get a reference\n * of the wrapped component instead of one of the wrapper itself.\n * @param {import('./index').ForwardFn} fn\n * @returns {import('./internal').FunctionComponent}\n */\nexport function forwardRef(fn) {\n\t// We always have ref in props.ref, except for\n\t// mobx-react. It will call this function directly\n\t// and always pass ref as the second argument.\n\tfunction Forwarded(props, ref) {\n\t\tlet clone = assign({}, props);\n\t\tdelete clone.ref;\n\t\tref = props.ref || ref;\n\t\treturn fn(\n\t\t\tclone,\n\t\t\t!ref || (typeof ref === 'object' && !('current' in ref)) ? null : ref\n\t\t);\n\t}\n\n\t// mobx-react checks for this being present\n\tForwarded.$$typeof = REACT_FORWARD_SYMBOL;\n\t// mobx-react heavily relies on implementation details.\n\t// It expects an object here with a `render` property,\n\t// and prototype.render will fail. Without this\n\t// mobx-react throws.\n\tForwarded.render = Forwarded;\n\n\tForwarded.prototype.isReactComponent = Forwarded._forwarded = true;\n\tForwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';\n\treturn Forwarded;\n}\n","import { toChildArray } from 'preact';\n\nconst mapFn = (children, fn) => {\n\tif (children == null) return null;\n\treturn toChildArray(toChildArray(children).map(fn));\n};\n\n// This API is completely unnecessary for Preact, so it's basically passthrough.\nexport const Children = {\n\tmap: mapFn,\n\tforEach: mapFn,\n\tcount(children) {\n\t\treturn children ? toChildArray(children).length : 0;\n\t},\n\tonly(children) {\n\t\tconst normalized = toChildArray(children);\n\t\tif (normalized.length !== 1) throw 'Children.only';\n\t\treturn normalized[0];\n\t},\n\ttoArray: toChildArray\n};\n","import { Component, createElement, options, Fragment } from 'preact';\nimport { assign } from './util';\n\nconst oldCatchError = options._catchError;\noptions._catchError = function(error, newVNode, oldVNode) {\n\tif (error.then) {\n\t\t/** @type {import('./internal').Component} */\n\t\tlet component;\n\t\tlet vnode = newVNode;\n\n\t\tfor (; (vnode = vnode._parent); ) {\n\t\t\tif ((component = vnode._component) && component._childDidSuspend) {\n\t\t\t\tif (newVNode._dom == null) {\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t}\n\t\t\t\t// Don't call oldCatchError if we found a Suspense\n\t\t\t\treturn component._childDidSuspend(error, newVNode);\n\t\t\t}\n\t\t}\n\t}\n\toldCatchError(error, newVNode, oldVNode);\n};\n\nconst oldUnmount = options.unmount;\noptions.unmount = function(vnode) {\n\t/** @type {import('./internal').Component} */\n\tconst component = vnode._component;\n\tif (component && component._onResolve) {\n\t\tcomponent._onResolve();\n\t}\n\n\t// if the component is still hydrating\n\t// most likely it is because the component is suspended\n\t// we set the vnode.type as `null` so that it is not a typeof function\n\t// so the unmount will remove the vnode._dom\n\tif (component && vnode._hydrating === true) {\n\t\tvnode.type = null;\n\t}\n\n\tif (oldUnmount) oldUnmount(vnode);\n};\n\nfunction detachedClone(vnode, detachedParent, parentDom) {\n\tif (vnode) {\n\t\tif (vnode._component && vnode._component.__hooks) {\n\t\t\tvnode._component.__hooks._list.forEach(effect => {\n\t\t\t\tif (typeof effect._cleanup == 'function') effect._cleanup();\n\t\t\t});\n\n\t\t\tvnode._component.__hooks = null;\n\t\t}\n\n\t\tvnode = assign({}, vnode);\n\t\tif (vnode._component != null) {\n\t\t\tif (vnode._component._parentDom === parentDom) {\n\t\t\t\tvnode._component._parentDom = detachedParent;\n\t\t\t}\n\t\t\tvnode._component = null;\n\t\t}\n\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tdetachedClone(child, detachedParent, parentDom)\n\t\t\t);\n\t}\n\n\treturn vnode;\n}\n\nfunction removeOriginal(vnode, detachedParent, originalParent) {\n\tif (vnode) {\n\t\tvnode._original = null;\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tremoveOriginal(child, detachedParent, originalParent)\n\t\t\t);\n\n\t\tif (vnode._component) {\n\t\t\tif (vnode._component._parentDom === detachedParent) {\n\t\t\t\tif (vnode._dom) {\n\t\t\t\t\toriginalParent.insertBefore(vnode._dom, vnode._nextDom);\n\t\t\t\t}\n\t\t\t\tvnode._component._force = true;\n\t\t\t\tvnode._component._parentDom = originalParent;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn vnode;\n}\n\n// having custom inheritance instead of a class here saves a lot of bytes\nexport function Suspense() {\n\t// we do not call super here to golf some bytes...\n\tthis._pendingSuspensionCount = 0;\n\tthis._suspenders = null;\n\tthis._detachOnNextRender = null;\n}\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspense.prototype = new Component();\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {Promise} promise The thrown promise\n * @param {import('./internal').VNode} suspendingVNode The suspending component\n */\nSuspense.prototype._childDidSuspend = function(promise, suspendingVNode) {\n\tconst suspendingComponent = suspendingVNode._component;\n\n\t/** @type {import('./internal').SuspenseComponent} */\n\tconst c = this;\n\n\tif (c._suspenders == null) {\n\t\tc._suspenders = [];\n\t}\n\tc._suspenders.push(suspendingComponent);\n\n\tconst resolve = suspended(c._vnode);\n\n\tlet resolved = false;\n\tconst onResolved = () => {\n\t\tif (resolved) return;\n\n\t\tresolved = true;\n\t\tsuspendingComponent._onResolve = null;\n\n\t\tif (resolve) {\n\t\t\tresolve(onSuspensionComplete);\n\t\t} else {\n\t\t\tonSuspensionComplete();\n\t\t}\n\t};\n\n\tsuspendingComponent._onResolve = onResolved;\n\n\tconst onSuspensionComplete = () => {\n\t\tif (!--c._pendingSuspensionCount) {\n\t\t\t// If the suspension was during hydration we don't need to restore the\n\t\t\t// suspended children into the _children array\n\t\t\tif (c.state._suspended) {\n\t\t\t\tconst suspendedVNode = c.state._suspended;\n\t\t\t\tc._vnode._children[0] = removeOriginal(\n\t\t\t\t\tsuspendedVNode,\n\t\t\t\t\tsuspendedVNode._component._parentDom,\n\t\t\t\t\tsuspendedVNode._component._originalParentDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tc.setState({ _suspended: (c._detachOnNextRender = null) });\n\n\t\t\tlet suspended;\n\t\t\twhile ((suspended = c._suspenders.pop())) {\n\t\t\t\tsuspended.forceUpdate();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * We do not set `suspended: true` during hydration because we want the actual markup\n\t * to remain on screen and hydrate it when the suspense actually gets resolved.\n\t * While in non-hydration cases the usual fallback -> component flow would occour.\n\t */\n\tconst wasHydrating = suspendingVNode._hydrating === true;\n\tif (!c._pendingSuspensionCount++ && !wasHydrating) {\n\t\tc.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });\n\t}\n\tpromise.then(onResolved, onResolved);\n};\n\nSuspense.prototype.componentWillUnmount = function() {\n\tthis._suspenders = [];\n};\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {import('./internal').SuspenseComponent[\"props\"]} props\n * @param {import('./internal').SuspenseState} state\n */\nSuspense.prototype.render = function(props, state) {\n\tif (this._detachOnNextRender) {\n\t\t// When the Suspense's _vnode was created by a call to createVNode\n\t\t// (i.e. due to a setState further up in the tree)\n\t\t// it's _children prop is null, in this case we \"forget\" about the parked vnodes to detach\n\t\tif (this._vnode._children) {\n\t\t\tconst detachedParent = document.createElement('div');\n\t\t\tconst detachedComponent = this._vnode._children[0]._component;\n\t\t\tthis._vnode._children[0] = detachedClone(\n\t\t\t\tthis._detachOnNextRender,\n\t\t\t\tdetachedParent,\n\t\t\t\t(detachedComponent._originalParentDom = detachedComponent._parentDom)\n\t\t\t);\n\t\t}\n\n\t\tthis._detachOnNextRender = null;\n\t}\n\n\t// Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:\n\t/** @type {import('./internal').VNode} */\n\tconst fallback =\n\t\tstate._suspended && createElement(Fragment, null, props.fallback);\n\tif (fallback) fallback._hydrating = null;\n\n\treturn [\n\t\tcreateElement(Fragment, null, state._suspended ? null : props.children),\n\t\tfallback\n\t];\n};\n\n/**\n * Checks and calls the parent component's _suspended method, passing in the\n * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified\n * that one of its children/descendants suspended.\n *\n * The parent MAY return a callback. The callback will get called when the\n * suspension resolves, notifying the parent of the fact.\n * Moreover, the callback gets function `unsuspend` as a parameter. The resolved\n * child descendant will not actually get unsuspended until `unsuspend` gets called.\n * This is a way for the parent to delay unsuspending.\n *\n * If the parent does not return a callback then the resolved vnode\n * gets unsuspended immediately when it resolves.\n *\n * @param {import('./internal').VNode} vnode\n * @returns {((unsuspend: () => void) => void)?}\n */\nexport function suspended(vnode) {\n\t/** @type {import('./internal').Component} */\n\tlet component = vnode._parent._component;\n\treturn component && component._suspended && component._suspended(vnode);\n}\n\nexport function lazy(loader) {\n\tlet prom;\n\tlet component;\n\tlet error;\n\n\tfunction Lazy(props) {\n\t\tif (!prom) {\n\t\t\tprom = loader();\n\t\t\tprom.then(\n\t\t\t\texports => {\n\t\t\t\t\tcomponent = exports.default || exports;\n\t\t\t\t},\n\t\t\t\te => {\n\t\t\t\t\terror = e;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!component) {\n\t\t\tthrow prom;\n\t\t}\n\n\t\treturn createElement(component, props);\n\t}\n\n\tLazy.displayName = 'Lazy';\n\tLazy._forwarded = true;\n\treturn Lazy;\n}\n","import { Component, toChildArray } from 'preact';\nimport { suspended } from './suspense.js';\n\n// Indexes to linked list nodes (nodes are stored as arrays to save bytes).\nconst SUSPENDED_COUNT = 0;\nconst RESOLVED_COUNT = 1;\nconst NEXT_NODE = 2;\n\n// Having custom inheritance instead of a class here saves a lot of bytes.\nexport function SuspenseList() {\n\tthis._next = null;\n\tthis._map = null;\n}\n\n// Mark one of child's earlier suspensions as resolved.\n// Some pending callbacks may become callable due to this\n// (e.g. the last suspended descendant gets resolved when\n// revealOrder === 'together'). Process those callbacks as well.\nconst resolve = (list, child, node) => {\n\tif (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {\n\t\t// The number a child (or any of its descendants) has been suspended\n\t\t// matches the number of times it's been resolved. Therefore we\n\t\t// mark the child as completely resolved by deleting it from ._map.\n\t\t// This is used to figure out when *all* children have been completely\n\t\t// resolved when revealOrder is 'together'.\n\t\tlist._map.delete(child);\n\t}\n\n\t// If revealOrder is falsy then we can do an early exit, as the\n\t// callbacks won't get queued in the node anyway.\n\t// If revealOrder is 'together' then also do an early exit\n\t// if all suspended descendants have not yet been resolved.\n\tif (\n\t\t!list.props.revealOrder ||\n\t\t(list.props.revealOrder[0] === 't' && list._map.size)\n\t) {\n\t\treturn;\n\t}\n\n\t// Walk the currently suspended children in order, calling their\n\t// stored callbacks on the way. Stop if we encounter a child that\n\t// has not been completely resolved yet.\n\tnode = list._next;\n\twhile (node) {\n\t\twhile (node.length > 3) {\n\t\t\tnode.pop()();\n\t\t}\n\t\tif (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {\n\t\t\tbreak;\n\t\t}\n\t\tlist._next = node = node[NEXT_NODE];\n\t}\n};\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspenseList.prototype = new Component();\n\nSuspenseList.prototype._suspended = function(child) {\n\tconst list = this;\n\tconst delegated = suspended(list._vnode);\n\n\tlet node = list._map.get(child);\n\tnode[SUSPENDED_COUNT]++;\n\n\treturn unsuspend => {\n\t\tconst wrappedUnsuspend = () => {\n\t\t\tif (!list.props.revealOrder) {\n\t\t\t\t// Special case the undefined (falsy) revealOrder, as there\n\t\t\t\t// is no need to coordinate a specific order or unsuspends.\n\t\t\t\tunsuspend();\n\t\t\t} else {\n\t\t\t\tnode.push(unsuspend);\n\t\t\t\tresolve(list, child, node);\n\t\t\t}\n\t\t};\n\t\tif (delegated) {\n\t\t\tdelegated(wrappedUnsuspend);\n\t\t} else {\n\t\t\twrappedUnsuspend();\n\t\t}\n\t};\n};\n\nSuspenseList.prototype.render = function(props) {\n\tthis._next = null;\n\tthis._map = new Map();\n\n\tconst children = toChildArray(props.children);\n\tif (props.revealOrder && props.revealOrder[0] === 'b') {\n\t\t// If order === 'backwards' (or, well, anything starting with a 'b')\n\t\t// then flip the child list around so that the last child will be\n\t\t// the first in the linked list.\n\t\tchildren.reverse();\n\t}\n\t// Build the linked list. Iterate through the children in reverse order\n\t// so that `_next` points to the first linked list node to be resolved.\n\tfor (let i = children.length; i--; ) {\n\t\t// Create a new linked list node as an array of form:\n\t\t// \t[suspended_count, resolved_count, next_node]\n\t\t// where suspended_count and resolved_count are numeric counters for\n\t\t// keeping track how many times a node has been suspended and resolved.\n\t\t//\n\t\t// Note that suspended_count starts from 1 instead of 0, so we can block\n\t\t// processing callbacks until componentDidMount has been called. In a sense\n\t\t// node is suspended at least until componentDidMount gets called!\n\t\t//\n\t\t// Pending callbacks are added to the end of the node:\n\t\t// \t[suspended_count, resolved_count, next_node, callback_0, callback_1, ...]\n\t\tthis._map.set(children[i], (this._next = [1, 0, this._next]));\n\t}\n\treturn props.children;\n};\n\nSuspenseList.prototype.componentDidUpdate = SuspenseList.prototype.componentDidMount = function() {\n\t// Iterate through all children after mounting for two reasons:\n\t// 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases\n\t// each node[RELEASED_COUNT] by 1, therefore balancing the counters.\n\t// The nodes can now be completely consumed from the linked list.\n\t// 2. Handle nodes that might have gotten resolved between render and\n\t// componentDidMount.\n\tthis._map.forEach((node, child) => {\n\t\tresolve(this, child, node);\n\t});\n};\n","import { createElement, render } from 'preact';\n\n/**\n * @param {import('../../src/index').RenderableProps<{ context: any }>} props\n */\nfunction ContextProvider(props) {\n\tthis.getChildContext = () => props.context;\n\treturn props.children;\n}\n\n/**\n * Portal component\n * @this {import('./internal').Component}\n * @param {object | null | undefined} props\n *\n * TODO: use createRoot() instead of fake root\n */\nfunction Portal(props) {\n\tconst _this = this;\n\tlet container = props._container;\n\n\t_this.componentWillUnmount = function() {\n\t\trender(null, _this._temp);\n\t\t_this._temp = null;\n\t\t_this._container = null;\n\t};\n\n\t// When we change container we should clear our old container and\n\t// indicate a new mount.\n\tif (_this._container && _this._container !== container) {\n\t\t_this.componentWillUnmount();\n\t}\n\n\t// When props.vnode is undefined/false/null we are dealing with some kind of\n\t// conditional vnode. This should not trigger a render.\n\tif (props._vnode) {\n\t\tif (!_this._temp) {\n\t\t\t_this._container = container;\n\n\t\t\t// Create a fake DOM parent node that manages a subset of `container`'s children:\n\t\t\t_this._temp = {\n\t\t\t\tnodeType: 1,\n\t\t\t\tparentNode: container,\n\t\t\t\tchildNodes: [],\n\t\t\t\tappendChild(child) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tinsertBefore(child, before) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tremoveChild(child) {\n\t\t\t\t\tthis.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);\n\t\t\t\t\t_this._container.removeChild(child);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// Render our wrapping element into temp.\n\t\trender(\n\t\t\tcreateElement(ContextProvider, { context: _this.context }, props._vnode),\n\t\t\t_this._temp\n\t\t);\n\t}\n\t// When we come from a conditional render, on a mounted\n\t// portal we should clear the DOM.\n\telse if (_this._temp) {\n\t\t_this.componentWillUnmount();\n\t}\n}\n\n/**\n * Create a `Portal` to continue rendering the vnode tree at a different DOM node\n * @param {import('./internal').VNode} vnode The vnode to render\n * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.\n */\nexport function createPortal(vnode, container) {\n\treturn createElement(Portal, { _vnode: vnode, _container: container });\n}\n","import {\n\trender as preactRender,\n\thydrate as preactHydrate,\n\toptions,\n\ttoChildArray,\n\tComponent\n} from 'preact';\n\nexport const REACT_ELEMENT_TYPE =\n\t(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||\n\t0xeac7;\n\nconst CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;\n\nconst IS_DOM = typeof document !== 'undefined';\n\n// Input types for which onchange should not be converted to oninput.\n// type=\"file|checkbox|radio\", plus \"range\" in IE11.\n// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches \"range\")\nconst onChangeInputType = type =>\n\t(typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'\n\t\t? /fil|che|rad/i\n\t\t: /fil|che|ra/i\n\t).test(type);\n\n// Some libraries like `react-virtualized` explicitly check for this.\nComponent.prototype.isReactComponent = {};\n\n// `UNSAFE_*` lifecycle hooks\n// Preact only ever invokes the unprefixed methods.\n// Here we provide a base \"fallback\" implementation that calls any defined UNSAFE_ prefixed method.\n// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.\n// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.\n// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.\n// See https://github.com/preactjs/preact/issues/1941\n[\n\t'componentWillMount',\n\t'componentWillReceiveProps',\n\t'componentWillUpdate'\n].forEach(key => {\n\tObject.defineProperty(Component.prototype, key, {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn this['UNSAFE_' + key];\n\t\t},\n\t\tset(v) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: v\n\t\t\t});\n\t\t}\n\t});\n});\n\n/**\n * Proxy render() since React returns a Component reference.\n * @param {import('./internal').VNode} vnode VNode tree to render\n * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into\n * @param {() => void} [callback] Optional callback that will be called after rendering\n * @returns {import('./internal').Component | null} The root component reference or null\n */\nexport function render(vnode, parent, callback) {\n\t// React destroys any existing DOM nodes, see #1727\n\t// ...but only on the first render, see #1828\n\tif (parent._children == null) {\n\t\tparent.textContent = '';\n\t}\n\n\tpreactRender(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nexport function hydrate(vnode, parent, callback) {\n\tpreactHydrate(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nlet oldEventHook = options.event;\noptions.event = e => {\n\tif (oldEventHook) e = oldEventHook(e);\n\te.persist = empty;\n\te.isPropagationStopped = isPropagationStopped;\n\te.isDefaultPrevented = isDefaultPrevented;\n\treturn (e.nativeEvent = e);\n};\n\nfunction empty() {}\n\nfunction isPropagationStopped() {\n\treturn this.cancelBubble;\n}\n\nfunction isDefaultPrevented() {\n\treturn this.defaultPrevented;\n}\n\nlet classNameDescriptor = {\n\tconfigurable: true,\n\tget() {\n\t\treturn this.class;\n\t}\n};\n\nlet oldVNodeHook = options.vnode;\noptions.vnode = vnode => {\n\tlet type = vnode.type;\n\tlet props = vnode.props;\n\tlet normalizedProps = props;\n\n\t// only normalize props on Element nodes\n\tif (typeof type === 'string') {\n\t\tconst nonCustomElement = type.indexOf('-') === -1;\n\t\tnormalizedProps = {};\n\n\t\tfor (let i in props) {\n\t\t\tlet value = props[i];\n\n\t\t\tif (IS_DOM && i === 'children' && type === 'noscript') {\n\t\t\t\t// Emulate React's behavior of not rendering the contents of noscript tags on the client.\n\t\t\t\tcontinue;\n\t\t\t} else if (i === 'value' && 'defaultValue' in props && value == null) {\n\t\t\t\t// Skip applying value if it is null/undefined and we already set\n\t\t\t\t// a default value\n\t\t\t\tcontinue;\n\t\t\t} else if (\n\t\t\t\ti === 'defaultValue' &&\n\t\t\t\t'value' in props &&\n\t\t\t\tprops.value == null\n\t\t\t) {\n\t\t\t\t// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\n\t\t\t\t// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\n\t\t\t\ti = 'value';\n\t\t\t} else if (i === 'download' && value === true) {\n\t\t\t\t// Calling `setAttribute` with a truthy value will lead to it being\n\t\t\t\t// passed as a stringified value, e.g. `download=\"true\"`. React\n\t\t\t\t// converts it to an empty string instead, otherwise the attribute\n\t\t\t\t// value will be used as the file name and the file will be called\n\t\t\t\t// \"true\" upon downloading it.\n\t\t\t\tvalue = '';\n\t\t\t} else if (/ondoubleclick/i.test(i)) {\n\t\t\t\ti = 'ondblclick';\n\t\t\t} else if (\n\t\t\t\t/^onchange(textarea|input)/i.test(i + type) &&\n\t\t\t\t!onChangeInputType(props.type)\n\t\t\t) {\n\t\t\t\ti = 'oninput';\n\t\t\t} else if (/^onfocus$/i.test(i)) {\n\t\t\t\ti = 'onfocusin';\n\t\t\t} else if (/^onblur$/i.test(i)) {\n\t\t\t\ti = 'onfocusout';\n\t\t\t} else if (/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t} else if (nonCustomElement && CAMEL_PROPS.test(i)) {\n\t\t\t\ti = i.replace(/[A-Z0-9]/, '-$&').toLowerCase();\n\t\t\t} else if (value === null) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\n\t\t\tnormalizedProps[i] = value;\n\t\t}\n\n\t\t// Add support for array select values: value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType === 'option' && i !== oldProps.value))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'value', i, oldProps.value, false);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t'checked' in newProps &&\n\t\t\t\t(i = newProps.checked) !== undefined &&\n\t\t\t\ti !== dom.checked\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'checked', i, oldProps.checked, false);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {object|function} ref\n * @param {any} value\n * @param {import('../internal').VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {import('../internal').VNode} vnode The virtual node to unmount\n * @param {import('../internal').VNode} parentVNode The parent of the VNode that\n * initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) applyRef(r, null, parentVNode);\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(r[i], parentVNode, typeof vnode.type != 'function');\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) removeNode(vnode._dom);\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n","import { EMPTY_OBJ } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * render into\n * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode === 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? null\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = (\n\t\t(!isHydrating && replaceNode) ||\n\t\tparentDom\n\t)._children = createElement(Fragment, null, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.ownerSVGElement !== undefined,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t? null\n\t\t\t: parentDom.firstChild\n\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t: null,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t? oldVNode._dom\n\t\t\t: parentDom.firstChild,\n\t\tisHydrating\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n","import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array} rest Any additional arguments will be used as replacement children.\n * @returns {import('./internal').VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n","/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw\n * the error that was caught (except for unmounting when this parameter\n * is the highest parent that was being unmounted)\n */\nexport function _catchError(error, vnode) {\n\t/** @type {import('../internal').Component} */\n\tlet component, ctor, handled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error);\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","if (process.env.NODE_ENV === 'production') {\n module.exports = require('./lib/react-input-mask.production.min.js');\n} else {\n module.exports = require('./lib/react-input-mask.development.js');\n}\n","\"use strict\";function _interopDefault(e){return e&&\"object\"==typeof e&&\"default\"in e?e[\"default\"]:e}var React=_interopDefault(require(\"react\")),reactDom=require(\"react-dom\");function _defaults2(e,t){for(var n=Object.getOwnPropertyNames(t),a=0;aa.length&&isPermanentCharacter(e,t.length-1);)t=t.slice(0,t.length-1);return t.length}for(var i=a.length,r=t.length;r>=a.length;r--){var o=t[r];if(!isPermanentCharacter(e,r)&&isAllowedCharacter(e,r,o)){i=r+1;break}}return i}function isFilled(e,t){return getFilledLength(e,t)===e.mask.length}function formatValue(e,t){var n=e.maskChar,a=e.mask,i=e.prefix;if(!n){for((t=insertString(e,\"\",t,0)).lengtho.length&&(o+=l.slice(o.length,s)),t.every(function(e){for(;i=e,isPermanentCharacter(r,a=s)&&i!==l[a];){if(s>=o.length&&(o+=l[s]),t=e,n=s,u&&isPermanentCharacter(r,n)&&t===u)return!0;if(++s>=l.length)return!1}var t,n,a,i;return!isAllowedCharacter(r,s,e)&&e!==u||(s=r.length)return!1;var t,n;return(isAllowedCharacter(a,i,e)||e===o)&&i++,ii.start?h=(c=getInsertStringLength(e,a,u=l.slice(i.start,n.end),f))?i.length:0:l.length=r.length?f=r.length:f=o.length&&f typeof _ === 'object'","// The minimum length of the national significant number.\r\nexport const MIN_LENGTH_FOR_NSN = 2\r\n\r\n// The ITU says the maximum length should be 15,\r\n// but one can find longer numbers in Germany.\r\nexport const MAX_LENGTH_FOR_NSN = 17\r\n\r\n// The maximum length of the country calling code.\r\nexport const MAX_LENGTH_COUNTRY_CODE = 3\r\n\r\n// Digits accepted in phone numbers\r\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\r\nexport const VALID_DIGITS = '0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9'\r\n\r\n// `DASHES` will be right after the opening square bracket of the \"character class\"\r\nconst DASHES = '-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D'\r\nconst SLASHES = '\\uFF0F/'\r\nconst DOTS = '\\uFF0E.'\r\nexport const WHITESPACE = ' \\u00A0\\u00AD\\u200B\\u2060\\u3000'\r\nconst BRACKETS = '()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]'\r\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\r\nconst TILDES = '~\\u2053\\u223C\\uFF5E'\r\n\r\n// Regular expression of acceptable punctuation found in phone numbers. This\r\n// excludes punctuation found as a leading character only. This consists of dash\r\n// characters, white space characters, full stops, slashes, square brackets,\r\n// parentheses and tildes. Full-width variants are also present.\r\nexport const VALID_PUNCTUATION = `${DASHES}${SLASHES}${DOTS}${WHITESPACE}${BRACKETS}${TILDES}`\r\n\r\nexport const PLUS_CHARS = '+\\uFF0B'\r\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')","// https://stackoverflow.com/a/46971044/970769\r\nexport default class ParseError {\r\n constructor(code) {\r\n this.name = this.constructor.name\r\n this.message = code\r\n this.stack = (new Error(code)).stack\r\n }\r\n}\r\n\r\nParseError.prototype = Object.create(Error.prototype)\r\nParseError.prototype.constructor = ParseError","// Copy-pasted from:\r\n// https://github.com/substack/semver-compare/blob/master/index.js\r\n//\r\n// Inlining this function because some users reported issues with\r\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\r\n//\r\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\r\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\r\nexport default function(a, b) {\r\n a = a.split('-')\r\n b = b.split('-')\r\n var pa = a[0].split('.')\r\n var pb = b[0].split('.')\r\n for (var i = 0; i < 3; i++) {\r\n var na = Number(pa[i])\r\n var nb = Number(pb[i])\r\n if (na > nb) return 1\r\n if (nb > na) return -1\r\n if (!isNaN(na) && isNaN(nb)) return 1\r\n if (isNaN(na) && !isNaN(nb)) return -1\r\n }\r\n if (a[1] && b[1]) {\r\n return a[1] > b[1] ? 1 : (a[1] < b[1] ? -1 : 0)\r\n }\r\n return !a[1] && b[1] ? 1 : (a[1] && !b[1] ? -1 : 0)\r\n}","import compare from './tools/semver-compare'\r\n\r\n// Added \"possibleLengths\" and renamed\r\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\r\nconst V2 = '1.0.18'\r\n\r\n// Added \"idd_prefix\" and \"default_idd_prefix\".\r\nconst V3 = '1.2.0'\r\n\r\n// Moved `001` country code to \"nonGeographic\" section of metadata.\r\nconst V4 = '1.7.35'\r\n\r\nconst DEFAULT_EXT_PREFIX = ' ext. '\r\n\r\nconst CALLING_CODE_REG_EXP = /^\\d+$/\r\n\r\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\r\nexport default class Metadata {\r\n\tconstructor(metadata) {\r\n\t\tvalidateMetadata(metadata)\r\n\t\tthis.metadata = metadata\r\n\t\tsetVersion.call(this, metadata)\r\n\t}\r\n\r\n\tgetCountries() {\r\n\t\treturn Object.keys(this.metadata.countries).filter(_ => _ !== '001')\r\n\t}\r\n\r\n\tgetCountryMetadata(countryCode) {\r\n\t\treturn this.metadata.countries[countryCode]\r\n\t}\r\n\r\n\tnonGeographic() {\r\n\t\tif (this.v1 || this.v2 || this.v3) return\r\n\t\t// `nonGeographical` was a typo.\r\n\t\t// It's present in metadata generated from `1.7.35` to `1.7.37`.\r\n\t\treturn this.metadata.nonGeographic || this.metadata.nonGeographical\r\n\t}\r\n\r\n\thasCountry(country) {\r\n\t\treturn this.getCountryMetadata(country) !== undefined\r\n\t}\r\n\r\n\thasCallingCode(callingCode) {\r\n\t\tif (this.getCountryCodesForCallingCode(callingCode)) {\r\n\t\t\treturn true\r\n\t\t}\r\n\t\tif (this.nonGeographic()) {\r\n\t\t\tif (this.nonGeographic()[callingCode]) {\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// A hacky workaround for old custom metadata (generated before V4).\r\n\t\t\tconst countryCodes = this.countryCallingCodes()[callingCode]\r\n\t\t\tif (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisNonGeographicCallingCode(callingCode) {\r\n\t\tif (this.nonGeographic()) {\r\n\t\t\treturn this.nonGeographic()[callingCode] ? true : false\r\n\t\t} else {\r\n\t\t\treturn this.getCountryCodesForCallingCode(callingCode) ? false : true\r\n\t\t}\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tcountry(countryCode) {\r\n\t\treturn this.selectNumberingPlan(countryCode)\r\n\t}\r\n\r\n\tselectNumberingPlan(countryCode, callingCode) {\r\n\t\t// Supports just passing `callingCode` as the first argument.\r\n\t\tif (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\r\n\t\t\tcallingCode = countryCode\r\n\t\t\tcountryCode = null\r\n\t\t}\r\n\t\tif (countryCode && countryCode !== '001') {\r\n\t\t\tif (!this.hasCountry(countryCode)) {\r\n\t\t\t\tthrow new Error(`Unknown country: ${countryCode}`)\r\n\t\t\t}\r\n\t\t\tthis.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this)\r\n\t\t} else if (callingCode) {\r\n\t\t\tif (!this.hasCallingCode(callingCode)) {\r\n\t\t\t\tthrow new Error(`Unknown calling code: ${callingCode}`)\r\n\t\t\t}\r\n\t\t\tthis.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this)\r\n\t\t} else {\r\n\t\t\tthis.numberingPlan = undefined\r\n\t\t}\r\n\t\treturn this\r\n\t}\r\n\r\n\tgetCountryCodesForCallingCode(callingCode) {\r\n\t\tconst countryCodes = this.countryCallingCodes()[callingCode]\r\n\t\tif (countryCodes) {\r\n\t\t\t// Metadata before V4 included \"non-geographic entity\" calling codes\r\n\t\t\t// inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\r\n\t\t\t// Now the semantics of `country_calling_codes` has changed:\r\n\t\t\t// it's specifically for \"countries\" now.\r\n\t\t\t// Older versions of custom metadata will simply skip parsing\r\n\t\t\t// \"non-geographic entity\" phone numbers with new versions\r\n\t\t\t// of this library: it's not considered a bug,\r\n\t\t\t// because such numbers are extremely rare,\r\n\t\t\t// and developers extremely rarely use custom metadata.\r\n\t\t\tif (countryCodes.length === 1 && countryCodes[0].length === 3) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\treturn countryCodes\r\n\t\t}\r\n\t}\r\n\r\n\tgetCountryCodeForCallingCode(callingCode) {\r\n\t\tconst countryCodes = this.getCountryCodesForCallingCode(callingCode)\r\n\t\tif (countryCodes) {\r\n\t\t\treturn countryCodes[0]\r\n\t\t}\r\n\t}\r\n\r\n\tgetNumberingPlanMetadata(callingCode) {\r\n\t\tconst countryCode = this.getCountryCodeForCallingCode(callingCode)\r\n\t\tif (countryCode) {\r\n\t\t\treturn this.getCountryMetadata(countryCode)\r\n\t\t}\r\n\t\tif (this.nonGeographic()) {\r\n\t\t\tconst metadata = this.nonGeographic()[callingCode]\r\n\t\t\tif (metadata) {\r\n\t\t\t\treturn metadata\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// A hacky workaround for old custom metadata (generated before V4).\r\n\t\t\tconst countryCodes = this.countryCallingCodes()[callingCode]\r\n\t\t\tif (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\r\n\t\t\t\treturn this.metadata.countries['001']\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tcountryCallingCode() {\r\n\t\treturn this.numberingPlan.callingCode()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tIDDPrefix() {\r\n\t\treturn this.numberingPlan.IDDPrefix()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tdefaultIDDPrefix() {\r\n\t\treturn this.numberingPlan.defaultIDDPrefix()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tnationalNumberPattern() {\r\n\t\treturn this.numberingPlan.nationalNumberPattern()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tpossibleLengths() {\r\n\t\treturn this.numberingPlan.possibleLengths()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tformats() {\r\n\t\treturn this.numberingPlan.formats()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tnationalPrefixForParsing() {\r\n\t\treturn this.numberingPlan.nationalPrefixForParsing()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tnationalPrefixTransformRule() {\r\n\t\treturn this.numberingPlan.nationalPrefixTransformRule()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tleadingDigits() {\r\n\t\treturn this.numberingPlan.leadingDigits()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\thasTypes() {\r\n\t\treturn this.numberingPlan.hasTypes()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\ttype(type) {\r\n\t\treturn this.numberingPlan.type(type)\r\n\t}\r\n\r\n\t// Deprecated.\r\n\text() {\r\n\t\treturn this.numberingPlan.ext()\r\n\t}\r\n\r\n\tcountryCallingCodes() {\r\n\t\tif (this.v1) return this.metadata.country_phone_code_to_countries\r\n\t\treturn this.metadata.country_calling_codes\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tchooseCountryByCountryCallingCode(callingCode) {\r\n\t\treturn this.selectNumberingPlan(callingCode)\r\n\t}\r\n\r\n\thasSelectedNumberingPlan() {\r\n\t\treturn this.numberingPlan !== undefined\r\n\t}\r\n}\r\n\r\nclass NumberingPlan {\r\n\tconstructor(metadata, globalMetadataObject) {\r\n\t\tthis.globalMetadataObject = globalMetadataObject\r\n\t\tthis.metadata = metadata\r\n\t\tsetVersion.call(this, globalMetadataObject.metadata)\r\n\t}\r\n\r\n\tcallingCode() {\r\n\t\treturn this.metadata[0]\r\n\t}\r\n\r\n\t// Formatting information for regions which share\r\n\t// a country calling code is contained by only one region\r\n\t// for performance reasons. For example, for NANPA region\r\n\t// (\"North American Numbering Plan Administration\",\r\n\t// which includes USA, Canada, Cayman Islands, Bahamas, etc)\r\n\t// it will be contained in the metadata for `US`.\r\n\tgetDefaultCountryMetadataForRegion() {\r\n\t\treturn this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode())\r\n\t}\r\n\r\n\t// Is always present.\r\n\tIDDPrefix() {\r\n\t\tif (this.v1 || this.v2) return\r\n\t\treturn this.metadata[1]\r\n\t}\r\n\r\n\t// Is only present when a country supports multiple IDD prefixes.\r\n\tdefaultIDDPrefix() {\r\n\t\tif (this.v1 || this.v2) return\r\n\t\treturn this.metadata[12]\r\n\t}\r\n\r\n\tnationalNumberPattern() {\r\n\t\tif (this.v1 || this.v2) return this.metadata[1]\r\n\t\treturn this.metadata[2]\r\n\t}\r\n\r\n\t// Is always present.\r\n\tpossibleLengths() {\r\n\t\tif (this.v1) return\r\n\t\treturn this.metadata[this.v2 ? 2 : 3]\r\n\t}\r\n\r\n\t_getFormats(metadata) {\r\n\t\treturn metadata[this.v1 ? 2 : this.v2 ? 3 : 4]\r\n\t}\r\n\r\n\t// For countries of the same region (e.g. NANPA)\r\n\t// formats are all stored in the \"main\" country for that region.\r\n\t// E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\r\n\tformats() {\r\n\t\tconst formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || []\r\n\t\treturn formats.map(_ => new Format(_, this))\r\n\t}\r\n\r\n\tnationalPrefix() {\r\n\t\treturn this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5]\r\n\t}\r\n\r\n\t_getNationalPrefixFormattingRule(metadata) {\r\n\t\treturn metadata[this.v1 ? 4 : this.v2 ? 5 : 6]\r\n\t}\r\n\r\n\t// For countries of the same region (e.g. NANPA)\r\n\t// national prefix formatting rule is stored in the \"main\" country for that region.\r\n\t// E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\r\n\tnationalPrefixFormattingRule() {\r\n\t\treturn this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion())\r\n\t}\r\n\r\n\t_nationalPrefixForParsing() {\r\n\t\treturn this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7]\r\n\t}\r\n\r\n\tnationalPrefixForParsing() {\r\n\t\t// If `national_prefix_for_parsing` is not set explicitly,\r\n\t\t// then infer it from `national_prefix` (if any)\r\n\t\treturn this._nationalPrefixForParsing() || this.nationalPrefix()\r\n\t}\r\n\r\n\tnationalPrefixTransformRule() {\r\n\t\treturn this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8]\r\n\t}\r\n\r\n\t_getNationalPrefixIsOptionalWhenFormatting() {\r\n\t\treturn !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9]\r\n\t}\r\n\r\n\t// For countries of the same region (e.g. NANPA)\r\n\t// \"national prefix is optional when formatting\" flag is\r\n\t// stored in the \"main\" country for that region.\r\n\t// E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\r\n\tnationalPrefixIsOptionalWhenFormattingInNationalFormat() {\r\n\t\treturn this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) ||\r\n\t\t\tthis._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion())\r\n\t}\r\n\r\n\tleadingDigits() {\r\n\t\treturn this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10]\r\n\t}\r\n\r\n\ttypes() {\r\n\t\treturn this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11]\r\n\t}\r\n\r\n\thasTypes() {\r\n\t\t// Versions 1.2.0 - 1.2.4: can be `[]`.\r\n\t\t/* istanbul ignore next */\r\n\t\tif (this.types() && this.types().length === 0) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\t// Versions <= 1.2.4: can be `undefined`.\r\n\t\t// Version >= 1.2.5: can be `0`.\r\n\t\treturn !!this.types()\r\n\t}\r\n\r\n\ttype(type) {\r\n\t\tif (this.hasTypes() && getType(this.types(), type)) {\r\n\t\t\treturn new Type(getType(this.types(), type), this)\r\n\t\t}\r\n\t}\r\n\r\n\text() {\r\n\t\tif (this.v1 || this.v2) return DEFAULT_EXT_PREFIX\r\n\t\treturn this.metadata[13] || DEFAULT_EXT_PREFIX\r\n\t}\r\n}\r\n\r\nclass Format {\r\n\tconstructor(format, metadata) {\r\n\t\tthis._format = format\r\n\t\tthis.metadata = metadata\r\n\t}\r\n\r\n\tpattern() {\r\n\t\treturn this._format[0]\r\n\t}\r\n\r\n\tformat() {\r\n\t\treturn this._format[1]\r\n\t}\r\n\r\n\tleadingDigitsPatterns() {\r\n\t\treturn this._format[2] || []\r\n\t}\r\n\r\n\tnationalPrefixFormattingRule() {\r\n\t\treturn this._format[3] || this.metadata.nationalPrefixFormattingRule()\r\n\t}\r\n\r\n\tnationalPrefixIsOptionalWhenFormattingInNationalFormat() {\r\n\t\treturn !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat()\r\n\t}\r\n\r\n\tnationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\r\n\t\t// National prefix is omitted if there's no national prefix formatting rule\r\n\t\t// set for this country, or when the national prefix formatting rule\r\n\t\t// contains no national prefix itself, or when this rule is set but\r\n\t\t// national prefix is optional for this phone number format\r\n\t\t// (and it is not enforced explicitly)\r\n\t\treturn this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat()\r\n\t}\r\n\r\n\t// Checks whether national prefix formatting rule contains national prefix.\r\n\tusesNationalPrefix() {\r\n\t\treturn this.nationalPrefixFormattingRule() &&\r\n\t\t\t// Check that national prefix formatting rule is not a \"dummy\" one.\r\n\t\t\t!FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\r\n\t\t\t// In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\r\n\t\t\t// when `national_prefix_formatting_rule` is not present.\r\n\t\t\t// So, `true` or `false` are returned explicitly here, so that\r\n\t\t\t// `0` number isn't returned.\r\n\t\t\t? true\r\n\t\t\t: false\r\n\t}\r\n\r\n\tinternationalFormat() {\r\n\t\treturn this._format[5] || this.format()\r\n\t}\r\n}\r\n\r\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\r\nconst FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/\r\n\r\nclass Type {\r\n\tconstructor(type, metadata) {\r\n\t\tthis.type = type\r\n\t\tthis.metadata = metadata\r\n\t}\r\n\r\n\tpattern() {\r\n\t\tif (this.metadata.v1) return this.type\r\n\t\treturn this.type[0]\r\n\t}\r\n\r\n\tpossibleLengths() {\r\n\t\tif (this.metadata.v1) return\r\n\t\treturn this.type[1] || this.metadata.possibleLengths()\r\n\t}\r\n}\r\n\r\nfunction getType(types, type) {\r\n\tswitch (type) {\r\n\t\tcase 'FIXED_LINE':\r\n\t\t\treturn types[0]\r\n\t\tcase 'MOBILE':\r\n\t\t\treturn types[1]\r\n\t\tcase 'TOLL_FREE':\r\n\t\t\treturn types[2]\r\n\t\tcase 'PREMIUM_RATE':\r\n\t\t\treturn types[3]\r\n\t\tcase 'PERSONAL_NUMBER':\r\n\t\t\treturn types[4]\r\n\t\tcase 'VOICEMAIL':\r\n\t\t\treturn types[5]\r\n\t\tcase 'UAN':\r\n\t\t\treturn types[6]\r\n\t\tcase 'PAGER':\r\n\t\t\treturn types[7]\r\n\t\tcase 'VOIP':\r\n\t\t\treturn types[8]\r\n\t\tcase 'SHARED_COST':\r\n\t\t\treturn types[9]\r\n\t}\r\n}\r\n\r\nexport function validateMetadata(metadata) {\r\n\tif (!metadata) {\r\n\t\tthrow new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.')\r\n\t}\r\n\r\n\t// `country_phone_code_to_countries` was renamed to\r\n\t// `country_calling_codes` in `1.0.18`.\r\n\tif (!is_object(metadata) || !is_object(metadata.countries)) {\r\n\t\tthrow new Error(`[libphonenumber-js] \\`metadata\\` argument was passed but it's not a valid metadata. Must be an object having \\`.countries\\` child object property. Got ${is_object(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + type_of(metadata) + ': ' + metadata}.`)\r\n\t}\r\n}\r\n\r\n// Babel transforms `typeof` into some \"branches\"\r\n// so istanbul will show this as \"branch not covered\".\r\n/* istanbul ignore next */\r\nconst is_object = _ => typeof _ === 'object'\r\n\r\n// Babel transforms `typeof` into some \"branches\"\r\n// so istanbul will show this as \"branch not covered\".\r\n/* istanbul ignore next */\r\nconst type_of = _ => typeof _\r\n\r\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\r\nexport function getExtPrefix(country, metadata) {\r\n\tmetadata = new Metadata(metadata)\r\n\tif (metadata.hasCountry(country)) {\r\n\t\treturn metadata.country(country).ext()\r\n\t}\r\n\treturn DEFAULT_EXT_PREFIX\r\n}\r\n\r\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\r\nexport function getCountryCallingCode(country, metadata) {\r\n\tmetadata = new Metadata(metadata)\r\n\tif (metadata.hasCountry(country)) {\r\n\t\treturn metadata.country(country).countryCallingCode()\r\n\t}\r\n\tthrow new Error(`Unknown country: ${country}`)\r\n}\r\n\r\nexport function isSupportedCountry(country, metadata) {\r\n\t// metadata = new Metadata(metadata)\r\n\t// return metadata.hasCountry(country)\r\n\treturn metadata.countries[country] !== undefined\r\n}\r\n\r\nfunction setVersion(metadata) {\r\n\tconst { version } = metadata\r\n\tif (typeof version === 'number') {\r\n\t\tthis.v1 = version === 1\r\n\t\tthis.v2 = version === 2\r\n\t\tthis.v3 = version === 3\r\n\t\tthis.v4 = version === 4\r\n\t} else {\r\n\t\tif (!version) {\r\n\t\t\tthis.v1 = true\r\n\t\t} else if (compare(version, V3) === -1) {\r\n\t\t\tthis.v2 = true\r\n\t\t} else if (compare(version, V4) === -1) {\r\n\t\t\tthis.v3 = true\r\n\t\t} else {\r\n\t\t\tthis.v4 = true\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\r\n// function isCountryCode(countryCode) {\r\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\r\n// }","import { VALID_DIGITS } from '../../constants'\r\n\r\n// The RFC 3966 format for extensions.\r\nconst RFC3966_EXTN_PREFIX = ';ext='\r\n\r\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\r\nconst getExtensionDigitsPattern = (maxLength) => `([${VALID_DIGITS}]{1,${maxLength}})`\r\n\r\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\r\nexport default function createExtensionPattern(purpose) {\r\n\t// We cap the maximum length of an extension based on the ambiguity of the way\r\n\t// the extension is prefixed. As per ITU, the officially allowed length for\r\n\t// extensions is actually 40, but we don't support this since we haven't seen real\r\n\t// examples and this introduces many false interpretations as the extension labels\r\n\t// are not standardized.\r\n\t/** @type {string} */\r\n\tvar extLimitAfterExplicitLabel = '20';\r\n\t/** @type {string} */\r\n\tvar extLimitAfterLikelyLabel = '15';\r\n\t/** @type {string} */\r\n\tvar extLimitAfterAmbiguousChar = '9';\r\n\t/** @type {string} */\r\n\tvar extLimitWhenNotSure = '6';\r\n\r\n\t/** @type {string} */\r\n\tvar possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\u00A0\\\\t,]*\";\r\n\t// Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\r\n\t/** @type {string} */\r\n\tvar possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\u00A0\\\\t,-]*\";\r\n\t/** @type {string} */\r\n\tvar optionalExtnSuffix = \"#?\";\r\n\r\n\t// Here the extension is called out in more explicit way, i.e mentioning it obvious\r\n\t// patterns like \"ext.\".\r\n\t/** @type {string} */\r\n\tvar explicitExtLabels =\r\n\t \"(?:e?xt(?:ensi(?:o\\u0301?|\\u00F3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\r\n\t// One-character symbols that can be used to indicate an extension, and less\r\n\t// commonly used or more ambiguous extension labels.\r\n\t/** @type {string} */\r\n\tvar ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\r\n\t// When extension is not separated clearly.\r\n\t/** @type {string} */\r\n\tvar ambiguousSeparator = \"[- ]+\";\r\n\t// This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\r\n\t// comma as extension label may have it.\r\n\t/** @type {string} */\r\n\tvar possibleSeparatorsNumberExtLabelNoComma = \"[ \\u00A0\\\\t]*\";\r\n\t// \",,\" is commonly used for auto dialling the extension when connected. First\r\n\t// comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\r\n\t// not repeat it here. Semi-colon works in Iphone and Android also to pop up a\r\n\t// button with the extension number following.\r\n\t/** @type {string} */\r\n\tvar autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\r\n\r\n\t/** @type {string} */\r\n\tvar rfcExtn = RFC3966_EXTN_PREFIX\r\n\t + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\r\n\t/** @type {string} */\r\n\tvar explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels\r\n\t + possibleCharsAfterExtLabel\r\n\t + getExtensionDigitsPattern(extLimitAfterExplicitLabel)\r\n\t + optionalExtnSuffix;\r\n\t/** @type {string} */\r\n\tvar ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels\r\n\t + possibleCharsAfterExtLabel\r\n\t+ getExtensionDigitsPattern(extLimitAfterAmbiguousChar)\r\n\t+ optionalExtnSuffix;\r\n\t/** @type {string} */\r\n\tvar americanStyleExtnWithSuffix = ambiguousSeparator\r\n\t+ getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\r\n\r\n\t/** @type {string} */\r\n\tvar autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma\r\n\t + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel\r\n\t + getExtensionDigitsPattern(extLimitAfterLikelyLabel)\r\n\t+ optionalExtnSuffix;\r\n\t/** @type {string} */\r\n\tvar onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma\r\n\t + \"(?:,)+\" + possibleCharsAfterExtLabel\r\n\t + getExtensionDigitsPattern(extLimitAfterAmbiguousChar)\r\n\t + optionalExtnSuffix;\r\n\r\n\t// The first regular expression covers RFC 3966 format, where the extension is added\r\n\t// using \";ext=\". The second more generic where extension is mentioned with explicit\r\n\t// labels like \"ext:\". In both the above cases we allow more numbers in extension than\r\n\t// any other extension labels. The third one captures when single character extension\r\n\t// labels or less commonly used labels are used. In such cases we capture fewer\r\n\t// extension digits in order to reduce the chance of falsely interpreting two\r\n\t// numbers beside each other as a number + extension. The fourth one covers the\r\n\t// special case of American numbers where the extension is written with a hash\r\n\t// at the end, such as \"- 503#\". The fifth one is exclusively for extension\r\n\t// autodialling formats which are used when dialling and in this case we accept longer\r\n\t// extensions. The last one is more liberal on the number of commas that acts as\r\n\t// extension labels, so we have a strict cap on the number of digits in such extensions.\r\n\treturn rfcExtn + \"|\"\r\n\t + explicitExtn + \"|\"\r\n\t + ambiguousExtn + \"|\"\r\n\t + americanStyleExtnWithSuffix + \"|\"\r\n\t + autoDiallingExtn + \"|\"\r\n\t + onlyCommasExtn;\r\n}","import {\r\n\tMIN_LENGTH_FOR_NSN,\r\n\tVALID_DIGITS,\r\n\tVALID_PUNCTUATION,\r\n\tPLUS_CHARS\r\n} from '../constants'\r\n\r\nimport createExtensionPattern from './extension/createExtensionPattern'\r\n\r\n// Regular expression of viable phone numbers. This is location independent.\r\n// Checks we have at least three leading digits, and only valid punctuation,\r\n// alpha characters and digits in the phone number. Does not include extension\r\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\r\n// used as a placeholder for carrier codes, for example in Brazilian phone\r\n// numbers. We also allow multiple '+' characters at the start.\r\n//\r\n// Corresponds to the following:\r\n// [digits]{minLengthNsn}|\r\n// plus_sign*\r\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\r\n//\r\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\r\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\r\n// The second expression restricts the number of digits to three or more, but\r\n// then allows them to be in international form, and to have alpha-characters\r\n// and punctuation. We split up the two reg-exes here and combine them when\r\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\r\n// with ^ and append $ to each branch.\r\n//\r\n// \"Note VALID_PUNCTUATION starts with a -,\r\n// so must be the first in the range\" (c) Google devs.\r\n// (wtf did they mean by saying that; probably nothing)\r\n//\r\nconst MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}'\r\n//\r\n// And this is the second reg-exp:\r\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\r\n//\r\nexport const VALID_PHONE_NUMBER =\r\n\t'[' + PLUS_CHARS + ']{0,1}' +\r\n\t'(?:' +\r\n\t\t'[' + VALID_PUNCTUATION + ']*' +\r\n\t\t'[' + VALID_DIGITS + ']' +\r\n\t'){3,}' +\r\n\t'[' +\r\n\t\tVALID_PUNCTUATION +\r\n\t\tVALID_DIGITS +\r\n\t']*'\r\n\r\n// This regular expression isn't present in Google's `libphonenumber`\r\n// and is only used to determine whether the phone number being input\r\n// is too short for it to even consider it a \"valid\" number.\r\n// This is just a way to differentiate between a really invalid phone\r\n// number like \"abcde\" and a valid phone number that a user has just\r\n// started inputting, like \"+1\" or \"1\": both these cases would be\r\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\r\n// library can provide a more detailed error message — whether it's\r\n// really \"not a number\", or is it just a start of a valid phone number.\r\nconst VALID_PHONE_NUMBER_START_REG_EXP = new RegExp(\r\n\t'^' +\r\n\t'[' + PLUS_CHARS + ']{0,1}' +\r\n\t'(?:' +\r\n\t\t'[' + VALID_PUNCTUATION + ']*' +\r\n\t\t'[' + VALID_DIGITS + ']' +\r\n\t'){1,2}' +\r\n\t'$'\r\n, 'i')\r\n\r\nexport const VALID_PHONE_NUMBER_WITH_EXTENSION =\r\n\tVALID_PHONE_NUMBER +\r\n\t// Phone number extensions\r\n\t'(?:' + createExtensionPattern() + ')?'\r\n\r\n// The combined regular expression for valid phone numbers:\r\n//\r\nconst VALID_PHONE_NUMBER_PATTERN = new RegExp(\r\n\t// Either a short two-digit-only phone number\r\n\t'^' +\r\n\t\tMIN_LENGTH_PHONE_NUMBER_PATTERN +\r\n\t'$' +\r\n\t'|' +\r\n\t// Or a longer fully parsed phone number (min 3 characters)\r\n\t'^' +\r\n\t\tVALID_PHONE_NUMBER_WITH_EXTENSION +\r\n\t'$'\r\n, 'i')\r\n\r\n// Checks to see if the string of characters could possibly be a phone number at\r\n// all. At the moment, checks to see that the string begins with at least 2\r\n// digits, ignoring any punctuation commonly found in phone numbers. This method\r\n// does not require the number to be normalized in advance - but does assume\r\n// that leading non-number symbols have been removed, such as by the method\r\n// `extract_possible_number`.\r\n//\r\nexport default function isViablePhoneNumber(number) {\r\n\treturn number.length >= MIN_LENGTH_FOR_NSN &&\r\n\t\tVALID_PHONE_NUMBER_PATTERN.test(number)\r\n}\r\n\r\n// This is just a way to differentiate between a really invalid phone\r\n// number like \"abcde\" and a valid phone number that a user has just\r\n// started inputting, like \"+1\" or \"1\": both these cases would be\r\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\r\n// library can provide a more detailed error message — whether it's\r\n// really \"not a number\", or is it just a start of a valid phone number.\r\nexport function isViablePhoneNumberStart(number) {\r\n\treturn VALID_PHONE_NUMBER_START_REG_EXP.test(number)\r\n}","import createExtensionPattern from './createExtensionPattern'\r\n\r\n// Regexp of all known extension prefixes used by different regions followed by\r\n// 1 or more valid digits, for use when parsing.\r\nconst EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i')\r\n\r\n// Strips any extension (as in, the part of the number dialled after the call is\r\n// connected, usually indicated with extn, ext, x or similar) from the end of\r\n// the number, and returns it.\r\nexport default function extractExtension(number) {\r\n\tconst start = number.search(EXTN_PATTERN)\r\n\tif (start < 0) {\r\n\t\treturn {}\r\n\t}\r\n\t// If we find a potential extension, and the number preceding this is a viable\r\n\t// number, we assume it is an extension.\r\n\tconst numberWithoutExtension = number.slice(0, start)\r\n\tconst matches = number.match(EXTN_PATTERN)\r\n\tlet i = 1\r\n\twhile (i < matches.length) {\r\n\t\tif (matches[i]) {\r\n\t\t\treturn {\r\n\t\t\t\tnumber: numberWithoutExtension,\r\n\t\t\t\text: matches[i]\r\n\t\t\t}\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n}","// These mappings map a character (key) to a specific digit that should\r\n// replace it for normalization purposes. Non-European digits that\r\n// may be used in phone numbers are mapped to a European equivalent.\r\n//\r\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n//\r\nexport const DIGITS = {\r\n\t'0': '0',\r\n\t'1': '1',\r\n\t'2': '2',\r\n\t'3': '3',\r\n\t'4': '4',\r\n\t'5': '5',\r\n\t'6': '6',\r\n\t'7': '7',\r\n\t'8': '8',\r\n\t'9': '9',\r\n\t'\\uFF10': '0', // Fullwidth digit 0\r\n\t'\\uFF11': '1', // Fullwidth digit 1\r\n\t'\\uFF12': '2', // Fullwidth digit 2\r\n\t'\\uFF13': '3', // Fullwidth digit 3\r\n\t'\\uFF14': '4', // Fullwidth digit 4\r\n\t'\\uFF15': '5', // Fullwidth digit 5\r\n\t'\\uFF16': '6', // Fullwidth digit 6\r\n\t'\\uFF17': '7', // Fullwidth digit 7\r\n\t'\\uFF18': '8', // Fullwidth digit 8\r\n\t'\\uFF19': '9', // Fullwidth digit 9\r\n\t'\\u0660': '0', // Arabic-indic digit 0\r\n\t'\\u0661': '1', // Arabic-indic digit 1\r\n\t'\\u0662': '2', // Arabic-indic digit 2\r\n\t'\\u0663': '3', // Arabic-indic digit 3\r\n\t'\\u0664': '4', // Arabic-indic digit 4\r\n\t'\\u0665': '5', // Arabic-indic digit 5\r\n\t'\\u0666': '6', // Arabic-indic digit 6\r\n\t'\\u0667': '7', // Arabic-indic digit 7\r\n\t'\\u0668': '8', // Arabic-indic digit 8\r\n\t'\\u0669': '9', // Arabic-indic digit 9\r\n\t'\\u06F0': '0', // Eastern-Arabic digit 0\r\n\t'\\u06F1': '1', // Eastern-Arabic digit 1\r\n\t'\\u06F2': '2', // Eastern-Arabic digit 2\r\n\t'\\u06F3': '3', // Eastern-Arabic digit 3\r\n\t'\\u06F4': '4', // Eastern-Arabic digit 4\r\n\t'\\u06F5': '5', // Eastern-Arabic digit 5\r\n\t'\\u06F6': '6', // Eastern-Arabic digit 6\r\n\t'\\u06F7': '7', // Eastern-Arabic digit 7\r\n\t'\\u06F8': '8', // Eastern-Arabic digit 8\r\n\t'\\u06F9': '9' // Eastern-Arabic digit 9\r\n}\r\n\r\nexport function parseDigit(character) {\r\n\treturn DIGITS[character]\r\n}\r\n\r\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\r\nexport default function parseDigits(string) {\r\n\tlet result = ''\r\n\t// Using `.split('')` here instead of normal `for ... of`\r\n\t// because the importing application doesn't neccessarily include an ES6 polyfill.\r\n\t// The `.split('')` approach discards \"exotic\" UTF-8 characters\r\n\t// (the ones consisting of four bytes) but digits\r\n\t// (including non-European ones) don't fall into that range\r\n\t// so such \"exotic\" characters would be discarded anyway.\r\n\tfor (const character of string.split('')) {\r\n\t\tconst digit = parseDigit(character)\r\n\t\tif (digit) {\r\n\t\t\tresult += digit\r\n\t\t}\r\n\t}\r\n\treturn result\r\n}","import { parseDigit } from './helpers/parseDigits'\r\n\r\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\r\nexport default function parseIncompletePhoneNumber(string) {\r\n\tlet result = ''\r\n\t// Using `.split('')` here instead of normal `for ... of`\r\n\t// because the importing application doesn't neccessarily include an ES6 polyfill.\r\n\t// The `.split('')` approach discards \"exotic\" UTF-8 characters\r\n\t// (the ones consisting of four bytes) but digits\r\n\t// (including non-European ones) don't fall into that range\r\n\t// so such \"exotic\" characters would be discarded anyway.\r\n\tfor (const character of string.split('')) {\r\n\t\tresult += parsePhoneNumberCharacter(character, result) || ''\r\n\t}\r\n\treturn result\r\n}\r\n\r\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {object} meta - Optional custom use-case-specific metadata.\r\n * @return {string?} The parsed character.\r\n */\r\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters) {\r\n\t// Only allow a leading `+`.\r\n\tif (character === '+') {\r\n\t\t// If this `+` is not the first parsed character\r\n\t\t// then discard it.\r\n\t\tif (prevParsedCharacters) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\treturn '+'\r\n\t}\r\n\t// Allow digits.\r\n\treturn parseDigit(character)\r\n}","import mergeArrays from './mergeArrays'\r\n\r\nexport default function checkNumberLength(nationalNumber, metadata) {\r\n\treturn checkNumberLengthForType(nationalNumber, undefined, metadata)\r\n}\r\n\r\n// Checks whether a number is possible for the country based on its length.\r\n// Should only be called for the \"new\" metadata which has \"possible lengths\".\r\nexport function checkNumberLengthForType(nationalNumber, type, metadata) {\r\n\tconst type_info = metadata.type(type)\r\n\r\n\t// There should always be \"\" set for every type element.\r\n\t// This is declared in the XML schema.\r\n\t// For size efficiency, where a sub-description (e.g. fixed-line)\r\n\t// has the same \"\" as the \"general description\", this is missing,\r\n\t// so we fall back to the \"general description\". Where no numbers of the type\r\n\t// exist at all, there is one possible length (-1) which is guaranteed\r\n\t// not to match the length of any real phone number.\r\n\tlet possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths()\r\n\t// let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\r\n\r\n\t// Metadata before version `1.0.18` didn't contain `possible_lengths`.\r\n\tif (!possible_lengths) {\r\n\t\treturn 'IS_POSSIBLE'\r\n\t}\r\n\r\n\tif (type === 'FIXED_LINE_OR_MOBILE') {\r\n\t\t// No such country in metadata.\r\n\t\t/* istanbul ignore next */\r\n\t\tif (!metadata.type('FIXED_LINE')) {\r\n\t\t\t// The rare case has been encountered where no fixedLine data is available\r\n\t\t\t// (true for some non-geographic entities), so we just check mobile.\r\n\t\t\treturn checkNumberLengthForType(nationalNumber, 'MOBILE', metadata)\r\n\t\t}\r\n\r\n\t\tconst mobile_type = metadata.type('MOBILE')\r\n\t\tif (mobile_type) {\r\n\t\t\t// Merge the mobile data in if there was any. \"Concat\" creates a new\r\n\t\t\t// array, it doesn't edit possible_lengths in place, so we don't need a copy.\r\n\t\t\t// Note that when adding the possible lengths from mobile, we have\r\n\t\t\t// to again check they aren't empty since if they are this indicates\r\n\t\t\t// they are the same as the general desc and should be obtained from there.\r\n\t\t\tpossible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths())\r\n\t\t\t// The current list is sorted; we need to merge in the new list and\r\n\t\t\t// re-sort (duplicates are okay). Sorting isn't so expensive because\r\n\t\t\t// the lists are very small.\r\n\r\n\t\t\t// if (local_lengths) {\r\n\t\t\t// \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\r\n\t\t\t// } else {\r\n\t\t\t// \tlocal_lengths = mobile_type.possibleLengthsLocal()\r\n\t\t\t// }\r\n\t\t}\r\n\t}\r\n\t// If the type doesn't exist then return 'INVALID_LENGTH'.\r\n\telse if (type && !type_info) {\r\n\t\treturn 'INVALID_LENGTH'\r\n\t}\r\n\r\n\tconst actual_length = nationalNumber.length\r\n\r\n\t// In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\r\n\t// // This is safe because there is never an overlap beween the possible lengths\r\n\t// // and the local-only lengths; this is checked at build time.\r\n\t// if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\r\n\t// {\r\n\t// \treturn 'IS_POSSIBLE_LOCAL_ONLY'\r\n\t// }\r\n\r\n\tconst minimum_length = possible_lengths[0]\r\n\r\n\tif (minimum_length === actual_length) {\r\n\t\treturn 'IS_POSSIBLE'\r\n\t}\r\n\r\n\tif (minimum_length > actual_length) {\r\n\t\treturn 'TOO_SHORT'\r\n\t}\r\n\r\n\tif (possible_lengths[possible_lengths.length - 1] < actual_length) {\r\n\t\treturn 'TOO_LONG'\r\n\t}\r\n\r\n\t// We skip the first element since we've already checked it.\r\n\treturn possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH'\r\n}","/**\r\n * Merges two arrays.\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {*}\r\n */\r\nexport default function mergeArrays(a, b) {\r\n\tconst merged = a.slice()\r\n\r\n\tfor (const element of b) {\r\n\t\tif (a.indexOf(element) < 0) {\r\n\t\t\tmerged.push(element)\r\n\t\t}\r\n\t}\r\n\r\n\treturn merged.sort((a, b) => a - b)\r\n\r\n\t// ES6 version, requires Set polyfill.\r\n\t// let merged = new Set(a)\r\n\t// for (const element of b) {\r\n\t// \tmerged.add(i)\r\n\t// }\r\n\t// return Array.from(merged).sort((a, b) => a - b)\r\n}","import Metadata from './metadata'\r\nimport checkNumberLength from './helpers/checkNumberLength'\r\n\r\nexport default function isPossiblePhoneNumber(input, options, metadata) {\r\n\t/* istanbul ignore if */\r\n\tif (options === undefined) {\r\n\t\toptions = {}\r\n\t}\r\n\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\tif (options.v2) {\r\n\t\tif (!input.countryCallingCode) {\r\n\t\t\tthrow new Error('Invalid phone number object passed')\r\n\t\t}\r\n\t\tmetadata.selectNumberingPlan(input.countryCallingCode)\r\n\t} else {\r\n\t\tif (!input.phone) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\tif (input.country) {\r\n\t\t\tif (!metadata.hasCountry(input.country)) {\r\n\t\t\t\tthrow new Error(`Unknown country: ${input.country}`)\r\n\t\t\t}\r\n\t\t\tmetadata.country(input.country)\r\n\t\t} else {\r\n\t\t\tif (!input.countryCallingCode) {\r\n\t\t\t\tthrow new Error('Invalid phone number object passed')\r\n\t\t\t}\r\n\t\t\tmetadata.selectNumberingPlan(input.countryCallingCode)\r\n\t\t}\r\n\t}\r\n\r\n\tif (metadata.possibleLengths()) {\r\n\t\treturn isPossibleNumber(input.phone || input.nationalNumber, metadata)\r\n\t} else {\r\n\t\t// There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\r\n\t\t// were missing for \"non-geographical\" numbering plans.\r\n\t\t// Just assume the number is possible in such cases:\r\n\t\t// it's unlikely that anyone generated their custom metadata\r\n\t\t// in that short period of time (one day).\r\n\t\t// This code can be removed in some future major version update.\r\n\t\tif (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\r\n\t\t\t// \"Non-geographic entities\" did't have `possibleLengths`\r\n\t\t\t// due to a bug in metadata generation process.\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\tthrow new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function isPossibleNumber(nationalNumber, metadata) { //, isInternational) {\r\n\tswitch (checkNumberLength(nationalNumber, metadata)) {\r\n\t\tcase 'IS_POSSIBLE':\r\n\t\t\treturn true\r\n\t\t// This library ignores \"local-only\" phone numbers (for simplicity).\r\n\t\t// See the readme for more info on what are \"local-only\" phone numbers.\r\n\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\r\n\t\t// \treturn !isInternational\r\n\t\tdefault:\r\n\t\t\treturn false\r\n\t}\r\n}","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\r\nexport default function matchesEntirely(text, regular_expression) {\r\n\t// If assigning the `''` default value is moved to the arguments above,\r\n\t// code coverage would decrease for some weird reason.\r\n\ttext = text || ''\r\n\treturn new RegExp('^(?:' + regular_expression + ')$').test(text)\r\n}","import Metadata from '../metadata'\r\nimport matchesEntirely from './matchesEntirely'\r\n\r\nconst NON_FIXED_LINE_PHONE_TYPES = [\r\n\t'MOBILE',\r\n\t'PREMIUM_RATE',\r\n\t'TOLL_FREE',\r\n\t'SHARED_COST',\r\n\t'VOIP',\r\n\t'PERSONAL_NUMBER',\r\n\t'PAGER',\r\n\t'UAN',\r\n\t'VOICEMAIL'\r\n]\r\n\r\n// Finds out national phone number type (fixed line, mobile, etc)\r\nexport default function getNumberType(input, options, metadata)\r\n{\r\n\t// If assigning the `{}` default value is moved to the arguments above,\r\n\t// code coverage would decrease for some weird reason.\r\n\toptions = options || {}\r\n\r\n\t// When `parse()` returned `{}`\r\n\t// meaning that the phone number is not a valid one.\r\n\tif (!input.country) {\r\n\t\treturn\r\n\t}\r\n\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\tmetadata.selectNumberingPlan(input.country, input.countryCallingCode)\r\n\r\n\tconst nationalNumber = options.v2 ? input.nationalNumber : input.phone\r\n\r\n\t// The following is copy-pasted from the original function:\r\n\t// https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\r\n\r\n\t// Is this national number even valid for this country\r\n\tif (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\r\n\t\treturn\r\n\t}\r\n\r\n\t// Is it fixed line number\r\n\tif (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\r\n\t\t// Because duplicate regular expressions are removed\r\n\t\t// to reduce metadata size, if \"mobile\" pattern is \"\"\r\n\t\t// then it means it was removed due to being a duplicate of the fixed-line pattern.\r\n\t\t//\r\n\t\tif (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\r\n\t\t\treturn 'FIXED_LINE_OR_MOBILE'\r\n\t\t}\r\n\r\n\t\t// v1 metadata.\r\n\t\t// Legacy.\r\n\t\t// Deprecated.\r\n\t\tif (!metadata.type('MOBILE')) {\r\n\t\t\treturn 'FIXED_LINE_OR_MOBILE'\r\n\t\t}\r\n\r\n\t\t// Check if the number happens to qualify as both fixed line and mobile.\r\n\t\t// (no such country in the minimal metadata set)\r\n\t\t/* istanbul ignore if */\r\n\t\tif (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\r\n\t\t\treturn 'FIXED_LINE_OR_MOBILE'\r\n\t\t}\r\n\r\n\t\treturn 'FIXED_LINE'\r\n\t}\r\n\r\n\tfor (const type of NON_FIXED_LINE_PHONE_TYPES) {\r\n\t\tif (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\r\n\t\t\treturn type\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\r\n\ttype = metadata.type(type)\r\n\tif (!type || !type.pattern()) {\r\n\t\treturn false\r\n\t}\r\n\t// Check if any possible number lengths are present;\r\n\t// if so, we use them to avoid checking\r\n\t// the validation pattern if they don't match.\r\n\t// If they are absent, this means they match\r\n\t// the general description, which we have\r\n\t// already checked before a specific number type.\r\n\tif (type.possibleLengths() &&\r\n\t\ttype.possibleLengths().indexOf(nationalNumber.length) < 0) {\r\n\t\treturn false\r\n\t}\r\n\treturn matchesEntirely(nationalNumber, type.pattern())\r\n}","import { VALID_PUNCTUATION } from '../constants'\r\n\r\n// Removes brackets and replaces dashes with spaces.\r\n//\r\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\r\n//\r\n// For some reason Google's metadata contains ``s with brackets and dashes.\r\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\r\n//\r\n// For example, Google's `` for USA is `+1 213-373-4253`.\r\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\r\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\r\n//\r\n// \"The country calling code for all countries participating in the NANP is 1.\r\n// In international format, an NANP number should be listed as +1 301 555 01 00,\r\n// where 301 is an area code (Maryland).\"\r\n//\r\n// I personally prefer the international format without any punctuation.\r\n// For example, brackets are remnants of the old age, meaning that the\r\n// phone number part in brackets (so called \"area code\") can be omitted\r\n// if dialing within the same \"area\".\r\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\r\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\r\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\r\n// He has a couple of seconds to memorize that number until it passes by.\r\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\r\n// but with hyphens instead of spaces the grouping is more explicit.\r\n// I personally think that hyphens introduce visual clutter,\r\n// so I prefer replacing them with spaces in international numbers.\r\n// In the modern age all output is done on displays where spaces are clearly distinguishable\r\n// so hyphens can be safely replaced with spaces without losing any legibility.\r\n//\r\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\r\n\treturn formattedNumber.replace(new RegExp(`[${VALID_PUNCTUATION}]+`, 'g'), ' ').trim()\r\n}","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle'\r\n\r\n// This was originally set to $1 but there are some countries for which the\r\n// first group is not used in the national pattern (e.g. Argentina) so the $1\r\n// group does not match correctly. Therefore, we use `\\d`, so that the first\r\n// group actually used in the pattern will be matched.\r\nexport const FIRST_GROUP_PATTERN = /(\\$\\d)/\r\n\r\nexport default function formatNationalNumberUsingFormat(\r\n\tnumber,\r\n\tformat,\r\n\t{\r\n\t\tuseInternationalFormat,\r\n\t\twithNationalPrefix,\r\n\t\tcarrierCode,\r\n\t\tmetadata\r\n\t}\r\n) {\r\n\tconst formattedNumber = number.replace(\r\n\t\tnew RegExp(format.pattern()),\r\n\t\tuseInternationalFormat\r\n\t\t\t? format.internationalFormat()\r\n\t\t\t: (\r\n\t\t\t\t// This library doesn't use `domestic_carrier_code_formatting_rule`,\r\n\t\t\t\t// because that one is only used when formatting phone numbers\r\n\t\t\t\t// for dialing from a mobile phone, and this is not a dialing library.\r\n\t\t\t\t// carrierCode && format.domesticCarrierCodeFormattingRule()\r\n\t\t\t\t// \t// First, replace the $CC in the formatting rule with the desired carrier code.\r\n\t\t\t\t// \t// Then, replace the $FG in the formatting rule with the first group\r\n\t\t\t\t// \t// and the carrier code combined in the appropriate way.\r\n\t\t\t\t// \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\r\n\t\t\t\t// \t: (\r\n\t\t\t\t// \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\r\n\t\t\t\t// \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\r\n\t\t\t\t// \t\t\t: format.format()\r\n\t\t\t\t// \t)\r\n\t\t\t\twithNationalPrefix && format.nationalPrefixFormattingRule()\r\n\t\t\t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\r\n\t\t\t\t\t: format.format()\r\n\t\t\t)\r\n\t)\r\n\tif (useInternationalFormat) {\r\n\t\treturn applyInternationalSeparatorStyle(formattedNumber)\r\n\t}\r\n\treturn formattedNumber\r\n}","import Metadata from '../metadata'\r\n\r\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\r\nconst SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/\r\n\r\n// For regions that have multiple IDD prefixes\r\n// a preferred IDD prefix is returned.\r\nexport default function getIddPrefix(country, callingCode, metadata) {\r\n\tconst countryMetadata = new Metadata(metadata)\r\n\tcountryMetadata.selectNumberingPlan(country, callingCode)\r\n\tif (countryMetadata.defaultIDDPrefix()) {\r\n\t\treturn countryMetadata.defaultIDDPrefix()\r\n\t}\r\n\tif (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\r\n\t\treturn countryMetadata.IDDPrefix()\r\n\t}\r\n}\r\n","// This is a port of Google Android `libphonenumber`'s\r\n// `phonenumberutil.js` of December 31th, 2018.\r\n//\r\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\r\n\r\nimport matchesEntirely from './helpers/matchesEntirely'\r\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat'\r\nimport Metadata, { getCountryCallingCode } from './metadata'\r\nimport getIddPrefix from './helpers/getIddPrefix'\r\nimport { formatRFC3966 } from './helpers/RFC3966'\r\n\r\nconst DEFAULT_OPTIONS = {\r\n\tformatExtension: (formattedNumber, extension, metadata) => `${formattedNumber}${metadata.ext()}${extension}`\r\n}\r\n\r\n// Formats a phone number\r\n//\r\n// Example use cases:\r\n//\r\n// ```js\r\n// formatNumber('8005553535', 'RU', 'INTERNATIONAL')\r\n// formatNumber('8005553535', 'RU', 'INTERNATIONAL', metadata)\r\n// formatNumber({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL')\r\n// formatNumber({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', metadata)\r\n// formatNumber('+78005553535', 'NATIONAL')\r\n// formatNumber('+78005553535', 'NATIONAL', metadata)\r\n// ```\r\n//\r\nexport default function formatNumber(input, format, options, metadata) {\r\n\t// Apply default options.\r\n\tif (options) {\r\n\t\toptions = { ...DEFAULT_OPTIONS, ...options }\r\n\t} else {\r\n\t\toptions = DEFAULT_OPTIONS\r\n\t}\r\n\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\tif (input.country && input.country !== '001') {\r\n\t\t// Validate `input.country`.\r\n\t\tif (!metadata.hasCountry(input.country)) {\r\n\t\t\tthrow new Error(`Unknown country: ${input.country}`)\r\n\t\t}\r\n\t\tmetadata.country(input.country)\r\n\t}\r\n\telse if (input.countryCallingCode) {\r\n\t\tmetadata.selectNumberingPlan(input.countryCallingCode)\r\n\t}\r\n\telse return input.phone || ''\r\n\r\n\tconst countryCallingCode = metadata.countryCallingCode()\r\n\r\n\tconst nationalNumber = options.v2 ? input.nationalNumber : input.phone\r\n\r\n\t// This variable should have been declared inside `case`s\r\n\t// but Babel has a bug and it says \"duplicate variable declaration\".\r\n\tlet number\r\n\r\n\tswitch (format) {\r\n\t\tcase 'NATIONAL':\r\n\t\t\t// Legacy argument support.\r\n\t\t\t// (`{ country: ..., phone: '' }`)\r\n\t\t\tif (!nationalNumber) {\r\n\t\t\t\treturn ''\r\n\t\t\t}\r\n\t\t\tnumber = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options)\r\n\t\t\treturn addExtension(number, input.ext, metadata, options.formatExtension)\r\n\r\n\t\tcase 'INTERNATIONAL':\r\n\t\t\t// Legacy argument support.\r\n\t\t\t// (`{ country: ..., phone: '' }`)\r\n\t\t\tif (!nationalNumber) {\r\n\t\t\t\treturn `+${countryCallingCode}`\r\n\t\t\t}\r\n\t\t\tnumber = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options)\r\n\t\t\tnumber = `+${countryCallingCode} ${number}`\r\n\t\t\treturn addExtension(number, input.ext, metadata, options.formatExtension)\r\n\r\n\t\tcase 'E.164':\r\n\t\t\t// `E.164` doesn't define \"phone number extensions\".\r\n\t\t\treturn `+${countryCallingCode}${nationalNumber}`\r\n\r\n\t\tcase 'RFC3966':\r\n\t\t\treturn formatRFC3966({\r\n\t\t\t\tnumber: `+${countryCallingCode}${nationalNumber}`,\r\n\t\t\t\text: input.ext\r\n\t\t\t})\r\n\r\n\t\t// For reference, here's Google's IDD formatter:\r\n\t\t// https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\r\n\t\t// Not saying that this IDD formatter replicates it 1:1, but it seems to work.\r\n\t\t// Who would even need to format phone numbers in IDD format anyway?\r\n\t\tcase 'IDD':\r\n\t\t\tif (!options.fromCountry) {\r\n\t\t\t\treturn\r\n\t\t\t\t// throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\r\n\t\t\t}\r\n\t\t\tconst formattedNumber = formatIDD(\r\n\t\t\t\tnationalNumber,\r\n\t\t\t\tinput.carrierCode,\r\n\t\t\t\tcountryCallingCode,\r\n\t\t\t\toptions.fromCountry,\r\n\t\t\t\tmetadata\r\n\t\t\t)\r\n\t\t\treturn addExtension(formattedNumber, input.ext, metadata, options.formatExtension)\r\n\r\n\t\tdefault:\r\n\t\t\tthrow new Error(`Unknown \"format\" argument passed to \"formatNumber()\": \"${format}\"`)\r\n\t}\r\n}\r\n\r\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\r\n\tconst format = chooseFormatForNumber(metadata.formats(), number)\r\n\tif (!format) {\r\n\t\treturn number\r\n\t}\r\n\treturn formatNationalNumberUsingFormat(\r\n\t\tnumber,\r\n\t\tformat,\r\n\t\t{\r\n\t\t\tuseInternationalFormat: formatAs === 'INTERNATIONAL',\r\n\t\t\twithNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && (options && options.nationalPrefix === false) ? false : true,\r\n\t\t\tcarrierCode,\r\n\t\t\tmetadata\r\n\t\t}\r\n\t)\r\n}\r\n\r\nfunction chooseFormatForNumber(availableFormats, nationalNnumber) {\r\n\tfor (const format of availableFormats) {\r\n\t\t// Validate leading digits\r\n\t\tif (format.leadingDigitsPatterns().length > 0) {\r\n\t\t\t// The last leading_digits_pattern is used here, as it is the most detailed\r\n\t\t\tconst lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1]\r\n\t\t\t// If leading digits don't match then move on to the next phone number format\r\n\t\t\tif (nationalNnumber.search(lastLeadingDigitsPattern) !== 0) {\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Check that the national number matches the phone number format regular expression\r\n\t\tif (matchesEntirely(nationalNnumber, format.pattern())) {\r\n\t\t\treturn format\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\r\n\treturn ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber\r\n}\r\n\r\nfunction formatIDD(\r\n\tnationalNumber,\r\n\tcarrierCode,\r\n\tcountryCallingCode,\r\n\tfromCountry,\r\n\tmetadata\r\n) {\r\n\tconst fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata)\r\n\t// When calling within the same country calling code.\r\n\tif (fromCountryCallingCode === countryCallingCode) {\r\n\t\tconst formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata)\r\n\t\t// For NANPA regions, return the national format for these regions\r\n\t\t// but prefix it with the country calling code.\r\n\t\tif (countryCallingCode === '1') {\r\n\t\t\treturn countryCallingCode + ' ' + formattedNumber\r\n\t\t}\r\n\t\t// If regions share a country calling code, the country calling code need\r\n\t\t// not be dialled. This also applies when dialling within a region, so this\r\n\t\t// if clause covers both these cases. Technically this is the case for\r\n\t\t// dialling from La Reunion to other overseas departments of France (French\r\n\t\t// Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\r\n\t\t// this edge case for now and for those cases return the version including\r\n\t\t// country calling code. Details here:\r\n\t\t// http://www.petitfute.com/voyage/225-info-pratiques-reunion\r\n\t\t//\r\n\t\treturn formattedNumber\r\n\t}\r\n\tconst iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata)\r\n\tif (iddPrefix) {\r\n\t\treturn `${iddPrefix} ${countryCallingCode} ${formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata)}`\r\n\t}\r\n}","import isViablePhoneNumber from './isViablePhoneNumber'\r\n\r\n// https://www.ietf.org/rfc/rfc3966.txt\r\n\r\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\r\nexport function parseRFC3966(text) {\r\n\tlet number\r\n\tlet ext\r\n\r\n\t// Replace \"tel:\" with \"tel=\" for parsing convenience.\r\n\ttext = text.replace(/^tel:/, 'tel=')\r\n\r\n\tfor (const part of text.split(';')) {\r\n\t\tconst [name, value] = part.split('=')\r\n\t\tswitch (name) {\r\n\t\t\tcase 'tel':\r\n\t\t\t\tnumber = value\r\n\t\t\t\tbreak\r\n\t\t\tcase 'ext':\r\n\t\t\t\text = value\r\n\t\t\t\tbreak\r\n\t\t\tcase 'phone-context':\r\n\t\t\t\t// Only \"country contexts\" are supported.\r\n\t\t\t\t// \"Domain contexts\" are ignored.\r\n\t\t\t\tif (value[0] === '+') {\r\n\t\t\t\t\tnumber = value + number\r\n\t\t\t\t}\r\n\t\t\t\tbreak\r\n\t\t}\r\n\t}\r\n\r\n\t// If the phone number is not viable, then abort.\r\n\tif (!isViablePhoneNumber(number)) {\r\n\t\treturn {}\r\n\t}\r\n\r\n\tconst result = { number }\r\n\tif (ext) {\r\n\t\tresult.ext = ext\r\n\t}\r\n\treturn result\r\n}\r\n\r\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\r\nexport function formatRFC3966({ number, ext }) {\r\n\tif (!number) {\r\n\t\treturn ''\r\n\t}\r\n\tif (number[0] !== '+') {\r\n\t\tthrow new Error(`\"formatRFC3966()\" expects \"number\" to be in E.164 format.`)\r\n\t}\r\n\treturn `tel:${number}${ext ? ';ext=' + ext : ''}`\r\n}","import Metadata from './metadata'\r\nimport isPossibleNumber from './isPossibleNumber_'\r\nimport isValidNumber from './validate_'\r\nimport isValidNumberForRegion from './isValidNumberForRegion_'\r\nimport getNumberType from './helpers/getNumberType'\r\nimport formatNumber from './format_'\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\nexport default class PhoneNumber {\r\n\tconstructor(countryCallingCode, nationalNumber, metadata) {\r\n\t\tif (!countryCallingCode) {\r\n\t\t\tthrow new TypeError('`country` or `countryCallingCode` not passed')\r\n\t\t}\r\n\t\tif (!nationalNumber) {\r\n\t\t\tthrow new TypeError('`nationalNumber` not passed')\r\n\t\t}\r\n\t\tif (!metadata) {\r\n\t\t\tthrow new TypeError('`metadata` not passed')\r\n\t\t}\r\n\t\tconst _metadata = new Metadata(metadata)\r\n\t\t// If country code is passed then derive `countryCallingCode` from it.\r\n\t\t// Also store the country code as `.country`.\r\n\t\tif (isCountryCode(countryCallingCode)) {\r\n\t\t\tthis.country = countryCallingCode\r\n\t\t\t_metadata.country(countryCallingCode)\r\n\t\t\tcountryCallingCode = _metadata.countryCallingCode()\r\n\t\t} else {\r\n\t\t\t/* istanbul ignore if */\r\n\t\t\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\t\t\tif (_metadata.isNonGeographicCallingCode(countryCallingCode)) {\r\n\t\t\t\t\tthis.country = '001'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.countryCallingCode = countryCallingCode\r\n\t\tthis.nationalNumber = nationalNumber\r\n\t\tthis.number = '+' + this.countryCallingCode + this.nationalNumber\r\n\t\tthis.metadata = metadata\r\n\t}\r\n\r\n\tsetExt(ext) {\r\n\t\tthis.ext = ext\r\n\t}\r\n\r\n\tisPossible() {\r\n\t\treturn isPossibleNumber(this, { v2: true }, this.metadata)\r\n\t}\r\n\r\n\tisValid() {\r\n\t\treturn isValidNumber(this, { v2: true }, this.metadata)\r\n\t}\r\n\r\n\tisNonGeographic() {\r\n\t\tconst metadata = new Metadata(this.metadata)\r\n\t\treturn metadata.isNonGeographicCallingCode(this.countryCallingCode)\r\n\t}\r\n\r\n\tisEqual(phoneNumber) {\r\n\t\treturn this.number === phoneNumber.number && this.ext === phoneNumber.ext\r\n\t}\r\n\r\n\t// // Is just an alias for `this.isValid() && this.country === country`.\r\n\t// // https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n\t// isValidForRegion(country) {\r\n\t// \treturn isValidNumberForRegion(this, country, { v2: true }, this.metadata)\r\n\t// }\r\n\r\n\tgetType() {\r\n\t\treturn getNumberType(this, { v2: true }, this.metadata)\r\n\t}\r\n\r\n\tformat(format, options) {\r\n\t\treturn formatNumber(\r\n\t\t\tthis,\r\n\t\t\tformat,\r\n\t\t\toptions ? { ...options, v2: true } : { v2: true },\r\n\t\t\tthis.metadata\r\n\t\t)\r\n\t}\r\n\r\n\tformatNational(options) {\r\n\t\treturn this.format('NATIONAL', options)\r\n\t}\r\n\r\n\tformatInternational(options) {\r\n\t\treturn this.format('INTERNATIONAL', options)\r\n\t}\r\n\r\n\tgetURI(options) {\r\n\t\treturn this.format('RFC3966', options)\r\n\t}\r\n}\r\n\r\nconst isCountryCode = (value) => /^[A-Z]{2}$/.test(value)","import Metadata from './metadata'\r\nimport matchesEntirely from './helpers/matchesEntirely'\r\nimport getNumberType from './helpers/getNumberType'\r\n\r\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\r\nexport default function isValidNumber(input, options, metadata)\r\n{\r\n\t// If assigning the `{}` default value is moved to the arguments above,\r\n\t// code coverage would decrease for some weird reason.\r\n\toptions = options || {}\r\n\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\t// This is just to support `isValidNumber({})`\r\n\t// for cases when `parseNumber()` returns `{}`.\r\n\tif (!input.country)\r\n\t{\r\n\t\treturn false\r\n\t}\r\n\r\n\tmetadata.selectNumberingPlan(input.country, input.countryCallingCode)\r\n\r\n\t// By default, countries only have type regexps when it's required for\r\n\t// distinguishing different countries having the same `countryCallingCode`.\r\n\tif (metadata.hasTypes())\r\n\t{\r\n\t\treturn getNumberType(input, options, metadata.metadata) !== undefined\r\n\t}\r\n\r\n\t// If there are no type regexps for this country in metadata then use\r\n\t// `nationalNumberPattern` as a \"better than nothing\" replacement.\r\n\tconst national_number = options.v2 ? input.nationalNumber : input.phone\r\n\treturn matchesEntirely(national_number, metadata.nationalNumberPattern())\r\n}","import Metadata from '../metadata'\r\nimport { VALID_DIGITS } from '../constants'\r\n\r\nconst CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])')\r\n\r\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\r\n\tif (!country) {\r\n\t\treturn\r\n\t}\r\n\t// Check if the number is IDD-prefixed.\r\n\tconst countryMetadata = new Metadata(metadata)\r\n\tcountryMetadata.selectNumberingPlan(country, callingCode)\r\n\tconst IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix())\r\n\tif (number.search(IDDPrefixPattern) !== 0) {\r\n\t\treturn\r\n\t}\r\n\t// Strip IDD prefix.\r\n\tnumber = number.slice(number.match(IDDPrefixPattern)[0].length)\r\n\t// If there're any digits after an IDD prefix,\r\n\t// then those digits are a country calling code.\r\n\t// Since no country code starts with a `0`,\r\n\t// the code below validates that the next digit (if present) is not `0`.\r\n\tconst matchedGroups = number.match(CAPTURING_DIGIT_PATTERN)\r\n\tif (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\r\n\t\tif (matchedGroups[1] === '0') {\r\n\t\t\treturn\r\n\t\t}\r\n\t}\r\n\treturn number\r\n}","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`.\r\n */\r\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\r\n\tif (number && metadata.numberingPlan.nationalPrefixForParsing()) {\r\n\t\t// See METADATA.md for the description of\r\n\t\t// `national_prefix_for_parsing` and `national_prefix_transform_rule`.\r\n\t\t// Attempt to parse the first digits as a national prefix.\r\n\t\tconst prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')')\r\n\t\tconst prefixMatch = prefixPattern.exec(number)\r\n\t\tif (prefixMatch) {\r\n\t\t\tlet nationalNumber\r\n\t\t\tlet carrierCode\r\n\t\t\t// https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\r\n\t\t\t// If a `national_prefix_for_parsing` has any \"capturing groups\"\r\n\t\t\t// then it means that the national (significant) number is equal to\r\n\t\t\t// those \"capturing groups\" transformed via `national_prefix_transform_rule`,\r\n\t\t\t// and nothing could be said about the actual national prefix:\r\n\t\t\t// what is it and was it even there.\r\n\t\t\t// If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\r\n\t\t\t// then everything it matches is a national prefix.\r\n\t\t\t// To determine whether `national_prefix_for_parsing` matched any\r\n\t\t\t// \"capturing groups\", the value of the result of calling `.exec()`\r\n\t\t\t// is looked at, and if it has non-undefined values where there're\r\n\t\t\t// \"capturing groups\" in the regular expression, then it means\r\n\t\t\t// that \"capturing groups\" have been matched.\r\n\t\t\t// It's not possible to tell whether there'll be any \"capturing gropus\"\r\n\t\t\t// before the matching process, because a `national_prefix_for_parsing`\r\n\t\t\t// could exhibit both behaviors.\r\n\t\t\tconst capturedGroupsCount = prefixMatch.length - 1\r\n\t\t\tconst hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount]\r\n\t\t\tif (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\r\n\t\t\t\tnationalNumber = number.replace(\r\n\t\t\t\t\tprefixPattern,\r\n\t\t\t\t\tmetadata.nationalPrefixTransformRule()\r\n\t\t\t\t)\r\n\t\t\t\t// If there's more than one captured group,\r\n\t\t\t\t// then carrier code is the second one.\r\n\t\t\t\tif (capturedGroupsCount > 1) {\r\n\t\t\t\t\tcarrierCode = prefixMatch[1]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If there're no \"capturing groups\",\r\n\t\t\t// or if there're \"capturing groups\" but no\r\n\t\t\t// `national_prefix_transform_rule`,\r\n\t\t\t// then just strip the national prefix from the number,\r\n\t\t\t// and possibly a carrier code.\r\n\t\t\t// Seems like there could be more.\r\n\t\t\telse {\r\n\t\t\t\t// `prefixBeforeNationalNumber` is the whole substring matched by\r\n\t\t\t\t// the `national_prefix_for_parsing` regular expression.\r\n\t\t\t\t// There seem to be no guarantees that it's just a national prefix.\r\n\t\t\t\t// For example, if there's a carrier code, it's gonna be a\r\n\t\t\t\t// part of `prefixBeforeNationalNumber` too.\r\n\t\t\t\tconst prefixBeforeNationalNumber = prefixMatch[0]\r\n\t\t\t\tnationalNumber = number.slice(prefixBeforeNationalNumber.length)\r\n\t\t\t\t// If there's at least one captured group,\r\n\t\t\t\t// then carrier code is the first one.\r\n\t\t\t\tif (hasCapturedGroups) {\r\n\t\t\t\t\tcarrierCode = prefixMatch[1]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Tries to guess whether a national prefix was present in the input.\r\n\t\t\t// This is not something copy-pasted from Google's library:\r\n\t\t\t// they don't seem to have an equivalent for that.\r\n\t\t\t// So this isn't an \"officially approved\" way of doing something like that.\r\n\t\t\t// But since there seems no other existing method, this library uses it.\r\n\t\t\tlet nationalPrefix\r\n\t\t\tif (hasCapturedGroups) {\r\n\t\t\t\tconst possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1])\r\n\t\t\t\tconst possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup)\r\n\t\t\t\t// Example: an Argentinian (AR) phone number `0111523456789`.\r\n\t\t\t\t// `prefixMatch[0]` is `01115`, and `$1` is `11`,\r\n\t\t\t\t// and the rest of the phone number is `23456789`.\r\n\t\t\t\t// The national number is transformed via `9$1` to `91123456789`.\r\n\t\t\t\t// National prefix `0` is detected being present at the start.\r\n\t\t\t\t// if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\r\n\t\t\t\tif (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\r\n\t\t\t\t\tnationalPrefix = metadata.numberingPlan.nationalPrefix()\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tnationalPrefix = prefixMatch[0]\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tnationalNumber,\r\n\t\t\t\tnationalPrefix,\r\n\t\t\t\tcarrierCode\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n return {\r\n \tnationalNumber: number\r\n }\r\n}","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber'\r\nimport matchesEntirely from './matchesEntirely'\r\nimport checkNumberLength from './checkNumberLength'\r\n\r\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\r\nexport default function extractNationalNumber(number, metadata) {\r\n\t// Parsing national prefixes and carrier codes\r\n\t// is only required for local phone numbers\r\n\t// but some people don't understand that\r\n\t// and sometimes write international phone numbers\r\n\t// with national prefixes (or maybe even carrier codes).\r\n\t// http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\r\n\t// Google's original library forgives such mistakes\r\n\t// and so does this library, because it has been requested:\r\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/127\r\n\tconst {\r\n\t\tnationalNumber,\r\n\t\tcarrierCode\r\n\t} = extractNationalNumberFromPossiblyIncompleteNumber(\r\n\t\tnumber,\r\n\t\tmetadata\r\n\t)\r\n\tif (!shouldExtractNationalPrefix(number, nationalNumber, metadata)) {\r\n\t\t// Don't strip the national prefix.\r\n\t\treturn { nationalNumber: number }\r\n\t}\r\n\t// If a national prefix has been extracted, check to see\r\n\t// if the resultant number isn't too short.\r\n\t// Same code in Google's `libphonenumber`:\r\n\t// https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3291-L3302\r\n\t// For some reason, they do this check right after the `national_number_pattern` check\r\n\t// this library does in `shouldExtractNationalPrefix()` function.\r\n\t// Why is there a second \"resultant\" number validity check?\r\n\t// They don't provide an explanation.\r\n\t// This library just copies the behavior.\r\n\tif (number.length !== nationalNumber.length + (carrierCode ? carrierCode.length : 0)) {\r\n\t\t// If not using legacy generated metadata (before version `1.0.18`)\r\n\t\t// then it has \"possible lengths\", so use those to validate the number length.\r\n\t\tif (metadata.possibleLengths()) {\r\n\t\t\t// \"We require that the NSN remaining after stripping the national prefix and\r\n\t\t\t// carrier code be long enough to be a possible length for the region.\r\n\t\t\t// Otherwise, we don't do the stripping, since the original number could be\r\n\t\t\t// a valid short number.\"\r\n\t\t\t// https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\r\n\t\t\tswitch (checkNumberLength(nationalNumber, metadata)) {\r\n\t\t\t\tcase 'TOO_SHORT':\r\n\t\t\t\tcase 'INVALID_LENGTH':\r\n\t\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\r\n\t\t\t\t\t// Don't strip the national prefix.\r\n\t\t\t\t\treturn { nationalNumber: number }\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn { nationalNumber, carrierCode }\r\n}\r\n\r\n// In some countries, the same digit could be a national prefix\r\n// or a leading digit of a valid phone number.\r\n// For example, in Russia, national prefix is `8`,\r\n// and also `800 555 35 35` is a valid number\r\n// in which `8` is not a national prefix, but the first digit\r\n// of a national (significant) number.\r\n// Same's with Belarus:\r\n// `82004910060` is a valid national (significant) number,\r\n// but `2004910060` is not.\r\n// To support such cases (to prevent the code from always stripping\r\n// national prefix), a condition is imposed: a national prefix\r\n// is not extracted when the original number is \"viable\" and the\r\n// resultant number is not, a \"viable\" national number being the one\r\n// that matches `national_number_pattern`.\r\nfunction shouldExtractNationalPrefix(number, nationalSignificantNumber, metadata) {\r\n\t// The equivalent in Google's code is:\r\n\t// https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\r\n\tif (matchesEntirely(number, metadata.nationalNumberPattern()) &&\r\n\t\t!matchesEntirely(nationalSignificantNumber, metadata.nationalNumberPattern())) {\r\n\t\treturn false\r\n\t}\r\n\t// Just \"possible\" number check would be more relaxed, so it's not used.\r\n\t// if (isPossibleNumber(number, metadata) &&\r\n\t// \t!isPossibleNumber(numberWithNationalPrefixExtracted, metadata)) {\r\n\t// \treturn false\r\n\t// }\r\n\treturn true\r\n}","import Metadata from '../metadata'\r\nimport matchesEntirely from './matchesEntirely'\r\nimport extractNationalNumber from './extractNationalNumber'\r\nimport checkNumberLength from './checkNumberLength'\r\nimport getCountryCallingCode from '../getCountryCallingCode'\r\n\r\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string?} country\r\n * @param {string?} callingCode\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\r\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(\r\n\tnumber,\r\n\tcountry,\r\n\tcallingCode,\r\n\tmetadata\r\n) {\r\n\tconst countryCallingCode = country ? getCountryCallingCode(country, metadata) : callingCode\r\n\tif (number.indexOf(countryCallingCode) === 0) {\r\n\t\tmetadata = new Metadata(metadata)\r\n\t\tmetadata.selectNumberingPlan(country, callingCode)\r\n\t\tconst possibleShorterNumber = number.slice(countryCallingCode.length)\r\n\t\tconst {\r\n\t\t\tnationalNumber: possibleShorterNationalNumber,\r\n\t\t} = extractNationalNumber(\r\n\t\t\tpossibleShorterNumber,\r\n\t\t\tmetadata\r\n\t\t)\r\n\t\tconst {\r\n\t\t\tnationalNumber\r\n\t\t} = extractNationalNumber(\r\n\t\t\tnumber,\r\n\t\t\tmetadata\r\n\t\t)\r\n\t\t// If the number was not valid before but is valid now,\r\n\t\t// or if it was too long before, we consider the number\r\n\t\t// with the country calling code stripped to be a better result\r\n\t\t// and keep that instead.\r\n\t\t// For example, in Germany (+49), `49` is a valid area code,\r\n\t\t// so if a number starts with `49`, it could be both a valid\r\n\t\t// national German number or an international number without\r\n\t\t// a leading `+`.\r\n\t\tif (\r\n\t\t\t(\r\n\t\t\t\t!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())\r\n\t\t\t\t&&\r\n\t\t\t\tmatchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern())\r\n\t\t\t)\r\n\t\t\t||\r\n\t\t\tcheckNumberLength(nationalNumber, metadata) === 'TOO_LONG'\r\n\t\t) {\r\n\t\t\treturn {\r\n\t\t\t\tcountryCallingCode,\r\n\t\t\t\tnumber: possibleShorterNumber\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn { number }\r\n}","import stripIddPrefix from './stripIddPrefix'\r\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign'\r\nimport Metadata from '../metadata'\r\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants'\r\n\r\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Default country.\r\n * @param {string} [callingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', 'RU', null, metadata)\r\n */\r\nexport default function extractCountryCallingCode(\r\n\tnumber,\r\n\tcountry,\r\n\tcallingCode,\r\n\tmetadata\r\n) {\r\n\tif (!number) {\r\n\t\treturn {}\r\n\t}\r\n\r\n\t// If this is not an international phone number,\r\n\t// then either extract an \"IDD\" prefix, or extract a\r\n\t// country calling code from a number by autocorrecting it\r\n\t// by prepending a leading `+` in cases when it starts\r\n\t// with the country calling code.\r\n\t// https://wikitravel.org/en/International_dialling_prefix\r\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/376\r\n\tif (number[0] !== '+') {\r\n\t\t// Convert an \"out-of-country\" dialing phone number\r\n\t\t// to a proper international phone number.\r\n\t\tconst numberWithoutIDD = stripIddPrefix(number, country, callingCode, metadata)\r\n\t\t// If an IDD prefix was stripped then\r\n\t\t// convert the number to international one\r\n\t\t// for subsequent parsing.\r\n\t\tif (numberWithoutIDD && numberWithoutIDD !== number) {\r\n\t\t\tnumber = '+' + numberWithoutIDD\r\n\t\t} else {\r\n\t\t\t// Check to see if the number starts with the country calling code\r\n\t\t\t// for the default country. If so, we remove the country calling code,\r\n\t\t\t// and do some checks on the validity of the number before and after.\r\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/376\r\n\t\t\tif (country || callingCode) {\r\n\t\t\t\tconst {\r\n\t\t\t\t\tcountryCallingCode,\r\n\t\t\t\t\tnumber: shorterNumber\r\n\t\t\t\t} = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(\r\n\t\t\t\t\tnumber,\r\n\t\t\t\t\tcountry,\r\n\t\t\t\t\tcallingCode,\r\n\t\t\t\t\tmetadata\r\n\t\t\t\t)\r\n\t\t\t\tif (countryCallingCode) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tcountryCallingCode,\r\n\t\t\t\t\t\tnumber: shorterNumber\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn { number }\r\n\t\t}\r\n\t}\r\n\r\n\t// Fast abortion: country codes do not begin with a '0'\r\n\tif (number[1] === '0') {\r\n\t\treturn {}\r\n\t}\r\n\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\t// The thing with country phone codes\r\n\t// is that they are orthogonal to each other\r\n\t// i.e. there's no such country phone code A\r\n\t// for which country phone code B exists\r\n\t// where B starts with A.\r\n\t// Therefore, while scanning digits,\r\n\t// if a valid country code is found,\r\n\t// that means that it is the country code.\r\n\t//\r\n\tlet i = 2\r\n\twhile (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\r\n\t\tconst countryCallingCode = number.slice(1, i)\r\n\t\tif (metadata.hasCallingCode(countryCallingCode)) {\r\n\t\t\tmetadata.selectNumberingPlan(countryCallingCode)\r\n\t\t\treturn {\r\n\t\t\t\tcountryCallingCode,\r\n\t\t\t\tnumber: number.slice(i)\r\n\t\t\t}\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\r\n\treturn {}\r\n}","import Metadata from '../metadata'\r\nimport getNumberType from './getNumberType'\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\nexport default function getCountryByCallingCode(callingCode, nationalPhoneNumber, metadata) {\r\n\t/* istanbul ignore if */\r\n\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\tif (metadata.isNonGeographicCallingCode(callingCode)) {\r\n\t\t\treturn '001'\r\n\t\t}\r\n\t}\r\n\t// Is always non-empty, because `callingCode` is always valid\r\n\tconst possibleCountries = metadata.getCountryCodesForCallingCode(callingCode)\r\n\tif (!possibleCountries) {\r\n\t\treturn\r\n\t}\r\n\t// If there's just one country corresponding to the country code,\r\n\t// then just return it, without further phone number digits validation.\r\n\tif (possibleCountries.length === 1) {\r\n\t\treturn possibleCountries[0]\r\n\t}\r\n\treturn selectCountryFromList(possibleCountries, nationalPhoneNumber, metadata.metadata)\r\n}\r\n\r\nfunction selectCountryFromList(possibleCountries, nationalPhoneNumber, metadata) {\r\n\t// Re-create `metadata` because it will be selecting a `country`.\r\n\tmetadata = new Metadata(metadata)\r\n\tfor (const country of possibleCountries) {\r\n\t\tmetadata.country(country)\r\n\t\t// Leading digits check would be the simplest and fastest one.\r\n\t\t// Leading digits patterns are only defined for about 20% of all countries.\r\n\t\t// https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\r\n\t\t// Matching \"leading digits\" is a sufficient but not necessary condition.\r\n\t\tif (metadata.leadingDigits()) {\r\n\t\t\tif (nationalPhoneNumber &&\r\n\t\t\t\tnationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\r\n\t\t\t\treturn country\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Else perform full validation with all of those\r\n\t\t// fixed-line/mobile/etc regular expressions.\r\n\t\telse if (getNumberType({ phone: nationalPhoneNumber, country }, undefined, metadata.metadata)) {\r\n\t\t\treturn country\r\n\t\t}\r\n\t}\r\n}","// This is a port of Google Android `libphonenumber`'s\r\n// `phonenumberutil.js` of December 31th, 2018.\r\n//\r\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\r\n\r\nimport {\r\n\tVALID_DIGITS,\r\n\tPLUS_CHARS,\r\n\tMIN_LENGTH_FOR_NSN,\r\n\tMAX_LENGTH_FOR_NSN\r\n} from './constants'\r\n\r\nimport ParseError from './ParseError'\r\nimport Metadata from './metadata'\r\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber'\r\nimport extractExtension from './helpers/extension/extractExtension'\r\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber'\r\nimport getCountryCallingCode from './getCountryCallingCode'\r\nimport { isPossibleNumber } from './isPossibleNumber_'\r\nimport { parseRFC3966 } from './helpers/RFC3966'\r\nimport PhoneNumber from './PhoneNumber'\r\nimport matchesEntirely from './helpers/matchesEntirely'\r\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode'\r\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign'\r\nimport extractNationalNumber from './helpers/extractNationalNumber'\r\nimport stripIddPrefix from './helpers/stripIddPrefix'\r\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode'\r\n\r\n// We don't allow input strings for parsing to be longer than 250 chars.\r\n// This prevents malicious input from consuming CPU.\r\nconst MAX_INPUT_STRING_LENGTH = 250\r\n\r\n// This consists of the plus symbol, digits, and arabic-indic digits.\r\nconst PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']')\r\n\r\n// Regular expression of trailing characters that we want to remove.\r\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\r\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\r\nconst AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$')\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\n// Examples:\r\n//\r\n// ```js\r\n// parse('8 (800) 555-35-35', 'RU')\r\n// parse('8 (800) 555-35-35', 'RU', metadata)\r\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\r\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\r\n// parse('+7 800 555 35 35')\r\n// parse('+7 800 555 35 35', metadata)\r\n// ```\r\n//\r\nexport default function parse(text, options, metadata) {\r\n\t// If assigning the `{}` default value is moved to the arguments above,\r\n\t// code coverage would decrease for some weird reason.\r\n\toptions = options || {}\r\n\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\t// Validate `defaultCountry`.\r\n\tif (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('INVALID_COUNTRY')\r\n\t\t}\r\n\t\tthrow new Error(`Unknown country: ${options.defaultCountry}`)\r\n\t}\r\n\r\n\t// Parse the phone number.\r\n\tconst { number: formattedPhoneNumber, ext, error } = parseInput(text, options.v2, options.extract)\r\n\r\n\t// If the phone number is not viable then return nothing.\r\n\tif (!formattedPhoneNumber) {\r\n\t\tif (options.v2) {\r\n\t\t\tif (error === 'TOO_SHORT') {\r\n\t\t\t\tthrow new ParseError('TOO_SHORT')\r\n\t\t\t}\r\n\t\t\tthrow new ParseError('NOT_A_NUMBER')\r\n\t\t}\r\n\t\treturn {}\r\n\t}\r\n\r\n\tconst {\r\n\t\tcountry,\r\n\t\tnationalNumber,\r\n\t\tcountryCallingCode,\r\n\t\tcarrierCode\r\n\t} = parsePhoneNumber(\r\n\t\tformattedPhoneNumber,\r\n\t\toptions.defaultCountry,\r\n\t\toptions.defaultCallingCode,\r\n\t\tmetadata\r\n\t)\r\n\r\n\tif (!metadata.hasSelectedNumberingPlan()) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('INVALID_COUNTRY')\r\n\t\t}\r\n\t\treturn {}\r\n\t}\r\n\r\n\t// Validate national (significant) number length.\r\n\tif (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\r\n\t\t// Won't throw here because the regexp already demands length > 1.\r\n\t\t/* istanbul ignore if */\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('TOO_SHORT')\r\n\t\t}\r\n\t\t// Google's demo just throws an error in this case.\r\n\t\treturn {}\r\n\t}\r\n\r\n\t// Validate national (significant) number length.\r\n\t//\r\n\t// A sidenote:\r\n\t//\r\n\t// They say that sometimes national (significant) numbers\r\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\r\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\r\n\t// Such numbers will just be discarded.\r\n\t//\r\n\tif (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('TOO_LONG')\r\n\t\t}\r\n\t\t// Google's demo just throws an error in this case.\r\n\t\treturn {}\r\n\t}\r\n\r\n\tif (options.v2) {\r\n\t\tconst phoneNumber = new PhoneNumber(\r\n\t\t\tcountryCallingCode,\r\n\t\t\tnationalNumber,\r\n\t\t\tmetadata.metadata\r\n\t\t)\r\n\t\tif (country) {\r\n\t\t\tphoneNumber.country = country\r\n\t\t}\r\n\t\tif (carrierCode) {\r\n\t\t\tphoneNumber.carrierCode = carrierCode\r\n\t\t}\r\n\t\tif (ext) {\r\n\t\t\tphoneNumber.ext = ext\r\n\t\t}\r\n\t\treturn phoneNumber\r\n\t}\r\n\r\n\t// Check if national phone number pattern matches the number.\r\n\t// National number pattern is different for each country,\r\n\t// even for those ones which are part of the \"NANPA\" group.\r\n\tconst valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ?\r\n\t\tmatchesEntirely(nationalNumber, metadata.nationalNumberPattern()) :\r\n\t\tfalse\r\n\r\n\tif (!options.extended) {\r\n\t\treturn valid ? result(country, nationalNumber, ext) : {}\r\n\t}\r\n\r\n\t// isInternational: countryCallingCode !== undefined\r\n\r\n\treturn {\r\n\t\tcountry,\r\n\t\tcountryCallingCode,\r\n\t\tcarrierCode,\r\n\t\tvalid,\r\n\t\tpossible: valid ? true : (\r\n\t\t\toptions.extended === true &&\r\n\t\t\tmetadata.possibleLengths() &&\r\n\t\t\tisPossibleNumber(nationalNumber, metadata) ? true : false\r\n\t\t),\r\n\t\tphone: nationalNumber,\r\n\t\text\r\n\t}\r\n}\r\n\r\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\r\nfunction extractFormattedPhoneNumber(text, extract, throwOnError) {\r\n\tif (!text) {\r\n\t\treturn\r\n\t}\r\n\tif (text.length > MAX_INPUT_STRING_LENGTH) {\r\n\t\tif (throwOnError) {\r\n\t\t\tthrow new ParseError('TOO_LONG')\r\n\t\t}\r\n\t\treturn\r\n\t}\r\n\tif (extract === false) {\r\n\t\treturn text\r\n\t}\r\n\t// Attempt to extract a possible number from the string passed in\r\n\tconst startsAt = text.search(PHONE_NUMBER_START_PATTERN)\r\n\tif (startsAt < 0) {\r\n\t\treturn\r\n\t}\r\n\treturn text\r\n\t\t// Trim everything to the left of the phone number\r\n\t\t.slice(startsAt)\r\n\t\t// Remove trailing non-numerical characters\r\n\t\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '')\r\n}\r\n\r\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\r\nfunction parseInput(text, v2, extract) {\r\n\t// Parse RFC 3966 phone number URI.\r\n\tif (text && text.indexOf('tel:') === 0) {\r\n\t\treturn parseRFC3966(text)\r\n\t}\r\n\tlet number = extractFormattedPhoneNumber(text, extract, v2)\r\n\t// If the phone number is not viable, then abort.\r\n\tif (!number) {\r\n\t\treturn {}\r\n\t}\r\n\tif (!isViablePhoneNumber(number)) {\r\n\t\tif (isViablePhoneNumberStart(number)) {\r\n\t\t\treturn { error: 'TOO_SHORT' }\r\n\t\t}\r\n\t\treturn {}\r\n\t}\r\n\t// Attempt to parse extension first, since it doesn't require region-specific\r\n\t// data and we want to have the non-normalised number here.\r\n\tconst withExtensionStripped = extractExtension(number)\r\n\tif (withExtensionStripped.ext) {\r\n\t\treturn withExtensionStripped\r\n\t}\r\n\treturn { number }\r\n}\r\n\r\n/**\r\n * Creates `parse()` result object.\r\n */\r\nfunction result(country, nationalNumber, ext) {\r\n\tconst result = {\r\n\t\tcountry,\r\n\t\tphone: nationalNumber\r\n\t}\r\n\tif (ext) {\r\n\t\tresult.ext = ext\r\n\t}\r\n\treturn result\r\n}\r\n\r\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\r\nfunction parsePhoneNumber(\r\n\tformattedPhoneNumber,\r\n\tdefaultCountry,\r\n\tdefaultCallingCode,\r\n\tmetadata\r\n) {\r\n\t// Extract calling code from phone number.\r\n\tlet { countryCallingCode, number } = extractCountryCallingCode(\r\n\t\tparseIncompletePhoneNumber(formattedPhoneNumber),\r\n\t\tdefaultCountry,\r\n\t\tdefaultCallingCode,\r\n\t\tmetadata.metadata\r\n\t)\r\n\r\n\t// Choose a country by `countryCallingCode`.\r\n\tlet country\r\n\tif (countryCallingCode) {\r\n\t\tmetadata.selectNumberingPlan(countryCallingCode)\r\n\t}\r\n\t// If `formattedPhoneNumber` is in \"national\" format\r\n\t// then `number` is defined and `countryCallingCode` isn't.\r\n\telse if (number && (defaultCountry || defaultCallingCode)) {\r\n\t\tmetadata.selectNumberingPlan(defaultCountry, defaultCallingCode)\r\n\t\tif (defaultCountry) {\r\n\t\t\tcountry = defaultCountry\r\n\t\t} else {\r\n\t\t\t/* istanbul ignore if */\r\n\t\t\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\t\t\tif (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\r\n\t\t\t\t\tcountry = '001'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tcountryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata)\r\n\t}\r\n\telse return {}\r\n\r\n\tif (!number) {\r\n\t\treturn { countryCallingCode }\r\n\t}\r\n\r\n\tconst {\r\n\t\tnationalNumber,\r\n\t\tcarrierCode\r\n\t} = extractNationalNumber(\r\n\t\tparseIncompletePhoneNumber(number),\r\n\t\tmetadata\r\n\t)\r\n\r\n\t// Sometimes there are several countries\r\n\t// corresponding to the same country phone code\r\n\t// (e.g. NANPA countries all having `1` country phone code).\r\n\t// Therefore, to reliably determine the exact country,\r\n\t// national (significant) number should have been parsed first.\r\n\t//\r\n\t// When `metadata.json` is generated, all \"ambiguous\" country phone codes\r\n\t// get their countries populated with the full set of\r\n\t// \"phone number type\" regular expressions.\r\n\t//\r\n\tconst exactCountry = getCountryByCallingCode(countryCallingCode, nationalNumber, metadata)\r\n\tif (exactCountry) {\r\n\t\tcountry = exactCountry\r\n\t\t/* istanbul ignore if */\r\n\t\tif (exactCountry === '001') {\r\n\t\t\t// Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\r\n\t\t\t// If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\r\n\t\t\t// then remove the \"istanbul ignore if\".\r\n\t\t} else {\r\n\t\t\tmetadata.country(country)\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcountry,\r\n\t\tcountryCallingCode,\r\n\t\tnationalNumber,\r\n\t\tcarrierCode\r\n\t}\r\n}","import parseNumber from './parse_'\r\n\r\nexport default function parsePhoneNumber(text, options, metadata) {\r\n\treturn parseNumber(text, { ...options, v2: true }, metadata)\r\n}","import parsePhoneNumber from './parsePhoneNumber_'\r\nimport ParseError from './ParseError'\r\nimport { isSupportedCountry } from './metadata'\r\n\r\nexport default function parsePhoneNumberFromString(text, options, metadata) {\r\n\t// Validate `defaultCountry`.\r\n\tif (options && options.defaultCountry && !isSupportedCountry(options.defaultCountry, metadata)) {\r\n\t\toptions = {\r\n\t\t\t...options,\r\n\t\t\tdefaultCountry: undefined\r\n\t\t}\r\n\t}\r\n\t// Parse phone number.\r\n\ttry {\r\n\t\treturn parsePhoneNumber(text, options, metadata)\r\n\t} catch (error) {\r\n\t\t/* istanbul ignore else */\r\n\t\tif (error instanceof ParseError) {\r\n\t\t\t//\r\n\t\t} else {\r\n\t\t\tthrow error\r\n\t\t}\r\n\t}\r\n}\r\n","import { normalizeArguments } from './parsePhoneNumber'\r\nimport parsePhoneNumberFromString_ from './parsePhoneNumberFromString_'\r\n\r\nexport default function parsePhoneNumberFromString() {\r\n\tconst { text, options, metadata } = normalizeArguments(arguments)\r\n\treturn parsePhoneNumberFromString_(text, options, metadata)\r\n}\r\n","import parsePhoneNumber from 'libphonenumber-js/core'\r\n\r\n/**\r\n * Formats a phone number.\r\n * Is a proxy for `libphonenumber-js`'s `.format()` function of a parsed `PhoneNumber`.\r\n * @param {string} value\r\n * @param {string} [format]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\r\nexport default function formatPhoneNumber(value, format, metadata) {\r\n\tif (!metadata) {\r\n\t\tif (typeof format === 'object') {\r\n\t\t\tmetadata = format\r\n\t\t\tformat = 'NATIONAL'\r\n\t\t}\r\n\t}\r\n\tif (!value) {\r\n\t\treturn ''\r\n\t}\r\n\tconst phoneNumber = parsePhoneNumber(value, metadata)\r\n\tif (!phoneNumber) {\r\n\t\treturn ''\r\n\t}\r\n\t// Deprecated.\r\n\t// Legacy `format`s.\r\n\tswitch (format) {\r\n\t\tcase 'National':\r\n\t\t\tformat = 'NATIONAL'\r\n\t\t\tbreak\r\n\t\tcase 'International':\r\n\t\t\tformat = 'INTERNATIONAL'\r\n\t\t\tbreak\r\n\t}\r\n\treturn phoneNumber.format(format)\r\n}\r\n\r\nexport function formatPhoneNumberIntl(value, metadata) {\r\n\treturn formatPhoneNumber(value, 'INTERNATIONAL', metadata)\r\n}","import { normalizeArguments } from './parsePhoneNumber'\r\nimport parsePhoneNumberFromString from './parsePhoneNumberFromString_'\r\n\r\nexport default function isValidPhoneNumber() {\r\n\tlet { text, options, metadata } = normalizeArguments(arguments)\r\n\toptions = {\r\n\t\t...options,\r\n\t\textract: false\r\n\t}\r\n\tconst phoneNumber = parsePhoneNumberFromString(text, options, metadata)\r\n\treturn phoneNumber && phoneNumber.isValid() || false\r\n}","import { normalizeArguments } from './parsePhoneNumber'\r\nimport parsePhoneNumberFromString from './parsePhoneNumberFromString_'\r\n\r\nexport default function isPossiblePhoneNumber() {\r\n\tlet { text, options, metadata } = normalizeArguments(arguments)\r\n\toptions = {\r\n\t\t...options,\r\n\t\textract: false\r\n\t}\r\n\tconst phoneNumber = parsePhoneNumberFromString(text, options, metadata)\r\n\treturn phoneNumber && phoneNumber.isPossible() || false\r\n}","import Metadata from './metadata'\r\n\r\nexport default function getCountries(metadata) {\r\n\treturn new Metadata(metadata).getCountries()\r\n}","import PropTypes from 'prop-types'\r\n\r\nexport const metadata = PropTypes.shape({\r\n\tcountry_calling_codes : PropTypes.object.isRequired,\r\n\tcountries : PropTypes.object.isRequired\r\n})\r\n\r\nexport const labels = PropTypes.objectOf(PropTypes.string)","// Counts all occurences of a symbol in a string\r\nexport function count_occurences(symbol, string) {\r\n\tlet count = 0\r\n\t// Using `.split('')` here instead of normal `for ... of`\r\n\t// because the importing application doesn't neccessarily include an ES6 polyfill.\r\n\t// The `.split('')` approach discards \"exotic\" UTF-8 characters\r\n\t// (the ones consisting of four bytes)\r\n\t// but template placeholder characters don't fall into that range\r\n\t// so skipping such miscellaneous \"exotic\" characters\r\n\t// won't matter here for just counting placeholder character occurrences.\r\n\tfor (const character of string.split('')) {\r\n\t\tif (character === symbol) {\r\n\t\t\tcount++\r\n\t\t}\r\n\t}\r\n\treturn count\r\n}","import { count_occurences } from './helpers'\r\n\r\nexport default function closeBraces(retained_template, template, placeholder = 'x', empty_placeholder = ' ')\r\n{\r\n\tlet cut_before = retained_template.length\r\n\r\n\tconst opening_braces = count_occurences('(', retained_template)\r\n\tconst closing_braces = count_occurences(')', retained_template)\r\n\r\n\tlet dangling_braces = opening_braces - closing_braces\r\n\r\n\twhile (dangling_braces > 0 && cut_before < template.length)\r\n\t{\r\n\t\tretained_template += template[cut_before].replace(placeholder, empty_placeholder)\r\n\r\n\t\tif (template[cut_before] === ')')\r\n\t\t{\r\n\t\t\tdangling_braces--\r\n\t\t}\r\n\r\n\t\tcut_before++\r\n\t}\r\n\r\n\treturn retained_template\r\n}\r\n","import template_formatter from './templateFormatter'\r\n\r\n// Formats `value` value preserving `caret` at the same character.\r\n//\r\n// `{ value, caret }` attribute is the result of `parse()` function call.\r\n//\r\n// Returns `{ text, caret }` where the new `caret` is the caret position\r\n// inside `text` text corresponding to the original `caret` position inside `value`.\r\n//\r\n// `formatter(value)` is a function returning `{ text, template }`.\r\n//\r\n// `text` is the `value` value formatted using `template`.\r\n// It may either cut off the non-filled right part of the `template`\r\n// or it may fill the non-filled character placeholders\r\n// in the right part of the `template` with `spacer`\r\n// which is a space (' ') character by default.\r\n//\r\n// `template` is the template used to format the `value`.\r\n// It can be either a full-length template or a partial template.\r\n//\r\n// `formatter` can also be a string — a `template`\r\n// where character placeholders are denoted by 'x'es.\r\n// In this case `formatter` function is automatically created.\r\n//\r\n// Example:\r\n//\r\n// `value` is '880',\r\n// `caret` is `2` (before the first `0`)\r\n//\r\n// `formatter` is `'880' =>\r\n// { text: '8 (80 )', template: 'x (xxx) xxx-xx-xx' }`\r\n//\r\n// The result is `{ text: '8 (80 )', caret: 4 }`.\r\n//\r\nexport default function format(value, caret, formatter)\r\n{\r\n\tif (typeof formatter === 'string')\r\n\t{\r\n\t\tformatter = template_formatter(formatter)\r\n\t}\r\n\r\n\tlet { text, template } = formatter(value) || {}\r\n\r\n\tif (text === undefined)\r\n\t{\r\n\t\t text = value\r\n\t}\r\n\r\n\tif (template)\r\n\t{\r\n\t\tif (caret === undefined)\r\n\t\t{\r\n\t\t\tcaret = text.length\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tlet index = 0\r\n\t\t\tlet found = false\r\n\r\n\t\t\tlet possibly_last_input_character_index = -1\r\n\r\n\t\t\twhile (index < text.length && index < template.length)\r\n\t\t\t{\r\n\t\t\t\t// Character placeholder found\r\n\t\t\t\tif (text[index] !== template[index])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (caret === 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfound = true\r\n\t\t\t\t\t\tcaret = index\r\n\t\t\t\t\t\tbreak\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tpossibly_last_input_character_index = index\r\n\r\n\t\t\t\t\tcaret--\r\n\t\t\t\t}\r\n\r\n\t\t\t\tindex++\r\n\t\t\t}\r\n\r\n\t\t\t// If the caret was positioned after last input character,\r\n\t\t\t// then the text caret index is just after the last input character.\r\n\t\t\tif (!found)\r\n\t\t\t{\r\n\t\t\t\tcaret = possibly_last_input_character_index + 1\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn { text, caret }\r\n}","import { count_occurences } from './helpers'\r\nimport close_braces from './closeBraces'\r\n\r\n// Takes a `template` where character placeholders\r\n// are denoted by 'x'es (e.g. 'x (xxx) xxx-xx-xx').\r\n//\r\n// Returns a function which takes `value` characters\r\n// and returns the `template` filled with those characters.\r\n// If the `template` can only be partially filled\r\n// then it is cut off.\r\n//\r\n// If `should_close_braces` is `true`,\r\n// then it will also make sure all dangling braces are closed,\r\n// e.g. \"8 (8\" -> \"8 (8 )\" (iPhone style phone number input).\r\n//\r\nexport default function(template, placeholder = 'x', should_close_braces)\r\n{\r\n\tif (!template)\r\n\t{\r\n\t\treturn value => ({ text: value })\r\n\t}\r\n\r\n\tconst characters_in_template = count_occurences(placeholder, template)\r\n\r\n\treturn function(value)\r\n\t{\r\n\t\tif (!value)\r\n\t\t{\r\n\t\t\treturn { text: '', template }\r\n\t\t}\r\n\r\n\t\tlet value_character_index = 0\r\n\t\tlet filled_in_template = ''\r\n\r\n\t\t// Using `.split('')` here instead of normal `for ... of`\r\n\t\t// because the importing application doesn't neccessarily include an ES6 polyfill.\r\n\t\t// The `.split('')` approach discards \"exotic\" UTF-8 characters\r\n\t\t// (the ones consisting of four bytes)\r\n\t\t// but template placeholder characters don't fall into that range\r\n\t\t// and appending UTF-8 characters to a string in parts still works.\r\n\t\tfor (const character of template.split(''))\r\n\t\t{\r\n\t\t\tif (character !== placeholder)\r\n\t\t\t{\r\n\t\t\t\tfilled_in_template += character\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\r\n\t\t\tfilled_in_template += value[value_character_index]\r\n\t\t\tvalue_character_index++\r\n\r\n\t\t\t// If the last available value character has been filled in,\r\n\t\t\t// then return the filled in template\r\n\t\t\t// (either trim the right part or retain it,\r\n\t\t\t// if no more character placeholders in there)\r\n\t\t\tif (value_character_index === value.length)\r\n\t\t\t{\r\n\t\t\t\t// If there are more character placeholders\r\n\t\t\t\t// in the right part of the template\r\n\t\t\t\t// then simply trim it.\r\n\t\t\t\tif (value.length < characters_in_template)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (should_close_braces)\r\n\t\t{\r\n\t\t\tfilled_in_template = close_braces(filled_in_template, template)\r\n\t\t}\r\n\r\n\t\treturn { text: filled_in_template, template }\r\n\t}\r\n}","export function isReadOnly(element)\r\n{\r\n\treturn element.hasAttribute('readonly')\r\n}\r\n\r\n// Gets selection bounds\r\nexport function getSelection(element)\r\n{\r\n\t// If no selection, return nothing\r\n\tif (element.selectionStart === element.selectionEnd)\r\n\t{\r\n\t\treturn\r\n\t}\r\n\r\n\treturn { start: element.selectionStart, end: element.selectionEnd }\r\n}\r\n\r\n// Key codes\r\nexport const Keys =\r\n{\r\n\tBackspace : 8,\r\n\tDelete : 46\r\n}\r\n\r\n// Finds out the operation to be intercepted and performed\r\n// based on the key down event `keyCode`.\r\nexport function getOperation(event)\r\n{\r\n\tswitch (event.keyCode)\r\n\t{\r\n\t\tcase Keys.Backspace:\r\n\t\t\treturn 'Backspace'\r\n\r\n\t\tcase Keys.Delete:\r\n\t\t\treturn 'Delete'\r\n\t}\r\n}\r\n\r\n// Gets caret position\r\nexport function getCaretPosition(element)\r\n{\r\n\treturn element.selectionStart\r\n}\r\n\r\n// Sets caret position\r\nexport function setCaretPosition(element, caret_position)\r\n{\r\n\t// Sanity check\r\n\tif (caret_position === undefined)\r\n\t{\r\n\t\treturn\r\n\t}\r\n\r\n\t// Set caret position.\r\n\t// There has been an issue with caret positioning on Android devices.\r\n\t// https://github.com/catamphetamine/input-format/issues/2\r\n\t// I was revisiting this issue and looked for similar issues in other libraries.\r\n\t// For example, there's [`text-mask`](https://github.com/text-mask/text-mask) library.\r\n\t// They've had exactly the same issue when the caret seemingly refused to be repositioned programmatically.\r\n\t// The symptoms were the same: whenever the caret passed through a non-digit character of a mask (a whitespace, a bracket, a dash, etc), it looked as if it placed itself one character before its correct position.\r\n\t// https://github.com/text-mask/text-mask/issues/300\r\n\t// They seem to have found a basic fix for it: calling `input.setSelectionRange()` in a timeout rather than instantly for Android devices.\r\n\t// https://github.com/text-mask/text-mask/pull/400/files\r\n\t// I've implemented the same workaround here.\r\n\tif (isAndroid()) {\r\n setTimeout(() => element.setSelectionRange(caret_position, caret_position), 0)\r\n\t} else {\r\n\t\telement.setSelectionRange(caret_position, caret_position)\r\n\t}\r\n}\r\n\r\nfunction isAndroid() {\r\n\t// `navigator` is not defined when running mocha tests.\r\n\tif (typeof navigator !== 'undefined') {\r\n\t\treturn ANDROID_USER_AGENT_REG_EXP.test(navigator.userAgent)\r\n\t}\r\n}\r\n\r\nconst ANDROID_USER_AGENT_REG_EXP = /Android/i","import edit from './edit'\r\nimport parse from './parse'\r\nimport format from './format'\r\n\r\nimport\r\n{\r\n\tisReadOnly,\r\n\tgetOperation,\r\n\tgetSelection,\r\n\tgetCaretPosition,\r\n\tsetCaretPosition\r\n}\r\nfrom './dom'\r\n\r\n// Deprecated.\r\n// I don't know why this function exists.\r\nexport function onCut(event, input, _parse, _format, on_change)\r\n{\r\n\tif (isReadOnly(input)) {\r\n\t\treturn\r\n\t}\r\n\r\n\t// The actual cut hasn't happened just yet hence the timeout.\r\n\tsetTimeout(() => formatInputText(input, _parse, _format, undefined, on_change), 0)\r\n}\r\n\r\n// Deprecated.\r\n// I don't know why this function exists.\r\nexport function onPaste(event, input, _parse, _format, on_change)\r\n{\r\n\tif (isReadOnly(input)) {\r\n\t\treturn\r\n\t}\r\n\r\n\tconst selection = getSelection(input)\r\n\r\n\t// If selection is made,\r\n\t// just erase the selected text\r\n\t// prior to pasting\r\n\tif (selection)\r\n\t{\r\n\t\teraseSelection(input, selection)\r\n\t}\r\n\r\n\tformatInputText(input, _parse, _format, undefined, on_change)\r\n}\r\n\r\nexport function onChange(event, input, _parse, _format, on_change)\r\n{\r\n\tformatInputText(input, _parse, _format, undefined, on_change)\r\n}\r\n\r\n// \"Delete\" and \"Backspace\" keys are special\r\n// in a way that they're not handled by the regular `onChange()` handler\r\n// and instead are intercepted and re-applied manually.\r\n// The reason is that normally hitting \"Backspace\" or \"Delete\"\r\n// results in erasing a character, but that character might be any character,\r\n// while it would be a better \"user experience\" if it erased not just any character\r\n// but the closest \"meaningful\" character.\r\n// For example, if a template is `(xxx) xxx-xxxx`,\r\n// and the `` value is `(111) 222-3333`,\r\n// then, if a user begins erasing the `3333` part via \"Backspace\"\r\n// and reaches the \"-\" character, then it would just erase the \"-\" character.\r\n// Nothing wrong with that, but it would be a better \"user experience\"\r\n// if hitting \"Backspace\" at that position would erase the closest \"meaningful\"\r\n// character, which would be the rightmost `2`.\r\n// So, what this `onKeyDown()` handler does is it intercepts\r\n// \"Backspace\" and \"Delete\" keys and re-applies those operations manually\r\n// following the logic described above.\r\nexport function onKeyDown(event, input, _parse, _format, on_change)\r\n{\r\n\tif (isReadOnly(input)) {\r\n\t\treturn\r\n\t}\r\n\r\n\tconst operation = getOperation(event)\r\n\tswitch (operation)\r\n\t{\r\n\t\tcase 'Delete':\r\n\t\tcase 'Backspace':\r\n\t\t\t// Intercept this operation and perform it manually.\r\n\t\t\tevent.preventDefault()\r\n\r\n\t\t\tconst selection = getSelection(input)\r\n\r\n\t\t\t// If a selection is made, just erase the selected text.\r\n\t\t\tif (selection)\r\n\t\t\t{\r\n\t\t\t\teraseSelection(input, selection)\r\n\t\t\t\treturn formatInputText(input, _parse, _format, undefined, on_change)\r\n\t\t\t}\r\n\r\n\t\t\t// Else, perform the (character erasing) operation manually.\r\n\t\t\treturn formatInputText(input, _parse, _format, operation, on_change)\r\n\r\n\t\tdefault:\r\n\t\t\t// Will be handled normally as part of the `onChange` handler.\r\n\t}\r\n}\r\n\r\n/**\r\n * Erases the selected text inside an ``.\r\n * @param {DOMElement} input\r\n * @param {Selection} selection\r\n */\r\nfunction eraseSelection(input, selection)\r\n{\r\n\tlet text = input.value\r\n\ttext = text.slice(0, selection.start) + text.slice(selection.end)\r\n\r\n\tinput.value = text\r\n\tsetCaretPosition(input, selection.start)\r\n}\r\n\r\n/**\r\n * Parses and re-formats `` textual value.\r\n * E.g. when a user enters something into the ``\r\n * that raw input must first be parsed and the re-formatted properly.\r\n * Is called either after some user input (e.g. entered a character, pasted something)\r\n * or after the user performed an `operation` (e.g. \"Backspace\", \"Delete\").\r\n * @param {DOMElement} input\r\n * @param {Function} parse\r\n * @param {Function} format\r\n * @param {string} [operation] - The operation that triggered `` textual value change. E.g. \"Backspace\", \"Delete\".\r\n * @param {Function} onChange\r\n */\r\nfunction formatInputText(input, _parse, _format, operation, on_change)\r\n{\r\n\t// Parse `` textual value.\r\n\t// Get the `value` and `caret` position.\r\n\tlet { value, caret } = parse(input.value, getCaretPosition(input), _parse)\r\n\r\n\t// If a user performed an operation (\"Backspace\", \"Delete\")\r\n\t// then apply that operation and get the new `value` and `caret` position.\r\n\tif (operation)\r\n\t{\r\n\t\tconst newValueAndCaret = edit(value, caret, operation)\r\n\r\n\t\tvalue = newValueAndCaret.value\r\n\t\tcaret = newValueAndCaret.caret\r\n\t}\r\n\r\n\t// Format the `value`.\r\n\t// (and reposition the caret accordingly)\r\n\tconst formatted = format(value, caret, _format)\r\n\r\n\tconst text = formatted.text\r\n\tcaret = formatted.caret\r\n\r\n\t// Set `` textual value manually\r\n\t// to prevent React from resetting the caret position\r\n\t// later inside a subsequent `render()`.\r\n\t// Doesn't work for custom `inputComponent`s for some reason.\r\n\tinput.value = text\r\n\t// Position the caret properly.\r\n\tsetCaretPosition(input, caret)\r\n\r\n\t// If the `` textual value did change,\r\n\t// then the parsed `value` may have changed too.\r\n\ton_change(value)\r\n}","// Parses the `text`.\r\n//\r\n// Returns `{ value, caret }` where `caret` is\r\n// the caret position inside `value`\r\n// corresponding to the `caret_position` inside `text`.\r\n//\r\n// The `text` is parsed by feeding each character sequentially to\r\n// `parse_character(character, value)` function\r\n// and appending the result (if it's not `undefined`) to `value`.\r\n//\r\n// Example:\r\n//\r\n// `text` is `8 (800) 555-35-35`,\r\n// `caret_position` is `4` (before the first `0`).\r\n// `parse_character` is `(character, value) =>\r\n// if (character >= '0' && character <= '9') { return character }`.\r\n//\r\n// then `parse()` outputs `{ value: '88005553535', caret: 2 }`.\r\n//\r\nexport default function parse(text, caret_position, parse_character)\r\n{\r\n\tlet value = ''\r\n\r\n\tlet focused_input_character_index = 0\r\n\r\n\tlet index = 0\r\n\twhile (index < text.length)\r\n\t{\r\n\t\tconst character = parse_character(text[index], value)\r\n\r\n\t\tif (character !== undefined)\r\n\t\t{\r\n\t\t\tvalue += character\r\n\r\n\t\t\tif (caret_position !== undefined)\r\n\t\t\t{\r\n\t\t\t\tif (caret_position === index)\r\n\t\t\t\t{\r\n\t\t\t\t\tfocused_input_character_index = value.length - 1;\r\n\t\t\t\t}\r\n\t\t\t\telse if (caret_position > index)\r\n\t\t\t\t{\r\n\t\t\t\t\tfocused_input_character_index = value.length\r\n\t\t\t\t}\r\n\t\t\t }\r\n\t\t}\r\n\r\n\t\tindex++\r\n\t}\r\n\r\n\t// If caret position wasn't specified\r\n\tif (caret_position === undefined)\r\n\t{\r\n\t\t// Then set caret position to \"after the last input character\"\r\n\t\tfocused_input_character_index = value.length\r\n\t}\r\n\r\n\tconst result =\r\n\t{\r\n\t\tvalue,\r\n\t\tcaret : focused_input_character_index\r\n\t}\r\n\r\n\treturn result\r\n}","// Edits text `value` (if `operation` is passed) and repositions the `caret` if needed.\r\n//\r\n// Example:\r\n//\r\n// value - '88005553535'\r\n// caret - 2 // starting from 0; is positioned before the first zero\r\n// operation - 'Backspace'\r\n//\r\n// Returns\r\n// {\r\n// \tvalue: '8005553535'\r\n// \tcaret: 1\r\n// }\r\n//\r\n// Currently supports just 'Delete' and 'Backspace' operations\r\n//\r\nexport default function edit(value, caret, operation)\r\n{\r\n\tswitch (operation)\r\n\t{\r\n\t\tcase 'Backspace':\r\n\t\t\t// If there exists the previous character,\r\n\t\t\t// then erase it and reposition the caret.\r\n\t\t\tif (caret > 0)\r\n\t\t\t{\r\n\t\t\t\t// Remove the previous character\r\n\t\t\t\tvalue = value.slice(0, caret - 1) + value.slice(caret)\r\n\t\t\t\t// Position the caret where the previous (erased) character was\r\n\t\t\t\tcaret--\r\n\t\t\t}\r\n\t\t\tbreak\r\n\r\n\t\tcase 'Delete':\r\n\t\t\t// Remove current digit (if any)\r\n\t\t\tvalue = value.slice(0, caret) + value.slice(caret + 1)\r\n\t\t\tbreak\r\n\t}\r\n\r\n\treturn { value, caret }\r\n}","// This is just `./ReactInput.js` rewritten in Hooks.\r\n\r\nimport React, { useCallback, useRef } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport {\r\n\tonChange as onInputChange,\r\n\tonKeyDown as onInputKeyDown\r\n} from '../inputControl'\r\n\r\n// Usage:\r\n//\r\n// this.setState({ phone })}\r\n// \tparse={character => character}\r\n// \tformat={value => ({ text: value, template: 'xxxxxxxx' })}/>\r\n//\r\nfunction Input({\r\n\tvalue,\r\n\tparse,\r\n\tformat,\r\n\tinputComponent: InputComponent,\r\n\tonChange,\r\n\tonKeyDown,\r\n\t...rest\r\n}, ref) {\r\n\tconst internalRef = useRef();\r\n\tconst setRef = useCallback((instance) => {\r\n\t\tinternalRef.current = instance;\r\n\t\tif (ref) {\r\n\t\t\tif (typeof ref === 'function') {\r\n\t\t\t\tref(instance)\r\n\t\t\t} else {\r\n\t\t\t\tref.current = instance\r\n\t\t\t}\r\n\t\t}\r\n\t}, [ref]);\r\n\tconst _onChange = useCallback((event) => {\r\n\t\treturn onInputChange(\r\n\t\t\tevent,\r\n\t\t\tinternalRef.current,\r\n\t\t\tparse,\r\n\t\t\tformat,\r\n\t\t\tonChange\r\n\t\t)\r\n\t}, [internalRef, parse, format, onChange])\r\n\r\n\tconst _onKeyDown = useCallback((event) => {\r\n\t\tif (onKeyDown) {\r\n\t\t\tonKeyDown(event)\r\n\t\t}\r\n\t\treturn onInputKeyDown(\r\n\t\t\tevent,\r\n\t\t\tinternalRef.current,\r\n\t\t\tparse,\r\n\t\t\tformat,\r\n\t\t\tonChange\r\n\t\t)\r\n\t}, [internalRef, parse, format, onChange, onKeyDown])\r\n\r\n\treturn (\r\n\t\t\r\n\t)\r\n}\r\n\r\nInput = React.forwardRef(Input)\r\n\r\nInput.propTypes = {\r\n\t// Parses a single characher of `` text.\r\n\tparse: PropTypes.func.isRequired,\r\n\r\n\t// Formats `value` into `` text.\r\n\tformat: PropTypes.func.isRequired,\r\n\r\n\t// Renders `` by default.\r\n\tinputComponent: PropTypes.elementType.isRequired,\r\n\r\n\t// `` `type` attribute.\r\n\ttype: PropTypes.string.isRequired,\r\n\r\n\t// Is parsed from text.\r\n\tvalue: PropTypes.string,\r\n\r\n\t// This handler is called each time `` text is changed.\r\n\tonChange: PropTypes.func.isRequired,\r\n\r\n\t// Passthrough\r\n\tonKeyDown: PropTypes.func,\r\n\tonCut: PropTypes.func,\r\n\tonPaste: PropTypes.func\r\n}\r\n\r\nInput.defaultProps = {\r\n\t// Renders `` by default.\r\n\tinputComponent: 'input',\r\n\r\n\t// `` `type` attribute.\r\n\ttype: 'text'\r\n}\r\n\r\nexport default Input\r\n\r\nfunction isEmptyValue(value) {\r\n\treturn value === undefined || value === null\r\n}","export default class AsYouTypeState {\r\n\tconstructor({ onCountryChange, onCallingCodeChange }) {\r\n\t\tthis.onCountryChange = onCountryChange\r\n\t\tthis.onCallingCodeChange = onCallingCodeChange\r\n\t}\r\n\r\n\treset(defaultCountry, defaultCallingCode) {\r\n\t\tthis.international = false\r\n\t\tthis.IDDPrefix = undefined\r\n\t\tthis.missingPlus = undefined\r\n\t\tthis.callingCode = undefined\r\n\t\tthis.digits = ''\r\n\t\tthis.resetNationalSignificantNumber()\r\n\t\tthis.initCountryAndCallingCode(defaultCountry, defaultCallingCode)\r\n\t}\r\n\r\n\tresetNationalSignificantNumber() {\r\n\t\tthis.nationalSignificantNumber = this.getNationalDigits()\r\n\t\tthis.nationalSignificantNumberMatchesInput = true\r\n\t\tthis.nationalPrefix = undefined\r\n\t\tthis.carrierCode = undefined\r\n\t\tthis.complexPrefixBeforeNationalSignificantNumber = undefined\r\n\t}\r\n\r\n\tupdate = (properties) => {\r\n\t\tfor (const key of Object.keys(properties)) {\r\n\t\t\tthis[key] = properties[key]\r\n\t\t}\r\n\t}\r\n\r\n\tinitCountryAndCallingCode(country, callingCode) {\r\n\t\tthis.setCountry(country)\r\n\t\tthis.setCallingCode(callingCode)\r\n\t}\r\n\r\n\tsetCountry(country) {\r\n\t\tthis.country = country\r\n\t\tthis.onCountryChange(country)\r\n\t}\r\n\r\n\tsetCallingCode(callingCode) {\r\n\t\tthis.callingCode = callingCode\r\n\t\treturn this.onCallingCodeChange(this.country, callingCode)\r\n\t}\r\n\r\n\tstartInternationalNumber() {\r\n\t\t// Prepend the `+` to parsed input.\r\n\t\tthis.international = true\r\n\t\t// If a default country was set then reset it\r\n\t\t// because an explicitly international phone\r\n\t\t// number is being entered.\r\n\t\tthis.initCountryAndCallingCode()\r\n\t}\r\n\r\n\tappendDigits(nextDigits) {\r\n\t\tthis.digits += nextDigits\r\n\t}\r\n\r\n\tappendNationalSignificantNumberDigits(nextDigits) {\r\n\t\tthis.nationalSignificantNumber += nextDigits\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the part of `this.digits` that corresponds to the national number.\r\n\t * Basically, all digits that have been input by the user, except for the\r\n\t * international prefix and the country calling code part\r\n\t * (if the number is an international one).\r\n\t * @return {string}\r\n\t */\r\n\tgetNationalDigits() {\r\n\t\tif (this.international) {\r\n\t\t\treturn this.digits.slice(\r\n\t\t\t\t(this.IDDPrefix ? this.IDDPrefix.length : 0) +\r\n\t\t\t\t(this.callingCode ? this.callingCode.length : 0)\r\n\t\t\t)\r\n\t\t}\r\n\t\treturn this.digits\r\n\t}\r\n\r\n\tgetDigitsWithoutInternationalPrefix() {\r\n\t\tif (this.international) {\r\n\t\t\tif (this.IDDPrefix) {\r\n\t\t\t\treturn this.digits.slice(this.IDDPrefix.length)\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.digits\r\n\t}\r\n}","// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.\r\nexport const DIGIT_PLACEHOLDER = 'x' // '\\u2008' (punctuation space)\r\nconst DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER)\r\n\r\n// Counts all occurences of a symbol in a string.\r\n// Unicode-unsafe (because using `.split()`).\r\nexport function countOccurences(symbol, string) {\r\n\tlet count = 0\r\n\t// Using `.split('')` to iterate through a string here\r\n\t// to avoid requiring `Symbol.iterator` polyfill.\r\n\t// `.split('')` is generally not safe for Unicode,\r\n\t// but in this particular case for counting brackets it is safe.\r\n\t// for (const character of string)\r\n\tfor (const character of string.split('')) {\r\n\t\tif (character === symbol) {\r\n\t\t\tcount++\r\n\t\t}\r\n\t}\r\n\treturn count\r\n}\r\n\r\n// Repeats a string (or a symbol) N times.\r\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\r\nexport function repeat(string, times) {\r\n\tif (times < 1) {\r\n\t\treturn ''\r\n\t}\r\n\tlet result = ''\r\n\twhile (times > 1) {\r\n\t\tif (times & 1) {\r\n\t\t\tresult += string\r\n\t\t}\r\n\t\ttimes >>= 1\r\n\t\tstring += string\r\n\t}\r\n\treturn result + string\r\n}\r\n\r\nexport function cutAndStripNonPairedParens(string, cutBeforeIndex) {\r\n\tif (string[cutBeforeIndex] === ')') {\r\n\t\tcutBeforeIndex++\r\n\t}\r\n\treturn stripNonPairedParens(string.slice(0, cutBeforeIndex))\r\n}\r\n\r\nexport function closeNonPairedParens(template, cut_before) {\r\n\tconst retained_template = template.slice(0, cut_before)\r\n\tconst opening_braces = countOccurences('(', retained_template)\r\n\tconst closing_braces = countOccurences(')', retained_template)\r\n\tlet dangling_braces = opening_braces - closing_braces\r\n\twhile (dangling_braces > 0 && cut_before < template.length) {\r\n\t\tif (template[cut_before] === ')') {\r\n\t\t\tdangling_braces--\r\n\t\t}\r\n\t\tcut_before++\r\n\t}\r\n\treturn template.slice(0, cut_before)\r\n}\r\n\r\nexport function stripNonPairedParens(string) {\r\n\tconst dangling_braces =[]\r\n\tlet i = 0\r\n\twhile (i < string.length) {\r\n\t\tif (string[i] === '(') {\r\n\t\t\tdangling_braces.push(i)\r\n\t\t}\r\n\t\telse if (string[i] === ')') {\r\n\t\t\tdangling_braces.pop()\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\tlet start = 0\r\n\tlet cleared_string = ''\r\n\tdangling_braces.push(string.length)\r\n\tfor (const index of dangling_braces) {\r\n\t\tcleared_string += string.slice(start, index)\r\n\t\tstart = index + 1\r\n\t}\r\n\treturn cleared_string\r\n}\r\n\r\nexport function populateTemplateWithDigits(template, position, digits) {\r\n\t// Using `.split('')` to iterate through a string here\r\n\t// to avoid requiring `Symbol.iterator` polyfill.\r\n\t// `.split('')` is generally not safe for Unicode,\r\n\t// but in this particular case for `digits` it is safe.\r\n\t// for (const digit of digits)\r\n\tfor (const digit of digits.split('')) {\r\n\t\t// If there is room for more digits in current `template`,\r\n\t\t// then set the next digit in the `template`,\r\n\t\t// and return the formatted digits so far.\r\n\t\t// If more digits are entered than the current format could handle.\r\n\t\tif (template.slice(position + 1).search(DIGIT_PLACEHOLDER_MATCHER) < 0) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tposition = template.search(DIGIT_PLACEHOLDER_MATCHER)\r\n\t\ttemplate = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit)\r\n\t}\r\n\treturn [template, position]\r\n}","import checkNumberLength from './helpers/checkNumberLength'\r\nimport parseDigits from './helpers/parseDigits'\r\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat'\r\n\r\nexport default function formatCompleteNumber(state, format, {\r\n\tmetadata,\r\n\tshouldTryNationalPrefixFormattingRule,\r\n\tgetSeparatorAfterNationalPrefix\r\n}) {\r\n\tconst matcher = new RegExp(`^(?:${format.pattern()})$`)\r\n\tif (matcher.test(state.nationalSignificantNumber)) {\r\n\t\treturn formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(\r\n\t\t\tstate,\r\n\t\t\tformat,\r\n\t\t\t{\r\n\t\t\t\tmetadata,\r\n\t\t\t\tshouldTryNationalPrefixFormattingRule,\r\n\t\t\t\tgetSeparatorAfterNationalPrefix\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport function canFormatCompleteNumber(nationalSignificantNumber, metadata) {\r\n\treturn checkNumberLength(nationalSignificantNumber, metadata) === 'IS_POSSIBLE'\r\n}\r\n\r\nfunction formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {\r\n\tmetadata,\r\n\tshouldTryNationalPrefixFormattingRule,\r\n\tgetSeparatorAfterNationalPrefix\r\n}) {\r\n\t// `format` has already been checked for `nationalPrefix` requirement.\r\n\r\n\tconst {\r\n\t\tnationalSignificantNumber,\r\n\t\tinternational,\r\n\t\tnationalPrefix,\r\n\t\tcarrierCode\r\n\t} = state\r\n\r\n\t// Format the number with using `national_prefix_formatting_rule`.\r\n\t// If the resulting formatted number is a valid formatted number, then return it.\r\n\t//\r\n\t// Google's AsYouType formatter is different in a way that it doesn't try\r\n\t// to format using the \"national prefix formatting rule\", and instead it\r\n\t// simply prepends a national prefix followed by a \" \" character.\r\n\t// This code does that too, but as a fallback.\r\n\t// The reason is that \"national prefix formatting rule\" may use parentheses,\r\n\t// which wouldn't be included has it used the simpler Google's way.\r\n\t//\r\n\tif (shouldTryNationalPrefixFormattingRule(format)) {\r\n\t\tconst formattedNumber = formatNationalNumber(state, format, {\r\n\t\t\tuseNationalPrefixFormattingRule: true,\r\n\t\t\tgetSeparatorAfterNationalPrefix,\r\n\t\t\tmetadata\r\n\t\t})\r\n\t\tif (formattedNumber) {\r\n\t\t\treturn formattedNumber\r\n\t\t}\r\n\t}\r\n\r\n\t// Format the number without using `national_prefix_formatting_rule`.\r\n\treturn formatNationalNumber(state, format, {\r\n\t\tuseNationalPrefixFormattingRule: false,\r\n\t\tgetSeparatorAfterNationalPrefix,\r\n\t\tmetadata\r\n\t})\r\n}\r\n\r\nfunction formatNationalNumber(state, format, {\r\n\tmetadata,\r\n\tuseNationalPrefixFormattingRule,\r\n\tgetSeparatorAfterNationalPrefix\r\n}) {\r\n\tlet formattedNationalNumber = formatNationalNumberUsingFormat(\r\n\t\tstate.nationalSignificantNumber,\r\n\t\tformat,\r\n\t\t{\r\n\t\t\tcarrierCode: state.carrierCode,\r\n\t\t\tuseInternationalFormat: state.international,\r\n\t\t\twithNationalPrefix: useNationalPrefixFormattingRule,\r\n\t\t\tmetadata\r\n\t\t}\r\n\t)\r\n\tif (!useNationalPrefixFormattingRule) {\r\n\t\tif (state.nationalPrefix) {\r\n\t\t\t// If a national prefix was extracted, then just prepend it,\r\n\t\t\t// followed by a \" \" character.\r\n\t\t\tformattedNationalNumber = state.nationalPrefix +\r\n\t\t\t\tgetSeparatorAfterNationalPrefix(format) +\r\n\t\t\t\tformattedNationalNumber\r\n\t\t} else if (state.complexPrefixBeforeNationalSignificantNumber) {\r\n\t\t\tformattedNationalNumber = state.complexPrefixBeforeNationalSignificantNumber +\r\n\t\t\t\t' ' +\r\n\t\t\t\tformattedNationalNumber\r\n\t\t}\r\n\t}\r\n\tif (isValidFormattedNationalNumber(formattedNationalNumber, state)) {\r\n\t\treturn formattedNationalNumber\r\n\t}\r\n}\r\n\r\n// Check that the formatted phone number contains exactly\r\n// the same digits that have been input by the user.\r\n// For example, when \"0111523456789\" is input for `AR` country,\r\n// the extracted `this.nationalSignificantNumber` is \"91123456789\",\r\n// which means that the national part of `this.digits` isn't simply equal to\r\n// `this.nationalPrefix` + `this.nationalSignificantNumber`.\r\n//\r\n// Also, a `format` can add extra digits to the `this.nationalSignificantNumber`\r\n// being formatted via `metadata[country].national_prefix_transform_rule`.\r\n// For example, for `VI` country, it prepends `340` to the national number,\r\n// and if this check hasn't been implemented, then there would be a bug\r\n// when `340` \"area coude\" is \"duplicated\" during input for `VI` country:\r\n// https://github.com/catamphetamine/libphonenumber-js/issues/318\r\n//\r\n// So, all these \"gotchas\" are filtered out.\r\n//\r\n// In the original Google's code, the comments say:\r\n// \"Check that we didn't remove nor add any extra digits when we matched\r\n// this formatting pattern. This usually happens after we entered the last\r\n// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when\r\n// formatted but AYTF should retain all the number entered and not change\r\n// in order to match a format (of same leading digits and length) display\r\n// in that way.\"\r\n// \"If it's the same (i.e entered number and format is same), then it's\r\n// safe to return this in formatted number as nothing is lost / added.\"\r\n// Otherwise, don't use this format.\r\n// https://github.com/google/libphonenumber/commit/3e7c1f04f5e7200f87fb131e6f85c6e99d60f510#diff-9149457fa9f5d608a11bb975c6ef4bc5\r\n// https://github.com/google/libphonenumber/commit/3ac88c7106e7dcb553bcc794b15f19185928a1c6#diff-2dcb77e833422ee304da348b905cde0b\r\n//\r\nfunction isValidFormattedNationalNumber(formattedNationalNumber, state) {\r\n\treturn parseDigits(formattedNationalNumber) === state.getNationalDigits()\r\n}","export default class PatternMatcher {\r\n\tconstructor(pattern) {\r\n\t\tthis.matchTree = new PatternParser().parse(pattern)\r\n\t}\r\n\r\n\tmatch(string, { allowOverflow } = {}) {\r\n\t\tif (!string) {\r\n\t\t\tthrow new Error('String is required')\r\n\t\t}\r\n\t\tconst result = match(string.split(''), this.matchTree, true)\r\n\t\tif (result && result.match) {\r\n\t\t\tdelete result.matchedChars\r\n\t\t}\r\n\t\tif (result && result.overflow) {\r\n\t\t\tif (!allowOverflow) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result\r\n\t}\r\n}\r\n\r\nfunction match(characters, tree, last) {\r\n\tif (typeof tree === 'string') {\r\n\t\tif (last) {\r\n\t\t\t// `tree` is always a single character.\r\n\t\t\tif (characters.length > tree.length) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\toverflow: true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst characterString = characters.join('')\r\n\t\tif (tree.indexOf(characterString) === 0) {\r\n\t\t\t// `tree` is always a single character.\r\n\t\t\t// If `tree.indexOf(characterString) === 0`\r\n\t\t\t// then `characters.length === tree.length`.\r\n\t\t\t/* istanbul ignore else */\r\n\t\t\tif (characters.length === tree.length) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tmatch: true,\r\n\t\t\t\t\tmatchedChars: characters\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// `tree` is always a single character.\r\n\t\t\t// If `tree.indexOf(characterString) === 0`\r\n\t\t\t// then `characters.length === tree.length`.\r\n\t\t\t/* istanbul ignore next */\r\n\t\t\treturn {\r\n\t\t\t\tpartialMatch: true,\r\n\t\t\t\t// matchedChars: characters\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (characterString.indexOf(tree) === 0) {\r\n\t\t\treturn {\r\n\t\t\t\tmatch: true,\r\n\t\t\t\tmatchedChars: characters.slice(0, tree.length)\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn\r\n\t}\r\n\r\n\tif (Array.isArray(tree)) {\r\n\t\tlet restCharacters = characters.slice()\r\n\t\tlet i = 0\r\n\t\twhile (i < tree.length) {\r\n\t\t\tconst subtree = tree[i]\r\n\t\t\tconst result = match(restCharacters, subtree, last && (i === tree.length - 1))\r\n\t\t\tif (!result) {\r\n\t\t\t\treturn\r\n\t\t\t} else if (result.overflow) {\r\n\t\t\t\treturn result\r\n\t\t\t} else if (result.match) {\r\n\t\t\t\t// Continue with the next subtree with the rest of the characters.\r\n\t\t\t\trestCharacters = restCharacters.slice(result.matchedChars.length)\r\n\t\t\t\tif (restCharacters.length === 0) {\r\n\t\t\t\t\tif (i === tree.length - 1) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tmatch: true,\r\n\t\t\t\t\t\t\tmatchedChars: characters\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tpartialMatch: true,\r\n\t\t\t\t\t\t\t// matchedChars: characters\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t/* istanbul ignore else */\r\n\t\t\t\tif (result.partialMatch) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tpartialMatch: true,\r\n\t\t\t\t\t\t// matchedChars: characters\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new Error(`Unsupported match result:\\n${JSON.stringify(result, null, 2)}`)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ti++\r\n\t\t}\r\n\t\t// If `last` then overflow has already been checked\r\n\t\t// by the last element of the `tree` array.\r\n\t\t/* istanbul ignore if */\r\n\t\tif (last) {\r\n\t\t\treturn {\r\n\t\t\t\toverflow: true\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tmatch: true,\r\n\t\t\tmatchedChars: characters.slice(0, characters.length - restCharacters.length)\r\n\t\t}\r\n\t}\r\n\r\n\tswitch (tree.op) {\r\n\t\tcase '|':\r\n\t\t\tlet partialMatch\r\n\t\t\tfor (const branch of tree.args) {\r\n\t\t\t\tconst result = match(characters, branch, last)\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tif (result.overflow) {\r\n\t\t\t\t\t\treturn result\r\n\t\t\t\t\t} else if (result.match) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tmatch: true,\r\n\t\t\t\t\t\t\tmatchedChars: result.matchedChars\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t/* istanbul ignore else */\r\n\t\t\t\t\t\tif (result.partialMatch) {\r\n\t\t\t\t\t\t\tpartialMatch = true\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthrow new Error(`Unsupported match result:\\n${JSON.stringify(result, null, 2)}`)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (partialMatch) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tpartialMatch: true,\r\n\t\t\t\t\t// matchedChars: ...\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Not even a partial match.\r\n\t\t\treturn\r\n\r\n\t\tcase '[]':\r\n\t\t\tfor (const char of tree.args) {\r\n\t\t\t\tif (characters[0] === char) {\r\n\t\t\t\t\tif (characters.length === 1) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tmatch: true,\r\n\t\t\t\t\t\t\tmatchedChars: characters\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (last) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\toverflow: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tmatch: true,\r\n\t\t\t\t\t\tmatchedChars: [char]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// No character matches.\r\n\t\t\treturn\r\n\r\n\t\t/* istanbul ignore next */\r\n\t\tdefault:\r\n\t\t\tthrow new Error(`Unsupported instruction tree: ${tree}`)\r\n\t}\r\n}\r\n\r\nconst OPERATOR = new RegExp(\r\n\t// any of:\r\n\t'(' +\r\n\t\t// or operator\r\n\t\t'\\\\|' +\r\n\t\t// or\r\n\t\t'|' +\r\n\t\t// or group start\r\n\t\t'\\\\(\\\\?\\\\:' +\r\n\t\t// or\r\n\t\t'|' +\r\n\t\t// or group end\r\n\t\t'\\\\)' +\r\n\t\t// or\r\n\t\t'|' +\r\n\t\t// one-of set start\r\n\t\t'\\\\[' +\r\n\t\t// or\r\n\t\t'|' +\r\n\t\t// one-of set end\r\n\t\t'\\\\]' +\r\n\t')'\r\n)\r\n\r\nconst ILLEGAL_CHARACTER_REGEXP = /[\\(\\)\\[\\]\\?\\:\\|]/\r\n\r\nclass PatternParser {\r\n\tparse(pattern) {\r\n\t\tthis.context = [{\r\n\t\t\tor: true,\r\n\t\t\tinstructions: []\r\n\t\t}]\r\n\r\n\t\tthis.parsePattern(pattern)\r\n\r\n\t\tif (this.context.length !== 1) {\r\n\t\t\tthrow new Error('Non-finalized contexts left when pattern parse ended')\r\n\t\t}\r\n\r\n\t\tconst { branches, instructions } = this.context[0]\r\n\r\n\t\tif (branches) {\r\n\t\t\treturn [{\r\n\t\t\t\top: '|',\r\n\t\t\t\targs: branches.concat([instructions])\r\n\t\t\t}]\r\n\t\t}\r\n\r\n\t\t/* istanbul ignore if */\r\n\t\tif (instructions.length === 0) {\r\n\t\t\tthrow new Error('Pattern is required')\r\n\t\t}\r\n\r\n\t\treturn instructions\r\n\t}\r\n\r\n\tstartContext(context) {\r\n\t\tthis.context.push(context)\r\n\t}\r\n\r\n\tendContext() {\r\n\t\tthis.context.pop()\r\n\t}\r\n\r\n\tgetContext() {\r\n\t\treturn this.context[this.context.length - 1]\r\n\t}\r\n\r\n\tparsePattern(pattern) {\r\n\t\tif (!pattern) {\r\n\t\t\tthrow new Error('Pattern is required')\r\n\t\t}\r\n\r\n\t\tconst match = pattern.match(OPERATOR)\r\n\t\tif (!match) {\r\n\t\t\tif (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {\r\n\t\t\t\tthrow new Error(`Illegal characters found in a pattern: ${pattern}`)\r\n\t\t\t}\r\n\t\t\tthis.getContext().instructions = this.getContext().instructions.concat(\r\n\t\t\t\tpattern.split('')\r\n\t\t\t)\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tconst operator = match[1]\r\n\t\tconst before = pattern.slice(0, match.index)\r\n\t\tconst rightPart = pattern.slice(match.index + operator.length)\r\n\r\n\t\tswitch (operator) {\r\n\t\t\tcase '(?:':\r\n\t\t\t\tif (before) {\r\n\t\t\t\t\tthis.parsePattern(before)\r\n\t\t\t\t}\r\n\t\t\t\tthis.startContext({\r\n\t\t\t\t\tor: true,\r\n\t\t\t\t\tinstructions: [],\r\n\t\t\t\t\tbranches: []\r\n\t\t\t\t})\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase ')':\r\n\t\t\t\tif (!this.getContext().or) {\r\n\t\t\t\t\tthrow new Error('\")\" operator must be preceded by \"(?:\" operator')\r\n\t\t\t\t}\r\n\t\t\t\tif (before) {\r\n\t\t\t\t\tthis.parsePattern(before)\r\n\t\t\t\t}\r\n\t\t\t\tif (this.getContext().instructions.length === 0) {\r\n\t\t\t\t\tthrow new Error('No instructions found after \"|\" operator in an \"or\" group')\r\n\t\t\t\t}\r\n\t\t\t\tconst { branches } = this.getContext()\r\n\t\t\t\tbranches.push(\r\n\t\t\t\t\tthis.getContext().instructions\r\n\t\t\t\t)\r\n\t\t\t\tthis.endContext()\r\n\t\t\t\tthis.getContext().instructions.push({\r\n\t\t\t\t\top: '|',\r\n\t\t\t\t\targs: branches\r\n\t\t\t\t})\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase '|':\r\n\t\t\t\tif (!this.getContext().or) {\r\n\t\t\t\t\tthrow new Error('\"|\" operator can only be used inside \"or\" groups')\r\n\t\t\t\t}\r\n\t\t\t\tif (before) {\r\n\t\t\t\t\tthis.parsePattern(before)\r\n\t\t\t\t}\r\n\t\t\t\t// The top-level is an implicit \"or\" group, if required.\r\n\t\t\t\tif (!this.getContext().branches) {\r\n\t\t\t\t\t// `branches` are not defined only for the root implicit \"or\" operator.\r\n\t\t\t\t\t/* istanbul ignore else */\r\n\t\t\t\t\tif (this.context.length === 1) {\r\n\t\t\t\t\t\tthis.getContext().branches = []\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new Error('\"branches\" not found in an \"or\" group context')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.getContext().branches.push(\r\n\t\t\t\t\tthis.getContext().instructions\r\n\t\t\t\t)\r\n\t\t\t\tthis.getContext().instructions = []\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase '[':\r\n\t\t\t\tif (before) {\r\n\t\t\t\t\tthis.parsePattern(before)\r\n\t\t\t\t}\r\n\t\t\t\tthis.startContext({\r\n\t\t\t\t\toneOfSet: true\r\n\t\t\t\t})\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase ']':\r\n\t\t\t\tif (!this.getContext().oneOfSet) {\r\n\t\t\t\t\tthrow new Error('\"]\" operator must be preceded by \"[\" operator')\r\n\t\t\t\t}\r\n\t\t\t\tthis.endContext()\r\n\t\t\t\tthis.getContext().instructions.push({\r\n\t\t\t\t\top: '[]',\r\n\t\t\t\t\targs: parseOneOfSet(before)\r\n\t\t\t\t})\r\n\t\t\t\tbreak\r\n\r\n\t\t\t/* istanbul ignore next */\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Unknown operator: ${operator}`)\r\n\t\t}\r\n\r\n\t\tif (rightPart) {\r\n\t\t\tthis.parsePattern(rightPart)\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction parseOneOfSet(pattern) {\r\n\tconst values = []\r\n\tlet i = 0\r\n\twhile (i < pattern.length) {\r\n\t\tif (pattern[i] === '-') {\r\n\t\t\tif (i === 0 || i === pattern.length - 1) {\r\n\t\t\t\tthrow new Error(`Couldn't parse a one-of set pattern: ${pattern}`)\r\n\t\t\t}\r\n\t\t\tconst prevValue = pattern[i - 1].charCodeAt(0) + 1\r\n\t\t\tconst nextValue = pattern[i + 1].charCodeAt(0) - 1\r\n\t\t\tlet value = prevValue\r\n\t\t\twhile (value <= nextValue) {\r\n\t\t\t\tvalues.push(String.fromCharCode(value))\r\n\t\t\t\tvalue++\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvalues.push(pattern[i])\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\treturn values\r\n}","import {\r\n\tDIGIT_PLACEHOLDER,\r\n\tcountOccurences,\r\n\trepeat,\r\n\tcutAndStripNonPairedParens,\r\n\tcloseNonPairedParens,\r\n\tstripNonPairedParens,\r\n\tpopulateTemplateWithDigits\r\n} from './AsYouTypeFormatter.util'\r\n\r\nimport formatCompleteNumber, {\r\n\tcanFormatCompleteNumber\r\n} from './AsYouTypeFormatter.complete'\r\n\r\nimport PatternMatcher from './AsYouTypeFormatter.PatternMatcher'\r\n\r\nimport parseDigits from './helpers/parseDigits'\r\nexport { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.util'\r\nimport { FIRST_GROUP_PATTERN } from './helpers/formatNationalNumberUsingFormat'\r\nimport { VALID_PUNCTUATION } from './constants'\r\nimport applyInternationalSeparatorStyle from './helpers/applyInternationalSeparatorStyle'\r\n\r\n// Used in phone number format template creation.\r\n// Could be any digit, I guess.\r\nconst DUMMY_DIGIT = '9'\r\n// I don't know why is it exactly `15`\r\nconst LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15\r\n// Create a phone number consisting only of the digit 9 that matches the\r\n// `number_pattern` by applying the pattern to the \"longest phone number\" string.\r\nconst LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH)\r\n\r\n// A set of characters that, if found in a national prefix formatting rules, are an indicator to\r\n// us that we should separate the national prefix from the number when formatting.\r\nconst NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/\r\n\r\n// Deprecated: Google has removed some formatting pattern related code from their repo.\r\n// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c\r\n// \"We no longer have numbers in formatting matching patterns, only \\d.\"\r\n// Because this library supports generating custom metadata\r\n// some users may still be using old metadata so the relevant\r\n// code seems to stay until some next major version update.\r\nconst SUPPORT_LEGACY_FORMATTING_PATTERNS = true\r\n\r\n// A pattern that is used to match character classes in regular expressions.\r\n// An example of a character class is \"[1-4]\".\r\nconst CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && (() => /\\[([^\\[\\]])*\\]/g)\r\n\r\n// Any digit in a regular expression that actually denotes a digit. For\r\n// example, in the regular expression \"80[0-2]\\d{6,10}\", the first 2 digits\r\n// (8 and 0) are standalone digits, but the rest are not.\r\n// Two look-aheads are needed because the number following \\\\d could be a\r\n// two-digit number, since the phone number can be as long as 15 digits.\r\nconst CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && (() => /\\d(?=[^,}][^,}])/g)\r\n\r\n// A regular expression that is used to determine if a `format` is\r\n// suitable to be used in the \"as you type formatter\".\r\n// A `format` is suitable when the resulting formatted number has\r\n// the same digits as the user has entered.\r\n//\r\n// In the simplest case, that would mean that the format\r\n// doesn't add any additional digits when formatting a number.\r\n// Google says that it also shouldn't add \"star\" (`*`) characters,\r\n// like it does in some Israeli formats.\r\n// Such basic format would only contain \"valid punctuation\"\r\n// and \"captured group\" identifiers ($1, $2, etc).\r\n//\r\n// An example of a format that adds additional digits:\r\n//\r\n// Country: `AR` (Argentina).\r\n// Format:\r\n// {\r\n// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\r\n// \"leading_digits_patterns\": [\"91\"],\r\n// \"national_prefix_formatting_rule\": \"0$1\",\r\n// \"format\": \"$2 15-$3-$4\",\r\n// \"international_format\": \"$1 $2 $3-$4\"\r\n// }\r\n//\r\n// In the format above, the `format` adds `15` to the digits when formatting a number.\r\n// A sidenote: this format actually is suitable because `national_prefix_for_parsing`\r\n// has previously removed `15` from a national number, so re-adding `15` in `format`\r\n// doesn't actually result in any extra digits added to user's input.\r\n// But verifying that would be a complex procedure, so the code chooses a simpler path:\r\n// it simply filters out all `format`s that contain anything but \"captured group\" ids.\r\n//\r\n// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's\r\n// `libphonenumber` code.\r\n//\r\nconst NON_ALTERING_FORMAT_REG_EXP = new RegExp(\r\n\t'^' +\r\n\t'[' + VALID_PUNCTUATION + ']*' +\r\n\t'(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)+' +\r\n\t'$'\r\n)\r\n\r\n// This is the minimum length of the leading digits of a phone number\r\n// to guarantee the first \"leading digits pattern\" for a phone number format\r\n// to be preemptive.\r\nconst MIN_LEADING_DIGITS_LENGTH = 3\r\n\r\nexport default class AsYouTypeFormatter {\r\n\tconstructor({\r\n\t\tstate,\r\n\t\tmetadata\r\n\t}) {\r\n\t\tthis.metadata = metadata\r\n\t\tthis.resetFormat()\r\n\t}\r\n\r\n\tresetFormat() {\r\n\t\tthis.chosenFormat = undefined\r\n\t\tthis.template = undefined\r\n\t\tthis.nationalNumberTemplate = undefined\r\n\t\tthis.populatedNationalNumberTemplate = undefined\r\n\t\tthis.populatedNationalNumberTemplatePosition = -1\r\n\t}\r\n\r\n\treset(numberingPlan, state) {\r\n\t\tthis.resetFormat()\r\n\t\tif (numberingPlan) {\r\n\t\t\tthis.isNANP = numberingPlan.callingCode() === '1'\r\n\t\t\tthis.matchingFormats = numberingPlan.formats()\r\n\t\t\tif (state.nationalSignificantNumber) {\r\n\t\t\t\tthis.narrowDownMatchingFormats(state)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.isNANP = undefined\r\n\t\t\tthis.matchingFormats = []\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Formats an updated phone number.\r\n\t * @param {string} nextDigits — Additional phone number digits.\r\n\t * @param {object} state — `AsYouType` state.\r\n\t * @return {[string]} Returns undefined if the updated phone number can't be formatted using any of the available formats.\r\n\t */\r\n\tformat(nextDigits, state) {\r\n\t\t// See if the phone number digits can be formatted as a complete phone number.\r\n\t\t// If not, use the results from `formatNationalNumberWithNextDigits()`,\r\n\t\t// which formats based on the chosen formatting pattern.\r\n\t\t//\r\n\t\t// Attempting to format complete phone number first is how it's done\r\n\t\t// in Google's `libphonenumber`, so this library just follows it.\r\n\t\t// Google's `libphonenumber` code doesn't explain in detail why does it\r\n\t\t// attempt to format digits as a complete phone number\r\n\t\t// instead of just going with a previoulsy (or newly) chosen `format`:\r\n\t\t//\r\n\t\t// \"Checks to see if there is an exact pattern match for these digits.\r\n\t\t// If so, we should use this instead of any other formatting template\r\n\t\t// whose leadingDigitsPattern also matches the input.\"\r\n\t\t//\r\n\t\tif (canFormatCompleteNumber(state.nationalSignificantNumber, this.metadata)) {\r\n\t\t\tfor (const format of this.matchingFormats) {\r\n\t\t\t\tconst formattedCompleteNumber = formatCompleteNumber(\r\n\t\t\t\t\tstate,\r\n\t\t\t\t\tformat,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmetadata: this.metadata,\r\n\t\t\t\t\t\tshouldTryNationalPrefixFormattingRule: format => this.shouldTryNationalPrefixFormattingRule(format, {\r\n\t\t\t\t\t\t\tinternational: state.international,\r\n\t\t\t\t\t\t\tnationalPrefix: state.nationalPrefix\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tgetSeparatorAfterNationalPrefix: this.getSeparatorAfterNationalPrefix\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n\t\t\t\tif (formattedCompleteNumber) {\r\n\t\t\t\t\tthis.resetFormat()\r\n\t\t\t\t\tthis.chosenFormat = format\r\n\t\t\t\t\tthis.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, DIGIT_PLACEHOLDER), state)\r\n\t\t\t\t\tthis.populatedNationalNumberTemplate = formattedCompleteNumber\r\n\t\t\t\t\t// With a new formatting template, the matched position\r\n\t\t\t\t\t// using the old template needs to be reset.\r\n\t\t\t\t\tthis.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(DIGIT_PLACEHOLDER)\r\n\t\t\t\t\treturn formattedCompleteNumber\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Format the digits as a partial (incomplete) phone number\r\n\t\t// using the previously chosen formatting pattern (or a newly chosen one).\r\n\t\treturn this.formatNationalNumberWithNextDigits(nextDigits, state)\r\n\t}\r\n\r\n\t// Formats the next phone number digits.\r\n\tformatNationalNumberWithNextDigits(nextDigits, state) {\r\n\t\tconst previouslyChosenFormat = this.chosenFormat\r\n\t\t// Choose a format from the list of matching ones.\r\n\t\tconst newlyChosenFormat = this.chooseFormat(state)\r\n\t\tif (newlyChosenFormat) {\r\n\t\t\tif (newlyChosenFormat === previouslyChosenFormat) {\r\n\t\t\t\t// If it can format the next (current) digits\r\n\t\t\t\t// using the previously chosen phone number format\r\n\t\t\t\t// then return the updated formatted number.\r\n\t\t\t\treturn this.formatNextNationalNumberDigits(nextDigits)\r\n\t\t\t} else {\r\n\t\t\t\t// If a more appropriate phone number format\r\n\t\t\t\t// has been chosen for these \"leading digits\",\r\n\t\t\t\t// then re-format the national phone number part\r\n\t\t\t\t// using the newly selected format.\r\n\t\t\t\treturn this.formatNextNationalNumberDigits(state.getNationalDigits())\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tnarrowDownMatchingFormats({\r\n\t\tnationalSignificantNumber,\r\n\t\tnationalPrefix,\r\n\t\tinternational\r\n\t}) {\r\n\t\tconst leadingDigits = nationalSignificantNumber\r\n\r\n\t\t// \"leading digits\" pattern list starts with a\r\n\t\t// \"leading digits\" pattern fitting a maximum of 3 leading digits.\r\n\t\t// So, after a user inputs 3 digits of a national (significant) phone number\r\n\t\t// this national (significant) number can already be formatted.\r\n\t\t// The next \"leading digits\" pattern is for 4 leading digits max,\r\n\t\t// and the \"leading digits\" pattern after it is for 5 leading digits max, etc.\r\n\r\n\t\t// This implementation is different from Google's\r\n\t\t// in that it searches for a fitting format\r\n\t\t// even if the user has entered less than\r\n\t\t// `MIN_LEADING_DIGITS_LENGTH` digits of a national number.\r\n\t\t// Because some leading digit patterns already match for a single first digit.\r\n\t\tlet leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH\r\n\t\tif (leadingDigitsPatternIndex < 0) {\r\n\t\t\tleadingDigitsPatternIndex = 0\r\n\t\t}\r\n\r\n\t\tthis.matchingFormats = this.matchingFormats.filter(\r\n\t\t\tformat => this.formatSuits(format, international, nationalPrefix)\r\n\t\t\t\t&& this.formatMatches(format, leadingDigits, leadingDigitsPatternIndex)\r\n\t\t)\r\n\r\n\t\t// If there was a phone number format chosen\r\n\t\t// and it no longer holds given the new leading digits then reset it.\r\n\t\t// The test for this `if` condition is marked as:\r\n\t\t// \"Reset a chosen format when it no longer holds given the new leading digits\".\r\n\t\t// To construct a valid test case for this one can find a country\r\n\t\t// in `PhoneNumberMetadata.xml` yielding one format for 3 ``\r\n\t\t// and yielding another format for 4 `` (Australia in this case).\r\n\t\tif (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) {\r\n\t\t\tthis.resetFormat()\r\n\t\t}\r\n\t}\r\n\r\n\tformatSuits(format, international, nationalPrefix) {\r\n\t\t// When a prefix before a national (significant) number is\r\n\t\t// simply a national prefix, then it's parsed as `this.nationalPrefix`.\r\n\t\t// In more complex cases, a prefix before national (significant) number\r\n\t\t// could include a national prefix as well as some \"capturing groups\",\r\n\t\t// and in that case there's no info whether a national prefix has been parsed.\r\n\t\t// If national prefix is not used when formatting a phone number\r\n\t\t// using this format, but a national prefix has been entered by the user,\r\n\t\t// and was extracted, then discard such phone number format.\r\n\t\t// In Google's \"AsYouType\" formatter code, the equivalent would be this part:\r\n\t\t// https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184\r\n\t\tif (nationalPrefix &&\r\n\t\t\t!format.usesNationalPrefix() &&\r\n\t\t\t// !format.domesticCarrierCodeFormattingRule() &&\r\n\t\t\t!format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\t// If national prefix is mandatory for this phone number format\r\n\t\t// and there're no guarantees that a national prefix is present in user input\r\n\t\t// then discard this phone number format as not suitable.\r\n\t\t// In Google's \"AsYouType\" formatter code, the equivalent would be this part:\r\n\t\t// https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193\r\n\t\tif (!international &&\r\n\t\t\t!nationalPrefix &&\r\n\t\t\tformat.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\treturn true\r\n\t}\r\n\r\n\tformatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\r\n\t\tconst leadingDigitsPatternsCount = format.leadingDigitsPatterns().length\r\n\r\n\t\t// If this format is not restricted to a certain\r\n\t\t// leading digits pattern then it fits.\r\n\t\tif (leadingDigitsPatternsCount === 0) {\r\n\t\t\treturn true\r\n\t\t}\r\n\r\n\t\t// Start narrowing down the list of possible formats based on the leading digits.\r\n\t\t// (only previously matched formats take part in the narrowing down process)\r\n\r\n\t\t// `leading_digits_patterns` start with 3 digits min\r\n\t\t// and then go up from there one digit at a time.\r\n\t\tleadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1)\r\n\t\tconst leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex]\r\n\r\n\t\t// Google imposes a requirement on the leading digits\r\n\t\t// to be minimum 3 digits long in order to be eligible\r\n\t\t// for checking those with a leading digits pattern.\r\n\t\t//\r\n\t\t// Since `leading_digits_patterns` start with 3 digits min,\r\n\t\t// Google's original `libphonenumber` library only starts\r\n\t\t// excluding any non-matching formats only when the\r\n\t\t// national number entered so far is at least 3 digits long,\r\n\t\t// otherwise format matching would give false negatives.\r\n\t\t//\r\n\t\t// For example, when the digits entered so far are `2`\r\n\t\t// and the leading digits pattern is `21` –\r\n\t\t// it's quite obvious in this case that the format could be the one\r\n\t\t// but due to the absence of further digits it would give false negative.\r\n\t\t//\r\n\t\t// Also, `leading_digits_patterns` doesn't always correspond to a single\r\n\t\t// digits count. For example, `60|8` pattern would already match `8`\r\n\t\t// but the `60` part would require having at least two leading digits,\r\n\t\t// so the whole pattern would require inputting two digits first in order to\r\n\t\t// decide on whether it matches the input, even when the input is \"80\".\r\n\t\t//\r\n\t\t// This library — `libphonenumber-js` — allows filtering by `leading_digits_patterns`\r\n\t\t// even when there's only 1 or 2 digits of the national (significant) number.\r\n\t\t// To do that, it uses a non-strict pattern matcher written specifically for that.\r\n\t\t//\r\n\t\tif (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) {\r\n\t\t\t// Before leading digits < 3 matching was implemented:\r\n\t\t\t// return true\r\n\t\t\t//\r\n\t\t\t// After leading digits < 3 matching was implemented:\r\n\t\t\ttry {\r\n\t\t\t\treturn new PatternMatcher(leadingDigitsPattern).match(leadingDigits, { allowOverflow: true }) !== undefined\r\n\t\t\t} catch (error) /* istanbul ignore next */ {\r\n\t\t\t\t// There's a slight possibility that there could be some undiscovered bug\r\n\t\t\t\t// in the pattern matcher code. Since the \"leading digits < 3 matching\"\r\n\t\t\t\t// feature is not \"essential\" for operation, it can fall back to the old way\r\n\t\t\t\t// in case of any issues rather than halting the application's execution.\r\n\t\t\t\tconsole.error(error)\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are\r\n\t\t// available then use the usual regular expression matching.\r\n\t\t//\r\n\t\t// The whole pattern is wrapped in round brackets (`()`) because\r\n\t\t// the pattern can use \"or\" operator (`|`) at the top level of the pattern.\r\n\t\t//\r\n\t\treturn new RegExp(`^(${leadingDigitsPattern})`).test(leadingDigits)\r\n\t}\r\n\r\n\tgetFormatFormat(format, international) {\r\n\t\treturn international ? format.internationalFormat() : format.format()\r\n\t}\r\n\r\n\tchooseFormat(state) {\r\n\t\t// When there are multiple available formats, the formatter uses the first\r\n\t\t// format where a formatting template could be created.\r\n\t\tfor (const format of this.matchingFormats.slice()) {\r\n\t\t\t// If this format is currently being used\r\n\t\t\t// and is still suitable, then stick to it.\r\n\t\t\tif (this.chosenFormat === format) {\r\n\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t\t// Sometimes, a formatting rule inserts additional digits in a phone number,\r\n\t\t\t// and \"as you type\" formatter can't do that: it should only use the digits\r\n\t\t\t// that the user has input.\r\n\t\t\t//\r\n\t\t\t// For example, in Argentina, there's a format for mobile phone numbers:\r\n\t\t\t//\r\n\t\t\t// {\r\n\t\t\t// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\r\n\t\t\t// \"leading_digits_patterns\": [\"91\"],\r\n\t\t\t// \"national_prefix_formatting_rule\": \"0$1\",\r\n\t\t\t// \"format\": \"$2 15-$3-$4\",\r\n\t\t\t// \"international_format\": \"$1 $2 $3-$4\"\r\n\t\t\t// }\r\n\t\t\t//\r\n\t\t\t// In that format, `international_format` is used instead of `format`\r\n\t\t\t// because `format` inserts `15` in the formatted number,\r\n\t\t\t// and `AsYouType` formatter should only use the digits\r\n\t\t\t// the user has actually input, without adding any extra digits.\r\n\t\t\t// In this case, it wouldn't make a difference, because the `15`\r\n\t\t\t// is first stripped when applying `national_prefix_for_parsing`\r\n\t\t\t// and then re-added when using `format`, so in reality it doesn't\r\n\t\t\t// add any new digits to the number, but to detect that, the code\r\n\t\t\t// would have to be more complex: it would have to try formatting\r\n\t\t\t// the digits using the format and then see if any digits have\r\n\t\t\t// actually been added or removed, and then, every time a new digit\r\n\t\t\t// is input, it should re-check whether the chosen format doesn't\r\n\t\t\t// alter the digits.\r\n\t\t\t//\r\n\t\t\t// Google's code doesn't go that far, and so does this library:\r\n\t\t\t// it simply requires that a `format` doesn't add any additonal\r\n\t\t\t// digits to user's input.\r\n\t\t\t//\r\n\t\t\t// Also, people in general should move from inputting phone numbers\r\n\t\t\t// in national format (possibly with national prefixes)\r\n\t\t\t// and use international phone number format instead:\r\n\t\t\t// it's a logical thing in the modern age of mobile phones,\r\n\t\t\t// globalization and the internet.\r\n\t\t\t//\r\n\t\t\t/* istanbul ignore if */\r\n\t\t\tif (!NON_ALTERING_FORMAT_REG_EXP.test(this.getFormatFormat(format, state.international))) {\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t\tif (!this.createTemplateForFormat(format, state)) {\r\n\t\t\t\t// Remove the format if it can't generate a template.\r\n\t\t\t\tthis.matchingFormats = this.matchingFormats.filter(_ => _ !== format)\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t\tthis.chosenFormat = format\r\n\t\t\tbreak\r\n\t\t}\r\n\t\tif (!this.chosenFormat) {\r\n\t\t\t// No format matches the national (significant) phone number.\r\n\t\t\tthis.resetFormat()\r\n\t\t}\r\n\t\treturn this.chosenFormat\r\n\t}\r\n\r\n\tcreateTemplateForFormat(format, state) {\r\n\t\t// The formatter doesn't format numbers when numberPattern contains '|', e.g.\r\n\t\t// (20|3)\\d{4}. In those cases we quickly return.\r\n\t\t// (Though there's no such format in current metadata)\r\n\t\t/* istanbul ignore if */\r\n\t\tif (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// Get formatting template for this phone number format\r\n\t\tconst template = this.getTemplateForFormat(format, state)\r\n\t\t// If the national number entered is too long\r\n\t\t// for any phone number format, then abort.\r\n\t\tif (template) {\r\n\t\t\tthis.setNationalNumberTemplate(template, state)\r\n\t\t\treturn true\r\n\t\t}\r\n\t}\r\n\r\n\tgetSeparatorAfterNationalPrefix = (format) => {\r\n\t\t// `US` metadata doesn't have a `national_prefix_formatting_rule`,\r\n\t\t// so the `if` condition below doesn't apply to `US`,\r\n\t\t// but in reality there shoudl be a separator\r\n\t\t// between a national prefix and a national (significant) number.\r\n\t\t// So `US` national prefix separator is a \"special\" \"hardcoded\" case.\r\n\t\tif (this.isNANP) {\r\n\t\t\treturn ' '\r\n\t\t}\r\n\t\t// If a `format` has a `national_prefix_formatting_rule`\r\n\t\t// and that rule has a separator after a national prefix,\r\n\t\t// then it means that there should be a separator\r\n\t\t// between a national prefix and a national (significant) number.\r\n\t\tif (format &&\r\n\t\t\tformat.nationalPrefixFormattingRule() &&\r\n\t\t\tNATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\r\n\t\t\treturn ' '\r\n\t\t}\r\n\t\t// At this point, there seems to be no clear evidence that\r\n\t\t// there should be a separator between a national prefix\r\n\t\t// and a national (significant) number. So don't insert one.\r\n\t\treturn ''\r\n\t}\r\n\r\n\tgetInternationalPrefixBeforeCountryCallingCode({ IDDPrefix, missingPlus }, options) {\r\n\t\tif (IDDPrefix) {\r\n\t\t\treturn options && options.spacing === false ? IDDPrefix : IDDPrefix + ' '\r\n\t\t}\r\n\t\tif (missingPlus) {\r\n\t\t\treturn ''\r\n\t\t}\r\n\t\treturn '+'\r\n\t}\r\n\r\n\tgetTemplate(state) {\r\n\t\tif (!this.template) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// `this.template` holds the template for a \"complete\" phone number.\r\n\t\t// The currently entered phone number is most likely not \"complete\",\r\n\t\t// so trim all non-populated digits.\r\n\t\tlet index = -1\r\n\t\tlet i = 0\r\n\t\tconst internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, { spacing: false }) : ''\r\n\t\twhile (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\r\n\t\t\tindex = this.template.indexOf(DIGIT_PLACEHOLDER, index + 1)\r\n\t\t\ti++\r\n\t\t}\r\n\t\treturn cutAndStripNonPairedParens(this.template, index + 1)\r\n\t}\r\n\r\n\tsetNationalNumberTemplate(template, state) {\r\n\t\tthis.nationalNumberTemplate = template\r\n\t\tthis.populatedNationalNumberTemplate = template\r\n\t\t// With a new formatting template, the matched position\r\n\t\t// using the old template needs to be reset.\r\n\t\tthis.populatedNationalNumberTemplatePosition = -1\r\n\t\t// For convenience, the public `.template` property\r\n\t\t// contains the whole international number\r\n\t\t// if the phone number being input is international:\r\n\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\r\n\t\t// a spacebar and then the template for the formatted national number.\r\n\t\tif (state.international) {\r\n\t\t\tthis.template =\r\n\t\t\t\tthis.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER) +\r\n\t\t\t\trepeat(DIGIT_PLACEHOLDER, state.callingCode.length) +\r\n\t\t\t\t' ' +\r\n\t\t\t\ttemplate\r\n\t\t} else {\r\n\t\t\tthis.template = template\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Generates formatting template for a national phone number,\r\n\t * optionally containing a national prefix, for a format.\r\n\t * @param {Format} format\r\n\t * @param {string} nationalPrefix\r\n\t * @return {string}\r\n\t */\r\n\tgetTemplateForFormat(format, {\r\n\t\tnationalSignificantNumber,\r\n\t\tinternational,\r\n\t\tnationalPrefix,\r\n\t\tcomplexPrefixBeforeNationalSignificantNumber\r\n\t}) {\r\n\t\tlet pattern = format.pattern()\r\n\r\n\t\t/* istanbul ignore else */\r\n\t\tif (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\r\n\t\t\tpattern = pattern\r\n\t\t\t\t// Replace anything in the form of [..] with \\d\r\n\t\t\t\t.replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d')\r\n\t\t\t\t// Replace any standalone digit (not the one in `{}`) with \\d\r\n\t\t\t\t.replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d')\r\n\t\t}\r\n\r\n\t\t// Generate a dummy national number (consisting of `9`s)\r\n\t\t// that fits this format's `pattern`.\r\n\t\t//\r\n\t\t// This match will always succeed,\r\n\t\t// because the \"longest dummy phone number\"\r\n\t\t// has enough length to accomodate any possible\r\n\t\t// national phone number format pattern.\r\n\t\t//\r\n\t\tlet digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0]\r\n\r\n\t\t// If the national number entered is too long\r\n\t\t// for any phone number format, then abort.\r\n\t\tif (nationalSignificantNumber.length > digits.length) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Get a formatting template which can be used to efficiently format\r\n\t\t// a partial number where digits are added one by one.\r\n\r\n\t\t// Below `strictPattern` is used for the\r\n\t\t// regular expression (with `^` and `$`).\r\n\t\t// This wasn't originally in Google's `libphonenumber`\r\n\t\t// and I guess they don't really need it\r\n\t\t// because they're not using \"templates\" to format phone numbers\r\n\t\t// but I added `strictPattern` after encountering\r\n\t\t// South Korean phone number formatting bug.\r\n\t\t//\r\n\t\t// Non-strict regular expression bug demonstration:\r\n\t\t//\r\n\t\t// this.nationalSignificantNumber : `111111111` (9 digits)\r\n\t\t//\r\n\t\t// pattern : (\\d{2})(\\d{3,4})(\\d{4})\r\n\t\t// format : `$1 $2 $3`\r\n\t\t// digits : `9999999999` (10 digits)\r\n\t\t//\r\n\t\t// '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \"99 9999 9999\"\r\n\t\t//\r\n\t\t// template : xx xxxx xxxx\r\n\t\t//\r\n\t\t// But the correct template in this case is `xx xxx xxxx`.\r\n\t\t// The template was generated incorrectly because of the\r\n\t\t// `{3,4}` variability in the `pattern`.\r\n\t\t//\r\n\t\t// The fix is, if `this.nationalSignificantNumber` has already sufficient length\r\n\t\t// to satisfy the `pattern` completely then `this.nationalSignificantNumber`\r\n\t\t// is used instead of `digits`.\r\n\r\n\t\tconst strictPattern = new RegExp('^' + pattern + '$')\r\n\t\tconst nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT)\r\n\r\n\t\t// If `this.nationalSignificantNumber` has already sufficient length\r\n\t\t// to satisfy the `pattern` completely then use it\r\n\t\t// instead of `digits`.\r\n\t\tif (strictPattern.test(nationalNumberDummyDigits)) {\r\n\t\t\tdigits = nationalNumberDummyDigits\r\n\t\t}\r\n\r\n\t\tlet numberFormat = this.getFormatFormat(format, international)\r\n\t\tlet nationalPrefixIncludedInTemplate\r\n\r\n\t\t// If a user did input a national prefix (and that's guaranteed),\r\n\t\t// and if a `format` does have a national prefix formatting rule,\r\n\t\t// then see if that national prefix formatting rule\r\n\t\t// prepends exactly the same national prefix the user has input.\r\n\t\t// If that's the case, then use the `format` with the national prefix formatting rule.\r\n\t\t// Otherwise, use the `format` without the national prefix formatting rule,\r\n\t\t// and prepend a national prefix manually to it.\r\n\t\tif (this.shouldTryNationalPrefixFormattingRule(format, { international, nationalPrefix })) {\r\n\t\t\tconst numberFormatWithNationalPrefix = numberFormat.replace(\r\n\t\t\t\tFIRST_GROUP_PATTERN,\r\n\t\t\t\tformat.nationalPrefixFormattingRule()\r\n\t\t\t)\r\n\t\t\t// If `national_prefix_formatting_rule` of a `format` simply prepends\r\n\t\t\t// national prefix at the start of a national (significant) number,\r\n\t\t\t// then such formatting can be used with `AsYouType` formatter.\r\n\t\t\t// There seems to be no `else` case: everywhere in metadata,\r\n\t\t\t// national prefix formatting rule is national prefix + $1,\r\n\t\t\t// or `($1)`, in which case such format isn't even considered\r\n\t\t\t// when the user has input a national prefix.\r\n\t\t\t/* istanbul ignore else */\r\n\t\t\tif (parseDigits(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + parseDigits('$1')) {\r\n\t\t\t\tnumberFormat = numberFormatWithNationalPrefix\r\n\t\t\t\tnationalPrefixIncludedInTemplate = true\r\n\t\t\t\t// Replace all digits of the national prefix in the formatting template\r\n\t\t\t\t// with `DIGIT_PLACEHOLDER`s.\r\n\t\t\t\tif (nationalPrefix) {\r\n\t\t\t\t\tlet i = nationalPrefix.length\r\n\t\t\t\t\twhile (i > 0) {\r\n\t\t\t\t\t\tnumberFormat = numberFormat.replace(/\\d/, DIGIT_PLACEHOLDER)\r\n\t\t\t\t\t\ti--\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Generate formatting template for this phone number format.\r\n\t\tlet template = digits\r\n\t\t\t// Format the dummy phone number according to the format.\r\n\t\t\t.replace(new RegExp(pattern), numberFormat)\r\n\t\t\t// Replace each dummy digit with a DIGIT_PLACEHOLDER.\r\n\t\t\t.replace(new RegExp(DUMMY_DIGIT, 'g'), DIGIT_PLACEHOLDER)\r\n\r\n\t\t// If a prefix of a national (significant) number is not as simple\r\n\t\t// as just a basic national prefix, then just prepend such prefix\r\n\t\t// before the national (significant) number, optionally spacing\r\n\t\t// the two with a whitespace.\r\n\t\tif (!nationalPrefixIncludedInTemplate) {\r\n\t\t\tif (complexPrefixBeforeNationalSignificantNumber) {\r\n\t\t\t\t// Prepend the prefix to the template manually.\r\n\t\t\t\ttemplate = repeat(DIGIT_PLACEHOLDER, complexPrefixBeforeNationalSignificantNumber.length) +\r\n\t\t\t\t\t' ' +\r\n\t\t\t\t\ttemplate\r\n\t\t\t} else if (nationalPrefix) {\r\n\t\t\t\t// Prepend national prefix to the template manually.\r\n\t\t\t\ttemplate = repeat(DIGIT_PLACEHOLDER, nationalPrefix.length) +\r\n\t\t\t\t\tthis.getSeparatorAfterNationalPrefix(format) +\r\n\t\t\t\t\ttemplate\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (international) {\r\n\t\t\ttemplate = applyInternationalSeparatorStyle(template)\r\n\t\t}\r\n\r\n\t\treturn template\r\n\t}\r\n\r\n\tformatNextNationalNumberDigits(digits) {\r\n\t\tconst result = populateTemplateWithDigits(\r\n\t\t\tthis.populatedNationalNumberTemplate,\r\n\t\t\tthis.populatedNationalNumberTemplatePosition,\r\n\t\t\tdigits\r\n\t\t)\r\n\r\n\t\tif (!result) {\r\n\t\t\t// Reset the format.\r\n\t\t\tthis.resetFormat()\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tthis.populatedNationalNumberTemplate = result[0]\r\n\t\tthis.populatedNationalNumberTemplatePosition = result[1]\r\n\r\n\t\t// Return the formatted phone number so far.\r\n\t\treturn cutAndStripNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\r\n\r\n\t\t// The old way which was good for `input-format` but is not so good\r\n\t\t// for `react-phone-number-input`'s default input (`InputBasic`).\r\n\t\t// return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\r\n\t\t// \t.replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ')\r\n\t}\r\n\r\n\tshouldTryNationalPrefixFormattingRule = (format, { international, nationalPrefix }) => {\r\n\t\tif (format.nationalPrefixFormattingRule()) {\r\n\t\t\t// In some countries, `national_prefix_formatting_rule` is `($1)`,\r\n\t\t\t// so it applies even if the user hasn't input a national prefix.\r\n\t\t\t// `format.usesNationalPrefix()` detects such cases.\r\n\t\t\tconst usesNationalPrefix = format.usesNationalPrefix()\r\n\t\t\tif ((usesNationalPrefix && nationalPrefix) ||\r\n\t\t\t\t(!usesNationalPrefix && !international)) {\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import extractCountryCallingCode from './helpers/extractCountryCallingCode'\r\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign'\r\nimport extractNationalNumberFromPossiblyIncompleteNumber from './helpers/extractNationalNumberFromPossiblyIncompleteNumber'\r\nimport stripIddPrefix from './helpers/stripIddPrefix'\r\nimport parseDigits from './helpers/parseDigits'\r\n\r\nimport {\r\n\tVALID_DIGITS,\r\n\tVALID_PUNCTUATION,\r\n\tPLUS_CHARS\r\n} from './constants'\r\n\r\nconst VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART =\r\n\t'[' +\r\n\t\tVALID_PUNCTUATION +\r\n\t\tVALID_DIGITS +\r\n\t']+'\r\n\r\nconst VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN = new RegExp('^' + VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART + '$', 'i')\r\n\r\nconst VALID_FORMATTED_PHONE_NUMBER_PART =\r\n\t'(?:' +\r\n\t\t'[' + PLUS_CHARS + ']' +\r\n\t\t'[' +\r\n\t\t\tVALID_PUNCTUATION +\r\n\t\t\tVALID_DIGITS +\r\n\t\t']*' +\r\n\t\t'|' +\r\n\t\t'[' +\r\n\t\t\tVALID_PUNCTUATION +\r\n\t\t\tVALID_DIGITS +\r\n\t\t']+' +\r\n\t')'\r\n\r\nconst AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp(\r\n\t'[^' +\r\n\t\tVALID_PUNCTUATION +\r\n\t\tVALID_DIGITS +\r\n\t']+' +\r\n\t'.*' +\r\n\t'$'\r\n)\r\n\r\n// Tests whether `national_prefix_for_parsing` could match\r\n// different national prefixes.\r\n// Matches anything that's not a digit or a square bracket.\r\nconst COMPLEX_NATIONAL_PREFIX = /[^\\d\\[\\]]/\r\n\r\nexport default class AsYouTypeParser {\r\n\tconstructor({\r\n\t\tdefaultCountry,\r\n\t\tdefaultCallingCode,\r\n\t\tmetadata,\r\n\t\tonNationalSignificantNumberChange\r\n\t}) {\r\n\t\tthis.defaultCountry = defaultCountry\r\n\t\tthis.defaultCallingCode = defaultCallingCode\r\n\t\tthis.metadata = metadata\r\n\t\tthis.onNationalSignificantNumberChange = onNationalSignificantNumberChange\r\n\t}\r\n\r\n\tinput(text, state) {\r\n\t\tconst [formattedDigits, hasPlus] = extractFormattedDigitsAndPlus(text)\r\n\t\tconst digits = parseDigits(formattedDigits)\r\n\t\t// Checks for a special case: just a leading `+` has been entered.\r\n\t\tlet justLeadingPlus\r\n\t\tif (hasPlus) {\r\n\t\t\tif (!state.digits) {\r\n\t\t\t\tstate.startInternationalNumber()\r\n\t\t\t\tif (!digits) {\r\n\t\t\t\t\tjustLeadingPlus = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (digits) {\r\n\t\t\tthis.inputDigits(digits, state)\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tdigits,\r\n\t\t\tjustLeadingPlus\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inputs \"next\" phone number digits.\r\n\t * @param {string} digits\r\n\t * @return {string} [formattedNumber] Formatted national phone number (if it can be formatted at this stage). Returning `undefined` means \"don't format the national phone number at this stage\".\r\n\t */\r\n\tinputDigits(nextDigits, state) {\r\n\t\tconst { digits } = state\r\n\t\tconst hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3\r\n\r\n\t\t// Append phone number digits.\r\n\t\tstate.appendDigits(nextDigits)\r\n\r\n\t\t// Attempt to extract IDD prefix:\r\n\t\t// Some users input their phone number in international format,\r\n\t\t// but in an \"out-of-country\" dialing format instead of using the leading `+`.\r\n\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/185\r\n\t\t// Detect such numbers as soon as there're at least 3 digits.\r\n\t\t// Google's library attempts to extract IDD prefix at 3 digits,\r\n\t\t// so this library just copies that behavior.\r\n\t\t// I guess that's because the most commot IDD prefixes are\r\n\t\t// `00` (Europe) and `011` (US).\r\n\t\t// There exist really long IDD prefixes too:\r\n\t\t// for example, in Australia the default IDD prefix is `0011`,\r\n\t\t// and it could even be as long as `14880011`.\r\n\t\t// An IDD prefix is extracted here, and then every time when\r\n\t\t// there's a new digit and the number couldn't be formatted.\r\n\t\tif (hasReceivedThreeLeadingDigits) {\r\n\t\t\tthis.extractIddPrefix(state)\r\n\t\t}\r\n\r\n\t\tif (this.isWaitingForCountryCallingCode(state)) {\r\n\t\t\tif (!this.extractCountryCallingCode(state)) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tstate.appendNationalSignificantNumberDigits(nextDigits)\r\n\t\t}\r\n\r\n\t\t// If a phone number is being input in international format,\r\n\t\t// then it's not valid for it to have a national prefix.\r\n\t\t// Still, some people incorrectly input such numbers with a national prefix.\r\n\t\t// In such cases, only attempt to strip a national prefix if the number becomes too long.\r\n\t\t// (but that is done later, not here)\r\n\t\tif (!state.international) {\r\n\t\t\tif (!this.hasExtractedNationalSignificantNumber) {\r\n\t\t\t\tthis.extractNationalSignificantNumber(state.getNationalDigits(), state.update)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisWaitingForCountryCallingCode({ international, callingCode }) {\r\n\t\treturn international && !callingCode\r\n\t}\r\n\r\n\t// Extracts a country calling code from a number\r\n\t// being entered in internatonal format.\r\n\textractCountryCallingCode(state) {\r\n\t\tconst { countryCallingCode, number } = extractCountryCallingCode(\r\n\t\t\t'+' + state.getDigitsWithoutInternationalPrefix(),\r\n\t\t\tthis.defaultCountry,\r\n\t\t\tthis.defaultCallingCode,\r\n\t\t\tthis.metadata.metadata\r\n\t\t)\r\n\t\tif (countryCallingCode) {\r\n\t\t\tstate.setCallingCode(countryCallingCode)\r\n\t\t\tstate.update({\r\n\t\t\t\tnationalSignificantNumber: number\r\n\t\t\t})\r\n\t\t\treturn true\r\n\t\t}\r\n\t}\r\n\r\n\treset(numberingPlan) {\r\n\t\tif (numberingPlan) {\r\n\t\t\tthis.hasSelectedNumberingPlan = true\r\n\t\t\tconst nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing()\r\n\t\t\tthis.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing)\r\n\t\t} else {\r\n\t\t\tthis.hasSelectedNumberingPlan = undefined\r\n\t\t\tthis.couldPossiblyExtractAnotherNationalSignificantNumber = undefined\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Extracts a national (significant) number from user input.\r\n\t * Google's library is different in that it only applies `national_prefix_for_parsing`\r\n\t * and doesn't apply `national_prefix_transform_rule` after that.\r\n\t * https://github.com/google/libphonenumber/blob/a3d70b0487875475e6ad659af404943211d26456/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L539\r\n\t * @return {boolean} [extracted]\r\n\t */\r\n\textractNationalSignificantNumber(nationalDigits, setState) {\r\n\t\tif (!this.hasSelectedNumberingPlan) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tconst {\r\n\t\t\tnationalPrefix,\r\n\t\t\tnationalNumber,\r\n\t\t\tcarrierCode\r\n\t\t} = extractNationalNumberFromPossiblyIncompleteNumber(\r\n\t\t\tnationalDigits,\r\n\t\t\tthis.metadata\r\n\t\t)\r\n\t\tif (nationalNumber === nationalDigits) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tthis.onExtractedNationalNumber(\r\n\t\t\tnationalPrefix,\r\n\t\t\tcarrierCode,\r\n\t\t\tnationalNumber,\r\n\t\t\tnationalDigits,\r\n\t\t\tsetState\r\n\t\t)\r\n\t\treturn true\r\n\t}\r\n\r\n\t/**\r\n\t * In Google's code this function is called \"attempt to extract longer NDD\".\r\n\t * \"Some national prefixes are a substring of others\", they say.\r\n\t * @return {boolean} [result] — Returns `true` if extracting a national prefix produced different results from what they were.\r\n\t */\r\n\textractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {\r\n\t\tif (!this.hasExtractedNationalSignificantNumber) {\r\n\t\t\treturn this.extractNationalSignificantNumber(nationalDigits, setState)\r\n\t\t}\r\n\t\tif (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tconst {\r\n\t\t\tnationalPrefix,\r\n\t\t\tnationalNumber,\r\n\t\t\tcarrierCode\r\n\t\t} = extractNationalNumberFromPossiblyIncompleteNumber(\r\n\t\t\tnationalDigits,\r\n\t\t\tthis.metadata\r\n\t\t)\r\n\t\t// If a national prefix has been extracted previously,\r\n\t\t// then it's always extracted as additional digits are added.\r\n\t\t// That's assuming `extractNationalNumberFromPossiblyIncompleteNumber()`\r\n\t\t// doesn't do anything different from what it currently does.\r\n\t\t// So, just in case, here's this check, though it doesn't occur.\r\n\t\t/* istanbul ignore if */\r\n\t\tif (nationalNumber === prevNationalSignificantNumber) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tthis.onExtractedNationalNumber(\r\n\t\t\tnationalPrefix,\r\n\t\t\tcarrierCode,\r\n\t\t\tnationalNumber,\r\n\t\t\tnationalDigits,\r\n\t\t\tsetState\r\n\t\t)\r\n\t\treturn true\r\n\t}\r\n\r\n\tonExtractedNationalNumber(\r\n\t\tnationalPrefix,\r\n\t\tcarrierCode,\r\n\t\tnationalSignificantNumber,\r\n\t\tnationalDigits,\r\n\t\tsetState\r\n\t) {\r\n\t\tlet complexPrefixBeforeNationalSignificantNumber\r\n\t\tlet nationalSignificantNumberMatchesInput\r\n\t\t// This check also works with empty `this.nationalSignificantNumber`.\r\n\t\tconst nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber)\r\n\t\t// If the extracted national (significant) number is the\r\n\t\t// last substring of the `digits`, then it means that it hasn't been altered:\r\n\t\t// no digits have been removed from the national (significant) number\r\n\t\t// while applying `national_prefix_transform_rule`.\r\n\t\t// https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\r\n\t\tif (nationalSignificantNumberIndex >= 0 &&\r\n\t\t\tnationalSignificantNumberIndex === nationalDigits.length - nationalSignificantNumber.length) {\r\n\t\t\tnationalSignificantNumberMatchesInput = true\r\n\t\t\t// If a prefix of a national (significant) number is not as simple\r\n\t\t\t// as just a basic national prefix, then such prefix is stored in\r\n\t\t\t// `this.complexPrefixBeforeNationalSignificantNumber` property and will be\r\n\t\t\t// prepended \"as is\" to the national (significant) number to produce\r\n\t\t\t// a formatted result.\r\n\t\t\tconst prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex)\r\n\t\t\t// `prefixBeforeNationalNumber` is always non-empty,\r\n\t\t\t// because `onExtractedNationalNumber()` isn't called\r\n\t\t\t// when a national (significant) number hasn't been actually \"extracted\":\r\n\t\t\t// when a national (significant) number is equal to the national part of `digits`,\r\n\t\t\t// then `onExtractedNationalNumber()` doesn't get called.\r\n\t\t\tif (prefixBeforeNationalNumber !== nationalPrefix) {\r\n\t\t\t\tcomplexPrefixBeforeNationalSignificantNumber = prefixBeforeNationalNumber\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetState({\r\n\t\t\tnationalPrefix,\r\n\t\t\tcarrierCode,\r\n\t\t\tnationalSignificantNumber,\r\n\t\t\tnationalSignificantNumberMatchesInput,\r\n\t\t\tcomplexPrefixBeforeNationalSignificantNumber\r\n\t\t})\r\n\t\t// `onExtractedNationalNumber()` is only called when\r\n\t\t// the national (significant) number actually did change.\r\n\t\tthis.hasExtractedNationalSignificantNumber = true\r\n\t\tthis.onNationalSignificantNumberChange()\r\n\t}\r\n\r\n\treExtractNationalSignificantNumber(state) {\r\n\t\t// Attempt to extract a national prefix.\r\n\t\t//\r\n\t\t// Some people incorrectly input national prefix\r\n\t\t// in an international phone number.\r\n\t\t// For example, some people write British phone numbers as `+44(0)...`.\r\n\t\t//\r\n\t\t// Also, in some rare cases, it is valid for a national prefix\r\n\t\t// to be a part of an international phone number.\r\n\t\t// For example, mobile phone numbers in Mexico are supposed to be\r\n\t\t// dialled internationally using a `1` national prefix,\r\n\t\t// so the national prefix will be part of an international number.\r\n\t\t//\r\n\t\t// Quote from:\r\n\t\t// https://www.mexperience.com/dialing-cell-phones-in-mexico/\r\n\t\t//\r\n\t\t// \"Dialing a Mexican cell phone from abroad\r\n\t\t// When you are calling a cell phone number in Mexico from outside Mexico,\r\n\t\t// it’s necessary to dial an additional “1” after Mexico’s country code\r\n\t\t// (which is “52”) and before the area code.\r\n\t\t// You also ignore the 045, and simply dial the area code and the\r\n\t\t// cell phone’s number.\r\n\t\t//\r\n\t\t// If you don’t add the “1”, you’ll receive a recorded announcement\r\n\t\t// asking you to redial using it.\r\n\t\t//\r\n\t\t// For example, if you are calling from the USA to a cell phone\r\n\t\t// in Mexico City, you would dial +52 – 1 – 55 – 1234 5678.\r\n\t\t// (Note that this is different to calling a land line in Mexico City\r\n\t\t// from abroad, where the number dialed would be +52 – 55 – 1234 5678)\".\r\n\t\t//\r\n\t\t// Google's demo output:\r\n\t\t// https://libphonenumber.appspot.com/phonenumberparser?number=%2b5215512345678&country=MX\r\n\t\t//\r\n\t\tif (this.extractAnotherNationalSignificantNumber(\r\n\t\t\tstate.getNationalDigits(),\r\n\t\t\tstate.nationalSignificantNumber,\r\n\t\t\tstate.update\r\n\t\t)) {\r\n\t\t\treturn true\r\n\t\t}\r\n\t\t// If no format matches the phone number, then it could be\r\n\t\t// \"a really long IDD\" (quote from a comment in Google's library).\r\n\t\t// An IDD prefix is first extracted when the user has entered at least 3 digits,\r\n\t\t// and then here — every time when there's a new digit and the number\r\n\t\t// couldn't be formatted.\r\n\t\t// For example, in Australia the default IDD prefix is `0011`,\r\n\t\t// and it could even be as long as `14880011`.\r\n\t\t//\r\n\t\t// Could also check `!hasReceivedThreeLeadingDigits` here\r\n\t\t// to filter out the case when this check duplicates the one\r\n\t\t// already performed when there're 3 leading digits,\r\n\t\t// but it's not a big deal, and in most cases there\r\n\t\t// will be a suitable `format` when there're 3 leading digits.\r\n\t\t//\r\n\t\tif (this.extractIddPrefix(state)) {\r\n\t\t\tthis.extractCallingCodeAndNationalSignificantNumber(state)\r\n\t\t\treturn true\r\n\t\t}\r\n\t\t// Google's AsYouType formatter supports sort of an \"autocorrection\" feature\r\n\t\t// when it \"autocorrects\" numbers that have been input for a country\r\n\t\t// with that country's calling code.\r\n\t\t// Such \"autocorrection\" feature looks weird, but different people have been requesting it:\r\n\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/376\r\n\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/375\r\n\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/316\r\n\t\tif (this.fixMissingPlus(state)) {\r\n\t\t\tthis.extractCallingCodeAndNationalSignificantNumber(state)\r\n\t\t\treturn true\r\n\t\t}\r\n\t}\r\n\r\n\textractIddPrefix(state) {\r\n\t\t// An IDD prefix can't be present in a number written with a `+`.\r\n\t\t// Also, don't re-extract an IDD prefix if has already been extracted.\r\n\t\tconst {\r\n\t\t\tinternational,\r\n\t\t\tIDDPrefix,\r\n\t\t\tdigits,\r\n\t\t\tnationalSignificantNumber\r\n\t\t} = state\r\n\t\tif (international || IDDPrefix) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// Some users input their phone number in \"out-of-country\"\r\n\t\t// dialing format instead of using the leading `+`.\r\n\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/185\r\n\t\t// Detect such numbers.\r\n\t\tconst numberWithoutIDD = stripIddPrefix(\r\n\t\t\tdigits,\r\n\t\t\tthis.defaultCountry,\r\n\t\t\tthis.defaultCallingCode,\r\n\t\t\tthis.metadata.metadata\r\n\t\t)\r\n\t\tif (numberWithoutIDD !== undefined && numberWithoutIDD !== digits) {\r\n\t\t\t// If an IDD prefix was stripped then convert the IDD-prefixed number\r\n\t\t\t// to international number for subsequent parsing.\r\n\t\t\tstate.update({\r\n\t\t\t\tIDDPrefix: digits.slice(0, digits.length - numberWithoutIDD.length)\r\n\t\t\t})\r\n\t\t\tthis.startInternationalNumber(state)\r\n\t\t\treturn true\r\n\t\t}\r\n\t}\r\n\r\n\tfixMissingPlus(state) {\r\n\t\tif (!state.international) {\r\n\t\t\tconst {\r\n\t\t\t\tcountryCallingCode: newCallingCode,\r\n\t\t\t\tnumber\r\n\t\t\t} = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(\r\n\t\t\t\tstate.digits,\r\n\t\t\t\tthis.defaultCountry,\r\n\t\t\t\tthis.defaultCallingCode,\r\n\t\t\t\tthis.metadata.metadata\r\n\t\t\t)\r\n\t\t\tif (newCallingCode) {\r\n\t\t\t\tstate.update({\r\n\t\t\t\t\tmissingPlus: true\r\n\t\t\t\t})\r\n\t\t\t\tthis.startInternationalNumber(state)\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tstartInternationalNumber(state) {\r\n\t\tstate.startInternationalNumber()\r\n\t\t// If a national (significant) number has been extracted before, reset it.\r\n\t\tif (state.nationalSignificantNumber) {\r\n\t\t\tstate.resetNationalSignificantNumber()\r\n\t\t\tthis.onNationalSignificantNumberChange()\r\n\t\t\tthis.hasExtractedNationalSignificantNumber = undefined\r\n\t\t}\r\n\t}\r\n\r\n\textractCallingCodeAndNationalSignificantNumber(state) {\r\n\t\tif (this.extractCountryCallingCode(state)) {\r\n\t\t\t// `this.extractCallingCode()` is currently called when the number\r\n\t\t\t// couldn't be formatted during the standard procedure.\r\n\t\t\t// Normally, the national prefix would be re-extracted\r\n\t\t\t// for an international number if such number couldn't be formatted,\r\n\t\t\t// but since it's already not able to be formatted,\r\n\t\t\t// there won't be yet another retry, so also extract national prefix here.\r\n\t\t\tthis.extractNationalSignificantNumber(state.getNationalDigits(), state.update)\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Extracts formatted phone number from text (if there's any).\r\n * @param {string} text\r\n * @return {string} [formattedPhoneNumber]\r\n */\r\nfunction extractFormattedPhoneNumber(text) {\r\n\t// Attempt to extract a possible number from the string passed in.\r\n\tconst startsAt = text.search(VALID_FORMATTED_PHONE_NUMBER_PART)\r\n\tif (startsAt < 0) {\r\n\t\treturn\r\n\t}\r\n\t// Trim everything to the left of the phone number.\r\n\ttext = text.slice(startsAt)\r\n\t// Trim the `+`.\r\n\tlet hasPlus\r\n\tif (text[0] === '+') {\r\n\t\thasPlus = true\r\n\t\ttext = text.slice('+'.length)\r\n\t}\r\n\t// Trim everything to the right of the phone number.\r\n\ttext = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, '')\r\n\t// Re-add the previously trimmed `+`.\r\n\tif (hasPlus) {\r\n\t\ttext = '+' + text\r\n\t}\r\n\treturn text\r\n}\r\n\r\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\r\nfunction _extractFormattedDigitsAndPlus(text) {\r\n\t// Extract a formatted phone number part from text.\r\n\tconst extractedNumber = extractFormattedPhoneNumber(text) || ''\r\n\t// Trim a `+`.\r\n\tif (extractedNumber[0] === '+') {\r\n\t\treturn [extractedNumber.slice('+'.length), true]\r\n\t}\r\n\treturn [extractedNumber]\r\n}\r\n\r\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\r\nexport function extractFormattedDigitsAndPlus(text) {\r\n\tlet [formattedDigits, hasPlus] = _extractFormattedDigitsAndPlus(text)\r\n\t// If the extracted phone number part\r\n\t// can possibly be a part of some valid phone number\r\n\t// then parse phone number characters from a formatted phone number.\r\n\tif (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {\r\n\t\tformattedDigits = ''\r\n\t}\r\n\treturn [formattedDigits, hasPlus]\r\n}","import Metadata from './metadata'\r\nimport PhoneNumber from './PhoneNumber'\r\nimport AsYouTypeState from './AsYouTypeState'\r\nimport AsYouTypeFormatter, { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter'\r\nimport AsYouTypeParser, { extractFormattedDigitsAndPlus } from './AsYouTypeParser'\r\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode'\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\nexport default class AsYouType {\r\n\t/**\r\n\t * @param {(string|object)?} [optionsOrDefaultCountry] - The default country used for parsing non-international phone numbers. Can also be an `options` object.\r\n\t * @param {Object} metadata\r\n\t */\r\n\tconstructor(optionsOrDefaultCountry, metadata) {\r\n\t\tthis.metadata = new Metadata(metadata)\r\n\t\tconst [defaultCountry, defaultCallingCode] = this.getCountryAndCallingCode(optionsOrDefaultCountry)\r\n\t\tthis.defaultCountry = defaultCountry\r\n\t\tthis.defaultCallingCode = defaultCallingCode\r\n\t\tthis.reset()\r\n\t}\r\n\r\n\tgetCountryAndCallingCode(optionsOrDefaultCountry) {\r\n\t\t// Set `defaultCountry` and `defaultCallingCode` options.\r\n\t\tlet defaultCountry\r\n\t\tlet defaultCallingCode\r\n\t\t// Turns out `null` also has type \"object\". Weird.\r\n\t\tif (optionsOrDefaultCountry) {\r\n\t\t\tif (typeof optionsOrDefaultCountry === 'object') {\r\n\t\t\t\tdefaultCountry = optionsOrDefaultCountry.defaultCountry\r\n\t\t\t\tdefaultCallingCode = optionsOrDefaultCountry.defaultCallingCode\r\n\t\t\t} else {\r\n\t\t\t\tdefaultCountry = optionsOrDefaultCountry\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {\r\n\t\t\tdefaultCountry = undefined\r\n\t\t}\r\n\t\tif (defaultCallingCode) {\r\n\t\t\t/* istanbul ignore if */\r\n\t\t\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\t\t\tif (this.metadata.isNonGeographicCallingCode(defaultCallingCode)) {\r\n\t\t\t\t\tdefaultCountry = '001'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn [defaultCountry, defaultCallingCode]\r\n\t}\r\n\r\n\t/**\r\n\t * Inputs \"next\" phone number characters.\r\n\t * @param {string} text\r\n\t * @return {string} Formatted phone number characters that have been input so far.\r\n\t */\r\n\tinput(text) {\r\n\t\tconst {\r\n\t\t\tdigits,\r\n\t\t\tjustLeadingPlus\r\n\t\t} = this.parser.input(text, this.state)\r\n\t\tif (justLeadingPlus) {\r\n\t\t\tthis.formattedOutput = '+'\r\n\t\t} else if (digits) {\r\n\t\t\tthis.determineTheCountryIfNeeded()\r\n\t\t\t// Match the available formats by the currently available leading digits.\r\n\t\t\tif (this.state.nationalSignificantNumber) {\r\n\t\t\t\tthis.formatter.narrowDownMatchingFormats(this.state)\r\n\t\t\t}\r\n\t\t\tlet formattedNationalNumber\r\n\t\t\tif (this.metadata.hasSelectedNumberingPlan()) {\r\n\t\t\t\tformattedNationalNumber = this.formatter.format(digits, this.state)\r\n\t\t\t}\r\n\t\t\tif (formattedNationalNumber === undefined) {\r\n\t\t\t\t// See if another national (significant) number could be re-extracted.\r\n\t\t\t\tif (this.parser.reExtractNationalSignificantNumber(this.state)) {\r\n\t\t\t\t\tthis.determineTheCountryIfNeeded()\r\n\t\t\t\t\t// If it could, then re-try formatting the new national (significant) number.\r\n\t\t\t\t\tconst nationalDigits = this.state.getNationalDigits()\r\n\t\t\t\t\tif (nationalDigits) {\r\n\t\t\t\t\t\tformattedNationalNumber = this.formatter.format(nationalDigits, this.state)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.formattedOutput = formattedNationalNumber\r\n\t\t\t\t? this.getFullNumber(formattedNationalNumber)\r\n\t\t\t\t: this.getNonFormattedNumber()\r\n\t\t}\r\n\t\treturn this.formattedOutput\r\n\t}\r\n\r\n\treset() {\r\n\t\tthis.state = new AsYouTypeState({\r\n\t\t\tonCountryChange: (country) => {\r\n\t\t\t\t// Before version `1.6.0`, the official `AsYouType` formatter API\r\n\t\t\t\t// included the `.country` property of an `AsYouType` instance.\r\n\t\t\t\t// Since that property (along with the others) have been moved to\r\n\t\t\t\t// `this.state`, `this.country` property is emulated for compatibility\r\n\t\t\t\t// with the old versions.\r\n\t\t\t\tthis.country = country\r\n\t\t\t},\r\n\t\t\tonCallingCodeChange: (country, callingCode) => {\r\n\t\t\t\tthis.metadata.selectNumberingPlan(country, callingCode)\r\n\t\t\t\tthis.formatter.reset(this.metadata.numberingPlan, this.state)\r\n\t\t\t\tthis.parser.reset(this.metadata.numberingPlan)\r\n\t\t\t}\r\n\t\t})\r\n\t\tthis.formatter = new AsYouTypeFormatter({\r\n\t\t\tstate: this.state,\r\n\t\t\tmetadata: this.metadata\r\n\t\t})\r\n\t\tthis.parser = new AsYouTypeParser({\r\n\t\t\tdefaultCountry: this.defaultCountry,\r\n\t\t\tdefaultCallingCode: this.defaultCallingCode,\r\n\t\t\tmetadata: this.metadata,\r\n\t\t\tstate: this.state,\r\n\t\t\tonNationalSignificantNumberChange: () => {\r\n\t\t\t\tthis.determineTheCountryIfNeeded()\r\n\t\t\t\tthis.formatter.reset(this.metadata.numberingPlan, this.state)\r\n\t\t\t}\r\n\t\t})\r\n\t\tthis.state.reset(this.defaultCountry, this.defaultCallingCode)\r\n\t\tthis.formattedOutput = ''\r\n\t\treturn this\r\n\t}\r\n\r\n\t/**\r\n\t * Returns `true` if the phone number is being input in international format.\r\n\t * In other words, returns `true` if and only if the parsed phone number starts with a `\"+\"`.\r\n\t * @return {boolean}\r\n\t */\r\n\tisInternational() {\r\n\t\treturn this.state.international\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the \"calling code\" part of the phone number when it's being input\r\n\t * in an international format.\r\n\t * If no valid calling code has been entered so far, returns `undefined`.\r\n\t * @return {string} [callingCode]\r\n\t */\r\n\tgetCallingCode() {\r\n\t\t // If the number is being input in national format and some \"default calling code\"\r\n\t\t // has been passed to `AsYouType` constructor, then `this.state.callingCode`\r\n\t\t // is equal to that \"default calling code\".\r\n\t\t //\r\n\t\t // If the number is being input in national format and no \"default calling code\"\r\n\t\t // has been passed to `AsYouType` constructor, then returns `undefined`,\r\n\t\t // even if a \"default country\" has been passed to `AsYouType` constructor.\r\n\t\t //\r\n\t\tif (this.isInternational()) {\r\n\t\t\treturn this.state.callingCode\r\n\t\t}\r\n\t}\r\n\r\n\t// A legacy alias.\r\n\tgetCountryCallingCode() {\r\n\t\treturn this.getCallingCode()\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a two-letter country code of the phone number.\r\n\t * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n\t * Returns `undefined` if no phone number has been input yet.\r\n\t * @return {string} [country]\r\n\t */\r\n\tgetCountry() {\r\n\t\tconst { digits } = this.state\r\n\t\t// Return `undefined` if no digits have been input yet.\r\n\t\tif (digits) {\r\n\t\t\treturn this._getCountry()\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a two-letter country code of the phone number.\r\n\t * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n\t * @return {string} [country]\r\n\t */\r\n\t_getCountry() {\r\n\t\tconst { country } = this.state\r\n\t\t/* istanbul ignore if */\r\n\t\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\t\t// `AsYouType.getCountry()` returns `undefined`\r\n\t\t\t// for \"non-geographic\" phone numbering plans.\r\n\t\t\tif (country === '001') {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn country\r\n\t}\r\n\r\n\tdetermineTheCountryIfNeeded() {\r\n\t\t// Suppose a user enters a phone number in international format,\r\n\t\t// and there're several countries corresponding to that country calling code,\r\n\t\t// and a country has been derived from the number, and then\r\n\t\t// a user enters one more digit and the number is no longer\r\n\t\t// valid for the derived country, so the country should be re-derived\r\n\t\t// on every new digit in those cases.\r\n\t\t//\r\n\t\t// If the phone number is being input in national format,\r\n\t\t// then it could be a case when `defaultCountry` wasn't specified\r\n\t\t// when creating `AsYouType` instance, and just `defaultCallingCode` was specified,\r\n\t\t// and that \"calling code\" could correspond to a \"non-geographic entity\",\r\n\t\t// or there could be several countries corresponding to that country calling code.\r\n\t\t// In those cases, `this.country` is `undefined` and should be derived\r\n\t\t// from the number. Again, if country calling code is ambiguous, then\r\n\t\t// `this.country` should be re-derived with each new digit.\r\n\t\t//\r\n\t\tif (!this.state.country || this.isCountryCallingCodeAmbiguous()) {\r\n\t\t\tthis.determineTheCountry()\r\n\t\t}\r\n\t}\r\n\r\n\t// Prepends `+CountryCode ` in case of an international phone number\r\n\tgetFullNumber(formattedNationalNumber) {\r\n\t\tif (this.isInternational()) {\r\n\t\t\tconst prefix = (text) => this.formatter.getInternationalPrefixBeforeCountryCallingCode(this.state, {\r\n\t\t\t\tspacing: text ? true : false\r\n\t\t\t}) + text\r\n\t\t\tconst { callingCode } = this.state\r\n\t\t\tif (!callingCode) {\r\n\t\t\t\treturn prefix(`${this.state.getDigitsWithoutInternationalPrefix()}`)\r\n\t\t\t}\r\n\t\t\tif (!formattedNationalNumber) {\r\n\t\t\t\treturn prefix(callingCode)\r\n\t\t\t}\r\n\t\t\treturn prefix(`${callingCode} ${formattedNationalNumber}`)\r\n\t\t}\r\n\t\treturn formattedNationalNumber\r\n\t}\r\n\r\n\tgetNonFormattedNationalNumberWithPrefix() {\r\n\t\tconst {\r\n\t\t\tnationalSignificantNumber,\r\n\t\t\tcomplexPrefixBeforeNationalSignificantNumber,\r\n\t\t\tnationalPrefix\r\n\t\t} = this.state\r\n\t\tlet number = nationalSignificantNumber\r\n\t\tconst prefix = complexPrefixBeforeNationalSignificantNumber || nationalPrefix\r\n\t\tif (prefix) {\r\n\t\t\tnumber = prefix + number\r\n\t\t}\r\n\t\treturn number\r\n\t}\r\n\r\n\tgetNonFormattedNumber() {\r\n\t\tconst { nationalSignificantNumberMatchesInput } = this.state\r\n\t\treturn this.getFullNumber(\r\n\t\t\tnationalSignificantNumberMatchesInput\r\n\t\t\t\t? this.getNonFormattedNationalNumberWithPrefix()\r\n\t\t\t\t: this.state.getNationalDigits()\r\n\t\t)\r\n\t}\r\n\r\n\tgetNonFormattedTemplate() {\r\n\t\tconst number = this.getNonFormattedNumber()\r\n\t\tif (number) {\r\n\t\t\treturn number.replace(/[\\+\\d]/g, DIGIT_PLACEHOLDER)\r\n\t\t}\r\n\t}\r\n\r\n\tisCountryCallingCodeAmbiguous() {\r\n\t\tconst { callingCode } = this.state\r\n\t\tconst countryCodes = this.metadata.getCountryCodesForCallingCode(callingCode)\r\n\t\treturn countryCodes && countryCodes.length > 1\r\n\t}\r\n\r\n\t// Determines the country of the phone number\r\n\t// entered so far based on the country phone code\r\n\t// and the national phone number.\r\n\tdetermineTheCountry() {\r\n\t\tthis.state.setCountry(getCountryByCallingCode(\r\n\t\t\tthis.isInternational() ? this.state.callingCode : this.defaultCallingCode,\r\n\t\t\tthis.state.nationalSignificantNumber,\r\n\t\t\tthis.metadata\r\n\t\t))\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a E.164 phone number value for the user's input.\r\n\t *\r\n\t * For example, for country `\"US\"` and input `\"(222) 333-4444\"`\r\n\t * it will return `\"+12223334444\"`.\r\n\t *\r\n\t * For international phone number input, it will also auto-correct\r\n\t * some minor errors such as using a national prefix when writing\r\n\t * an international phone number. For example, if the user inputs\r\n\t * `\"+44 0 7400 000000\"` then it will return an auto-corrected\r\n\t * `\"+447400000000\"` phone number value.\r\n\t *\r\n\t * Will return `undefined` if no digits have been input,\r\n\t * or when inputting a phone number in national format and no\r\n\t * default country or default \"country calling code\" have been set.\r\n\t *\r\n\t * @return {string} [value]\r\n\t */\r\n\tgetNumberValue() {\r\n\t\tconst {\r\n\t\t\tdigits,\r\n\t\t\tcallingCode,\r\n\t\t\tcountry,\r\n\t\t\tnationalSignificantNumber\r\n\t\t} = this.state\r\n\r\n\t \t// Will return `undefined` if no digits have been input.\r\n\t\tif (!digits) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (this.isInternational()) {\r\n\t\t\tif (callingCode) {\r\n\t\t\t\treturn '+' + callingCode + nationalSignificantNumber\r\n\t\t\t} else {\r\n\t\t\t\treturn '+' + digits\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (country || callingCode) {\r\n\t\t\t\tconst callingCode_ = country ? this.metadata.countryCallingCode() : callingCode\r\n\t\t\t\treturn '+' + callingCode_ + nationalSignificantNumber\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an instance of `PhoneNumber` class.\r\n\t * Will return `undefined` if no national (significant) number\r\n\t * digits have been entered so far, or if no `defaultCountry` has been\r\n\t * set and the user enters a phone number not in international format.\r\n\t */\r\n\tgetNumber() {\r\n\t\tconst {\r\n\t\t\tnationalSignificantNumber,\r\n\t\t\tcarrierCode,\r\n\t\t\tcallingCode\r\n\t\t} = this.state\r\n\r\n\t\t// `this._getCountry()` is basically same as `this.state.country`\r\n\t\t// with the only change that it return `undefined` in case of a\r\n\t\t// \"non-geographic\" numbering plan instead of `\"001\"` \"internal use\" value.\r\n\t\tconst country = this._getCountry()\r\n\r\n\t\tif (!nationalSignificantNumber) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (!country && !callingCode) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tconst phoneNumber = new PhoneNumber(\r\n\t\t\tcountry || callingCode,\r\n\t\t\tnationalSignificantNumber,\r\n\t\t\tthis.metadata.metadata\r\n\t\t)\r\n\t\tif (carrierCode) {\r\n\t\t\tphoneNumber.carrierCode = carrierCode\r\n\t\t}\r\n\t\t// Phone number extensions are not supported by \"As You Type\" formatter.\r\n\t\treturn phoneNumber\r\n\t}\r\n\r\n\t/**\r\n\t * Returns `true` if the phone number is \"possible\".\r\n\t * Is just a shortcut for `PhoneNumber.isPossible()`.\r\n\t * @return {boolean}\r\n\t */\r\n\tisPossible() {\r\n\t\tconst phoneNumber = this.getNumber()\r\n\t\tif (!phoneNumber) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\treturn phoneNumber.isPossible()\r\n\t}\r\n\r\n\t/**\r\n\t * Returns `true` if the phone number is \"valid\".\r\n\t * Is just a shortcut for `PhoneNumber.isValid()`.\r\n\t * @return {boolean}\r\n\t */\r\n\tisValid() {\r\n\t\tconst phoneNumber = this.getNumber()\r\n\t\tif (!phoneNumber) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\treturn phoneNumber.isValid()\r\n\t}\r\n\r\n\t/**\r\n\t * @deprecated\r\n\t * This method is used in `react-phone-number-input/source/input-control.js`\r\n\t * in versions before `3.0.16`.\r\n\t */\r\n\tgetNationalNumber() {\r\n\t\treturn this.state.nationalSignificantNumber\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the phone number characters entered by the user.\r\n\t * @return {string}\r\n\t */\r\n\tgetChars() {\r\n\t\treturn (this.state.international ? '+' : '') + this.state.digits\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the template for the formatted phone number.\r\n\t * @return {string}\r\n\t */\r\n\tgetTemplate() {\r\n\t\treturn this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || ''\r\n\t}\r\n}","import { getCountryCallingCode } from 'libphonenumber-js/core'\r\n\r\nexport function getInputValuePrefix({\r\n\tcountry,\r\n\tinternational,\r\n\twithCountryCallingCode,\r\n\tmetadata\r\n}) {\r\n\treturn country && international && !withCountryCallingCode ?\r\n\t\t`+${getCountryCallingCode(country, metadata)}` :\r\n\t\t''\r\n}\r\n\r\nexport function removeInputValuePrefix(value, prefix) {\r\n\tif (prefix) {\r\n\t\tvalue = value.slice(prefix.length)\r\n\t\tif (value[0] === ' ') {\r\n\t\t\tvalue = value.slice(1)\r\n\t\t}\r\n\t}\r\n\treturn value\r\n}","import React, { useCallback } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Input from 'input-format/react'\r\nimport { AsYouType, parsePhoneNumberCharacter } from 'libphonenumber-js/core'\r\n\r\nimport { getInputValuePrefix, removeInputValuePrefix } from './helpers/inputValuePrefix'\r\n\r\nexport function createInput(defaultMetadata)\r\n{\r\n\t/**\r\n\t * `InputSmart` is a \"smarter\" implementation of a `Component`\r\n\t * that can be passed to ``. It parses and formats\r\n\t * the user's and maintains the caret's position in the process.\r\n\t * The caret positioning is maintained using `input-format` library.\r\n\t * Relies on being run in a DOM environment for calling caret positioning functions.\r\n\t */\r\n\tfunction InputSmart({\r\n\t\tcountry,\r\n\t\tinternational,\r\n\t\twithCountryCallingCode,\r\n\t\tmetadata,\r\n\t\t...rest\r\n\t}, ref) {\r\n\t\tconst format = useCallback((value) => {\r\n\t\t\t// \"As you type\" formatter.\r\n\t\t\tconst formatter = new AsYouType(country, metadata)\r\n\t\t\tconst prefix = getInputValuePrefix({\r\n\t\t\t\tcountry,\r\n\t\t\t\tinternational,\r\n\t\t\t\twithCountryCallingCode,\r\n\t\t\t\tmetadata\r\n\t\t\t})\r\n\t\t\t// Format the number.\r\n\t\t\tlet text = formatter.input(prefix + value)\r\n\t\t\tlet template = formatter.getTemplate()\r\n\t\t\tif (prefix) {\r\n\t\t\t\ttext = removeInputValuePrefix(text, prefix)\r\n\t\t\t\t// `AsYouType.getTemplate()` can be `undefined`.\r\n\t\t\t\tif (template) {\r\n\t\t\t\t\ttemplate = removeInputValuePrefix(template, prefix)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\ttext,\r\n\t\t\t\ttemplate\r\n\t\t\t}\r\n\t\t}, [country, metadata])\r\n\t\treturn (\r\n\t\t\t\r\n\t\t)\r\n\t}\r\n\r\n\tInputSmart = React.forwardRef(InputSmart)\r\n\r\n\tInputSmart.propTypes = {\r\n\t\t/**\r\n\t\t * The parsed phone number.\r\n\t\t * \"Parsed\" not in a sense of \"E.164\"\r\n\t\t * but rather in a sense of \"having only\r\n\t\t * digits and possibly a leading plus character\".\r\n\t\t * Examples: `\"\"`, `\"+\"`, `\"+123\"`, `\"123\"`.\r\n\t\t */\r\n\t\tvalue: PropTypes.string.isRequired,\r\n\r\n\t\t/**\r\n\t\t * A function of `value: string`.\r\n\t\t * Updates the `value` property.\r\n\t\t */\r\n\t\tonChange: PropTypes.func.isRequired,\r\n\r\n\t\t/**\r\n\t\t * A two-letter country code for formatting `value`\r\n\t\t * as a national phone number (e.g. `(800) 555 35 35`).\r\n\t\t * E.g. \"US\", \"RU\", etc.\r\n\t\t * If no `country` is passed then `value`\r\n\t\t * is formatted as an international phone number.\r\n\t\t * (e.g. `+7 800 555 35 35`)\r\n\t\t * Perhaps the `country` property should have been called `defaultCountry`\r\n\t\t * because if `value` is an international number then `country` is ignored.\r\n\t\t */\r\n\t\tcountry: PropTypes.string,\r\n\r\n\t\t/**\r\n\t\t * If `country` property is passed along with `international={true}` property\r\n\t\t * then the phone number will be input in \"international\" format for that `country`\r\n\t\t * (without \"country calling code\").\r\n\t\t * For example, if `country=\"US\"` property is passed to \"without country select\" input\r\n\t\t * then the phone number will be input in the \"national\" format for `US` (`(213) 373-4253`).\r\n\t\t * But if both `country=\"US\"` and `international={true}` properties are passed then\r\n\t\t * the phone number will be input in the \"international\" format for `US` (`213 373 4253`)\r\n\t\t * (without \"country calling code\" `+1`).\r\n\t\t */\r\n\t\tinternational: PropTypes.bool,\r\n\r\n\t\t/**\r\n\t\t * If `country` and `international` properties are set,\r\n\t\t * then by default it won't include \"country calling code\" in the input field.\r\n\t\t * To change that, pass `withCountryCallingCode` property,\r\n\t\t * and it will include \"country calling code\" in the input field.\r\n\t\t */\r\n\t\twithCountryCallingCode: PropTypes.bool,\r\n\r\n\t\t/**\r\n\t\t * `libphonenumber-js` metadata.\r\n\t\t */\r\n\t\tmetadata: PropTypes.object.isRequired\r\n\t}\r\n\r\n\tInputSmart.defaultProps = {\r\n\t\tmetadata: defaultMetadata\r\n\t}\r\n\r\n\treturn InputSmart\r\n}\r\n\r\nexport default createInput()","import React, { useCallback } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { parseIncompletePhoneNumber, formatIncompletePhoneNumber } from 'libphonenumber-js/core'\r\n\r\nimport { getInputValuePrefix, removeInputValuePrefix } from './helpers/inputValuePrefix'\r\n\r\nexport function createInput(defaultMetadata) {\r\n\t/**\r\n\t * `InputBasic` is the most basic implementation of a `Component`\r\n\t * that can be passed to ``. It parses and formats\r\n\t * the user's input but doesn't control the caret in the process:\r\n\t * when erasing or inserting digits in the middle of a phone number\r\n\t * the caret usually jumps to the end (this is the expected behavior).\r\n\t * Why does `InputBasic` exist when there's `InputSmart`?\r\n\t * One reason is working around the [Samsung Galaxy smart caret positioning bug]\r\n\t * (https://github.com/catamphetamine/react-phone-number-input/issues/75).\r\n\t * Another reason is that, unlike `InputSmart`, it doesn't require DOM environment.\r\n\t */\r\n\tfunction InputBasic({\r\n\t\tvalue,\r\n\t\tonChange,\r\n\t\tcountry,\r\n\t\tinternational,\r\n\t\twithCountryCallingCode,\r\n\t\tmetadata,\r\n\t\tinputComponent: Input,\r\n\t\t...rest\r\n\t}, ref) {\r\n\t\tconst prefix = getInputValuePrefix({\r\n\t\t\tcountry,\r\n\t\t\tinternational,\r\n\t\t\twithCountryCallingCode,\r\n\t\t\tmetadata\r\n\t\t})\r\n\r\n\t\tconst _onChange = useCallback((event) => {\r\n\t\t\tlet newValue = parseIncompletePhoneNumber(event.target.value)\r\n\t\t\t// By default, if a value is something like `\"(123)\"`\r\n\t\t\t// then Backspace would only erase the rightmost brace\r\n\t\t\t// becoming something like `\"(123\"`\r\n\t\t\t// which would give the same `\"123\"` value\r\n\t\t\t// which would then be formatted back to `\"(123)\"`\r\n\t\t\t// and so a user wouldn't be able to erase the phone number.\r\n\t\t\t// Working around this issue with this simple hack.\r\n\t\t\tif (newValue === value) {\r\n\t\t\t\tconst newValueFormatted = format(prefix, newValue, country, metadata)\r\n\t\t\t\tif (newValueFormatted.indexOf(event.target.value) === 0) {\r\n\t\t\t\t\t// Trim the last digit (or plus sign).\r\n\t\t\t\t\tnewValue = newValue.slice(0, -1)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tonChange(newValue)\r\n\t\t}, [\r\n\t\t\tprefix,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tcountry,\r\n\t\t\tmetadata\r\n\t\t])\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t)\r\n\t}\r\n\r\n\tInputBasic = React.forwardRef(InputBasic)\r\n\r\n\tInputBasic.propTypes = {\r\n\t\t/**\r\n\t\t * The parsed phone number.\r\n\t\t * \"Parsed\" not in a sense of \"E.164\"\r\n\t\t * but rather in a sense of \"having only\r\n\t\t * digits and possibly a leading plus character\".\r\n\t\t * Examples: `\"\"`, `\"+\"`, `\"+123\"`, `\"123\"`.\r\n\t\t */\r\n\t\tvalue: PropTypes.string.isRequired,\r\n\r\n\t\t/**\r\n\t\t * A function of `value: string`.\r\n\t\t * Updates the `value` property.\r\n\t\t */\r\n\t\tonChange: PropTypes.func.isRequired,\r\n\r\n\t\t/**\r\n\t\t * A two-letter country code for formatting `value`\r\n\t\t * as a national phone number (e.g. `(800) 555 35 35`).\r\n\t\t * E.g. \"US\", \"RU\", etc.\r\n\t\t * If no `country` is passed then `value`\r\n\t\t * is formatted as an international phone number.\r\n\t\t * (e.g. `+7 800 555 35 35`)\r\n\t\t * Perhaps the `country` property should have been called `defaultCountry`\r\n\t\t * because if `value` is an international number then `country` is ignored.\r\n\t\t */\r\n\t\tcountry : PropTypes.string,\r\n\r\n\t\t/**\r\n\t\t * If `country` property is passed along with `international={true}` property\r\n\t\t * then the phone number will be input in \"international\" format for that `country`\r\n\t\t * (without \"country calling code\").\r\n\t\t * For example, if `country=\"US\"` property is passed to \"without country select\" input\r\n\t\t * then the phone number will be input in the \"national\" format for `US` (`(213) 373-4253`).\r\n\t\t * But if both `country=\"US\"` and `international={true}` properties are passed then\r\n\t\t * the phone number will be input in the \"international\" format for `US` (`213 373 4253`)\r\n\t\t * (without \"country calling code\" `+1`).\r\n\t\t */\r\n\t\tinternational: PropTypes.bool,\r\n\r\n\t\t/**\r\n\t\t * If `country` and `international` properties are set,\r\n\t\t * then by default it won't include \"country calling code\" in the input field.\r\n\t\t * To change that, pass `withCountryCallingCode` property,\r\n\t\t * and it will include \"country calling code\" in the input field.\r\n\t\t */\r\n\t\twithCountryCallingCode: PropTypes.bool,\r\n\r\n\t\t/**\r\n\t\t * `libphonenumber-js` metadata.\r\n\t\t */\r\n\t\tmetadata: PropTypes.object.isRequired,\r\n\r\n\t\t/**\r\n\t\t * The `` component.\r\n\t\t */\r\n\t\tinputComponent: PropTypes.elementType.isRequired\r\n\t}\r\n\r\n\tInputBasic.defaultProps = {\r\n\t\tmetadata: defaultMetadata,\r\n\t\tinputComponent: 'input'\r\n\t}\r\n\r\n\treturn InputBasic\r\n}\r\n\r\nexport default createInput()\r\n\r\nfunction format(prefix, value, country, metadata) {\r\n\treturn removeInputValuePrefix(\r\n\t\tformatIncompletePhoneNumber(\r\n\t\t\tprefix + value,\r\n\t\t\tcountry,\r\n\t\t\tmetadata\r\n\t\t),\r\n\t\tprefix\r\n\t)\r\n}","import AsYouType from './AsYouType'\r\n\r\n/**\r\n * Formats a (possibly incomplete) phone number.\r\n * The phone number can be either in E.164 format\r\n * or in a form of national number digits.\r\n * @param {string} value - A possibly incomplete phone number. Either in E.164 format or in a form of national number digits.\r\n * @param {string?} country - Two-letter (\"ISO 3166-1 alpha-2\") country code.\r\n * @return {string} Formatted (possibly incomplete) phone number.\r\n */\r\nexport default function formatIncompletePhoneNumber(value, country, metadata) {\r\n\tif (!metadata) {\r\n\t\tmetadata = country\r\n\t\tcountry = undefined\r\n\t}\r\n\treturn new AsYouType(country, metadata).input(value)\r\n}","/**\r\n * Creates Unicode flag from a two-letter ISO country code.\r\n * https://stackoverflow.com/questions/24050671/how-to-put-japan-flag-character-in-a-string\r\n * @param {string} country — A two-letter ISO country code (case-insensitive).\r\n * @return {string}\r\n */\r\nexport default function getCountryFlag(country) {\r\n\treturn getRegionalIndicatorSymbol(country[0]) + getRegionalIndicatorSymbol(country[1])\r\n}\r\n\r\n/**\r\n * Converts a letter to a Regional Indicator Symbol.\r\n * @param {string} letter\r\n * @return {string}\r\n */\r\nfunction getRegionalIndicatorSymbol(letter) {\r\n\treturn String.fromCodePoint(0x1F1E6 - 65 + letter.toUpperCase().charCodeAt(0))\r\n}","import React, { useCallback, useMemo } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport getUnicodeFlagIcon from 'country-flag-icons/unicode'\r\n\r\nexport default function CountrySelect({\r\n\tvalue,\r\n\tonChange,\r\n\toptions,\r\n\t...rest\r\n}) {\r\n\tconst onChange_ = useCallback((event) => {\r\n\t\tconst value = event.target.value\r\n\t\tonChange(value === 'ZZ' ? undefined : value)\r\n\t}, [onChange])\r\n\r\n\tconst selectedOption = useMemo(() => {\r\n\t\treturn getSelectedOption(options, value)\r\n\t}, [options, value])\r\n\r\n\t// \"ZZ\" means \"International\".\r\n\t// (HTML requires each `\r\n\t\t\t))}\r\n\t\t\r\n\t)\r\n}\r\n\r\nCountrySelect.propTypes = {\r\n\t/**\r\n\t * A two-letter country code.\r\n\t * Example: \"US\", \"RU\", etc.\r\n\t */\r\n\tvalue: PropTypes.string,\r\n\r\n\t/**\r\n\t * A function of `value: string`.\r\n\t * Updates the `value` property.\r\n\t */\r\n\tonChange: PropTypes.func.isRequired,\r\n\r\n\t// `` options.\r\n * Can move some country `` options.\r\n * @param {string[]} [countryOptionsOrder] — Country `` can't be left in a broken state.\r\n\tif (!country && required && countries && countries.length > 0) {\r\n\t\tcountry = getAnyCountry()\r\n\t\t// noCountryMatchesTheNumber = true\r\n\t}\r\n\r\n\treturn country\r\n}\r\n\r\n/**\r\n * Generates a sorted list of country `` option for each country.\r\n\tconst countrySelectOptions = countries.map((country) => ({\r\n\t\tvalue: country,\r\n\t\t// All `locale` country names included in this library\r\n\t\t// include all countries (this is checked at build time).\r\n\t\t// The only case when a country name might be missing\r\n\t\t// is when a developer supplies their own `labels` property.\r\n\t\t// To guard against such cases, a missing country name\r\n\t\t// is substituted by country code.\r\n\t\tlabel: countryNames[country] || country\r\n\t}))\r\n\r\n\t// Sort the list of countries alphabetically.\r\n\tcountrySelectOptions.sort((a, b) => _compareStrings(a.label, b.label, compareStringsLocales))\r\n\r\n\t// Add the \"International\" option to the country list (if suitable)\r\n\tif (addInternationalOption) {\r\n\t\tcountrySelectOptions.unshift({\r\n\t\t\tlabel: countryNames.ZZ\r\n\t\t})\r\n\t}\r\n\r\n\treturn countrySelectOptions\r\n}\r\n\r\n/**\r\n * Parses a E.164 phone number to an instance of `PhoneNumber` class.\r\n * @param {string?} value = E.164 phone number.\r\n * @param {object} metadata - `libphonenumber-js` metadata\r\n * @return {object} Object having shape `{ country: string?, countryCallingCode: string, number: string }`. `PhoneNumber`: https://gitlab.com/catamphetamine/libphonenumber-js#phonenumber.\r\n * @example\r\n * parsePhoneNumber('+78005553535')\r\n */\r\nexport function parsePhoneNumber(value, metadata) {\r\n\treturn parsePhoneNumber_(value || '', metadata)\r\n}\r\n\r\n/**\r\n * Generates national number digits for a parsed phone.\r\n * May prepend national prefix.\r\n * The phone number must be a complete and valid phone number.\r\n * @param {object} phoneNumber - An instance of `PhoneNumber` class.\r\n * @param {object} metadata - `libphonenumber-js` metadata\r\n * @return {string}\r\n * @example\r\n * getNationalNumberDigits({ country: 'RU', phone: '8005553535' })\r\n * // returns '88005553535'\r\n */\r\nexport function generateNationalNumberDigits(phoneNumber) {\r\n\treturn phoneNumber.formatNational().replace(/\\D/g, '')\r\n}\r\n\r\n/**\r\n * Migrates parsed `` `value` for the newly selected `country`.\r\n * @param {string?} phoneDigits - Phone number digits (and `+`) parsed from phone number `` (it's not the same as the `value` property).\r\n * @param {string?} prevCountry - Previously selected country.\r\n * @param {string?} newCountry - Newly selected country. Can't be same as previously selected country.\r\n * @param {object} metadata - `libphonenumber-js` metadata.\r\n * @param {boolean} useNationalFormat - whether should attempt to convert from international to national number for the new country.\r\n * @return {string?}\r\n */\r\nexport function getPhoneDigitsForNewCountry(phoneDigits, {\r\n\tprevCountry,\r\n\tnewCountry,\r\n\tmetadata,\r\n\tuseNationalFormat\r\n}) {\r\n\tif (prevCountry === newCountry) {\r\n\t\treturn phoneDigits\r\n\t}\r\n\r\n\t// If `parsed_input` is empty\r\n\t// then no need to migrate anything.\r\n\tif (!phoneDigits) {\r\n\t\tif (useNationalFormat) {\r\n\t\t\treturn ''\r\n\t\t} else {\r\n\t\t\t// If `phoneDigits` is empty then set `phoneDigits` to\r\n\t\t\t// `+{getCountryCallingCode(newCountry)}`.\r\n\t\t\treturn getInternationalPhoneNumberPrefix(newCountry, metadata)\r\n\t\t}\r\n\t}\r\n\r\n\t// If switching to some country.\r\n\t// (from \"International\" or another country)\r\n\t// If switching from \"International\" then `phoneDigits` starts with a `+`.\r\n\t// Otherwise it may or may not start with a `+`.\r\n\tif (newCountry) {\r\n\t\t// If the phone number was entered in international format\r\n\t\t// then migrate it to the newly selected country.\r\n\t\t// The phone number may be incomplete.\r\n\t\t// The phone number entered not necessarily starts with\r\n\t\t// the previously selected country phone prefix.\r\n\t\tif (phoneDigits[0] === '+') {\r\n\t\t\t// If the international phone number is for the new country\r\n\t\t\t// then convert it to local if required.\r\n\t\t\tif (useNationalFormat) {\r\n\t\t\t\t// // If a phone number is being input in international form\r\n\t\t\t\t// // and the country can already be derived from it,\r\n\t\t\t\t// // and if it is the new country, then format as a national number.\r\n\t\t\t\t// const derived_country = getCountryFromPossiblyIncompleteInternationalPhoneNumber(phoneDigits, metadata)\r\n\t\t\t\t// if (derived_country === newCountry) {\r\n\t\t\t\t// \treturn stripCountryCallingCode(phoneDigits, derived_country, metadata)\r\n\t\t\t\t// }\r\n\r\n\t\t\t\t// Actually, the two countries don't necessarily need to match:\r\n\t\t\t\t// the condition could be looser here, because several countries\r\n\t\t\t\t// might share the same international phone number format\r\n\t\t\t\t// (for example, \"NANPA\" countries like US, Canada, etc).\r\n\t\t\t\t// The looser condition would be just \"same nternational phone number format\"\r\n\t\t\t\t// which would mean \"same country calling code\" in the context of `libphonenumber-js`.\r\n\t\t\t\tif (phoneDigits.indexOf('+' + getCountryCallingCode(newCountry, metadata)) === 0) {\r\n\t\t\t\t\treturn stripCountryCallingCode(phoneDigits, newCountry, metadata)\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Simply discard the previously entered international phone number,\r\n\t\t\t\t// because otherwise any \"smart\" transformation like getting the\r\n\t\t\t\t// \"national (significant) number\" part and then prepending the\r\n\t\t\t\t// newly selected country's \"country calling code\" to it\r\n\t\t\t\t// would just be confusing for a user without being actually useful.\r\n\t\t\t\treturn ''\r\n\r\n\t\t\t\t// // Simply strip the leading `+` character\r\n\t\t\t\t// // therefore simply converting all digits into a \"local\" phone number.\r\n\t\t\t\t// // https://github.com/catamphetamine/react-phone-number-input/issues/287\r\n\t\t\t\t// return phoneDigits.slice(1)\r\n\t\t\t}\r\n\r\n\t\t\tif (prevCountry) {\r\n\t\t\t\tconst newCountryPrefix = getInternationalPhoneNumberPrefix(newCountry, metadata)\r\n\t\t\t\tif (phoneDigits.indexOf(newCountryPrefix) === 0) {\r\n\t\t\t\t\treturn phoneDigits\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn newCountryPrefix\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconst defaultValue = getInternationalPhoneNumberPrefix(newCountry, metadata)\r\n\t\t\t\t// If `phoneDigits`'s country calling code part is the same\r\n\t\t\t\t// as for the new `country`, then leave `phoneDigits` as is.\r\n\t\t\t\tif (phoneDigits.indexOf(defaultValue) === 0) {\r\n\t\t\t\t\treturn phoneDigits\r\n\t\t\t\t}\r\n\t\t\t\t// If `phoneDigits`'s country calling code part is not the same\r\n\t\t\t\t// as for the new `country`, then set `phoneDigits` to\r\n\t\t\t\t// `+{getCountryCallingCode(newCountry)}`.\r\n\t\t\t\treturn defaultValue\r\n\t\t\t}\r\n\r\n\t\t\t// // If the international phone number already contains\r\n\t\t\t// // any country calling code then trim the country calling code part.\r\n\t\t\t// // (that could also be the newly selected country phone code prefix as well)\r\n\t\t\t// // `phoneDigits` doesn't neccessarily belong to `prevCountry`.\r\n\t\t\t// // (e.g. if a user enters an international number\r\n\t\t\t// // not belonging to any of the reduced `countries` list).\r\n\t\t\t// phoneDigits = stripCountryCallingCode(phoneDigits, prevCountry, metadata)\r\n\r\n\t\t\t// // Prepend country calling code prefix\r\n\t\t\t// // for the newly selected country.\r\n\t\t\t// return e164(phoneDigits, newCountry, metadata) || `+${getCountryCallingCode(newCountry, metadata)}`\r\n\t\t}\r\n\t}\r\n\t// If switching to \"International\" from a country.\r\n\telse {\r\n\t\t// If the phone number was entered in national format.\r\n\t\tif (phoneDigits[0] !== '+') {\r\n\t\t\t// Format the national phone number as an international one.\r\n\t\t\t// The phone number entered not necessarily even starts with\r\n\t\t\t// the previously selected country phone prefix.\r\n\t\t\t// Even if the phone number belongs to whole another country\r\n\t\t\t// it will still be parsed into some national phone number.\r\n\t\t\t//\r\n\t\t\t// Ignore the now-uncovered `|| ''` code branch:\r\n\t\t\t// previously `e164()` function could return an empty string\r\n\t\t\t// even when `phoneDigits` were not empty.\r\n\t\t\t// Now it always returns some `value` when there're any `phoneDigits`.\r\n\t\t\t// Still, didn't remove the `|| ''` code branch just in case\r\n\t\t\t// that logic changes somehow in some future, so there're no\r\n\t\t\t// possible bugs related to that.\r\n\t\t\t//\r\n\t\t\t// (ignore the `|| ''` code branch)\r\n\t\t\t/* istanbul ignore next */\r\n\t\t\treturn e164(phoneDigits, prevCountry, metadata) || ''\r\n\t\t}\r\n\t}\r\n\r\n\treturn phoneDigits\r\n}\r\n\r\n/**\r\n * Converts phone number digits to a (possibly incomplete) E.164 phone number.\r\n * @param {string?} number - A possibly incomplete phone number digits string. Can be a possibly incomplete E.164 phone number.\r\n * @param {string?} country\r\n * @param {object} metadata - `libphonenumber-js` metadata.\r\n * @return {string?}\r\n */\r\nexport function e164(number, country, metadata) {\r\n\tif (!number) {\r\n\t\treturn\r\n\t}\r\n\t// If the phone number is being input in international format.\r\n\tif (number[0] === '+') {\r\n\t\t// If it's just the `+` sign then return nothing.\r\n\t\tif (number === '+') {\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// Return a E.164 phone number.\r\n\t\t//\r\n\t\t// Could return `number` \"as is\" here, but there's a possibility\r\n\t\t// that some user might incorrectly input an international number\r\n\t\t// with a \"national prefix\". Such numbers aren't considered valid,\r\n\t\t// but `libphonenumber-js` is \"forgiving\" when it comes to parsing\r\n\t\t// user's input, and this input component follows that behavior.\r\n\t\t//\r\n\t\tconst asYouType = new AsYouType(country, metadata)\r\n\t\tasYouType.input(number)\r\n\t\t// This function would return `undefined` only when `number` is `\"+\"`,\r\n\t\t// but at this point it is known that `number` is not `\"+\"`.\r\n\t\treturn asYouType.getNumberValue()\r\n\t}\r\n\t// For non-international phone numbers\r\n\t// an accompanying country code is required.\r\n\t// The situation when `country` is `undefined`\r\n\t// and a non-international phone number is passed\r\n\t// to this function shouldn't happen.\r\n\tif (!country) {\r\n\t\treturn\r\n\t}\r\n\tconst partial_national_significant_number = getNationalSignificantNumberDigits(number, country, metadata)\r\n\t//\r\n\t// Even if no \"national (significant) number\" digits have been input,\r\n\t// still return a non-`undefined` value.\r\n\t// https://gitlab.com/catamphetamine/react-phone-number-input/-/issues/113\r\n\t//\r\n\t// For example, if the user has selected country `US` and entered `\"1\"`\r\n\t// then that `\"1\"` is just a \"national prefix\" and no \"national (significant) number\"\r\n\t// digits have been input yet. Still, return `\"+1\"` as `value` in such cases,\r\n\t// because otherwise the app would think that the input is empty and mark it as such\r\n\t// while in reality it isn't empty, which might be thought of as a \"bug\", or just\r\n\t// a \"weird\" behavior.\r\n\t//\r\n\t// if (partial_national_significant_number) {\r\n\t\treturn `+${getCountryCallingCode(country, metadata)}${partial_national_significant_number || ''}`\r\n\t// }\r\n}\r\n\r\n/**\r\n * Trims phone number digits if they exceed the maximum possible length\r\n * for a national (significant) number for the country.\r\n * @param {string} number - A possibly incomplete phone number digits string. Can be a possibly incomplete E.164 phone number.\r\n * @param {string} country\r\n * @param {object} metadata - `libphonenumber-js` metadata.\r\n * @return {string} Can be empty.\r\n */\r\nexport function trimNumber(number, country, metadata) {\r\n\tconst nationalSignificantNumberPart = getNationalSignificantNumberDigits(number, country, metadata)\r\n\tif (nationalSignificantNumberPart) {\r\n\t\tconst overflowDigitsCount = nationalSignificantNumberPart.length - getMaxNumberLength(country, metadata)\r\n\t\tif (overflowDigitsCount > 0) {\r\n\t\t\treturn number.slice(0, number.length - overflowDigitsCount)\r\n\t\t}\r\n\t}\r\n\treturn number\r\n}\r\n\r\nfunction getMaxNumberLength(country, metadata) {\r\n\t// Get \"possible lengths\" for a phone number of the country.\r\n\tmetadata = new Metadata(metadata)\r\n\tmetadata.selectNumberingPlan(country)\r\n\t// Return the last \"possible length\".\r\n\treturn metadata.numberingPlan.possibleLengths()[metadata.numberingPlan.possibleLengths().length - 1]\r\n}\r\n\r\n// If the phone number being input is an international one\r\n// then tries to derive the country from the phone number.\r\n// (regardless of whether there's any country currently selected)\r\n/**\r\n * @param {string} partialE164Number - A possibly incomplete E.164 phone number.\r\n * @param {string?} country - Currently selected country.\r\n * @param {string[]?} countries - A list of available countries. If not passed then \"all countries\" are assumed.\r\n * @param {object} metadata - `libphonenumber-js` metadata.\r\n * @return {string?}\r\n */\r\nexport function getCountryForPartialE164Number(partialE164Number, {\r\n\tcountry,\r\n\tcountries,\r\n\trequired,\r\n\tmetadata\r\n}) {\r\n\tif (partialE164Number === '+') {\r\n\t\t// Don't change the currently selected country yet.\r\n\t\treturn country\r\n\t}\r\n\r\n\tconst derived_country = getCountryFromPossiblyIncompleteInternationalPhoneNumber(partialE164Number, metadata)\r\n\r\n\t// If a phone number is being input in international form\r\n\t// and the country can already be derived from it,\r\n\t// then select that country.\r\n\tif (derived_country && (!countries || (countries.indexOf(derived_country) >= 0))) {\r\n\t\treturn derived_country\r\n\t}\r\n\t// If \"International\" country option has not been disabled\r\n\t// and the international phone number entered doesn't correspond\r\n\t// to the currently selected country then reset the currently selected country.\r\n\telse if (country &&\r\n\t\t!required &&\r\n\t\t!couldNumberBelongToCountry(partialE164Number, country, metadata)) {\r\n\t\treturn undefined\r\n\t}\r\n\r\n\t// Don't change the currently selected country.\r\n\treturn country\r\n}\r\n\r\n/**\r\n * Parses `` value. Derives `country` from `input`. Derives an E.164 `value`.\r\n * @param {string?} phoneDigits — Parsed `` value. Examples: `\"\"`, `\"+\"`, `\"+123\"`, `\"123\"`.\r\n * @param {string?} prevPhoneDigits — Previous parsed `` value. Examples: `\"\"`, `\"+\"`, `\"+123\"`, `\"123\"`.\r\n * @param {string?} country - Currently selected country.\r\n * @param {boolean} countryRequired - Is selecting some country required.\r\n * @param {function} getAnyCountry - Can be used to get any country when selecting some country required.\r\n * @param {string[]?} countries - A list of available countries. If not passed then \"all countries\" are assumed.\r\n * @param {boolean} international - Set to `true` to force international phone number format (leading `+`). Set to `false` to force \"national\" phone number format. Is `undefined` by default.\r\n * @param {boolean} limitMaxLength — Whether to enable limiting phone number max length.\r\n * @param {object} metadata - `libphonenumber-js` metadata.\r\n * @return {object} An object of shape `{ input, country, value }`.\r\n */\r\nexport function onPhoneDigitsChange(phoneDigits, {\r\n\tprevPhoneDigits,\r\n\tcountry,\r\n\tdefaultCountry,\r\n\tcountryRequired,\r\n\tgetAnyCountry,\r\n\tcountries,\r\n\tinternational,\r\n\tlimitMaxLength,\r\n\tcountryCallingCodeEditable,\r\n\tmetadata\r\n}) {\r\n\tif (international && countryCallingCodeEditable === false) {\r\n\t\tconst prefix = getInternationalPhoneNumberPrefix(country, metadata)\r\n\t\t// The `` value must start with the country calling code.\r\n\t\tif (phoneDigits.indexOf(prefix) !== 0) {\r\n\t\t\tlet value\r\n\t\t\t// If a phone number input is declared as\r\n\t\t\t// `international` and `withCountryCallingCode`,\r\n\t\t\t// then it's gonna be non-empty even before the user\r\n\t\t\t// has input anything in it.\r\n\t\t\t// This will result in its contents (the country calling code part)\r\n\t\t\t// being selected when the user tabs into such field.\r\n\t\t\t// If the user then starts inputting the national part digits,\r\n\t\t\t// then `` value changes from `+xxx` to `y`\r\n\t\t\t// because inputting anything while having the `` value\r\n\t\t\t// selected results in erasing the `` value.\r\n\t\t\t// So, the component handles such case by restoring\r\n\t\t\t// the intended `` value: `+xxxy`.\r\n\t\t\t// https://gitlab.com/catamphetamine/react-phone-number-input/-/issues/43\r\n\t\t\tif (phoneDigits && phoneDigits[0] !== '+') {\r\n\t\t\t\tphoneDigits = prefix + phoneDigits\r\n\t\t\t\tvalue = e164(phoneDigits, country, metadata)\r\n\t\t\t} else {\r\n\t\t\t\tphoneDigits = prefix\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tphoneDigits,\r\n\t\t\t\tvalue,\r\n\t\t\t\tcountry\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// If `international` property is `false`, then it means\r\n\t// \"enforce national-only format during input\",\r\n\t// so, if that's the case, then remove all `+` characters,\r\n\t// but only if some country is currently selected.\r\n\t// (not if \"International\" country is selected).\r\n\tif (international === false && country && phoneDigits && phoneDigits[0] === '+') {\r\n\t\tphoneDigits = convertInternationalPhoneDigitsToNational(phoneDigits, country, metadata)\r\n\t}\r\n\r\n\t// Trim the input to not exceed the maximum possible number length.\r\n\tif (phoneDigits && country && limitMaxLength) {\r\n\t\tphoneDigits = trimNumber(phoneDigits, country, metadata)\r\n\t}\r\n\r\n\t// If this `onChange()` event was triggered\r\n\t// as a result of selecting \"International\" country,\r\n\t// then force-prepend a `+` sign if the phone number\r\n\t// `` value isn't in international format.\r\n\t// Also, force-prepend a `+` sign if international\r\n\t// phone number input format is set.\r\n\tif (phoneDigits && phoneDigits[0] !== '+' && (!country || international)) {\r\n\t\tphoneDigits = '+' + phoneDigits\r\n\t}\r\n\r\n\t// If the previously entered phone number\r\n\t// has been entered in international format\r\n\t// and the user decides to erase it,\r\n\t// then also reset the `country`\r\n\t// because it was most likely automatically selected\r\n\t// while the user was typing in the phone number\r\n\t// in international format.\r\n\t// This fixes the issue when a user is presented\r\n\t// with a phone number input with no country selected\r\n\t// and then types in their local phone number\r\n\t// then discovers that the input's messed up\r\n\t// (a `+` has been prepended at the start of their input\r\n\t// and a random country has been selected),\r\n\t// decides to undo it all by erasing everything\r\n\t// and then types in their local phone number again\r\n\t// resulting in a seemingly correct phone number\r\n\t// but in reality that phone number has incorrect country.\r\n\t// https://github.com/catamphetamine/react-phone-number-input/issues/273\r\n\tif (!phoneDigits && prevPhoneDigits && prevPhoneDigits[0] === '+') {\r\n\t\tif (international) {\r\n\t\t\tcountry = undefined\r\n\t\t} else {\r\n\t\t\tcountry = defaultCountry\r\n\t\t}\r\n\t}\r\n\t// Also resets such \"randomly\" selected country\r\n\t// as soon as the user erases the number\r\n\t// digit-by-digit up to the leading `+` sign.\r\n\tif (phoneDigits === '+' && prevPhoneDigits && prevPhoneDigits[0] === '+' && prevPhoneDigits.length > '+'.length) {\r\n\t\tcountry = undefined\r\n\t}\r\n\r\n\t// Generate the new `value` property.\r\n\tlet value\r\n\tif (phoneDigits) {\r\n\t\tif (phoneDigits[0] === '+') {\r\n\t\t\tif (phoneDigits === '+') {\r\n\t\t\t\tvalue = undefined\r\n\t\t\t} else if (country && getInternationalPhoneNumberPrefix(country, metadata).indexOf(phoneDigits) === 0) {\r\n\t\t\t\t// Selected a `country` but started inputting an\r\n\t\t\t\t// international phone number for another country.\r\n\t\t\t\t// Even though the input value is non-empty,\r\n\t\t\t\t// the `value` is assumed `undefined` in such case.\r\n\t\t\t\t// The `country` will be reset (or re-selected)\r\n\t\t\t\t// immediately after such mismatch has been detected\r\n\t\t\t\t// by the phone number input component, and `value`\r\n\t\t\t\t// will be set to the currently entered international prefix.\r\n\t\t\t\t//\r\n\t\t\t\t// For example, if selected `country` `\"US\"`\r\n\t\t\t\t// and started inputting phone number `\"+2\"`\r\n\t\t\t\t// then `value` `undefined` will be returned from this function,\r\n\t\t\t\t// and then, immediately after that, `country` will be reset\r\n\t\t\t\t// and the `value` will be set to `\"+2\"`.\r\n\t\t\t\t//\r\n\t\t\t\tvalue = undefined\r\n\t\t\t} else {\r\n\t\t\t\tvalue = e164(phoneDigits, country, metadata)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvalue = e164(phoneDigits, country, metadata)\r\n\t\t}\r\n\t}\r\n\r\n\t// Derive the country from the phone number.\r\n\t// (regardless of whether there's any country currently selected,\r\n\t// because there could be several countries corresponding to one country calling code)\r\n\tif (value) {\r\n\t\tcountry = getCountryForPartialE164Number(value, {\r\n\t\t\tcountry,\r\n\t\t\tcountries,\r\n\t\t\tmetadata\r\n\t\t})\r\n\t\t// If `international` property is `false`, then it means\r\n\t\t// \"enforce national-only format during input\",\r\n\t\t// so, if that's the case, then remove all `+` characters,\r\n\t\t// but only if some country is currently selected.\r\n\t\t// (not if \"International\" country is selected).\r\n\t\tif (international === false && country && phoneDigits && phoneDigits[0] === '+') {\r\n\t\t\tphoneDigits = convertInternationalPhoneDigitsToNational(phoneDigits, country, metadata)\r\n\t\t\t// Re-calculate `value` because `phoneDigits` has changed.\r\n\t\t\tvalue = e164(phoneDigits, country, metadata)\r\n\t\t}\r\n\t}\r\n\r\n\tif (!country && countryRequired) {\r\n\t\tcountry = defaultCountry || getAnyCountry()\r\n\t}\r\n\r\n\treturn {\r\n\t\tphoneDigits,\r\n\t\tcountry,\r\n\t\tvalue\r\n\t}\r\n}\r\n\r\nfunction convertInternationalPhoneDigitsToNational(input, country, metadata) {\r\n\t// Handle the case when a user might have pasted\r\n\t// a phone number in international format.\r\n\tif (input.indexOf(getInternationalPhoneNumberPrefix(country, metadata)) === 0) {\r\n\t\t// Create \"as you type\" formatter.\r\n\t\tconst formatter = new AsYouType(country, metadata)\r\n\t\t// Input partial national phone number.\r\n\t\tformatter.input(input)\r\n\t\t// Return the parsed partial national phone number.\r\n\t\tconst phoneNumber = formatter.getNumber()\r\n\t\tif (phoneNumber) {\r\n\t\t\t// Transform the number to a national one,\r\n\t\t\t// and remove all non-digits.\r\n\t\t\treturn phoneNumber.formatNational().replace(/\\D/g, '')\r\n\t\t} else {\r\n\t\t\treturn ''\r\n\t\t}\r\n\t} else {\r\n\t\t// Just remove the `+` sign.\r\n\t\treturn input.replace(/\\D/g, '')\r\n\t}\r\n}\r\n\r\n/**\r\n * Determines the country for a given (possibly incomplete) E.164 phone number.\r\n * @param {string} number - A possibly incomplete E.164 phone number.\r\n * @param {object} metadata - `libphonenumber-js` metadata.\r\n * @return {string?}\r\n */\r\nexport function getCountryFromPossiblyIncompleteInternationalPhoneNumber(number, metadata) {\r\n\tconst formatter = new AsYouType(null, metadata)\r\n\tformatter.input(number)\r\n\t// // `001` is a special \"non-geograpical entity\" code\r\n\t// // in Google's `libphonenumber` library.\r\n\t// if (formatter.getCountry() === '001') {\r\n\t// \treturn\r\n\t// }\r\n\treturn formatter.getCountry()\r\n}\r\n\r\n/**\r\n * Compares two strings.\r\n * A helper for `Array.sort()`.\r\n * @param {string} a — First string.\r\n * @param {string} b — Second string.\r\n * @param {(string[]|string)} [locales] — The `locales` argument of `String.localeCompare`.\r\n */\r\nexport function compareStrings(a, b, locales) {\r\n // Use `String.localeCompare` if it's available.\r\n // https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare\r\n // Which means everyone except IE <= 10 and Safari <= 10.\r\n // `localeCompare()` is available in latest Node.js versions.\r\n /* istanbul ignore else */\r\n if (String.prototype.localeCompare) {\r\n return a.localeCompare(b, locales);\r\n }\r\n /* istanbul ignore next */\r\n return a < b ? -1 : (a > b ? 1 : 0);\r\n}\r\n\r\n/**\r\n * Strips `+${countryCallingCode}` prefix from an E.164 phone number.\r\n * @param {string} number - (possibly incomplete) E.164 phone number.\r\n * @param {string?} country - A possible country for this phone number.\r\n * @param {object} metadata - `libphonenumber-js` metadata.\r\n * @return {string}\r\n */\r\nexport function stripCountryCallingCode(number, country, metadata) {\r\n\t// Just an optimization, so that it\r\n\t// doesn't have to iterate through all country calling codes.\r\n\tif (country) {\r\n\t\tconst countryCallingCodePrefix = '+' + getCountryCallingCode(country, metadata)\r\n\r\n\t\t// If `country` fits the actual `number`.\r\n\t\tif (number.length < countryCallingCodePrefix.length) {\r\n\t\t\tif (countryCallingCodePrefix.indexOf(number) === 0) {\r\n\t\t\t\treturn ''\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (number.indexOf(countryCallingCodePrefix) === 0) {\r\n\t\t\t\treturn number.slice(countryCallingCodePrefix.length)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// If `country` doesn't fit the actual `number`.\r\n\t// Try all available country calling codes.\r\n\tfor (const country_calling_code of Object.keys(metadata.country_calling_codes)) {\r\n\t\tif (number.indexOf(country_calling_code) === '+'.length) {\r\n\t\t\treturn number.slice('+'.length + country_calling_code.length)\r\n\t\t}\r\n\t}\r\n\r\n\treturn ''\r\n}\r\n\r\n/**\r\n * Parses a partially entered national phone number digits\r\n * (or a partially entered E.164 international phone number)\r\n * and returns the national significant number part.\r\n * National significant number returned doesn't come with a national prefix.\r\n * @param {string} number - National number digits. Or possibly incomplete E.164 phone number.\r\n * @param {string?} country\r\n * @param {object} metadata - `libphonenumber-js` metadata.\r\n * @return {string} [result]\r\n */\r\nexport function getNationalSignificantNumberDigits(number, country, metadata) {\r\n\t// Create \"as you type\" formatter.\r\n\tconst formatter = new AsYouType(country, metadata)\r\n\t// Input partial national phone number.\r\n\tformatter.input(number)\r\n\t// Return the parsed partial national phone number.\r\n\tconst phoneNumber = formatter.getNumber()\r\n\treturn phoneNumber && phoneNumber.nationalNumber\r\n}\r\n\r\n/**\r\n * Checks if a partially entered E.164 phone number could belong to a country.\r\n * @param {string} number\r\n * @param {string} country\r\n * @return {boolean}\r\n */\r\nexport function couldNumberBelongToCountry(number, country, metadata) {\r\n\tconst intlPhoneNumberPrefix = getInternationalPhoneNumberPrefix(country, metadata)\r\n\tlet i = 0\r\n\twhile (i < number.length && i < intlPhoneNumberPrefix.length) {\r\n\t\tif (number[i] !== intlPhoneNumberPrefix[i]) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\treturn true\r\n}\r\n\r\n/**\r\n * Gets initial \"phone digits\" (including `+`, if using international format).\r\n * @return {string} [phoneDigits] Returns `undefined` if there should be no initial \"phone digits\".\r\n */\r\nexport function getInitialPhoneDigits({\r\n\tvalue,\r\n\tphoneNumber,\r\n\tdefaultCountry,\r\n\tinternational,\r\n\tuseNationalFormat,\r\n\tmetadata\r\n}) {\r\n\t// If the `value` (E.164 phone number)\r\n\t// belongs to the currently selected country\r\n\t// and `useNationalFormat` is `true`\r\n\t// then convert `value` (E.164 phone number)\r\n\t// to a local phone number digits.\r\n\t// E.g. '+78005553535' -> '88005553535'.\r\n\tif ((international === false || useNationalFormat) && phoneNumber && phoneNumber.country) {\r\n\t\treturn generateNationalNumberDigits(phoneNumber)\r\n\t}\r\n\t// If `international` property is `true`,\r\n\t// meaning \"enforce international phone number format\",\r\n\t// then always show country calling code in the input field.\r\n\tif (!value && international && defaultCountry) {\r\n\t\treturn getInternationalPhoneNumberPrefix(defaultCountry, metadata)\r\n\t}\r\n\treturn value\r\n}","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport InputSmart from './InputSmart'\r\nimport InputBasic from './InputBasic'\r\n\r\nimport { CountrySelectWithIcon as CountrySelect } from './CountrySelect'\r\n\r\nimport Flag from './Flag'\r\nimport InternationalIcon from './InternationalIcon'\r\n\r\nimport {\r\n\tsortCountryOptions,\r\n\tisCountrySupportedWithError,\r\n\tgetSupportedCountries,\r\n\tgetSupportedCountryOptions,\r\n\tgetCountries\r\n} from './helpers/countries'\r\n\r\nimport { createCountryIconComponent } from './CountryIcon'\r\n\r\nimport {\r\n\tmetadata as metadataPropType,\r\n\tlabels as labelsPropType\r\n} from './PropTypes'\r\n\r\nimport {\r\n\tgetPreSelectedCountry,\r\n\tgetCountrySelectOptions,\r\n\tparsePhoneNumber,\r\n\tgenerateNationalNumberDigits,\r\n\tgetPhoneDigitsForNewCountry,\r\n\tgetInitialPhoneDigits,\r\n\tonPhoneDigitsChange,\r\n\te164\r\n} from './helpers/phoneInputHelpers'\r\n\r\nimport getPhoneInputWithCountryStateUpdateFromNewProps from './helpers/getPhoneInputWithCountryStateUpdateFromNewProps'\r\n\r\nclass PhoneNumberInput_ extends React.PureComponent {\r\n\tinputRef = React.createRef()\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props)\r\n\r\n\t\tconst {\r\n\t\t\tvalue,\r\n\t\t\tlabels,\r\n\t\t\tinternational,\r\n\t\t\taddInternationalOption,\r\n\t\t\t// `displayInitialValueAsLocalNumber` property has been\r\n\t\t\t// superceded by `initialValueFormat` property.\r\n\t\t\tdisplayInitialValueAsLocalNumber,\r\n\t\t\tinitialValueFormat,\r\n\t\t\tmetadata\r\n\t\t} = this.props\r\n\r\n\t\tlet {\r\n\t\t\tdefaultCountry,\r\n\t\t\tcountries\r\n\t\t} = this.props\r\n\r\n\t\t// Validate `defaultCountry`.\r\n\t\tif (defaultCountry) {\r\n\t\t\tif (!this.isCountrySupportedWithError(defaultCountry)) {\r\n\t\t\t\tdefaultCountry = undefined\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Validate `countries`.\r\n\t\tcountries = getSupportedCountries(countries, metadata)\r\n\r\n\t\tconst phoneNumber = parsePhoneNumber(value, metadata)\r\n\r\n\t\tthis.CountryIcon = createCountryIconComponent(this.props)\r\n\r\n\t\tconst preSelectedCountry = getPreSelectedCountry({\r\n\t\t\tvalue,\r\n\t\t\tphoneNumber,\r\n\t\t\tdefaultCountry,\r\n\t\t\trequired: !addInternationalOption,\r\n\t\t\tcountries: countries || getCountries(metadata),\r\n\t\t\tgetAnyCountry: () => this.getFirstSupportedCountry({ countries }),\r\n\t\t\tmetadata\r\n\t\t})\r\n\r\n\t\tthis.state = {\r\n\t\t\t// Workaround for `this.props` inside `getDerivedStateFromProps()`.\r\n\t\t\tprops: this.props,\r\n\r\n\t\t\t// The country selected.\r\n\t\t\tcountry: preSelectedCountry,\r\n\r\n\t\t\t// `countries` are stored in `this.state` because they're filtered.\r\n\t\t\t// For example, a developer might theoretically pass some unsupported\r\n\t\t\t// countries as part of the `countries` property, and because of that\r\n\t\t\t// the component uses `this.state.countries` (which are filtered)\r\n\t\t\t// instead of `this.props.countries`\r\n\t\t\t// (which could potentially contain unsupported countries).\r\n\t\t\tcountries,\r\n\r\n\t\t\t// `phoneDigits` state property holds non-formatted user's input.\r\n\t\t\t// The reason is that there's no way of finding out\r\n\t\t\t// in which form should `value` be displayed: international or national.\r\n\t\t\t// E.g. if `value` is `+78005553535` then it could be input\r\n\t\t\t// by a user both as `8 (800) 555-35-35` and `+7 800 555 35 35`.\r\n\t\t\t// Hence storing just `value` is not sufficient for correct formatting.\r\n\t\t\t// E.g. if a user entered `8 (800) 555-35-35`\r\n\t\t\t// then value is `+78005553535` and `phoneDigits` are `88005553535`\r\n\t\t\t// and if a user entered `+7 800 555 35 35`\r\n\t\t\t// then value is `+78005553535` and `phoneDigits` are `+78005553535`.\r\n\t\t\tphoneDigits: getInitialPhoneDigits({\r\n\t\t\t\tvalue,\r\n\t\t\t\tphoneNumber,\r\n\t\t\t\tdefaultCountry,\r\n\t\t\t\tinternational,\r\n\t\t\t\tuseNationalFormat: displayInitialValueAsLocalNumber || initialValueFormat === 'national',\r\n\t\t\t\tmetadata\r\n\t\t\t}),\r\n\r\n\t\t\t// `value` property is duplicated in state.\r\n\t\t\t// The reason is that `getDerivedStateFromProps()`\r\n\t\t\t// needs this `value` to compare to the new `value` property\r\n\t\t\t// to find out if `phoneDigits` needs updating:\r\n\t\t\t// If the `value` property was changed externally\r\n\t\t\t// then it won't be equal to `state.value`\r\n\t\t\t// in which case `phoneDigits` and `country` should be updated.\r\n\t\t\tvalue\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { onCountryChange } = this.props\r\n\t\tlet { defaultCountry } = this.props\r\n\t\tconst { country: selectedCountry } = this.state\r\n\t\tif (onCountryChange) {\r\n\t\t\tif (defaultCountry) {\r\n\t\t\t\tif (!this.isCountrySupportedWithError(defaultCountry)) {\r\n\t\t\t\t\tdefaultCountry = undefined\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (selectedCountry !== defaultCountry) {\r\n\t\t\t\tonCountryChange(selectedCountry)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidUpdate(prevProps, prevState) {\r\n\t\tconst { onCountryChange } = this.props\r\n\t\tconst { country } = this.state\r\n\t\t// Call `onCountryChange` when user selects another country.\r\n\t\tif (onCountryChange && country !== prevState.country) {\r\n\t\t\tonCountryChange(country)\r\n\t\t}\r\n\t}\r\n\r\n\tsetInputRef = (instance) => {\r\n\t\tthis.inputRef.current = instance\r\n\t\tconst { inputRef: ref } = this.props\r\n\t\tif (ref) {\r\n\t\t\tif (typeof ref === 'function') {\r\n\t\t\t\tref(instance)\r\n\t\t\t} else {\r\n\t\t\t\tref.current = instance\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetCountrySelectOptions({ countries }) {\r\n\t\tconst {\r\n\t\t\tinternational,\r\n\t\t\tcountryCallingCodeEditable,\r\n\t\t\tcountryOptionsOrder,\r\n\t\t\taddInternationalOption,\r\n\t\t\tlabels,\r\n\t\t\tlocales,\r\n\t\t\tmetadata\r\n\t\t} = this.props\r\n\t\treturn useMemoCountrySelectOptions(() => {\r\n\t\t\treturn sortCountryOptions(\r\n\t\t\t\tgetCountrySelectOptions({\r\n\t\t\t\t\tcountries: countries || getCountries(metadata),\r\n\t\t\t\t\tcountryNames: labels,\r\n\t\t\t\t\taddInternationalOption: (international && countryCallingCodeEditable === false) ? false : addInternationalOption,\r\n\t\t\t\t\tcompareStringsLocales: locales,\r\n\t\t\t\t\t// compareStrings\r\n\t\t\t\t}),\r\n\t\t\t\tgetSupportedCountryOptions(countryOptionsOrder, metadata)\r\n\t\t\t)\r\n\t\t}, [\r\n\t\t\tcountries,\r\n\t\t\tcountryOptionsOrder,\r\n\t\t\taddInternationalOption,\r\n\t\t\tlabels,\r\n\t\t\tmetadata\r\n\t\t])\r\n\t}\r\n\r\n\tgetFirstSupportedCountry({ countries }) {\r\n\t\tconst countryOptions = this.getCountrySelectOptions({ countries })\r\n\t\treturn countryOptions[0].value\r\n\t}\r\n\r\n\t// A shorthand for not passing `metadata` as a second argument.\r\n\tisCountrySupportedWithError = (country) => {\r\n\t\tconst { metadata } = this.props\r\n\t\treturn isCountrySupportedWithError(country, metadata)\r\n\t}\r\n\r\n\t// Country `` holds any digits\r\n\t\t// then migrate those digits for the new `country`.\r\n\t\tconst newPhoneDigits = getPhoneDigitsForNewCountry(prevPhoneDigits, {\r\n\t\t\tprevCountry,\r\n\t\t\tnewCountry,\r\n\t\t\tmetadata,\r\n\t\t\t// Convert the phone number to \"national\" format\r\n\t\t\t// when the user changes the selected country by hand.\r\n\t\t\tuseNationalFormat: !international\r\n\t\t})\r\n\r\n\t\tconst newValue = e164(newPhoneDigits, newCountry, metadata)\r\n\r\n\t\t// Focus phone number `` upon country selection.\r\n\t\tif (focusInputOnCountrySelection) {\r\n\t\t\tthis.inputRef.current.focus()\r\n\t\t}\r\n\r\n\t\t// If the user has already manually selected a country\r\n\t\t// then don't override that already selected country\r\n\t\t// if the `defaultCountry` property changes.\r\n\t\t// That's what `hasUserSelectedACountry` flag is for.\r\n\r\n\t\tthis.setState({\r\n\t\t\tcountry: newCountry,\r\n\t\t\thasUserSelectedACountry: true,\r\n\t\t\tphoneDigits: newPhoneDigits,\r\n\t\t\tvalue: newValue\r\n\t\t},\r\n\t\t() => {\r\n\t\t\t// Update the new `value` property.\r\n\t\t\t// Doing it after the `state` has been updated\r\n\t\t\t// because `onChange()` will trigger `getDerivedStateFromProps()`\r\n\t\t\t// with the new `value` which will be compared to `state.value` there.\r\n\t\t\tonChange(newValue)\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * `` `onChange()` handler.\r\n\t * Updates `value` property accordingly (so that they are kept in sync).\r\n\t * @param {string?} input — Either a parsed phone number or an empty string. Examples: `\"\"`, `\"+\"`, `\"+123\"`, `\"123\"`.\r\n\t */\r\n\tonChange = (_phoneDigits) => {\r\n\t\tconst {\r\n\t\t\tdefaultCountry,\r\n\t\t\tonChange,\r\n\t\t\taddInternationalOption,\r\n\t\t\tinternational,\r\n\t\t\tlimitMaxLength,\r\n\t\t\tcountryCallingCodeEditable,\r\n\t\t\tmetadata\r\n\t\t} = this.props\r\n\r\n\t\tconst {\r\n\t\t\tcountries,\r\n\t\t\tphoneDigits: prevPhoneDigits,\r\n\t\t\tcountry: currentlySelectedCountry\r\n\t\t} = this.state\r\n\r\n\t\tconst {\r\n\t\t\tphoneDigits,\r\n\t\t\tcountry,\r\n\t\t\tvalue\r\n\t\t} = onPhoneDigitsChange(_phoneDigits, {\r\n\t\t\tprevPhoneDigits,\r\n\t\t\tcountry: currentlySelectedCountry,\r\n\t\t\tcountryRequired: !addInternationalOption,\r\n\t\t\tdefaultCountry,\r\n\t\t\tgetAnyCountry: () => this.getFirstSupportedCountry({ countries }),\r\n\t\t\tcountries,\r\n\t\t\tinternational,\r\n\t\t\tlimitMaxLength,\r\n\t\t\tcountryCallingCodeEditable,\r\n\t\t\tmetadata\r\n\t\t})\r\n\r\n\t\tconst stateUpdate = {\r\n\t\t\tphoneDigits,\r\n\t\t\tvalue,\r\n\t\t\tcountry\r\n\t\t}\r\n\r\n\t\tif (countryCallingCodeEditable === false) {\r\n\t\t\t// If it simply did `setState({ phoneDigits: intlPrefix })` here,\r\n\t\t\t// then it would have no effect when erasing an inital international prefix\r\n\t\t\t// via Backspace, because `phoneDigits` in `state` wouldn't change\r\n\t\t\t// as a result, because it was `prefix` and it became `prefix`,\r\n\t\t\t// so the component wouldn't rerender, and the user would be able\r\n\t\t\t// to erase the country calling code part, and that part is\r\n\t\t\t// assumed to be non-eraseable. That's why the component is\r\n\t\t\t// forcefully rerendered here.\r\n\t\t\t// https://github.com/catamphetamine/react-phone-number-input/issues/367#issuecomment-721703501\r\n\t\t\tif (!value && phoneDigits === this.state.phoneDigits) {\r\n\t\t\t\t// Force a re-render of the `` in order to reset its value.\r\n\t\t\t\tstateUpdate.forceRerender = {}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setState(\r\n\t\t\tstateUpdate,\r\n\t\t\t// Update the new `value` property.\r\n\t\t\t// Doing it after the `state` has been updated\r\n\t\t\t// because `onChange()` will trigger `getDerivedStateFromProps()`\r\n\t\t\t// with the new `value` which will be compared to `state.value` there.\r\n\t\t\t() => onChange(value)\r\n\t\t)\r\n\t}\r\n\r\n\t// Toggles the `--focus` CSS class.\r\n\t_onFocus = () => this.setState({ isFocused: true })\r\n\r\n\t// Toggles the `--focus` CSS class.\r\n\t_onBlur = () => this.setState({ isFocused: false })\r\n\r\n\tonFocus = (event) => {\r\n\t\tthis._onFocus()\r\n\t\tconst { onFocus } = this.props\r\n\t\tif (onFocus) {\r\n\t\t\tonFocus(event)\r\n\t\t}\r\n\t}\r\n\r\n\tonBlur = (event) => {\r\n\t\tconst { onBlur } = this.props\r\n\t\tthis._onBlur()\r\n\t\tif (onBlur) {\r\n\t\t\tonBlur(event)\r\n\t\t}\r\n\t}\r\n\r\n\tonCountryFocus = (event) => {\r\n\t\tthis._onFocus()\r\n\t\t// this.setState({ countrySelectFocused: true })\r\n\t\tconst { countrySelectProps } = this.props\r\n\t\tif (countrySelectProps) {\r\n\t\t\tconst { onFocus } = countrySelectProps\r\n\t\t\tif (onFocus) {\r\n\t\t\t\tonFocus(event)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tonCountryBlur = (event) => {\r\n\t\tthis._onBlur()\r\n\t\t// this.setState({ countrySelectFocused: false })\r\n\t\tconst { countrySelectProps } = this.props\r\n\t\tif (countrySelectProps) {\r\n\t\t\tconst { onBlur } = countrySelectProps\r\n\t\t\tif (onBlur) {\r\n\t\t\t\tonBlur(event)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// `state` holds previous props as `props`, and also:\r\n\t// * `country` — The currently selected country, e.g. `\"RU\"`.\r\n\t// * `value` — The currently entered phone number (E.164), e.g. `+78005553535`.\r\n\t// * `phoneDigits` — The parsed `` value, e.g. `8005553535`.\r\n\t// (and a couple of other less significant properties)\r\n\tstatic getDerivedStateFromProps(props, state) {\r\n\t\treturn {\r\n\t\t\t// Emulate `prevProps` via `state.props`.\r\n\t\t\tprops,\r\n\t\t\t...getPhoneInputWithCountryStateUpdateFromNewProps(props, state.props, state)\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst {\r\n\t\t\t// Generic HTML attributes.\r\n\t\t\tname,\r\n\t\t\tdisabled,\r\n\t\t\treadOnly,\r\n\t\t\tautoComplete,\r\n\t\t\tstyle,\r\n\t\t\tclassName,\r\n\r\n\t\t\t// Number `` properties.\r\n\t\t\tinputRef,\r\n\t\t\tinputComponent,\r\n\t\t\tnumberInputProps,\r\n\t\t\tsmartCaret,\r\n\r\n\t\t\t// Country ``).\r\n\t\t\tdefaultCountry,\r\n\t\t\tcountries: countriesProperty,\r\n\t\t\tcountryOptionsOrder,\r\n\t\t\tlabels,\r\n\t\t\tflags,\r\n\t\t\tflagComponent,\r\n\t\t\tflagUrl,\r\n\t\t\taddInternationalOption,\r\n\t\t\tinternationalIcon,\r\n\t\t\t// `displayInitialValueAsLocalNumber` property has been\r\n\t\t\t// superceded by `initialValueFormat` property.\r\n\t\t\tdisplayInitialValueAsLocalNumber,\r\n\t\t\tinitialValueFormat,\r\n\t\t\tonCountryChange,\r\n\t\t\tlimitMaxLength,\r\n\t\t\tcountryCallingCodeEditable,\r\n\t\t\tfocusInputOnCountrySelection,\r\n\t\t\treset,\r\n\t\t\tmetadata,\r\n\t\t\tinternational,\r\n\t\t\tlocales,\r\n\t\t\t// compareStrings,\r\n\t\t\t...rest\r\n\t\t} = this.props\r\n\r\n\t\tconst {\r\n\t\t\tcountry,\r\n\t\t\tcountries,\r\n\t\t\tphoneDigits,\r\n\t\t\tisFocused\r\n\t\t} = this.state\r\n\r\n\t\tconst InputComponent = smartCaret ? InputSmart : InputBasic\r\n\r\n\t\tconst countrySelectOptions = this.getCountrySelectOptions({ countries })\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\r\n\t\t\t\t{/* Country `` */}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t)\r\n\t}\r\n}\r\n\r\n// This wrapper is only to `.forwardRef()` to the ``.\r\nconst PhoneNumberInput = React.forwardRef((props, ref) => (\r\n\t\r\n))\r\n\r\nPhoneNumberInput.propTypes = {\r\n\t/**\r\n\t * Phone number in `E.164` format.\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * `\"+12223333333\"`\r\n\t */\r\n\tvalue: PropTypes.string,\r\n\r\n\t/**\r\n\t * A function of `value: string?`.\r\n\t *\r\n\t * Updates the `value` property as the user inputs a phone number.\r\n\t */\r\n\tonChange: PropTypes.func.isRequired,\r\n\r\n\t/**\r\n\t * Toggles the `--focus` CSS class.\r\n\t * @ignore\r\n\t */\r\n\tonFocus: PropTypes.func,\r\n\r\n\t/**\r\n\t * `onBlur` is usually passed by `redux-form`.\r\n\t * @ignore\r\n\t */\r\n\tonBlur: PropTypes.func,\r\n\r\n\t/**\r\n\t * Set to `true` to mark both the phone number ``\r\n\t * and the country ``\r\n\t * and the country ``.\r\n\t *\r\n\t * Web browser's \"autocomplete\" feature\r\n\t * remembers the phone number being input\r\n\t * and can also autofill the ``\r\n\t * with previously remembered phone numbers.\r\n\t *\r\n\t * https://developers.google.com\r\n\t * /web/updates/2015/06/checkout-faster-with-autofill\r\n\t *\r\n\t * For example, can be used to turn it off:\r\n\t *\r\n\t * \"So when should you use `autocomplete=\"off\"`?\r\n\t * One example is when you've implemented your own version\r\n\t * of autocomplete for search. Another example is any form field\r\n\t * where users will input and submit different kinds of information\r\n\t * where it would not be useful to have the browser remember\r\n\t * what was submitted previously\".\r\n\t */\r\n\t// (is `\"tel\"` by default)\r\n\tautoComplete: PropTypes.string.isRequired,\r\n\r\n\t/**\r\n\t * Set to `\"national\"` to show the initial `value` in\r\n\t * \"national\" format rather than \"international\".\r\n\t *\r\n\t * For example, if `initialValueFormat` is `\"national\"`\r\n\t * and the initial `value=\"+12133734253\"` is passed\r\n\t * then the `` value will be `\"(213) 373-4253\"`.\r\n\t *\r\n\t * By default, `initialValueFormat` is `undefined`,\r\n\t * meaning that if the initial `value=\"+12133734253\"` is passed\r\n\t * then the `` value will be `\"+1 213 373 4253\"`.\r\n\t *\r\n\t * The reason for such default behaviour is that\r\n\t * the newer generation grows up when there are no stationary phones\r\n\t * and therefore everyone inputs phone numbers in international format\r\n\t * in their smartphones so people gradually get more accustomed to\r\n\t * writing phone numbers in international format rather than in local format.\r\n\t * Future people won't be using \"national\" format, only \"international\".\r\n\t */\r\n\t// (is `undefined` by default)\r\n\tinitialValueFormat: PropTypes.oneOf(['national']),\r\n\r\n\t// `displayInitialValueAsLocalNumber` property has been\r\n\t// superceded by `initialValueFormat` property.\r\n\tdisplayInitialValueAsLocalNumber: PropTypes.bool,\r\n\r\n\t/**\r\n\t * The country to be selected by default.\r\n\t * For example, can be set after a GeoIP lookup.\r\n\t *\r\n\t * Example: `\"US\"`.\r\n\t */\r\n\t// A two-letter country code (\"ISO 3166-1 alpha-2\").\r\n\tdefaultCountry: PropTypes.string,\r\n\r\n\t/**\r\n\t * If specified, only these countries will be available for selection.\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * `[\"RU\", \"UA\", \"KZ\"]`\r\n\t */\r\n\tcountries: PropTypes.arrayOf(PropTypes.string),\r\n\r\n\t/**\r\n\t * Custom country `` `aria-label`.\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * `{ \"ZZ\": \"Международный\", RU: \"Россия\", US: \"США\", ... }`\r\n\t *\r\n\t * See the `locales` directory for examples.\r\n\t */\r\n\tlabels: labelsPropType.isRequired,\r\n\r\n\t/**\r\n\t * Country `` options sorting function.\r\n\t * The default one uses `a.localeCompare(b)`, and,\r\n\t * if that's not available, falls back to simple `a > b`/`a < b`.\r\n\t * There have been requests to add custom sorter for cases\r\n\t * like Chinese language and \"pinyin\" (non-default) sorting order.\r\n\t * https://stackoverflow.com/questions/22907288/chinese-sorting-by-pinyin-in-javascript-with-localecompare\r\n\tcompareStrings: PropTypes.func,\r\n\t */\r\n\r\n\t/**\r\n\t * A URL template of a country flag, where\r\n\t * \"{XX}\" is a two-letter country code in upper case,\r\n\t * or where \"{xx}\" is a two-letter country code in lower case.\r\n\t * By default it points to `country-flag-icons` gitlab pages website.\r\n\t * I imagine someone might want to download those country flag icons\r\n\t * and host them on their own servers instead\r\n\t * (all flags are available in the `country-flag-icons` library).\r\n\t * There's a catch though: new countries may be added in future,\r\n\t * so when hosting country flag icons on your own server\r\n\t * one should check the `CHANGELOG.md` every time before updating this library,\r\n\t * otherwise there's a possibility that some new country flag would be missing.\r\n\t */\r\n\tflagUrl: PropTypes.string.isRequired,\r\n\r\n\t/**\r\n\t * Custom country flag icon components.\r\n\t * These flags will be used instead of the default ones.\r\n\t * The the \"Flags\" section of the readme for more info.\r\n\t *\r\n\t * The shape is an object where keys are country codes\r\n\t * and values are flag icon components.\r\n\t * Flag icon components receive the same properties\r\n\t * as `flagComponent` (see below).\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * `{ \"RU\": (props) => }`\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * `import flags from 'country-flag-icons/react/3x2'`\r\n\t *\r\n\t * `import PhoneInput from 'react-phone-number-input'`\r\n\t *\r\n\t * ``\r\n\t */\r\n\tflags: PropTypes.objectOf(PropTypes.elementType),\r\n\r\n\t/**\r\n\t * Country flag icon component.\r\n\t *\r\n\t * Takes properties:\r\n\t *\r\n\t * * `country: string` — The country code.\r\n\t * * `countryName: string` — The country name.\r\n\t * * `flagUrl: string` — The `flagUrl` property (see above).\r\n\t * * `flags: object` — The `flags` property (see above).\r\n\t */\r\n\tflagComponent: PropTypes.elementType.isRequired,\r\n\r\n\t/**\r\n\t * Set to `false` to remove the \"International\" option from country `` options.\r\n\t *\r\n\t * * `\"XX\"` — inserts an option for \"XX\" country.\r\n\t * * `\"🌐\"` — inserts \"International\" option.\r\n\t * * `\"|\"` — inserts a separator.\r\n\t * * `\"...\"` — inserts options for the rest of the countries (can be omitted, in which case it will be automatically added at the end).\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * `[\"US\", \"CA\", \"AU\", \"|\", \"...\"]`\r\n\t */\r\n\tcountryOptionsOrder: PropTypes.arrayOf(PropTypes.string),\r\n\r\n\t/**\r\n\t * `` component CSS style object.\r\n\t */\r\n\tstyle: PropTypes.object,\r\n\r\n\t/**\r\n\t * `` component CSS class.\r\n\t */\r\n\tclassName: PropTypes.string,\r\n\r\n\t/**\r\n\t * Country `` component props.\r\n\t * Along with the usual DOM properties such as `aria-label` and `tabIndex`,\r\n\t * some custom properties are supported, such as `arrowComponent` and `unicodeFlags`.\r\n\t */\r\n\tcountrySelectProps: PropTypes.object,\r\n\r\n\t/**\r\n\t * Phone number `` component.\r\n\t *\r\n\t * Receives properties:\r\n\t *\r\n\t * * `value: string` — The formatted `value`.\r\n\t * * `onChange(event: Event)` — Updates the formatted `value` from `event.target.value`.\r\n\t * * `onFocus()` — Is used to toggle the `--focus` CSS class.\r\n\t * * `onBlur()` — Is used to toggle the `--focus` CSS class.\r\n\t * * Other properties like `type=\"tel\"` or `autoComplete=\"tel\"` that should be passed through to the DOM ``.\r\n\t *\r\n\t * Must also either use `React.forwardRef()` to \"forward\" `ref` to the `` or implement `.focus()` method.\r\n\t */\r\n\tinputComponent: PropTypes.elementType.isRequired,\r\n\r\n\t/**\r\n\t * Wrapping `
` component.\r\n\t *\r\n\t * Receives properties:\r\n\t *\r\n\t * * `style: object` — A component CSS style object.\r\n\t * * `className: string` — Classes to attach to the component, typically changes when component focuses or blurs.\r\n\t */\r\n\tcontainerComponent: PropTypes.elementType.isRequired,\r\n\r\n\t/**\r\n\t * Phone number `` component props.\r\n\t */\r\n\tnumberInputProps: PropTypes.object,\r\n\r\n\t/**\r\n\t * When the user attempts to insert a digit somewhere in the middle of a phone number,\r\n\t * the caret position is moved right before the next available digit skipping\r\n\t * any punctuation in between. This is called \"smart\" caret positioning.\r\n\t * Another case would be the phone number format changing as a result of\r\n\t * the user inserting the digit somewhere in the middle, which would require\r\n\t * re-positioning the caret because all digit positions have changed.\r\n\t * This \"smart\" caret positioning feature can be turned off by passing\r\n\t * `smartCaret={false}` property: use it in case of any possible issues\r\n\t * with caret position during phone number input.\r\n\t */\r\n\t// Is `true` by default.\r\n\tsmartCaret: PropTypes.bool.isRequired,\r\n\r\n\t/**\r\n\t * Set to `true` to force \"international\" phone number format.\r\n\t * Set to `false` to force \"national\" phone number format.\r\n\t * By default it's `undefined` meaning that it doesn't enforce any phone number format.\r\n\t */\r\n\tinternational: PropTypes.bool,\r\n\r\n\t/**\r\n\t * If set to `true`, the phone number input will get trimmed\r\n\t * if it exceeds the maximum length for the country.\r\n\t */\r\n\tlimitMaxLength: PropTypes.bool.isRequired,\r\n\r\n\t/**\r\n\t * If set to `false`, and `international` is `true`, then\r\n\t * users won't be able to erase the \"country calling part\"\r\n\t * of a phone number in the ``.\r\n\t */\r\n\tcountryCallingCodeEditable: PropTypes.bool.isRequired,\r\n\r\n\t/**\r\n\t * `libphonenumber-js` metadata.\r\n\t *\r\n\t * Can be used to pass custom `libphonenumber-js` metadata\r\n\t * to reduce the overall bundle size for those who compile \"custom\" metadata.\r\n\t */\r\n\tmetadata: metadataPropType.isRequired,\r\n\r\n\t/**\r\n\t * Is called every time the selected country changes:\r\n\t * either programmatically or when user selects it manually from the list.\r\n\t */\r\n\t// People have been asking for a way to get the selected country.\r\n\t// @see https://github.com/catamphetamine/react-phone-number-input/issues/128\r\n\t// For some it's just a \"business requirement\".\r\n\t// I guess it's about gathering as much info on the user as a website can\r\n\t// without introducing any addional fields that would complicate the form\r\n\t// therefore reducing \"conversion\" (that's a marketing term).\r\n\t// Assuming that the phone number's country is the user's country\r\n\t// is not 100% correct but in most cases I guess it's valid.\r\n\tonCountryChange: PropTypes.func,\r\n\r\n\t/**\r\n\t * If set to `false`, will not focus the `` component\r\n\t * when the user selects a country from the list of countries.\r\n\t * This can be used to conform to the Web Content Accessibility Guidelines (WCAG).\r\n\t * Quote:\r\n\t * \"On input: Changing the setting of any user interface component\r\n\t * does not automatically cause a change of context unless the user\r\n\t * has been advised of the behaviour before using the component.\"\r\n\t */\r\n\tfocusInputOnCountrySelection: PropTypes.bool.isRequired\r\n}\r\n\r\nPhoneNumberInput.defaultProps = {\r\n\t/**\r\n\t * Remember (and autofill) the value as a phone number.\r\n\t */\r\n\tautoComplete: 'tel',\r\n\r\n\t/**\r\n\t * Country `` option icon.\r\n\t */\r\n\tinternationalIcon: InternationalIcon,\r\n\r\n\t/**\r\n\t * Phone number `` component.\r\n\t */\r\n\tinputComponent: 'input',\r\n\r\n\t/**\r\n\t * Wrapping `
` component.\r\n\t */\r\n\tcontainerComponent: 'div',\r\n\r\n\t/**\r\n\t * Some users requested a way to reset the component:\r\n\t * both number `` and country ``\r\n\t * and country ``.\r\n\t * It's also not replaced with just resetting `country` on\r\n\t * external `value` reset, because a user could select a country\r\n\t * and then not input any `value`, and so the selected country\r\n\t * would be \"stuck\", if not using this `reset` property.\r\n\t */\r\n\t// https://github.com/catamphetamine/react-phone-number-input/issues/300\r\n\treset: PropTypes.any,\r\n\r\n\t/**\r\n\t *\r\n\t */\r\n\r\n\t/**\r\n\t * Set to `false` to use \"basic\" caret instead of the \"smart\" one.\r\n\t */\r\n\tsmartCaret: true,\r\n\r\n\t/**\r\n\t * Whether to add the \"International\" option\r\n\t * to the list of countries.\r\n\t */\r\n\taddInternationalOption: true,\r\n\r\n\t/**\r\n\t * If set to `true` the phone number input will get trimmed\r\n\t * if it exceeds the maximum length for the country.\r\n\t */\r\n\tlimitMaxLength: false,\r\n\r\n\t/**\r\n\t * If set to `false`, and `international` is `true`, then\r\n\t * users won't be able to erase the \"country calling part\"\r\n\t * of a phone number in the ``.\r\n\t */\r\n\tcountryCallingCodeEditable: true,\r\n\r\n\t/**\r\n\t * If set to `false`, will not focus the `` component\r\n\t * when the user selects a country from the list of countries.\r\n\t * This can be used to conform to the Web Content Accessibility Guidelines (WCAG).\r\n\t * Quote:\r\n\t * \"On input: Changing the setting of any user interface component\r\n\t * does not automatically cause a change of context unless the user\r\n\t * has been advised of the behaviour before using the component.\"\r\n\t */\r\n\tfocusInputOnCountrySelection: true\r\n}\r\n\r\nexport default PhoneNumberInput\r\n\r\nlet countrySelectOptionsMemo\r\nlet countrySelectOptionsMemoDependencies\r\nfunction useMemoCountrySelectOptions(generator, dependencies) {\r\n\tif (!countrySelectOptionsMemoDependencies ||\r\n\t\t!areEqualArrays(dependencies, countrySelectOptionsMemoDependencies)) {\r\n\t\tcountrySelectOptionsMemo = generator()\r\n\t\tcountrySelectOptionsMemoDependencies = dependencies\r\n\t}\r\n\treturn countrySelectOptionsMemo\r\n}\r\n\r\nfunction areEqualArrays(a, b) {\r\n\tif (a.length !== b.length) {\r\n\t\treturn false\r\n\t}\r\n\tlet i = 0\r\n\twhile (i < a.length) {\r\n\t\tif (a[i] !== b[i]) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\treturn true\r\n}\r\n","import {\r\n\tgetInitialPhoneDigits,\r\n\tgetCountryForPartialE164Number,\r\n\tparsePhoneNumber\r\n} from './phoneInputHelpers'\r\n\r\nimport {\r\n\tisCountrySupportedWithError,\r\n\tgetSupportedCountries\r\n} from './countries'\r\n\r\nexport default function getPhoneInputWithCountryStateUpdateFromNewProps(props, prevProps, state) {\r\n\tconst {\r\n\t\tmetadata,\r\n\t\tcountries,\r\n\t\tdefaultCountry: newDefaultCountry,\r\n\t\tvalue: newValue,\r\n\t\treset: newReset,\r\n\t\tinternational,\r\n\t\t// `displayInitialValueAsLocalNumber` property has been\r\n\t\t// superceded by `initialValueFormat` property.\r\n\t\tdisplayInitialValueAsLocalNumber,\r\n\t\tinitialValueFormat\r\n\t} = props\r\n\r\n\tconst {\r\n\t\tdefaultCountry: prevDefaultCountry,\r\n\t\tvalue: prevValue,\r\n\t\treset: prevReset\r\n\t} = prevProps\r\n\r\n\tconst {\r\n\t\tcountry,\r\n\t\tvalue,\r\n\t\t// If the user has already manually selected a country\r\n\t\t// then don't override that already selected country\r\n\t\t// if the `defaultCountry` property changes.\r\n\t\t// That's what `hasUserSelectedACountry` flag is for.\r\n\t\thasUserSelectedACountry\r\n\t} = state\r\n\r\n\tconst _getInitialPhoneDigits = (parameters) => getInitialPhoneDigits({\r\n\t\t...parameters,\r\n\t\tinternational,\r\n\t\tuseNationalFormat: displayInitialValueAsLocalNumber || initialValueFormat === 'national',\r\n\t\tmetadata\r\n\t})\r\n\r\n\t// Some users requested a way to reset the component\r\n\t// (both number `` and country ``\r\n\t// and country ``.\r\n\t// It's also not replaced with just resetting `country` on\r\n\t// external `value` reset, because a user could select a country\r\n\t// and then not input any `value`, and so the selected country\r\n\t// would be \"stuck\", if not using this `reset` property.\r\n\t// https://github.com/catamphetamine/react-phone-number-input/issues/300\r\n\tif (newReset !== prevReset) {\r\n\t\treturn {\r\n\t\t\tphoneDigits: _getInitialPhoneDigits({\r\n\t\t\t\tvalue: undefined,\r\n\t\t\t\tdefaultCountry: newDefaultCountry\r\n\t\t\t}),\r\n\t\t\tvalue: undefined,\r\n\t\t\tcountry: newDefaultCountry,\r\n\t\t\thasUserSelectedACountry: undefined\r\n\t\t}\r\n\t}\r\n\r\n\t// `value` is the value currently shown in the component:\r\n\t// it's stored in the component's `state`, and it's not the `value` property.\r\n\t// `prevValue` is \"previous `value` property\".\r\n\t// `newValue` is \"new `value` property\".\r\n\r\n\t// If the default country changed\r\n\t// (e.g. in case of ajax GeoIP detection after page loaded)\r\n\t// then select it, but only if the user hasn't already manually\r\n\t// selected a country, and no phone number has been manually entered so far.\r\n\t// Because if the user has already started inputting a phone number\r\n\t// then they're okay with no country being selected at all (\"International\")\r\n\t// and they don't want to be disturbed, don't want their input to be screwed, etc.\r\n\tif (newDefaultCountry !== prevDefaultCountry) {\r\n\t\tconst isNewDefaultCountrySupported = !newDefaultCountry || isCountrySupportedWithError(newDefaultCountry, metadata)\r\n\t\tconst noValueHasBeenEnteredByTheUser = (\r\n\t\t\t// By default, \"no value has been entered\" means `value` is `undefined`.\r\n\t\t\t!value ||\r\n\t\t\t// When `international` is `true`, and some country has been pre-selected,\r\n\t\t\t// then the `` contains a pre-filled value of `+${countryCallingCode}${leadingDigits}`,\r\n\t\t\t// so in case of `international` being `true`, \"the user hasn't entered anything\" situation\r\n\t\t\t// doesn't just mean `value` is `undefined`, but could also mean `value` is `+${countryCallingCode}`.\r\n\t\t\t(international && value === _getInitialPhoneDigits({\r\n\t\t\t\tvalue: undefined,\r\n\t\t\t\tdefaultCountry: prevDefaultCountry\r\n\t\t\t}))\r\n\t\t)\r\n\t\t// Only update the `defaultCountry` property if no phone number\r\n\t\t// has been entered by the user or pre-set by the application.\r\n\t\tconst noValueHasBeenEntered = !newValue && noValueHasBeenEnteredByTheUser\r\n\t\tif (!hasUserSelectedACountry && isNewDefaultCountrySupported && noValueHasBeenEntered) {\r\n\t\t\treturn {\r\n\t\t\t\tcountry: newDefaultCountry,\r\n\t\t\t\t// If `phoneDigits` is empty, then automatically select the new `country`\r\n\t\t\t\t// and set `phoneDigits` to `+{getCountryCallingCode(newCountry)}`.\r\n\t\t\t\t// The code assumes that \"no phone number has been entered by the user\",\r\n\t\t\t\t// and no `value` property has been passed, so the `phoneNumber` parameter\r\n\t\t\t\t// of `_getInitialPhoneDigits({ value, phoneNumber, ... })` is `undefined`.\r\n\t\t\t\tphoneDigits: _getInitialPhoneDigits({\r\n\t\t\t\t\tvalue: undefined,\r\n\t\t\t\t\tdefaultCountry: newDefaultCountry\r\n\t\t\t\t}),\r\n\t\t\t\t// `value` is `undefined` and it stays so.\r\n\t\t\t\tvalue: undefined\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// If a new `value` is set externally.\r\n\t// (e.g. as a result of an ajax API request\r\n\t// to get user's phone after page loaded)\r\n\t// The first part — `newValue !== prevValue` —\r\n\t// is basically `props.value !== prevProps.value`\r\n\t// so it means \"if value property was changed externally\".\r\n\t// The second part — `newValue !== value` —\r\n\t// is for ignoring the `getDerivedStateFromProps()` call\r\n\t// which happens in `this.onChange()` right after `this.setState()`.\r\n\t// If this `getDerivedStateFromProps()` call isn't ignored\r\n\t// then the country flag would reset on each input.\r\n\tif (newValue !== prevValue && newValue !== value) {\r\n\t\tlet phoneNumber\r\n\t\tlet parsedCountry\r\n\t\tif (newValue) {\r\n\t\t\tphoneNumber = parsePhoneNumber(newValue, metadata)\r\n\t\t\tconst supportedCountries = getSupportedCountries(countries, metadata)\r\n\t\t\tif (phoneNumber && phoneNumber.country) {\r\n\t\t\t\t// Ignore `else` because all countries are supported in metadata.\r\n\t\t\t\t/* istanbul ignore next */\r\n\t\t\t\tif (!supportedCountries || supportedCountries.indexOf(phoneNumber.country) >= 0) {\r\n\t\t\t\t\tparsedCountry = phoneNumber.country\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tparsedCountry = getCountryForPartialE164Number(newValue, {\r\n\t\t\t\t\tcountry: undefined,\r\n\t\t\t\t\tcountries: supportedCountries,\r\n\t\t\t\t\tmetadata\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet hasUserSelectedACountryUpdate\r\n\t\tif (!newValue) {\r\n\t\t\t// Reset `hasUserSelectedACountry` flag in `state`.\r\n\t\t\thasUserSelectedACountryUpdate = {\r\n\t\t\t\thasUserSelectedACountry: undefined\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {\r\n\t\t\t...hasUserSelectedACountryUpdate,\r\n\t\t\tphoneDigits: _getInitialPhoneDigits({\r\n\t\t\t\tphoneNumber,\r\n\t\t\t\tvalue: newValue,\r\n\t\t\t\tdefaultCountry: newDefaultCountry\r\n\t\t\t}),\r\n\t\t\tvalue: newValue,\r\n\t\t\tcountry: newValue ? parsedCountry : newDefaultCountry\r\n\t\t}\r\n\t}\r\n\r\n\t// `defaultCountry` didn't change.\r\n\t// `value` didn't change.\r\n\t// `phoneDigits` didn't change, because `value` didn't change.\r\n\t//\r\n\t// So no need to update state.\r\n}","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport labels from '../locale/en.json'\r\n\r\nimport {\r\n\tmetadata as metadataPropType,\r\n\tlabels as labelsPropType\r\n} from './PropTypes'\r\n\r\nimport PhoneInput from './PhoneInputWithCountry'\r\n\r\nexport function createPhoneInput(defaultMetadata) {\r\n\tconst PhoneInputDefault = React.forwardRef((props, ref) => (\r\n\t\t\r\n\t))\r\n\r\n\tPhoneInputDefault.propTypes = {\r\n\t\tmetadata: metadataPropType.isRequired,\r\n\t\tlabels: labelsPropType.isRequired\r\n\t}\r\n\r\n\tPhoneInputDefault.defaultProps = {\r\n\t\tmetadata: defaultMetadata,\r\n\t\tlabels\r\n\t}\r\n\r\n\treturn PhoneInputDefault\r\n}\r\n\r\nexport default createPhoneInput()","import metadata from 'libphonenumber-js/metadata.min.json'\r\n\r\nimport {\r\n\tparsePhoneNumber as _parsePhoneNumber,\r\n\tformatPhoneNumber as _formatPhoneNumber,\r\n\tformatPhoneNumberIntl as _formatPhoneNumberIntl,\r\n\tisValidPhoneNumber as _isValidPhoneNumber,\r\n\tisPossiblePhoneNumber as _isPossiblePhoneNumber,\r\n\tgetCountries as _getCountries,\r\n\tgetCountryCallingCode as _getCountryCallingCode,\r\n\tisSupportedCountry as _isSupportedCountry\r\n} from '../core/index'\r\n\r\nimport { createPhoneInput } from '../modules/PhoneInputWithCountryDefault'\r\n\r\nfunction call(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}\r\n\r\nexport default createPhoneInput(metadata)\r\n\r\nexport function parsePhoneNumber() {\r\n\treturn call(_parsePhoneNumber, arguments)\r\n}\r\n\r\nexport function formatPhoneNumber() {\r\n\treturn call(_formatPhoneNumber, arguments)\r\n}\r\n\r\nexport function formatPhoneNumberIntl() {\r\n\treturn call(_formatPhoneNumberIntl, arguments)\r\n}\r\n\r\nexport function isValidPhoneNumber() {\r\n\treturn call(_isValidPhoneNumber, arguments)\r\n}\r\n\r\nexport function isPossiblePhoneNumber() {\r\n\treturn call(_isPossiblePhoneNumber, arguments)\r\n}\r\n\r\nexport function getCountries() {\r\n\treturn call(_getCountries, arguments)\r\n}\r\n\r\nexport function getCountryCallingCode() {\r\n\treturn call(_getCountryCallingCode, arguments)\r\n}\r\n\r\nexport function isSupportedCountry() {\r\n\treturn call(_isSupportedCountry, arguments)\r\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isNavigator = exports.isBrowser = exports.off = exports.on = exports.noop = void 0;\nvar noop = function () { };\nexports.noop = noop;\nfunction on(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.addEventListener) {\n obj.addEventListener.apply(obj, args);\n }\n}\nexports.on = on;\nfunction off(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.removeEventListener) {\n obj.removeEventListener.apply(obj, args);\n }\n}\nexports.off = off;\nexports.isBrowser = typeof window !== 'undefined';\nexports.isNavigator = typeof navigator !== 'undefined';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nvar util_1 = require(\"./misc/util\");\nvar useLocalStorage = function (key, initialValue, options) {\n if (!util_1.isBrowser) {\n return [initialValue, util_1.noop, util_1.noop];\n }\n if (!key) {\n throw new Error('useLocalStorage key may not be falsy');\n }\n var deserializer = options\n ? options.raw\n ? function (value) { return value; }\n : options.deserializer\n : JSON.parse;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n var initializer = react_1.useRef(function (key) {\n try {\n var serializer = options ? (options.raw ? String : options.serializer) : JSON.stringify;\n var localStorageValue = localStorage.getItem(key);\n if (localStorageValue !== null) {\n return deserializer(localStorageValue);\n }\n else {\n initialValue && localStorage.setItem(key, serializer(initialValue));\n return initialValue;\n }\n }\n catch (_a) {\n // If user is in private mode or has storage restriction\n // localStorage can throw. JSON.parse and JSON.stringify\n // can throw, too.\n return initialValue;\n }\n });\n // eslint-disable-next-line react-hooks/rules-of-hooks\n var _a = react_1.useState(function () { return initializer.current(key); }), state = _a[0], setState = _a[1];\n // eslint-disable-next-line react-hooks/rules-of-hooks\n react_1.useLayoutEffect(function () { return setState(initializer.current(key)); }, [key]);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n var set = react_1.useCallback(function (valOrFunc) {\n try {\n var newState = typeof valOrFunc === 'function' ? valOrFunc(state) : valOrFunc;\n if (typeof newState === 'undefined')\n return;\n var value = void 0;\n if (options)\n if (options.raw)\n if (typeof newState === 'string')\n value = newState;\n else\n value = JSON.stringify(newState);\n else if (options.serializer)\n value = options.serializer(newState);\n else\n value = JSON.stringify(newState);\n else\n value = JSON.stringify(newState);\n localStorage.setItem(key, value);\n setState(deserializer(value));\n }\n catch (_a) {\n // If user is in private mode or has storage restriction\n // localStorage can throw. Also JSON.stringify can throw.\n }\n }, [key, setState]);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n var remove = react_1.useCallback(function () {\n try {\n localStorage.removeItem(key);\n setState(undefined);\n }\n catch (_a) {\n // If user is in private mode or has storage restriction\n // localStorage can throw.\n }\n }, [key, setState]);\n return [state, set, remove];\n};\nexports.default = useLocalStorage;\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import { options, Fragment } from 'preact';\n\n/** @typedef {import('preact').VNode} VNode */\n\nlet vnodeId = 0;\n\n/**\n * @fileoverview\n * This file exports various methods that implement Babel's \"automatic\" JSX runtime API:\n * - jsx(type, props, key)\n * - jsxs(type, props, key)\n * - jsxDEV(type, props, key, __source, __self)\n *\n * The implementation of createVNode here is optimized for performance.\n * Benchmarks: https://esbench.com/bench/5f6b54a0b4632100a7dcd2b3\n */\n\n/**\n * JSX.Element factory used by Babel's {runtime:\"automatic\"} JSX transform\n * @param {VNode['type']} type\n * @param {VNode['props']} props\n * @param {VNode['key']} [key]\n * @param {string} [__source]\n * @param {string} [__self]\n */\nfunction createVNode(type, props, key, __source, __self) {\n\t// We'll want to preserve `ref` in props to get rid of the need for\n\t// forwardRef components in the future, but that should happen via\n\t// a separate PR.\n\tlet normalizedProps = {},\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'ref') {\n\t\t\tref = props[i];\n\t\t} else {\n\t\t\tnormalizedProps[i] = props[i];\n\t\t}\n\t}\n\n\tconst vnode = {\n\t\ttype,\n\t\tprops: normalizedProps,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\t_hydrating: null,\n\t\tconstructor: undefined,\n\t\t_original: --vnodeId,\n\t\t__source,\n\t\t__self\n\t};\n\n\t// If a Component VNode, check for and apply defaultProps.\n\t// Note: `type` is often a String, and can be `undefined` in development.\n\tif (typeof type === 'function' && (ref = type.defaultProps)) {\n\t\tfor (i in ref)\n\t\t\tif (typeof normalizedProps[i] === 'undefined') {\n\t\t\t\tnormalizedProps[i] = ref[i];\n\t\t\t}\n\t}\n\n\tif (options.vnode) options.vnode(vnode);\n\treturn vnode;\n}\n\nexport {\n\tcreateVNode as jsx,\n\tcreateVNode as jsxs,\n\tcreateVNode as jsxDEV,\n\tFragment\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"600\":\"c798c849\",\"787\":\"fb3cd676\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + \"e0eac78c\" + \".chunk.css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"@nutrilogic/self:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"600\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_nutrilogic_self\"] = self[\"webpackChunk_nutrilogic_self\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nvar table = new WeakMap();\n// counter of the key\nvar counter = 0;\n// hashes an array of objects and returns a string\nexport default function hash(args) {\n if (!args.length)\n return '';\n var key = 'arg';\n for (var i = 0; i < args.length; ++i) {\n if (args[i] === null) {\n key += '@null';\n continue;\n }\n var _hash = void 0;\n if (typeof args[i] !== 'object' && typeof args[i] !== 'function') {\n // need to consider the case that args[i] is a string:\n // args[i] _hash\n // \"undefined\" -> '\"undefined\"'\n // undefined -> 'undefined'\n // 123 -> '123'\n // \"null\" -> '\"null\"'\n if (typeof args[i] === 'string') {\n _hash = '\"' + args[i] + '\"';\n }\n else {\n _hash = String(args[i]);\n }\n }\n else {\n if (!table.has(args[i])) {\n _hash = counter;\n table.set(args[i], counter++);\n }\n else {\n _hash = table.get(args[i]);\n }\n }\n key += '@' + _hash;\n }\n return key;\n}\n","import hash from './libs/hash';\nvar Cache = /** @class */ (function () {\n function Cache(initialData) {\n if (initialData === void 0) { initialData = {}; }\n this.cache = new Map(Object.entries(initialData));\n this.subs = [];\n }\n Cache.prototype.get = function (key) {\n var _key = this.serializeKey(key)[0];\n return this.cache.get(_key);\n };\n Cache.prototype.set = function (key, value) {\n var _key = this.serializeKey(key)[0];\n this.cache.set(_key, value);\n this.notify();\n };\n Cache.prototype.keys = function () {\n return Array.from(this.cache.keys());\n };\n Cache.prototype.has = function (key) {\n var _key = this.serializeKey(key)[0];\n return this.cache.has(_key);\n };\n Cache.prototype.clear = function () {\n this.cache.clear();\n this.notify();\n };\n Cache.prototype.delete = function (key) {\n var _key = this.serializeKey(key)[0];\n this.cache.delete(_key);\n this.notify();\n };\n // TODO: introduce namespace for the cache\n Cache.prototype.serializeKey = function (key) {\n var args = null;\n if (typeof key === 'function') {\n try {\n key = key();\n }\n catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n if (Array.isArray(key)) {\n // args array\n args = key;\n key = hash(key);\n }\n else {\n // convert null to ''\n key = String(key || '');\n }\n var errorKey = key ? 'err@' + key : '';\n var isValidatingKey = key ? 'validating@' + key : '';\n return [key, args, errorKey, isValidatingKey];\n };\n Cache.prototype.subscribe = function (listener) {\n var _this = this;\n if (typeof listener !== 'function') {\n throw new Error('Expected the listener to be a function.');\n }\n var isSubscribed = true;\n this.subs.push(listener);\n return function () {\n if (!isSubscribed)\n return;\n isSubscribed = false;\n var index = _this.subs.indexOf(listener);\n if (index > -1) {\n _this.subs[index] = _this.subs[_this.subs.length - 1];\n _this.subs.length--;\n }\n };\n };\n // Notify Cache subscribers about a change in the cache\n Cache.prototype.notify = function () {\n for (var _i = 0, _a = this.subs; _i < _a.length; _i++) {\n var listener = _a[_i];\n listener();\n }\n };\n return Cache;\n}());\nexport default Cache;\n","/**\n * Due to bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a work around, we always assume it's online on first load, and change\n * the status upon `online` or `offline` events.\n */\nvar online = true;\nvar isOnline = function () { return online; };\nvar isDocumentVisible = function () {\n if (typeof document !== 'undefined' &&\n document.visibilityState !== undefined) {\n return document.visibilityState !== 'hidden';\n }\n // always assume it's visible\n return true;\n};\nvar fetcher = function (url) { return fetch(url).then(function (res) { return res.json(); }); };\nvar registerOnFocus = function (cb) {\n if (typeof window !== 'undefined' &&\n window.addEventListener !== undefined &&\n typeof document !== 'undefined' &&\n document.addEventListener !== undefined) {\n // focus revalidate\n document.addEventListener('visibilitychange', function () { return cb(); }, false);\n window.addEventListener('focus', function () { return cb(); }, false);\n }\n};\nvar registerOnReconnect = function (cb) {\n if (typeof window !== 'undefined' && window.addEventListener !== undefined) {\n // reconnect revalidate\n window.addEventListener('online', function () {\n online = true;\n cb();\n }, false);\n // nothing to revalidate, just update the status\n window.addEventListener('offline', function () { return (online = false); }, false);\n }\n};\nexport default {\n isOnline: isOnline,\n isDocumentVisible: isDocumentVisible,\n fetcher: fetcher,\n registerOnFocus: registerOnFocus,\n registerOnReconnect: registerOnReconnect\n};\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { dequal } from 'dequal/lite';\nimport Cache from './cache';\nimport webPreset from './libs/web-preset';\n// cache\nvar cache = new Cache();\n// error retry\nfunction onErrorRetry(_, __, config, revalidate, opts) {\n if (!config.isDocumentVisible()) {\n // if it's hidden, stop\n // it will auto revalidate when focus\n return;\n }\n if (typeof config.errorRetryCount === 'number' &&\n opts.retryCount > config.errorRetryCount) {\n return;\n }\n // exponential backoff\n var count = Math.min(opts.retryCount, 8);\n var timeout = ~~((Math.random() + 0.5) * (1 << count)) * config.errorRetryInterval;\n setTimeout(revalidate, timeout, opts);\n}\n// client side: need to adjust the config\n// based on the browser status\n// slow connection (<= 70Kbps)\nvar slowConnection = typeof window !== 'undefined' &&\n // @ts-ignore\n navigator['connection'] &&\n // @ts-ignore\n ['slow-2g', '2g'].indexOf(navigator['connection'].effectiveType) !== -1;\n// config\nvar defaultConfig = __assign({ \n // events\n onLoadingSlow: function () { }, onSuccess: function () { }, onError: function () { }, onErrorRetry: onErrorRetry, errorRetryInterval: (slowConnection ? 10 : 5) * 1000, focusThrottleInterval: 5 * 1000, dedupingInterval: 2 * 1000, loadingTimeout: (slowConnection ? 5 : 3) * 1000, refreshInterval: 0, revalidateOnFocus: true, revalidateOnReconnect: true, refreshWhenHidden: false, refreshWhenOffline: false, shouldRetryOnError: true, suspense: false, compare: dequal, isPaused: function () { return false; } }, webPreset);\nexport { cache };\nexport default defaultConfig;\n","import { useEffect, useLayoutEffect } from 'react';\nexport var IS_SERVER = typeof window === 'undefined' ||\n // @ts-ignore\n !!(typeof Deno !== 'undefined' && Deno && Deno.version && Deno.version.deno);\n// polyfill for requestAnimationFrame\nexport var rAF = IS_SERVER\n ? null\n : window['requestAnimationFrame']\n ? function (f) { return window['requestAnimationFrame'](f); }\n : function (f) { return setTimeout(f, 1); };\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport var useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n","import { createContext } from 'react';\nvar SWRConfigContext = createContext({});\nSWRConfigContext.displayName = 'SWRConfigContext';\nexport default SWRConfigContext;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n// TODO: use @ts-expect-error\nimport { useCallback, useContext, useState, useRef, useMemo, useDebugValue } from 'react';\nimport defaultConfig, { cache } from './config';\nimport { IS_SERVER, rAF, useIsomorphicLayoutEffect } from './env';\nimport SWRConfigContext from './swr-config-context';\n// global state managers\nvar CONCURRENT_PROMISES = {};\nvar CONCURRENT_PROMISES_TS = {};\nvar FOCUS_REVALIDATORS = {};\nvar RECONNECT_REVALIDATORS = {};\nvar CACHE_REVALIDATORS = {};\nvar MUTATION_TS = {};\nvar MUTATION_END_TS = {};\n// generate strictly increasing timestamps\nvar now = (function () {\n var ts = 0;\n return function () { return ++ts; };\n})();\n// setup DOM events listeners for `focus` and `reconnect` actions\nif (!IS_SERVER) {\n var revalidate_1 = function (revalidators) {\n if (!defaultConfig.isDocumentVisible() || !defaultConfig.isOnline())\n return;\n for (var key in revalidators) {\n if (revalidators[key][0])\n revalidators[key][0]();\n }\n };\n if (typeof defaultConfig.registerOnFocus === 'function') {\n defaultConfig.registerOnFocus(function () { return revalidate_1(FOCUS_REVALIDATORS); });\n }\n if (typeof defaultConfig.registerOnReconnect === 'function') {\n defaultConfig.registerOnReconnect(function () { return revalidate_1(RECONNECT_REVALIDATORS); });\n }\n}\nvar trigger = function (_key, shouldRevalidate) {\n if (shouldRevalidate === void 0) { shouldRevalidate = true; }\n // we are ignoring the second argument which correspond to the arguments\n // the fetcher will receive when key is an array\n var _a = cache.serializeKey(_key), key = _a[0], keyErr = _a[2], keyValidating = _a[3];\n if (!key)\n return Promise.resolve();\n var updaters = CACHE_REVALIDATORS[key];\n if (key && updaters) {\n var currentData = cache.get(key);\n var currentError = cache.get(keyErr);\n var currentIsValidating = cache.get(keyValidating);\n var promises = [];\n for (var i = 0; i < updaters.length; ++i) {\n promises.push(updaters[i](shouldRevalidate, currentData, currentError, currentIsValidating, i > 0));\n }\n // return new updated value\n return Promise.all(promises).then(function () { return cache.get(key); });\n }\n return Promise.resolve(cache.get(key));\n};\nvar broadcastState = function (key, data, error, isValidating) {\n var updaters = CACHE_REVALIDATORS[key];\n if (key && updaters) {\n for (var i = 0; i < updaters.length; ++i) {\n updaters[i](false, data, error, isValidating);\n }\n }\n};\nvar mutate = function (_key, _data, shouldRevalidate) {\n if (shouldRevalidate === void 0) { shouldRevalidate = true; }\n return __awaiter(void 0, void 0, void 0, function () {\n var _a, key, keyErr, beforeMutationTs, beforeConcurrentPromisesTs, data, error, isAsyncMutation, err_1, shouldAbort, updaters, promises, i;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = cache.serializeKey(_key), key = _a[0], keyErr = _a[2];\n if (!key)\n return [2 /*return*/];\n // if there is no new data to update, let's just revalidate the key\n if (typeof _data === 'undefined')\n return [2 /*return*/, trigger(_key, shouldRevalidate)\n // update global timestamps\n ];\n // update global timestamps\n MUTATION_TS[key] = now() - 1;\n MUTATION_END_TS[key] = 0;\n beforeMutationTs = MUTATION_TS[key];\n beforeConcurrentPromisesTs = CONCURRENT_PROMISES_TS[key];\n isAsyncMutation = false;\n if (_data && typeof _data === 'function') {\n // `_data` is a function, call it passing current cache value\n try {\n _data = _data(cache.get(key));\n }\n catch (err) {\n // if `_data` function throws an error synchronously, it shouldn't be cached\n _data = undefined;\n error = err;\n }\n }\n if (!(_data && typeof _data.then === 'function')) return [3 /*break*/, 5];\n // `_data` is a promise\n isAsyncMutation = true;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n return [4 /*yield*/, _data];\n case 2:\n data = _b.sent();\n return [3 /*break*/, 4];\n case 3:\n err_1 = _b.sent();\n error = err_1;\n return [3 /*break*/, 4];\n case 4: return [3 /*break*/, 6];\n case 5:\n data = _data;\n _b.label = 6;\n case 6:\n shouldAbort = function () {\n // check if other mutations have occurred since we've started this mutation\n if (beforeMutationTs !== MUTATION_TS[key] ||\n beforeConcurrentPromisesTs !== CONCURRENT_PROMISES_TS[key]) {\n if (error)\n throw error;\n return true;\n }\n };\n // if there's a race we don't update cache or broadcast change, just return the data\n if (shouldAbort())\n return [2 /*return*/, data];\n if (typeof data !== 'undefined') {\n // update cached data\n cache.set(key, data);\n }\n // always update or reset the error\n cache.set(keyErr, error);\n // reset the timestamp to mark the mutation has ended\n MUTATION_END_TS[key] = now() - 1;\n if (!isAsyncMutation) {\n // we skip broadcasting if there's another mutation happened synchronously\n if (shouldAbort())\n return [2 /*return*/, data];\n }\n updaters = CACHE_REVALIDATORS[key];\n if (updaters) {\n promises = [];\n for (i = 0; i < updaters.length; ++i) {\n promises.push(updaters[i](!!shouldRevalidate, data, error, undefined, i > 0));\n }\n // return new updated value\n return [2 /*return*/, Promise.all(promises).then(function () {\n if (error)\n throw error;\n return cache.get(key);\n })];\n }\n // throw error or return data to be used by caller of mutate\n if (error)\n throw error;\n return [2 /*return*/, data];\n }\n });\n });\n};\nfunction useSWR() {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _key = args[0];\n var config = Object.assign({}, defaultConfig, useContext(SWRConfigContext), args.length > 2\n ? args[2]\n : args.length === 2 && typeof args[1] === 'object'\n ? args[1]\n : {});\n // in typescript args.length > 2 is not same as args.lenth === 3\n // we do a safe type assertion here\n // args.length === 3\n var fn = (args.length > 2\n ? args[1]\n : args.length === 2 && typeof args[1] === 'function'\n ? args[1]\n : /**\n pass fn as null will disable revalidate\n https://paco.sh/blog/shared-hook-state-with-swr\n */\n args[1] === null\n ? args[1]\n : config.fetcher);\n // we assume `key` as the identifier of the request\n // `key` can change but `fn` shouldn't\n // (because `revalidate` only depends on `key`)\n // `keyErr` is the cache key for error objects\n var _a = cache.serializeKey(_key), key = _a[0], fnArgs = _a[1], keyErr = _a[2], keyValidating = _a[3];\n var configRef = useRef(config);\n useIsomorphicLayoutEffect(function () {\n configRef.current = config;\n });\n var willRevalidateOnMount = function () {\n return (config.revalidateOnMount ||\n (!config.initialData && config.revalidateOnMount === undefined));\n };\n var resolveData = function () {\n var cachedData = cache.get(key);\n return typeof cachedData === 'undefined' ? config.initialData : cachedData;\n };\n var resolveIsValidating = function () {\n return !!cache.get(keyValidating) || (key && willRevalidateOnMount());\n };\n var initialData = resolveData();\n var initialError = cache.get(keyErr);\n var initialIsValidating = resolveIsValidating();\n // if a state is accessed (data, error or isValidating),\n // we add the state to dependencies so if the state is\n // updated in the future, we can trigger a rerender\n var stateDependencies = useRef({\n data: false,\n error: false,\n isValidating: false\n });\n var stateRef = useRef({\n data: initialData,\n error: initialError,\n isValidating: initialIsValidating\n });\n // display the data label in the React DevTools next to SWR hooks\n useDebugValue(stateRef.current.data);\n var rerender = useState({})[1];\n var dispatch = useCallback(function (payload) {\n var shouldUpdateState = false;\n for (var k in payload) {\n // @ts-ignore\n if (stateRef.current[k] === payload[k]) {\n continue;\n }\n // @ts-ignore\n stateRef.current[k] = payload[k];\n // @ts-ignore\n if (stateDependencies.current[k]) {\n shouldUpdateState = true;\n }\n }\n if (shouldUpdateState) {\n // if component is unmounted, should skip rerender\n // if component is not mounted, should skip rerender\n if (unmountedRef.current || !initialMountedRef.current)\n return;\n rerender({});\n }\n }, \n // config.suspense isn't allowed to change during the lifecycle\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // error ref inside revalidate (is last request errored?)\n var unmountedRef = useRef(false);\n var keyRef = useRef(key);\n // check if component is mounted in suspense mode\n var initialMountedRef = useRef(false);\n // do unmount check for callbacks\n var eventsCallback = useCallback(function (event) {\n var _a;\n var params = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n params[_i - 1] = arguments[_i];\n }\n if (unmountedRef.current)\n return;\n if (!initialMountedRef.current)\n return;\n if (key !== keyRef.current)\n return;\n // @ts-ignore\n (_a = configRef.current)[event].apply(_a, params);\n }, [key]);\n var boundMutate = useCallback(function (data, shouldRevalidate) {\n return mutate(keyRef.current, data, shouldRevalidate);\n }, []);\n var addRevalidator = function (revalidators, callback) {\n if (!revalidators[key]) {\n revalidators[key] = [callback];\n }\n else {\n revalidators[key].push(callback);\n }\n return function () {\n var keyedRevalidators = revalidators[key];\n var index = keyedRevalidators.indexOf(callback);\n if (index >= 0) {\n // O(1): faster than splice\n keyedRevalidators[index] =\n keyedRevalidators[keyedRevalidators.length - 1];\n keyedRevalidators.pop();\n }\n };\n };\n // start a revalidation\n var revalidate = useCallback(function (revalidateOpts) {\n if (revalidateOpts === void 0) { revalidateOpts = {}; }\n return __awaiter(_this, void 0, void 0, function () {\n var _a, retryCount, _b, dedupe, loading, shouldDeduping, newData, startAt, newState, err_2;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!key || !fn)\n return [2 /*return*/, false];\n if (unmountedRef.current)\n return [2 /*return*/, false];\n if (configRef.current.isPaused())\n return [2 /*return*/, false];\n _a = revalidateOpts.retryCount, retryCount = _a === void 0 ? 0 : _a, _b = revalidateOpts.dedupe, dedupe = _b === void 0 ? false : _b;\n loading = true;\n shouldDeduping = typeof CONCURRENT_PROMISES[key] !== 'undefined' && dedupe;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 6, , 7]);\n dispatch({\n isValidating: true\n });\n cache.set(keyValidating, true);\n if (!shouldDeduping) {\n // also update other hooks\n broadcastState(key, stateRef.current.data, stateRef.current.error, true);\n }\n newData = void 0;\n startAt = void 0;\n if (!shouldDeduping) return [3 /*break*/, 3];\n // there's already an ongoing request,\n // this one needs to be deduplicated.\n startAt = CONCURRENT_PROMISES_TS[key];\n return [4 /*yield*/, CONCURRENT_PROMISES[key]];\n case 2:\n newData = _c.sent();\n return [3 /*break*/, 5];\n case 3:\n // if no cache being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && !cache.get(key)) {\n setTimeout(function () {\n if (loading)\n eventsCallback('onLoadingSlow', key, config);\n }, config.loadingTimeout);\n }\n if (fnArgs !== null) {\n CONCURRENT_PROMISES[key] = fn.apply(void 0, fnArgs);\n }\n else {\n CONCURRENT_PROMISES[key] = fn(key);\n }\n CONCURRENT_PROMISES_TS[key] = startAt = now();\n return [4 /*yield*/, CONCURRENT_PROMISES[key]];\n case 4:\n newData = _c.sent();\n setTimeout(function () {\n delete CONCURRENT_PROMISES[key];\n delete CONCURRENT_PROMISES_TS[key];\n }, config.dedupingInterval);\n // trigger the success event,\n // only do this for the original request.\n eventsCallback('onSuccess', newData, key, config);\n _c.label = 5;\n case 5:\n // if there're other ongoing request(s), started after the current one,\n // we need to ignore the current one to avoid possible race conditions:\n // req1------------------>res1 (current one)\n // req2---------------->res2\n // the request that fired later will always be kept.\n if (CONCURRENT_PROMISES_TS[key] > startAt) {\n return [2 /*return*/, false];\n }\n // if there're other mutations(s), overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n if (MUTATION_TS[key] &&\n // case 1\n (startAt <= MUTATION_TS[key] ||\n // case 2\n startAt <= MUTATION_END_TS[key] ||\n // case 3\n MUTATION_END_TS[key] === 0)) {\n dispatch({ isValidating: false });\n return [2 /*return*/, false];\n }\n cache.set(keyErr, undefined);\n cache.set(keyValidating, false);\n newState = {\n isValidating: false\n };\n if (typeof stateRef.current.error !== 'undefined') {\n // we don't have an error\n newState.error = undefined;\n }\n if (!config.compare(stateRef.current.data, newData)) {\n // deep compare to avoid extra re-render\n // data changed\n newState.data = newData;\n }\n if (!config.compare(cache.get(key), newData)) {\n cache.set(key, newData);\n }\n // merge the new state\n dispatch(newState);\n if (!shouldDeduping) {\n // also update other hooks\n broadcastState(key, newData, newState.error, false);\n }\n return [3 /*break*/, 7];\n case 6:\n err_2 = _c.sent();\n delete CONCURRENT_PROMISES[key];\n delete CONCURRENT_PROMISES_TS[key];\n if (configRef.current.isPaused()) {\n dispatch({\n isValidating: false\n });\n return [2 /*return*/, false];\n }\n cache.set(keyErr, err_2);\n // get a new error\n // don't use deep equal for errors\n if (stateRef.current.error !== err_2) {\n // we keep the stale data\n dispatch({\n isValidating: false,\n error: err_2\n });\n if (!shouldDeduping) {\n // also broadcast to update other hooks\n broadcastState(key, undefined, err_2, false);\n }\n }\n // events and retry\n eventsCallback('onError', err_2, key, config);\n if (config.shouldRetryOnError) {\n // when retrying, we always enable deduping\n eventsCallback('onErrorRetry', err_2, key, config, revalidate, {\n retryCount: retryCount + 1,\n dedupe: true\n });\n }\n return [3 /*break*/, 7];\n case 7:\n loading = false;\n return [2 /*return*/, true];\n }\n });\n });\n }, \n // dispatch is immutable, and `eventsCallback`, `fnArgs`, `keyErr`, and `keyValidating` are based on `key`,\n // so we can them from the deps array.\n //\n // FIXME:\n // `fn` and `config` might be changed during the lifecycle,\n // but they might be changed every render like this.\n // useSWR('key', () => fetch('/api/'), { suspense: true })\n // So we omit the values from the deps array\n // even though it might cause unexpected behaviors.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [key]);\n // mounted (client side rendering)\n useIsomorphicLayoutEffect(function () {\n if (!key)\n return undefined;\n // after `key` updates, we need to mark it as mounted\n unmountedRef.current = false;\n var isUpdating = initialMountedRef.current;\n initialMountedRef.current = true;\n // after the component is mounted (hydrated),\n // we need to update the data from the cache\n // and trigger a revalidation\n var currentHookData = stateRef.current.data;\n var latestKeyedData = resolveData();\n // update the state if the key changed (not the inital render) or cache updated\n keyRef.current = key;\n if (!config.compare(currentHookData, latestKeyedData)) {\n dispatch({ data: latestKeyedData });\n }\n // revalidate with deduping\n var softRevalidate = function () { return revalidate({ dedupe: true }); };\n // trigger a revalidation\n if (isUpdating || willRevalidateOnMount()) {\n if (typeof latestKeyedData !== 'undefined' && !IS_SERVER) {\n // delay revalidate if there's cache\n // to not block the rendering\n // @ts-ignore it's safe to use requestAnimationFrame in browser\n rAF(softRevalidate);\n }\n else {\n softRevalidate();\n }\n }\n var pending = false;\n var onFocus = function () {\n if (pending || !configRef.current.revalidateOnFocus)\n return;\n pending = true;\n softRevalidate();\n setTimeout(function () { return (pending = false); }, configRef.current.focusThrottleInterval);\n };\n var onReconnect = function () {\n if (configRef.current.revalidateOnReconnect) {\n softRevalidate();\n }\n };\n // register global cache update listener\n var onUpdate = function (shouldRevalidate, updatedData, updatedError, updatedIsValidating, dedupe) {\n if (shouldRevalidate === void 0) { shouldRevalidate = true; }\n if (dedupe === void 0) { dedupe = true; }\n // update hook state\n var newState = {};\n var needUpdate = false;\n if (typeof updatedData !== 'undefined' &&\n !config.compare(stateRef.current.data, updatedData)) {\n newState.data = updatedData;\n needUpdate = true;\n }\n // always update error\n // because it can be `undefined`\n if (stateRef.current.error !== updatedError) {\n newState.error = updatedError;\n needUpdate = true;\n }\n if (typeof updatedIsValidating !== 'undefined' &&\n stateRef.current.isValidating !== updatedIsValidating) {\n newState.isValidating = updatedIsValidating;\n needUpdate = true;\n }\n if (needUpdate) {\n dispatch(newState);\n }\n if (shouldRevalidate) {\n if (dedupe) {\n return softRevalidate();\n }\n else {\n return revalidate();\n }\n }\n return false;\n };\n var unsubFocus = addRevalidator(FOCUS_REVALIDATORS, onFocus);\n var unsubReconnect = addRevalidator(RECONNECT_REVALIDATORS, onReconnect);\n var unsubUpdate = addRevalidator(CACHE_REVALIDATORS, onUpdate);\n return function () {\n // cleanup\n dispatch = function () { return null; };\n // mark it as unmounted\n unmountedRef.current = true;\n unsubFocus();\n unsubReconnect();\n unsubUpdate();\n };\n }, [key, revalidate]);\n useIsomorphicLayoutEffect(function () {\n var timer = null;\n var tick = function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(!stateRef.current.error &&\n (configRef.current.refreshWhenHidden ||\n configRef.current.isDocumentVisible()) &&\n (configRef.current.refreshWhenOffline || configRef.current.isOnline()))) return [3 /*break*/, 2];\n // only revalidate when the page is visible\n // if API request errored, we stop polling in this round\n // and let the error retry function handle it\n return [4 /*yield*/, revalidate({ dedupe: true })];\n case 1:\n // only revalidate when the page is visible\n // if API request errored, we stop polling in this round\n // and let the error retry function handle it\n _a.sent();\n _a.label = 2;\n case 2:\n // Read the latest refreshInterval\n if (configRef.current.refreshInterval && timer) {\n timer = setTimeout(tick, configRef.current.refreshInterval);\n }\n return [2 /*return*/];\n }\n });\n }); };\n if (configRef.current.refreshInterval) {\n timer = setTimeout(tick, configRef.current.refreshInterval);\n }\n return function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n }, [\n config.refreshInterval,\n config.refreshWhenHidden,\n config.refreshWhenOffline,\n revalidate\n ]);\n // suspense\n var latestData;\n var latestError;\n if (config.suspense) {\n // in suspense mode, we can't return empty state\n // (it should be suspended)\n // try to get data and error from cache\n latestData = cache.get(key);\n latestError = cache.get(keyErr);\n if (typeof latestData === 'undefined') {\n latestData = initialData;\n }\n if (typeof latestError === 'undefined') {\n latestError = initialError;\n }\n if (typeof latestData === 'undefined' &&\n typeof latestError === 'undefined') {\n // need to start the request if it hasn't\n if (!CONCURRENT_PROMISES[key]) {\n // trigger revalidate immediately\n // to get the promise\n // in this revalidate, should not rerender\n revalidate();\n }\n if (CONCURRENT_PROMISES[key] &&\n typeof CONCURRENT_PROMISES[key].then === 'function') {\n // if it is a promise\n throw CONCURRENT_PROMISES[key];\n }\n // it's a value, return it directly (override)\n latestData = CONCURRENT_PROMISES[key];\n }\n if (typeof latestData === 'undefined' && latestError) {\n // in suspense mode, throw error if there's no content\n throw latestError;\n }\n }\n // define returned state\n // can be memorized since the state is a ref\n var memoizedState = useMemo(function () {\n // revalidate will be deprecated in the 1.x release\n // because mutate() covers the same use case of revalidate().\n // This remains only for backward compatibility\n var state = { revalidate: revalidate, mutate: boundMutate };\n Object.defineProperties(state, {\n error: {\n // `key` might be changed in the upcoming hook re-render,\n // but the previous state will stay\n // so we need to match the latest key and data (fallback to `initialData`)\n get: function () {\n stateDependencies.current.error = true;\n if (config.suspense) {\n return latestError;\n }\n return keyRef.current === key ? stateRef.current.error : initialError;\n },\n enumerable: true\n },\n data: {\n get: function () {\n stateDependencies.current.data = true;\n if (config.suspense) {\n return latestData;\n }\n return keyRef.current === key ? stateRef.current.data : initialData;\n },\n enumerable: true\n },\n isValidating: {\n get: function () {\n stateDependencies.current.isValidating = true;\n return key ? stateRef.current.isValidating : false;\n },\n enumerable: true\n }\n });\n return state;\n // `config.suspense` isn't allowed to change during the lifecycle.\n // `boundMutate` is immutable, and the immutability of `revalidate` depends on `key`\n // so we can omit them from the deps array,\n // but we put it to enable react-hooks/exhaustive-deps rule.\n // `initialData` and `initialError` are not initial values\n // because they are changed during the lifecycle\n // so we should add them in the deps array.\n }, [\n revalidate,\n initialData,\n initialError,\n boundMutate,\n key,\n config.suspense,\n latestError,\n latestData\n ]);\n return memoizedState;\n}\nObject.defineProperty(SWRConfigContext.Provider, 'default', {\n value: defaultConfig\n});\nvar SWRConfig = SWRConfigContext.Provider;\nexport { trigger, mutate, SWRConfig };\nexport default useSWR;\n","// `useSWR` and related APIs\nimport { default as useSWR } from './use-swr';\nexport default useSWR;\nexport * from './use-swr';\n// `useSWRInfinite`\nexport { useSWRInfinite } from './use-swr-infinite';\n// Cache related, to be replaced by the new APIs\nexport { cache } from './config';\n","export const SDK_VERSION = '6.19.2';\n","import { Event, EventProcessor, Hub, Integration, StackFrame } from '@sentry/types';\nimport { getEventDescription, isDebugBuild, isMatchingPattern, logger } from '@sentry/utils';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n\n/** Options for the InboundFilters integration */\nexport interface InboundFiltersOptions {\n allowUrls: Array;\n denyUrls: Array;\n ignoreErrors: Array;\n ignoreInternal: boolean;\n\n /** @deprecated use {@link InboundFiltersOptions.allowUrls} instead. */\n whitelistUrls: Array;\n /** @deprecated use {@link InboundFiltersOptions.denyUrls} instead. */\n blacklistUrls: Array;\n}\n\n/** Inbound filters configurable by the user */\nexport class InboundFilters implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'InboundFilters';\n\n /**\n * @inheritDoc\n */\n public name: string = InboundFilters.id;\n\n public constructor(private readonly _options: Partial = {}) {}\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (processor: EventProcessor) => void, getCurrentHub: () => Hub): void {\n addGlobalEventProcessor((event: Event) => {\n const hub = getCurrentHub();\n if (hub) {\n const self = hub.getIntegration(InboundFilters);\n if (self) {\n const client = hub.getClient();\n const clientOptions = client ? client.getOptions() : {};\n const options = _mergeOptions(self._options, clientOptions);\n return _shouldDropEvent(event, options) ? null : event;\n }\n }\n return event;\n });\n }\n}\n\n/** JSDoc */\nexport function _mergeOptions(\n internalOptions: Partial = {},\n clientOptions: Partial = {},\n): Partial {\n return {\n allowUrls: [\n // eslint-disable-next-line deprecation/deprecation\n ...(internalOptions.whitelistUrls || []),\n ...(internalOptions.allowUrls || []),\n // eslint-disable-next-line deprecation/deprecation\n ...(clientOptions.whitelistUrls || []),\n ...(clientOptions.allowUrls || []),\n ],\n denyUrls: [\n // eslint-disable-next-line deprecation/deprecation\n ...(internalOptions.blacklistUrls || []),\n ...(internalOptions.denyUrls || []),\n // eslint-disable-next-line deprecation/deprecation\n ...(clientOptions.blacklistUrls || []),\n ...(clientOptions.denyUrls || []),\n ],\n ignoreErrors: [\n ...(internalOptions.ignoreErrors || []),\n ...(clientOptions.ignoreErrors || []),\n ...DEFAULT_IGNORE_ERRORS,\n ],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\n/** JSDoc */\nexport function _shouldDropEvent(event: Event, options: Partial): boolean {\n if (options.ignoreInternal && _isSentryError(event)) {\n isDebugBuild() &&\n logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n return true;\n }\n if (_isIgnoredError(event, options.ignoreErrors)) {\n isDebugBuild() &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n isDebugBuild() &&\n logger.warn(\n `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n if (!_isAllowedUrl(event, options.allowUrls)) {\n isDebugBuild() &&\n logger.warn(\n `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array): boolean {\n if (!ignoreErrors || !ignoreErrors.length) {\n return false;\n }\n\n return _getPossibleEventMessages(event).some(message =>\n ignoreErrors.some(pattern => isMatchingPattern(message, pattern)),\n );\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array): boolean {\n // TODO: Use Glob instead?\n if (!denyUrls || !denyUrls.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : denyUrls.some(pattern => isMatchingPattern(url, pattern));\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array): boolean {\n // TODO: Use Glob instead?\n if (!allowUrls || !allowUrls.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : allowUrls.some(pattern => isMatchingPattern(url, pattern));\n}\n\nfunction _getPossibleEventMessages(event: Event): string[] {\n if (event.message) {\n return [event.message];\n }\n if (event.exception) {\n try {\n const { type = '', value = '' } = (event.exception.values && event.exception.values[0]) || {};\n return [`${value}`, `${type}: ${value}`];\n } catch (oO) {\n isDebugBuild() && logger.error(`Cannot extract message for event ${getEventDescription(event)}`);\n return [];\n }\n }\n return [];\n}\n\nfunction _isSentryError(event: Event): boolean {\n try {\n // @ts-ignore can't be a sentry error if undefined\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return event.exception.values[0].type === 'SentryError';\n } catch (e) {\n // ignore\n }\n return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n\n if (frame && frame.filename !== '' && frame.filename !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n try {\n if (event.stacktrace) {\n return _getLastValidUrl(event.stacktrace.frames);\n }\n let frames;\n try {\n // @ts-ignore we only care about frames if the whole thing here is defined\n frames = event.exception.values[0].stacktrace.frames;\n } catch (e) {\n // ignore\n }\n return frames ? _getLastValidUrl(frames) : null;\n } catch (oO) {\n isDebugBuild() && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\n","import { Integration, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\n\nlet originalFunctionToString: () => void;\n\n/** Patch toString calls to return proper name for wrapped functions */\nexport class FunctionToString implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'FunctionToString';\n\n /**\n * @inheritDoc\n */\n public name: string = FunctionToString.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n originalFunctionToString = Function.prototype.toString;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Function.prototype.toString = function (this: WrappedFunction, ...args: any[]): string {\n const context = getOriginalFunction(this) || this;\n return originalFunctionToString.apply(context, args);\n };\n }\n}\n","export const setPrototypeOf =\n Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties);\n\n/**\n * setPrototypeOf polyfill using __proto__\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction setProtoOf(obj: TTarget, proto: TProto): TTarget & TProto {\n // @ts-ignore __proto__ does not exist on obj\n obj.__proto__ = proto;\n return obj as TTarget & TProto;\n}\n\n/**\n * setPrototypeOf polyfill using mixin\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction mixinProperties(obj: TTarget, proto: TProto): TTarget & TProto {\n for (const prop in proto) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n // @ts-ignore typescript complains about indexing so we remove\n obj[prop] = proto[prop];\n }\n }\n\n return obj as TTarget & TProto;\n}\n","import { setPrototypeOf } from './polyfill';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n /** Display name of this error instance. */\n public name: string;\n\n public constructor(public message: string) {\n super(message);\n\n this.name = new.target.prototype.constructor.name;\n setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { isDebugBuild } from './env';\nimport { SentryError } from './error';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return (\n `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n );\n}\n\nfunction dsnFromString(str: string): DsnComponents {\n const match = DSN_REGEX.exec(str);\n\n if (!match) {\n throw new SentryError(`Invalid Sentry Dsn: ${str}`);\n }\n\n const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n let path = '';\n let projectId = lastPath;\n\n const split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop() as string;\n }\n\n if (projectId) {\n const projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n // TODO this is for backwards compatibility, and can be removed in a future version\n if ('user' in components && !('publicKey' in components)) {\n components.publicKey = components.user;\n }\n\n return {\n user: components.publicKey || '',\n protocol: components.protocol,\n publicKey: components.publicKey || '',\n pass: components.pass || '',\n host: components.host,\n port: components.port || '',\n path: components.path || '',\n projectId: components.projectId,\n };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean | void {\n if (!isDebugBuild()) {\n return;\n }\n\n const { port, projectId, protocol } = dsn;\n\n const requiredComponents: ReadonlyArray = ['protocol', 'publicKey', 'host', 'projectId'];\n requiredComponents.forEach(component => {\n if (!dsn[component]) {\n throw new SentryError(`Invalid Sentry Dsn: ${component} missing`);\n }\n });\n\n if (!projectId.match(/^\\d+$/)) {\n throw new SentryError(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n }\n\n if (!isValidProtocol(protocol)) {\n throw new SentryError(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n }\n\n if (port && isNaN(parseInt(port, 10))) {\n throw new SentryError(`Invalid Sentry Dsn: Invalid port ${port}`);\n }\n\n return true;\n}\n\n/** The Sentry Dsn, identifying a Sentry instance and project. */\nexport function makeDsn(from: DsnLike): DsnComponents {\n const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n\n validateDsn(components);\n\n return components;\n}\n","import { isPrimitive, isSyntheticEvent } from './is';\nimport { memoBuilder, MemoFunc } from './memo';\nimport { getWalkSource } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype UnknownMaybeWithToJson = unknown & { toJSON?: () => string };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output..\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\nexport function normalize(input: unknown, depth: number = +Infinity, maxProperties: number = +Infinity): any {\n try {\n // since we're at the outermost level, there is no key\n return walk('', input as UnknownMaybeWithToJson, depth, maxProperties);\n } catch (_oO) {\n return '**non-serializable**';\n }\n}\n\n/** JSDoc */\nexport function normalizeToSize(\n object: { [key: string]: any },\n // Default Node.js REPL depth\n depth: number = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize: number = 100 * 1024,\n): T {\n const serialized = normalize(object, depth);\n\n if (jsonSize(serialized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return serialized as T;\n}\n\n/**\n * Walks an object to perform a normalization on it\n *\n * @param key of object that's walked in current iteration\n * @param value object to be walked\n * @param depth Optional number indicating how deep should walking be performed\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nexport function walk(\n key: string,\n value: UnknownMaybeWithToJson,\n depth: number = +Infinity,\n maxProperties: number = +Infinity,\n memo: MemoFunc = memoBuilder(),\n): unknown {\n const [memoize, unmemoize] = memo;\n\n // If we reach the maximum depth, serialize whatever is left\n if (depth === 0) {\n return serializeValue(value);\n }\n\n // If value implements `toJSON` method, call it and return early\n if (value !== null && value !== undefined && typeof value.toJSON === 'function') {\n return value.toJSON();\n }\n\n // `makeSerializable` provides a string representation of certain non-serializable values. For all others, it's a\n // pass-through. If what comes back is a primitive (either because it's been stringified or because it was primitive\n // all along), we're done.\n const serializable = makeSerializable(value, key);\n if (isPrimitive(serializable)) {\n return serializable;\n }\n\n // Create source that we will use for the next iteration. It will either be an objectified error object (`Error` type\n // with extracted key:value pairs) or the input itself.\n const source = getWalkSource(value);\n\n // Create an accumulator that will act as a parent for all future itterations of that branch\n const acc: { [key: string]: any } = Array.isArray(value) ? [] : {};\n\n // If we already walked that branch, bail out, as it's circular reference\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n let propertyCount = 0;\n // Walk all keys of the source\n for (const innerKey in source) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(source, innerKey)) {\n continue;\n }\n\n if (propertyCount >= maxProperties) {\n acc[innerKey] = '[MaxProperties ~]';\n break;\n }\n\n propertyCount += 1;\n\n // Recursively walk through all the child nodes\n const innerValue: UnknownMaybeWithToJson = source[innerKey];\n acc[innerKey] = walk(innerKey, innerValue, depth - 1, maxProperties, memo);\n }\n\n // Once walked through all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return acc;\n}\n\n/**\n * Transform any non-primitive, BigInt, or Symbol-type value into a string. Acts as a no-op on strings, numbers,\n * booleans, null, and undefined.\n *\n * @param value The value to stringify\n * @returns For non-primitive, BigInt, and Symbol-type values, a string denoting the value's type, type and value, or\n * type and `description` property, respectively. For non-BigInt, non-Symbol primitives, returns the original value,\n * unchanged.\n */\nfunction serializeValue(value: any): any {\n // Node.js REPL notation\n if (typeof value === 'string') {\n return value;\n }\n\n const type = Object.prototype.toString.call(value);\n if (type === '[object Object]') {\n return '[Object]';\n }\n if (type === '[object Array]') {\n return '[Array]';\n }\n\n // `makeSerializable` provides a string representation of certain non-serializable values. For all others, it's a\n // pass-through.\n const serializable = makeSerializable(value);\n return isPrimitive(serializable) ? serializable : type;\n}\n\n/**\n * makeSerializable()\n *\n * Takes unserializable input and make it serializer-friendly.\n *\n * Handles globals, functions, `undefined`, `NaN`, and other non-serializable values.\n */\nfunction makeSerializable(value: T, key?: any): T | string {\n if (key === 'domain' && value && typeof value === 'object' && (value as unknown as { _events: any })._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n if (typeof (global as any) !== 'undefined' && (value as unknown) === global) {\n return '[Global]';\n }\n\n // It's safe to use `window` and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof (window as any) !== 'undefined' && (value as unknown) === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof (document as any) !== 'undefined' && (value as unknown) === document) {\n return '[Document]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n if (value === void 0) {\n return '[undefined]';\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n // symbols and bigints are considered primitives by TS, but aren't natively JSON-serilaizable\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n return value;\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\nfunction jsonSize(value: any): number {\n return utf8Length(JSON.stringify(value));\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n // memoize\n (obj: any) => boolean,\n // unmemoize\n (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder(): MemoFunc {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner: any = hasWeakSet ? new WeakSet() : [];\n function memoize(obj: any): boolean {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj: any): void {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';\nimport { Integration, Options } from '@sentry/types';\nimport { addNonEnumerableProperty, isDebugBuild, logger } from '@sentry/utils';\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n [key: string]: Integration;\n} & { initialized?: boolean };\n\n/**\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n return integrations.reduce((acc, integrations) => {\n if (acc.every(accIntegration => integrations.name !== accIntegration.name)) {\n acc.push(integrations);\n }\n return acc;\n }, [] as Integration[]);\n}\n\n/** Gets integration to install */\nexport function getIntegrationsToSetup(options: Options): Integration[] {\n const defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || [];\n const userIntegrations = options.integrations;\n\n let integrations: Integration[] = [...filterDuplicates(defaultIntegrations)];\n\n if (Array.isArray(userIntegrations)) {\n // Filter out integrations that are also included in user options\n integrations = [\n ...integrations.filter(integrations =>\n userIntegrations.every(userIntegration => userIntegration.name !== integrations.name),\n ),\n // And filter out duplicated user options integrations\n ...filterDuplicates(userIntegrations),\n ];\n } else if (typeof userIntegrations === 'function') {\n integrations = userIntegrations(integrations);\n integrations = Array.isArray(integrations) ? integrations : [integrations];\n }\n\n // Make sure that if present, `Debug` integration will always run last\n const integrationsNames = integrations.map(i => i.name);\n const alwaysLastToRun = 'Debug';\n if (integrationsNames.indexOf(alwaysLastToRun) !== -1) {\n integrations.push(...integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1));\n }\n\n return integrations;\n}\n\n/** Setup given integration */\nexport function setupIntegration(integration: Integration): void {\n if (installedIntegrations.indexOf(integration.name) !== -1) {\n return;\n }\n integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n installedIntegrations.push(integration.name);\n isDebugBuild() && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(options: O): IntegrationIndex {\n const integrations: IntegrationIndex = {};\n getIntegrationsToSetup(options).forEach(integration => {\n integrations[integration.name] = integration;\n setupIntegration(integration);\n });\n // set the `initialized` flag so we don't run through the process again unecessarily; use `Object.defineProperty`\n // because by default it creates a property which is nonenumerable, which we want since `initialized` shouldn't be\n // considered a member of the index the way the actual integrations are\n addNonEnumerableProperty(integrations, 'initialized', true);\n return integrations;\n}\n","/* eslint-disable max-lines */\nimport { Scope, Session } from '@sentry/hub';\nimport {\n Client,\n DsnComponents,\n Event,\n EventHint,\n Integration,\n IntegrationClass,\n Options,\n Severity,\n Transport,\n} from '@sentry/types';\nimport {\n checkOrSetAlreadyCaught,\n dateTimestampInSeconds,\n isDebugBuild,\n isPlainObject,\n isPrimitive,\n isThenable,\n logger,\n makeDsn,\n normalize,\n rejectedSyncPromise,\n resolvedSyncPromise,\n SentryError,\n SyncPromise,\n truncate,\n uuid4,\n} from '@sentry/utils';\n\nimport { Backend, BackendClass } from './basebackend';\nimport { IntegrationIndex, setupIntegrations } from './integration';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding backend constructor and options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}. Also, the Backend instance is available via\n * {@link Client.getBackend}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event via the backend, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient {\n * public constructor(options: NodeOptions) {\n * super(NodeBackend, options);\n * }\n *\n * // ...\n * }\n */\nexport abstract class BaseClient implements Client {\n /**\n * The backend used to physically interact in the environment. Usually, this\n * will correspond to the client. When composing SDKs, however, the Backend\n * from the root SDK will be used.\n */\n protected readonly _backend: B;\n\n /** Options passed to the SDK. */\n protected readonly _options: O;\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n protected readonly _dsn?: DsnComponents;\n\n /** Array of used integrations. */\n protected _integrations: IntegrationIndex = {};\n\n /** Number of calls being processed */\n protected _numProcessing: number = 0;\n\n /**\n * Initializes this client instance.\n *\n * @param backendClass A constructor function to create the backend.\n * @param options Options for the client.\n */\n protected constructor(backendClass: BackendClass, options: O) {\n this._backend = new backendClass(options);\n this._options = options;\n\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n }\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n isDebugBuild() && logger.log(ALREADY_SEEN_ERROR);\n return;\n }\n\n let eventId: string | undefined = hint && hint.event_id;\n\n this._process(\n this._getBackend()\n .eventFromException(exception, hint)\n .then(event => this._captureEvent(event, hint, scope))\n .then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(message: string, level?: Severity, hint?: EventHint, scope?: Scope): string | undefined {\n let eventId: string | undefined = hint && hint.event_id;\n\n const promisedEvent = isPrimitive(message)\n ? this._getBackend().eventFromMessage(String(message), level, hint)\n : this._getBackend().eventFromException(message, hint);\n\n this._process(\n promisedEvent\n .then(event => this._captureEvent(event, hint, scope))\n .then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n isDebugBuild() && logger.log(ALREADY_SEEN_ERROR);\n return;\n }\n\n let eventId: string | undefined = hint && hint.event_id;\n\n this._process(\n this._captureEvent(event, hint, scope).then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureSession(session: Session): void {\n if (!this._isEnabled()) {\n isDebugBuild() && logger.warn('SDK not enabled, will not capture session.');\n return;\n }\n\n if (!(typeof session.release === 'string')) {\n isDebugBuild() && logger.warn('Discarded session because of missing or non-string release');\n } else {\n this._sendSession(session);\n // After sending, we set init false to indicate it's not the first occurrence\n session.update({ init: false });\n }\n }\n\n /**\n * @inheritDoc\n */\n public getDsn(): DsnComponents | undefined {\n return this._dsn;\n }\n\n /**\n * @inheritDoc\n */\n public getOptions(): O {\n return this._options;\n }\n\n /**\n * @inheritDoc\n */\n public getTransport(): Transport {\n return this._getBackend().getTransport();\n }\n\n /**\n * @inheritDoc\n */\n public flush(timeout?: number): PromiseLike {\n return this._isClientDoneProcessing(timeout).then(clientFinished => {\n return this.getTransport()\n .close(timeout)\n .then(transportFlushed => clientFinished && transportFlushed);\n });\n }\n\n /**\n * @inheritDoc\n */\n public close(timeout?: number): PromiseLike {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n return result;\n });\n }\n\n /**\n * Sets up the integrations\n */\n public setupIntegrations(): void {\n if (this._isEnabled() && !this._integrations.initialized) {\n this._integrations = setupIntegrations(this._options);\n }\n }\n\n /**\n * @inheritDoc\n */\n public getIntegration(integration: IntegrationClass): T | null {\n try {\n return (this._integrations[integration.id] as T) || null;\n } catch (_oO) {\n isDebugBuild() && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n return null;\n }\n }\n\n /** Updates existing session based on the provided event */\n protected _updateSessionFromEvent(session: Session, event: Event): void {\n let crashed = false;\n let errored = false;\n const exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (const ex of exceptions) {\n const mechanism = ex.mechanism;\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n }\n\n // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n const sessionNonTerminal = session.status === 'ok';\n const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n if (shouldUpdateAndSend) {\n session.update({\n ...(crashed && { status: 'crashed' }),\n errors: session.errors || Number(errored || crashed),\n });\n this.captureSession(session);\n }\n }\n\n /** Deliver captured session to Sentry */\n protected _sendSession(session: Session): void {\n this._getBackend().sendSession(session);\n }\n\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n protected _isClientDoneProcessing(timeout?: number): PromiseLike {\n return new SyncPromise(resolve => {\n let ticked: number = 0;\n const tick: number = 1;\n\n const interval = setInterval(() => {\n if (this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n }\n\n /** Returns the current backend. */\n protected _getBackend(): B {\n return this._backend;\n }\n\n /** Determines whether this SDK is enabled and a valid Dsn is present. */\n protected _isEnabled(): boolean {\n return this.getOptions().enabled !== false && this._dsn !== undefined;\n }\n\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n */\n protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): PromiseLike {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = this.getOptions();\n const prepared: Event = {\n ...event,\n event_id: event.event_id || (hint && hint.event_id ? hint.event_id : uuid4()),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n\n this._applyClientOptions(prepared);\n this._applyIntegrationsMetadata(prepared);\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n let finalScope = scope;\n if (hint && hint.captureContext) {\n finalScope = Scope.clone(finalScope).update(hint.captureContext);\n }\n\n // We prepare the result here with a resolved Event.\n let result = resolvedSyncPromise(prepared);\n\n // This should be the last thing called, since we want that\n // {@link Hub.addEventProcessor} gets the finished prepared event.\n if (finalScope) {\n // In case we have a hub we reassign it.\n result = finalScope.applyToEvent(prepared, hint);\n }\n\n return result.then(evt => {\n if (evt) {\n // TODO this is more of the hack trying to solve https://github.com/getsentry/sentry-javascript/issues/2809\n // it is only attached as extra data to the event if the event somehow skips being normalized\n evt.sdkProcessingMetadata = { ...evt.sdkProcessingMetadata, normalizeDepth: normalize(normalizeDepth) };\n }\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return this._normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n }\n\n /**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\n protected _normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n if (!event) {\n return null;\n }\n\n const normalized = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n normalized.contexts.trace = event.contexts.trace;\n }\n\n event.sdkProcessingMetadata = { ...event.sdkProcessingMetadata, baseClientNormalized: true };\n\n return normalized;\n }\n\n /**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\n protected _applyClientOptions(event: Event): void {\n const options = this.getOptions();\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : 'production';\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n }\n\n /**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\n protected _applyIntegrationsMetadata(event: Event): void {\n const integrationsArray = Object.keys(this._integrations);\n if (integrationsArray.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationsArray];\n }\n }\n\n /**\n * Tells the backend to send this event\n * @param event The Sentry event to send\n */\n protected _sendEvent(event: Event): void {\n this._getBackend().sendEvent(event);\n }\n\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n protected _captureEvent(event: Event, hint?: EventHint, scope?: Scope): PromiseLike {\n return this._processEvent(event, hint, scope).then(\n finalEvent => {\n return finalEvent.event_id;\n },\n reason => {\n isDebugBuild() && logger.error(reason);\n return undefined;\n },\n );\n }\n\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n protected _processEvent(event: Event, hint?: EventHint, scope?: Scope): PromiseLike {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { beforeSend, sampleRate } = this.getOptions();\n const transport = this.getTransport();\n\n type RecordLostEvent = NonNullable;\n type RecordLostEventParams = Parameters;\n\n function recordLostEvent(outcome: RecordLostEventParams[0], category: RecordLostEventParams[1]): void {\n if (transport.recordLostEvent) {\n transport.recordLostEvent(outcome, category);\n }\n }\n\n if (!this._isEnabled()) {\n return rejectedSyncPromise(new SentryError('SDK not enabled, will not capture event.'));\n }\n\n const isTransaction = event.type === 'transaction';\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n if (!isTransaction && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n recordLostEvent('sample_rate', 'event');\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n ),\n );\n }\n\n return this._prepareEvent(event, scope, hint)\n .then(prepared => {\n if (prepared === null) {\n recordLostEvent('event_processor', event.type || 'event');\n throw new SentryError('An event processor returned null, will not send event.');\n }\n\n const isInternalException = hint && hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n if (isInternalException || isTransaction || !beforeSend) {\n return prepared;\n }\n\n const beforeSendResult = beforeSend(prepared, hint);\n return _ensureBeforeSendRv(beforeSendResult);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n recordLostEvent('before_send', event.type || 'event');\n throw new SentryError('`beforeSend` returned `null`, will not send event.');\n }\n\n const session = scope && scope.getSession && scope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n this._sendEvent(processedEvent);\n return processedEvent;\n })\n .then(null, reason => {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n this.captureException(reason, {\n data: {\n __sentry__: true,\n },\n originalException: reason as Error,\n });\n throw new SentryError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n );\n });\n }\n\n /**\n * Occupies the client with processing and event\n */\n protected _process(promise: PromiseLike): void {\n this._numProcessing += 1;\n void promise.then(\n value => {\n this._numProcessing -= 1;\n return value;\n },\n reason => {\n this._numProcessing -= 1;\n return reason;\n },\n );\n }\n}\n\n/**\n * Verifies that return value of configured `beforeSend` is of expected type.\n */\nfunction _ensureBeforeSendRv(rv: PromiseLike | Event | null): PromiseLike | Event | null {\n const nullErr = '`beforeSend` method has to return `null` or a valid event.';\n if (isThenable(rv)) {\n return rv.then(\n event => {\n if (!(isPlainObject(event) || event === null)) {\n throw new SentryError(nullErr);\n }\n return event;\n },\n e => {\n throw new SentryError(`beforeSend rejected with ${e}`);\n },\n );\n } else if (!(isPlainObject(rv) || rv === null)) {\n throw new SentryError(nullErr);\n }\n return rv;\n}\n","import { DsnComponents, DsnLike, SdkMetadata } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/**\n * Stores details about a Sentry SDK\n */\nexport interface APIDetails {\n /** The DSN as passed to Sentry.init() */\n initDsn: DsnLike;\n /** Metadata about the SDK (name, version, etc) for inclusion in envelope headers */\n metadata: SdkMetadata;\n /** The internally used Dsn object. */\n readonly dsn: DsnComponents;\n /** The envelope tunnel to use. */\n readonly tunnel?: string;\n}\n\n/**\n * Helper class to provide urls, headers and metadata that can be used to form\n * different types of requests to Sentry endpoints.\n * Supports both envelopes and regular event requests.\n *\n * @deprecated Please use APIDetails\n **/\nexport class API {\n /** The DSN as passed to Sentry.init() */\n public dsn: DsnLike;\n\n /** Metadata about the SDK (name, version, etc) for inclusion in envelope headers */\n public metadata: SdkMetadata;\n\n /** The internally used Dsn object. */\n private readonly _dsnObject: DsnComponents;\n\n /** The envelope tunnel to use. */\n private readonly _tunnel?: string;\n\n /** Create a new instance of API */\n public constructor(dsn: DsnLike, metadata: SdkMetadata = {}, tunnel?: string) {\n this.dsn = dsn;\n this._dsnObject = makeDsn(dsn);\n this.metadata = metadata;\n this._tunnel = tunnel;\n }\n\n /** Returns the Dsn object. */\n public getDsn(): DsnComponents {\n return this._dsnObject;\n }\n\n /** Does this transport force envelopes? */\n public forceEnvelope(): boolean {\n return !!this._tunnel;\n }\n\n /** Returns the prefix to construct Sentry ingestion API endpoints. */\n public getBaseApiEndpoint(): string {\n return getBaseApiEndpoint(this._dsnObject);\n }\n\n /** Returns the store endpoint URL. */\n public getStoreEndpoint(): string {\n return getStoreEndpoint(this._dsnObject);\n }\n\n /**\n * Returns the store endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\n public getStoreEndpointWithUrlEncodedAuth(): string {\n return getStoreEndpointWithUrlEncodedAuth(this._dsnObject);\n }\n\n /**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\n public getEnvelopeEndpointWithUrlEncodedAuth(): string {\n return getEnvelopeEndpointWithUrlEncodedAuth(this._dsnObject, this._tunnel);\n }\n}\n\n/** Initializes API Details */\nexport function initAPIDetails(dsn: DsnLike, metadata?: SdkMetadata, tunnel?: string): APIDetails {\n return {\n initDsn: dsn,\n metadata: metadata || {},\n dsn: makeDsn(dsn),\n tunnel,\n } as APIDetails;\n}\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n const port = dsn.port ? `:${dsn.port}` : '';\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents, target: 'store' | 'envelope'): string {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/${target}/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents): string {\n return urlEncode({\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n sentry_key: dsn.publicKey,\n sentry_version: SENTRY_API_VERSION,\n });\n}\n\n/** Returns the store endpoint URL. */\nfunction getStoreEndpoint(dsn: DsnComponents): string {\n return _getIngestEndpoint(dsn, 'store');\n}\n\n/**\n * Returns the store endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getStoreEndpointWithUrlEncodedAuth(dsn: DsnComponents): string {\n return `${getStoreEndpoint(dsn)}?${_encodedAuth(dsn)}`;\n}\n\n/** Returns the envelope endpoint URL. */\nfunction _getEnvelopeEndpoint(dsn: DsnComponents): string {\n return _getIngestEndpoint(dsn, 'envelope');\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(dsn: DsnComponents, tunnel?: string): string {\n return tunnel ? tunnel : `${_getEnvelopeEndpoint(dsn)}?${_encodedAuth(dsn)}`;\n}\n\n/**\n * Returns an object that can be used in request headers.\n * This is needed for node and the old /store endpoint in sentry\n */\nexport function getRequestHeaders(\n dsn: DsnComponents,\n clientName: string,\n clientVersion: string,\n): { [key: string]: string } {\n // CHANGE THIS to use metadata but keep clientName and clientVersion compatible\n const header = [`Sentry sentry_version=${SENTRY_API_VERSION}`];\n header.push(`sentry_client=${clientName}/${clientVersion}`);\n header.push(`sentry_key=${dsn.publicKey}`);\n if (dsn.pass) {\n header.push(`sentry_secret=${dsn.pass}`);\n }\n return {\n 'Content-Type': 'application/json',\n 'X-Sentry-Auth': header.join(', '),\n };\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n dsnLike: DsnLike,\n dialogOptions: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n user?: { name?: string; email?: string };\n },\n): string {\n const dsn = makeDsn(dsnLike);\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'user') {\n if (!dialogOptions.user) {\n continue;\n }\n if (dialogOptions.user.name) {\n encodedOptions += `&name=${encodeURIComponent(dialogOptions.user.name)}`;\n }\n if (dialogOptions.user.email) {\n encodedOptions += `&email=${encodeURIComponent(dialogOptions.user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n","import { Envelope } from '@sentry/types';\n\nimport { isPrimitive } from './is';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope(headers: E[0], items: E[1] = []): E {\n return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope(envelope: E, newItem: E[1][number]): E {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] as E;\n}\n\n/**\n * Get the type of the envelope. Grabs the type from the first envelope item.\n */\nexport function getEnvelopeType(envelope: E): string {\n const [, [[firstItemHeader]]] = envelope;\n return firstItemHeader.type;\n}\n\n/**\n * Serializes an envelope into a string.\n */\nexport function serializeEnvelope(envelope: Envelope): string {\n const [headers, items] = envelope;\n const serializedHeaders = JSON.stringify(headers);\n\n // Have to cast items to any here since Envelope is a union type\n // Fixed in Typescript 4.2\n // TODO: Remove any[] cast when we upgrade to TS 4.2\n // https://github.com/microsoft/TypeScript/issues/36390\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (items as any[]).reduce((acc, item: typeof items[number]) => {\n const [itemHeaders, payload] = item;\n // We do not serialize payloads that are primitives\n const serializedPayload = isPrimitive(payload) ? String(payload) : JSON.stringify(payload);\n return `${acc}\\n${JSON.stringify(itemHeaders)}\\n${serializedPayload}`;\n }, serializedHeaders);\n}\n","import {\n Event,\n EventEnvelope,\n EventItem,\n SdkInfo,\n SentryRequest,\n SentryRequestType,\n Session,\n SessionAggregates,\n SessionEnvelope,\n SessionItem,\n} from '@sentry/types';\nimport { createEnvelope, dsnToString, normalize, serializeEnvelope } from '@sentry/utils';\n\nimport { APIDetails, getEnvelopeEndpointWithUrlEncodedAuth, getStoreEndpointWithUrlEncodedAuth } from './api';\n\n/** Extract sdk info from from the API metadata */\nfunction getSdkMetadataForEnvelopeHeader(api: APIDetails): SdkInfo | undefined {\n if (!api.metadata || !api.metadata.sdk) {\n return;\n }\n const { name, version } = api.metadata.sdk;\n return { name, version };\n}\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event {\n if (!sdkInfo) {\n return event;\n }\n event.sdk = event.sdk || {};\n event.sdk.name = event.sdk.name || sdkInfo.name;\n event.sdk.version = event.sdk.version || sdkInfo.version;\n event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n return event;\n}\n\n/** Creates an envelope from a Session */\nexport function createSessionEnvelope(\n session: Session | SessionAggregates,\n api: APIDetails,\n): [SessionEnvelope, SentryRequestType] {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(api);\n const envelopeHeaders = {\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!api.tunnel && { dsn: dsnToString(api.dsn) }),\n };\n\n // I know this is hacky but we don't want to add `sessions` to request type since it's never rate limited\n const type = 'aggregates' in session ? ('sessions' as SentryRequestType) : 'session';\n\n // TODO (v7) Have to cast type because envelope items do not accept a `SentryRequestType`\n const envelopeItem = [{ type } as { type: 'session' | 'sessions' }, session] as SessionItem;\n const envelope = createEnvelope(envelopeHeaders, [envelopeItem]);\n\n return [envelope, type];\n}\n\n/** Creates a SentryRequest from a Session. */\nexport function sessionToSentryRequest(session: Session | SessionAggregates, api: APIDetails): SentryRequest {\n const [envelope, type] = createSessionEnvelope(session, api);\n return {\n body: serializeEnvelope(envelope),\n type,\n url: getEnvelopeEndpointWithUrlEncodedAuth(api.dsn, api.tunnel),\n };\n}\n\n/**\n * Create an Envelope from an event. Note that this is duplicated from below,\n * but on purpose as this will be refactored in v7.\n */\nexport function createEventEnvelope(event: Event, api: APIDetails): EventEnvelope {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(api);\n const eventType = event.type || 'event';\n\n const { transactionSampling } = event.sdkProcessingMetadata || {};\n const { method: samplingMethod, rate: sampleRate } = transactionSampling || {};\n\n const envelopeHeaders = {\n event_id: event.event_id as string,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!api.tunnel && { dsn: dsnToString(api.dsn) }),\n };\n const eventItem: EventItem = [\n {\n type: eventType,\n sample_rates: [{ id: samplingMethod, rate: sampleRate }],\n },\n event,\n ];\n return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\n/** Creates a SentryRequest from an event. */\nexport function eventToSentryRequest(event: Event, api: APIDetails): SentryRequest {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(api);\n const eventType = event.type || 'event';\n const useEnvelope = eventType === 'transaction' || !!api.tunnel;\n\n const { transactionSampling } = event.sdkProcessingMetadata || {};\n const { method: samplingMethod, rate: sampleRate } = transactionSampling || {};\n\n // TODO: Below is a temporary hack in order to debug a serialization error - see\n // https://github.com/getsentry/sentry-javascript/issues/2809,\n // https://github.com/getsentry/sentry-javascript/pull/4425, and\n // https://github.com/getsentry/sentry-javascript/pull/4574.\n //\n // TL; DR: even though we normalize all events (which should prevent this), something is causing `JSON.stringify` to\n // throw a circular reference error.\n //\n // When it's time to remove it:\n // 1. Delete everything between here and where the request object `req` is created, EXCEPT the line deleting\n // `sdkProcessingMetadata`\n // 2. Restore the original version of the request body, which is commented out\n // 3. Search for either of the PR URLs above and pull out the companion hacks in the browser playwright tests and the\n // baseClient tests in this package\n enhanceEventWithSdkInfo(event, api.metadata.sdk);\n event.tags = event.tags || {};\n event.extra = event.extra || {};\n\n // In theory, all events should be marked as having gone through normalization and so\n // we should never set this tag/extra data\n if (!(event.sdkProcessingMetadata && event.sdkProcessingMetadata.baseClientNormalized)) {\n event.tags.skippedNormalization = true;\n event.extra.normalizeDepth = event.sdkProcessingMetadata ? event.sdkProcessingMetadata.normalizeDepth : 'unset';\n }\n\n // prevent this data from being sent to sentry\n // TODO: This is NOT part of the hack - DO NOT DELETE\n delete event.sdkProcessingMetadata;\n\n let body;\n try {\n // 99.9% of events should get through just fine - no change in behavior for them\n body = JSON.stringify(event);\n } catch (err) {\n // Record data about the error without replacing original event data, then force renormalization\n event.tags.JSONStringifyError = true;\n event.extra.JSONStringifyError = err;\n try {\n body = JSON.stringify(normalize(event));\n } catch (newErr) {\n // At this point even renormalization hasn't worked, meaning something about the event data has gone very wrong.\n // Time to cut our losses and record only the new error. With luck, even in the problematic cases we're trying to\n // debug with this hack, we won't ever land here.\n const innerErr = newErr as Error;\n body = JSON.stringify({\n message: 'JSON.stringify error after renormalization',\n // setting `extra: { innerErr }` here for some reason results in an empty object, so unpack manually\n extra: { message: innerErr.message, stack: innerErr.stack },\n });\n }\n }\n\n const req: SentryRequest = {\n // this is the relevant line of code before the hack was added, to make it easy to undo said hack once we've solved\n // the mystery\n // body: JSON.stringify(sdkInfo ? enhanceEventWithSdkInfo(event, api.metadata.sdk) : event),\n body,\n type: eventType,\n url: useEnvelope\n ? getEnvelopeEndpointWithUrlEncodedAuth(api.dsn, api.tunnel)\n : getStoreEndpointWithUrlEncodedAuth(api.dsn),\n };\n\n // https://develop.sentry.dev/sdk/envelopes/\n\n // Since we don't need to manipulate envelopes nor store them, there is no\n // exported concept of an Envelope with operations including serialization and\n // deserialization. Instead, we only implement a minimal subset of the spec to\n // serialize events inline here.\n if (useEnvelope) {\n const envelopeHeaders = {\n event_id: event.event_id as string,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!api.tunnel && { dsn: dsnToString(api.dsn) }),\n };\n const eventItem: EventItem = [\n {\n type: eventType,\n sample_rates: [{ id: samplingMethod, rate: sampleRate }],\n },\n req.body,\n ];\n const envelope = createEnvelope(envelopeHeaders, [eventItem]);\n req.body = serializeEnvelope(envelope);\n }\n\n return req;\n}\n","import { Event, Response, Transport } from '@sentry/types';\nimport { resolvedSyncPromise } from '@sentry/utils';\n\n/** Noop transport */\nexport class NoopTransport implements Transport {\n /**\n * @inheritDoc\n */\n public sendEvent(_: Event): PromiseLike {\n return resolvedSyncPromise({\n reason: 'NoopTransport: Event has been skipped because no Dsn is configured.',\n status: 'skipped',\n });\n }\n\n /**\n * @inheritDoc\n */\n public close(_?: number): PromiseLike {\n return resolvedSyncPromise(true);\n }\n}\n","/**\n * TODO(v7): Remove this enum and replace with SeverityLevel\n */\nexport enum Severity {\n /** JSDoc */\n Fatal = 'fatal',\n /** JSDoc */\n Error = 'error',\n /** JSDoc */\n Warning = 'warning',\n /** JSDoc */\n Log = 'log',\n /** JSDoc */\n Info = 'info',\n /** JSDoc */\n Debug = 'debug',\n /** JSDoc */\n Critical = 'critical',\n}\n\n// TODO: in v7, these can disappear, because they now also exist in `@sentry/utils`. (Having them there rather than here\n// is nice because then it enforces the idea that only types are exported from `@sentry/types`.)\nexport const SeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug', 'critical'] as const;\nexport type SeverityLevel = typeof SeverityLevels[number];\n","import { Event, EventHint, Options, Session, Severity, Transport } from '@sentry/types';\nimport { isDebugBuild, logger, SentryError } from '@sentry/utils';\n\nimport { initAPIDetails } from './api';\nimport { createEventEnvelope, createSessionEnvelope } from './request';\nimport { NewTransport } from './transports/base';\nimport { NoopTransport } from './transports/noop';\n\n/**\n * Internal platform-dependent Sentry SDK Backend.\n *\n * While {@link Client} contains business logic specific to an SDK, the\n * Backend offers platform specific implementations for low-level operations.\n * These are persisting and loading information, sending events, and hooking\n * into the environment.\n *\n * Backends receive a handle to the Client in their constructor. When a\n * Backend automatically generates events, it must pass them to\n * the Client for validation and processing first.\n *\n * Usually, the Client will be of corresponding type, e.g. NodeBackend\n * receives NodeClient. However, higher-level SDKs can choose to instantiate\n * multiple Backends and delegate tasks between them. In this case, an event\n * generated by one backend might very well be sent by another one.\n *\n * The client also provides access to options via {@link Client.getOptions}.\n * @hidden\n */\nexport interface Backend {\n /** Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n eventFromException(exception: any, hint?: EventHint): PromiseLike;\n\n /** Creates an {@link Event} from primitive inputs to `captureMessage`. */\n eventFromMessage(message: string, level?: Severity, hint?: EventHint): PromiseLike;\n\n /** Submits the event to Sentry */\n sendEvent(event: Event): void;\n\n /** Submits the session to Sentry */\n sendSession(session: Session): void;\n\n /**\n * Returns the transport that is used by the backend.\n * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n *\n * @returns The transport.\n */\n getTransport(): Transport;\n}\n\n/**\n * A class object that can instantiate Backend objects.\n * @hidden\n */\nexport type BackendClass = new (options: O) => B;\n\n/**\n * This is the base implemention of a Backend.\n * @hidden\n */\nexport abstract class BaseBackend implements Backend {\n /** Options passed to the SDK. */\n protected readonly _options: O;\n\n /** Cached transport used internally. */\n protected _transport: Transport;\n\n /** New v7 Transport that is initialized alongside the old one */\n protected _newTransport?: NewTransport;\n\n /** Creates a new backend instance. */\n public constructor(options: O) {\n this._options = options;\n if (!this._options.dsn) {\n isDebugBuild() && logger.warn('No DSN provided, backend will not do anything.');\n }\n this._transport = this._setupTransport();\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n public eventFromException(_exception: any, _hint?: EventHint): PromiseLike {\n throw new SentryError('Backend has to implement `eventFromException` method');\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(_message: string, _level?: Severity, _hint?: EventHint): PromiseLike {\n throw new SentryError('Backend has to implement `eventFromMessage` method');\n }\n\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event): void {\n // TODO(v7): Remove the if-else\n if (\n this._newTransport &&\n this._options.dsn &&\n this._options._experiments &&\n this._options._experiments.newTransport\n ) {\n const api = initAPIDetails(this._options.dsn, this._options._metadata, this._options.tunnel);\n const env = createEventEnvelope(event, api);\n void this._newTransport.send(env).then(null, reason => {\n isDebugBuild() && logger.error('Error while sending event:', reason);\n });\n } else {\n void this._transport.sendEvent(event).then(null, reason => {\n isDebugBuild() && logger.error('Error while sending event:', reason);\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session): void {\n if (!this._transport.sendSession) {\n isDebugBuild() && logger.warn(\"Dropping session because custom transport doesn't implement sendSession\");\n return;\n }\n\n // TODO(v7): Remove the if-else\n if (\n this._newTransport &&\n this._options.dsn &&\n this._options._experiments &&\n this._options._experiments.newTransport\n ) {\n const api = initAPIDetails(this._options.dsn, this._options._metadata, this._options.tunnel);\n const [env] = createSessionEnvelope(session, api);\n void this._newTransport.send(env).then(null, reason => {\n isDebugBuild() && logger.error('Error while sending session:', reason);\n });\n } else {\n void this._transport.sendSession(session).then(null, reason => {\n isDebugBuild() && logger.error('Error while sending session:', reason);\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n public getTransport(): Transport {\n return this._transport;\n }\n\n /**\n * Sets up the transport so it can be used later to send requests.\n */\n protected _setupTransport(): Transport {\n return new NoopTransport();\n }\n}\n","import { StackFrame } from '@sentry/types';\nimport { StackLineParser, StackLineParserFn } from '@sentry/utils';\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func,\n // All browser frames are considered in_app\n in_app: true,\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n /^\\s*at (?:(.*?) ?\\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack||[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nconst chrome: StackLineParserFn = line => {\n const parts = chromeRegex.exec(line);\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]);\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nexport const chromeStackParser: StackLineParser = [CHROME_PRIORITY, chrome];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n const parts = geckoREgex.exec(line);\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]);\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nexport const geckoStackParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex =\n /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n const parts = winjsRegex.exec(line);\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nexport const winjsStackParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n const parts = opera10Regex.exec(line);\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n const parts = opera11Regex.exec(line);\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n","import { Event, EventHint, Exception, Severity, StackFrame } from '@sentry/types';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n createStackParser,\n extractExceptionKeysForMessage,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/utils';\n\nimport {\n chromeStackParser,\n geckoStackParser,\n opera10StackParser,\n opera11StackParser,\n winjsStackParser,\n} from './stack-parsers';\n\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\nexport function exceptionFromError(ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(ex);\n\n const exception: Exception = {\n type: ex && ex.name,\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n exception: Record,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: `Non-Error ${\n isUnhandledRejection ? 'promise rejection' : 'exception'\n } captured with keys: ${extractExceptionKeysForMessage(exception)}`,\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception),\n },\n };\n\n if (syntheticException) {\n const frames = parseStackFrames(syntheticException);\n if (frames.length) {\n event.stacktrace = { frames };\n }\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(ex: Error & { framesToPop?: number; stacktrace?: string }): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const popSize = getPopSize(ex);\n\n try {\n return createStackParser(\n opera10StackParser,\n opera11StackParser,\n chromeStackParser,\n winjsStackParser,\n geckoStackParser,\n )(stacktrace, popSize);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n }\n\n return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = Severity.Error;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n message: string,\n level: Severity = Severity.Info,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception as DOMError) || isDOMException(exception as DOMException)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(exception as Error);\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception as Error)) {\n // we have a real Error object, do nothing\n return eventFromError(exception as Error);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception as Record;\n event = eventFromPlainObject(objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(exception as string, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(input: string, syntheticException?: Error, attachStacktrace?: boolean): Event {\n const event: Event = {\n message: input,\n };\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(syntheticException);\n if (frames.length) {\n event.stacktrace = { frames };\n }\n }\n\n return event;\n}\n","import { SentryError } from './error';\nimport { rejectedSyncPromise, resolvedSyncPromise, SyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer {\n // exposes the internal array so tests can assert on the state of it.\n // XXX: this really should not be public api.\n $: Array>;\n add(taskProducer: () => PromiseLike): PromiseLike;\n drain(timeout?: number): PromiseLike;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer(limit?: number): PromiseBuffer {\n const buffer: Array> = [];\n\n function isReady(): boolean {\n return limit === undefined || buffer.length < limit;\n }\n\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike\n * @returns Removed promise.\n */\n function remove(task: PromiseLike): PromiseLike {\n return buffer.splice(buffer.indexOf(task), 1)[0];\n }\n\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike; In previous versions this used to be `task:\n * PromiseLike`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n function add(taskProducer: () => PromiseLike): PromiseLike {\n if (!isReady()) {\n return rejectedSyncPromise(new SentryError('Not adding Promise due to buffer limit reached.'));\n }\n\n // start the task and add its promise to the queue\n const task = taskProducer();\n if (buffer.indexOf(task) === -1) {\n buffer.push(task);\n }\n void task\n .then(() => remove(task))\n // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, () =>\n remove(task).then(null, () => {\n // We have to add another catch here because `remove()` starts a new promise chain.\n }),\n );\n return task;\n }\n\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n function drain(timeout?: number): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n let counter = buffer.length;\n\n if (!counter) {\n return resolve(true);\n }\n\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n const capturedSetTimeout = setTimeout(() => {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n\n // if all promises resolve in time, cancel the timer and resolve to `true`\n buffer.forEach(item => {\n void resolvedSyncPromise(item).then(() => {\n // eslint-disable-next-line no-plusplus\n if (!--counter) {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }\n }, reject);\n });\n });\n }\n\n return {\n $: buffer,\n add,\n drain,\n };\n}\n","// Keeping the key broad until we add the new transports\nexport type RateLimits = Record;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that given category is disabled until for rate limiting\n */\nexport function disabledUntil(limits: RateLimits, category: string): number {\n return limits[category] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, category: string, now: number = Date.now()): boolean {\n return disabledUntil(limits, category) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n * Returns true if headers contains a non-empty rate limiting header.\n */\nexport function updateRateLimits(\n limits: RateLimits,\n headers: Record,\n now: number = Date.now(),\n): RateLimits {\n const updatedRateLimits: RateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n const rateLimitHeader = headers['x-sentry-rate-limits'];\n const retryAfterHeader = headers['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n *
,
,..\n * where each
is of the form\n * : : : \n * where\n * is a delay in seconds\n * is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * ;;...\n * is what's being limited (org, project, or key) - ignored by SDK\n * is an arbitrary string like \"org_quota\" - ignored by SDK\n */\n for (const limit of rateLimitHeader.trim().split(',')) {\n const parameters = limit.split(':', 2);\n const headerDelay = parseInt(parameters[0], 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!parameters[1]) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of parameters[1].split(';')) {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n }\n\n return updatedRateLimits;\n}\n","import { forget, getGlobalObject, isDebugBuild, isNativeFetch, logger, supportsFetch } from '@sentry/utils';\n\nconst global = getGlobalObject();\nlet cachedFetchImpl: FetchImpl;\n\nexport type FetchImpl = typeof fetch;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nexport function getNativeFetchImplementation(): FetchImpl {\n if (cachedFetchImpl) {\n return cachedFetchImpl;\n }\n\n /* eslint-disable @typescript-eslint/unbound-method */\n\n // Fast path to avoid DOM I/O\n if (isNativeFetch(global.fetch)) {\n return (cachedFetchImpl = global.fetch.bind(global));\n }\n\n const document = global.document;\n let fetchImpl = global.fetch;\n // eslint-disable-next-line deprecation/deprecation\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow.fetch) {\n fetchImpl = contentWindow.fetch;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n isDebugBuild() &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n }\n }\n\n return (cachedFetchImpl = fetchImpl.bind(global));\n /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/**\n * Sends sdk client report using sendBeacon or fetch as a fallback if available\n *\n * @param url report endpoint\n * @param body report payload\n */\nexport function sendReport(url: string, body: string): void {\n const isRealNavigator = Object.prototype.toString.call(global && global.navigator) === '[object Navigator]';\n const hasSendBeacon = isRealNavigator && typeof global.navigator.sendBeacon === 'function';\n\n if (hasSendBeacon) {\n // Prevent illegal invocations - https://xgwang.me/posts/you-may-not-know-beacon/#it-may-throw-error%2C-be-sure-to-catch\n const sendBeacon = global.navigator.sendBeacon.bind(global.navigator);\n return sendBeacon(url, body);\n }\n\n if (supportsFetch()) {\n const fetch = getNativeFetchImplementation();\n return forget(\n fetch(url, {\n body,\n method: 'POST',\n credentials: 'omit',\n keepalive: true,\n }),\n );\n }\n}\n","/**\n * Consumes the promise and logs the error when it rejects.\n * @param promise A promise to forget.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function forget(promise: PromiseLike): void {\n void promise.then(null, e => {\n // TODO: Use a better logging mechanism\n // eslint-disable-next-line no-console\n console.error(e);\n });\n}\n","import {\n APIDetails,\n eventToSentryRequest,\n getEnvelopeEndpointWithUrlEncodedAuth,\n getStoreEndpointWithUrlEncodedAuth,\n initAPIDetails,\n sessionToSentryRequest,\n} from '@sentry/core';\nimport {\n ClientReport,\n Event,\n Outcome,\n Response as SentryResponse,\n SentryRequest,\n SentryRequestType,\n Session,\n Transport,\n TransportOptions,\n} from '@sentry/types';\nimport {\n createClientReportEnvelope,\n disabledUntil,\n dsnToString,\n eventStatusFromHttpCode,\n getGlobalObject,\n isDebugBuild,\n isRateLimited,\n logger,\n makePromiseBuffer,\n PromiseBuffer,\n RateLimits,\n serializeEnvelope,\n updateRateLimits,\n} from '@sentry/utils';\n\nimport { sendReport } from './utils';\n\nfunction requestTypeToCategory(ty: SentryRequestType): string {\n const tyStr = ty as string;\n return tyStr === 'event' ? 'error' : tyStr;\n}\n\nconst global = getGlobalObject();\n\n/** Base Transport class implementation */\nexport abstract class BaseTransport implements Transport {\n /**\n * @deprecated\n */\n public url: string;\n\n /** Helper to get Sentry API endpoints. */\n protected readonly _api: APIDetails;\n\n /** A simple buffer holding all requests. */\n protected readonly _buffer: PromiseBuffer = makePromiseBuffer(30);\n\n /** Locks transport after receiving rate limits in a response */\n protected _rateLimits: RateLimits = {};\n\n protected _outcomes: { [key: string]: number } = {};\n\n public constructor(public options: TransportOptions) {\n this._api = initAPIDetails(options.dsn, options._metadata, options.tunnel);\n // eslint-disable-next-line deprecation/deprecation\n this.url = getStoreEndpointWithUrlEncodedAuth(this._api.dsn);\n\n if (this.options.sendClientReports && global.document) {\n global.document.addEventListener('visibilitychange', () => {\n if (global.document.visibilityState === 'hidden') {\n this._flushOutcomes();\n }\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event): PromiseLike {\n return this._sendRequest(eventToSentryRequest(event, this._api), event);\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session): PromiseLike {\n return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n }\n\n /**\n * @inheritDoc\n */\n public close(timeout?: number): PromiseLike {\n return this._buffer.drain(timeout);\n }\n\n /**\n * @inheritDoc\n */\n public recordLostEvent(reason: Outcome, category: SentryRequestType): void {\n if (!this.options.sendClientReports) {\n return;\n }\n // We want to track each category (event, transaction, session) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial>>>`\n const key = `${requestTypeToCategory(category)}:${reason}`;\n isDebugBuild() && logger.log(`Adding outcome: ${key}`);\n this._outcomes[key] = (this._outcomes[key] ?? 0) + 1;\n }\n\n /**\n * Send outcomes as an envelope\n */\n protected _flushOutcomes(): void {\n if (!this.options.sendClientReports) {\n return;\n }\n\n const outcomes = this._outcomes;\n this._outcomes = {};\n\n // Nothing to send\n if (!Object.keys(outcomes).length) {\n isDebugBuild() && logger.log('No outcomes to flush');\n return;\n }\n\n isDebugBuild() && logger.log(`Flushing outcomes:\\n${JSON.stringify(outcomes, null, 2)}`);\n\n const url = getEnvelopeEndpointWithUrlEncodedAuth(this._api.dsn, this._api.tunnel);\n\n const discardedEvents = Object.keys(outcomes).map(key => {\n const [category, reason] = key.split(':');\n return {\n reason,\n category,\n quantity: outcomes[key],\n };\n // TODO: Improve types on discarded_events to get rid of cast\n }) as ClientReport['discarded_events'];\n const envelope = createClientReportEnvelope(discardedEvents, this._api.tunnel && dsnToString(this._api.dsn));\n\n try {\n sendReport(url, serializeEnvelope(envelope));\n } catch (e) {\n isDebugBuild() && logger.error(e);\n }\n }\n\n /**\n * Handle Sentry repsonse for promise-based transports.\n */\n protected _handleResponse({\n requestType,\n response,\n headers,\n resolve,\n reject,\n }: {\n requestType: SentryRequestType;\n response: Response | XMLHttpRequest;\n headers: Record;\n resolve: (value?: SentryResponse | PromiseLike | null | undefined) => void;\n reject: (reason?: unknown) => void;\n }): void {\n const status = eventStatusFromHttpCode(response.status);\n\n this._rateLimits = updateRateLimits(this._rateLimits, headers);\n // eslint-disable-next-line deprecation/deprecation\n if (this._isRateLimited(requestType) && isDebugBuild()) {\n isDebugBuild() &&\n // eslint-disable-next-line deprecation/deprecation\n logger.warn(`Too many ${requestType} requests, backing off until: ${this._disabledUntil(requestType)}`);\n }\n\n if (status === 'success') {\n resolve({ status });\n return;\n }\n\n reject(response);\n }\n\n /**\n * Gets the time that given category is disabled until for rate limiting\n *\n * @deprecated Please use `disabledUntil` from @sentry/utils\n */\n protected _disabledUntil(requestType: SentryRequestType): Date {\n const category = requestTypeToCategory(requestType);\n return new Date(disabledUntil(this._rateLimits, category));\n }\n\n /**\n * Checks if a category is rate limited\n *\n * @deprecated Please use `isRateLimited` from @sentry/utils\n */\n protected _isRateLimited(requestType: SentryRequestType): boolean {\n const category = requestTypeToCategory(requestType);\n return isRateLimited(this._rateLimits, category);\n }\n\n protected abstract _sendRequest(\n sentryRequest: SentryRequest,\n originalPayload: Event | Session,\n ): PromiseLike;\n}\n","import { ClientReport, ClientReportEnvelope, ClientReportItem } from '@sentry/types';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n discarded_events: ClientReport['discarded_events'],\n dsn?: string,\n timestamp?: number,\n): ClientReportEnvelope {\n const clientReportItem: ClientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n","import { EventStatus } from '@sentry/types';\n/**\n * Converts an HTTP status code to sentry status {@link EventStatus}.\n *\n * @param code number HTTP status code\n * @returns EventStatus\n */\nexport function eventStatusFromHttpCode(code: number): EventStatus {\n if (code >= 200 && code < 300) {\n return 'success';\n }\n\n if (code === 429) {\n return 'rate_limit';\n }\n\n if (code >= 400 && code < 500) {\n return 'invalid';\n }\n\n if (code >= 500) {\n return 'failed';\n }\n\n return 'unknown';\n}\n","import { Event, Response, SentryRequest, Session, TransportOptions } from '@sentry/types';\nimport { SentryError, supportsReferrerPolicy, SyncPromise } from '@sentry/utils';\n\nimport { BaseTransport } from './base';\nimport { FetchImpl, getNativeFetchImplementation } from './utils';\n\n/** `fetch` based transport */\nexport class FetchTransport extends BaseTransport {\n /**\n * Fetch API reference which always points to native browser implementation.\n */\n private _fetch: typeof fetch;\n\n public constructor(options: TransportOptions, fetchImpl: FetchImpl = getNativeFetchImplementation()) {\n super(options);\n this._fetch = fetchImpl;\n }\n\n /**\n * @param sentryRequest Prepared SentryRequest to be delivered\n * @param originalPayload Original payload used to create SentryRequest\n */\n protected _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike {\n // eslint-disable-next-line deprecation/deprecation\n if (this._isRateLimited(sentryRequest.type)) {\n this.recordLostEvent('ratelimit_backoff', sentryRequest.type);\n\n return Promise.reject({\n event: originalPayload,\n type: sentryRequest.type,\n // eslint-disable-next-line deprecation/deprecation\n reason: `Transport for ${sentryRequest.type} requests locked till ${this._disabledUntil(\n sentryRequest.type,\n )} due to too many requests.`,\n status: 429,\n });\n }\n\n const options: RequestInit = {\n body: sentryRequest.body,\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: (supportsReferrerPolicy() ? 'origin' : '') as ReferrerPolicy,\n };\n if (this.options.fetchParameters !== undefined) {\n Object.assign(options, this.options.fetchParameters);\n }\n if (this.options.headers !== undefined) {\n options.headers = this.options.headers;\n }\n\n return this._buffer\n .add(\n () =>\n new SyncPromise((resolve, reject) => {\n void this._fetch(sentryRequest.url, options)\n .then(response => {\n const headers = {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After'),\n };\n this._handleResponse({\n requestType: sentryRequest.type,\n response,\n headers,\n resolve,\n reject,\n });\n })\n .catch(reject);\n }),\n )\n .then(undefined, reason => {\n // It's either buffer rejection or any other xhr/fetch error, which are treated as NetworkError.\n if (reason instanceof SentryError) {\n this.recordLostEvent('queue_overflow', sentryRequest.type);\n } else {\n this.recordLostEvent('network_error', sentryRequest.type);\n }\n throw reason;\n });\n }\n}\n","import { Event, Response, SentryRequest, Session } from '@sentry/types';\nimport { SentryError, SyncPromise } from '@sentry/utils';\n\nimport { BaseTransport } from './base';\n\n/** `XHR` based transport */\nexport class XHRTransport extends BaseTransport {\n /**\n * @param sentryRequest Prepared SentryRequest to be delivered\n * @param originalPayload Original payload used to create SentryRequest\n */\n protected _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike {\n // eslint-disable-next-line deprecation/deprecation\n if (this._isRateLimited(sentryRequest.type)) {\n this.recordLostEvent('ratelimit_backoff', sentryRequest.type);\n\n return Promise.reject({\n event: originalPayload,\n type: sentryRequest.type,\n // eslint-disable-next-line deprecation/deprecation\n reason: `Transport for ${sentryRequest.type} requests locked till ${this._disabledUntil(\n sentryRequest.type,\n )} due to too many requests.`,\n status: 429,\n });\n }\n\n return this._buffer\n .add(\n () =>\n new SyncPromise((resolve, reject) => {\n const request = new XMLHttpRequest();\n\n request.onreadystatechange = (): void => {\n if (request.readyState === 4) {\n const headers = {\n 'x-sentry-rate-limits': request.getResponseHeader('X-Sentry-Rate-Limits'),\n 'retry-after': request.getResponseHeader('Retry-After'),\n };\n this._handleResponse({ requestType: sentryRequest.type, response: request, headers, resolve, reject });\n }\n };\n\n request.open('POST', sentryRequest.url);\n for (const header in this.options.headers) {\n if (Object.prototype.hasOwnProperty.call(this.options.headers, header)) {\n request.setRequestHeader(header, this.options.headers[header]);\n }\n }\n request.send(sentryRequest.body);\n }),\n )\n .then(undefined, reason => {\n // It's either buffer rejection or any other xhr/fetch error, which are treated as NetworkError.\n if (reason instanceof SentryError) {\n this.recordLostEvent('queue_overflow', sentryRequest.type);\n } else {\n this.recordLostEvent('network_error', sentryRequest.type);\n }\n throw reason;\n });\n }\n}\n","import { BaseBackend } from '@sentry/core';\nimport { Event, EventHint, Options, Severity, Transport } from '@sentry/types';\nimport { supportsFetch } from '@sentry/utils';\n\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { FetchTransport, XHRTransport } from './transports';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see BrowserClient for more information.\n */\nexport interface BrowserOptions extends Options {\n /**\n * A pattern for error URLs which should exclusively be sent to Sentry.\n * This is the opposite of {@link Options.denyUrls}.\n * By default, all errors will be sent.\n */\n allowUrls?: Array;\n\n /**\n * A pattern for error URLs which should not be sent to Sentry.\n * To allow certain errors instead, use {@link Options.allowUrls}.\n * By default, all errors will be sent.\n */\n denyUrls?: Array;\n\n /** @deprecated use {@link Options.allowUrls} instead. */\n whitelistUrls?: Array;\n\n /** @deprecated use {@link Options.denyUrls} instead. */\n blacklistUrls?: Array;\n}\n\n/**\n * The Sentry Browser SDK Backend.\n * @hidden\n */\nexport class BrowserBackend extends BaseBackend {\n /**\n * @inheritDoc\n */\n public eventFromException(exception: unknown, hint?: EventHint): PromiseLike {\n return eventFromException(exception, hint, this._options.attachStacktrace);\n }\n /**\n * @inheritDoc\n */\n public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): PromiseLike {\n return eventFromMessage(message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n protected _setupTransport(): Transport {\n if (!this._options.dsn) {\n // We return the noop transport here in case there is no Dsn.\n return super._setupTransport();\n }\n\n const transportOptions = {\n ...this._options.transportOptions,\n dsn: this._options.dsn,\n tunnel: this._options.tunnel,\n sendClientReports: this._options.sendClientReports,\n _metadata: this._options._metadata,\n };\n\n if (this._options.transport) {\n return new this._options.transport(transportOptions);\n }\n if (supportsFetch()) {\n return new FetchTransport(transportOptions);\n }\n return new XHRTransport(transportOptions);\n }\n}\n","import { getCurrentHub, Hub, Scope } from '@sentry/hub';\nimport {\n Breadcrumb,\n CaptureContext,\n CustomSamplingContext,\n Event,\n Extra,\n Extras,\n Primitive,\n Severity,\n Transaction,\n TransactionContext,\n User,\n} from '@sentry/types';\n\n/**\n * This calls a function on the current hub.\n * @param method function to call on hub.\n * @param args to pass to function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction callOnHub(method: string, ...args: any[]): T {\n const hub = getCurrentHub();\n if (hub && hub[method as keyof Hub]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (hub[method as keyof Hub] as any)(...args);\n }\n throw new Error(`No hub defined or ${method} was not found on the hub, please open a bug report.`);\n}\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @returns The generated eventId.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nexport function captureException(exception: any, captureContext?: CaptureContext): string {\n const syntheticException = new Error('Sentry syntheticException');\n\n return callOnHub('captureException', exception, {\n captureContext,\n originalException: exception,\n syntheticException,\n });\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param Severity Define the level of the message.\n * @returns The generated eventId.\n */\nexport function captureMessage(message: string, captureContext?: CaptureContext | Severity): string {\n const syntheticException = new Error(message);\n\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n\n return callOnHub('captureMessage', message, level, {\n originalException: message,\n syntheticException,\n ...context,\n });\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @returns The generated eventId.\n */\nexport function captureEvent(event: Event): string {\n return callOnHub('captureEvent', event);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nexport function configureScope(callback: (scope: Scope) => void): void {\n callOnHub('configureScope', callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\nexport function addBreadcrumb(breadcrumb: Breadcrumb): void {\n callOnHub('addBreadcrumb', breadcrumb);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function setContext(name: string, context: { [key: string]: any } | null): void {\n callOnHub('setContext', name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): void {\n callOnHub('setExtras', extras);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): void {\n callOnHub('setTags', tags);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): void {\n callOnHub('setExtra', key, extra);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): void {\n callOnHub('setTag', key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n callOnHub('setUser', user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope(callback: (scope: Scope) => void): void {\n callOnHub('withScope', callback);\n}\n\n/**\n * Calls a function on the latest client. Use this with caution, it's meant as\n * in \"internal\" helper so we don't need to expose every possible function in\n * the shim. It is not guaranteed that the client actually implements the\n * function.\n *\n * @param method The method to call on the client/client.\n * @param args Arguments to pass to the client/fontend.\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function _callOnClient(method: string, ...args: any[]): void {\n callOnHub('_invokeClient', method, ...args);\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.finish()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n */\nexport function startTransaction(\n context: TransactionContext,\n customSamplingContext?: CustomSamplingContext,\n): Transaction {\n return callOnHub('startTransaction', { ...context }, customSamplingContext);\n}\n","import { captureException, getReportDialogEndpoint, withScope } from '@sentry/core';\nimport { DsnLike, Event as SentryEvent, Mechanism, Scope, WrappedFunction } from '@sentry/types';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n addNonEnumerableProperty,\n getGlobalObject,\n getOriginalFunction,\n isDebugBuild,\n logger,\n markFunctionWrapped,\n} from '@sentry/utils';\n\nconst global = getGlobalObject();\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n // onerror should trigger before setTimeout\n ignoreOnError += 1;\n setTimeout(() => {\n ignoreOnError -= 1;\n });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n fn: WrappedFunction,\n options: {\n mechanism?: Mechanism;\n } = {},\n before?: WrappedFunction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n if (typeof fn !== 'function') {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n const wrapper = fn.__sentry_wrapped__;\n if (wrapper) {\n return wrapper;\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n /* eslint-disable prefer-rest-params */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sentryWrapped: WrappedFunction = function (this: any): void {\n const args = Array.prototype.slice.call(arguments);\n\n try {\n if (before && typeof before === 'function') {\n before.apply(this, arguments);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const wrappedArguments = args.map((arg: any) => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope((scope: Scope) => {\n scope.addEventProcessor((event: SentryEvent) => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n };\n /* eslint-enable prefer-rest-params */\n\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get(): string {\n return fn.name;\n },\n });\n }\n // eslint-disable-next-line no-empty\n } catch (_oO) {}\n\n return sentryWrapped;\n}\n\n/**\n * All properties the report dialog supports\n */\nexport interface ReportDialogOptions {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n eventId?: string;\n dsn?: DsnLike;\n user?: {\n email?: string;\n name?: string;\n };\n lang?: string;\n title?: string;\n subtitle?: string;\n subtitle2?: string;\n labelName?: string;\n labelEmail?: string;\n labelComments?: string;\n labelClose?: string;\n labelSubmit?: string;\n errorGeneric?: string;\n errorFormEntry?: string;\n successMessage?: string;\n /** Callback after reportDialog showed up */\n onLoad?(): void;\n}\n\n/**\n * Injects the Report Dialog script\n * @hidden\n */\nexport function injectReportDialog(options: ReportDialogOptions = {}): void {\n if (!global.document) {\n return;\n }\n\n if (!options.eventId) {\n isDebugBuild() && logger.error('Missing eventId option in showReportDialog call');\n return;\n }\n\n if (!options.dsn) {\n isDebugBuild() && logger.error('Missing dsn option in showReportDialog call');\n return;\n }\n\n const script = global.document.createElement('script');\n script.async = true;\n script.src = getReportDialogEndpoint(options.dsn, options);\n\n if (options.onLoad) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n script.onload = options.onLoad;\n }\n\n const injectionPoint = global.document.head || global.document.body;\n\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n }\n}\n","export const SeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug', 'critical'] as const;\nexport type SeverityLevel = typeof SeverityLevels[number];\n","import { Severity } from '@sentry/types';\n\nimport { SeverityLevel, SeverityLevels } from './enums';\n\nfunction isSupportedSeverity(level: string): level is Severity {\n return SeverityLevels.indexOf(level as SeverityLevel) !== -1;\n}\n/**\n * Converts a string-based level into a {@link Severity}.\n *\n * @param level string representation of Severity\n * @returns Severity\n */\nexport function severityFromString(level: SeverityLevel | string): Severity {\n if (level === 'warn') return Severity.Warning;\n if (isSupportedSeverity(level)) {\n return level;\n }\n return Severity.Log;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable max-lines */\nimport { getCurrentHub } from '@sentry/core';\nimport { Event, Integration, Severity } from '@sentry/types';\nimport {\n addInstrumentationHandler,\n getEventDescription,\n getGlobalObject,\n htmlTreeAsString,\n parseUrl,\n safeJoin,\n severityFromString,\n} from '@sentry/utils';\n\n/** JSDoc */\ninterface BreadcrumbsOptions {\n console: boolean;\n dom: boolean | { serializeAttribute: string | string[] };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\nexport class Breadcrumbs implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'Breadcrumbs';\n\n /**\n * @inheritDoc\n */\n public name: string = Breadcrumbs.id;\n\n /** JSDoc */\n private readonly _options: BreadcrumbsOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial) {\n this._options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n }\n\n /**\n * Create a breadcrumb of `sentry` from the events themselves\n */\n public addSentryBreadcrumb(event: Event): void {\n if (!this._options.sentry) {\n return;\n }\n getCurrentHub().addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n }\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - Console API\n * - DOM API (click/typing)\n * - XMLHttpRequest API\n * - Fetch API\n * - History API\n */\n public setupOnce(): void {\n if (this._options.console) {\n addInstrumentationHandler('console', _consoleBreadcrumb);\n }\n if (this._options.dom) {\n addInstrumentationHandler('dom', _domBreadcrumb(this._options.dom));\n }\n if (this._options.xhr) {\n addInstrumentationHandler('xhr', _xhrBreadcrumb);\n }\n if (this._options.fetch) {\n addInstrumentationHandler('fetch', _fetchBreadcrumb);\n }\n if (this._options.history) {\n addInstrumentationHandler('history', _historyBreadcrumb);\n }\n }\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _domBreadcrumb(dom: BreadcrumbsOptions['dom']): (handlerData: { [key: string]: any }) => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _innerDomBreadcrumb(handlerData: { [key: string]: any }): void {\n let target;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = handlerData.event.target\n ? htmlTreeAsString(handlerData.event.target as Node, keyAttrs)\n : htmlTreeAsString(handlerData.event as unknown as Node, keyAttrs);\n } catch (e) {\n target = '';\n }\n\n if (target.length === 0) {\n return;\n }\n\n getCurrentHub().addBreadcrumb(\n {\n category: `ui.${handlerData.name}`,\n message: target,\n },\n {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n },\n );\n }\n\n return _innerDomBreadcrumb;\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _consoleBreadcrumb(handlerData: { [key: string]: any }): void {\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n getCurrentHub().addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _xhrBreadcrumb(handlerData: { [key: string]: any }): void {\n if (handlerData.endTimestamp) {\n // We only capture complete, non-sentry requests\n if (handlerData.xhr.__sentry_own_request__) {\n return;\n }\n\n const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};\n\n getCurrentHub().addBreadcrumb(\n {\n category: 'xhr',\n data: {\n method,\n url,\n status_code,\n },\n type: 'http',\n },\n {\n xhr: handlerData.xhr,\n input: body,\n },\n );\n\n return;\n }\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _fetchBreadcrumb(handlerData: { [key: string]: any }): void {\n // We only capture complete fetch requests\n if (!handlerData.endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: handlerData.fetchData,\n level: Severity.Error,\n type: 'http',\n },\n {\n data: handlerData.error,\n input: handlerData.args,\n },\n );\n } else {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: {\n ...handlerData.fetchData,\n status_code: handlerData.response.status,\n },\n type: 'http',\n },\n {\n input: handlerData.args,\n response: handlerData.response,\n },\n );\n }\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _historyBreadcrumb(handlerData: { [key: string]: any }): void {\n const global = getGlobalObject();\n let from = handlerData.from;\n let to = handlerData.to;\n const parsedLoc = parseUrl(global.location.href);\n let parsedFrom = parseUrl(from);\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n getCurrentHub().addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n}\n","import { BaseClient, Scope, SDK_VERSION } from '@sentry/core';\nimport { Event, EventHint } from '@sentry/types';\nimport { getGlobalObject, isDebugBuild, logger } from '@sentry/utils';\n\nimport { BrowserBackend, BrowserOptions } from './backend';\nimport { injectReportDialog, ReportDialogOptions } from './helpers';\nimport { Breadcrumbs } from './integrations';\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends BaseClient {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n public constructor(options: BrowserOptions = {}) {\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'sentry.javascript.browser',\n packages: [\n {\n name: 'npm:@sentry/browser',\n version: SDK_VERSION,\n },\n ],\n version: SDK_VERSION,\n };\n\n super(BrowserBackend, options);\n }\n\n /**\n * Show a report dialog to the user to send feedback to a specific event.\n *\n * @param options Set individual options for the dialog\n */\n public showReportDialog(options: ReportDialogOptions = {}): void {\n // doesn't work without a document (React Native)\n const document = getGlobalObject().document;\n if (!document) {\n return;\n }\n\n if (!this._isEnabled()) {\n isDebugBuild() && logger.error('Trying to call showReportDialog with Sentry Client disabled');\n return;\n }\n\n injectReportDialog({\n ...options,\n dsn: options.dsn || this.getDsn(),\n });\n }\n\n /**\n * @inheritDoc\n */\n protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): PromiseLike {\n event.platform = event.platform || 'javascript';\n return super._prepareEvent(event, scope, hint);\n }\n\n /**\n * @inheritDoc\n */\n protected _sendEvent(event: Event): void {\n const integration = this.getIntegration(Breadcrumbs);\n if (integration) {\n integration.addSentryBreadcrumb(event);\n }\n super._sendEvent(event);\n }\n}\n","import { Integration, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getGlobalObject, getOriginalFunction } from '@sentry/utils';\n\nimport { wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\n/** JSDoc */\ninterface TryCatchOptions {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n}\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nexport class TryCatch implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'TryCatch';\n\n /**\n * @inheritDoc\n */\n public name: string = TryCatch.id;\n\n /** JSDoc */\n private readonly _options: TryCatchOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial) {\n this._options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n }\n\n /**\n * Wrap timer functions and event targets to catch errors\n * and provide better metadata.\n */\n public setupOnce(): void {\n const global = getGlobalObject();\n\n if (this._options.setTimeout) {\n fill(global, 'setTimeout', _wrapTimeFunction);\n }\n\n if (this._options.setInterval) {\n fill(global, 'setInterval', _wrapTimeFunction);\n }\n\n if (this._options.requestAnimationFrame) {\n fill(global, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = this._options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n }\n}\n\n/** JSDoc */\nfunction _wrapTimeFunction(original: () => void): () => number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, ...args: any[]): number {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: true,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, callback: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\n/** JSDoc */\nfunction _wrapXHR(originalSend: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: XMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill(xhr, prop, function (original: WrappedFunction): () => any {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before TryCatch, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\n/** JSDoc */\nfunction _wrapEventTarget(target: string): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const global = getGlobalObject() as { [key: string]: any };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = global[target] && global[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original: () => void): (\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n try {\n if (typeof fn.handleEvent === 'function') {\n fn.handleEvent = wrap(fn.handleEvent.bind(fn), {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(fn as any as WrappedFunction, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (\n originalRemoveEventListener: () => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = fn as unknown as WrappedFunction;\n try {\n const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n },\n );\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { getCurrentHub } from '@sentry/core';\nimport { Event, EventHint, Hub, Integration, Primitive, Severity } from '@sentry/types';\nimport {\n addExceptionMechanism,\n addInstrumentationHandler,\n getLocationHref,\n isDebugBuild,\n isErrorEvent,\n isPrimitive,\n isString,\n logger,\n} from '@sentry/utils';\n\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\n/** JSDoc */\ntype GlobalHandlersIntegrations = Record;\n\n/** Global handlers */\nexport class GlobalHandlers implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'GlobalHandlers';\n\n /**\n * @inheritDoc\n */\n public name: string = GlobalHandlers.id;\n\n /** JSDoc */\n private readonly _options: GlobalHandlersIntegrations;\n\n /**\n * Stores references functions to installing handlers. Will set to undefined\n * after they have been run so that they are not used twice.\n */\n private _installFunc: Record void) | undefined> = {\n onerror: _installGlobalOnErrorHandler,\n onunhandledrejection: _installGlobalOnUnhandledRejectionHandler,\n };\n\n /** JSDoc */\n public constructor(options?: GlobalHandlersIntegrations) {\n this._options = {\n onerror: true,\n onunhandledrejection: true,\n ...options,\n };\n }\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n Error.stackTraceLimit = 50;\n const options = this._options;\n\n // We can disable guard-for-in as we construct the options object above + do checks against\n // `this._installFunc` for the property.\n // eslint-disable-next-line guard-for-in\n for (const key in options) {\n const installFunc = this._installFunc[key as GlobalHandlersIntegrationsOptionKeys];\n if (installFunc && options[key as GlobalHandlersIntegrationsOptionKeys]) {\n globalHandlerLog(key);\n installFunc();\n this._installFunc[key as GlobalHandlersIntegrationsOptionKeys] = undefined;\n }\n }\n }\n}\n\n/** JSDoc */\nfunction _installGlobalOnErrorHandler(): void {\n addInstrumentationHandler(\n 'error',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (data: { msg: any; url: any; line: any; column: any; error: any }) => {\n const [hub, attachStacktrace] = getHubAndAttachStacktrace();\n if (!hub.getIntegration(GlobalHandlers)) {\n return;\n }\n const { msg, url, line, column, error } = data;\n if (shouldIgnoreOnError() || (error && error.__sentry_own_request__)) {\n return;\n }\n\n const event =\n error === undefined && isString(msg)\n ? _eventFromIncompleteOnError(msg, url, line, column)\n : _enhanceEventWithInitialFrame(\n eventFromUnknownInput(error || msg, undefined, attachStacktrace, false),\n url,\n line,\n column,\n );\n\n event.level = Severity.Error;\n\n addMechanismAndCapture(hub, error, event, 'onerror');\n },\n );\n}\n\n/** JSDoc */\nfunction _installGlobalOnUnhandledRejectionHandler(): void {\n addInstrumentationHandler(\n 'unhandledrejection',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (e: any) => {\n const [hub, attachStacktrace] = getHubAndAttachStacktrace();\n if (!hub.getIntegration(GlobalHandlers)) {\n return;\n }\n let error = e;\n\n // dig the object of the rejection out of known event types\n try {\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in e) {\n error = e.reason;\n }\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n else if ('detail' in e && 'reason' in e.detail) {\n error = e.detail.reason;\n }\n } catch (_oO) {\n // no-empty\n }\n\n if (shouldIgnoreOnError() || (error && error.__sentry_own_request__)) {\n return true;\n }\n\n const event = isPrimitive(error)\n ? _eventFromRejectionWithPrimitive(error)\n : eventFromUnknownInput(error, undefined, attachStacktrace, true);\n\n event.level = Severity.Error;\n\n addMechanismAndCapture(hub, error, event, 'onunhandledrejection');\n return;\n },\n );\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason: Primitive): Event {\n return {\n exception: {\n values: [\n {\n type: 'UnhandledRejection',\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n },\n ],\n },\n };\n}\n\n/**\n * This function creates a stack from an old, error-less onerror handler.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _eventFromIncompleteOnError(msg: any, url: any, line: any, column: any): Event {\n const ERROR_TYPES_RE =\n /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n // If 'message' is ErrorEvent, get real message from inside\n let message = isErrorEvent(msg) ? msg.message : msg;\n let name = 'Error';\n\n const groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n\n const event = {\n exception: {\n values: [\n {\n type: name,\n value: message,\n },\n ],\n },\n };\n\n return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event: Event, url: any, line: any, column: any): Event {\n // event.exception\n const e = (event.exception = event.exception || {});\n // event.exception.values\n const ev = (e.values = e.values || []);\n // event.exception.values[0]\n const ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n // event.exception.values[0].stacktrace.frames\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n filename,\n function: '?',\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n isDebugBuild() && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction addMechanismAndCapture(hub: Hub, error: EventHint['originalException'], event: Event, type: string): void {\n addExceptionMechanism(event, {\n handled: false,\n type,\n });\n hub.captureEvent(event, {\n originalException: error,\n });\n}\n\nfunction getHubAndAttachStacktrace(): [Hub, boolean | undefined] {\n const hub = getCurrentHub();\n const client = hub.getClient();\n const attachStacktrace = client && client.getOptions().attachStacktrace;\n return [hub, attachStacktrace];\n}\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types';\nimport { isInstanceOf } from '@sentry/utils';\n\nimport { exceptionFromError } from '../eventbuilder';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\ninterface LinkedErrorsOptions {\n key: string;\n limit: number;\n}\n\n/** Adds SDK info to an event. */\nexport class LinkedErrors implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'LinkedErrors';\n\n /**\n * @inheritDoc\n */\n public readonly name: string = LinkedErrors.id;\n\n /**\n * @inheritDoc\n */\n private readonly _key: LinkedErrorsOptions['key'];\n\n /**\n * @inheritDoc\n */\n private readonly _limit: LinkedErrorsOptions['limit'];\n\n /**\n * @inheritDoc\n */\n public constructor(options: Partial = {}) {\n this._key = options.key || DEFAULT_KEY;\n this._limit = options.limit || DEFAULT_LIMIT;\n }\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor((event: Event, hint?: EventHint) => {\n const self = getCurrentHub().getIntegration(LinkedErrors);\n return self ? _handler(self._key, self._limit, event, hint) : event;\n });\n }\n}\n\n/**\n * @inheritDoc\n */\nexport function _handler(key: string, limit: number, event: Event, hint?: EventHint): Event | null {\n if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n return event;\n }\n const linkedErrors = _walkErrorTree(limit, hint.originalException as ExtendedError, key);\n event.exception.values = [...linkedErrors, ...event.exception.values];\n return event;\n}\n\n/**\n * JSDOC\n */\nexport function _walkErrorTree(limit: number, error: ExtendedError, key: string, stack: Exception[] = []): Exception[] {\n if (!isInstanceOf(error[key], Error) || stack.length + 1 >= limit) {\n return stack;\n }\n const exception = exceptionFromError(error[key]);\n return _walkErrorTree(limit, error[key], key, [exception, ...stack]);\n}\n","import { Event, EventProcessor, Exception, Hub, Integration, StackFrame } from '@sentry/types';\nimport { isDebugBuild, logger } from '@sentry/utils';\n\n/** Deduplication filter */\nexport class Dedupe implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'Dedupe';\n\n /**\n * @inheritDoc\n */\n public name: string = Dedupe.id;\n\n /**\n * @inheritDoc\n */\n private _previousEvent?: Event;\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n addGlobalEventProcessor((currentEvent: Event) => {\n const self = getCurrentHub().getIntegration(Dedupe);\n if (self) {\n // Juuust in case something goes wrong\n try {\n if (_shouldDropEvent(currentEvent, self._previousEvent)) {\n isDebugBuild() && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n return null;\n }\n } catch (_oO) {\n return (self._previousEvent = currentEvent);\n }\n\n return (self._previousEvent = currentEvent);\n }\n return currentEvent;\n });\n }\n}\n\n/** JSDoc */\nfunction _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n if (!previousEvent) {\n return false;\n }\n\n if (_isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n}\n\n/** JSDoc */\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\n/** JSDoc */\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n const previousException = _getExceptionFromEvent(previousEvent);\n const currentException = _getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\n/** JSDoc */\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n let currentFrames = _getFramesFromEvent(currentEvent);\n let previousFrames = _getFramesFromEvent(previousEvent);\n\n // If neither event has a stacktrace, they are assumed to be the same\n if (!currentFrames && !previousFrames) {\n return true;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n return false;\n }\n\n currentFrames = currentFrames as StackFrame[];\n previousFrames = previousFrames as StackFrame[];\n\n // If number of frames differ, they are not the same\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n\n // Otherwise, compare the two\n for (let i = 0; i < previousFrames.length; i++) {\n const frameA = previousFrames[i];\n const frameB = currentFrames[i];\n\n if (\n frameA.filename !== frameB.filename ||\n frameA.lineno !== frameB.lineno ||\n frameA.colno !== frameB.colno ||\n frameA.function !== frameB.function\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/** JSDoc */\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n let currentFingerprint = currentEvent.fingerprint;\n let previousFingerprint = previousEvent.fingerprint;\n\n // If neither event has a fingerprint, they are assumed to be the same\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n }\n\n // If only one event has a fingerprint, but not the other one, they are not the same\n if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n return false;\n }\n\n currentFingerprint = currentFingerprint as string[];\n previousFingerprint = previousFingerprint as string[];\n\n // Otherwise, compare the two\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n}\n\n/** JSDoc */\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n return event.exception && event.exception.values && event.exception.values[0];\n}\n\n/** JSDoc */\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n const exception = event.exception;\n\n if (exception) {\n try {\n // @ts-ignore Object could be undefined\n return exception.values[0].stacktrace.frames;\n } catch (_oO) {\n return undefined;\n }\n } else if (event.stacktrace) {\n return event.stacktrace.frames;\n }\n return undefined;\n}\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, Integration } from '@sentry/types';\nimport { getGlobalObject } from '@sentry/utils';\n\nconst global = getGlobalObject();\n\n/** UserAgent */\nexport class UserAgent implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'UserAgent';\n\n /**\n * @inheritDoc\n */\n public name: string = UserAgent.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor((event: Event) => {\n if (getCurrentHub().getIntegration(UserAgent)) {\n // if none of the information we want exists, don't bother\n if (!global.navigator && !global.location && !global.document) {\n return event;\n }\n\n // grab as much info as exists and add it to the event\n const url = (event.request && event.request.url) || (global.location && global.location.href);\n const { referrer } = global.document || {};\n const { userAgent } = global.navigator || {};\n\n const headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...(url && { url }), headers };\n\n return { ...event, request };\n }\n return event;\n });\n }\n}\n","import { getCurrentHub, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';\nimport { Hub } from '@sentry/types';\nimport { addInstrumentationHandler, getGlobalObject, isDebugBuild, logger, resolvedSyncPromise } from '@sentry/utils';\n\nimport { BrowserOptions } from './backend';\nimport { BrowserClient } from './client';\nimport { ReportDialogOptions, wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, Dedupe, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';\n\nexport const defaultIntegrations = [\n new CoreIntegrations.InboundFilters(),\n new CoreIntegrations.FunctionToString(),\n new TryCatch(),\n new Breadcrumbs(),\n new GlobalHandlers(),\n new LinkedErrors(),\n new Dedupe(),\n new UserAgent(),\n];\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n if (options.release === undefined) {\n const window = getGlobalObject();\n // This supports the variable that sentry-webpack-plugin injects\n if (window.SENTRY_RELEASE && window.SENTRY_RELEASE.id) {\n options.release = window.SENTRY_RELEASE.id;\n }\n }\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n\n initAndBind(BrowserClient, options);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options: ReportDialogOptions = {}): void {\n const hub = getCurrentHub();\n const scope = hub.getScope();\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n if (!options.eventId) {\n options.eventId = hub.lastEventId();\n }\n const client = hub.getClient();\n if (client) {\n client.showReportDialog(options);\n }\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n return getCurrentHub().lastEventId();\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n callback();\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function flush(timeout?: number): PromiseLike {\n const client = getCurrentHub().getClient();\n if (client) {\n return client.flush(timeout);\n }\n isDebugBuild() && logger.warn('Cannot flush events. No client defined.');\n return resolvedSyncPromise(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function close(timeout?: number): PromiseLike {\n const client = getCurrentHub().getClient();\n if (client) {\n return client.close(timeout);\n }\n isDebugBuild() && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return resolvedSyncPromise(false);\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n return internalWrap(fn)();\n}\n\nfunction startSessionOnHub(hub: Hub): void {\n hub.startSession({ ignoreDuration: true });\n hub.captureSession();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n const window = getGlobalObject();\n const document = window.document;\n\n if (typeof document === 'undefined') {\n isDebugBuild() && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n const hub = getCurrentHub();\n\n // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and\n // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are\n // pinned at the same version in package.json, but there are edge cases where it's possible. See\n // https://github.com/getsentry/sentry-javascript/issues/3207 and\n // https://github.com/getsentry/sentry-javascript/issues/3234 and\n // https://github.com/getsentry/sentry-javascript/issues/3278.\n if (!hub.captureSession) {\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSessionOnHub(hub);\n\n // We want to create a session for every navigation as well\n addInstrumentationHandler('history', ({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (!(from === undefined || from === to)) {\n startSessionOnHub(getCurrentHub());\n }\n });\n}\n","import { getCurrentHub } from '@sentry/hub';\nimport { Client, Options } from '@sentry/types';\nimport { isDebugBuild, logger } from '@sentry/utils';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass = new (options: O) => F;\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind(clientClass: ClientClass, options: O): void {\n if (options.debug === true) {\n if (isDebugBuild()) {\n logger.enable();\n } else {\n // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n // eslint-disable-next-line no-console\n console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n }\n }\n const hub = getCurrentHub();\n const scope = hub.getScope();\n if (scope) {\n scope.update(options.initialScope);\n }\n const client = new clientClass(options);\n hub.bindClient(client);\n}\n","import { TraceparentData } from '@sentry/types';\n\nexport const TRACEPARENT_REGEXP = new RegExp(\n '^[ \\\\t]*' + // whitespace\n '([0-9a-f]{32})?' + // trace_id\n '-?([0-9a-f]{16})?' + // span_id\n '-?([01])?' + // sampled\n '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent: string): TraceparentData | undefined {\n const matches = traceparent.match(TRACEPARENT_REGEXP);\n if (matches) {\n let parentSampled: boolean | undefined;\n if (matches[3] === '1') {\n parentSampled = true;\n } else if (matches[3] === '0') {\n parentSampled = false;\n }\n return {\n traceId: matches[1],\n parentSampled,\n parentSpanId: matches[2],\n };\n }\n return undefined;\n}\n","import { getGlobalObject, isDebugBuild, logger } from '@sentry/utils';\n\nimport { FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS } from '../constants';\nimport { IdleTransaction } from '../idletransaction';\nimport { SpanStatusType } from '../span';\nimport { getActiveTransaction } from '../utils';\n\nconst global = getGlobalObject();\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n if (global && global.document) {\n global.document.addEventListener('visibilitychange', () => {\n const activeTransaction = getActiveTransaction() as IdleTransaction;\n if (global.document.hidden && activeTransaction) {\n const statusType: SpanStatusType = 'cancelled';\n\n isDebugBuild() &&\n logger.log(\n `[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${activeTransaction.op}`,\n );\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!activeTransaction.status) {\n activeTransaction.setStatus(statusType);\n }\n activeTransaction.setTag('visibilitychange', 'document.hidden');\n activeTransaction.setTag(FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS[2]);\n activeTransaction.finish();\n }\n });\n } else {\n isDebugBuild() && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Metric, ReportHandler } from '../types';\n\nexport const bindReporter = (\n callback: ReportHandler,\n metric: Metric,\n reportAllChanges?: boolean,\n): ((forceReport?: boolean) => void) => {\n let prevValue: number;\n return (forceReport?: boolean) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n metric.delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (metric.delta || prevValue === undefined) {\n prevValue = metric.value;\n callback(metric);\n }\n }\n }\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Metric } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\n\nexport const initMetric = (name: Metric['name'], value?: number): Metric => {\n return {\n name,\n value: value ?? -1,\n delta: 0,\n entries: [],\n id: generateUniqueID(),\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = (): string => {\n return `v2-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface PerformanceEntryHandler {\n (entry: PerformanceEntry): void;\n}\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = (type: string, callback: PerformanceEntryHandler): PerformanceObserver | undefined => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n // More extensive feature detect needed for Firefox due to:\n // https://github.com/GoogleChrome/web-vitals/issues/142\n if (type === 'first-input' && !('PerformanceEventTiming' in self)) {\n return;\n }\n\n const po: PerformanceObserver = new PerformanceObserver(l => l.getEntries().map(callback));\n\n po.observe({ type, buffered: true });\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalObject } from '@sentry/utils';\n\nexport interface OnHiddenCallback {\n (event: Event): void;\n}\n\nexport const onHidden = (cb: OnHiddenCallback, once?: boolean): void => {\n const onHiddenOrPageHide = (event: Event): void => {\n if (event.type === 'pagehide' || getGlobalObject().document.visibilityState === 'hidden') {\n cb(event);\n if (once) {\n removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n removeEventListener('pagehide', onHiddenOrPageHide, true);\n }\n }\n };\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalObject } from '@sentry/utils';\n\nimport { onHidden } from './onHidden';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = (): number => {\n return getGlobalObject().document.visibilityState === 'hidden' ? 0 : Infinity;\n};\n\nconst trackChanges = (): void => {\n // Update the time if/when the document becomes hidden.\n onHidden(({ timeStamp }) => {\n firstHiddenTime = timeStamp;\n }, true);\n};\n\nexport const getVisibilityWatcher = (): {\n readonly firstHiddenTime: number;\n} => {\n if (firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n firstHiddenTime = initHiddenTime();\n trackChanges();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe, PerformanceEntryHandler } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { ReportHandler } from './types';\n\n// https://wicg.github.io/largest-contentful-paint/#sec-largest-contentful-paint-interface\nexport interface LargestContentfulPaint extends PerformanceEntry {\n renderTime: DOMHighResTimeStamp;\n loadTime: DOMHighResTimeStamp;\n size: number;\n id: string;\n url: string;\n element?: Element;\n toJSON(): Record;\n}\n\nconst reportedMetricIDs: Record = {};\n\nexport const getLCP = (onReport: ReportHandler, reportAllChanges?: boolean): void => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('LCP');\n let report: ReturnType;\n\n const entryHandler = (entry: PerformanceEntry): void => {\n // The startTime attribute returns the value of the renderTime if it is not 0,\n // and the value of the loadTime otherwise.\n const value = entry.startTime;\n\n // If the page was hidden prior to paint time of the entry,\n // ignore it and mark the metric as final, otherwise add the entry.\n if (value < visibilityWatcher.firstHiddenTime) {\n metric.value = value;\n metric.entries.push(entry);\n }\n\n if (report) {\n report();\n }\n };\n\n const po = observe('largest-contentful-paint', entryHandler);\n\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n\n const stopListening = (): void => {\n if (!reportedMetricIDs[metric.id]) {\n po.takeRecords().map(entryHandler as PerformanceEntryHandler);\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n };\n\n // Stop listening after input. Note: while scrolling is an input that\n // stop LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n addEventListener(type, stopListening, { once: true, capture: true });\n });\n\n onHidden(stopListening, true);\n }\n};\n","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Measurements, SpanContext } from '@sentry/types';\nimport {\n browserPerformanceTimeOrigin,\n getGlobalObject,\n htmlTreeAsString,\n isDebugBuild,\n isNodeEnv,\n logger,\n} from '@sentry/utils';\n\nimport { Span } from '../span';\nimport { Transaction } from '../transaction';\nimport { msToSec } from '../utils';\nimport { getCLS, LayoutShift } from './web-vitals/getCLS';\nimport { getFID } from './web-vitals/getFID';\nimport { getLCP, LargestContentfulPaint } from './web-vitals/getLCP';\nimport { getVisibilityWatcher } from './web-vitals/lib/getVisibilityWatcher';\nimport { NavigatorDeviceMemory, NavigatorNetworkInformation } from './web-vitals/types';\n\nconst global = getGlobalObject();\n\n/** Class tracking metrics */\nexport class MetricsInstrumentation {\n private _measurements: Measurements = {};\n\n private _performanceCursor: number = 0;\n private _lcpEntry: LargestContentfulPaint | undefined;\n private _clsEntry: LayoutShift | undefined;\n\n public constructor(private _reportAllChanges: boolean = false) {\n if (!isNodeEnv() && global && global.performance && global.document) {\n if (global.performance.mark) {\n global.performance.mark('sentry-tracing-init');\n }\n\n this._trackCLS();\n this._trackLCP();\n this._trackFID();\n }\n }\n\n /** Add performance related spans to a transaction */\n public addPerformanceEntries(transaction: Transaction): void {\n if (!global || !global.performance || !global.performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n isDebugBuild() && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n let responseStartTimestamp: number | undefined;\n let requestStartTimestamp: number | undefined;\n\n global.performance\n .getEntries()\n .slice(this._performanceCursor)\n .forEach((entry: Record) => {\n const startTime = msToSec(entry.startTime as number);\n const duration = msToSec(entry.duration as number);\n\n if (transaction.op === 'navigation' && timeOrigin + startTime < transaction.startTimestamp) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n addNavigationSpans(transaction, entry, timeOrigin);\n responseStartTimestamp = timeOrigin + msToSec(entry.responseStart as number);\n requestStartTimestamp = timeOrigin + msToSec(entry.requestStart as number);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n const startTimestamp = addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n // capture web vitals\n\n const firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n isDebugBuild() && logger.log('[Measurements] Adding FP');\n this._measurements['fp'] = { value: entry.startTime };\n this._measurements['mark.fp'] = { value: startTimestamp };\n }\n\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n isDebugBuild() && logger.log('[Measurements] Adding FCP');\n this._measurements['fcp'] = { value: entry.startTime };\n this._measurements['mark.fcp'] = { value: startTimestamp };\n }\n\n break;\n }\n case 'resource': {\n const resourceName = (entry.name as string).replace(global.location.origin, '');\n addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin);\n break;\n }\n default:\n // Ignore other entry types.\n }\n });\n\n this._performanceCursor = Math.max(performance.getEntries().length - 1, 0);\n\n this._trackNavigator(transaction);\n\n // Measurements are only available for pageload transactions\n if (transaction.op === 'pageload') {\n // normalize applicable web vital values to be relative to transaction.startTimestamp\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n // Generate TTFB (Time to First Byte), which measured as the time between the beginning of the transaction and the\n // start of the response in milliseconds\n if (typeof responseStartTimestamp === 'number') {\n isDebugBuild() && logger.log('[Measurements] Adding TTFB');\n this._measurements['ttfb'] = { value: (responseStartTimestamp - transaction.startTimestamp) * 1000 };\n\n if (typeof requestStartTimestamp === 'number' && requestStartTimestamp <= responseStartTimestamp) {\n // Capture the time spent making the request and receiving the first byte of the response.\n // This is the time between the start of the request and the start of the response in milliseconds.\n this._measurements['ttfb.requestTime'] = { value: (responseStartTimestamp - requestStartTimestamp) * 1000 };\n }\n }\n\n ['fcp', 'fp', 'lcp'].forEach(name => {\n if (!this._measurements[name] || timeOrigin >= transaction.startTimestamp) {\n return;\n }\n\n // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n // to be adjusted to be relative to transaction.startTimestamp.\n\n const oldValue = this._measurements[name].value;\n const measurementTimestamp = timeOrigin + msToSec(oldValue);\n // normalizedValue should be in milliseconds\n const normalizedValue = Math.abs((measurementTimestamp - transaction.startTimestamp) * 1000);\n\n const delta = normalizedValue - oldValue;\n isDebugBuild() &&\n logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n\n this._measurements[name].value = normalizedValue;\n });\n\n if (this._measurements['mark.fid'] && this._measurements['fid']) {\n // create span for FID\n\n _startChild(transaction, {\n description: 'first input delay',\n endTimestamp: this._measurements['mark.fid'].value + msToSec(this._measurements['fid'].value),\n op: 'web.vitals',\n startTimestamp: this._measurements['mark.fid'].value,\n });\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n if (!('fcp' in this._measurements)) {\n delete this._measurements.cls;\n }\n\n transaction.setMeasurements(this._measurements);\n tagMetricInfo(transaction, this._lcpEntry, this._clsEntry);\n transaction.setTag('sentry_reportAllChanges', this._reportAllChanges);\n }\n }\n\n /**\n * Capture the information of the user agent.\n */\n private _trackNavigator(transaction: Transaction): void {\n const navigator = global.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n const connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n transaction.setTag('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n transaction.setTag('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n this._measurements['connection.rtt'] = { value: connection.rtt as number };\n }\n\n if (isMeasurementValue(connection.downlink)) {\n this._measurements['connection.downlink'] = { value: connection.downlink as number };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n transaction.setTag('deviceMemory', String(navigator.deviceMemory));\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n }\n\n /** Starts tracking the Cumulative Layout Shift on the current page. */\n private _trackCLS(): void {\n // See:\n // https://web.dev/evolving-cls/\n // https://web.dev/cls-web-tooling/\n getCLS(metric => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n isDebugBuild() && logger.log('[Measurements] Adding CLS');\n this._measurements['cls'] = { value: metric.value };\n this._clsEntry = entry as LayoutShift;\n });\n }\n\n /** Starts tracking the Largest Contentful Paint on the current page. */\n private _trackLCP(): void {\n getLCP(metric => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n const startTime = msToSec(entry.startTime as number);\n isDebugBuild() && logger.log('[Measurements] Adding LCP');\n this._measurements['lcp'] = { value: metric.value };\n this._measurements['mark.lcp'] = { value: timeOrigin + startTime };\n this._lcpEntry = entry as LargestContentfulPaint;\n }, this._reportAllChanges);\n }\n\n /** Starts tracking the First Input Delay on the current page. */\n private _trackFID(): void {\n getFID(metric => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n const startTime = msToSec(entry.startTime as number);\n isDebugBuild() && logger.log('[Measurements] Adding FID');\n this._measurements['fid'] = { value: metric.value };\n this._measurements['mark.fid'] = { value: timeOrigin + startTime };\n });\n }\n}\n\n/** Instrument navigation entries */\nfunction addNavigationSpans(transaction: Transaction, entry: Record, timeOrigin: number): void {\n ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n });\n addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create measure related spans */\nfunction addMeasureSpans(\n transaction: Transaction,\n entry: Record,\n startTime: number,\n duration: number,\n timeOrigin: number,\n): number {\n const measureStartTimestamp = timeOrigin + startTime;\n const measureEndTimestamp = measureStartTimestamp + duration;\n\n _startChild(transaction, {\n description: entry.name as string,\n endTimestamp: measureEndTimestamp,\n op: entry.entryType as string,\n startTimestamp: measureStartTimestamp,\n });\n\n return measureStartTimestamp;\n}\n\nexport interface ResourceEntry extends Record {\n initiatorType?: string;\n transferSize?: number;\n encodedBodySize?: number;\n decodedBodySize?: number;\n}\n\n/** Create resource-related spans */\nexport function addResourceSpans(\n transaction: Transaction,\n entry: ResourceEntry,\n resourceName: string,\n startTime: number,\n duration: number,\n timeOrigin: number,\n): void {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n const data: Record = {};\n if ('transferSize' in entry) {\n data['Transfer Size'] = entry.transferSize;\n }\n if ('encodedBodySize' in entry) {\n data['Encoded Body Size'] = entry.encodedBodySize;\n }\n if ('decodedBodySize' in entry) {\n data['Decoded Body Size'] = entry.decodedBodySize;\n }\n\n const startTimestamp = timeOrigin + startTime;\n const endTimestamp = startTimestamp + duration;\n\n _startChild(transaction, {\n description: resourceName,\n endTimestamp,\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource',\n startTimestamp,\n data,\n });\n}\n\n/** Create performance navigation related spans */\nfunction addPerformanceNavigationTiming(\n transaction: Transaction,\n entry: Record,\n event: string,\n timeOrigin: number,\n description?: string,\n eventEnd?: string,\n): void {\n const end = eventEnd ? (entry[eventEnd] as number | undefined) : (entry[`${event}End`] as number | undefined);\n const start = entry[`${event}Start`] as number | undefined;\n if (!start || !end) {\n return;\n }\n _startChild(transaction, {\n op: 'browser',\n description: description ?? event,\n startTimestamp: timeOrigin + msToSec(start),\n endTimestamp: timeOrigin + msToSec(end),\n });\n}\n\n/** Create request and response related spans */\nfunction addRequest(transaction: Transaction, entry: Record, timeOrigin: number): void {\n _startChild(transaction, {\n op: 'browser',\n description: 'request',\n startTimestamp: timeOrigin + msToSec(entry.requestStart as number),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n });\n\n _startChild(transaction, {\n op: 'browser',\n description: 'response',\n startTimestamp: timeOrigin + msToSec(entry.responseStart as number),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n });\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nexport function _startChild(transaction: Transaction, { startTimestamp, ...ctx }: SpanContext): Span {\n if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n transaction.startTimestamp = startTimestamp;\n }\n\n return transaction.startChild({\n startTimestamp,\n ...ctx,\n });\n}\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value: any): boolean {\n return typeof value === 'number' && isFinite(value);\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction tagMetricInfo(\n transaction: Transaction,\n lcpEntry: MetricsInstrumentation['_lcpEntry'],\n clsEntry: MetricsInstrumentation['_clsEntry'],\n): void {\n if (lcpEntry) {\n isDebugBuild() && logger.log('[Measurements] Adding LCP Data');\n\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (lcpEntry.element) {\n transaction.setTag('lcp.element', htmlTreeAsString(lcpEntry.element));\n }\n\n if (lcpEntry.id) {\n transaction.setTag('lcp.id', lcpEntry.id);\n }\n\n if (lcpEntry.url) {\n // Trim URL to the first 200 characters.\n transaction.setTag('lcp.url', lcpEntry.url.trim().slice(0, 200));\n }\n\n transaction.setTag('lcp.size', lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (clsEntry && clsEntry.sources) {\n isDebugBuild() && logger.log('[Measurements] Adding CLS Data');\n clsEntry.sources.forEach((source, index) =>\n transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe, PerformanceEntryHandler } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { ReportHandler } from './types';\n\n// https://wicg.github.io/layout-instability/#sec-layout-shift\nexport interface LayoutShift extends PerformanceEntry {\n value: number;\n hadRecentInput: boolean;\n sources: Array;\n toJSON(): Record;\n}\n\nexport interface LayoutShiftAttribution {\n node?: Node;\n previousRect: DOMRectReadOnly;\n currentRect: DOMRectReadOnly;\n}\n\nexport const getCLS = (onReport: ReportHandler, reportAllChanges?: boolean): void => {\n const metric = initMetric('CLS', 0);\n let report: ReturnType;\n\n let sessionValue = 0;\n let sessionEntries: PerformanceEntry[] = [];\n\n const entryHandler = (entry: LayoutShift): void => {\n // Only count layout shifts without recent user input.\n // TODO: Figure out why entry can be undefined\n if (entry && !entry.hadRecentInput) {\n const firstSessionEntry = sessionEntries[0];\n const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry and\n // less than 5 seconds after the first entry in the session, include the\n // entry in the current session. Otherwise, start a new session.\n if (\n sessionValue &&\n sessionEntries.length !== 0 &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n if (report) {\n report();\n }\n }\n }\n };\n\n const po = observe('layout-shift', entryHandler as PerformanceEntryHandler);\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n\n onHidden(() => {\n po.takeRecords().map(entryHandler as PerformanceEntryHandler);\n report(true);\n });\n }\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe, PerformanceEntryHandler } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { PerformanceEventTiming, ReportHandler } from './types';\n\nexport const getFID = (onReport: ReportHandler, reportAllChanges?: boolean): void => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FID');\n let report: ReturnType;\n\n const entryHandler = (entry: PerformanceEventTiming): void => {\n // Only report if the page wasn't hidden prior to the first input.\n if (report && entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n const po = observe('first-input', entryHandler as PerformanceEntryHandler);\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n onHidden(() => {\n po.takeRecords().map(entryHandler as PerformanceEntryHandler);\n po.disconnect();\n }, true);\n }\n};\n","import { addInstrumentationHandler, isInstanceOf, isMatchingPattern } from '@sentry/utils';\n\nimport { Span } from '../span';\nimport { getActiveTransaction, hasTracingEnabled } from '../utils';\n\nexport const DEFAULT_TRACING_ORIGINS = ['localhost', /^\\//];\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n /**\n * List of strings / regex where the integration should create Spans out of. Additionally this will be used\n * to define which outgoing requests the `sentry-trace` header will be attached to.\n *\n * Default: ['localhost', /^\\//] {@see DEFAULT_TRACING_ORIGINS}\n */\n tracingOrigins: Array;\n\n /**\n * Flag to disable patching all together for fetch requests.\n *\n * Default: true\n */\n traceFetch: boolean;\n\n /**\n * Flag to disable patching all together for xhr requests.\n *\n * Default: true\n */\n traceXHR: boolean;\n\n /**\n * This function will be called before creating a span for a request with the given url.\n * Return false if you don't want a span for the given url.\n *\n * By default it uses the `tracingOrigins` options as a url match.\n */\n shouldCreateSpanForRequest?(url: string): boolean;\n}\n\n/** Data returned from fetch callback */\nexport interface FetchData {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args: any[]; // the arguments passed to the fetch call itself\n fetchData?: {\n method: string;\n url: string;\n // span_id\n __span?: string;\n };\n\n // TODO Should this be unknown instead? If we vendor types, make it a Response\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response?: any;\n error?: unknown;\n\n startTimestamp: number;\n endTimestamp?: number;\n}\n\n/** Data returned from XHR request */\nexport interface XHRData {\n xhr?: {\n __sentry_xhr__?: {\n method: string;\n url: string;\n status_code: number;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: Record;\n };\n __sentry_xhr_span_id__?: string;\n setRequestHeader?: (key: string, val: string) => void;\n __sentry_own_request__?: boolean;\n };\n startTimestamp: number;\n endTimestamp?: number;\n}\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n tracingOrigins: DEFAULT_TRACING_ORIGINS,\n};\n\n/** Registers span creators for xhr and fetch requests */\nexport function instrumentOutgoingRequests(_options?: Partial): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { traceFetch, traceXHR, tracingOrigins, shouldCreateSpanForRequest } = {\n ...defaultRequestInstrumentationOptions,\n ..._options,\n };\n\n // We should cache url -> decision so that we don't have to compute\n // regexp everytime we create a request.\n const urlMap: Record = {};\n\n const defaultShouldCreateSpan = (url: string): boolean => {\n if (urlMap[url]) {\n return urlMap[url];\n }\n const origins = tracingOrigins;\n urlMap[url] =\n origins.some((origin: string | RegExp) => isMatchingPattern(url, origin)) &&\n !isMatchingPattern(url, 'sentry_key');\n return urlMap[url];\n };\n\n // We want that our users don't have to re-implement shouldCreateSpanForRequest themselves\n // That's why we filter out already unwanted Spans from tracingOrigins\n let shouldCreateSpan = defaultShouldCreateSpan;\n if (typeof shouldCreateSpanForRequest === 'function') {\n shouldCreateSpan = (url: string) => {\n return defaultShouldCreateSpan(url) && shouldCreateSpanForRequest(url);\n };\n }\n\n const spans: Record = {};\n\n if (traceFetch) {\n addInstrumentationHandler('fetch', (handlerData: FetchData) => {\n fetchCallback(handlerData, shouldCreateSpan, spans);\n });\n }\n\n if (traceXHR) {\n addInstrumentationHandler('xhr', (handlerData: XHRData) => {\n xhrCallback(handlerData, shouldCreateSpan, spans);\n });\n }\n}\n\n/**\n * Create and track fetch request spans\n */\nexport function fetchCallback(\n handlerData: FetchData,\n shouldCreateSpan: (url: string) => boolean,\n spans: Record,\n): void {\n if (!hasTracingEnabled() || !(handlerData.fetchData && shouldCreateSpan(handlerData.fetchData.url))) {\n return;\n }\n\n if (handlerData.endTimestamp) {\n const spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n if (handlerData.response) {\n // TODO (kmclb) remove this once types PR goes through\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n span.setHttpStatus(handlerData.response.status);\n } else if (handlerData.error) {\n span.setStatus('internal_error');\n }\n span.finish();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return;\n }\n\n const activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n const span = activeTransaction.startChild({\n data: {\n ...handlerData.fetchData,\n type: 'fetch',\n },\n description: `${handlerData.fetchData.method} ${handlerData.fetchData.url}`,\n op: 'http.client',\n });\n\n handlerData.fetchData.__span = span.spanId;\n spans[span.spanId] = span;\n\n const request = (handlerData.args[0] = handlerData.args[0] as string | Request);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const options = (handlerData.args[1] = (handlerData.args[1] as { [key: string]: any }) || {});\n let headers = options.headers;\n if (isInstanceOf(request, Request)) {\n headers = (request as Request).headers;\n }\n if (headers) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (typeof headers.append === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n headers.append('sentry-trace', span.toTraceparent());\n } else if (Array.isArray(headers)) {\n headers = [...headers, ['sentry-trace', span.toTraceparent()]];\n } else {\n headers = { ...headers, 'sentry-trace': span.toTraceparent() };\n }\n } else {\n headers = { 'sentry-trace': span.toTraceparent() };\n }\n options.headers = headers;\n }\n}\n\n/**\n * Create and track xhr request spans\n */\nexport function xhrCallback(\n handlerData: XHRData,\n shouldCreateSpan: (url: string) => boolean,\n spans: Record,\n): void {\n if (\n !hasTracingEnabled() ||\n (handlerData.xhr && handlerData.xhr.__sentry_own_request__) ||\n !(handlerData.xhr && handlerData.xhr.__sentry_xhr__ && shouldCreateSpan(handlerData.xhr.__sentry_xhr__.url))\n ) {\n return;\n }\n\n const xhr = handlerData.xhr.__sentry_xhr__;\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp) {\n const spanId = handlerData.xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n span.setHttpStatus(xhr.status_code);\n span.finish();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return;\n }\n\n // if not, create a new span to track it\n const activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n const span = activeTransaction.startChild({\n data: {\n ...xhr.data,\n type: 'xhr',\n method: xhr.method,\n url: xhr.url,\n },\n description: `${xhr.method} ${xhr.url}`,\n op: 'http.client',\n });\n\n handlerData.xhr.__sentry_xhr_span_id__ = span.spanId;\n spans[handlerData.xhr.__sentry_xhr_span_id__] = span;\n\n if (handlerData.xhr.setRequestHeader) {\n try {\n handlerData.xhr.setRequestHeader('sentry-trace', span.toTraceparent());\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n }\n }\n}\n","import { Transaction, TransactionContext } from '@sentry/types';\nimport { addInstrumentationHandler, getGlobalObject, isDebugBuild, logger } from '@sentry/utils';\n\nconst global = getGlobalObject();\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nexport function instrumentRoutingWithDefaults(\n customStartTransaction: (context: TransactionContext) => T | undefined,\n startTransactionOnPageLoad: boolean = true,\n startTransactionOnLocationChange: boolean = true,\n): void {\n if (!global || !global.location) {\n isDebugBuild() && logger.warn('Could not initialize routing instrumentation due to invalid location');\n return;\n }\n\n let startingUrl: string | undefined = global.location.href;\n\n let activeTransaction: T | undefined;\n if (startTransactionOnPageLoad) {\n activeTransaction = customStartTransaction({ name: global.location.pathname, op: 'pageload' });\n }\n\n if (startTransactionOnLocationChange) {\n addInstrumentationHandler('history', ({ to, from }: { to: string; from?: string }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n if (activeTransaction) {\n isDebugBuild() && logger.log(`[Tracing] Finishing current transaction with op: ${activeTransaction.op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeTransaction.finish();\n }\n activeTransaction = customStartTransaction({ name: global.location.pathname, op: 'navigation' });\n }\n });\n }\n}\n","import { Hub } from '@sentry/hub';\nimport { EventProcessor, Integration, Transaction, TransactionContext } from '@sentry/types';\nimport { getGlobalObject, isDebugBuild, logger } from '@sentry/utils';\n\nimport { startIdleTransaction } from '../hubextensions';\nimport { DEFAULT_IDLE_TIMEOUT, IdleTransaction } from '../idletransaction';\nimport { extractTraceparentData, secToMs } from '../utils';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport { MetricsInstrumentation } from './metrics';\nimport {\n defaultRequestInstrumentationOptions,\n instrumentOutgoingRequests,\n RequestInstrumentationOptions,\n} from './request';\nimport { instrumentRoutingWithDefaults } from './router';\n\nexport const DEFAULT_MAX_TRANSACTION_DURATION_SECONDS = 600;\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions extends RequestInstrumentationOptions {\n /**\n * The time to wait in ms until the transaction will be finished. The transaction will use the end timestamp of\n * the last finished span as the endtime for the transaction.\n * Time is in ms.\n *\n * Default: 1000\n */\n idleTimeout: number;\n\n /**\n * Flag to enable/disable creation of `navigation` transaction on history changes.\n *\n * Default: true\n */\n startTransactionOnLocationChange: boolean;\n\n /**\n * Flag to enable/disable creation of `pageload` transaction on first pageload.\n *\n * Default: true\n */\n startTransactionOnPageLoad: boolean;\n\n /**\n * The maximum duration of a transaction before it will be marked as \"deadline_exceeded\".\n * If you never want to mark a transaction set it to 0.\n * Time is in seconds.\n *\n * Default: 600\n */\n maxTransactionDuration: number;\n\n /**\n * Flag Transactions where tabs moved to background with \"cancelled\". Browser background tab timing is\n * not suited towards doing precise measurements of operations. By default, we recommend that this option\n * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n *\n * Default: true\n */\n markBackgroundTransactions: boolean;\n\n /**\n * _metricOptions allows the user to send options to change how metrics are collected.\n *\n * _metricOptions is currently experimental.\n *\n * Default: undefined\n */\n _metricOptions?: Partial<{ _reportAllChanges: boolean }>;\n\n /**\n * beforeNavigate is called before a pageload/navigation transaction is created and allows users to modify transaction\n * context data, or drop the transaction entirely (by setting `sampled = false` in the context).\n *\n * Note: For legacy reasons, transactions can also be dropped by returning `undefined`.\n *\n * @param context: The context data which will be passed to `startTransaction` by default\n *\n * @returns A (potentially) modified context object, with `sampled = false` if the transaction should be dropped.\n */\n beforeNavigate?(context: TransactionContext): TransactionContext | undefined;\n\n /**\n * Instrumentation that creates routing change transactions. By default creates\n * pageload and navigation transactions.\n */\n routingInstrumentation(\n customStartTransaction: (context: TransactionContext) => T | undefined,\n startTransactionOnPageLoad?: boolean,\n startTransactionOnLocationChange?: boolean,\n ): void;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n idleTimeout: DEFAULT_IDLE_TIMEOUT,\n markBackgroundTransactions: true,\n maxTransactionDuration: DEFAULT_MAX_TRANSACTION_DURATION_SECONDS,\n routingInstrumentation: instrumentRoutingWithDefaults,\n startTransactionOnLocationChange: true,\n startTransactionOnPageLoad: true,\n ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n */\nexport class BrowserTracing implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'BrowserTracing';\n\n /** Browser Tracing integration options */\n public options: BrowserTracingOptions;\n\n /**\n * @inheritDoc\n */\n public name: string = BrowserTracing.id;\n\n private _getCurrentHub?: () => Hub;\n\n private readonly _metrics: MetricsInstrumentation;\n\n private readonly _emitOptionsWarning?: boolean;\n\n /** Store configured idle timeout so that it can be added as a tag to transactions */\n private _configuredIdleTimeout: BrowserTracingOptions['idleTimeout'] | undefined = undefined;\n\n public constructor(_options?: Partial) {\n let tracingOrigins = defaultRequestInstrumentationOptions.tracingOrigins;\n // NOTE: Logger doesn't work in constructors, as it's initialized after integrations instances\n if (_options) {\n this._configuredIdleTimeout = _options.idleTimeout;\n if (_options.tracingOrigins && Array.isArray(_options.tracingOrigins) && _options.tracingOrigins.length !== 0) {\n tracingOrigins = _options.tracingOrigins;\n } else {\n isDebugBuild() && (this._emitOptionsWarning = true);\n }\n }\n\n this.options = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n tracingOrigins,\n };\n\n const { _metricOptions } = this.options;\n this._metrics = new MetricsInstrumentation(_metricOptions && _metricOptions._reportAllChanges);\n }\n\n /**\n * @inheritDoc\n */\n public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n this._getCurrentHub = getCurrentHub;\n\n if (this._emitOptionsWarning) {\n isDebugBuild() &&\n logger.warn(\n '[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace.',\n );\n isDebugBuild() &&\n logger.warn(\n `[Tracing] We added a reasonable default for you: ${defaultRequestInstrumentationOptions.tracingOrigins}`,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const {\n routingInstrumentation: instrumentRouting,\n startTransactionOnLocationChange,\n startTransactionOnPageLoad,\n markBackgroundTransactions,\n traceFetch,\n traceXHR,\n tracingOrigins,\n shouldCreateSpanForRequest,\n } = this.options;\n\n instrumentRouting(\n (context: TransactionContext) => this._createRouteTransaction(context),\n startTransactionOnPageLoad,\n startTransactionOnLocationChange,\n );\n\n if (markBackgroundTransactions) {\n registerBackgroundTabDetection();\n }\n\n instrumentOutgoingRequests({ traceFetch, traceXHR, tracingOrigins, shouldCreateSpanForRequest });\n }\n\n /** Create routing idle transaction. */\n private _createRouteTransaction(context: TransactionContext): Transaction | undefined {\n if (!this._getCurrentHub) {\n isDebugBuild() &&\n logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { beforeNavigate, idleTimeout, maxTransactionDuration } = this.options;\n\n const parentContextFromHeader = context.op === 'pageload' ? getHeaderContext() : undefined;\n\n const expandedContext = {\n ...context,\n ...parentContextFromHeader,\n trimEnd: true,\n };\n const modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n // from being sent to Sentry).\n const finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n if (finalContext.sampled === false) {\n isDebugBuild() && logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n }\n\n isDebugBuild() && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n const hub = this._getCurrentHub();\n const { location } = getGlobalObject() as WindowOrWorkerGlobalScope & { location: Location };\n\n const idleTransaction = startIdleTransaction(\n hub,\n finalContext,\n idleTimeout,\n true,\n { location }, // for use in the tracesSampler\n );\n idleTransaction.registerBeforeFinishCallback((transaction, endTimestamp) => {\n this._metrics.addPerformanceEntries(transaction);\n adjustTransactionDuration(secToMs(maxTransactionDuration), transaction, endTimestamp);\n });\n\n idleTransaction.setTag('idleTimeout', this._configuredIdleTimeout);\n\n return idleTransaction as Transaction;\n }\n}\n\n/**\n * Gets transaction context from a sentry-trace meta.\n *\n * @returns Transaction context data from the header or undefined if there's no header or the header is malformed\n */\nexport function getHeaderContext(): Partial | undefined {\n const header = getMetaContent('sentry-trace');\n if (header) {\n return extractTraceparentData(header);\n }\n\n return undefined;\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | null {\n const el = getGlobalObject().document.querySelector(`meta[name=${metaName}]`);\n return el ? el.getAttribute('content') : null;\n}\n\n/** Adjusts transaction value based on max transaction duration */\nfunction adjustTransactionDuration(maxDuration: number, transaction: IdleTransaction, endTimestamp: number): void {\n const diff = endTimestamp - transaction.startTimestamp;\n const isOutdatedTransaction = endTimestamp && (diff > maxDuration || diff < 0);\n if (isOutdatedTransaction) {\n transaction.setStatus('deadline_exceeded');\n transaction.setTag('maxTransactionDurationExceeded', 'true');\n }\n}\n","import { addExtensionMethods } from './hubextensions';\nimport * as Integrations from './integrations';\n\nexport { Integrations };\n\n// This is already exported as part of `Integrations` above (and for the moment will remain so for\n// backwards compatibility), but that interferes with treeshaking, so we also export it separately\n// here.\n//\n// Previously we expected users to import tracing integrations like\n//\n// import { Integrations } from '@sentry/tracing';\n// const instance = new Integrations.BrowserTracing();\n//\n// This makes the integrations unable to be treeshaken though. To address this, we now have\n// this individual export. We now expect users to consume BrowserTracing like so:\n//\n// import { BrowserTracing } from '@sentry/tracing';\n// const instance = new BrowserTracing();\n//\n// For an example of of the new usage of BrowserTracing, see @sentry/nextjs index.client.ts\nexport { BrowserTracing } from './browser';\n\nexport { Span, SpanStatusType, spanStatusfromHttpCode } from './span';\n// eslint-disable-next-line deprecation/deprecation\nexport { SpanStatus } from './spanstatus';\nexport { Transaction } from './transaction';\nexport {\n // TODO deprecate old name in v7\n instrumentOutgoingRequests as registerRequestInstrumentation,\n RequestInstrumentationOptions,\n defaultRequestInstrumentationOptions,\n} from './browser';\nexport { IdleTransaction } from './idletransaction';\nexport { startIdleTransaction } from './hubextensions';\n\n// We are patching the global object with our hub extension methods\naddExtensionMethods();\n\nexport { addExtensionMethods };\n\nexport {\n extractTraceparentData,\n getActiveTransaction,\n hasTracingEnabled,\n stripUrlQueryAndFragment,\n TRACEPARENT_REGEXP,\n} from './utils';\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport styles from \"./Container.module.css\";\n\nconst cx = classNames.bind(styles);\n\nexport const Container: React.FC<{}> = (props) => (\n
\n
{props.children}
\n
\n);\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Container_wrapper__y43dn\",\"content\":\"Container_content__2eBYQ\"};","var _path, _path2, _path3, _path4, _path5, _path6, _defs;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoShort(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 40,\n height: 41,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M25.393 21.154c.345.199.789.248 1.183.248 3.106 0 3.45-3.617 2.909-6.888-.592-3.47-1.874-4.312-2.564-6.988C26.133 3.81 28.942.39 32.69.192a6.274 6.274 0 0 1 5.225 2.33c.395.495.69 1.04.937 1.585 3.944 10.159-4.93 23.143-13.162 23.49a7.299 7.299 0 0 1-2.711-.347c-.346-.1-.74-.248-1.085-.446-.345-.149-.64-.397-.937-.644-.049-.05-.147-.15-.197-.199-.493-.594-.838-1.387-.838-2.23 0-1.883 1.48-3.37 3.352-3.37.838.05 1.529.347 2.12.793z\",\n fill: \"url(#paint0_linear)\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M24.999 20.857c.148.1.246.149.394.248.789.595 1.282 1.586 1.282 2.626 0 1.884-1.48 3.37-3.352 3.37-1.923 0-3.303-1.635-3.698-3.42-.887-4.162 3.205-9.514-.591-12.091-.444-.297-1.035-.297-1.528-.297-4.289 0-5.521 7.483-5.226 10.654a17.507 17.507 0 0 0 1.036 4.213c.838 2.13 2.12 4.113 2.12 6.492 0 4.162-3.451 7.532-7.69 7.532A7.762 7.762 0 0 1 .991 36.27c-1.972-3.42-1.282-8.672.74-13.727 2.168-5.5 5.915-10.853 9.464-13.38 2.317-1.685 4.979-2.825 7.838-2.28a8.614 8.614 0 0 1 3.007 1.24c.838.544 1.232.99 1.775 1.833 2.908 4.608-1.824 8.623 1.183 10.902z\",\n fill: \"url(#paint1_linear)\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.84,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M35.696.787c.05.396.099.842.099 1.239 0 4.162-3.451 7.532-7.69 7.532h-.444a10.343 10.343 0 0 1-.74-1.982C26.133 3.81 28.942.39 32.69.192a6.293 6.293 0 0 1 3.007.595z\",\n fill: \"url(#paint2_linear)\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.3,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14.252 36.765a7.743 7.743 0 0 1-6.408 3.37c-.493 0-.937-.05-1.38-.1a4.294 4.294 0 0 1-.69-2.329c0-2.378 1.922-4.311 4.288-4.311 2.021 0 3.747 1.437 4.19 3.37z\",\n fill: \"#63FFDC\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M25.393 21.154c.345.199.789.248 1.183.248 3.106 0 3.45-3.617 2.909-6.888-.592-3.47-1.874-4.311-2.564-6.988-.443-2.081.247-4.014 1.528-5.401.79-.446 1.726-.694 2.712-.744a6.274 6.274 0 0 1 5.225 2.33c.394.495.69 1.04.937 1.585 2.81 7.186-.79 15.71-6.064 20.269-1.774 1.239-3.697 1.982-5.62 2.032a7.3 7.3 0 0 1-2.71-.347c-.296-.1-.641-.198-.937-.347.394.149.838.248 1.281.248 1.874 0 3.352-1.487 3.352-3.37 0-.496-.098-.942-.295-1.338-.395-.942-.937-1.289-.937-1.289zm-4.14 5.253a.596.596 0 0 1-.247-.247l-.197-.199a3.242 3.242 0 0 1-.641-1.14c.05.1.05.15.098.248 0 .05.05.1.05.15.148.296.394.643.64.94.1.1.198.199.296.248z\",\n fill: \"url(#paint3_linear)\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.513 40.035c-2.366-.396-4.289-1.833-5.423-3.815-1.972-3.42-1.281-8.673.74-13.727 2.169-5.501 5.915-10.853 9.464-13.38 2.17-1.587 4.684-2.677 7.346-2.38l-.05 3.172c-1.084-.396-3.45.347-5.077 1.04-3.944 1.587-5.226 8.178-4.93 11.3a17.503 17.503 0 0 0 1.035 4.212c.838 2.131 2.12 4.113 2.12 6.492 0 3.27-2.169 6.095-5.225 7.087z\",\n fill: \"url(#paint4_linear)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 28.405,\n y1: 11.684,\n x2: 32.066,\n y2: 21.074,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#7CCDFC\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.202,\n stopColor: \"#6AC6FC\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.606,\n stopColor: \"#3AB4FD\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#06A1FD\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint1_linear\",\n x1: 23.047,\n y1: 24.311,\n x2: 7.873,\n y2: 22.995,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#128DE0\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#42D4CF\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint2_linear\",\n x1: 33.712,\n y1: 7.194,\n x2: 28.531,\n y2: 2.04,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.002,\n stopColor: \"#CEF\",\n stopOpacity: 0.29\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#CEF\",\n stopOpacity: 0.83\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint3_linear\",\n x1: 33.894,\n y1: 24.077,\n x2: 22.992,\n y2: 5.294,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.002,\n stopColor: \"#CEF\",\n stopOpacity: 0\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.304,\n stopColor: \"#CEF\",\n stopOpacity: 0.3\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.326,\n stopColor: \"#CEF\",\n stopOpacity: 0.3\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.598,\n stopColor: \"#CEF\",\n stopOpacity: 0.3\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.657,\n stopColor: \"#CEF\",\n stopOpacity: 0.344\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#CEF\",\n stopOpacity: 0.6\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint4_linear\",\n x1: -1.966,\n y1: 30.913,\n x2: 23.959,\n y2: 16.024,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.002,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.6\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.308,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.4\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.33,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.377\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.6,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.1\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.659,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.085\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoShort);\nexport default __webpack_public_path__ + \"static/media/logo-short.5b5b25cff5058e15bc7a55b1195e2683.svg\";\nexport { ForwardRef as ReactComponent };","export enum UserType {\n LITE = 1,\n PRO = 2,\n}","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport styles from \"./Title.module.css\";\n\nconst cx = classNames.bind(styles);\n\nexport const Title: React.FC<{}> = (props) => (\n

{props.children}

\n);\n","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"Title_title__mrNq5\"};","import { AxiosInstance, AxiosResponse } from \"axios\";\n\nlet promise: Promise | null = null;\n\nexport async function getPublicToken(client: AxiosInstance) {\n if (!promise) {\n promise = client.post<{ token: string }>(\"/authenticate/json/v2\", undefined, {\n headers: {\n remember: true\n },\n auth: {\n username: process.env.REACT_APP_PUBLIC_EMAIL!,\n password: process.env.REACT_APP_PUBLIC_PASSWORD!,\n },\n });\n }\n\n const authResponse = await promise;\n\n return authResponse.data.token;\n}\n\nexport async function getPublicTokenForHybrid(hybrid: AxiosInstance) {\n const authResponse = await hybrid.post<{ token: string }>(\"/authenticate/json/v2\", undefined, {\n headers: {\n remember: true\n },\n auth: {\n username: process.env.REACT_APP_PUBLIC_EMAIL!,\n password: process.env.REACT_APP_PUBLIC_PASSWORD!,\n },\n });\n\n return authResponse.data.token;\n}","export const getBaseApiUrl = () => {\n if (window.location.pathname === \"/l\" || window.location.pathname === \"/pl\" || window.location.pathname === \"/lp\") {\n return process.env.REACT_APP_LITE_API_URL;\n }\n\n return process.env.REACT_APP_PRO_API_URL;\n}","import axios, { AxiosResponse } from \"axios\";\nimport { captureEvent, setExtra } from \"@sentry/react\";\n\nimport { getPublicToken } from \"./getPublicToken\";\nimport { getBaseApiUrl } from \"./getBaseApiUrl\";\n\nexport const client = axios.create({\n baseURL: getBaseApiUrl(),\n});\n\nclient.interceptors.request.use(async (config) => {\n if (!config.headers.token && config.url !== \"/authenticate/json/v2\") {\n const token = await getPublicToken(client);\n\n config.headers.token = token;\n config.headers.limit = 100000;\n }\n\n return config;\n});\n\nclient.interceptors.response.use(undefined, (error) => {\n const response = error.response as AxiosResponse<{\n exception: {\n type: string;\n message: string;\n };\n }>;\n\n setExtra(\"ERROR\", error);\n setExtra(\"RESPONSE\", response?.data);\n captureEvent({\n message: response?.status ?\n `${response?.status} ${response.data?.exception?.type} ${response.data?.exception?.message}`\n : `${error.message}`,\n });\n\n return Promise.reject(error);\n});\n","import { client } from \"./client\";\nimport { LinkInfo } from \"../types/LinkInfo\";\nimport { DietanamnezType } from \"types/DietanamnezType\";\n\nexport type Custom = null | {\n custom_additional_data?: {\n final_screen_additional_content?: {\n additional_text: string;\n button_lable: string;\n button_url?: string;\n },\n css?: string,\n logo?: string,\n replacement1?: string,\n report_is_supliment_visible?: boolean,\n report_title_page_logo?: [{\n logo: string,\n logo_size?: string,\n }],\n report_footer_copyright?: string,\n logo_welcome_size?: string,\n logo_success_registration_size?: string,\n logo_final_size?: string,\n replacement_footer_copyright: string | null,\n selfregistration_report_type: string | undefined,\n };\n custom_генерировать_бад_рацион_при_саморегистрации?: boolean;\n custom_показывать_экран_выявлен_дефицит_потребления?:boolean,\n custom_показывать_экран_рекомендуемая_продукция?:boolean,\n custom_не_запоминать_текущий_экран?:boolean,\n custom_обязательность_телефон?: boolean;\n custom_обязательность_эл_почта?: boolean;\n custom_показывать_экран_аллергии?: boolean;\n custom_название_поля_эл_почта?: string;\n custom_есть_вопрос_о_курении_в_саморегистрации?: boolean;\n custom_формированть_в_да_назначение_к_врачам?: boolean;\n custom_дополнительный_текст_отчета?: string | null;\n custom_наименование_проекта?: string | null;\n custom_города?:\n | null\n | {\n key: string;\n label: string;\n }[];\n custom_страны?:\n | null\n | {\n key: string;\n label: string;\n }[];\n};\n\ntype RegistrationResponse = {\n key: string;\n consent: string;\n staff: {\n firstname: string;\n lastname: string;\n midname: string | null;\n };\n custom: null | {\n fields: Custom;\n };\n link?: string;\n survey_type: DietanamnezType;\n};\n\ntype GetContactResponse = {\n contactarea: string;\n da_key: string;\n id: string;\n io: string;\n lite: boolean;\n ret: string;\n public_identifier?: string;\n manufacturers?: { key: string; label: string }[];\n link?: string;\n custom_data: null | {\n logo: string;\n css: string;\n replacement1?: string,\n report_title_page_logo?: [string],\n logo_welcome_size?: string,\n logo_success_registration_size?: string,\n logo_final_size?: string,\n replacement_footer_copyright: string | null,\n selfregistration_report_type: string | undefined,\n };\n country: null | {\n key: string;\n };\n};\n\nexport async function getRegistrationInfo(token: string): Promise {\n const { data } = await client.post(\n `/${process.env.REACT_APP_API_KEY}t179r/json/v2`,\n {\n parameters: {\n public_id: token,\n },\n },\n {\n headers: {\n Function: \"SelfRegistrationCheckId\",\n },\n }\n );\n\n const authorName = [data?.staff?.firstname, data?.staff?.lastname]\n .filter(Boolean)\n .join(\" \");\n\n return {\n consent: data.consent,\n authorName,\n custom: data.custom?.fields || null,\n manufacturers: undefined,\n link: data.link,\n survey_type: data.survey_type,\n country: null,\n };\n}\n\nexport async function getDietanamnezInfo(\n token: string\n): Promise {\n const { data } = await client.post(\n `/${process.env.REACT_APP_API_KEY}t183r/json/v2`,\n {\n parameters: {\n id: token,\n },\n },\n {\n headers: {\n Function: \"GetContact\",\n },\n }\n );\n\n return data;\n}\n","import axios, { AxiosResponse } from \"axios\";\nimport { captureEvent, setExtra } from \"@sentry/react\";\n\nimport { getPublicTokenForHybrid } from \"./getPublicToken\";\n\nexport const hybrid = axios.create({\n\tbaseURL: process.env.REACT_APP_PRO_API_URL,\n});\n\nhybrid.interceptors.request.use(async (config) => {\n\tif (!config.headers.token && config.url !== \"/authenticate/json/v2\") {\n\t\tconst token = await getPublicTokenForHybrid(hybrid);\n\n\t\tconfig.headers.token = token;\n\t\tconfig.headers.limit = 100000;\n\t}\n\n\treturn config;\n});\n\nhybrid.interceptors.response.use(undefined, (error) => {\n\tconst response = error.response as AxiosResponse<{\n\t\texception: {\n\t\t\ttype: string;\n\t\t\tmessage: string;\n\t\t};\n\t}>;\n\n\tsetExtra(\"ERROR\", error);\n\tsetExtra(\"RESPONSE\", response?.data);\n\tcaptureEvent({\n\t\tmessage: response?.status ?\n\t\t\t`${response?.status} ${response.data?.exception?.type} ${response.data?.exception?.message}`\n\t\t\t: `${error.message}`,\n\t});\n\n\treturn Promise.reject(error);\n});\n","export function getQueryVariable(variable: string) {\n const query = window.location.search.substring(1);\n const vars = query.split('&');\n\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) === variable) {\n return decodeURIComponent(pair[1]);\n }\n }\n}","import { client } from \"./client\";\nimport { hybrid } from \"./hybrid\";\n\nimport { getQueryVariable } from \"../utils/getQueryVariable\";\n\nconst getItem = (key: string) => {\n return JSON.parse(localStorage.getItem(key)!);\n};\n\nexport async function saveRegistrationData() {\n const publicId = getQueryVariable(\"r\");\n\n const patient = getItem(`patient_${publicId}`);\n\n const { data } = await client.post(\n `/${process.env.REACT_APP_API_KEY}t179r/json/v2`,\n {\n parameters: {\n public_id: publicId,\n patient: {\n ...patient,\n custom_sexint_save: Number(patient.custom_sexint_save),\n },\n allergies: getItem(`allergens_${publicId}`) || [],\n dietanamnez: getItem(`dietanamnez_${publicId}`),\n dietanamnezItems: getItem(`dietanamnezItems_${publicId}`) || [],\n self_registration_id: localStorage.getItem('self_registration_id')\n },\n },\n {\n headers: {\n Function: \"SelfRegistration\",\n },\n }\n );\n\n if (window.location.pathname === \"/pl\" || window.location.pathname === \"/lp\") {\n const { data } = await hybrid.post(\n `/${process.env.REACT_APP_API_KEY}t179r/json/v2`,\n {\n parameters: {\n public_id: publicId,\n patient: {\n ...patient,\n custom_sexint_save: Number(patient.custom_sexint_save),\n },\n allergies: getItem(`allergens_${publicId}`) || [],\n dietanamnez: getItem(`dietanamnez_${publicId}`),\n dietanamnezItems: getItem(`dietanamnezItems_${publicId}`) || [],\n self_registration_id: localStorage.getItem('self_registration_id')\n },\n },\n {\n headers: {\n Function: \"SelfRegistration\",\n },\n }\n );\n\n localStorage.removeItem('self_registration_id');\n\n return data;\n }\n\n localStorage.removeItem('self_registration_id');\n\n return data;\n}\n","import { client } from './client';\n\nimport { ApiResponse } from '../types/ApiResponse';\n\nexport type Country = {\n custom_без_номера: boolean;\n custom_название: string;\n custom_номер: number\n}\n\nexport async function get(categoryId: number, listId?: number): Promise> {\n const response = await client.get>(\n `/${process.env.REACT_APP_API_KEY}t${categoryId}r/json/v2`,\n {\n headers: listId ? {\n view: `${process.env.REACT_APP_API_KEY}ts5c${categoryId}cs9r${listId}`,\n } : {},\n }\n );\n\n return response.data.list.map(item => ({\n key: item.key,\n ...item.fields,\n }));\n}","import { getBaseApiUrl } from \"api/getBaseApiUrl\";\nimport axios, { AxiosRequestConfig } from \"axios\";\n\nexport async function generatePDFFromTemplate(template: string, token: AxiosRequestConfig, height: string) {\n const data = new FormData();\n data.append(\"Content\", template);\n data.append(\"FileName\", \"Report.pdf\");\n data.append(\"setPageWidth\", \"210mm\");\n data.append(\"setPageHeight\", height);\n data.append(\"setPageMargins\", \"0mm,0mm,0mm,0mm\");\n\n const request = axios.create({\n baseURL: getBaseApiUrl(),\n });\n\n const response = await request.post(\"webApi/htmlToPdf/GetByContent\", data, {\n responseType: \"blob\",\n headers: {\n token\n }\n });\n\n return response.data as Blob;\n}\n","import { Element } from \"types/Data\";\n\nexport function transformElementsListForLite(state: Element[]) {\n\tconst list: Element[] = state\n\t\t.concat({\n\t\t\tkey: `c105a902t28r0`,\n\t\t\t___parent: null,\n\t\t\tcustom_наименование: \"\",\n\t\t\tcustom_light: true,\n\t\t\tcustom_used_in_pro: false,\n\t\t\tcustom_для_сортировки: 15,\n\t\t\tcustom_ед_изм: {\n\t\t\t\tlabel: ''\n\t\t\t},\n\t\t\tcustom_источники: null,\n\t\t\tcustom_влияние: null,\n\t\t})\n\t\t.filter((item) => item.custom_light);\n\n\tconst formattedList = list.map((item) => {\n\t\tif (\n\t\t\titem.key === `c105a902t28r51554960` ||\n\t\t\titem.key === `c105a902t28r51554961`\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\t___parent: {\n\t\t\t\t\tkey: `c105a902t28r3620`,\n\t\t\t\t},\n\t\t\t\tcustom_для_сортировки: 25,\n\t\t\t};\n\t\t}\n\n\t\tif (item.key === `c105a902t28r2038859`) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\t___parent: {\n\t\t\t\t\tkey: `c105a902t28r3620`,\n\t\t\t\t},\n\t\t\t\tcustom_для_сортировки: 35,\n\t\t\t};\n\t\t}\n\n\t\tif (item.key === `c105a902t28r225`) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\t___parent: {\n\t\t\t\t\tkey: `c105a902t28r3620`,\n\t\t\t\t},\n\t\t\t\tcustom_для_сортировки: 50,\n\t\t\t};\n\t\t}\n\n\t\tif (item.key === `c105a902t28r236`) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\t___parent: {\n\t\t\t\t\tkey: `c105a902t28r3620`,\n\t\t\t\t},\n\t\t\t\tcustom_для_сортировки: 60,\n\t\t\t};\n\t\t}\n\n\t\t// Ликопин\n\t\tif (item.key === `c105a902t28r2038841`) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\t___parent: {\n\t\t\t\t\tkey: `c105a902t28r3701`,\n\t\t\t\t},\n\t\t\t\tcustom_для_сортировки: 42,\n\t\t\t}\n\t\t}\n\n\t\t// Лютеин и зеаксантин\n\t\tif (item.key === `c105a902t28r2038842`) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\t___parent: {\n\t\t\t\t\tkey: `c105a902t28r3701`,\n\t\t\t\t},\n\t\t\t\tcustom_для_сортировки: 42,\n\t\t\t}\n\t\t}\n\n\t\tconst needChangeParent =\n\t\t\titem.___parent &&\n\t\t\t[`c105a902t28r221`, `c105a902t28r222`, `c105a902t28r223`, `c105a902t28r228`].includes(\n\t\t\t\titem.___parent.key\n\t\t\t);\n\n\t\tif (needChangeParent) {\n\t\t\tconst indexes: { [key: string]: number } = {\n\t\t\t\tc105a902t28r12493202: 1,\n\t\t\t\tc105a902t28r12493207: 2,\n\t\t\t\tc105a902t28r12523083: 3,\n\t\t\t\tc105a902t28r12497601: 4,\n\t\t\t\tc105a902t28r12497603: 5,\n\t\t\t\tc105a902t28r12523027: 6,\n\t\t\t\tc105a902t28r12520074: 7,\n\t\t\t\tc105a902t28r3582: 10,\n\t\t\t\tc105a902t28r3583: 20,\n\t\t\t\tc105a902t28r2038901: 25,\n\t\t\t\tc105a902t28r228: 30,\n\t\t\t\tc105a902t28r2038895: 37,\n\t\t\t\tc105a902t28r2038909: 38,\n\t\t\t\tc105a902t28r2038913: 39,\n\t\t\t\tc105a902t28r231: 40,\n\t\t\t\tc105a902t28r233: 50,\n\t\t\t\tc105a902t28r11374694: 60,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\t___parent: {\n\t\t\t\t\tkey: 'c105a902t28r0'\n\t\t\t\t},\n\t\t\t\tcustom_для_сортировки: indexes[item.key],\n\t\t\t};\n\t\t}\n\n\t\treturn item;\n\t});\n\n\treturn formattedList;\n}","export function insertCss(url: string) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n\n document.head.appendChild(link);\n}\n","import { client } from \"./client\";\n\nexport async function sendStartButtonMetric(token: string): Promise {\n\tawait client.post(\n\t\t`/${process.env.REACT_APP_API_KEY}t179r/json/v2`,\n\t\t{\n\t\t\tparameters: {\n\t\t\t\tpublic_id: token,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\tFunction: \"SelfRegistrationButtonStart\",\n\t\t\t},\n\t\t}\n\t);\n}\n\nexport async function sendFactpitStartButtonMetric(token: string): Promise {\n\tawait client.post(\n\t\t`/${process.env.REACT_APP_API_KEY}t179r/json/v2`,\n\t\t{\n\t\t\tparameters: {\n\t\t\t\tpublic_id: token,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\tFunction: \"SelfRegistrationFactpitStart\",\n\t\t\t},\n\t\t}\n\t);\n}\n","import { useState, useEffect } from \"react\";\nimport { setExtra } from \"@sentry/react\";\nimport useLocalStorage from \"react-use/lib/useLocalStorage\";\n\nimport { getRegistrationInfo } from \"api/getLinkInfo\";\nimport { saveRegistrationData } from \"api/saveRegistrationData\";\nimport { client } from \"api/client\";\nimport { get } from \"api/get\";\n\nimport { StateManagerType } from \"./StateManagerType\";\nimport { Screen } from \"./allScreens\";\n\nimport { Patient } from \"types/Patient\";\nimport { Allergen } from \"types/Allergen\";\nimport { Dietanamnez } from \"types/Dietanamnez\";\nimport { UserType } from \"types/UserType\";\nimport { LinkInfo } from \"types/LinkInfo\";\nimport { Element } from \"types/Data\";\nimport { DietanamnezChartItem, DietanamnezItem, DietanamnezItemForm } from \"types/DietanamnezItem\";\nimport { Data, DataLite, Supplement, SupplementComposition } from \"types/Data\";\nimport { getPublicToken } from \"api/getPublicToken\";\nimport { generatePDFFromTemplate } from \"utils/generatePDFFromTemplate\";\nimport { AxiosRequestConfig } from \"axios\";\nimport { transformElementsListForLite } from \"utils/tranformElementsListForLite\";\nimport { insertCss } from \"utils/insertCss\";\nimport { hybrid } from \"api/hybrid\";\nimport { sendStartButtonMetric } from \"api/sendBIMetrics\";\n\nexport const getDietanamnezData = (data: Data) => {\n const chemistry = (\n data.dietanamnez!.fields.custom_профиль_потребления_веществ || []\n ).reduce(\n (acc, item) => ({\n ...acc,\n [item.элемент_состава.replace(\"cXaX\", \"c105a902\")]: item.среднее_за_день,\n }),\n {} as { [key: string]: number }\n );\n const items = data.elements;\n\n const groups = items.filter((item) => item?.___parent === null);\n\n const parseItems = (\n level: number,\n elements: any\n ): DietanamnezChartItem[] => {\n return elements\n .sort((a: any, b: any) => a.custom_для_сортировки - b.custom_для_сортировки)\n .map((item: any) => {\n const subitems = items.filter((elem) => {\n return (\n elem.___parent?.key === item.key\n );\n });\n const parsedSubitems = parseItems(level + 1, subitems);\n const norm = data.patient.fields.custom_коридор_спк!.find(\n (norm: any) => norm.элемент.replace(\"cXaX\", \"c105a902\") === item.key\n );\n\n return {\n key: item.key,\n data: chemistry[item.key] || 0,\n element: item.key,\n label: item.custom_наименование,\n size: item.custom_ед_изм?.label,\n subitems: parsedSubitems,\n normMin: norm?.от,\n normMax: norm?.до === \"Infinity\" ? Infinity : norm?.до,\n sources: item.custom_источники,\n influence: item.custom_влияние,\n };\n });\n };\n\n return parseItems(1, groups);\n};\n\nasync function parseSelftestData(values: any, token: AxiosRequestConfig) {\n const ration = {\n fields: values.ration.fields,\n related: {\n list: values.ration.related.list.map((relatedItem: any) => ({\n id: relatedItem.id,\n label: relatedItem.label,\n list: relatedItem.list,\n })),\n }\n }\n\n const rationItems = ration.related.list\n .find((obj: any) => obj.label === \"Бад элемент рациона\").list\n .map((item: any) => ({\n ...item.fields\n }));\n\n const elements = await client.get<{\n list: {\n key: string;\n fields: Omit;\n }[];\n }>(`/c105a902t28r/json/v2`, {\n headers: {\n view: `c105a902ts5c28cs9r349`,\n token,\n limit: 10000,\n },\n });\n\n const supplements = await client.get<{\n list: {\n key: string;\n fields: Omit;\n }[];\n }>(`/c105a902t157r/json/v2`, {\n headers: {\n view: `c105a902ts5c157cs9r572`,\n token,\n limit: 10000,\n },\n });\n const supplementsComposition = await client.get<{\n list: {\n key: string;\n fields: Omit;\n }[];\n }>(`/c105a902t161r/json/v2`, {\n headers: {\n view: `c105a902ts5c161cs9r575`,\n token,\n limit: 10000,\n },\n });\n\n const data = {\n ...values,\n ration,\n rationItems,\n elements: transformElementsListForLite(\n elements.data.list.map((item: any) => ({\n key: item.key,\n ...item.fields,\n }))\n ),\n supplements: supplements.data.list.map((item: any) => ({\n key: item.key,\n ...item.fields,\n })),\n supplementsComposition: supplementsComposition.data.list.map(\n (item: any) => ({\n key: item.key,\n ...item.fields,\n })\n ),\n };\n\n return data;\n}\n\nasync function printSelf(\n values: any,\n logos?: [{ logo: string, logo_size?: string }],\n copyright?: string,\n extraHtml?: string | null,\n appointment?: string | null,\n isSuplementVisible?: boolean\n) {\n const elements = await get(28, 349);\n // @ts-ignore\n const module = await import(\"@nutrilogic/print\");\n\n const template = await module.runPrint(\n { ...values, elements },\n logos,\n copyright,\n extraHtml || \"\",\n appointment || \"\",\n {\n isSuplementVisiable: isSuplementVisible\n }\n );\n const isHybridUser = window.location.pathname === \"/pl\" || window.location.pathname === \"/lp\";\n\n if (isHybridUser) {\n await hybrid.post(\n `/${process.env.REACT_APP_API_KEY}t162r/json/v2`,\n {\n data: {\n custom_email: values.patient.fields.custom_login,\n custom_patientkey: values.patient.key,\n custom_исходник: template,\n custom_фио_пациента: values.patient.fields.custom_ио\n },\n },\n {\n responseType: \"blob\",\n }\n );\n\n return;\n }\n\n await client.post(\n `/${process.env.REACT_APP_API_KEY}t162r/json/v2`,\n {\n data: {\n custom_email: values.patient.fields.custom_login,\n custom_patientkey: values.patient.key,\n custom_исходник: template,\n custom_фио_пациента: values.patient.fields.custom_ио\n },\n },\n {\n responseType: \"blob\",\n }\n );\n\n return template;\n}\n\nasync function printLiteDepersonalized(\n data: Data,\n token: AxiosRequestConfig,\n extraHtml?: string,\n) {\n // @ts-ignore\n const module = await import(\"@nutrilogic/print\");\n const parsedData = await parseSelftestData(data, token) as DataLite;\n const template = await module.runLiteDepersonalizedPrint({ data: parsedData, extraHtml});\n const blob = await generatePDFFromTemplate(template, token, \"295.3mm\");\n\n return blob;\n}\n\nexport const useRegistartion = (\n token: string | null,\n userType: UserType,\n setIsLoading: (isLoading: boolean) => void,\n setSelftestData: (selftestData: Data) => void,\n setDietanamnezChartItems: (data: DietanamnezChartItem[]) => void,\n setBlob: (blob: Blob) => void,\n setParsedSelftestData: (data: DataLite) => void,\n isInitial: boolean\n): StateManagerType => {\n const [screen, setScreen, removeScreen] = useLocalStorage(\n `screen_${token}`\n );\n const [schemeData, setSchemeData, removeSchemeData] = useLocalStorage(\n `schemeData_${token}`\n );\n const [isError, setIsError] = useState(false);\n const [linkInfo, setLinkInfo] = useState();\n\n const handleStart = async (token: string) => {\n try {\n // @ts-ignore\n const data = schemeData && schemeData?.custom?.custom_генерировать_бад_рацион_при_саморегистрации && !schemeData?.custom?.custom_не_запоминать_текущий_экран ? schemeData : await getRegistrationInfo(token);\n // @ts-ignore\n setSchemeData(data)\n\n if (!screen) {\n setScreen(\"WELCOME\");\n }\n // @ts-ignore\n setLinkInfo(data);\n } catch (error) {\n console.error(error);\n setIsError(true);\n }\n };\n\n const isEpharmacy = linkInfo?.custom?.custom_генерировать_бад_рацион_при_саморегистрации;\n const notUseStorage = linkInfo?.custom?.custom_не_запоминать_текущий_экран;\n const showDeficit = linkInfo?.custom?.custom_показывать_экран_выявлен_дефицит_потребления;\n\n if (screen === \"FINISH\" || (isEpharmacy && notUseStorage)) {\n window.addEventListener(\"beforeunload\", () => {\n localStorage.clear();\n insertCss(linkInfo?.custom?.custom_additional_data?.css || \"\");\n })\n }\n\n const isShowAllergensScreen = linkInfo?.custom?.custom_показывать_экран_аллергии;\n\n let screens = [\n \"WELCOME\",\n \"REGISTRATION_SUCCESS\",\n \"DIETANAMNEZ\",\n \"DIETANAMNEZ_TILES\",\n \"ALLERGENS\",\n \"AGREEMENT\",\n \"REGISTRATION\",\n \"ANTHROPOMETRY\",\n \"FINISH\",\n ] as Screen[];\n\n if (linkInfo?.custom && !isShowAllergensScreen) {\n screens = [\n \"WELCOME\",\n \"REGISTRATION_SUCCESS\",\n \"DIETANAMNEZ\",\n \"DIETANAMNEZ_TILES\",\n \"AGREEMENT\",\n \"REGISTRATION\",\n \"ANTHROPOMETRY\",\n \"FINISH\",\n ];\n }\n\n const getScreensEpharmacy = () => {\n const defaultScreens = [\n \"WELCOME\",\n \"REGISTRATION_SUCCESS\",\n \"DIETANAMNEZ\",\n \"DIETANAMNEZ_TILES\",\n \"REGISTRATION\",\n \"DEFICIT\",\n \"PRODUCT\",\n ] as Screen[]\n\n if(!showDeficit) defaultScreens.splice(defaultScreens.indexOf('DEFICIT'), 1)\n if((screen === 'DEFICIT' || screen === 'PRODUCT') && isInitial && !notUseStorage) setScreen('REGISTRATION') \n \n return defaultScreens\n }\n\n if (isEpharmacy) { \n screens = getScreensEpharmacy()\n }\n\n const PatientQueryParams = new URLSearchParams(document.location.search);\n\n const [patient, setPatient, removePatient] = useLocalStorage(\n `patient_${token}`,\n {\n custom_firstname: PatientQueryParams.get('firstname') || \"\",\n custom_midname: PatientQueryParams.get('middlename') || \"\",\n custom_lastname: PatientQueryParams.get('lastname') || \"\",\n custom_дата_рождения: \"\",\n custom_sexint_save: \"\",\n custom_login: PatientQueryParams.get('email') || \"\",\n custom_телефон: PatientQueryParams.get('phone') ? `+${PatientQueryParams.get('phone')?.trim()}` : \"\",\n custom_адрес: \"\",\n }\n );\n const [allergens = [], setAllergens, removeAllergens] = useLocalStorage<\n Allergen[]\n >(`allergens_${token}`, []);\n const [dietanamnez, setDietanamnez, removeDietanamnez] =\n useLocalStorage(`dietanamnez_${token}`, {\n custom_специфические_виды_питания: [],\n });\n const [registrationData, setRegistrationData, removeRegistrationData] = useLocalStorage(`registration_values_${token}`, null)\n const [dietanamnezItems = [], setDietanamnezItems, removeDietanamnezItems] =\n useLocalStorage(`dietanamnezItems_${token}`, []);\n const [step = 0, setStep, removeStep] = useLocalStorage(\n `step_${token}`,\n 0\n );\n\n useEffect(() => {\n setExtra(\"STATE\", {\n screen,\n step,\n patient,\n allergens,\n dietanamnez,\n dietanamnezItems,\n });\n });\n\n useEffect(() => {\n if (!linkInfo && token) {\n handleStart(token);\n }\n }, [token]);\n \n const onPrevScreen = () => {\n const currentIndex = screens.indexOf(screen as typeof screens[number]);\n setScreen(screens[currentIndex - 1]);\n };\n\n const onNextScreen = async (exists = false) => {\n const currentIndex = screens.indexOf(screen as typeof screens[number]);\n const currentSavedIndex = screens.indexOf(screen as typeof screens[number]);\n const nextScreen = screens[currentIndex + 1];\n\n if (screen === \"WELCOME\" && token) await sendStartButtonMetric(token);\n\n if (nextScreen === \"FINISH\" && !exists) {\n setIsLoading(true);\n\n const values = await saveRegistrationData();\n const logos = linkInfo?.custom?.custom_additional_data?.report_title_page_logo;\n const copyright = linkInfo?.custom?.custom_additional_data?.report_footer_copyright;\n const extraHtml = linkInfo?.custom?.custom_дополнительный_текст_отчета;\n const appointment = linkInfo?.custom?.custom_формированть_в_да_назначение_к_врачам\n ? values.dietanamnez.fields.custom_заключение_направление_к_врачам\n : null;\n\n const isHybridUser = window.location.pathname === \"/pl\" || window.location.pathname === \"/lp\";\n\n if (userType === UserType.PRO || isHybridUser) {\n await printSelf(\n { ...values },\n logos,\n copyright,\n extraHtml,\n appointment,\n );\n }\n\n setIsLoading(false);\n }\n if ((nextScreen === \"DEFICIT\" && isEpharmacy) || (nextScreen === \"PRODUCT\" && isEpharmacy && !showDeficit)) {\n setIsLoading(true);\n\n const reportType = linkInfo?.custom?.custom_additional_data?.selfregistration_report_type;\n const token = await getPublicToken(client);\n\n /*Получение и сохранение данных для экрана дефицита и продукции. Есть на self pro и self lite*/\n // @ts-ignore\n const values = !notUseStorage && registrationData ? registrationData : await saveRegistrationData();\n setRegistrationData(values)\n setSelftestData(values);\n const parsedValues = await parseSelftestData(values, token);\n setParsedSelftestData(parsedValues);\n\n const dietanamnezData = getDietanamnezData(parsedValues);\n\n setDietanamnezChartItems(dietanamnezData);\n\n let blob = null;\n\n /*Дополнительная страница для отчёта self pro и self lite*/\n const extraHtml = linkInfo?.custom?.custom_дополнительный_текст_отчета;\n\n if(reportType === 'pro') {\n const logos = linkInfo?.custom?.custom_additional_data?.report_title_page_logo;\n const copyright = linkInfo?.custom?.custom_additional_data?.report_footer_copyright;\n const appointment = linkInfo?.custom?.custom_формированть_в_да_назначение_к_врачам\n ? values.dietanamnez.fields.custom_заключение_направление_к_врачам\n : null;\n const isSuplementVisible = linkInfo?.custom?.custom_additional_data?.report_is_supliment_visible || false\n const template = await printSelf(\n isSuplementVisible ? {...parsedValues} : {...values},\n logos,\n copyright,\n extraHtml,\n appointment,\n isSuplementVisible\n );\n // @ts-ignore\n blob = await generatePDFFromTemplate(template, token, \"297mm\");\n }\n else {\n blob = await printLiteDepersonalized(values, token, extraHtml || \"\")\n }\n\n setBlob(blob);\n\n window.parent.postMessage(\n JSON.stringify({ selftest_status: \"COMPLETE\", key: values.patient.key }),\n \"*\"\n );\n\n setIsLoading(false);\n }\n\n if (currentIndex >= currentSavedIndex && !isError) {\n setScreen(nextScreen);\n window.scrollTo(0, 0);\n }\n\n if (nextScreen === \"FINISH\" || nextScreen === \"DEFICIT\") {\n localStorage.removeItem('self_registration_id');\n }\n\n if (nextScreen === \"FINISH\" || (isEpharmacy && notUseStorage)) {\n window.addEventListener(\"unload\", () => {\n removeSchemeData();\n removeScreen();\n removeAllergens();\n removeDietanamnez();\n removeDietanamnezItems();\n removePatient();\n removeStep();\n removeRegistrationData();\n });\n }\n };\n\n return {\n linkInfo,\n progress: screens.indexOf(screen as typeof screens[number]) / (screens.length - 1),\n\n screen,\n setScreen,\n patient,\n updatePatient: (values: Partial) => {\n setPatient({\n ...patient,\n ...values,\n });\n },\n allergens,\n setAllergens,\n dietanamnez,\n updateDietanamnez: async (values: Partial) => {\n removeDietanamnezItems();\n\n setDietanamnez({\n ...dietanamnez!,\n ...values,\n });\n },\n dietanamnezItems,\n setDietanamnezItem: async (key: string, item?: DietanamnezItemForm) => {\n const withoutCurrent = dietanamnezItems.filter(\n (item) => item.custom_блюдо !== key\n );\n\n if (item) {\n setDietanamnezItems(\n withoutCurrent.concat({\n custom_добавить_исключить: 1,\n custom_блюдо: key,\n ...item,\n })\n );\n } else {\n /*Если прошный юзер - отправляем информацию о плитках \"никогда/очень редко\"*/\n if(userType === UserType.PRO) {\n setDietanamnezItems(\n withoutCurrent.concat({\n custom_добавить_исключить: 2,\n custom_блюдо: key\n })\n );\n }\n else {\n setDietanamnezItems(withoutCurrent);\n }\n }\n },\n step,\n setStep,\n\n onPrevScreen,\n onNextScreen,\n isError,\n };\n};\n","import { client } from \"./client\";\n\ntype Config = {\n id: string;\n ret: string;\n ContactArea: string;\n};\n\nexport const getContactToken = async (data: Config) => {\n const response = await client.post<{ token: string }>(\n \"/authenticate/json/v2\",\n undefined,\n {\n headers: {\n ContactArea: data.ContactArea,\n context: data.ContactArea,\n Remember: \"true\",\n },\n auth: {\n username: data.id,\n password: data.ret,\n },\n }\n );\n\n return response.data.token;\n};\n\n","import { client } from \"./client\";\n\nimport { Dietanamnez } from \"types/Dietanamnez\";\nimport { DietanamnezItem } from \"types/DietanamnezItem\";\nimport { UserType } from \"types/UserType\";\n\nexport type DietanamnezResponse = {\n key: string;\n\n fields: {\n custom_тип_да: {\n value: Dietanamnez[\"custom_тип_да\"];\n };\n custom_специфические_виды_питания:\n | null\n | {\n key: string;\n }[];\n custom_фио_специалиста: string;\n };\n\n related: {\n count: number;\n list: {\n id: string;\n list: {\n key: string;\n fields: {\n custom_блюдо: {\n key: string;\n };\n custom_добавить_исключить: {\n value: number;\n };\n custom_количество: number;\n custom_частота_употребления: {\n key: string;\n };\n };\n }[];\n }[];\n };\n};\n\nexport async function getDietanamnez(dietanamnezKey: string, token: string) {\n const { data } = await client.get(\n `/${dietanamnezKey}/json/v2`,\n {\n headers: {\n token,\n view: \"with_staff_name\",\n limit: 10000,\n },\n }\n );\n\n return {\n dietanamnez: {\n key: data.key,\n custom_фио_специалиста: data.fields.custom_фио_специалиста,\n custom_специфические_виды_питания: (\n data.fields.custom_специфические_виды_питания || []\n ).map((item) => item.key),\n custom_тип_да: data.fields.custom_тип_да.value,\n },\n dietanamnezItems: data.related.list\n .map((item) =>\n item.list.map(({ key, fields }) => ({\n key,\n custom_количество: fields.custom_количество,\n custom_блюдо: fields.custom_блюдо.key,\n custom_частота_употребления: fields?.custom_частота_употребления?.key,\n custom_добавить_исключить: fields.custom_добавить_исключить.value,\n }))\n )\n .reduce((acc, items) => {\n acc.push(...items);\n return acc;\n }, [] as (DietanamnezItem & { key: string })[]),\n };\n}\n\nexport async function updateDietanamnez(\n dietanamnezKey: string,\n token: string,\n values: Partial\n) {\n const { data } = await client.put(\n `/${dietanamnezKey}/json/v2`,\n { data: values },\n {\n headers: {\n token,\n },\n }\n );\n\n return data;\n}\n\nexport async function addDietanamnezItem(\n dietanamnezKey: string,\n token: string,\n values: DietanamnezItem\n) {\n const { data } = await client.post(\n `/${process.env.REACT_APP_API_KEY}t65r/json/v2`,\n {\n data: {\n ___parent: dietanamnezKey,\n ...values,\n },\n },\n {\n headers: {\n token,\n },\n }\n );\n\n return data;\n}\n\nexport async function updateDietanamnezItem(\n key: string,\n token: string,\n values: Partial\n) {\n const { data } = await client.put(\n `/${key}/json/v2`,\n { data: values },\n {\n headers: {\n token,\n },\n }\n );\n\n return data;\n}\n\nexport async function removeDietanamnezItem(key: string, token: string) {\n const { data } = await client.delete(`/${key}/json/v2`, {\n headers: {\n token,\n },\n });\n\n return data;\n}\n\nexport async function finishDietanamnez(\n dietanamnezKey: string,\n userType: UserType,\n token: string\n) {\n if (userType === UserType.PRO) {\n await updateDietanamnez(dietanamnezKey, token, {\n custom_дата_назначения: new Date().toISOString(),\n });\n }\n\n await client.post(\n `/${process.env.REACT_APP_API_KEY}t179r/json/v2`,\n {\n parameters: {\n da: dietanamnezKey,\n send_mail: true,\n },\n },\n {\n headers: {\n token,\n Function: \"selftestFinish\",\n },\n }\n );\n}\n","import { useState, useEffect } from \"react\";\nimport useLocalStorage from \"react-use/lib/useLocalStorage\";\nimport { addBreadcrumb, setExtra } from \"@sentry/react\";\n\nimport { getDietanamnezInfo } from \"api/getLinkInfo\";\nimport { LinkInfo } from \"types/LinkInfo\";\nimport { getContactToken } from \"api/getContactToken\";\nimport {\n getDietanamnez,\n updateDietanamnez,\n addDietanamnezItem,\n updateDietanamnezItem,\n removeDietanamnezItem,\n finishDietanamnez,\n} from \"api/dietanamnez\";\n\nimport { Patient } from \"types/Patient\";\nimport { Allergen } from \"types/Allergen\";\nimport { Dietanamnez } from \"types/Dietanamnez\";\nimport { DietanamnezItem, DietanamnezItemForm } from \"types/DietanamnezItem\";\nimport { StateManagerType } from \"./StateManagerType\";\nimport { Screen } from \"./allScreens\";\nimport { UserType } from \"types/UserType\";\nimport { insertCss } from \"utils/insertCss\";\n\ntype SavedDietanamnezItem = DietanamnezItem & {\n key: string;\n};\n\nexport const useDietanamnez = (\n id: string | null,\n userType: UserType\n): StateManagerType => {\n const screens = {\n [UserType.LITE]: [\n \"WELCOME\",\n \"DIETANAMNEZ\",\n \"DIETANAMNEZ_TILES\",\n \"SUPPLEMENT\",\n \"FINISH\",\n ] as Screen[],\n [UserType.PRO]: [\n \"WELCOME\",\n \"DIETANAMNEZ\",\n \"DIETANAMNEZ_TILES\",\n \"FINISH\",\n ] as Screen[],\n }[userType];\n type DietanamnezScreen = typeof screens[number];\n const [token, setToken] = useState();\n const [screen, setScreen, removeScreen] = useLocalStorage(\n `screen_${id}`\n );\n const [step = 0, setStep, removeStep] = useLocalStorage(\n `step_${id}`,\n 0\n );\n const [isError, setIsError] = useState(false);\n const [linkInfo, setLinkInfo] = useState();\n const [dietanamnez, setDietanamnez] = useState();\n const [dietanamnezItems = [], setDietanamnezItems] = useState<\n SavedDietanamnezItem[]\n >([]);\n\n const handleStart = async (id: string) => {\n try {\n const data = await getDietanamnezInfo(id);\n const token = await getContactToken({\n id: data.id,\n ret: data.ret,\n ContactArea: data.contactarea,\n });\n\n const { dietanamnez, dietanamnezItems } = await getDietanamnez(\n data.da_key,\n token\n );\n\n if (!screen) {\n setScreen(\"WELCOME\");\n }\n\n setToken(token);\n\n setDietanamnez(dietanamnez);\n setDietanamnezItems(dietanamnezItems);\n\n setLinkInfo({\n consent: \"\",\n userName: data.io,\n manufacturers: data.manufacturers,\n authorName: dietanamnez.custom_фио_специалиста,\n custom: {\n custom_additional_data: {\n logo: data.custom_data?.logo,\n logo_welcome_size: data.custom_data?.logo_welcome_size,\n logo_final_size: data.custom_data?.logo_final_size,\n replacement_footer_copyright: data.custom_data?.replacement_footer_copyright!,\n selfregistration_report_type: data.custom_data?.selfregistration_report_type,\n }\n },\n logo: data.custom_data?.logo,\n link: data.link,\n country: data.country?.key || null,\n });\n\n if (data.custom_data?.css) {\n insertCss(data.custom_data?.css);\n }\n } catch (error) {\n console.error(error);\n setIsError(true);\n }\n };\n\n useEffect(() => {\n setExtra(\"STATE\", {\n screen,\n step,\n dietanamnez,\n dietanamnezItems,\n });\n });\n\n useEffect(() => {\n if (!linkInfo && id) {\n handleStart(id);\n }\n }, [id]);\n\n const addDietanamnezItemHandler = async (item: DietanamnezItem) => {\n const { key: itemKey } = await addDietanamnezItem(\n dietanamnez?.key!,\n token!,\n item\n );\n\n setDietanamnezItems((dietanamnezItems) =>\n dietanamnezItems.concat({\n ...item,\n key: itemKey,\n })\n );\n }\n\n const onPrevScreen = () => {\n const currentIndex = screens.indexOf(screen as DietanamnezScreen);\n setScreen(screens[currentIndex - 1]);\n };\n\n const onNextScreen = async () => {\n const currentIndex = screens.indexOf(screen as DietanamnezScreen);\n const currentSavedIndex = screens.indexOf(screen as DietanamnezScreen);\n const nextScreen = screens[currentIndex + 1];\n\n if (nextScreen === \"FINISH\") {\n await finishDietanamnez(dietanamnez?.key!, userType, token!);\n }\n\n if (currentIndex >= currentSavedIndex && !isError) {\n setScreen(nextScreen);\n }\n\n if (nextScreen === \"FINISH\") {\n window.addEventListener(\"unload\", () => {\n removeScreen();\n removeStep();\n });\n window.parent.postMessage(\n JSON.stringify({ selftest_status: \"COMPLETE\", key: dietanamnez?.key! }),\n \"*\"\n );\n }\n };\n\n return {\n linkInfo,\n progress: 0.15,\n\n patient: {} as Patient,\n updatePatient: () => null,\n allergens: [] as Allergen[],\n setAllergens: () => null,\n screen,\n setScreen,\n dietanamnez,\n updateDietanamnez: async (values: Partial) => {\n await updateDietanamnez(dietanamnez?.key!, token!, values);\n setDietanamnez({\n ...dietanamnez!,\n ...values,\n });\n },\n dietanamnezItems,\n setDietanamnezItem: async (key: string, values?: DietanamnezItemForm) => {\n addBreadcrumb({\n type: \"debug\",\n message: \"Set DietanamnezItem\",\n data: {\n key,\n ...(values || {}),\n },\n });\n\n const currentItem = dietanamnezItems.find(\n (item) => item.custom_блюдо === key\n );\n\n if (currentItem) {\n /*При повторном изменнеии значение плитки на вариант \"никогда / иногда\" для lite пользователя, удалить значение этой плитки*/\n if(!values && userType !== UserType.PRO) {\n // @ts-ignore\n await removeDietanamnezItem(currentItem.key, token!);\n setDietanamnezItems((dietanamnezItems) =>\n dietanamnezItems.filter((item) => item !== currentItem)\n );\n\n return;\n }\n\n /*При повторном изменнеии значение плитки на вариант, отличный от \"никогда / иногда\" для lite/pro пользователя, обновить значение плитки*/\n if(values) {\n await updateDietanamnezItem(currentItem.key, token!, {\n ...values,\n custom_добавить_исключить: 1\n });\n\n setDietanamnezItems((dietanamnezItems) =>\n dietanamnezItems.map((item) =>\n item === currentItem\n ? {\n ...currentItem,\n ...values,\n custom_добавить_исключить: 1\n }\n : item\n )\n );\n }\n else {\n /*При повторном изменнеии значение плитки на вариант \"никогда / иногда\" для pro пользователя, обновить значение плитки*/\n await updateDietanamnezItem(currentItem.key, token!, {\n custom_количество: null,\n custom_частота_употребления: null,\n custom_добавить_исключить: 2\n });\n\n setDietanamnezItems((dietanamnezItems) =>\n dietanamnezItems.map((item) =>\n item === currentItem\n ? {\n ...currentItem,\n custom_количество: null,\n custom_частота_употребления: null,\n custom_добавить_исключить: 2\n }\n : item\n )\n );\n }\n\n return;\n }\n\n\n if (values) {\n /*При первом изменнеии значение плитки на вариант, отличный от \"никогда / иногда\" для lite/pro пользователя, занести значение плитки*/\n const item = {\n ...values,\n custom_добавить_исключить: 1,\n custom_блюдо: key,\n };\n\n await addDietanamnezItemHandler(item)\n } else {\n if(userType === UserType.PRO) {\n /*При первом изменнеии значение плитки на вариант \"никогда / иногда\" для pro пользователя, занести значение плитки*/\n const item = {\n custom_добавить_исключить: 2,\n custom_блюдо: key,\n };\n\n await addDietanamnezItemHandler(item)\n }\n }\n },\n step,\n setStep,\n isError,\n\n onPrevScreen,\n onNextScreen,\n };\n};\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgWelcomeRation(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 48,\n height: 48,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M22 6v2H10V6h12zm1-2a1 1 0 0 1 1 1v1h3a3 3 0 0 1 3 3v2h1a1 1 0 1 1 0 2h-1v4.005a9.386 9.386 0 0 1 2.236.209c.444.093.873.21 1.27.34.055-2.106.522-4.016 1.916-5.403C36.908 10.672 39.232 10 42.5 10h1v1c0 2.007-.282 4.085-1.688 5.636a5.668 5.668 0 0 1-.832.753c1.975.672 3.55 1.985 4.381 4.009.905 2.202.864 5.09-.222 8.622-1.612 5.247-4.267 7.274-6.858 7.835-1.837.398-3.11-.12-3.781-.417-.67.297-1.944.815-3.78.417a7.265 7.265 0 0 1-.72-.194V39a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V9a3 3 0 0 1 3-3h3V5a1 1 0 0 1 1-1h14zm4 4a1 1 0 0 1 1 1v2h-2a1 1 0 1 0 0 2h2v4.395c-1.966.675-3.532 1.986-4.361 4.003-.43 1.047-.647 2.25-.639 3.602H12a1 1 0 1 0 0 2h11.16c.095.64.232 1.306.411 2H12a1 1 0 1 0 0 2h12c.062 0 .122-.006.181-.016 1.016 2.825 2.362 4.593 3.819 5.652V39a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h3v1a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V8h3zm12.814 11.126c-.757-.196-1.705-.15-2.642.046-.93.194-1.743.512-2.189.758l-.483.266-.483-.266c-.446-.246-1.258-.564-2.189-.758-.937-.195-1.885-.242-2.642-.046-1.782.462-3.053 1.463-3.697 3.032-.662 1.611-.729 3.982.283 7.274 1.458 4.741 3.658 6.098 5.37 6.469 1.277.276 2.09-.087 2.624-.325h.001l.025-.012c.108-.048.267-.12.413-.164l.295-.092.295.092c.145.044.304.116.413.164l.025.011h.001c.534.239 1.347.602 2.623.326 1.713-.371 3.913-1.728 5.37-6.469 1.013-3.292.946-5.662.284-7.274-.644-1.569-1.915-2.57-3.697-3.032zM39.4 22.8a1 1 0 0 1 1.2-1.6c1.369 1.027 1.78 2.67 1.724 4.273-.058 1.613-.585 3.373-1.326 4.952a1 1 0 1 1-1.81-.85c.666-1.42 1.092-2.91 1.137-4.173.045-1.272-.294-2.129-.925-2.602zM33 40a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2h-2zM8 14a1 1 0 1 0 0 2h9a1 1 0 1 0 0-2H8zm-1 5a1 1 0 0 1 1-1h5a1 1 0 1 1 0 2H8a1 1 0 0 1-1-1zm5 14a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2h-4zm-3-7a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm-1 5a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm1 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm31.33-18.706c-.77.85-2.165 1.538-4.793 1.68.12-1.542.53-2.643 1.296-3.405.821-.818 2.22-1.413 4.634-1.542-.098 1.394-.423 2.478-1.137 3.267z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWelcomeRation);\nexport default __webpack_public_path__ + \"static/media/welcome_ration.b489bf9854bcac4a21d4df496467e3c1.svg\";\nexport { ForwardRef as ReactComponent };","import { createContext, useContext, useState } from \"react\";\n\nimport { UserType } from \"types/UserType\";\n\nimport { StateManagerType } from \"./StateManagerType\";\n\nimport { useRegistartion } from \"./useRegistration\";\nimport { useDietanamnez } from \"./useDietanamnez\";\n\nimport { getQueryVariable } from \"../getQueryVariable\";\nimport { Data, DataLite } from \"types/Data\";\nimport { DietanamnezChartItem } from \"types/DietanamnezItem\";\n\ntype StateManager = Omit & {\n screen: StateManagerType[\"screen\"] | \"ERROR\";\n isInitial: boolean;\n setIsInitial: (value: boolean) => void;\n isLoading: boolean;\n setIsLoading: (isLoading: boolean) => void;\n selftestData: Data;\n blob: Blob;\n dietanamnezChartItems: DietanamnezChartItem[];\n parsedSelftestData: DataLite;\n type: \"DIETANAMNEZ\" | \"REGISTRATION\";\n userType: UserType;\n};\n\nexport const StateManagerContext = createContext(\n undefined\n);\n\n/* eslint-disable react-hooks/rules-of-hooks */\n\nexport const useStateManager = (): StateManager => {\n const context = useContext(StateManagerContext);\n\n if (context) {\n return context;\n }\n\n const userType =\n window.location.pathname === \"/p\" ? UserType.PRO : UserType.LITE;\n\n const tokenRegistration = getQueryVariable(\"r\");\n const tokenDietanamnez = getQueryVariable(\"i\");\n\n const [isInitial, setIsInitial] = useState(true);\n const [isLoading, setIsLoading] = useState(false);\n const [selftestData, setSelftestData] = useState(null);\n const [blob, setBlob] = useState(new Blob());\n const [dietanamnezChartItems, setDietanamnezChartItems] = useState([]);\n const [parsedSelftestData, setParsedSelftestData] = useState({} as DataLite);\n\n const data = tokenRegistration\n ? useRegistartion(tokenRegistration, userType, setIsLoading, setSelftestData, setDietanamnezChartItems, setBlob, setParsedSelftestData, isInitial)\n : useDietanamnez(tokenDietanamnez!, userType);\n\n const screen = data.isError ? \"ERROR\" : data.screen;\n\n return {\n type: tokenRegistration\n ? (\"REGISTRATION\" as const)\n : (\"DIETANAMNEZ\" as const),\n isInitial,\n setIsInitial,\n isLoading,\n setIsLoading,\n selftestData,\n blob,\n dietanamnezChartItems,\n parsedSelftestData,\n userType,\n ...data,\n screen: data.linkInfo || data.isError ? screen : undefined,\n onNextScreen: async (exists = false) => {\n setIsInitial(false);\n await data.onNextScreen(exists);\n },\n onPrevScreen: () => {\n setIsInitial(false);\n data.onPrevScreen();\n },\n };\n};\n","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport logo_short from \"../../icons/logo-short.svg\";\n\nimport { Title } from \"../Title\";\n\nimport styles from \"./ScreenInfo.module.css\";\nimport { useStateManager } from \"utils/useStateManager\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n icon?: React.ComponentType | null;\n title?: React.ReactNode;\n};\n\nconst DefaultIcon = () => {\n const { linkInfo } = useStateManager();\n const logo = {\n src: linkInfo?.logo || logo_short,\n width: 40,\n height: 40,\n }\n\n if (linkInfo?.custom?.custom_additional_data?.logo) {\n logo.src = linkInfo?.custom?.custom_additional_data.logo;\n }\n\n if (linkInfo?.custom?.custom_additional_data?.logo_welcome_size) {\n const [width, height] = linkInfo?.custom?.custom_additional_data.logo_welcome_size.split(\"x\");\n logo.width = +width;\n logo.height = +height;\n }\n\n if (linkInfo?.custom?.custom_additional_data?.logo_success_registration_size) {\n const [width, height] = linkInfo?.custom?.custom_additional_data.logo_success_registration_size.split(\"x\");\n logo.width = +width;\n logo.height = +height;\n }\n\n return \"\";\n};\n\nexport const ScreenInfo: React.FC = ({\n icon: Icon = DefaultIcon,\n title,\n children,\n}) => {\n return (\n
\n {Icon && (\n
\n \n
\n )}\n\n {title && (\n
\n {title}\n
\n )}\n\n {children}\n
\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"ScreenInfo_container__rZ0I7\",\"icon\":\"ScreenInfo_icon__H5YKL\",\"title\":\"ScreenInfo_title__L4D42\"};","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport styles from \"./IconDotLoader.module.css\";\n\nconst cx = classNames.bind(styles);\n\nexport const IconDotLoader: React.FC<{}> = () => (\n \n \n \n \n \n);\n","// extracted by mini-css-extract-plugin\nexport default {\"iconDotLoader\":\"IconDotLoader_iconDotLoader__OMZTF\",\"dot\":\"IconDotLoader_dot__dsaE5\",\"loader\":\"IconDotLoader_loader__6EQjX\"};","import React, { PropsWithChildren, useState } from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport { IconDotLoader } from \"../IconDotLoader\";\n\nimport styles from \"./Button.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n block?: boolean;\n color?: \"white\" | \"cerulean\" | \"dark\";\n title?: string;\n component?: string;\n disabled?: boolean;\n href?: string;\n isLoading?: boolean;\n size?: \"small\" | \"big\" | \"medium\";\n type?: \"button\" | \"submit\";\n rounded?: boolean;\n onClick?: () => void | Promise;\n};\n\nconst getComponent = (props: Props) => {\n const { href } = props;\n\n if (href) {\n return \"a\" as unknown as React.ComponentType;\n }\n\n return \"button\" as unknown as React.ComponentType;\n};\n\nexport const Button = React.forwardRef<\n HTMLButtonElement,\n PropsWithChildren\n>(\n (\n {\n block,\n children,\n color,\n disabled,\n href,\n isLoading,\n onClick,\n size,\n type,\n title,\n rounded,\n },\n ref\n ) => {\n const ComponentName = getComponent({ href });\n const [isLoadingState, setIsLoadingState] = useState(false);\n\n const handleClick = async () => {\n if (!onClick) {\n return;\n }\n\n setIsLoadingState(true);\n await onClick();\n setIsLoadingState(false);\n };\n\n return (\n \n {children}\n\n \n \n \n \n );\n }\n);\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"Button_button__wiIYs\",\"box\":\"Button_box__qrBQi\",\"child\":\"Button_child__98CbY\",\"loader\":\"Button_loader__S3BdI\",\"button_disabled\":\"Button_button_disabled__4lMrR\",\"button_hover\":\"Button_button_hover__BBYSj\",\"button_loading\":\"Button_button_loading__O0On4\",\"button_icon\":\"Button_button_icon__nIay1\",\"button_size_small\":\"Button_button_size_small__k0FDh\",\"button_size_big\":\"Button_button_size_big__IMt2d\",\"button_size_medium\":\"Button_button_size_medium__ygm+Z\",\"button_color_white\":\"Button_button_color_white__8i2y8\",\"button_color_blue\":\"Button_button_color_blue__vnJPe\",\"button_color_dark\":\"Button_button_color_dark__CqjOS\",\"button_color_cerulean\":\"Button_button_color_cerulean__5EdwS\",\"button_block\":\"Button_button_block__Maxqw\",\"button_uppercase\":\"Button_button_uppercase__8At0h\",\"button_rounded\":\"Button_button_rounded__t+kA3\",\"child_icon\":\"Button_child_icon__8th4u\"};","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgWelcomeSchedule(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 48,\n height: 48,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M13 6a1 1 0 0 0-1 1v32a1 1 0 1 1-2 0V12a1 1 0 1 0-2 0v17H1a1 1 0 1 0 0 2h7v8a3 3 0 0 0 3 3h26a3 3 0 0 0 3-3V14h7a1 1 0 1 0 0-2h-7V7a1 1 0 0 0-1-1H13zm25 6V8H14v31c0 .35-.06.687-.17 1H37a1 1 0 0 0 1-1V14h-2a1 1 0 1 1 0-2h2zm-8 13a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2h-4zm-1 10a1 1 0 0 1 1-1h4a1 1 0 1 1 0 2h-4a1 1 0 0 1-1-1zm1-19a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2h-4zm-1-3a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1zm13 3a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2h-2zM2 26a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1zm17-9v-4h4v4h-4zm-2-5a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-6zm11.29 18.886a1 1 0 0 1-.176 1.403l-4.5 3.5-.697.542-.624-.624-1.5-1.5a1 1 0 0 1 1.414-1.414l.876.876 3.803-2.958a1 1 0 0 1 1.403.175zm-5.142 1.434L23 32.172V31h-4v4h1.172l1.414 1.414.414.414V37h-3.5a1.5 1.5 0 0 1-1.5-1.5v-5a1.5 1.5 0 0 1 1.5-1.5h5a1.5 1.5 0 0 1 1.5 1.5v.339l-1.852 1.481zm5.141-10.434a1 1 0 0 1-.175 1.403l-4.5 3.5-.697.542-.624-.624-1.5-1.5a1 1 0 0 1 1.414-1.414l.876.876 3.803-2.958a1 1 0 0 1 1.403.175zm-5.14 1.434L23 23.172V22h-4v4h1.172l1.414 1.414.414.414V28h-3.5a1.5 1.5 0 0 1-1.5-1.5v-5a1.5 1.5 0 0 1 1.5-1.5h5a1.5 1.5 0 0 1 1.5 1.5v.339l-1.852 1.481z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWelcomeSchedule);\nexport default __webpack_public_path__ + \"static/media/welcome_schedule.5828278c02e4f2f853ad73412af2de0c.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgWelcomeAbort(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 48,\n height: 48,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M24 5a1 1 0 0 1 1 1v5a1 1 0 1 1-2 0V6a1 1 0 0 1 1-1zm-12 5a3 3 0 0 0-3 3v9h1a1 1 0 1 1 0 2H9v11a3 3 0 0 0 3 3h24a3 3 0 0 0 3-3v-2h-1a1 1 0 1 1 0-2h1V13a3 3 0 0 0-3-3h-6.316a1 1 0 1 1 0-2H36a5 5 0 0 1 5 5v18h3a1 1 0 1 1 0 2h-3v2a5 5 0 0 1-5 5H12a5 5 0 0 1-5-5V24H3a1 1 0 1 1 0-2h4v-9a5 5 0 0 1 5-5h6.316a1 1 0 1 1 0 2H12zm5 24a1 1 0 1 0 0 2h14a1 1 0 1 0 0-2H17zm19-7a1 1 0 0 1-1-1v-1a1 1 0 1 1 2 0v1a1 1 0 0 1-1 1zm1-14a1 1 0 1 0-2 0v9a1 1 0 1 0 2 0v-9zm-25-1a1 1 0 0 1 1 1v3a1 1 0 1 1-2 0v-3a1 1 0 0 1 1-1zM1 19a1 1 0 1 0 0 2h3a1 1 0 1 0 0-2H1zm42 16a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1zM25 14a1 1 0 1 0-2 0v13.586l-4.293-4.293a1 1 0 0 0-1.414 1.414l6 6 .707.707.707-.707 6-6a1 1 0 0 0-1.414-1.414L25 27.586V14zm-5 28a1 1 0 1 0 0 2h8a1 1 0 1 0 0-2h-8z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWelcomeAbort);\nexport default __webpack_public_path__ + \"static/media/welcome_abort.2d7fd2626434031000f0ef782c9951c6.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgWelcomeTrust(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 48,\n height: 48,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M21 5a1 1 0 0 0 0 2h6a1 1 0 1 0 0-2h-6zM5 38a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2H5zm36-2a1 1 0 0 1 1-1h5a1 1 0 1 1 0 2h-5a1 1 0 0 1-1-1zm-25.379-8.793a3 3 0 0 0-4.072-.158l-4.296-6.015 7.135-8.918 4.194.968-4.64 4.949a3.338 3.338 0 0 0 4.796 4.643l3.176-3.176h5.172l10.19 10.19.015.015.018.018.07.07a1 1 0 0 1 0 1.414l-.172.172a1 1 0 0 1-1.414 0l-1.586-1.586-5-5a1 1 0 0 0-1.414 1.414l4.999 5 1.587 1.586a1 1 0 0 1 0 1.414l-.172.172a1 1 0 0 1-1.414 0l-1.586-1.586v-.001l-3-3a1 1 0 0 0-1.414 1.415l2.999 3 1.587 1.586a1 1 0 0 1 0 1.414l-.172.172a1 1 0 0 1-1.414 0l-1.586-1.586-1-1a1 1 0 0 0-1.414 1.414l.999 1 1.587 1.586a1 1 0 0 1 0 1.414l-.172.172a1 1 0 0 1-1.414 0l-1.199-1.2a2.998 2.998 0 0 0-.801-2.8l-.172-.172a2.99 2.99 0 0 0-1.12-.707 3 3 0 0 0-.708-3.121l-.172-.172a2.989 2.989 0 0 0-1.954-.874 2.989 2.989 0 0 0-.874-1.954l-.172-.172a3 3 0 0 0-3.12-.708 2.988 2.988 0 0 0-.708-1.12l-.172-.172zm-5.414 5.414a3 3 0 0 1-.095-4.143l-4.845-6.784-4.892-3.913a1 1 0 0 1-.156-1.406l8-10a1 1 0 0 1 1.406-.156l4.822 3.858 6.095 1.406c.105-.037.212-.068.321-.093l5.69-1.313c.221-.051.448-.077.675-.077h5.947l5.237-3.809a1 1 0 0 1 1.369.184l8 10a1 1 0 0 1-.156 1.406l-4.829 3.863-3.61 7.22a3.001 3.001 0 0 1-.393 3.757l-.172.172a2.988 2.988 0 0 1-1.954.874 2.989 2.989 0 0 1-.874 1.954l-.172.172a2.989 2.989 0 0 1-1.954.874 2.989 2.989 0 0 1-.874 1.954l-.172.172a2.989 2.989 0 0 1-1.954.874 2.989 2.989 0 0 1-.874 1.954l-.172.172a3 3 0 0 1-4.242 0l-.879-.879-.879.879a3 3 0 0 1-4.242 0l-.172-.172a2.988 2.988 0 0 1-.707-1.12 3 3 0 0 1-3.121-.708l-.172-.172a2.989 2.989 0 0 1-.874-1.954 2.989 2.989 0 0 1-1.954-.874l-.172-.172a3 3 0 0 1-.708-3.12 2.988 2.988 0 0 1-1.12-.708l-.172-.172zm2.387-21.465l-6.75 8.438-3.438-2.75 6.75-8.438 3.438 2.75zm29.562 8.438l3.438-2.75-6.778-8.474-3.565 2.593 6.905 8.631zM33.49 12h.03l7.3 9.125-3.093 6.187-9.519-9.52a.996.996 0 0 0-.659-.29l-.006-.001-.042-.001h-6.414l-.293.293-3.47 3.469a1.338 1.338 0 0 1-1.921-1.861l5.415-5.777a.983.983 0 0 1 .496-.285l5.69-1.313a1 1 0 0 1 .225-.026h6.261zM16.621 38.207a1 1 0 0 1 0-1.414l3.172-3.172a1 1 0 0 1 1.414 0l.172.172a1 1 0 0 1 0 1.414l-1 .999v.001l-1.172 1.172-.002.001-.998.999a1 1 0 0 1-1.414 0l-.172-.172zm4 2a1 1 0 0 1 0-1.413v-.001l1.172-1.172h.001a1 1 0 0 1 1.413 0l.172.172a1 1 0 0 1 0 1.414l-1.172 1.172a1 1 0 0 1-1.414 0l-.172-.172zm-4.828-8.586l-1.172 1.172-1 1a1 1 0 0 0 0 1.414l.172.172a1 1 0 0 0 1.414 0l3.172-3.172a1 1 0 0 0 0-1.414l-.172-.172a1 1 0 0 0-1.414 0l-1 1zm-1.414-1.414a1 1 0 0 0 0-1.414l-.172-.172a1 1 0 0 0-1.414 0l-1.172 1.172a1 1 0 0 0 0 1.414l.172.172a1 1 0 0 0 1.414 0l1.172-1.172zM5 42a1 1 0 1 0 0 2h6a1 1 0 1 0 0-2H5z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWelcomeTrust);\nexport default __webpack_public_path__ + \"static/media/welcome_trust.0cd640dab8e89f5052104cba8d8f24a0.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgWelcomeTime(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 48,\n height: 48,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M41 24c0 9.389-7.611 17-17 17-5.651 0-10.658-2.757-13.75-7H13a1 1 0 1 0 0-2H8.996A16.925 16.925 0 0 1 7 24c0-9.389 7.611-17 17-17 5.651 0 10.658 2.757 13.75 7H35a1 1 0 1 0 0 2h4.004A16.925 16.925 0 0 1 41 24zM24 43c-6.824 0-12.808-3.598-16.159-9H1a1 1 0 1 1 0-2h5.761A18.928 18.928 0 0 1 5 24C5 13.507 13.507 5 24 5c6.824 0 12.808 3.598 16.159 9H47a1 1 0 1 1 0 2h-5.761A18.928 18.928 0 0 1 43 24c0 10.493-8.507 19-19 19zM3 7a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2H4a1 1 0 0 1-1-1zm40 4a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1zm-19 0a13 13 0 0 0-12.75 15.536 1 1 0 0 1-1.962.39A15 15 0 0 1 24 9a1 1 0 1 1 0 2zm14 12a1 1 0 0 1 1 1 15 15 0 0 1-17.926 14.712 1 1 0 0 1 .39-1.962A13 13 0 0 0 37 24a1 1 0 0 1 1-1zm-13-7a1 1 0 1 0-2 0v8.535l.445.297 6 4a1 1 0 0 0 1.11-1.664L25 23.465V16z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWelcomeTime);\nexport default __webpack_public_path__ + \"static/media/welcome_time.b9851c54edeb7bcf0fea214014ba407b.svg\";\nexport { ForwardRef as ReactComponent };","export enum DietanamnezType {\n SHORT = 1,\n LONG = 2,\n}","import React, { useState } from \"react\";\nimport classNames from \"classnames/bind\";\nimport { useEffect } from \"react\";\n\nimport { ReactComponent as Ration } from \"../../icons/welcome_ration.svg\";\nimport { ReactComponent as Schedule } from \"../../icons/welcome_schedule.svg\";\nimport { ReactComponent as Abort } from \"../../icons/welcome_abort.svg\";\nimport { ReactComponent as Trust } from \"../../icons/welcome_trust.svg\";\nimport { ReactComponent as Time } from \"../../icons/welcome_time.svg\";\n\nimport styles from \"./WelcomeCarousel.module.css\";\nimport { UserType } from \"types/UserType\";\nimport { DietanamnezType } from \"types/DietanamnezType\";\nimport { useStateManager } from \"utils/useStateManager\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n userType: UserType;\n dietanamnezType: DietanamnezType;\n carouselType: \"WELCOME_REGISTRY\" | \"WELCOME_DIETANAMNEZ\" | \"FINISH_REGISTRY\" | \"BACK\";\n};\n\nconst userLabels = {\n [UserType.LITE]: {\n name: \"вашу рекомендацию\",\n duration: \"72\",\n shortName: \"рекомендацию\",\n },\n [UserType.PRO]: {\n name: \"ваш рацион\",\n duration: \"24\",\n shortName: \"ваш рацион\",\n },\n};\n\nconst dietanamnezLabels = {\n [DietanamnezType.LONG]: {\n products: 100,\n groups: 13,\n duration: 20,\n },\n [DietanamnezType.SHORT]: {\n products: 36,\n groups: 7,\n duration: 10,\n },\n};\n\nexport const WelcomeCarousel: React.FC = ({\n userType,\n dietanamnezType,\n carouselType,\n}) => {\n const [slide, setSlide] = useState(0);\n const { type, linkInfo } = useStateManager();\n const isEpharmacy = linkInfo?.custom?.custom_генерировать_бад_рацион_при_саморегистрации;\n\n const labels = userLabels[userType || UserType.LITE];\n const da = dietanamnezLabels[dietanamnezType || DietanamnezType.SHORT];\n\n let welcomeSlides = [\n {\n title: \"пожалуйста, отвечайте искренне\",\n text: `И как можно точнее, но доля погрешности вполне допустима. Помогите составить ${labels.name} максимально индивидуально.`,\n icon: ,\n },\n {\n title: `опрос действует только ${labels.duration} часа`,\n text: \"Не откладывайте надолго, опрос не займет много времени. Постарайтесь ответить на все задаваемые вопросы.\",\n icon:
\n\n
\n {fullOptions.map((option) => {\n return (\n handleChange(option.value)}\n type=\"button\"\n >\n {option.label}\n {option.description && (\n \n {option.description}\n \n )}\n \n );\n })}\n
\n \n )}\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"select\":\"MobileSelect_select__pFakt\",\"selectArrow\":\"MobileSelect_selectArrow__JFCRc\",\"options\":\"MobileSelect_options__UftGY\",\"header\":\"MobileSelect_header__mScx+\",\"close\":\"MobileSelect_close__f6fCY\",\"inputWrapper\":\"MobileSelect_inputWrapper__m-DHW\",\"input\":\"MobileSelect_input__3XLPN\",\"inputIcon\":\"MobileSelect_inputIcon__FUjGy\",\"items\":\"MobileSelect_items__E4dni\",\"item\":\"MobileSelect_item__ecfPx\",\"description\":\"MobileSelect_description__gXMXK\",\"header_searchable\":\"MobileSelect_header_searchable__4Mb9W\"};","const REQUIRED = \"Поле обязательно для заполнения\";\n\nexport const required = (value: string) => {\n if (!value) {\n return REQUIRED;\n }\n\n return undefined;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"fieldset\":\"AnthropometryFields_fieldset__6iyo0\",\"select\":\"AnthropometryFields_select__L1E-0\"};","var _path, _path2, _path3, _path4, _path5, _path6, _defs;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogo64(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 64 64\",\n width: 64,\n height: 64,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M40.921 33.552c.553.318 1.262.397 1.893.397 4.97 0 5.522-5.788 4.654-11.021-.947-5.55-2.997-6.899-4.102-11.18C42.105 5.8 46.6.33 52.596.013c3.233-.159 6.31 1.189 8.36 3.726.631.793 1.104 1.665 1.499 2.538 6.31 16.254-7.888 37.028-21.06 37.583-1.42.08-2.918-.08-4.337-.555a8.027 8.027 0 0 1-1.736-.713c-.552-.238-1.025-.635-1.498-1.031l-.316-.317c-.788-.952-1.34-2.22-1.34-3.568 0-3.014 2.366-5.392 5.363-5.392 1.34.08 2.445.555 3.391 1.268Z\",\n fill: \"url(#a)\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M40.29 33.077c.237.158.395.237.632.396 1.262.952 2.05 2.537 2.05 4.202 0 3.014-2.366 5.392-5.363 5.392-3.076 0-5.285-2.616-5.915-5.47-1.42-6.661 5.126-15.225-.947-19.348-.71-.476-1.656-.476-2.445-.476-6.862 0-8.834 11.973-8.36 17.048.236 2.14.788 4.44 1.656 6.74 1.34 3.41 3.391 6.58 3.391 10.387C24.99 58.608 19.47 64 12.685 64A12.42 12.42 0 0 1 1.88 57.736C-1.275 52.265-.171 43.86 3.063 35.772c3.47-8.8 9.464-17.364 15.143-21.408 3.707-2.696 7.966-4.52 12.541-3.647a13.78 13.78 0 0 1 4.811 1.982c1.341.872 1.972 1.586 2.84 2.934 4.653 7.374-2.919 13.796 1.893 17.444Z\",\n fill: \"url(#b)\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.84,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M57.406.964c.079.634.158 1.348.158 1.982 0 6.66-5.521 12.052-12.304 12.052h-.71a16.565 16.565 0 0 1-1.183-3.171C42.105 5.8 46.6.33 52.595.012a10.07 10.07 0 0 1 4.811.952Z\",\n fill: \"url(#c)\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.3,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M23.096 58.529c-2.208 3.25-5.994 5.391-10.253 5.391-.789 0-1.499-.079-2.209-.158a6.87 6.87 0 0 1-1.104-3.727c0-3.806 3.076-6.898 6.862-6.898 3.234 0 5.995 2.3 6.704 5.392Z\",\n fill: \"#63FFDC\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M40.922 33.552c.552.318 1.262.397 1.893.397 4.969 0 5.521-5.788 4.654-11.022-.947-5.55-2.998-6.898-4.102-11.18-.71-3.33.395-6.422 2.445-8.642 1.262-.714 2.76-1.11 4.338-1.19 3.234-.158 6.31 1.19 8.36 3.727.632.793 1.105 1.665 1.5 2.537 4.495 11.498-1.263 25.135-9.702 32.43-2.84 1.982-5.916 3.172-8.992 3.251-1.42.08-2.918-.08-4.338-.555-.473-.158-1.025-.317-1.498-.555.63.238 1.34.397 2.05.397 2.998 0 5.364-2.38 5.364-5.392 0-.793-.158-1.507-.473-2.141-.631-1.507-1.499-2.062-1.499-2.062Zm-6.625 8.405a.953.953 0 0 1-.395-.396l-.315-.318a5.19 5.19 0 0 1-1.026-1.823c.08.158.08.238.158.396 0 .08.08.159.08.238.236.476.63 1.03 1.025 1.507.157.158.315.317.473.396Z\",\n fill: \"url(#d)\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10.714 63.762c-3.786-.634-6.862-2.934-8.676-6.105-3.155-5.471-2.05-13.876 1.183-21.964 3.47-8.801 9.465-17.364 15.144-21.408 3.47-2.538 7.493-4.282 11.752-3.806l-.079 5.074c-1.735-.634-5.52.555-8.124 1.665-6.31 2.538-8.36 13.083-7.887 18.079.237 2.14.789 4.44 1.656 6.74 1.341 3.409 3.392 6.58 3.392 10.386 0 5.233-3.47 9.753-8.36 11.339Z\",\n fill: \"url(#e)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"a\",\n x1: 45.74,\n y1: 18.4,\n x2: 51.599,\n y2: 33.424,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#7CCDFC\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.202,\n stopColor: \"#6AC6FC\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.606,\n stopColor: \"#3AB4FD\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#06A1FD\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"b\",\n x1: 37.168,\n y1: 38.603,\n x2: 12.89,\n y2: 36.497,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#128DE0\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#42D4CF\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"c\",\n x1: 54.232,\n y1: 11.216,\n x2: 45.942,\n y2: 2.97,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.002,\n stopColor: \"#CEF\",\n stopOpacity: 0.29\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#CEF\",\n stopOpacity: 0.83\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"d\",\n x1: 54.523,\n y1: 38.228,\n x2: 37.08,\n y2: 8.175,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.002,\n stopColor: \"#CEF\",\n stopOpacity: 0\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.304,\n stopColor: \"#CEF\",\n stopOpacity: 0.3\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.326,\n stopColor: \"#CEF\",\n stopOpacity: 0.3\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.598,\n stopColor: \"#CEF\",\n stopOpacity: 0.3\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.657,\n stopColor: \"#CEF\",\n stopOpacity: 0.344\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#CEF\",\n stopOpacity: 0.6\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"e\",\n x1: -2.852,\n y1: 49.166,\n x2: 38.629,\n y2: 25.343,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.002,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.6\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.308,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.4\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.33,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.377\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.6,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.1\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.659,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0.085\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#FFFFE6\",\n stopOpacity: 0\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogo64);\nexport default __webpack_public_path__ + \"static/media/logo64.f64964a4f9a06e6e7b2b0f6dc9556246.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState } from \"react\";\nimport classNames from \"classnames/bind\";\nimport { Form, Field } from \"react-final-form\";\nimport useSWR from \"swr\";\n\nimport { CATEGORIES } from \"../../api/categories\";\n\nimport { Screen } from \"../../components/Screen\";\nimport { Input } from \"../../components/Input\";\nimport { InputDate } from \"../../components/InputDate\";\nimport { InputPhone } from \"../../components/InputPhone\";\nimport { RadioGroup } from \"../../components/RadioGroup\";\nimport { MobileSelect } from \"../../components/MobileSelect\";\nimport { AnthropometryFields } from \"components/AnthropometryFields\";\nimport { PageLoader } from \"components/PageLoader\";\n\nimport { useStateManager } from \"utils/useStateManager\";\n\nimport { UserType } from \"types/UserType\";\n\nimport { createValidation, epharmacyFormValidator } from \"./validation\";\n\nimport styles from \"./Registration.module.css\";\n\nconst cx = classNames.bind(styles);\n\nconst radioGroupSex = [\n {\n value: \"1\",\n label: \"Мужской\",\n },\n {\n value: \"2\",\n label: \"Женский\",\n },\n];\n\nexport enum Smoking {\n YES = \"YES\",\n NO = \"NO\",\n}\n\nexport type FormValues = {\n custom_lastname: string;\n custom_firstname: string;\n custom_midname: string;\n custom_дата_рождения: string;\n custom_sexint_save: string;\n custom_login: string;\n custom_телефон: string;\n custom_страна?: string;\n custom_город?: string;\n custom_адрес: string;\n custom_масса_тела: string;\n custom_рост: string;\n custom_детская_жизненная_активность?: string;\n custom_жизненная_активность?: string;\n custom_спортивная_автивность?: string;\n smoking: Smoking;\n};\n\ntype Props = {\n onSubmit: (exists?: boolean) => void;\n};\n\ntype FormFieldProps = React.ComponentProps & {\n name: keyof FormValues;\n};\n\nconst FormField: React.FC = (props) => (\n \n {({ input, meta }) => (\n \n )}\n \n);\n\nconst calculateAge = (birthDay: number, birthMonth: number, birthYear: number) => {\n const nuw = new Date();\n const currentYear = nuw.getFullYear();\n\n let age = currentYear - birthYear;\n\n return age;\n}\nconst getIsChild = (dateString: string) => {\n const parts = dateString.split(\".\").map((item) => parseInt(item, 10)) as [\n number,\n number,\n number\n ];\n\n const age = calculateAge(...parts);\n\n return age < 18;\n};\n\nexport const Registration: React.FC = (props) => {\n const { userType, linkInfo, patient, updatePatient, isLoading, isInitial } = useStateManager();\n const isEpharmacy = linkInfo?.custom?.custom_генерировать_бад_рацион_при_саморегистрации;\n const [isChild, setIsChild] = useState(false);\n const [birthdayDate, setBirthdayDate] = useState(\"\");\n\n let isRequiredPhone = true;\n let isRequiredEmail = userType === UserType.PRO;\n if (linkInfo?.custom) {\n isRequiredPhone = linkInfo?.custom?.custom_обязательность_телефон || false;\n isRequiredEmail = linkInfo?.custom?.custom_обязательность_эл_почта || false;\n }\n\n const { data: dataCountries = [] } = useSWR<\n {\n key: string;\n custom_название: string;\n }[]\n >([CATEGORIES.COUNTRY, 301]);\n const { data: dataCities = [] } = useSWR<\n {\n key: string;\n custom_название: string;\n custom_страна: { key: string } | null;\n }[]\n >([CATEGORIES.CITY, 300]);\n\n if (isEpharmacy) {\n const handleSubmit = ({ smoking, ...formValues }: FormValues) => {\n const illness = {\n [Smoking.YES]: [\"c105a902t151r6091781\"],\n [Smoking.NO]: [],\n };\n\n updatePatient({\n ...formValues,\n custom_болезни: illness[smoking],\n custom_firstname: patient?.custom_firstname || \"ㅤ\",\n custom_lastname: patient?.custom_lastname || \"ㅤ\",\n custom_телефон: patient?.custom_телефон || \"\"\n });\n\n props.onSubmit();\n };\n if(isInitial) props.onSubmit();\n if (isLoading && isEpharmacy) {\n return (\n \n )\n }\n\n return (\n \n initialValues={\n patient || {\n custom_масса_тела: \"\",\n custom_рост: \"\",\n }\n }\n validate={epharmacyFormValidator}\n validateOnMount\n onSubmit={handleSubmit}\n >\n {({ handleSubmit, valid, values, submitting }) => {\n return (\n \n
\n \n Заполните все поля\n \n
\n
\n \n {({ input, meta }) => (\n \n ) => {\n const isChildEntered = getIsChild(event.target.value);\n if (isChildEntered !== isChild) {\n values.custom_жизненная_активность = \"\";\n values.custom_спортивная_автивность = \"\";\n values.custom_детская_жизненная_активность = \"\";\n setIsChild(isChildEntered);\n }\n setBirthdayDate(event.target.value);\n input.onChange(event.target.value);\n }}\n value={input.value}\n />\n )}\n \n \n {(props) => (\n
\n \n ) => {\n props.input.onChange(event.target.value);\n }}\n value={props.input.value}\n />\n
\n )}\n
\n {birthdayDate.split(\".\").join(\"\").replace(\"_\", \"\").length === 8 &&\n \n }\n
\n \n );\n }}\n \n );\n }\n\n const handleSubmit = (formValues: FormValues) => {\n updatePatient(formValues);\n props.onSubmit();\n };\n\n const hasCustomCities = !!linkInfo?.custom?.custom_города;\n\n\n return (\n \n initialValues={{\n ...patient!,\n custom_страна:\n patient?.custom_страна || linkInfo?.custom?.custom_страны?.[0].key,\n }}\n validate={createValidation(userType, hasCustomCities, isRequiredPhone, isRequiredEmail)}\n validateOnMount\n onSubmit={handleSubmit}\n >\n {({ handleSubmit, valid, values, submitting }) => {\n const countries =\n linkInfo?.custom?.custom_страны?.map((item) => ({\n value: item.key,\n label: item.label,\n })) ||\n dataCountries.map((item) => ({\n value: item.key,\n label: item.custom_название,\n }));\n\n const cities =\n linkInfo?.custom?.custom_города?.map((item) => ({\n value: item.key,\n label: item.label,\n })) ||\n dataCities\n .filter((item) => item.custom_страна?.key === values.custom_страна)\n .map((item) => ({\n value: item.key,\n label: item.custom_название,\n }));\n\n return (\n \n
\n \n Поля отмеченные звездочкой (\n \n *\n \n ) обязательны для заполнения\n \n
\n
\n \n \n \n \n {({ input, meta }) => (\n \n )}\n \n \n {(props) => (\n
\n \n ) => {\n props.input.onChange(event.target.value);\n }}\n value={props.input.value}\n />\n
\n )}\n
\n\n
\n \n Почта и телефон нужны для связи консультанта с вами\n \n
\n \n \n {({ input, meta }) => (\n \n )}\n \n {countries.length > 1 && (\n \n {({ input }) => (\n \n )}\n \n )}\n \n {({ input }) => (\n !item.custom_страна)\n .map((item) => ({\n value: item.key,\n label: item.custom_название,\n }))\n }\n placeholder=\"Город\"\n {...input}\n />\n )}\n \n \n
\n \n );\n }}\n \n );\n};\n","import { useEffect, useState } from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport logo from \"../../icons/logo64.svg\";\n\nimport styles from \"./PageLoader.module.css\";\nimport { useStateManager } from \"utils/useStateManager\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n\ttitle?: React.ReactNode;\n\tdescription?: React.ReactNode;\n\tduration: number;\n};\n\nconst START_OFFSET = 518.363;\nconst END_OFFSET = 103.6726;\n\nexport const PageLoader: React.FC = ({\n\ttitle,\n\tdescription,\n\tduration\n}) => {\n\tconst { linkInfo } = useStateManager();\n\tconst [offset, setOffset] = useState(START_OFFSET);\n\n\tuseEffect(() => {\n\t\tlet raf: number;\n\n\t\tconst animationIteration = (\n\t\t\ttime: number,\n\t\t\tduration: number,\n\t\t\tstart: number,\n\t\t\tend: number\n\t\t) => {\n\t\t\tconst diffTime = Math.min(1, (Date.now() - time) / duration);\n\t\t\tconst diffOffset = (start - end) * diffTime;\n\t\t\tconst newOffset = Math.max(0, start - diffOffset);\n\n\t\t\tsetOffset(newOffset);\n\n\t\t\tif (newOffset > end) {\n\t\t\t\traf = requestAnimationFrame(() =>\n\t\t\t\t\tanimationIteration(time, duration, start, end)\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tanimationIteration(Date.now(), duration * 1000, START_OFFSET, END_OFFSET);\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(raf);\n\t\t};\n\t}, []);\n\n\tconst content = (\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t\t\t

{title}

\n\t\t\t\t
\n\t\t\t\t\t{description}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n\n\treturn content;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"PageLoader_container__CSPOf\",\"loader\":\"PageLoader_loader__J39E1\",\"icon\":\"PageLoader_icon__5uqKe\",\"svg\":\"PageLoader_svg__iPr9D\",\"circle\":\"PageLoader_circle__l8EbI\",\"logo\":\"PageLoader_logo__48n6a\",\"title\":\"PageLoader_title__Xq2M3\",\"text\":\"PageLoader_text__X7N2O\"};","import { UserType } from \"types/UserType\";\nimport { isValidPhoneNumber } from \"react-phone-number-input\";\n\nimport { FormValues } from \"./Registration\";\n\nconst REQUIRED = \"Поле обязательно для заполнения\";\n\nconst isValidBirthDate = (value: string) => {\n if (!value) {\n return false;\n }\n\n const parts = value.split(\".\").reverse().map(Number) as [\n number,\n number,\n number\n ];\n\n if (parts.length !== 3) {\n return false;\n }\n\n const date = new Date(parts[0], parts[1] - 1, parts[2]);\n\n if (isNaN(date.valueOf())) {\n return false;\n }\n\n if (date.valueOf() > Date.now()) {\n return false;\n }\n\n if (\n date.getDate() !== parts[2] ||\n date.getMonth() !== parts[1] - 1 ||\n date.getFullYear() !== parts[0]\n ) {\n return false;\n }\n\n return true;\n};\n\nexport const createValidation =\n (\n userType: UserType,\n isCustom?: boolean,\n isRequiredPhone?: boolean,\n isRequiredEmail?: boolean,\n ) => (values: FormValues) => {\n let errors: { [key in keyof FormValues]?: string } = {};\n\n const requiredFields = [\n \"custom_lastname\" as const,\n \"custom_firstname\" as const,\n \"custom_дата_рождения\" as const,\n \"custom_sexint_save\" as const,\n isRequiredPhone ? \"custom_телефон\" : null,\n isRequiredEmail ? \"custom_login\" : null,\n isCustom ? \"custom_город\" : null,\n ].filter(Boolean) as (keyof FormValues)[];\n\n requiredFields.forEach((key) => {\n if (!values[key]) {\n errors[key] = REQUIRED;\n }\n });\n\n if (!isValidBirthDate(values.custom_дата_рождения)) {\n errors.custom_дата_рождения =\n errors.custom_дата_рождения || \"Некорректная дата\";\n }\n\n if (isRequiredPhone && !isValidPhoneNumber(values.custom_телефон || \"\")) {\n errors.custom_телефон = errors.custom_телефон || \"Некорректный номер\";\n }\n\n if (Object.keys(errors).length) {\n return errors;\n }\n\n return undefined;\n };\n\nexport const epharmacyFormValidator = (values: FormValues) => {\n let errors: { [key in keyof FormValues]?: string } = {};\n\n const requiredFields = [\n \"custom_дата_рождения\" as const,\n \"custom_sexint_save\" as const,\n ].filter(Boolean) as (keyof FormValues)[];\n const numberFields = [\"custom_масса_тела\", \"custom_рост\"] as const;\n\n requiredFields.forEach((key) => {\n if (!values[key]) {\n errors[key] = REQUIRED;\n }\n });\n\n if (!isValidBirthDate(values.custom_дата_рождения)) {\n errors.custom_дата_рождения =\n errors.custom_дата_рождения || \"Некорректная дата\";\n }\n\n numberFields.forEach((key) => {\n const value = values[key] as string;\n\n if (!value) {\n return;\n }\n\n const isValid = /^\\d{1,3}([,]\\d{1,2})?$/.test(value);\n\n if (!isValid) {\n errors[key] = \"Некорректное значение\";\n }\n });\n\n if (Object.keys(errors).length) {\n return errors;\n }\n\n return undefined;\n};","// extracted by mini-css-extract-plugin\nexport default {\"required\":\"Registration_required__+Blu2\",\"red-star\":\"Registration_red-star__R2t4i\",\"mobile-input\":\"Registration_mobile-input__kJThF\",\"disclaimer\":\"Registration_disclaimer__bU757\",\"disclaimer-additional\":\"Registration_disclaimer-additional__7yMZD\",\"form-body\":\"Registration_form-body__SyPpg\",\"greet\":\"Registration_greet__5qLRt\",\"button\":\"Registration_button__yAwKw\",\"buttonText\":\"Registration_buttonText__2g+TQ\",\"footer\":\"Registration_footer__n+kxV\",\"title\":\"Registration_title__5hxUi\",\"select-title\":\"Registration_select-title__wMnUw\",\"m-radio\":\"Registration_m-radio__rgxXE\",\"disclaimer__inner\":\"Registration_disclaimer__inner__A3tLD\"};","import React from \"react\";\nimport classNames from \"classnames/bind\";\nimport { Form, Field, FieldProps, FieldRenderProps } from \"react-final-form\";\nimport useSWR from \"swr\";\n\nimport { CATEGORIES } from \"../../api/categories\";\n\nimport { MobileSelect } from \"components/MobileSelect\";\nimport { Input } from \"components/Input\";\nimport { Screen } from \"components/Screen\";\nimport { RadioGroup } from \"components/RadioGroup\";\n\nimport { useStateManager } from \"utils/useStateManager\";\n\nimport { formValidator, required } from \"./validation\";\n\nimport styles from \"./Anthropometry.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n onSubmit: (exists?: boolean) => void;\n onBack: () => void;\n};\n\nenum Smoking {\n YES = \"YES\",\n NO = \"NO\",\n}\n\nexport type FormValues = {\n custom_масса_тела: string;\n custom_рост: string;\n custom_детская_жизненная_активность?: string;\n custom_жизненная_активность?: string;\n custom_спортивная_автивность?: string;\n smoking: Smoking;\n};\n\ntype FProps = FieldProps<\n string,\n FieldRenderProps,\n HTMLElement\n>;\n\ntype FormFieldProps = React.ComponentProps & {\n name: keyof FormValues;\n format?: FProps[\"format\"];\n validate?: FProps[\"validate\"];\n};\n\nconst FormField: React.FC = (props) => (\n \n {({ input, meta }) => (\n \n )}\n \n);\n\nfunction calculateAge(birthDay: number, birthMonth: number, birthYear: number) {\n const nuw = new Date();\n const currentYear = nuw.getFullYear();\n // const currentMonth = nuw.getMonth();\n // const currentDay = nuw.getDate();\n\n let age = currentYear - birthYear;\n\n // if (currentMonth < birthMonth - 1) {\n // age--;\n // }\n // if (birthMonth - 1 === currentMonth && currentDay < birthDay) {\n // age--;\n // }\n\n return age;\n}\n\nconst getIsChild = (dateString: string) => {\n const parts = dateString.split(\".\").map((item) => parseInt(item, 10)) as [\n number,\n number,\n number\n ];\n\n const age = calculateAge(...parts);\n\n return age < 18;\n};\n\nexport const Anthropometry: React.FC = (props) => {\n const { patient, updatePatient, linkInfo, isLoading } = useStateManager();\n const isChild = getIsChild(patient!.custom_дата_рождения!);\n const { data: sport = [] } = useSWR<\n {\n key: string;\n custom_наименование: string;\n custom_описание: string;\n }[]\n >([CATEGORIES.ACTIVITY_SPORT, 29]);\n const { data: life = [] } = useSWR<\n {\n key: string;\n custom_наименование: string;\n custom_описание: string;\n }[]\n >([CATEGORIES.ACTIVITY_LIFE, isChild ? 1837 : 1836]);\n\n const handleSubmit = ({ smoking, ...formValues }: FormValues) => {\n const illness = {\n [Smoking.YES]: [\"c105a902t151r6091781\"],\n [Smoking.NO]: [],\n };\n\n updatePatient({\n ...formValues,\n custom_болезни: illness[smoking],\n });\n\n props.onSubmit();\n };\n\n return (\n \n initialValues={\n patient || {\n custom_масса_тела: \"\",\n custom_рост: \"\",\n }\n }\n validate={formValidator}\n validateOnMount\n onSubmit={handleSubmit}\n >\n {({ handleSubmit, valid, submitting }) => (\n \n
\n (value ? value.replace(\".\", \",\") : value)}\n name=\"custom_масса_тела\"\n label=\"Масса тела\"\n />\n (value ? value.replace(\".\", \",\") : value)}\n name=\"custom_рост\"\n label=\"Рост, см\"\n />\n
\n
\n (\n ({\n value: item.key,\n label: item.custom_наименование,\n description: item.custom_описание,\n }))}\n placeholder=\"Жизненная активность\"\n {...input}\n />\n )}\n />\n {isChild || (\n (\n ({\n value: item.key,\n label: item.custom_наименование,\n description: item.custom_описание,\n }))}\n placeholder=\"Спортивная активность\"\n {...input}\n />\n )}\n />\n )}\n
\n {linkInfo?.custom?.custom_есть_вопрос_о_курении_в_саморегистрации && (\n
\n
\n \n {(props) => (\n \n ) => {\n props.input.onChange(event.target.value);\n }}\n value={props.input.value}\n />\n )}\n \n
\n
\n )}\n \n )}\n \n );\n};\n","import { FormValues } from \"./Anthropometry\";\n\nconst REQUIRED = \"Поле обязательно для заполнения\";\n\nexport const required = (value: string) => {\n if (!value) {\n return REQUIRED;\n }\n\n return undefined;\n};\n\nexport const formValidator = (values: FormValues) => {\n let errors: { [key in keyof FormValues]?: string } = {};\n\n const numberFields = [\"custom_масса_тела\", \"custom_рост\"] as const;\n\n numberFields.forEach((key) => {\n const value = values[key] as string;\n\n if (!value) {\n return;\n }\n\n const isValid = /^\\d{1,3}([,]\\d{1,2})?$/.test(value);\n\n if (!isValid) {\n errors[key] = \"Некорректное значение\";\n }\n });\n\n if (Object.keys(errors).length) {\n return errors;\n }\n\n return undefined;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"fieldset\":\"Anthropometry_fieldset__X+INj\",\"select\":\"Anthropometry_select__Qi2no\"};","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCheckboxCheck(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M7 10.5l4 4 7-7\",\n stroke: \"currentColor\",\n strokeWidth: 2\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCheckboxCheck);\nexport default __webpack_public_path__ + \"static/media/checkbox_check.62e3b9097e2c9558cc1adf49b707b4c3.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCrossSmall(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#3F4960\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.707 14.707a1 1 0 0 1-1.414-1.414L6.586 8 1.293 2.707a1 1 0 0 1 1.414-1.414L8 6.586l5.293-5.293a1 1 0 1 1 1.414 1.414L9.414 8l5.293 5.293a1 1 0 0 1-1.414 1.414L8 9.414l-5.293 5.293z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCrossSmall);\nexport default __webpack_public_path__ + \"static/media/cross_small.9daf61912efc13ab663a31a5f82d896e.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport { ReactComponent as Check } from \"icons/checkbox_check.svg\";\n\nimport styles from \"./Checkbox.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = Omit, \"type\" | \"className\">;\n\nexport const Checkbox: React.FC = ({ children, ...rest }) => {\n return (\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"Checkbox_container__BWOFX\",\"inputWrapper\":\"Checkbox_inputWrapper__floxM\",\"input\":\"Checkbox_input__eVCgi\",\"check\":\"Checkbox_check__7spEK\",\"text\":\"Checkbox_text__UPb1o\"};","import React, { useState, useMemo } from \"react\";\nimport classNames from \"classnames/bind\";\nimport Fuse from \"fuse.js\";\n\nimport { Checkbox } from \"../Checkbox\";\nimport { Button } from \"../Button\";\n\nimport { ReactComponent as Search } from \"../../icons/search_small.svg\";\nimport { ReactComponent as ChevronLeft } from \"../../icons/chevron-left.svg\";\nimport { ReactComponent as Cross } from \"../../icons/cross_small.svg\";\n\nimport styles from \"./SearchBox.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Option = {\n value: string;\n label: string;\n};\n\ntype Props = {\n title: string;\n placeholder: string;\n isLoading: boolean;\n options: Option[];\n onChange: (search: string, values: string[]) => void;\n onRemoveItem: (key: string) => void;\n minSearchLength?: number;\n value: string[];\n};\n\nconst fuzzyFilterOptions = (\n options: Option[],\n search: string,\n exclude: string[]\n) => {\n const withoutAdded = options.filter((item) => !exclude.includes(item.value));\n\n if (!search.length) {\n return withoutAdded;\n }\n\n const fuse = new Fuse(withoutAdded, {\n location: 0,\n distance: 100,\n threshold: 0.2,\n maxPatternLength: 100,\n keys: [\"label\"],\n });\n\n if (search.length === 1) {\n return withoutAdded.filter((item) =>\n item.label.toLowerCase().includes(search.toLowerCase())\n );\n }\n\n return fuse.search
\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"SearchBox_container__aYsHY\",\"title\":\"SearchBox_title__98U65\",\"inputContainer\":\"SearchBox_inputContainer__H18s8\",\"backButton\":\"SearchBox_backButton__FiYtP\",\"input\":\"SearchBox_input__+nuoc\",\"icon\":\"SearchBox_icon__bBoIc\",\"content\":\"SearchBox_content__K0nP0\",\"options\":\"SearchBox_options__EGpCj\",\"option\":\"SearchBox_option__iJv5P\",\"remove\":\"SearchBox_remove__C+WEd\",\"footer\":\"SearchBox_footer__Qd4eT\",\"footerButton\":\"SearchBox_footerButton__fTENg\",\"container_focused\":\"SearchBox_container_focused__ZOFr3\"};","import React, { useMemo } from \"react\";\nimport useSWR from \"swr\";\n\nimport { CATEGORIES } from \"../../api/categories\";\n\nimport { Screen } from \"components/Screen\";\nimport { SearchBox } from \"components/SearchBox\";\nimport { useStateManager } from \"utils/useStateManager\";\n\ntype Props = {\n onSubmit: (exists?: boolean) => Promise;\n onBack: () => void;\n};\n\nexport const Allergens: React.FC = (props) => {\n const { allergens, setAllergens } = useStateManager();\n const { data: ingredients = [], isValidating } = useSWR<\n {\n key: string;\n custom_наименование: string;\n }[]\n >([CATEGORIES.INGREDIENTS, 345]);\n\n const handleChange = (search: string, values: string[]) => {\n setAllergens(\n allergens.concat({\n custom_текст_поиска: search,\n custom_ингредиенты_аллергены: values,\n })\n );\n };\n\n const handleRemoveItem = (key: string) => {\n setAllergens(\n allergens\n .map((group) => ({\n ...group,\n custom_ингредиенты_аллергены:\n group.custom_ингредиенты_аллергены.filter((item) => item !== key),\n }))\n .filter((group) => group.custom_ингредиенты_аллергены.length)\n );\n };\n\n const handleSubmit = async (event: React.FormEvent) => {\n event.preventDefault();\n await props.onSubmit();\n };\n\n const options = useMemo(\n () =>\n ingredients.map((item) => ({\n value: item.key,\n label: item.custom_наименование,\n })),\n [ingredients]\n );\n const value = useMemo(\n () =>\n allergens.reduce((acc, item) => {\n acc.push(...item.custom_ингредиенты_аллергены);\n return acc;\n }, [] as string[]),\n [allergens]\n );\n\n return (\n \n \n \n );\n};\n","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport { ScreenInfo } from \"../../components/ScreenInfo\";\nimport { Button } from \"../../components/Button\";\nimport { WelcomeCarousel } from \"../../components/WelcomeCarousel\";\nimport { DietanamnezType } from \"../../types/DietanamnezType\";\n\nimport styles from \"./RegistrationSuccess.module.css\";\nimport { useStateManager } from \"utils/useStateManager\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n onSubmit: (exists?: boolean) => void;\n};\n\nexport const RegistrationSuccess: React.FC = ({ onSubmit }) => {\n const { linkInfo, userType, updateDietanamnez } = useStateManager();\n const initialDietanamnezType = linkInfo?.survey_type;\n\n const handleSubmit = (type: DietanamnezType) => {\n updateDietanamnez({\n custom_тип_да: type,\n });\n\n onSubmit();\n };\n\n return (\n \n
\n {initialDietanamnezType ? (\n \n ) : (\n

\n Выберите удобный вам формат\n опроса по фактическому питанию:\n

\n )}\n {initialDietanamnezType ? (\n
\n handleSubmit(initialDietanamnezType)}\n >\n Продолжить\n \n
\n ) : (\n
\n handleSubmit(2)}\n >\n

Я отвечу подробно

\n

\n Выбор тех, кто хочет максимальной точности анализа. Мы спросим вас\n о 100 продуктах в 13 группах. Это займет от 20 минут времени.\n

\n \n handleSubmit(1)}\n >\n

Я отвечу кратко

\n

\n Быстрый, компромиссный вариант, но все еще информативный. Мы\n спросим вас о 36 продуктах в 7 группах. Это займет от 10 минут\n времени.\n

\n \n
\n )}\n
\n
\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"info\":\"RegistrationSuccess_info__UNmfH\",\"actions\":\"RegistrationSuccess_actions__0zKCc\",\"typeButton\":\"RegistrationSuccess_typeButton__TuFbQ\",\"typeTitle\":\"RegistrationSuccess_typeTitle__fFgTU\",\"typeLabel\":\"RegistrationSuccess_typeLabel__Gmk+n\"};","import React, { useState, useEffect } from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport styles from \"./Loader.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n delay?: number;\n};\n\nexport const Loader: React.FC = (props) => {\n const [isVisible, setIsVisible] = useState(\n props.delay ? false : true\n );\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setIsVisible(true);\n }, props.delay);\n\n return () => clearTimeout(timeout);\n }, []);\n\n if (!isVisible) {\n return null;\n }\n\n return
;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"loader\":\"Loader_loader__+lRPl\",\"rotation\":\"Loader_rotation__7eXxl\"};","import React, { Suspense } from \"react\";\nimport classNames from \"classnames/bind\";\nimport { Form, Field } from \"react-final-form\";\nimport useSWR from \"swr\";\n\nimport { Screen } from \"../../components/Screen\";\nimport { Loader } from \"../../components/Loader\";\n\nimport styles from \"./Dietanamnez.module.css\";\nimport { useStateManager } from \"utils/useStateManager\";\nimport { UserType } from \"types/UserType\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n onBack: () => void;\n onSubmit: (exists?: boolean) => void;\n};\n\ntype FormValues = {\n custom_специфические_виды_питания: string[];\n};\n\ntype KindsFoodItem = {\n key: string;\n custom_наименование: string;\n custom_light: boolean;\n};\n\nconst KindsFood: React.FC<{ userType: UserType }> = ({ userType }) => {\n const { data } = useSWR([18, 356], {\n suspense: true,\n });\n\n return (\n <>\n {data\n ?.filter((item) => item.custom_light || userType === UserType.PRO)\n ?.map((item) => (\n \n {({ input }) => (\n \n )}\n \n ))}\n \n );\n};\n\nexport const Dietanamnez: React.FC = (props) => {\n const { userType, dietanamnez, updateDietanamnez } = useStateManager();\n\n const handleSubmit = async (values: FormValues) => {\n await updateDietanamnez(values);\n props.onSubmit();\n };\n\n return (\n \n initialValues={{\n custom_специфические_виды_питания:\n dietanamnez?.custom_специфические_виды_питания || [],\n }}\n validateOnMount\n onSubmit={handleSubmit}\n >\n {({ handleSubmit, values, submitting }) => (\n 0\n ? \"Продолжить\"\n : \"Не следую ни одному из них\"\n }\n onBack={props.onBack}\n onSubmit={handleSubmit}\n isLoading={submitting}\n >\n
\n Следуете ли вы этим
видам питания?\n
\n

Выберите один или несколько

\n\n
\n }>\n \n \n
\n \n )}\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"subtitle\":\"Dietanamnez_subtitle__v7ci8\",\"advice\":\"Dietanamnez_advice__KUYAs\",\"list\":\"Dietanamnez_list__7Lrya\",\"kindsFood\":\"Dietanamnez_kindsFood__mUtXZ\",\"kindsFoodCheckbox\":\"Dietanamnez_kindsFoodCheckbox__9vGjI\",\"kindsFoodContent\":\"Dietanamnez_kindsFoodContent__JhlvC\"};","export var noop = function () { };\nexport function on(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.addEventListener) {\n obj.addEventListener.apply(obj, args);\n }\n}\nexport function off(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.removeEventListener) {\n obj.removeEventListener.apply(obj, args);\n }\n}\nexport var isBrowser = typeof window !== 'undefined';\nexport var isNavigator = typeof navigator !== 'undefined';\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgInfo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21ZM12 23C18.0751 23 23 18.0751 23 12C23 5.92487 18.0751 1 12 1C5.92487 1 1 5.92487 1 12C1 18.0751 5.92487 23 12 23ZM11 17V11H13V17H11ZM11 7V9H13V7H11Z\",\n fill: \"white\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgInfo);\nexport default __webpack_public_path__ + \"static/media/info.21fb5d925d4b95faf7b204cdf74bc1e6.svg\";\nexport { ForwardRef as ReactComponent };","import { useCallback, useState, useRef, useLayoutEffect } from 'react';\nimport { isBrowser, noop } from './misc/util';\nvar useLocalStorage = function (key, initialValue, options) {\n if (!isBrowser) {\n return [initialValue, noop, noop];\n }\n if (!key) {\n throw new Error('useLocalStorage key may not be falsy');\n }\n var deserializer = options\n ? options.raw\n ? function (value) { return value; }\n : options.deserializer\n : JSON.parse;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n var initializer = useRef(function (key) {\n try {\n var serializer = options ? (options.raw ? String : options.serializer) : JSON.stringify;\n var localStorageValue = localStorage.getItem(key);\n if (localStorageValue !== null) {\n return deserializer(localStorageValue);\n }\n else {\n initialValue && localStorage.setItem(key, serializer(initialValue));\n return initialValue;\n }\n }\n catch (_a) {\n // If user is in private mode or has storage restriction\n // localStorage can throw. JSON.parse and JSON.stringify\n // can throw, too.\n return initialValue;\n }\n });\n // eslint-disable-next-line react-hooks/rules-of-hooks\n var _a = useState(function () { return initializer.current(key); }), state = _a[0], setState = _a[1];\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(function () { return setState(initializer.current(key)); }, [key]);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n var set = useCallback(function (valOrFunc) {\n try {\n var newState = typeof valOrFunc === 'function' ? valOrFunc(state) : valOrFunc;\n if (typeof newState === 'undefined')\n return;\n var value = void 0;\n if (options)\n if (options.raw)\n if (typeof newState === 'string')\n value = newState;\n else\n value = JSON.stringify(newState);\n else if (options.serializer)\n value = options.serializer(newState);\n else\n value = JSON.stringify(newState);\n else\n value = JSON.stringify(newState);\n localStorage.setItem(key, value);\n setState(deserializer(value));\n }\n catch (_a) {\n // If user is in private mode or has storage restriction\n // localStorage can throw. Also JSON.stringify can throw.\n }\n }, [key, setState]);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n var remove = useCallback(function () {\n try {\n localStorage.removeItem(key);\n setState(undefined);\n }\n catch (_a) {\n // If user is in private mode or has storage restriction\n // localStorage can throw.\n }\n }, [key, setState]);\n return [state, set, remove];\n};\nexport default useLocalStorage;\n","import React, { useState } from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport { useStateManager } from \"utils/useStateManager\";\nimport { Button } from \"../Button\";\n\nimport styles from \"./FrequencyList.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n items: {\n key: string;\n custom_частота: string;\n }[];\n onSubmit: () => void;\n onChange: (key: string) => void;\n activeKey?: string;\n};\n\nexport const FrequencyList = React.forwardRef(\n ({ items, onSubmit, onChange, activeKey }, ref) => {\n const { isLoading } = useStateManager();\n const [isSkipStepLoading, setSkipStepLoading] = useState(false);\n\n // useEffect(() => {\n // if (disabledButtons) {\n // setTimeout(() => {\n // setDisabledButtons(false)\n // }, 4000)\n // }\n // }, [disabledButtons])\n\n return (\n
\n \n {\n setSkipStepLoading(true);\n setTimeout(() => {\n setSkipStepLoading(false);\n onSubmit();\n window.scrollTo(0, 0);\n }, 500);\n }}\n isLoading={isSkipStepLoading || isLoading}\n disabled={isSkipStepLoading || isLoading}\n >\n Никогда/очень редко\n \n {items.map((frequency) => (\n onChange(frequency.key)}\n disabled={isSkipStepLoading || isLoading}\n >\n {frequency.custom_частота}\n \n ))}\n
\n
\n );\n }\n);\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"FrequencyList_container__DUWRz\",\"actions\":\"FrequencyList_actions__S2dI1\"};","import React, { useState, useRef } from \"react\";\nimport classNames from \"classnames/bind\";\nimport useSWR from \"swr\";\n\nimport { ReactComponent as Info } from \"../../icons/info.svg\";\n\nimport { Button } from \"../Button\";\nimport { FrequencyList } from \"../FrequencyList\";\n\nimport styles from \"./Tutorial.module.css\";\nimport { CATEGORIES } from \"api/categories\";\nimport { useEffect } from \"react\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n onHide: () => void;\n};\n\nconst phases = [0, 1000, 2000, 2300, 2800, 3800, 4000, 4800, 7000];\n\nexport const Tutorial: React.FC = ({ onHide }) => {\n const list = useRef(null);\n const { data: frequencies = [] } = useSWR<\n {\n key: string;\n custom_частота: string;\n }[]\n >([CATEGORIES.FREQUENCY, 86]);\n const [activeKey, setActiveKey] = useState();\n const [phase, setPhase] = useState(0);\n\n useEffect(() => {\n const start = Date.now();\n const interval = setInterval(() => {\n const now = (Date.now() - start) % 8000;\n const nextPhase = phases.findIndex((item) => now < item);\n const newPhase = nextPhase === -1 ? phases.length - 1 : nextPhase - 1;\n\n setPhase(newPhase);\n }, 100);\n\n return () => clearInterval(interval);\n }, []);\n\n useEffect(() => {\n if (list?.current) {\n if (phase === 2) {\n list.current.scrollLeft = 116;\n }\n\n if (phase === 5) {\n setActiveKey(frequencies[0]?.key);\n }\n\n if (phase === 8) {\n list.current.scrollLeft = 0;\n setActiveKey(undefined);\n }\n }\n }, [phase]);\n\n return (\n
\n \n \n
\n Выберите частоту употребления\n
порции проматывая список
значений по горизонтали\n
\n
\n \n Понятно\n \n
\n
\n\n
\n
\n
\n
\n
\n\n \n  \n
\n
\n null}\n onChange={() => null}\n ref={list}\n activeKey={activeKey}\n />\n
\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"overlay\":\"Tutorial_overlay__hmFkb\",\"swiper\":\"Tutorial_swiper__iARX-\",\"chevron\":\"Tutorial_chevron__bnahM\",\"list\":\"Tutorial_list__UUdHS\",\"overlay__text\":\"Tutorial_overlay__text__I5vaZ\",\"overlay__button\":\"Tutorial_overlay__button__N2yoX\",\"swiper__1\":\"Tutorial_swiper__1__5AYXb\",\"swiper__2\":\"Tutorial_swiper__2__1FYBm\",\"swiper__3\":\"Tutorial_swiper__3__OTSla\",\"swiper__4\":\"Tutorial_swiper__4__fmsrZ\",\"swiper__5\":\"Tutorial_swiper__5__c9lmK\",\"swiper__6\":\"Tutorial_swiper__6__gEYg7\",\"swiper__7\":\"Tutorial_swiper__7__UTNwJ\",\"swiper__8\":\"Tutorial_swiper__8__fq4gC\",\"animate-chevron\":\"Tutorial_animate-chevron__UXOBu\"};","var _g, _defs;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPlaceholder(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 288,\n height: 192,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.319 146.044a11.66 11.66 0 0 0 .308-4.848c-1.59-9.82-15.777-14.691-27.4-12.482-4.198.804-7.93 3.378-10.377 7.157-2.448 3.78-3.412 8.457-2.681 13.006.095.549.209 1.087.338 1.601l-13.005-9.884 23.846-36.822.032-.049 22.67 17.229-2.699 4.167a2.09 2.09 0 0 0-.287.722 2.1 2.1 0 0 0 .244 1.505c.262.447.678.763 1.156.878a1.752 1.752 0 0 0 1.435-.265c.207-.14.387-.323.529-.538l3.032-4.683a2.841 2.841 0 0 1 1.11-1.001l7.014-3.342-.447 7.307a6.844 6.844 0 0 1-1.066 3.282l-2.502 3.864a2.083 2.083 0 0 0-.295.716 2.142 2.142 0 0 0 .243 1.505c.132.222.302.414.503.565.197.15.419.256.654.314.236.058.48.065.719.021.238-.047.465-.144.67-.285.209-.137.39-.321.528-.539l2.508-3.872a10.827 10.827 0 0 0 1.725-5.31l.607-10.044 3.18-4.911a5.797 5.797 0 0 0 .812-1.985c.147-.713.163-1.45.046-2.17a5.834 5.834 0 0 0-.725-2.023 5.38 5.38 0 0 0-1.386-1.567l-20.35-15.467a4.915 4.915 0 0 0-1.837-.871 5.427 5.427 0 0 0-1.026-.157 4.7 4.7 0 0 0-1.001.082c-.329.07-.652.168-.967.292-.32.14-.627.317-.915.526a4.889 4.889 0 0 0-.772.634 6.476 6.476 0 0 0-.656.821l-3.18 4.912-8.74 4.18c-1.45.688-2.694 1.797-3.597 3.204l-24.88 38.418c-.14.215-.241.459-.295.716a2.142 2.142 0 0 0 .244 1.505c.131.222.302.414.502.565l33.71 25.62c.05.045.103.086.159.121l.529.402c9.128 6.938 23.087 8.923 28.092 1.195 4.229-6.46.163-16.88-6.06-23.917ZM15.66 97.552a.692.692 0 0 1 .069-.107c.103-.066.202-.143.294-.228.098-.08.188-.171.267-.273l.074-.115 3.468-5.353c.22-.336.554-.564.929-.634.375-.07.76.024 1.071.26l20.357 15.473c.156.116.289.265.39.439.1.173.168.367.198.569.038.201.037.409-.004.61-.04.2-.12.389-.232.555l-3.18 4.912-9.325 4.456-.195.109L7.65 101.357l8.012-3.805ZM8.749 159.24a11.901 11.901 0 0 1-2.41-.317 11.643 11.643 0 0 1-2.307-.825 12.35 12.35 0 0 1-3.96-3.01 12.907 12.907 0 0 1-1.494-2.063 13.44 13.44 0 0 1-1.722-4.864 14.166 14.166 0 0 1 .115-5.226c.178-.859.43-1.698.754-2.505 1.336-3.247 3.796-5.795 6.85-7.095.753-.303 1.53-.53 2.323-.678 7.187-1.366 14.995.403 19.476 3.808 2.002 1.522 3.347 3.363 3.67 5.391 1.085 6.664-8.25 15.193-18.84 17.198-.82.148-1.654.202-2.485.163l.03.023Zm4.704 6.336a12.085 12.085 0 0 1-2.424-2.49c.26-.035.52-.056.778-.105 8.036-1.527 16.147-6.686 19.886-12.982 5.12 6.336 7.188 13.904 4.712 17.727-3.386 5.159-14.723 4.104-22.982-2.173l.03.023Z\",\n fill: \"#E8ECF2\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M257.164 77.32a6.713 6.713 0 0 1 .408-2.605c.138-.299.211-.628.212-.962a2.32 2.32 0 0 0-.203-.964 3.738 3.738 0 0 0-2.115-1.533 1.915 1.915 0 0 1-.643-.336 2.033 2.033 0 0 1-.725-1.29 2.132 2.132 0 0 1 .326-1.48c.141-.207.315-.385.514-.526.206-.134.431-.227.667-.275.237-.04.479-.034.714.02 1.864.496 3.477 1.76 4.496 3.521a6.654 6.654 0 0 1 .232 5.162 2.354 2.354 0 0 0-.002 1.92 3.838 3.838 0 0 0 2.166 1.605c.235.064.456.176.651.332.195.158.361.354.488.58.12.23.203.48.243.74.034.26.02.523-.04.776a2.065 2.065 0 0 1-.306.705 1.902 1.902 0 0 1-.535.529 1.571 1.571 0 0 1-.676.258 1.642 1.642 0 0 1-.724-.038c-1.879-.514-3.501-1.8-4.521-3.585a6.644 6.644 0 0 1-.627-2.554ZM289.8 61.259c.277.285.531.595.759.927.221.322.414.665.576 1.025.327.756.509 1.577.533 2.411.013.408-.011.816-.071 1.219l-1.613 12.688c5.707-1.785 9.195-1.463 10.587 1.014.13.23 12.673 23.053-1.229 41.469-.216 2.039-.553 3.362-1.227 4.087-4.77 5.089-10.565 8.91-16.928 11.164l-.007.002c-.352.114-1.228.396-3.535-.804-8.897 2.109-17.705-.278-25.469-6.864a45.104 45.104 0 0 1-8.999-10.456 5.47 5.47 0 0 1-.259-.462c-1.128-2.007-4.555-8.106 24.304-27.136a174.299 174.299 0 0 1 10.846-6.603l2.01-19.905a6.722 6.722 0 0 1 .78-2.37 6.211 6.211 0 0 1 1.567-1.858 5.541 5.541 0 0 1 2.074-1.04 5.588 5.588 0 0 1 3.373.234c.35.134.688.303 1.009.506.327.22.634.471.919.752ZM269.099 94.94c-21.084 13.904-23.799 20.342-23.07 21.64.144.256.517.478 1.218.532a1.87 1.87 0 0 1 .273-.59c4.68-6.481 15.068-14.034 22.952-19.234 2.1-1.392 4.23-2.73 6.39-4.014a1.34 1.34 0 0 1 .335-.116l.351-3.451a173.683 173.683 0 0 0-8.449 5.233Zm3.285 5.77c-8.673 5.72-15.414 11.032-19.483 15.33l.016-.01c4.351-1.546 11.194-4.888 21.474-11.749l1.837-1.212.52-5.131c-1.462.859-2.897 1.805-4.364 2.772Zm23.361 20.419c.024-.427.175-.833.428-1.161l.016-.01c9.019-11.509 5.973-25.257 3.414-32.409-3.715 6.103-13.06 13.261-20.581 18.396l-.095.062-.11.073-2.484 1.638c-14.406 9.5-22.475 12.737-27.079 13.35a40.42 40.42 0 0 0 5.324 5.457c7.123 6.003 14.827 7.982 22.896 5.88a1.721 1.721 0 0 1 1.298.174c.526.306 1.075.563 1.641.768 5.612-2.041 10.731-5.416 14.981-9.88.193-.764.311-1.547.351-2.338Zm-7.269-29.707-.339 2.705.016-.01a77.19 77.19 0 0 0 4.903-4.545 56.853 56.853 0 0 0-4.58 1.85Zm8.638-7.09c.375-.774.465-1.325.293-1.633l.023-.015c-.289-.266-2.407-.707-7.815 1.208-.063.012-.128.019-.193.022l-.369 2.96a46.204 46.204 0 0 1 7.61-2.537c.149-.024.301-.025.451-.005Zm-13.13 13.154 3.945-31.154.023-.016a2.521 2.521 0 0 0-.028-.916 2.446 2.446 0 0 0-.351-.834 2.24 2.24 0 0 0-.621-.624 2.052 2.052 0 0 0-.793-.318 1.938 1.938 0 0 0-.846.03 2.031 2.031 0 0 0-.767.389 2.191 2.191 0 0 0-.577.663 2.368 2.368 0 0 0-.288.856l-3.505 34.763a155.733 155.733 0 0 0 3.808-2.839Zm-29.267-3.832c.427.08.867-.014 1.234-.264.326-.21.584-.523.739-.897.156-.373.198-.79.12-1.192-.066-.4-.246-.769-.516-1.052a1.797 1.797 0 0 0-.977-.527 1.863 1.863 0 0 1-1.053-.547s-.031-.248.158-.7a4.886 4.886 0 0 0 .505-2.127 4.889 4.889 0 0 0-.469-2.136 5.556 5.556 0 0 0-1.598-1.71 5.076 5.076 0 0 0-2.107-.845 1.657 1.657 0 0 0-.709.046c-.235.06-.455.173-.645.332-.195.15-.359.343-.483.564a2.194 2.194 0 0 0-.246.736 2.126 2.126 0 0 0 .331 1.482c.287.427.718.714 1.199.799.378.049.733.224 1.016.5 0 0 .027.24-.162.693a4.924 4.924 0 0 0-.501 2.12 4.93 4.93 0 0 0 .46 2.133 5.64 5.64 0 0 0 1.596 1.724 5.163 5.163 0 0 0 2.108.868Zm19.251-12.146c-.364.25-.802.342-1.227.26a5.122 5.122 0 0 1-2.109-.852 5.609 5.609 0 0 1-1.601-1.713 4.929 4.929 0 0 1-.459-2.132 4.91 4.91 0 0 1 .501-2.121c.189-.453.162-.692.162-.692a1.793 1.793 0 0 0-1.001-.512 1.747 1.747 0 0 1-.702-.25 1.887 1.887 0 0 1-.554-.525 1.84 1.84 0 0 1-.324-.71 2.154 2.154 0 0 1 .212-1.546c.127-.232.298-.433.502-.588.2-.156.426-.27.666-.334.242-.06.492-.065.736-.017.75.116 1.468.404 2.107.844a5.557 5.557 0 0 1 1.598 1.711c.314.66.475 1.394.469 2.136a4.873 4.873 0 0 1-.506 2.126c-.188.453-.157.701-.157.701.293.293.659.483 1.053.547.369.058.711.242.977.526.269.284.45.652.516 1.053.078.401.036.819-.12 1.191a1.954 1.954 0 0 1-.739.897ZM229.558 167.997a1.028 1.028 0 0 1-.112.219l-.038.034-4.309 8.423a.294.294 0 0 1-.04.079l-2.197 4.295a1.017 1.017 0 0 1-.111.218l-4.268 8.345-.215.42-.108.21-2.183 4.268c-.03.081-.069.157-.116.228l-4.264 8.336c-.898 1.731-2.2 3.177-3.775 4.193a9.886 9.886 0 0 1-5.202 1.599l-7.89.157-2.237 4.373a1.98 1.98 0 0 1-.468.599c-.19.164-.409.285-.644.357a1.532 1.532 0 0 1-.717.061c-.239-.03-.47-.11-.681-.237a1.898 1.898 0 0 1-.554-.504 2.068 2.068 0 0 1-.333-.691 2.334 2.334 0 0 1-.056-.777 2.12 2.12 0 0 1 .223-.747l2.237-4.373-4.068-7.335a11.816 11.816 0 0 1-1.093-2.691 12.553 12.553 0 0 1-.419-2.915c-.019-.987.081-1.973.297-2.932.211-.961.539-1.886.975-2.753l6.59-12.884c.03-.07.065-.137.103-.201l.206-.403 6.59-12.884a.255.255 0 0 1 .035-.07.221.221 0 0 1 .036-.07l6.586-12.876c.117-.231.275-.435.465-.6.383-.33.87-.481 1.355-.422.243.031.477.113.689.242.213.129.401.3.555.505.151.201.262.435.324.686a2.124 2.124 0 0 1-.159 1.528l-1.736 3.394a843.708 843.708 0 0 0 3.776 6.69l.324.584c.331.607.608 1.248.826 1.913l6.187-12.097c.117-.228.273-.429.461-.592a1.708 1.708 0 0 1 1.355-.421c.244.023.481.103.694.233.421.265.734.694.874 1.199.071.253.093.52.065.782-.028.259-.103.51-.219.738l-6.179 12.079a9.574 9.574 0 0 1 1.94-.264l.624-.003c1.343-.006 4.691-.031 7.23-.084l1.736-3.394a1.95 1.95 0 0 1 .474-.596c.382-.329.87-.481 1.355-.422.242.031.476.113.689.242.21.127.396.296.546.5a2.06 2.06 0 0 1 .389 1.468 2.115 2.115 0 0 1-.223.746l-2.197 4.295Zm-39.7 27.936c.163.615.401 1.204.708 1.751l-.011-.018 2.964 5.346 2.774-5.423a7.593 7.593 0 0 0 .64-1.788 8.11 8.11 0 0 0 .198-1.916 8.193 8.193 0 0 0-.268-1.91 7.478 7.478 0 0 0-.704-1.76l-.216-.382-2.771-4.898-2.774 5.423a7.941 7.941 0 0 0-.54 5.575Zm6.899-13.488c.17.61.409 1.196.712 1.742l3.005 5.268 2.774-5.423c.452-.914.722-1.92.793-2.954a7.886 7.886 0 0 0-.4-3.098l-2.647-4.79c-.244-.436-.46-.89-.645-1.359l-.235-.427-2.797 5.467a7.994 7.994 0 0 0-.83 3.686c.021.638.112 1.272.27 1.888Zm9.476-7.757c.279.504.521 1.032.723 1.578l.122.256 2.774-5.423c.287-.565.504-1.17.644-1.797a8.245 8.245 0 0 0 .195-1.907 8.112 8.112 0 0 0-.968-3.679l-.302-.524-2.685-4.756-2.774 5.423a7.937 7.937 0 0 0-.319 6.257l2.265 3.989.325.583Zm1.055 27.957a7.181 7.181 0 0 0 1.06-1.535l2.778-5.432c-2.134.045-4.381.045-5.299.043l-.425.007a6.015 6.015 0 0 0-1.756.296 6.799 6.799 0 0 0-1.637.766 7.19 7.19 0 0 0-2.458 2.743l-2.787 5.45 5.756-.112a5.932 5.932 0 0 0 1.75-.287 6.651 6.651 0 0 0 1.629-.749 7.164 7.164 0 0 0 1.389-1.19Zm6.899-13.487a7.275 7.275 0 0 0 1.06-1.536l2.764-5.406-.467.006c-.467.077-.938.122-1.41.136l-5.156.095a6.633 6.633 0 0 0-2.63 1.281 7.304 7.304 0 0 0-1.912 2.338l-2.769 5.414 5.756-.112a6.178 6.178 0 0 0 1.746-.278 6.443 6.443 0 0 0 1.633-.758 6.93 6.93 0 0 0 1.385-1.18Zm5.723-12.165a7.222 7.222 0 0 0 1.994-2.387l2.773-5.423-5.141.046-.575.01a6.566 6.566 0 0 0-3.401 1.057 7.23 7.23 0 0 0-2.458 2.743l-2.769 5.414.277-.005a9.463 9.463 0 0 1 1.618-.172l.624-.003 1.161-.009c.879-.006 2-.013 3.154-.03a6.54 6.54 0 0 0 2.743-1.241Zm20.92 40.974a16.896 16.896 0 0 1-2.069 1.982c-.207 11.731-7.84 16.421-8.187 16.522-.21.124-.44.203-.678.233a1.64 1.64 0 0 1-.716-.064 1.714 1.714 0 0 1-.641-.35 1.877 1.877 0 0 1-.459-.596c-4.371-8.455-13.406-8.287-13.782-8.273a.782.782 0 0 1-.144-.029 1.64 1.64 0 0 1-.402-.081.965.965 0 0 1-.277-.098.565.565 0 0 1-.113-.068 1.557 1.557 0 0 1-.315-.189 2.176 2.176 0 0 1-.461-.666c-.011-.03-.013-.069-.015-.108-.002-.056-.005-.11-.034-.127a2.118 2.118 0 0 1-.111-.524.352.352 0 0 1 .035-.07l-.017-.091a26.588 26.588 0 0 1 2.591-9.522l.22-.429c1.202-2.18 2.866-4.018 4.853-5.363a26.265 26.265 0 0 1 2.524-9.061l.219-.428c1.165-2.138 2.775-3.952 4.703-5.295a25.978 25.978 0 0 1 2.523-8.854l.224-.437a15.547 15.547 0 0 1 3.919-4.713c.164-11.782 7.827-16.494 8.177-16.71h.001c.221-.128.462-.209.712-.236a1.61 1.61 0 0 1 .752.097c.239.086.46.224.648.406.189.182.341.404.447.652 3.569 8.373 13.615 8.126 13.722 8.122a1.68 1.68 0 0 1 1.076.372c.08.037.156.082.226.136.224.181.404.417.526.689.121.272.181.572.174.874a20.865 20.865 0 0 1-1.886 8.7 22.226 22.226 0 0 1-2.906 4.155 15.68 15.68 0 0 1-2.677 2.428 20.058 20.058 0 0 1-1.884 8.016 22.215 22.215 0 0 1-2.901 4.146 15.309 15.309 0 0 1-2.814 2.529 20.213 20.213 0 0 1-1.881 8.177 22.14 22.14 0 0 1-2.902 4.146Zm9.328-42.109c-3.065-1.286-5.687-3.567-7.509-6.53-2.566 2.537-4.202 5.991-4.607 9.73a15.36 15.36 0 0 1 1.879-.621l10.237-2.579Zm-13.597 8.532a12.207 12.207 0 0 0-3.119 3.682l-.174.341a19.98 19.98 0 0 0-1.686 4.864c.118-.034.236-.072.353-.11.177-.058.353-.115.533-.158l16.833-4.232a11.548 11.548 0 0 0 3.868-2.96 17.885 17.885 0 0 0 2.387-3.368c.62-1.3 1.031-2.703 1.216-4.152l-16.011 4.028a11.15 11.15 0 0 0-4.2 2.065Zm9.15 16.008a18.06 18.06 0 0 0 2.388-3.368 13.452 13.452 0 0 0 1.192-3.983l-.147.059c-.356.144-.691.279-1.051.365l-16.954 4.262c-2.15 1.012-3.951 2.73-5.15 4.911l-.175.342a20.56 20.56 0 0 0-1.736 5.085l.731-.19.062-.019 14.994-3.771c2.249-.559 4.288-1.847 5.846-3.693Zm-27.493 17.44a20.43 20.43 0 0 0-1.736 5.086l15.686-3.949c2.27-.549 4.33-1.845 5.896-3.709a18.06 18.06 0 0 0 2.388-3.368 13.696 13.696 0 0 0 1.228-4.156l-1.031.262-15.03 3.782a11.168 11.168 0 0 0-4.148 2.07 12.192 12.192 0 0 0-3.083 3.65l-.17.332Zm4.478 7.627c2.999 1.385 5.595 3.627 7.51 6.486 2.596-2.518 4.261-5.971 4.685-9.718a13.57 13.57 0 0 1-1.838.623l-10.357 2.609ZM137.245-35.068c8.614-4.978 19.631-6.945 24.937-.02 1.592 2.078 3.155 5.715 2.94 8.3L181.725-5.12a5.044 5.044 0 0 1 1.01 3.102 5.025 5.025 0 0 1-1.075 3.077 598.438 598.438 0 0 0-14.974 18.768l-.556.72h-.001c-1.527 1.982-2.57 3.333-3.311 4.174a9.362 9.362 0 0 1-2.433 2.007L135.808 42.03a1.755 1.755 0 0 1-.61.236c-.415.084-.843.01-1.215-.207a1.905 1.905 0 0 1-.486-.447l-19.721-25.738a.46.46 0 0 1-.195-.098c-2.82-1.114-5.332-2.987-7.301-5.442-3.98-5.194-2.188-12.783 4.204-18.531l20.174-21.456a37.065 37.065 0 0 1 5.443-4.686c.376-.26.751-.507 1.144-.73Zm3.467 36.56a4.404 4.404 0 0 1-.877-2.993c-.188-1.986-.93-3.862-2.129-5.377-3.69-4.817-13.686-5.134-21.397-.683a21.324 21.324 0 0 0-3.405 2.413l-2.647 2.809c-2.685 3.572-3.216 7.467-1.164 10.144 1.518 1.855 3.433 3.28 5.577 4.148.75.26 1.422.732 1.947 1.367l18.731 24.446 22.462-13.96L140.712 1.49Zm38.331-3.549a.863.863 0 0 0-.165-.438l-15.727-20.493L144.564.224l16.172 21.106c.637-.772 1.499-1.889 2.576-3.285l.575-.744.1-.13h.001c3.216-4.18 8.042-10.45 14.969-18.763a.872.872 0 0 0 .086-.465Zm-17.611-25.036v-.003l-.001.015.001-.012Zm0 .154v-.154c.118-1.158-.798-3.752-2.089-5.454-3.314-4.324-11.871-3.907-20.367.99a8.12 8.12 0 0 1-.187.107 3.73 3.73 0 0 0-.695.466 33.119 33.119 0 0 0-4.869 4.197l-12.153 12.916c7.782-2.15 15.712-.6 19.514 4.364a15.459 15.459 0 0 1 2.583 5.358l18.263-22.79Zm-35.91 40.232c-.179.01-.359.006-.537-.012a2.532 2.532 0 0 1-1.051-.354 2.822 2.822 0 0 1-.842-.738 3.09 3.09 0 0 1-.508-1.024 3.266 3.266 0 0 1-.128-1.185c.016-.193.046-.385.088-.573.053-.186.126-.364.216-.532.248-.534.64-.973 1.123-1.259a2.54 2.54 0 0 1 1.584-.344c.368.046.725.167 1.052.355.317.184.599.435.828.736.234.302.412.65.522 1.026.114.382.157.784.128 1.184a4.631 4.631 0 0 1-.103.586 4.72 4.72 0 0 1-.204.548 3.006 3.006 0 0 1-1.634 1.469 3.7 3.7 0 0 1-.534.117Zm13.157-3.307a3.759 3.759 0 0 0-.505-.221 2.503 2.503 0 0 0-.541-.111 2.72 2.72 0 0 0-2 .709 3.182 3.182 0 0 0-1.012 1.999c-.021.194-.016.39.016.584.039.392.144.773.31 1.124.15.275.339.521.56.731.216.22.461.402.727.542.538.267 1.14.34 1.719.209.29-.061.568-.175.822-.337.271-.164.512-.38.711-.638.199-.235.362-.505.481-.797.117-.293.19-.604.217-.923a3.002 3.002 0 0 0-.199-1.433 2.878 2.878 0 0 0-.811-1.168 4.03 4.03 0 0 0-.495-.27Zm-.761 13.473c.178.028.354.07.527.124.198.045.39.117.572.214.482.276.879.7 1.14 1.218a3.21 3.21 0 0 1 .327 1.7c-.046.398-.154.786-.321 1.146-.347.702-.933 1.229-1.634 1.469a2.7 2.7 0 0 1-1.099.13 2.263 2.263 0 0 1-1.059-.347 2.7 2.7 0 0 1-.84-.752 3.029 3.029 0 0 1-.299-.485 2.705 2.705 0 0 1-.217-.533 4.525 4.525 0 0 1-.107-.58 2.901 2.901 0 0 1-.001-.596 3.175 3.175 0 0 1 1.011-1.999 2.72 2.72 0 0 1 2-.709ZM238.157-22.746a1.919 1.919 0 0 1-.762-.78 2.153 2.153 0 0 1-.201-1.644c1.925-6.486 6.518-11.611 13.276-14.817a16.663 16.663 0 0 1 10.705-1.135c3.591.817 6.864 2.808 9.378 5.703a3.603 3.603 0 0 1 1.23-.673c1.986-.618 4.15.503 5.378 2.783l.503.933c.105.25.265.467.465.635.201.168.435.28.684.329l.768-.103a5.111 5.111 0 0 1 2.752.76 5.68 5.68 0 0 1 2.023 2.161c.485.902.741 1.927.741 2.971a6.269 6.269 0 0 1-.744 2.97l-.46.673c-.085.257-.11.532-.075.802.036.27.131.527.279.748l.502.933c1.233 2.289 1.064 4.873-.41 6.441a3.62 3.62 0 0 1-1.207.856c1.013 3.724.917 7.7-.274 11.362-1.191 3.663-3.417 6.825-6.361 9.04-.2.151-.425.259-.664.315a1.707 1.707 0 0 1-1.385-.27 1.916 1.916 0 0 1-.516-.542 2.082 2.082 0 0 1-.291-.72 2.121 2.121 0 0 1 .249-1.5c.132-.22.302-.41.501-.56 2.49-1.874 4.32-4.608 5.189-7.755.87-3.147.728-6.52-.402-9.569a1.95 1.95 0 0 1-.085-.455l-.473-.304c-.262-.17-.456-.151-.456-.151l-.46.673a3.72 3.72 0 0 1-1.899 1.492c-.766.261-1.59.244-2.346-.048-1.305-.468-2.403-1.446-3.08-2.742a6.672 6.672 0 0 1-.797-2.97l-.027-1.001a2.48 2.48 0 0 0-.291-1.061 2.257 2.257 0 0 0-.709-.796l-.788-.51a6.125 6.125 0 0 1-2.243-2.768 6.728 6.728 0 0 1-.415-3.656 4.162 4.162 0 0 1 1.12-2.231 3.619 3.619 0 0 1 2.125-1.07l.768-.104c.032-.02.114-.164.11-.51l-.013-.42c-1.86-2.87-4.575-4.958-7.688-5.916a13.099 13.099 0 0 0-9.412.655c-5.845 2.78-9.63 6.943-11.242 12.384-.105.36-.304.68-.574.919a1.772 1.772 0 0 1-.971.44 1.647 1.647 0 0 1-1.025-.197Zm36.352-7.59-.502-.932c-.484-.899-1.073-1-1.188-.975-.06.16-.084.334-.069.507l.03.988a4.527 4.527 0 0 1-.842 3.017c-.625.853-1.526 1.416-2.52 1.574l-.768.103c-.044.017-.149.28-.078.768.044.327.154.64.323.915.169.276.392.508.653.679l.792.518a6.215 6.215 0 0 1 1.99 2.216c.486.903.761 1.922.801 2.967l.022.993c.014.331.093.655.232.951.139.296.334.556.574.763.183.183.416.296.664.32l.454-.703c.619-.857 1.515-1.427 2.507-1.593a3.712 3.712 0 0 1 2.834.695l.78.514.049.032c.222.139.318.199.395.139.083-.064.268-.713-.197-1.577l-.503-.933a5.774 5.774 0 0 1-.812-2.972 5.77 5.77 0 0 1 .818-2.97l.46-.674c.4-.588-.684-2.6-1.353-2.513l-.768.103a4.708 4.708 0 0 1-2.789-.69 5.266 5.266 0 0 1-1.989-2.23Zm3.973 58.398a15.606 15.606 0 0 1-3.252 5.529 14.856 14.856 0 0 1-4.889 3.761 2.791 2.791 0 0 1-1.803.086 2.893 2.893 0 0 1-.838-.385 2.817 2.817 0 0 1-.695-.637 1.655 1.655 0 0 1-.149-.276l-2.145-3.785a10.632 10.632 0 0 1-4.184 2.749 2.792 2.792 0 0 1-1.814-.093 2.88 2.88 0 0 1-.794-.482 2.85 2.85 0 0 1-.648-.748 1.64 1.64 0 0 1-.228-.423l-1.841-5.285a12.837 12.837 0 0 1-6.964 1.356c-2.296-.274-5.752-3.357-9.471-7.803a2.811 2.811 0 0 1-.192-.237A119.185 119.185 0 0 1 226.337 2.97a87.807 87.807 0 0 1-3.541-7.348 2.113 2.113 0 0 1-.167-.31 48.119 48.119 0 0 1-1.214-3.147c-2.036-5.984-2.097-9.986.022-12.402 2.119-2.416 6.11-2.704 12.231-.784 13.023 4.041 35.237 18.54 36.469 25.252a15.37 15.37 0 0 1-.701 7.528l5.291 1.889c.118.041.231.094.341.155.269.166.514.374.727.617.209.248.382.53.513.834.147.306.242.637.282.98.041.332.032.67-.027 1a12.499 12.499 0 0 1-2.497 5.168l3.154 2.046c.537.38.948.935 1.175 1.584.226.65.257 1.36.087 2.03Zm-35.513-7.205c2.508 2.792 4.552 4.603 5.694 4.738 5.897.73 12.469-6.77 12.518-6.859a2.17 2.17 0 0 1 .07-.087c.699-.863 6.375-7.86 5.247-13.693-.394-2.24-6.731-7.659-14.674-12.723a43.261 43.261 0 0 1-3.807 7.477 2.013 2.013 0 0 1-.511.578c-.206.15-.435.255-.677.312a1.776 1.776 0 0 1-1.421-.317 2.02 2.02 0 0 1-.514-.578 2.086 2.086 0 0 1-.256-.753 2.087 2.087 0 0 1 .031-.795 1.92 1.92 0 0 1 .317-.722 39.995 39.995 0 0 0 3.609-7.19 79.12 79.12 0 0 0-15.928-7.45c-6.427-1.992-8.175-.714-8.523-.308-.349.405-1.322 2.19.754 8.287l.358 1.001a18.967 18.967 0 0 0 2.569-2.492c.166-.193.367-.348.589-.457a1.729 1.729 0 0 1 1.416-.046c.225.095.432.236.608.414.178.176.319.39.414.63.103.24.159.5.166.764.006.262-.035.524-.12.77-.084.246-.214.47-.383.659a21.205 21.205 0 0 1-3.728 3.514 113.351 113.351 0 0 0 13.661 22.231 27.853 27.853 0 0 0 6.217-5.006c.176-.175.386-.307.613-.388.226-.094.466-.14.708-.134.239.009.475.069.693.175.222.106.421.26.586.452.159.198.282.426.362.674.089.24.13.499.12.758a2.06 2.06 0 0 1-.562 1.397 33.739 33.739 0 0 1-6.216 5.167Zm24.929-5.405c-.371.72-.764 1.42-1.182 2.113l4.184 2.728.257-.337a13.137 13.137 0 0 0 1.625-2.797l-4.884-1.707Zm-9.394 10.835 1.669 4.826-.018.046a12.377 12.377 0 0 0 2.411-2.033l.167-.106-2.353-4.15h-.001c-.607.5-1.214.999-1.875 1.417Zm5.391-4.774a24.37 24.37 0 0 1-.677.729l6.411 11.15a13.606 13.606 0 0 0 2.984-2.616 14.035 14.035 0 0 0 2.199-3.358l-10.264-6.676-.259.308c-.129.155-.253.303-.394.463ZM6.942 42.84c.225.101.43.25.6.44.154.18.279.386.369.61.092.245.14.507.138.77-.003.262-.053.52-.147.76a1.935 1.935 0 0 1-.407.65 1.838 1.838 0 0 1-1.31.57c-20.382-.4-20.954-19.27-20.954-19.46 0-1.96.268-8.7 4.357-14.32C-6.323 7.24-6.323 3.89-6.323-.01c0-4.96 1.726-10.5 6.138-13.34-2.965-.618-5.707-2.141-7.901-4.39-2.73-3.015-4.302-7.038-4.403-11.26a1.984 1.984 0 0 1 .138-.74c.087-.234.215-.449.379-.63a1.91 1.91 0 0 1 .572-.44c.216-.1.448-.158.683-.17 9.748-.42 14.52 5.63 16.763 10.38 1.395-3.944 3.757-7.401 6.831-10 .193-.165.416-.284.655-.35.238-.05.483-.05.72 0 .241.04.473.128.683.26.21.14.396.319.545.53.142.215.245.455.305.71.05.261.05.53 0 .79a2.006 2.006 0 0 1-.739 1.31c-4.246 3.4-6.064 9.1-6.784 12.2 8.575.79 11.677 8.51 11.677 15.18a28.42 28.42 0 0 0 .267 4.67c.051.258.051.524 0 .78a1.89 1.89 0 0 1-.286.71 2.014 2.014 0 0 1-.517.55 1.65 1.65 0 0 1-.665.28 1.734 1.734 0 0 1-1.38-.317 2.02 2.02 0 0 1-.77-1.282 31.038 31.038 0 0 1-.342-5.39c0-2.64-.674-11.26-9.443-11.26-8.77 0-9.452 8.62-9.452 11.26 0 5.06-.35 9.12-4.874 15.35-2.324 3.434-3.575 7.582-3.572 11.84 0 .15.47 15.13 17.335 15.46.241.003.48.057.702.16ZM-8.603-26.95c.428 2.418 1.51 4.643 3.11 6.39 2.133 2.28 5.18 3.54 9.075 3.75C2.4-20.28-.775-26.36-8.603-26.95ZM51.969 14.3c.121.229.2.48.231.74a2 2 0 0 1-.046.74 2.074 2.074 0 0 1-.314.7c-.15.21-.334.386-.545.52a1.892 1.892 0 0 1-.683.25 1.76 1.76 0 0 1-.72-.05 8.785 8.785 0 0 0-6.304.58c6.526 13.29-.074 20.68-.36 21a1.84 1.84 0 0 1-.6.43 1.724 1.724 0 0 1-1.413 0c-.226-.1-.43-.25-.6-.44l-.129-.14c-4.754 5-10.172 7.75-16.154 8h-.923c-5.8-.01-11.42-2.193-15.904-6.18a4.376 4.376 0 0 1-1.062-1.89c-1.266-6.475-.315-13.228 2.677-19 2.917-5.64 7.67-9.61 13.994-11.86-.065-.07-.065-.12-.065-.189a2.159 2.159 0 0 1-.083-.78 2.24 2.24 0 0 1 .203-.74A1.896 1.896 0 0 1 24.24 5c.406-.14 9.535-3.11 17.428 9.37 2.847-1.521 6.105-1.876 9.175-1 .235.07.454.188.646.35.195.156.358.353.48.58ZM13.68 40.13c3.25 1.754 6.846 2.626 10.477 2.54 5.142-.23 9.812-2.62 13.957-7.09a14.5 14.5 0 0 1-2.225-5.41c-5.566 2.11-10.283-1.7-10.504-1.89a1.97 1.97 0 0 1-.702-1.24l-.001-.008c-.06-.407-.963-6.635 3.278-10.991a13.868 13.868 0 0 1-3.406-4.62c-5.575 1.92-9.692 5.31-12.222 10.13a25.52 25.52 0 0 0-2.686 10.1 37.31 37.31 0 0 1 5.954-6.81c.192-.174.415-.303.655-.38.236-.078.485-.102.73-.07.246.028.485.11.701.24.218.13.41.307.563.52.148.216.257.46.323.72.05.264.05.536 0 .8a2.11 2.11 0 0 1-.249.75c-.127.232-.3.43-.508.58a39.496 39.496 0 0 0-6.701 8.22 48.318 48.318 0 0 0 8.234-.81c.24-.055.488-.055.729 0 .24.05.47.152.674.3.205.147.38.338.517.56a2.095 2.095 0 0 1 .266 1.523 2.088 2.088 0 0 1-.294.727 1.765 1.765 0 0 1-.526.54c-.208.145-.44.244-.683.29-2.1.403-4.221.664-6.351.78Zm25.772-12.3c-.11.7-.203 2.99 2.243 6.32 1.21-2.6 2.336-7.98-2.206-16.05-4.541-8.07-9.47-9.45-12.147-9.5 1.606 3.87 3.516 4.84 4.144 5.05.383.138.722.39.976.729.255.338.416.748.464 1.182a2.51 2.51 0 0 1-.218 1.29 2.278 2.278 0 0 1-.825.96 4.465 4.465 0 0 0-2.248.83 4.975 4.975 0 0 0-1.585 1.916 5.443 5.443 0 0 0-.518 2.511 5.4 5.4 0 0 0 .681 2.465 4.893 4.893 0 0 0 1.708 1.789 4.421 4.421 0 0 0 2.297.655 4.418 4.418 0 0 0 2.299-.645 4.888 4.888 0 0 0 1.714-1.781 1.99 1.99 0 0 1 2.03-.15c.278.137.524.338.72.59.2.25.345.545.426.863.081.318.097.652.045.977ZM114.951 171.689c-16.892 4.65-27.101 11.3-25.661 29.88 3.641 2.912 6.334 7.002 7.689 11.68.064.289.064.591 0 .88-.05.29-.16.563-.32.802-.159.239-.365.436-.603.578-.242.141-.51.22-.785.23a20.108 20.108 0 0 1-9.628-2.19c-2.423 2.46-5.339 4.277-8.52 5.31-.27.065-.55.065-.821 0a1.69 1.69 0 0 1-.757-.34 1.957 1.957 0 0 1-.545-.66 2.027 2.027 0 0 1-.23-.84c-.022-4.834 1.353-9.555 3.932-13.5-2.27-6.65-4.052-16.09-2.612-23.65 1.281-6.771 4.174-13.062 8.39-18.25-3.923-3.97-4.754-7.25-4.846-7.65a2.155 2.155 0 0 1 .093-1.25 1.96 1.96 0 0 1 .766-.95c5.206-3.3 16.523-1.77 19.135-1.36a34.69 34.69 0 0 1 9.895-2.31c7.65-.585 15.278 1.429 21.822 5.76.233.145.432.345.582.586.151.241.248.516.286.804.064.44 1.449 11.29-17.262 16.44Zm-21.794-17.88c-3.24-.16-6.83-.06-9.295.76v.01a18.314 18.314 0 0 0 3.194 4.21 37.243 37.243 0 0 1 4.883-4.2c.264-.187.537-.355.81-.524.136-.085.273-.169.408-.256Zm-7.514 55.27c.213.046.417.135.6.26a16.986 16.986 0 0 0 6.111 2.15c-1.415-2.893-3.45-5.376-5.935-7.24a1.942 1.942 0 0 1-.531-.624 2.111 2.111 0 0 1-.245-.806c-2.104-22 9.822-29.9 28.357-35 12.277-3.37 14.197-9.01 14.474-11.11-3.892-2.379-8.186-3.885-12.626-4.428a30.835 30.835 0 0 0-13.22 1.268c-5.717 1.874-10.862 5.383-14.894 10.157s-6.801 10.638-8.017 16.973c-1.375 7.11.536 16.24 2.77 22.41.119.317.157.662.11 1a1.914 1.914 0 0 1-.35.93c-1.84 2.603-3.069 5.65-3.582 8.88a18.203 18.203 0 0 0 5.215-4.15c.138-.181.307-.33.499-.44a1.805 1.805 0 0 1 1.265-.23Zm29.862-49.71-.332-.18a3.19 3.19 0 0 1-.314-.28 2.003 2.003 0 0 1-.398-.652 2.157 2.157 0 0 1-.138-.768c0-.262.05-.521.148-.76.09-.238.222-.456.388-.64.088-.092.18-.179.277-.26l.332-.18.332-.12c.301-.065.613-.048.906.05.293.097.559.273.774.51.165.186.296.403.388.64.09.242.14.5.148.76.009.133.009.267 0 .4-.02.132-.057.26-.111.38-.035.124-.091.24-.166.34l-.074.105c-.049.071-.098.142-.148.195a1.835 1.835 0 0 1-.602.432 1.72 1.72 0 0 1-.708.148c-.123.01-.247.01-.37 0l-.332-.12Zm-6.185 6.45c.2.146.422.251.656.31.241.045.488.045.729 0 .358-.075.688-.263.947-.54.26-.278.438-.633.511-1.02a2.007 2.007 0 0 0 0-.78 2.279 2.279 0 0 0-.267-.73 2.009 2.009 0 0 0-.508-.55c-2.068-1.53-1.661-5.65-1.652-5.7a2.124 2.124 0 0 0-.369-1.47 1.837 1.837 0 0 0-.545-.51 1.648 1.648 0 0 0-.674-.25 1.713 1.713 0 0 0-.72 0 1.694 1.694 0 0 0-.655.35 1.79 1.79 0 0 0-.471.59 2.21 2.21 0 0 0-.231.74c-.037.32-.757 6.61 3.249 9.56Zm34.154 10.6v.08c2.841 5.327 4.343 11.368 4.357 17.52a30.658 30.658 0 0 1-.655 5.59 29.418 29.418 0 0 1-1.653 5.35 28.096 28.096 0 0 1-2.584 4.89c-2.1 3.194-4.783 5.886-7.883 7.91l-.102.06c-3.397 2.221-7.212 3.585-11.162 3.991a24.573 24.573 0 0 1-11.656-1.641c-1.658 1.813-3.904 2.853-6.259 2.9a9.262 9.262 0 0 1-4.329-1.16 1.909 1.909 0 0 1-.788-.794 2.13 2.13 0 0 1-.246-1.136c.019-.29.388-5.56 3.766-8-.314-4.38 3.268-7.95 3.443-8.12a1.741 1.741 0 0 1 2.05-.32c1.443.666 2.694 1.741 3.622 3.112a9.935 9.935 0 0 1 1.648 4.678c7.985-.28 11.613-5.48 13.062-8.67 2.483-5.44 2.141-12.25-.803-16.19-.038-.023-.041-.044-.044-.068-.003-.018-.006-.037-.021-.062-.014-.024-.032-.041-.05-.059-.028-.028-.057-.057-.079-.111-.014-.034-.021-.074-.029-.114-.012-.065-.023-.129-.063-.166-.065-.06-.065-.12-.065-.19-1.2-3.17 1.071-7.38 5.539-10a12.42 12.42 0 0 1 6.101-1.85 5.035 5.035 0 0 1 2.687.546 5.524 5.524 0 0 1 2.095 1.904c.027.05.101.12.101.12Zm-39.138 42.36c3.932 1.14 6.083-2.6 6.461-3.34h-.037c.296-.77 1.671-4.95-1.541-7.56-.785 1.11-1.736 2.89-1.219 4.52a2.126 2.126 0 0 1-.083 1.53c-.101.239-.249.45-.434.62-.179.176-.39.312-.618.4-1.505.56-2.215 2.47-2.529 3.83Zm34.2-40.95a9.127 9.127 0 0 0-4.339 1.36h-.037c-3.083 1.81-4.273 4.29-3.877 5.01.388.75 2.945.97 6.028-.8 3.083-1.77 4.283-4.25 3.914-5-.148-.28-.766-.57-1.689-.57Zm-24.231 38.88a20.969 20.969 0 0 0 6.258 1.16h-.036a21.318 21.318 0 0 0 8.307-1.41c-1.521-1.17-2.723-2.763-3.48-4.61-3.164 2.244-6.861 3.442-10.643 3.45a13.07 13.07 0 0 1-.406 1.41Zm19.089-2.61a23.26 23.26 0 0 0 5.253-5 24.979 24.979 0 0 0 3.636-6.4 14.61 14.61 0 0 1-1.846.12c-2.754.041-5.457-.808-7.763-2.44a23.425 23.425 0 0 1-1.357 4.07 19.605 19.605 0 0 1-3.064 4.78c1.449 4.42 4.163 4.87 5.141 4.87Zm4.763-15.637c1.77.436 3.611.397 5.363-.113.315-1.481.503-2.991.563-4.51a33.144 33.144 0 0 0-1.763-10.61 13.996 13.996 0 0 1-4.227 3.73 12.436 12.436 0 0 1-5.594 1.81c.687 2.283.981 4.683.867 7.08a10.863 10.863 0 0 0 4.791 2.613Z\",\n fill: \"#E8ECF2\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"a\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 288,\n height: 192,\n rx: 10,\n fill: \"#fff\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPlaceholder);\nexport default __webpack_public_path__ + \"static/media/placeholder.995da0816278c49f930ceba390a4be43.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState } from \"react\";\nimport classNames from \"classnames/bind\";\nimport useSWR from \"swr\";\nimport { Form, Field } from \"react-final-form\";\n\nimport { CATEGORIES } from \"../../api/categories\";\nimport { Button } from \"../../components/Button\";\n\nimport { DietanamnezItemForm } from \"types/DietanamnezItem\";\n\nimport styles from \"./DietanamnezTileForm.module.css\";\nimport { FrequencyList } from \"components/FrequencyList\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n initialValues?: DietanamnezItemForm;\n onSubmit: (values?: DietanamnezItemForm) => Promise;\n unitLabel: string;\n portions: number[];\n tutorialWasShown: boolean;\n};\n\nexport const DietanamnezTileForm: React.FC = ({\n initialValues,\n onSubmit,\n unitLabel,\n portions,\n tutorialWasShown,\n}) => {\n const [state, setState] = useState<\"FILLED\" | \"DEFAULT\" | \"FIELD\">(\n initialValues ? \"FILLED\" : \"DEFAULT\"\n );\n\n const [placeholder, setPlaceholder] = useState('Объем порции в граммах')\n\n const changePlaceholder = (text: string) => setPlaceholder(text)\n\n const { data: frequencies = [] } = useSWR<\n {\n key: string;\n custom_частота: string;\n }[]\n >([CATEGORIES.FREQUENCY, 86]);\n\n if (!frequencies.length || !tutorialWasShown) {\n return null;\n }\n\n return (\n >\n initialValues={{\n custom_количество: initialValues?.custom_количество,\n custom_частота_употребления: initialValues?.custom_частота_употребления,\n }}\n validate={(values: Partial) => {\n let errors: { [key: string]: string } = {};\n\n if (!values.custom_количество || values.custom_количество <= 0) {\n errors.custom_количество = \" \";\n }\n\n if (!values.custom_частота_употребления) {\n errors.custom_частота_употребления = \" \";\n }\n\n if (Object.keys(errors).length) {\n return errors;\n }\n\n return undefined;\n }}\n validateOnMount\n onSubmit={(values) => onSubmit(values as DietanamnezItemForm)}\n >\n {({ handleSubmit, values, form, valid, submitting }) =>\n {\n const frequencyItem = frequencies.find(\n (item) => item.key === values?.custom_частота_употребления\n )\n\n return (\n
\n {state === \"DEFAULT\" && (\n <>\n

Как часто вы едите это блюдо?

\n {\n form.change(\"custom_частота_употребления\", key);\n setState(\"FIELD\");\n }}\n />\n \n )}\n {state === \"FILLED\" && (\n <>\n

Вы выбрали

\n

\n {frequencyItem ?\n <>\n {\n frequencyItem?.custom_частота\n }{\" \"}\n по {values.custom_количество} {unitLabel}\n \n :\n \"Никогда / очень редко\"\n }\n

\n
\n
\n setState(\"DEFAULT\")}\n >\n Изменить\n \n
\n
\n \n )}\n {state === \"FIELD\" && (\n <>\n

\n {\n frequencies.find(\n (item) => item.key === values.custom_частота_употребления\n )!.custom_частота\n }\n

\n
changePlaceholder('Объем порции в граммах')} onClick={() => changePlaceholder('Выберите или введите')}>\n \n {({ input, meta }) => (\n <>\n \n \n {portions.map((portion) => (\n input.onChange(portion)}\n >\n {portion}\n
\n ))}\n \n \n )}\n \n \n
\n
\n {\n form.change(\"custom_частота_употребления\", undefined);\n setState(\"DEFAULT\");\n window.scrollTo(0, 0);\n }}\n disabled={submitting}\n >\n Отмена\n \n
\n
\n window.scrollTo(0, 0)}\n >\n Продолжить\n \n
\n
\n \n )}\n \n )}\n }\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"DietanamnezTileForm_title__U5eRs\",\"inputContainer\":\"DietanamnezTileForm_inputContainer__6k9+K\",\"action\":\"DietanamnezTileForm_action__UhStg\",\"input\":\"DietanamnezTileForm_input__l7ftb\",\"footer\":\"DietanamnezTileForm_footer__UPJyw\",\"button\":\"DietanamnezTileForm_button__KPf8-\",\"portionDropdown\":\"DietanamnezTileForm_portionDropdown__s7eep\",\"portionDropdownItem\":\"DietanamnezTileForm_portionDropdownItem__mDSmC\",\"title_frequency\":\"DietanamnezTileForm_title_frequency__Q-NQx\",\"portionDropdown_active\":\"DietanamnezTileForm_portionDropdown_active__sLTpg\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"DietanamnezTile_container__ycwQ2\",\"category\":\"DietanamnezTile_category__QQ9Sx\",\"title\":\"DietanamnezTile_title__mrk5C\",\"image\":\"DietanamnezTile_image__iIGdP\",\"placeholder\":\"DietanamnezTile_placeholder__mAhzJ\",\"placeholderImage\":\"DietanamnezTile_placeholderImage__aMu2A\",\"placeholderText\":\"DietanamnezTile_placeholderText__H80z3\",\"form\":\"DietanamnezTile_form__6fpq5\",\"notification\":\"DietanamnezTile_notification__EHSiV\",\"notification-close\":\"DietanamnezTile_notification-close__rX6HJ\"};","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport placeholderImage from \"./assets/placeholder.svg\";\n\nimport { DietanamnezTileForm } from \"../../components/DietanamnezTileForm\";\n\nimport { Tile } from \"../../types/Tile\";\nimport { DietanamnezItemForm } from \"../../types/DietanamnezItem\";\n\nimport styles from \"./DietanamnezTile.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n tile: Tile;\n initialValues?: DietanamnezItemForm;\n onSubmit: React.ComponentProps[\"onSubmit\"];\n portions: number[];\n tutorialWasShown: boolean;\n errorMessage?: { name: string, message: string };\n setErrorMessage?: any;\n};\n\nexport const DietanamnezTile: React.FC = ({\n tile,\n initialValues,\n onSubmit,\n portions,\n tutorialWasShown,\n errorMessage,\n setErrorMessage,\n}) => {\n return (\n
\n {errorMessage?.name && (\n
setErrorMessage({ name: \"\", message: \"\" })}>\n {errorMessage?.message}\n {/* setErrorMessage({ name: \"\", message: \"\" })}\n >\n \n \n */}\n
\n )}\n

{tile.___parent.label}

\n

{tile.custom_наименование}

\n {tile.custom_картинка_с_порциями_url ? (\n \n ) : (\n
\n \"\"\n

\n У нас нет изображения для этого блюда.\n
\n
\n Все в порядке, просто продолжайте.\n

\n
\n )}\n
\n \n
\n
\n );\n};\n","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport { ScreenInfo } from \"../../components/ScreenInfo\";\nimport { Button } from \"../../components/Button\";\nimport { WelcomeCarousel } from \"../../components/WelcomeCarousel\";\n\nimport { useStateManager } from \"utils/useStateManager\";\nimport { DietanamnezType } from \"types/DietanamnezType\";\n\nimport styles from \"./WelcomeBack.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n onSubmit: () => void;\n};\n\nconst duration = {\n [DietanamnezType.LONG]: 100,\n [DietanamnezType.SHORT]: 36,\n};\n\nexport const WelcomeBack: React.FC = (props) => {\n const { linkInfo, userType, step, dietanamnez } = useStateManager();\n\n return (\n \n С возвращением,
{linkInfo?.userName}!\n \n ) : (\n \"С возвращением!\"\n )\n }\n >\n

\n Вы остановились
\n на {step + 1} вопросе из {duration[dietanamnez?.custom_тип_да!]}. Мы\n быстро\n
\n закончим, продолжим?\n

\n\n \n\n
\n props.onSubmit()}\n >\n Продолжить\n \n
\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"info\":\"WelcomeBack_info__lQ1Z3\",\"actions\":\"WelcomeBack_actions__pLbvA\"};","import { Tile } from \"types/Tile\";\nimport { Dietanamnez } from \"types/Dietanamnez\";\nimport { UserType } from \"types/UserType\";\n\nfunction getVisibleItems(items: Tile[], dietanamnez: Dietanamnez, userType: UserType) {\n const specificMap = dietanamnez.custom_специфические_виды_питания.reduce((acc, item) => ({\n ...acc,\n [item]: true,\n }), {} as { [key: string]: boolean });\n\n return items\n .filter(({ custom_формат }) => !custom_формат || custom_формат.value === dietanamnez.custom_тип_да)\n .filter(({ custom_версия_приложения: { value } = {} }) => !value || value === userType)\n .filter((item) => {\n const { custom_специфические_исключения } = item;\n\n if (!custom_специфические_исключения) {\n return true;\n }\n\n return custom_специфические_исключения.every(item => !specificMap[item.key]);\n })\n}\n\nfunction getTilesGroups(items: Tile[], dietanamnez: Dietanamnez, userType: UserType) {\n return getVisibleItems(items, dietanamnez, userType)\n .filter(({ ___parent: parent }) => !parent)\n .map(item => item.key);\n}\n\nexport function getVisibleTiles(tiles: Tile[], dietanamnez: Dietanamnez, userType: UserType) {\n const groups = getTilesGroups(tiles, dietanamnez, userType);\n const items = getVisibleItems(tiles, dietanamnez, userType)\n .filter(({ ___parent: parent }) => !!parent)\n\n return groups.map(groupKey => items.filter(item => item.___parent.key === groupKey)).reduce((acc, item) => {\n acc.push(...item);\n return acc;\n }, [] as Tile[])\n}","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"DietanamnezTiles_title__1NTzC\",\"titleAccent\":\"DietanamnezTiles_titleAccent__ms-Us\"};","import React, { useEffect, useState } from \"react\";\nimport classNames from \"classnames/bind\";\nimport useSWR from \"swr\";\nimport { useLocalStorage } from \"react-use\";\n\nimport { Tile } from \"../../types/Tile\";\nimport { Portion } from \"../../types/Portion\";\n\nimport { Screen } from \"../../components/Screen\";\nimport { Tutorial } from \"../../components/Tutorial\";\nimport { DietanamnezTile } from \"../../components/DietanamnezTile\";\nimport { WelcomeBack } from \"../../screens/WelcomeBack\";\n\nimport { DietanamnezItemForm } from \"types/DietanamnezItem\";\n\nimport { getVisibleTiles } from \"./utils/getVisibleTiles\";\nimport { useStateManager } from \"utils/useStateManager\";\n\nimport styles from \"./DietanamnezTiles.module.css\";\nimport { sendFactpitStartButtonMetric } from \"api/sendBIMetrics\";\nimport { getQueryVariable } from \"utils/getQueryVariable\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n onBack: () => void;\n onSubmit: (exists?: boolean) => void;\n};\n\nexport const DietanamnezTiles: React.FC = ({ onBack, onSubmit }) => {\n const {\n isInitial,\n setIsInitial,\n userType,\n dietanamnez,\n dietanamnezItems,\n setDietanamnezItem,\n step,\n setStep,\n } = useStateManager();\n const [tutorialWasShown = false, setTutorialWasShown] = useLocalStorage(\n \"TUTORIAL_WAS_SHOWN\",\n false\n );\n const { data: allTiles = [] } = useSWR([49, 104]);\n const { data: allPortions = [] } = useSWR([66, 149]);\n const tiles = getVisibleTiles(allTiles, dietanamnez!, userType);\n\n const stateManager = useStateManager();\n const { onNextScreen, setIsLoading } = stateManager;\n\n const tile = tiles?.[step] as Tile | undefined;\n const dietanamnezItem = tile?.key\n ? dietanamnezItems.find((item) => item.custom_блюдо === tile.key)\n : undefined;\n\n const portions = allPortions\n .filter((item) => item.___parent.key === tile?.key)\n .map((item) => item.custom_мера);\n\n const title = (\n \n {step + 1}{\" \"}\n \n вопрос {tiles.length ? `из ${tiles.length}` : \"\"}\n \n \n );\n\n const handleBack = () => {\n if (step === 0) {\n onBack();\n } else {\n setStep(step - 1);\n }\n };\n\n const handleForward = async () => {\n if (step >= tiles.length - 1) {\n await onSubmit(false);\n } else {\n setStep(step + 1);\n }\n };\n\n const [errorMessage, setErrorMessage] = useState<{ name: string, message: string }>({ name: \"\", message: \"\" });\n\n useEffect(() => {\n if (errorMessage.name) {\n const errorMessageTimer = setTimeout(() => {\n setErrorMessage({ name: \"\", message: \"\" })\n }, 5000);\n\n return () => {\n clearTimeout(errorMessageTimer);\n }\n }\n }, [errorMessage]);\n\n const handleSubmit = async (values?: DietanamnezItemForm) => {\n try {\n await setDietanamnezItem(tile!.key, values);\n\n const isInvalidDietanamnez = dietanamnezItems.length === 0;\n if ((step === tiles.length - 1) && isInvalidDietanamnez) {\n throw new Error(\"Dietanamnez Error\");\n }\n\n await handleForward();\n } catch (error: any) {\n if (error.message === 'Network Error') {\n setErrorMessage({ name: error.message, message: \"Ошибка подключения сети\" });\n }\n // @ts-ignore\n if (error.message === \"Dietanamnez Error\") {\n setErrorMessage({ name: error.message, message: \"Для завершения опроса укажите хотя бы одно блюдо, употребляемое чаще 1 раза в год\" });\n }\n // @ts-ignore\n if (error.response?.data.exception.message.includes('уже зарегистрирован')) {\n setIsLoading(true);\n await onNextScreen(true);\n setIsLoading(false);\n }\n }\n };\n\n if (isInitial) {\n return setIsInitial(false)} />;\n }\n\n return (\n \n {tile && (\n <>\n \n {tutorialWasShown || (\n {\n const token = getQueryVariable('r');\n if (token) await sendFactpitStartButtonMetric(token);\n setTutorialWasShown(true)\n }} />\n )}\n \n )}\n \n );\n};\n","const getAFlow = (data: number, normMin: number, normMax: number) => {\n let end;\n\n if (data >= normMin && data <= normMax) {\n end = (data - normMin) * (100 / (normMax - normMin)) * 0.3 + 35;\n } else if (data < normMin) {\n end = data * (100 / normMin) * 0.35;\n } else if (data >= normMax && data < normMax * 2) {\n end = (data - normMax) * (100 / normMax) * 0.35 + 65;\n } else if (data > normMax && data >= normMax * 2) {\n end = 100;\n }\n\n return end;\n};\n\nconst getBFlow = (data: number, normMin: number) => {\n let end;\n\n if (data > normMin && data < normMin * 2) {\n end = (data - normMin) * (100 / normMin) * 0.65 + 35;\n } else if (data >= normMin * 2) {\n end = 100;\n } else if (data <= normMin) {\n end = data * (100 / normMin) * 0.35;\n }\n\n return end;\n};\n\nconst getCFlow = (data: number, normMin: number, normMax: number) => {\n let end;\n\n if (data >= 0 && data < normMax) {\n end = data * (100 / normMax) * 0.65;\n } else if (data >= normMax && data < normMax * 2) {\n end = (data - normMax) * (100 / normMax) * 0.35 + 65;\n } else if (data >= normMax * 2) {\n end = 100;\n }\n\n return end;\n};\n\nexport const getEnd = (\n data: number | undefined,\n normMin: number | undefined,\n normMax: number | undefined,\n totalValue: number\n) => {\n let end;\n\n if (!data) {\n return 0;\n }\n\n if (!normMin && !normMax) {\n return (data / totalValue) * 50;\n }\n\n if (normMin && normMax && normMin > 0 && normMax < Infinity) {\n end = getAFlow(data, normMin, normMax);\n } else if (normMin && normMin > 0 && (!normMax || normMax === Infinity)) {\n end = getBFlow(data, normMin);\n } else if (normMin === 0 && normMax && isFinite(normMax)) {\n end = getCFlow(data, normMin, normMax);\n }\n\n return end || 0;\n};\n","import classNames from \"classnames/bind\";\n\nimport styles from \"./DiagramChart.module.css\";\nimport { getEnd } from \"../../utils/getEnd\";\n// @ts-ignore\nimport { getIsInRange } from \"../../utils/getIsInRange\";\n\nconst cx = classNames.bind(styles);\n\ntype SquareProps = {\n start: number;\n end: number;\n min?: number;\n max?: number;\n value?: number;\n fill: string;\n};\n\ntype Props = {\n min?: number;\n max?: number;\n value?: number | [number, number];\n type?: \"COMMON\";\n};\n\nconst WIDTH = 96;\nconst HEIGHT = 32;\n\nconst RECT_HEIGHT = 6;\n\nconst DiagramChartRect: React.FC = ({ start, end, fill }) => {\n if (!end) {\n return null;\n }\n\n return (\n \n );\n};\n\nconst sumValue = (items: number[]) => items.reduce((a, b) => a + b, 0);\n\nexport const DiagramChart: React.FC = ({ min, max, value, type }) => {\n const totalValue = value ? sumValue(([] as number[]).concat(value)) : 0;\n\n const isTotalInRange = getIsInRange(totalValue, min, max);\n\n const getColor = () => {\n if (type === \"COMMON\") {\n return \"url(#commonGradient)\";\n }\n\n return isTotalInRange ? \"#5CC237\" : \"#E92D21\";\n };\n\n const color = getColor();\n\n return (\n
\n \n \n \n \n \n {Array.isArray(value) ? (\n value.map((current, index, list) => {\n const totalAtPrev = sumValue(list.slice(0, index));\n const totalAtCurrent = sumValue(list.slice(0, index + 1));\n const prevItemEnd =\n index !== 0 ? getEnd(totalAtPrev, min, max, totalValue) || 0 : 0;\n\n if (current === 0) {\n return null;\n }\n\n return (\n \n );\n })\n ) : (\n \n )}\n \n
\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"DiagramChart_container__id1V9\",\"svg\":\"DiagramChart_svg__a2ajV\"};","export const getIsInRange = (\n data?: number,\n normMin?: number,\n normMax?: number\n) => {\n if (!data) {\n return true;\n }\n\n if (!normMin && !normMax) {\n return true;\n }\n\n const hasCorrectMin = normMin === undefined || normMin <= data;\n const hasCorrectMax = normMax === undefined || normMax >= data;\n\n return hasCorrectMin && hasCorrectMax;\n};\n","import React from 'react';\nimport classNames from \"classnames/bind\";\n\nimport styles from \"./DeficitModal.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n\titem: any,\n\tpercent?: number,\n\tconfig: {\n\t\tcolor: string,\n\t\ttext: string,\n\t}\n\thandleClose: () => void,\n};\n\nexport const DeficitModal: React.FC = ({ item, percent, config, handleClose }) => {\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t

{item.label}

\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\tИсточники: \n\t\t\t\t\t\n\t\t\t\t

\n\t\t\t\t
Дефицит {percent}%
\n\t\t\t
\n\t\t
\n\t);\n}","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"DeficitModal_content__AZRal\",\"close\":\"DeficitModal_close__4-OCJ\",\"description\":\"DeficitModal_description__WuEKK\",\"consequences\":\"DeficitModal_consequences__Y5IB+\",\"compound\":\"DeficitModal_compound__grf43\",\"info\":\"DeficitModal_info__QdWfq\",\"content_header\":\"DeficitModal_content_header__el0ZG\",\"content_title\":\"DeficitModal_content_title__HefG5\",\"close_button\":\"DeficitModal_close_button__v75mn\"};","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from \"classnames/bind\";\n\nimport styles from \"./Modal.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n\tisOpen: boolean,\n\tchildren: React.ReactNode,\n\thandleClose: () => void,\n};\n\nexport const Modal: React.FC = ({ isOpen, children, handleClose }) => {\n\tif (!isOpen) return null;\n\n\tconst onOverlayClick = (e: any) => {\n\t\thandleClose();\n\t\te.stopPropagation();\n\t};\n\n\tconst onModalClick = (e: any) => {\n\t\te.stopPropagation()\n\t}\n\n\treturn ReactDOM.createPortal(\n\t\t
\n\t\t\t\n\t\t\t\t{children}\n\t\t\t
\n\t\t
,\n\t\twindow.innerWidth <= 575 ? document.body : document.getElementById(\"screen\")!)\n}","// extracted by mini-css-extract-plugin\nexport default {\"modal\":\"Modal_modal__DJDMv\",\"modal_content\":\"Modal_modal_content__-WSAd\"};","import React, { useState } from 'react'\nimport classNames from \"classnames/bind\";\n\nimport styles from \"./DeficitItem.module.css\";\nimport { DeficitModal } from 'components/DeficitModal';\nimport { Modal } from 'components/Modal';\nimport { DietanamnezChartItem } from 'types/DietanamnezItem';\n\nconst cx = classNames.bind(styles);\n\n// Серый +-33%, оранжевый +-34-66%, красный +-67% и более\nconst getConfig = (percent?: number | null) => {\n\tif (percent && percent < -66) {\n\t\treturn {\n\t\t\ttext: \"Высокий риск\",\n\t\t\tcolor: \"var(--maroon)\",\n\t\t};\n\t}\n\n\tif (percent && percent < -33) {\n\t\treturn {\n\t\t\ttext: \"Требует внимания\",\n\t\t\tcolor: \"var(--orange)\",\n\t\t};\n\t}\n\n\treturn {\n\t\ttext: \"Легкое отклонение\",\n\t\tcolor: \"var(--achromatic)\",\n\t};\n};\n\n\ntype Props = {\n\titem: DietanamnezChartItem,\n\tpercent: number | null;\n};\n\nexport const DeficitItem: React.FC = ({ item, percent }) => {\n\tconst [isOpenModal, setIsOpenModal] = useState(false);\n\n\tconst showModal = () => {\n\t\tsetIsOpenModal(true);\n\t\tdocument.body.style.overflow = \"hidden\";\n\t}\n\n\tconst closeModal = () => {\n\t\tsetIsOpenModal(false);\n\t\tdocument.body.style.overflow = \"auto\";\n\t}\n\n\tconst config = getConfig(percent);\n\n\treturn (\n\t\t<>\n\t\t\t{percent && percent < 0 &&\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{item.label.length <= 14 ? item.label : `${item.label.slice(0, 14)}...`}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
{`${percent}%`}
\n\t\t\t\t\t\t\t\t
{config.text}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\n\t)\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"DeficitItem_item__uKAj4\",\"item_content\":\"DeficitItem_item_content__FAqEL\",\"item_product\":\"DeficitItem_item_product__U6w6N\",\"item_risk\":\"DeficitItem_item_risk__bENBn\",\"risk_percent\":\"DeficitItem_risk_percent__LyTY0\",\"risk_conclusion\":\"DeficitItem_risk_conclusion__A6m7T\",\"item_details\":\"DeficitItem_item_details__F6Pni\"};","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport { Screen } from \"../../components/Screen\";\nimport { DiagramChart } from \"components/DiagramChart\";\nimport { DeficitItem } from \"components/DeficitItem\";\n\nimport { useStateManager } from \"utils/useStateManager\";\nimport { DietanamnezChartItem } from \"types/DietanamnezItem\";\n\nimport styles from \"./Deficit.module.css\";\n\nconst cx = classNames.bind(styles);\n\nconst getPercent = (item: DietanamnezChartItem) => {\n\tconst getOnePercent = (normMin: any, normMax: any) => {\n\t\tif (!normMax && !normMin) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (normMax < Infinity) {\n\t\t\treturn (normMax / 65);\n\t\t}\n\t\treturn (normMin / 35);\n\t};\n\n\tif (!item.normMin || !item.normMax) {\n\t\treturn (getOnePercent(item.normMin, item.normMax) || 0) * 50;\n\t}\n\n\tif (item.data && (item.data >= item.normMin && item.data <= item.normMax)) {\n\t\treturn null;\n\t}\n\n\tif (item.data && item.data < item.normMin) {\n\t\treturn Math.floor((item.data - item.normMin) * (100 / item.normMin));\n\t}\n\n\tif (item.data && item.data > item.normMax) {\n\t\treturn Math.floor(item.data * (100 / item.normMax));\n\t}\n\n\treturn -100;\n};\n\ntype Props = {\n\tonSubmit: (exists?: boolean) => void;\n};\n\nexport const Deficit: React.FC = ({ onSubmit }) => {\n\tconst { dietanamnezChartItems } = useStateManager();\n\n\tconst handleSubmit = async (event: React.FormEvent) => {\n\t\tevent.preventDefault();\n\t\ttry {\n\t\t\tonSubmit();\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\t};\n\n\tconst tabs = [\n\t\t{\n\t\t\ttitle: \"Список\",\n\t\t\tcontent: dietanamnezChartItems.map((dietanamnezChartItem: DietanamnezChartItem) => {\n\t\t\t\tconst groupItemsAmount = dietanamnezChartItem.subitems.filter((item) => {\n\t\t\t\t\tconst percent = getPercent(item);\n\n\t\t\t\t\treturn percent !== null && percent < 0;\n\t\t\t\t}).length;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{!!groupItemsAmount &&\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{dietanamnezChartItem.label}

\n\t\t\t\t\t\t\t\t{dietanamnezChartItem.subitems.map((item) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}),\n\t\t},\n\t\t{\n\t\t\ttitle: \"Диаграмма\",\n\t\t\tcontent:\n\t\t\t\t<>\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t-100%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tНорма\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t100%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t{dietanamnezChartItems.map((dietanamnezChartItem: DietanamnezChartItem) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{!!dietanamnezChartItem.subitems.length &&\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{dietanamnezChartItem.subitems.map((item) => (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.label}, {item.size}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t))}\n\t\t\t\t\n\t\t}\n\t]\n\tconst [active, setActive] = React.useState(0);\n\t// @ts-ignore\n\tconst openTab = e => setActive(+e.target.dataset.index);\n\n\treturn (\n\t\tВыявлен риск дефицита потребления}\n\t\t\tbuttonTitle=\"Продолжить\"\n\t\t\tonSubmit={handleSubmit}\n\t\t>\n\t\t\t
\n\t\t\t\t{tabs.map((tab, index) => {\n\t\t\t\t\tconst isActive = index === active ? \"active\" : \"\";\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{tab.title}\n\t\t\t\t\t\t
\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t\n\t\t\t{tabs[active].content}\n\t\t\n\t);\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"view\":\"Deficit_view__2bsGn\",\"items\":\"Deficit_items__21WpD\",\"group\":\"Deficit_group__nEU0s\",\"text\":\"Deficit_text__Ki0yP\",\"chart\":\"Deficit_chart__GN60d\",\"view_btn\":\"Deficit_view_btn__Wh+Om\",\"active\":\"Deficit_active__mzKnp\",\"items_title\":\"Deficit_items_title__dwzkU\",\"diagram_header\":\"Deficit_diagram_header__Rgt7U\",\"diagram_header-items\":\"Deficit_diagram_header-items__GCYsr\",\"diagram_header-item\":\"Deficit_diagram_header-item__HOTKl\",\"diagram_item\":\"Deficit_diagram_item__fF2zS\"};","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport { Button } from \"../Button\";\n\nimport styles from \"./ScreenMiratorg.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n title: React.ReactNode;\n isLoading?: boolean;\n onSubmit?: (event: React.FormEvent) => void;\n buttonTitle?: React.ReactNode | boolean;\n miratorgData: {\n additional_text: string;\n button_lable: string;\n button_url?: string;\n };\n};\n\nexport const ScreenMiratorg: React.FC = (props) => {\n const content = (\n
\n );\n\n if (props.onSubmit) {\n return (\n
\n {content}\n
\n );\n }\n\n return (\n
\n {content}\n
\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"screen\":\"ScreenMiratorg_screen__cFzVz\",\"inner\":\"ScreenMiratorg_inner__KLFAl\",\"header\":\"ScreenMiratorg_header__q68dR\",\"title\":\"ScreenMiratorg_title__JUc14\",\"content\":\"ScreenMiratorg_content__v+Ohv\",\"text\":\"ScreenMiratorg_text__6ymSo\"};","import FileSaver from \"file-saver\";\n\nexport async function saveOrPrintBlob(file: Blob) {\n const url = URL.createObjectURL(file);\n\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n FileSaver.saveAs(file, \"Report.pdf\");\n return Promise.resolve();\n }\n\n if (navigator.userAgent.toLowerCase().includes(\"firefox\")) {\n window.open(url);\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n const link = document.createElement('a');\n link.href = url;\n link.setAttribute(\n 'download',\n `Report.pdf`,\n );\n\n document.body.appendChild(link);\n link.click();\n link.parentNode?.removeChild(link);\n });\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"warning\":\"Product_warning__708k5\",\"product\":\"Product_product__7kj2C\",\"product_header\":\"Product_product_header__D+rbi\",\"product_title\":\"Product_product_title__gASUL\",\"product_image\":\"Product_product_image__TO1rA\",\"product_info\":\"Product_product_info__9r5MZ\",\"product_cart\":\"Product_product_cart__XxOOz\"};","import { BrowserOptions, init as browserInit, SDK_VERSION } from '@sentry/browser';\n\n/**\n * Inits the React SDK\n */\nexport function init(options: BrowserOptions): void {\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'sentry.javascript.react',\n packages: [\n {\n name: 'npm:@sentry/react',\n version: SDK_VERSION,\n },\n ],\n version: SDK_VERSION,\n };\n browserInit(options);\n}\n","import React from \"react\";\nimport classNames from \"classnames/bind\";\n\nimport { Screen } from \"../../components/Screen\";\nimport { ScreenMiratorg } from \"../../components/ScreenMiratorg\";\n\nimport { useStateManager } from \"utils/useStateManager\";\nimport { saveOrPrintBlob } from \"utils/saveOrPrintBlob\";\nimport { RationItem } from \"types/Data\";\n\nimport styles from \"./Product.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n onSubmit: (exists?: boolean) => void;\n showProducts: boolean | undefined;\n miratorgData?: {\n additional_text: string;\n button_lable: string;\n button_url?: string;\n };\n};\n\nexport const Product: React.FC = ({\n onSubmit,\n showProducts,\n miratorgData,\n}) => {\n const { blob, parsedSelftestData, isLoading, setIsLoading } =\n useStateManager();\n\n const renderItem = (item: RationItem, index: number) => {\n const { supplements } = parsedSelftestData;\n const supplement = supplements.find(\n (supplement) => supplement.key === item.custom_бад.key\n );\n const image = supplement?.custom_картинка_url;\n const configByType = {\n 1: \"таб.\",\n 2: \"капс.\",\n 3: \"држ.\",\n 4: \"грнл.\",\n 5: \"гр.\",\n 6: \"сут. дз\",\n 7: \"пкт.\",\n };\n const units = supplement\n ? configByType[supplement.custom_лекарственная_форма.value]\n : \"\";\n const size = supplement?.custom_объем_упаковки || 1;\n const packages = Math.ceil((item.custom_порций * item.custom_курс) / size);\n\n return (\n
\n \n

\n \n {item.custom_бад.label}\n \n

\n {image && \"\"}\n
\n
\n
\n

\n {item.custom_порций} {units}\n
\n в сутки\n

\n
\n
\n

\n {item.custom_курс}\n
\n курс, суток\n

\n
\n
\n

\n {packages}\n
\n уп. на курс\n

\n
\n \n
\n \n \n \n
\n
\n
\n \n );\n };\n\n const handleSubmit = async (event: React.FormEvent) => {\n event.preventDefault();\n\n setIsLoading(true);\n setTimeout(() => {\n setIsLoading(false);\n }, 500);\n\n try {\n await saveOrPrintBlob(blob);\n onSubmit();\n } catch (error) {\n console.log(error);\n }\n };\n\n return (\n <>\n {miratorgData ? (\n \n ) : (\n \n {showProducts && (\n <>\n

\n не является лекарственным средством\n

\n {parsedSelftestData.rationItems?.map((rationItem, index) =>\n renderItem(rationItem, index)\n )}\n \n )}\n \n )}\n \n );\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport useSWR from \"swr\";\nimport classNames from \"classnames/bind\";\n\nimport { CATEGORIES } from \"../../api/categories\";\n\nimport { Screen } from \"components/Screen\";\nimport { SearchBox } from \"components/SearchBox\";\n\nimport { useStateManager } from \"utils/useStateManager\";\n\nimport styles from \"../../components/DietanamnezTile/DietanamnezTile.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Props = {\n onSubmit: (exists?: boolean) => Promise;\n onBack: () => void;\n};\n\nexport const Supplement: React.FC = (props) => {\n const { linkInfo, dietanamnezItems, setDietanamnezItem, isLoading, setIsLoading } = useStateManager();\n\n const { data: allSupplements = [], isValidating } = useSWR<\n {\n key: string;\n custom_наименование: string;\n custom_макс_доз_в_день: number;\n custom_страны:\n | null\n | {\n key: string;\n }[];\n custom_производитель?: {\n key: string;\n };\n }[]\n >([CATEGORIES.SUPPLEMENT, 572]);\n\n const supplements = allSupplements\n .filter((supplement) => {\n if (!linkInfo?.manufacturers) {\n return true;\n }\n\n return linkInfo.manufacturers.some(\n (manufacturer) =>\n manufacturer.key === supplement.custom_производитель?.key\n );\n })\n .filter((supplement) => {\n if (!linkInfo?.country) {\n return true;\n }\n\n if (!supplement.custom_страны) {\n return true;\n }\n\n return supplement.custom_страны?.some(\n (country) => country.key === linkInfo.country\n );\n });\n\n const handleChange = (search: string, values: string[]) => {\n return Promise.all([\n values.map((key) => {\n const supplement = supplements.find((item) => item.key === key)!;\n\n return setDietanamnezItem(key, {\n custom_количество: supplement.custom_макс_доз_в_день * 100,\n custom_частота_употребления: \"c105a902t44r1848\",\n });\n }),\n ]);\n };\n\n const handleRemoveItem = (key: string) => {\n setDietanamnezItem(key, undefined);\n };\n\n const [errorMessage, setErrorMessage] = useState(false)\n\n useEffect(() => {\n if (errorMessage) {\n setTimeout(() => {\n setErrorMessage(false)\n }, 5000);\n }\n }, [errorMessage]);\n\n const handleSubmit = async (event: React.FormEvent) => {\n event.preventDefault();\n setIsLoading(true);\n try {\n await props.onSubmit();\n } catch (error) {\n // @ts-ignore\n if (error.message === 'Network Error') {\n setErrorMessage(true);\n }\n }\n setIsLoading(false);\n };\n\n const options = useMemo(\n () => {\n if (!linkInfo?.country) {\n return supplements.filter((item) => (\n item.custom_страны?.find((country) => (\n country.key === \"c105a902t104r5087852\"\n ))\n )).map((item) => ({\n value: item.key,\n label: item.custom_наименование,\n }));\n };\n\n return supplements.map((item) => ({\n value: item.key,\n label: item.custom_наименование,\n }))\n },\n [supplements]\n );\n const value = useMemo(\n () =>\n dietanamnezItems\n .filter((item) => item.custom_блюдо.includes(\"t157\"))\n .map((item) => item.custom_блюдо),\n [dietanamnezItems]\n );\n\n return (\n <>\n {errorMessage && (\n
\n Ошибка подключения сети\n setErrorMessage(false)}\n >\n \n \n \n
\n )}\n item.label).join(\", \") || \"\"\n }`}\n buttonTitle={value.length === 0 ? \"Нет, не употребляю\" : \"Продолжить\"}\n onSubmit={handleSubmit}\n onBack={props.onBack}\n isLoading={isLoading}\n >\n \n \n \n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport classNames from \"classnames/bind\";\nimport ClipboardJS from \"clipboard\";\n\nimport { ScreenInfo } from \"../../components/ScreenInfo\";\nimport { Footer } from \"../../components/Footer\";\nimport { Button } from \"../../components/Button\";\n\nimport { useStateManager } from \"utils/useStateManager\";\nimport { UserType } from \"types/UserType\";\nimport { getQueryVariable } from \"../../utils/getQueryVariable\";\n\nimport styles from \"./Finish.module.css\";\n\nconst cx = classNames.bind(styles);\n\ntype Tooltip = {\n type: \"SUCCESS\" | \"ERROR\";\n text: string;\n};\n\nconst userLabel = {\n [UserType.LITE]: \"консультанту\",\n [UserType.PRO]: \"специалисту\",\n};\n\nexport const Finish: React.FC<{}> = () => {\n const { userType, linkInfo } = useStateManager();\n const label = userLabel[userType];\n const ref = useRef(null);\n const [tooltip, setTooltip] = useState(null);\n\n useEffect(() => {\n if (ref.current) {\n const instance = new ClipboardJS(ref.current, {\n text: () => {\n const invitationText = linkInfo?.link!.split(\"http\")[0];\n\n if (getQueryVariable(\"i\")) {\n return invitationText + window.location.href.split(\"?\")[0] + \"?\" + linkInfo?.link!.split(\"?\")[1];\n }\n return invitationText + window.location.href;\n },\n });\n\n instance.on(\"success\", () => {\n setTooltip({\n type: \"SUCCESS\",\n text: \"Ссылка скопирована\",\n });\n\n setTimeout(() => {\n setTooltip(null);\n }, 1000);\n });\n\n instance.on(\"error\", () => {\n setTooltip({\n type: \"ERROR\",\n text: \"Произошла ошибка\",\n });\n\n setTimeout(() => {\n setTooltip(null);\n }, 1000);\n });\n\n return () => instance.destroy();\n }\n }, [ref.current]);\n\n return (\n \n

\n {linkInfo?.custom?.custom_additional_data?.replacement1 || `Мы уже отправили письмо об этому вашему ${label}.`}\n
\n
С вами свяжутся для продолжения работы или обратитесь к {\n label\n }{\" \"}\n самостоятельно, в зависимости от договоренностей.\n

\n\n {linkInfo?.link && (\n <>\n

\n Хотите предложить такой же тест близкому человеку?\n
\n Просто передайте эту ссылку любым удобным способом:\n

\n \n \n {tooltip?.text}\n \n \n )}\n\n
\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"info\":\"Finish_info__yHJXg\",\"link\":\"Finish_link__-fIUd\",\"tooltip\":\"Finish_tooltip__3kLZj\",\"tooltip_error\":\"Finish_tooltip_error__2obPk\",\"tooltip_visible\":\"Finish_tooltip_visible__S4WT7\"};","import React from \"react\";\n\nimport { Container } from \"../../components/Container\";\nimport { Welcome } from \"../../screens/Welcome\";\nimport { InvalidLink } from \"../../screens/InvalidLink\";\nimport { Agreement } from \"../../screens/Agreement\";\nimport { Registration } from \"../../screens/Registration\";\nimport { Anthropometry } from \"../../screens/Anthropometry\";\nimport { Allergens } from \"../../screens/Allergens\";\nimport { RegistrationSuccess } from \"../../screens/RegistrationSuccess\";\nimport { Dietanamnez } from \"../../screens/Dietanamnez\";\nimport { DietanamnezTiles } from \"../../screens/DietanamnezTiles\";\nimport { Deficit } from \"screens/Deficit\";\nimport { Product } from \"screens/Product\";\nimport { Supplement } from \"screens/Supplement\";\nimport { Finish } from \"../../screens/Finish\";\n\nimport { StateManagerContext, useStateManager } from \"utils/useStateManager\";\n\nexport const Root: React.FC<{}> = () => {\n const stateManager = useStateManager();\n const { userType, screen, linkInfo, onPrevScreen, onNextScreen } = stateManager;\n const isEpharmacy = linkInfo?.custom?.custom_генерировать_бад_рацион_при_саморегистрации;\n const showProducts = linkInfo?.custom?.custom_показывать_экран_рекомендуемая_продукция;\n const miratorgData = linkInfo?.custom?.custom_additional_data?.final_screen_additional_content;\n\n if (!screen) {\n return null;\n }\n\n const screensList = isEpharmacy ?\n {\n ERROR: ,\n WELCOME: ,\n REGISTRATION_SUCCESS: ,\n DIETANAMNEZ: ,\n DIETANAMNEZ_TILES: (\n \n ),\n REGISTRATION: ,\n DEFICIT: ,\n PRODUCT: ,\n } :\n {\n ERROR: ,\n WELCOME: ,\n REGISTRATION_SUCCESS: ,\n DIETANAMNEZ: ,\n DIETANAMNEZ_TILES: (\n \n ),\n ALLERGENS: ,\n AGREEMENT: ,\n REGISTRATION: ,\n ANTHROPOMETRY: (\n \n ),\n SUPPLEMENT: ,\n FINISH: ,\n };\n\n return (\n \n {screensList[screen!]}\n \n );\n};\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { SWRConfig } from \"swr\";\nimport * as Sentry from \"@sentry/react\";\nimport { Integrations } from \"@sentry/tracing\";\n\nimport reportWebVitals from \"./reportWebVitals\";\n\nimport { Root } from \"./pages/Root\";\n\nimport { get } from \"./api/get\";\n\nimport \"./styles/base.css\";\nimport \"./styles/variables.css\";\n\nconst version = process.env.REACT_APP_VERSION?.replace(\"refs/tags/\", \"\");\n\nconsole.log(\"VERSION\", version);\n\nif (process.env.NODE_ENV === \"production\") {\n Sentry.init({\n release: version,\n dsn: process.env.REACT_APP_SENTRY_DSN,\n integrations: [new Integrations.BrowserTracing()],\n tracesSampleRate: 1.0,\n });\n}\n\nReactDOM.render(\n \n \n get(categoryId, listId),\n onError: (err, key, config) => {\n console.log(err, key, config);\n },\n }}\n >\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"names":["module","exports","context","errors","sid","uuid4","duration","status","init","ignoreDuration","startingTime","timestampInSeconds","this","timestamp","started","update","Session","user","ipAddress","ip_address","did","id","email","username","length","undefined","release","environment","userAgent","dropUndefinedKeys","Date","toISOString","attrs","user_agent","client","scope","_version","Scope","_stack","getStackTop","bindClient","Hub","version","setupIntegrations","getScope","getStack","push","getClient","pop","callback","pushScope","popScope","exception","hint","eventId","_lastEventId","event_id","finalHint","syntheticException","Error","originalException","_invokeClient","__assign","message","level","event","type","breadcrumb","_c","beforeBreadcrumb","_d","maxBreadcrumbs","dateTimestampInSeconds","mergedBreadcrumb","finalBreadcrumb","consoleSandbox","addBreadcrumb","setUser","tags","setTags","extras","setExtras","key","value","setTag","extra","setExtra","name","setContext","oldHub","makeMain","integration","getIntegration","_oO","isDebugBuild","logger","_callExtensionMethod","customSamplingContext","endSession","_sendSessionUpdate","layer","session","getSession","close","setSession","getGlobalObject","getUser","currentSession","captureSession","method","args","apply","_a","__spread","carrier","getMainCarrier","sentry","__SENTRY__","extensions","hub","registry","getHubFromCarrier","setHubOnCarrier","getCurrentHub","hasHubOnCarrier","isOlderThan","isNodeEnv","activeDomain","domain","active","registryHubTopStack","_Oo","getHubFromActiveDomain","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_user","_tags","_extra","_contexts","_sdkProcessingMetadata","newScope","_level","_span","_session","_transactionName","_fingerprint","_requestSession","_notifyScopeListeners","requestSession","fingerprint","setTransactionName","span","getSpan","transaction","captureContext","updatedScope","Object","keys","isPlainObject","contexts","maxCrumbs","Math","min","slice","trace","getTraceContext","transactionName","_applyFingerprint","breadcrumbs","sdkProcessingMetadata","_notifyEventProcessors","getGlobalEventProcessors","newData","processors","index","SyncPromise","resolve","reject","processor","result","isThenable","then","final","_this","forEach","Array","isArray","concat","global","globalEventProcessors","addGlobalEventProcessor","FINISH_REASON_TAG","IDLE_TRANSACTION_FINISH_REASONS","errorCallback","activeTransaction","getActiveTransaction","status_1","setStatus","traceHeaders","toTraceparent","sample","options","samplingContext","hasTracingEnabled","sampled","setMetadata","transactionSampling","tracesSampler","sampleRate","rate","Number","parentSampled","tracesSampleRate","isNaN","JSON","stringify","isValidSampleRate","random","op","_startTransaction","transactionContext","getOptions","Transaction","initSpanRecorder","_experiments","maxSpans","startIdleTransaction","idleTimeout","onScope","IdleTransaction","addExtensionMethods","startTransaction","_addTracingExtensions","packageToIntegrationMapping","mongodb","dynamicRequire","Mongo","mongoose","mysql","Mysql","pg","Postgres","mappedPackages","filter","moduleName","loadModule","map","pkg","e","p","integrations","_autoloadDatabaseIntegrations","addInstrumentationHandler","DEFAULT_IDLE_TIMEOUT","_pushActivity","_popActivity","transactionSpanId","maxlen","_super","__extends","IdleTransactionSpanRecorder","spanId","finish","endTimestamp","timestampWithMs","add","call","SpanRecorder","_idleHub","_idleTimeout","_onScope","clearActiveTransaction","configureScope","setSpan","_initTimeout","setTimeout","_finished","activities","spanRecorder","_beforeFinishCallbacks","spans","keepSpan","startTimestamp","_pingHeartbeat","clearTimeout","timeout","end_1","heartbeatString","join","_prevHeartbeatString","_heartbeatCounter","_beat","getTransaction","_maxlen","spanContext","traceId","substring","data","parentSpanId","description","Span","startChild","childSpan","httpStatus","String","spanStatus","spanStatusfromHttpCode","sampledString","_b","_e","parent_span_id","span_id","trace_id","start_timestamp","isInstanceOf","_hub","metadata","_trimEnd","trimEnd","measurements","_measurements","newMetadata","finishedSpans","s","reduce","prev","current","captureEvent","transport","getTransport","recordLostEvent","toContext","updateWithContext","SpanClass","maybeOptions","maybeHub","msToSec","time","secToMs","htmlTreeAsString","elem","keyAttrs","currentElem","out","height","len","sepLength","nextStr","_htmlElementAsString","parentNode","reverse","el","className","classes","attr","i","tagName","toLowerCase","keyAttrPairs","keyAttr","getAttribute","keyAttrPair","isString","split","allowedAttrs","getLocationHref","document","location","href","oO","isBrowserBundle","__SENTRY_BROWSER_BUNDLE__","fallbackGlobalObject","window","self","lastHref","handlers","instrumented","instrument","CONSOLE_LEVELS","console","fill","originalConsoleMethod","triggerHandlers","instrumentConsole","triggerDOMHandler","bind","globalDOMEventHandler","makeDOMEventHandler","addEventListener","target","proto","prototype","hasOwnProperty","originalAddEventListener","listener","handlers_1","__sentry_instrumentation_handlers__","handlerForType","refCount","handler","originalRemoveEventListener","handlers_2","instrumentDOM","xhrproto","XMLHttpRequest","originalOpen","xhr","url","xhrInfo","__sentry_xhr__","toUpperCase","match","__sentry_own_request__","onreadystatechangeHandler","readyState","status_code","now","onreadystatechange","original","readyStateArgs","originalSend","body","instrumentXHR","supportsNativeFetch","originalFetch","handlerData","fetchData","getFetchMethod","getFetchUrl","response","error","instrumentFetch","supportsHistory","oldOnPopState","onpopstate","historyReplacementFunction","originalHistoryFunction","from","to","history","instrumentHistory","_oldOnErrorHandler","onerror","msg","line","column","arguments","_oldOnUnhandledRejectionHandler","onunhandledrejection","getFunctionName","fetchArgs","Request","debounceTimerID","lastCapturedEvent","globalListener","isContentEditable","shouldSkipDOMEvent","previous","shouldShortcircuitPreviousDebounce","objectToString","toString","isError","wat","isBuiltin","ty","isErrorEvent","isDOMError","isDOMException","isPrimitive","isEvent","Event","isElement","Element","isRegExp","Boolean","isSyntheticEvent","base","PREFIX","originalConsole","wrappedLevels","__sentry_original__","_enabled","Logger","log","warn","sentryGlobal","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","replace","c","r","parseUrl","query","fragment","host","path","protocol","relative","getFirstException","values","getEventDescription","firstException","addExceptionTypeValue","addExceptionMechanism","newMechanism","currentMechanism","mechanism","handled","mergedData","checkOrSetAlreadyCaught","__sentry_captured__","addNonEnumerableProperty","err","process","mod","request","require","cwd","source","replacementFactory","wrapped","markFunctionWrapped","obj","defineProperty","writable","configurable","getOriginalFunction","func","urlEncode","object","encodeURIComponent","getWalkSource","stack","event_1","currentTarget","CustomEvent","detail","extractExceptionKeysForMessage","maxLength","sort","truncate","includedKeys","serialized","val","rv","createStackParser","parsers","sortedParsers","a","b","skipFirst","frames","sortedParsers_1_1","frame","parser","stripSentryFramesAndReverse","localStack","firstFrameFunction","function","lastFrameFunction","indexOf","filename","defaultFunctionName","fn","str","max","substr","safeJoin","input","delimiter","output","isMatchingPattern","pattern","test","supportsFetch","Headers","Response","isNativeFetch","fetch","doc","createElement","sandbox","hidden","head","appendChild","contentWindow","removeChild","supportsReferrerPolicy","referrerPolicy","chrome","isChromePackagedApp","app","runtime","hasHistoryApi","pushState","replaceState","resolvedSyncPromise","rejectedSyncPromise","reason","_","executor","_state","_handlers","_resolve","_setResult","_reject","state","_value","_executeHandlers","cachedHandlers","onfulfilled","onrejected","onfinally","isRejected","dateTimestampSource","nowSeconds","platformPerformance","performance","getNodePerformance","timeOrigin","getBrowserPerformance","timestampSource","browserPerformanceTimeOrigin","threshold","performanceNow","dateNow","timeOriginDelta","abs","timeOriginIsReliable","navigationStart","timing","navigationStartDelta","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","config","Promise","requestData","requestHeaders","headers","responseType","isFormData","auth","password","unescape","Authorization","btoa","fullPath","baseURL","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","open","params","paramsSerializer","responseURL","onabort","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","isStandardBrowserEnv","xsrfValue","withCredentials","xsrfCookieName","read","xsrfHeaderName","setRequestHeader","isUndefined","onDownloadProgress","onUploadProgress","upload","cancelToken","promise","cancel","abort","send","Axios","mergeConfig","createInstance","defaultConfig","instance","extend","axios","create","instanceConfig","defaults","Cancel","CancelToken","isCancel","all","promises","spread","isAxiosError","__CANCEL__","TypeError","resolvePromise","token","throwIfRequested","InterceptorManager","dispatchRequest","validator","validators","interceptors","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","responseInterceptorChain","chain","shift","newConfig","onFulfilled","onRejected","getUri","use","eject","h","isAbsoluteURL","combineURLs","requestedURL","enhanceError","code","transformData","throwIfCancellationRequested","transformRequest","merge","common","adapter","transformResponse","toJSON","number","fileName","lineNumber","columnNumber","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","getMergedValue","mergeDeepProperties","prop","axiosKeys","otherKeys","validateStatus","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","getDefaultAdapter","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isObject","rawValue","encoder","parse","trim","stringifySafely","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","encode","serializedParams","parts","isDate","hashmarkIndex","relativeURL","write","expires","secure","cookie","isNumber","toGMTString","RegExp","decodeURIComponent","remove","payload","originURL","msie","navigator","urlParsingNode","resolveURL","setAttribute","search","hash","hostname","port","pathname","charAt","requestURL","parsed","normalizedName","ignoreDuplicateOf","thing","deprecatedWarnings","currentVerArr","isOlderVersion","thanVersion","pkgVersionArr","destVer","isDeprecated","formatMessage","opt","desc","opts","schema","allowUnknown","getPrototypeOf","isFunction","l","constructor","FormData","ArrayBuffer","isView","pipe","URLSearchParams","product","assignValue","stripBOM","content","charCodeAt","hasOwn","classNames","arg","argType","default","inner","factory","__webpack_modules__","__unused_webpack_module","__webpack_exports__","__webpack_require__","d","tiny_emitter","tiny_emitter_default","n","listen","listen_default","src_select","select_default","command","execCommand","actions_cut","selectedText","fakeCopyAction","fakeElement","isRTL","documentElement","style","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","createFakeElement","container","actions_copy","HTMLInputElement","includes","_typeof","Symbol","iterator","actions_default","_options$action","action","text","nodeType","hasAttribute","clipboard_typeof","_defineProperties","props","descriptor","enumerable","_setPrototypeOf","o","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","getAttributeValue","suffix","element","attribute","Clipboard","_Emitter","subClass","superClass","_inherits","Constructor","protoProps","staticProps","trigger","_classCallCheck","resolveOptions","listenClick","defaultAction","defaultTarget","defaultText","_this2","onClick","delegateTarget","emit","clearSelection","focus","getSelection","removeAllRanges","selector","querySelector","destroy","actions","support","queryCommandSupported","clipboard","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","__unused_webpack_exports","closest","_delegate","useCapture","listenerFn","removeEventListener","elements","querySelectorAll","node","HTMLElement","nodeList","string","is","delegate","listenNode","listenNodeList","listenSelector","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","E","on","ctx","once","off","evtArr","evts","liveEvents","TinyEmitter","__webpack_module_cache__","moduleId","getter","__esModule","definition","get","autoBom","Blob","onload","g","dispatchEvent","MouseEvent","createEvent","initMouseEvent","f","saveAs","HTMLAnchorElement","URL","webkitURL","j","download","rel","origin","createObjectURL","revokeObjectURL","msSaveOrOpenBlob","title","innerText","safari","FileReader","k","readAsDataURL","m","defaultOptions","sortFn","score","tokenSeparator","Fuse","list","BitapSearcher","distance","maxPatternLength","patternLen","overflow","cache","matchmask","patternAlphabet","_calculatePatternAlphabet","VERSION","set","results","resultMap","_keyMap","_prepareSearchers","_startSearch","_computeScore","_sort","_format","tokens","tokenSearchers","weight","listLen","keysLen","item","_analyze","entity","words","scores","averageScore","scoresLen","tokenSearcher","word","tokenSearchResult","exists","tokenScores","isMatch","totalScore","scoreLen","bestScore","nScore","keyMap","finalOutput","mask","_bitapScore","accuracy","proximity","_search","textLen","bestLoc","binMin","binMid","binMax","start","bitArr","lastBitArr","charMatch","locations","isMatched","matchMask","lastIndexOf","floor","currentIndex","currentComponent","prevRaf","currentHook","afterPaintEffects","oldBeforeDiff","oldBeforeRender","oldAfterDiff","oldCommit","oldBeforeUnmount","getHookState","hooks","__","__h","useState","initialState","useReducer","invokeOrReturn","reducer","hookState","_reducer","nextValue","setState","useEffect","argsChanged","useLayoutEffect","useRef","initialValue","useMemo","useImperativeHandle","ref","createHandle","useCallback","useContext","provider","sub","useDebugValue","formatter","useErrorBoundary","cb","errState","componentDidCatch","flushAfterPaintEffects","component","invokeCleanup","invokeEffect","vnode","raf","done","HAS_RAF","cancelAnimationFrame","requestAnimationFrame","commitQueue","some","hasErrored","hook","comp","cleanup","oldArgs","newArgs","assign","shallowDiffers","PureComponent","memo","comparer","shouldUpdate","nextProps","updateRef","Memoed","shouldComponentUpdate","displayName","isReactComponent","Component","isPureReactComponent","oldDiffHook","REACT_FORWARD_SYMBOL","for","forwardRef","Forwarded","clone","$$typeof","render","mapFn","children","toChildArray","Children","count","only","normalized","toArray","oldCatchError","newVNode","oldVNode","oldUnmount","Suspense","_suspenders","suspended","lazy","loader","prom","Lazy","SuspenseList","_next","_map","suspendingVNode","suspendingComponent","resolved","onResolved","onSuspensionComplete","suspendedVNode","removeOriginal","detachedParent","originalParent","child","insertBefore","__e","forceUpdate","wasHydrating","componentWillUnmount","detachedComponent","__c","detachedClone","parentDom","effect","fallback","Fragment","delete","revealOrder","size","ContextProvider","getChildContext","Portal","_container","_temp","childNodes","before","splice","createPortal","__v","delegated","u","unsuspend","wrappedUnsuspend","Map","componentDidUpdate","componentDidMount","REACT_ELEMENT_TYPE","CAMEL_PROPS","IS_DOM","onChangeInputType","parent","textContent","preactRender","hydrate","preactHydrate","oldEventHook","empty","isPropagationStopped","cancelBubble","isDefaultPrevented","defaultPrevented","persist","nativeEvent","classNameDescriptor","class","oldVNodeHook","normalizedProps","nonCustomElement","multiple","selected","defaultValue","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentDispatcher","readContext","createFactory","isValidElement","cloneElement","preactCloneElement","unmountComponentAtNode","findDOMNode","unstable_batchedUpdates","flushSync","StrictMode","createContext","createRef","vnodeId","rerenderQueue","defer","prevDebounce","EMPTY_OBJ","EMPTY_ARR","IS_NON_DIMENSIONAL","removeNode","defaultProps","createVNode","__b","__d","getDomSibling","childIndex","sibling","updateParentDomPointers","enqueueRender","debounceRendering","queue","oldDom","diff","ownerSVGElement","commitRoot","diffChildren","renderResult","newParentVNode","oldParentVNode","globalContext","isSvg","excessDomChildren","isHydrating","childVNode","newDom","firstChildDom","refs","oldChildren","oldChildrenLength","reorderChildren","placeChild","unmount","applyRef","tmp","nextDom","sibDom","outer","nextSibling","setStyle","setProperty","dom","oldValue","cssText","_listeners","eventProxyCapture","eventProxy","isNew","oldProps","oldState","snapshot","clearProcessingException","newProps","componentContext","newType","contextType","doRender","getDerivedStateFromProps","componentWillMount","componentWillReceiveProps","componentWillUpdate","getSnapshotBeforeUpdate","diffElementNodes","diffed","root","oldHtml","newHtml","localName","createTextNode","createElementNS","dangerouslySetInnerHTML","attributes","innerHTML","diffProps","checked","parentVNode","skipRemove","replaceNode","firstChild","contextId","Consumer","contextValue","Provider","subs","_props","old","ctor","getDerivedStateFromError","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","array","bigint","bool","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","React","reactDom","_extends","t","_inheritsLoose","getOwnPropertyNames","getOwnPropertyDescriptor","_defaults2","invariant_1","framesToPop","setInputSelection","selectionStart","selectionEnd","createTextRange","collapse","moveStart","moveEnd","defaultFormatChars","parseMask","maskChar","formatChars","prefix","lastEditablePosition","permanents","isPermanentCharacter","isAllowedCharacter","isEmpty","every","getFilledLength","isFilled","formatValue","insertString","getRightEditablePosition","getStringValue","processChange","end","getInsertStringLength","getLeftEditablePosition","clearRange","enteredString","getCancelAnimationFrame","webkitCancelRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelDefer","InputElement","focused","mounted","previousSelection","selectionDeferId","saveSelectionLoopDeferId","saveSelectionLoop","runSaveSelectionLoop","stopSaveSelectionLoop","getInputDOMNode","getInputValue","setInputValue","setCursorToEnd","maskOptions","setCursorPosition","setSelection","isFocused","deferred","parentElement","getInputSelection","getCursorPosition","getBeforeMaskedValueChangeConfig","alwaysShowMask","isInputAutofilled","onChange","beforePasteState","beforeMaskedValueChange","isWindowsPhoneBrowser","onFocus","onBlur","onMouseDown","mouseDownX","clientX","mouseDownY","clientY","mouseDownTime","getTime","onPaste","handleRef","inputRef","_objectWithoutPropertiesLoose","disabled","readOnly","normalizeArguments","arg_1","arg_2","arg_3","arg_4","defaultCountry","VALID_DIGITS","VALID_PUNCTUATION","ParseError","pa","pb","na","nb","DEFAULT_EXT_PREFIX","CALLING_CODE_REG_EXP","Metadata","is_object","countries","type_of","validateMetadata","setVersion","countryCode","v1","v2","v3","nonGeographic","nonGeographical","country","getCountryMetadata","callingCode","getCountryCodesForCallingCode","countryCodes","countryCallingCodes","selectNumberingPlan","hasCountry","numberingPlan","NumberingPlan","hasCallingCode","getNumberingPlanMetadata","getCountryCodeForCallingCode","IDDPrefix","defaultIDDPrefix","nationalNumberPattern","possibleLengths","formats","nationalPrefixForParsing","nationalPrefixTransformRule","leadingDigits","hasTypes","ext","country_phone_code_to_countries","country_calling_codes","globalMetadataObject","_getFormats","getDefaultCountryMetadataForRegion","Format","_getNationalPrefixFormattingRule","_nationalPrefixForParsing","nationalPrefix","_getNationalPrefixIsOptionalWhenFormatting","types","getType","Type","format","nationalPrefixFormattingRule","nationalPrefixIsOptionalWhenFormattingInNationalFormat","usesNationalPrefix","FIRST_GROUP_ONLY_PREFIX_PATTERN","getCountryCallingCode","countryCallingCode","isSupportedCountry","v4","compare","getExtensionDigitsPattern","createExtensionPattern","purpose","optionalExtnSuffix","possibleSeparatorsBetweenNumberAndExtLabel","possibleSeparatorsNumberExtLabelNoComma","VALID_PHONE_NUMBER","VALID_PHONE_NUMBER_START_REG_EXP","VALID_PHONE_NUMBER_WITH_EXTENSION","VALID_PHONE_NUMBER_PATTERN","isViablePhoneNumber","EXTN_PATTERN","DIGITS","parseDigit","character","parseDigits","_ref","_i","digit","parseIncompletePhoneNumber","parsePhoneNumberCharacter","prevParsedCharacters","checkNumberLength","nationalNumber","checkNumberLengthForType","type_info","possible_lengths","mobile_type","merged","mergeArrays","actual_length","minimum_length","isPossibleNumber","matchesEntirely","regular_expression","NON_FIXED_LINE_PHONE_TYPES","getNumberType","phone","isNumberTypeEqualTo","applyInternationalSeparatorStyle","formattedNumber","FIRST_GROUP_PATTERN","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","carrierCode","internationalFormat","SINGLE_IDD_PREFIX_REG_EXP","DEFAULT_OPTIONS","formatExtension","extension","formatNumber","addExtension","formatNationalNumber","formatRFC3966","fromCountry","iddPrefix","countryMetadata","getIddPrefix","formatIDD","formatAs","availableFormats","nationalNnumber","leadingDigitsPatterns","lastLeadingDigitsPattern","chooseFormatForNumber","PhoneNumber","_metadata","isCountryCode","isNonGeographicCallingCode","isValidNumber","phoneNumber","CAPTURING_DIGIT_PATTERN","stripIddPrefix","IDDPrefixPattern","matchedGroups","extractNationalNumberFromPossiblyIncompleteNumber","prefixPattern","prefixMatch","exec","capturedGroupsCount","hasCapturedGroups","prefixBeforeNationalNumber","possiblePositionOfTheFirstCapturedGroup","extractNationalNumber","nationalSignificantNumber","shouldExtractNationalPrefix","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","possibleShorterNumber","possibleShorterNationalNumber","extractCountryCallingCode","numberWithoutIDD","shorterNumber","getCountryByCallingCode","nationalPhoneNumber","possibleCountries","selectCountryFromList","PHONE_NUMBER_START_PATTERN","AFTER_PHONE_NUMBER_END_PATTERN","extract","parseRFC3966","throwOnError","startsAt","extractFormattedPhoneNumber","isViablePhoneNumberStart","withExtensionStripped","numberWithoutExtension","extractExtension","parseInput","formattedPhoneNumber","defaultCallingCode","exactCountry","parsePhoneNumber","hasSelectedNumberingPlan","valid","extended","possible","parseNumber","parsePhoneNumberFromString","parsePhoneNumberFromString_","formatPhoneNumber","formatPhoneNumberIntl","isValidPhoneNumber","isValid","isPossiblePhoneNumber","isPossible","getCountries","labels","count_occurences","closeBraces","retained_template","template","placeholder","empty_placeholder","cut_before","opening_braces","closing_braces","dangling_braces","caret","should_close_braces","characters_in_template","value_character_index","filled_in_template","close_braces","template_formatter","found","possibly_last_input_character_index","Keys","setCaretPosition","caret_position","ANDROID_USER_AGENT_REG_EXP","isAndroid","onKeyDown","_parse","on_change","operation","keyCode","getOperation","preventDefault","eraseSelection","formatInputText","parse_character","focused_input_character_index","newValueAndCaret","edit","formatted","Input","InputComponent","inputComponent","rest","internalRef","setRef","_onChange","_onKeyDown","onInputKeyDown","isEmptyValue","propTypes","onCut","AsYouTypeState","onCountryChange","onCallingCodeChange","properties","_defineProperty","international","missingPlus","digits","resetNationalSignificantNumber","initCountryAndCallingCode","getNationalDigits","nationalSignificantNumberMatchesInput","complexPrefixBeforeNationalSignificantNumber","setCountry","setCallingCode","nextDigits","DIGIT_PLACEHOLDER","DIGIT_PLACEHOLDER_MATCHER","repeat","times","cutAndStripNonPairedParens","cutBeforeIndex","cleared_string","stripNonPairedParens","formatCompleteNumber","shouldTryNationalPrefixFormattingRule","getSeparatorAfterNationalPrefix","useNationalPrefixFormattingRule","formatNationalNumberWithAndWithoutNationalPrefixFormattingRule","formattedNationalNumber","isValidFormattedNationalNumber","PatternMatcher","matchTree","PatternParser","allowOverflow","matchedChars","characters","tree","last","characterString","partialMatch","restCharacters","_ref2","_ref3","_i2","char","OPERATOR","ILLEGAL_CHARACTER_REGEXP","or","instructions","parsePattern","branches","operator","rightPart","startContext","getContext","endContext","oneOfSet","parseOneOfSet","prevValue","fromCharCode","LONGEST_DUMMY_PHONE_NUMBER","NATIONAL_PREFIX_SEPARATORS_PATTERN","CREATE_CHARACTER_CLASS_PATTERN","CREATE_STANDALONE_DIGIT_PATTERN","NON_ALTERING_FORMAT_REG_EXP","AsYouTypeFormatter","isNANP","resetFormat","chosenFormat","nationalNumberTemplate","populatedNationalNumberTemplate","populatedNationalNumberTemplatePosition","matchingFormats","narrowDownMatchingFormats","canFormatCompleteNumber","formattedCompleteNumber","setNationalNumberTemplate","formatNationalNumberWithNextDigits","previouslyChosenFormat","newlyChosenFormat","chooseFormat","formatNextNationalNumberDigits","leadingDigitsPatternIndex","_this3","formatSuits","formatMatches","nationalPrefixIsMandatoryWhenFormattingInNationalFormat","leadingDigitsPatternsCount","leadingDigitsPattern","_ref5","_this4","getFormatFormat","createTemplateForFormat","_loop","getTemplateForFormat","spacing","internationalPrefix","getInternationalPrefixBeforeCountryCallingCode","getDigitsWithoutInternationalPrefix","strictPattern","nationalNumberDummyDigits","nationalPrefixIncludedInTemplate","numberFormat","numberFormatWithNationalPrefix","_i3","populateTemplateWithDigits","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN","VALID_FORMATTED_PHONE_NUMBER_PART","AFTER_PHONE_NUMBER_DIGITS_END_PATTERN","COMPLEX_NATIONAL_PREFIX","AsYouTypeParser","onNationalSignificantNumberChange","justLeadingPlus","extractedNumber","hasPlus","_extractFormattedDigitsAndPlus","formattedDigits","extractFormattedDigitsAndPlus","startInternationalNumber","inputDigits","hasReceivedThreeLeadingDigits","appendDigits","extractIddPrefix","isWaitingForCountryCallingCode","appendNationalSignificantNumberDigits","hasExtractedNationalSignificantNumber","extractNationalSignificantNumber","couldPossiblyExtractAnotherNationalSignificantNumber","nationalDigits","onExtractedNationalNumber","prevNationalSignificantNumber","nationalSignificantNumberIndex","extractAnotherNationalSignificantNumber","fixMissingPlus","extractCallingCodeAndNationalSignificantNumber","newCallingCode","AsYouType","optionsOrDefaultCountry","getCountryAndCallingCode","reset","formattedOutput","determineTheCountryIfNeeded","reExtractNationalSignificantNumber","getFullNumber","getNonFormattedNumber","isInternational","getCallingCode","_getCountry","isCountryCallingCodeAmbiguous","determineTheCountry","getNonFormattedNationalNumberWithPrefix","getNumber","getTemplate","getNonFormattedTemplate","getInputValuePrefix","withCountryCallingCode","removeInputValuePrefix","defaultMetadata","InputSmart","InputBasic","newValue","formatIncompletePhoneNumber","getRegionalIndicatorSymbol","letter","fromCodePoint","CountrySelect","onChange_","getSelectedOption","label","divider","DIVIDER_STYLE","backgroundColor","color","CountrySelectWithIcon","Icon","iconComponent","Arrow","getIconAspectRatio","arrowComponent","unicodeFlags","selectedOption","aspectRatio","_ref4","option","FlagComponent","countryName","flags","flagUrl","alt","role","src","InternationalIcon","InternationalIcon1x1","InternationalIcon3x2","xmlns","viewBox","stroke","strokeWidth","strokeMiterlimit","strokeLinecap","x1","y1","x2","y2","isCountrySupportedWithError","getSupportedCountries","createCountryIconComponent","flagComponent","internationalIcon","CountryIcon","_aspectRatio","DefaultInternationalIcon","Flag","ONLY_DIGITS_REGEXP","getInternationalPhoneNumberPrefix","parsePhoneNumber_","getPhoneDigitsForNewCountry","phoneDigits","prevCountry","newCountry","useNationalFormat","countryCallingCodePrefix","country_calling_code","stripCountryCallingCode","newCountryPrefix","e164","asYouType","getNumberValue","partial_national_significant_number","getNationalSignificantNumberDigits","trimNumber","nationalSignificantNumberPart","overflowDigitsCount","getMaxNumberLength","getCountryForPartialE164Number","partialE164Number","required","derived_country","getCountry","getCountryFromPossiblyIncompleteInternationalPhoneNumber","couldNumberBelongToCountry","convertInternationalPhoneDigitsToNational","formatNational","compareStrings","locales","localeCompare","intlPhoneNumberPrefix","getInitialPhoneDigits","generateNationalNumberDigits","PhoneNumberInput_","focusInputOnCountrySelection","newPhoneDigits","hasUserSelectedACountry","_phoneDigits","addInternationalOption","limitMaxLength","countryCallingCodeEditable","prevPhoneDigits","countryRequired","getAnyCountry","onPhoneDigitsChange","getFirstSupportedCountry","stateUpdate","forceRerender","_onFocus","_onBlur","countrySelectProps","displayInitialValueAsLocalNumber","initialValueFormat","preSelectedCountry","getPreSelectedCountry","selectedCountry","prevProps","prevState","generator","dependencies","countryOptionsOrder","order","optionsOnTop","optionsOnBottom","appendTo","sortCountryOptions","countryNames","compareStringsLocales","_compareStrings","countrySelectOptions","ZZ","getCountrySelectOptions","countryOptions","getSupportedCountryOptions","countrySelectOptionsMemoDependencies","areEqualArrays","countrySelectOptionsMemo","autoComplete","numberInputProps","smartCaret","CountrySelectComponent","countrySelectComponent","ContainerComponent","containerComponent","onCountryFocus","onCountryBlur","setInputRef","newDefaultCountry","newReset","prevDefaultCountry","prevReset","_getInitialPhoneDigits","parameters","isNewDefaultCountrySupported","noValueHasBeenEnteredByTheUser","parsedCountry","hasUserSelectedACountryUpdate","supportedCountries","getPhoneInputWithCountryStateUpdateFromNewProps","PhoneNumberInput","labelsPropType","metadataPropType","createPhoneInput","PhoneInputDefault","PhoneInput","_arguments","_parsePhoneNumber","_formatPhoneNumber","_formatPhoneNumberIntl","_isValidPhoneNumber","_isPossiblePhoneNumber","_getCountries","_getCountryCallingCode","_isSupportedCountry","isNavigator","isBrowser","noop","react_1","util_1","deserializer","raw","initializer","serializer","localStorageValue","localStorage","getItem","setItem","valOrFunc","newState","removeItem","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isGeneratorFunction","genFun","mark","awrap","async","iter","skipTempReset","stop","rootRecord","rval","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function","extendStatics","__rest","getOwnPropertySymbols","propertyIsEnumerable","__values","__read","ar","_arrayLikeToArray","arr2","_arrayWithHoles","asyncGeneratorStep","gen","_throw","_asyncToGenerator","_iterableToArray","_nonIterableRest","ownKeys","enumerableOnly","symbols","sym","_objectSpread2","getOwnPropertyDescriptors","defineProperties","_slicedToArray","arrayWithHoles","_s","_arr","_n","unsupportedIterableToArray","nonIterableRest","_toConsumableArray","arrayLikeToArray","iterableToArray","_unsupportedIterableToArray","minLen","__source","__self","cachedModule","loaded","chunkId","miniCssF","hmd","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","charset","nc","onScriptComplete","doneFns","loadStylesheet","fullhref","existingLinkTags","dataHref","tag","existingStyleTags","findStylesheet","linkTag","errorType","realHref","createStylesheet","installedCssChunks","miniCss","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","chunkLoadingGlobal","has","table","WeakMap","counter","Cache","initialData","entries","_key","serializeKey","notify","clear","_hash","subscribe","isSubscribed","online","isOnline","isDocumentVisible","visibilityState","fetcher","res","json","registerOnFocus","registerOnReconnect","slowConnection","effectiveType","onLoadingSlow","onSuccess","onError","onErrorRetry","revalidate","errorRetryCount","retryCount","errorRetryInterval","focusThrottleInterval","dedupingInterval","loadingTimeout","refreshInterval","revalidateOnFocus","revalidateOnReconnect","refreshWhenHidden","refreshWhenOffline","shouldRetryOnError","suspense","dequal","foo","bar","isPaused","webPreset","IS_SERVER","Deno","deno","rAF","useIsomorphicLayoutEffect","SWRConfigContext","__awaiter","P","step","__generator","y","trys","ops","verb","CONCURRENT_PROMISES","CONCURRENT_PROMISES_TS","FOCUS_REVALIDATORS","RECONNECT_REVALIDATORS","CACHE_REVALIDATORS","MUTATION_TS","MUTATION_END_TS","ts","revalidate_1","revalidators","shouldRevalidate","keyErr","keyValidating","updaters","currentData","currentError","currentIsValidating","broadcastState","isValidating","mutate","_data","beforeMutationTs","beforeConcurrentPromisesTs","isAsyncMutation","err_1","shouldAbort","SWRConfig","fnArgs","configRef","willRevalidateOnMount","revalidateOnMount","resolveData","cachedData","resolveIsValidating","initialError","initialIsValidating","stateDependencies","stateRef","latestData","latestError","rerender","dispatch","shouldUpdateState","unmountedRef","initialMountedRef","keyRef","eventsCallback","boundMutate","addRevalidator","keyedRevalidators","revalidateOpts","dedupe","loading","shouldDeduping","startAt","err_2","isUpdating","currentHookData","latestKeyedData","softRevalidate","pending","unsubFocus","unsubReconnect","unsubUpdate","updatedData","updatedError","updatedIsValidating","needUpdate","timer","tick","memoizedState","SDK_VERSION","DEFAULT_IGNORE_ERRORS","_options","InboundFilters","self_1","clientOptions","internalOptions","allowUrls","whitelistUrls","denyUrls","blacklistUrls","ignoreErrors","ignoreInternal","_mergeOptions","_isSentryError","_getPossibleEventMessages","_isIgnoredError","_getEventFilterUrl","_isDeniedUrl","_isAllowedUrl","_shouldDropEvent","_getLastValidUrl","stacktrace","frames_1","originalFunctionToString","FunctionToString","_newTarget","DSN_REGEX","dsnToString","dsn","withPassword","pass","projectId","publicKey","dsnFromComponents","components","makeDsn","SentryError","lastPath","projectMatch","dsnFromString","isValidProtocol","parseInt","validateDsn","normalize","depth","maxProperties","Infinity","walk","normalizeToSize","maxSize","encodeURI","utf8Length","hasWeakSet","WeakSet","memoBuilder","memoize","unmemoize","serializable","makeSerializable","serializeValue","acc","propertyCount","innerKey","innerValue","_events","installedIntegrations","filterDuplicates","accIntegration","defaultIntegrations","userIntegrations","userIntegration","integrationsNames","alwaysLastToRun","getIntegrationsToSetup","setupOnce","setupIntegration","ALREADY_SEEN_ERROR","backendClass","_integrations","_numProcessing","_backend","_dsn","BaseClient","_process","_getBackend","eventFromException","_captureEvent","promisedEvent","eventFromMessage","_isEnabled","_sendSession","_isClientDoneProcessing","clientFinished","transportFlushed","flush","enabled","initialized","crashed","errored","exceptions","exceptions_1_1","sessionNonTerminal","sendSession","ticked","interval","setInterval","clearInterval","normalizeDepth","normalizeMaxBreadth","prepared","_applyClientOptions","_applyIntegrationsMetadata","finalScope","applyToEvent","evt","_normalizeEvent","maxBreadth","baseClientNormalized","dist","maxValueLength","integrationsArray","sdk","sendEvent","_processEvent","finalEvent","beforeSend","outcome","category","isTransaction","_prepareEvent","__sentry__","nullErr","_ensureBeforeSendRv","processedEvent","_updateSessionFromEvent","_sendEvent","captureException","tunnel","_dsnObject","_tunnel","API","getBaseApiEndpoint","getStoreEndpoint","getStoreEndpointWithUrlEncodedAuth","getEnvelopeEndpointWithUrlEncodedAuth","initAPIDetails","initDsn","_getIngestEndpoint","_encodedAuth","sentry_key","sentry_version","_getEnvelopeEndpoint","createEnvelope","items","serializeEnvelope","envelope","serializedHeaders","itemHeaders","serializedPayload","getSdkMetadataForEnvelopeHeader","api","createSessionEnvelope","sdkInfo","sent_at","eventToSentryRequest","eventType","useEnvelope","samplingMethod","packages","enhanceEventWithSdkInfo","skippedNormalization","JSONStringifyError","newErr","innerErr","req","sample_rates","Severity","NoopTransport","_transport","_setupTransport","BaseBackend","_exception","_hint","_message","_newTransport","newTransport","env","createEventEnvelope","UNKNOWN_FUNCTION","createFrame","lineno","colno","in_app","chromeRegex","chromeEvalRegex","chromeStackParser","subMatch","geckoREgex","geckoEvalRegex","geckoStackParser","winjsRegex","winjsStackParser","opera10Regex","opera10StackParser","opera11Regex","opera11StackParser","extractSafariExtensionDetails","isSafariExtension","isSafariWebExtension","exceptionFromError","ex","parseStackFrames","extractMessage","eventFromError","popSize","reactMinifiedRegexp","getPopSize","eventFromUnknownInput","attachStacktrace","isUnhandledRejection","domException","name_1","eventFromString","__serialized__","eventFromPlainObject","synthetic","frames_2","makePromiseBuffer","limit","task","$","taskProducer","drain","capturedSetTimeout","disabledUntil","limits","updateRateLimits","updatedRateLimits","rateLimitHeader","retryAfterHeader","headerDelay","delay","_f","header","headerDate","parseRetryAfterHeader","cachedFetchImpl","getNativeFetchImplementation","fetchImpl","sendReport","sendBeacon","forget","fetch_1","credentials","keepalive","requestTypeToCategory","_buffer","_rateLimits","_outcomes","_api","sendClientReports","_flushOutcomes","BaseTransport","_sendRequest","sessionToSentryRequest","outcomes","discarded_events","discardedEvents","quantity","requestType","_isRateLimited","_disabledUntil","isRateLimited","_fetch","FetchTransport","sentryRequest","originalPayload","fetchParameters","_handleResponse","catch","XHRTransport","getResponseHeader","BrowserBackend","Info","transportOptions","callOnHub","withScope","ignoreOnError","shouldIgnoreOnError","ignoreNextOnError","wrapper","__sentry_wrapped__","sentryWrapped","wrappedArguments","addEventProcessor","property","injectReportDialog","dsnLike","dialogOptions","endpoint","encodedOptions","getReportDialogEndpoint","onLoad","injectionPoint","SeverityLevels","severityFromString","Warning","isSupportedSeverity","Log","Breadcrumbs","_consoleBreadcrumb","_innerDomBreadcrumb","serializeAttribute","_domBreadcrumb","_xhrBreadcrumb","_fetchBreadcrumb","_historyBreadcrumb","parsedLoc","parsedFrom","parsedTo","BrowserClient","getDsn","platform","addSentryBreadcrumb","DEFAULT_EVENT_TARGET","TryCatch","eventTarget","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","originalCallback","xmlHttpRequestProps","wrapOptions","originalFunction","eventName","handleEvent","wrappedEventHandler","originalEventHandler","GlobalHandlers","_installFunc","_installGlobalOnErrorHandler","_installGlobalOnUnhandledRejectionHandler","stackTraceLimit","installFunc","ERROR_TYPES_RE","groups","_enhanceEventWithInitialFrame","_eventFromIncompleteOnError","addMechanismAndCapture","ev","ev0","ev0s","ev0sf","getHubAndAttachStacktrace","LinkedErrors","_limit","linkedErrors","_walkErrorTree","_handler","Dedupe","currentEvent","previousEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","_isSameMessageEvent","previousException","_getExceptionFromEvent","currentException","_isSameExceptionEvent","_previousEvent","currentFrames","_getFramesFromEvent","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","UserAgent","referrer","Referer","CoreIntegrations","window_1","SENTRY_RELEASE","autoSessionTracking","clientClass","debug","initialScope","initAndBind","startSessionOnHub","startSessionTracking","startSession","TRACEPARENT_REGEXP","bindReporter","metric","reportAllChanges","forceReport","delta","initMetric","observe","PerformanceObserver","supportedEntryTypes","po","getEntries","buffered","onHidden","onHiddenOrPageHide","firstHiddenTime","getVisibilityWatcher","timeStamp","reportedMetricIDs","_reportAllChanges","_performanceCursor","_trackCLS","_trackLCP","_trackFID","MetricsInstrumentation","responseStartTimestamp","requestStartTimestamp","startTime","entryType","addPerformanceNavigationTiming","_startChild","requestStart","responseEnd","responseStart","addRequest","addNavigationSpans","measureStartTimestamp","measureEndTimestamp","addMeasureSpans","firstHidden","shouldRecord","resourceName","initiatorType","transferSize","encodedBodySize","decodedBodySize","addResourceSpans","_trackNavigator","timeOrigin_1","measurementTimestamp","normalizedValue","cls","setMeasurements","lcpEntry","clsEntry","sources","tagMetricInfo","_lcpEntry","_clsEntry","connection","isMeasurementValue","rtt","downlink","deviceMemory","hardwareConcurrency","onReport","report","sessionValue","sessionEntries","entryHandler","hadRecentInput","firstSessionEntry","lastSessionEntry","takeRecords","getCLS","visibilityWatcher","stopListening_1","disconnect","capture","getLCP","processingStart","getFID","eventEnd","isFinite","defaultRequestInstrumentationOptions","traceFetch","traceXHR","tracingOrigins","instrumentOutgoingRequests","shouldCreateSpanForRequest","urlMap","defaultShouldCreateSpan","origins","shouldCreateSpan","__span","setHttpStatus","append","fetchCallback","__sentry_xhr_span_id__","xhrCallback","DEFAULT_BROWSER_TRACING_OPTIONS","markBackgroundTransactions","maxTransactionDuration","routingInstrumentation","customStartTransaction","startTransactionOnPageLoad","startTransactionOnLocationChange","startingUrl","BrowserTracing","_configuredIdleTimeout","_emitOptionsWarning","_metricOptions","_metrics","_getCurrentHub","instrumentRouting","_createRouteTransaction","statusType","beforeNavigate","parentContextFromHeader","metaName","getMetaContent","traceparent","extractTraceparentData","getHeaderContext","expandedContext","modifiedContext","finalContext","idleTransaction","registerBeforeFinishCallback","addPerformanceEntries","maxDuration","adjustTransactionDuration","onPerfEntry","getFCP","getTTFB","cx","Container","UserType","Title","getPublicToken","post","remember","authResponse","getPublicTokenForHybrid","hybrid","getBaseApiUrl","getRegistrationInfo","public_id","authorName","staff","firstname","lastname","consent","custom","fields","manufacturers","link","survey_type","getDietanamnezInfo","getQueryVariable","variable","vars","pair","saveRegistrationData","publicId","patient","custom_sexint_save","allergies","dietanamnez","dietanamnezItems","self_registration_id","categoryId","listId","view","generatePDFFromTemplate","transformElementsListForLite","___parent","custom_наименование","custom_light","custom_used_in_pro","custom_для_сортировки","custom_ед_изм","custom_источники","custom_влияние","c105a902t28r12493202","c105a902t28r12493207","c105a902t28r12523083","c105a902t28r12497601","c105a902t28r12497603","c105a902t28r12523027","c105a902t28r12520074","c105a902t28r3582","c105a902t28r3583","c105a902t28r2038901","c105a902t28r228","c105a902t28r2038895","c105a902t28r2038909","c105a902t28r2038913","c105a902t28r231","c105a902t28r233","c105a902t28r11374694","insertCss","sendStartButtonMetric","sendFactpitStartButtonMetric","getDietanamnezData","chemistry","custom_профиль_потребления_веществ","элемент_состава","среднее_за_день","parseItems","subitems","parsedSubitems","norm","custom_коридор_спк","find","элемент","normMin","от","normMax","до","influence","parseSelftestData","ration","related","relatedItem","rationItems","supplements","supplementsComposition","printSelf","logos","copyright","extraHtml","appointment","isSuplementVisible","runPrint","isSuplementVisiable","custom_email","custom_login","custom_patientkey","custom_исходник","custom_фио_пациента","custom_ио","printLiteDepersonalized","parsedData","runLiteDepersonalizedPrint","blob","getContactToken","ContactArea","Remember","ret","getDietanamnez","dietanamnezKey","custom_фио_специалиста","custom_специфические_виды_питания","custom_тип_да","custom_количество","custom_блюдо","custom_частота_употребления","custom_добавить_исключить","updateDietanamnez","put","addDietanamnezItem","updateDietanamnezItem","removeDietanamnezItem","finishDietanamnez","userType","PRO","custom_дата_назначения","da","send_mail","StateManagerContext","useStateManager","LITE","tokenRegistration","tokenDietanamnez","isInitial","setIsInitial","isLoading","setIsLoading","selftestData","setSelftestData","setBlob","dietanamnezChartItems","setDietanamnezChartItems","parsedSelftestData","setParsedSelftestData","useLocalStorage","screen","setScreen","removeScreen","schemeData","setSchemeData","removeSchemeData","setIsError","linkInfo","setLinkInfo","handleStart","custom_генерировать_бад_рацион_при_саморегистрации","custom_не_запоминать_текущий_экран","isEpharmacy","notUseStorage","showDeficit","custom_показывать_экран_выявлен_дефицит_потребления","custom_additional_data","css","isShowAllergensScreen","custom_показывать_экран_аллергии","screens","defaultScreens","getScreensEpharmacy","PatientQueryParams","custom_firstname","custom_midname","custom_lastname","custom_дата_рождения","custom_телефон","custom_адрес","setPatient","removePatient","allergens","setAllergens","removeAllergens","setDietanamnez","removeDietanamnez","registrationData","setRegistrationData","removeRegistrationData","setDietanamnezItems","removeDietanamnezItems","setStep","removeStep","onNextScreen","currentSavedIndex","nextScreen","report_title_page_logo","report_footer_copyright","custom_дополнительный_текст_отчета","custom_формированть_в_да_назначение_к_врачам","custom_заключение_направление_к_врачам","isHybridUser","reportType","selfregistration_report_type","parsedValues","dietanamnezData","report_is_supliment_visible","postMessage","selftest_status","scrollTo","progress","updatePatient","setDietanamnezItem","withoutCurrent","onPrevScreen","useRegistartion","setToken","contactarea","da_key","userName","io","logo","custom_data","logo_welcome_size","logo_final_size","replacement_footer_copyright","addDietanamnezItemHandler","itemKey","currentItem","useDietanamnez","DefaultIcon","logo_short","width","logo_success_registration_size","ScreenInfo","icon","IconDotLoader","Button","block","rounded","ComponentName","isLoadingState","setIsLoadingState","handleClick","button_loading","button_disabled","button_block","button_rounded","excluded","sourceKeys","sourceSymbolKeys","SvgWelcomeRation","svgRef","titleId","fillRule","clipRule","SvgWelcomeSchedule","SvgWelcomeAbort","SvgWelcomeTrust","SvgWelcomeTime","DietanamnezType","userLabels","shortName","dietanamnezLabels","LONG","products","SHORT","WelcomeCarousel","dietanamnezType","carouselType","slide","setSlide","welcomeSlides","registrySlides","slides","transform","dotButton_active","labelByType","DIETANAMNEZ","REGISTRATION","Welcome","valueOf","marginBottom","display","onSubmit","Footer","logo_small","REACT_APP_API","getFullYear","titleByType","textByType","InvalidLink","classnames","ProgressBar","SvgArrowSmallL","Screen","onBack","onForward","justifyContent","shortProduct","isInvalid","buttonTitle","Agreement","__html","charCodeOfDot","reEscapeChar","rePropName","keysCache","toPath","expression","quote","subString","stringToPath","getIn","complexKey","_toPropertyKey","prim","toPrimitive","_toPrimitive","setInRecursor","destroyArrays","_extends2","_result2","_result","numKeys","numericKey","_result3","_array","setIn","FORM_ERROR","ARRAY_ERROR","publishFieldState","formState","field","initialValues","lastSubmittedValues","submitErrors","submitFailed","submitSucceeded","submitting","blur","change","modified","modifiedSinceLastSubmit","touched","validating","visited","submitError","initial","pristine","isEqual","dirty","dirtySinceLastSubmit","invalid","fieldSubscriptionItems","shallowEqual","keysA","keysB","bHasOwnProperty","idx","subscriptionFilter","dest","subscription","shallowEqualKeys","different","shallowEqualKeys$1","filterFieldState","previousState","force","formSubscriptionItems","filterFormState","lastArgs","lastResult","_len","isPromise","tripleEquals","hasAnyError","notifySubscriber","subscriber","lastState","notification","notified","createForm","destroyOnUnregister","keepDirtyOnReinitialize","mutators","validate","validateOnBlur","subscribers","fieldSubscribers","asyncErrors","resetWhileSubmitting","lastFormState","inBatch","validationPaused","validationBlocked","preventNotificationWhileValidationPaused","nextAsyncValidationKey","asyncValidationPromises","changeValue","after","renameField","_extends3","lastFieldState","getMutatorApi","mutatableState","returnValue","resetFieldState","runValidation","notifyFieldListeners","notifyFormListeners","mutatorsApi","getValidators","fieldChanged","safeFields","fieldKeys","limitedFieldLevelValidation","changedField","validateFields","recordLevelErrors","asyncRecordLevelErrors","fieldLevelErrors","setErrors","errorsOrPromise","runRecordLevelValidation","wasAsync","setError","errorOrPromise","runFieldLevelValidation","hasAsyncValidations","asyncValidationPromiseKey","processErrors","afterAsync","forEachError","recordLevelError","errorFromParent","hasFieldLevelValidation","fieldLevelError","existing","copy","afterPromise","notifyField","fieldState","fieldSubscriber","markAllFieldsTouched","calculateNextFormState","safeFieldKeys","foundDirty","dirtyFields","dirtyFieldsSinceLastSubmit","nonNullLastSubmittedValues","nextFormState","hasSubmitErrors","hasValidationErrors","convertToExternalFormState","_safeFieldKeys$reduce","notifying","scheduleNotification","resetModifiedAfterSubmit","batch","getFieldState","getRegisteredFields","getState","initialize","savedDirtyValues","isValidationPaused","pauseValidation","preventNotification","registerField","fieldConfig","afterSubmit","beforeSubmit","haveValidator","silent","getValidator","noValueInFormState","validatorRemoved","hasFieldSubscribers","lastOne","restart","resumeValidation","setConfig","submit","asyncValidationPromisesKeys","completeCalled","memoized","_excluded$3","renderComponent","lazyProps","useWhenValueChanges","React__default","candidate","stopPropagation","ReactFinalFormContext","useLatest","addLazyState","addLazyFormState","_excluded$2","versions","all$1","ReactFinalForm","_ref$decorators","decorators","alternateFormApi","form","initialValuesEqual","_ref$subscription","useConstant","_React$useState","unsubscriptions","decorator","unsubscribe","renderProps","eventOrValues","handleSubmit","__versions","useForm","isReactNative","useConstantCallback","defaultFormat","defaultParse","defaultIsEqual","useField","_config","allowNull","_config$format","formatOnBlur","_config$parse","_config$subscription","register","_configRef$current","_configRef$current$fo","firstRender","meta","addLazyFieldMetaState","currentValue","valueProp","_detypedEvent$target","getSelectedValues","getValue","CATEGORIES","_excluded","Field","input_filled","InputDate","InputPhone","field_filled","Radio","RadioGroup","SvgChevronRight","strokeLinejoin","SvgChevronLeft","SvgSearchSmall","Smoking","MobileSelect","isOpen","setIsOpen","searchValue","setSearchValue","searchOptions","extraOptions","fullOptions","header_searchable","searchable","autoFocus","FormField","AnthropometryFields","isChild","useSWR","ACTIVITY_SPORT","sport","ACTIVITY_LIFE","life","custom_описание","custom_есть_вопрос_о_курении_в_саморегистрации","YES","NO","START_OFFSET","PageLoader","offset","setOffset","animationIteration","diffTime","diffOffset","newOffset","strokeDashoffset","cy","strokeDasharray","REQUIRED","isValidBirthDate","date","getDate","getMonth","createValidation","isCustom","isRequiredPhone","isRequiredEmail","epharmacyFormValidator","radioGroupSex","calculateAge","birthDay","birthMonth","birthYear","getIsChild","dateString","Registration","setIsChild","birthdayDate","setBirthdayDate","custom_обязательность_телефон","custom_обязательность_эл_почта","COUNTRY","dataCountries","CITY","dataCities","custom_масса_тела","custom_рост","validateOnMount","smoking","formValues","illness","custom_болезни","isChildEntered","custom_жизненная_активность","custom_спортивная_автивность","custom_детская_жизненная_активность","hasCustomCities","custom_города","custom_страна","custom_страны","custom_название","cities","custom_название_поля_эл_почта","formValidator","Anthropometry","SvgCheckboxCheck","Checkbox","SvgCrossSmall","SearchBox","onRemoveItem","minSearchLength","setIsFocused","setSelected","handleSearchChange","handleClose","visibleOptions","exclude","withoutAdded","fuse","fuzzyFilterOptions","container_focused","Allergens","INGREDIENTS","ingredients","custom_ингредиенты_аллергены","custom_текст_поиска","group","RegistrationSuccess","initialDietanamnezType","Loader","isVisible","setIsVisible","KindsFood","Dietanamnez","SvgInfo","FrequencyList","activeKey","isSkipStepLoading","setSkipStepLoading","frequency","custom_частота","phases","Tutorial","onHide","FREQUENCY","frequencies","setActiveKey","phase","setPhase","nextPhase","findIndex","newPhase","scrollLeft","flexDirection","alignItems","DietanamnezTileForm","unitLabel","portions","tutorialWasShown","setPlaceholder","changePlaceholder","frequencyItem","portionDropdown_active","portion","styles","DietanamnezTile","tile","errorMessage","setErrorMessage","custom_картинка_с_порциями_url","placeholderImage","WelcomeBack","getVisibleItems","specificMap","custom_формат","custom_версия_приложения","custom_специфические_исключения","getVisibleTiles","tiles","getTilesGroups","groupKey","DietanamnezTiles","setTutorialWasShown","allTiles","allPortions","stateManager","dietanamnezItem","custom_мера","handleForward","errorMessageTimer","isInvalidDietanamnez","getEnd","totalValue","getAFlow","getBFlow","getCFlow","HEIGHT","DiagramChartRect","x","sumValue","DiagramChart","isTotalInRange","preserveAspectRatio","vectorEffect","totalAtPrev","totalAtCurrent","prevItemEnd","DeficitModal","percent","Modal","ReactDOM","innerWidth","maxHeight","getElementById","DeficitItem","isOpenModal","setIsOpenModal","closeModal","getConfig","getPercent","Deficit","tabs","dietanamnezChartItem","groupItemsAmount","setActive","openTab","dataset","tab","isActive","ScreenMiratorg","miratorgData","additional_text","button_url","button_lable","saveOrPrintBlob","file","FileSaver","click","Product","showProducts","rationItem","supplement","custom_бад","image","custom_картинка_url","units","custom_лекарственная_форма","custom_объем_упаковки","ceil","custom_порций","custom_курс","paddingBottom","custom_ссылка","renderItem","Supplement","SUPPLEMENT","allSupplements","manufacturer","custom_производитель","custom_макс_доз_в_день","userLabel","Finish","tooltip","setTooltip","ClipboardJS","invitationText","replacement1","tooltip_error","tooltip_visible","Root","custom_показывать_экран_рекомендуемая_продукция","final_screen_additional_content","screensList","ERROR","WELCOME","REGISTRATION_SUCCESS","DIETANAMNEZ_TILES","DEFICIT","PRODUCT","ALLERGENS","AGREEMENT","ANTHROPOMETRY","FINISH","REACT_APP_VERSION","REACT_APP_SENTRY_DSN","Integrations","browserInit","reportWebVitals"],"sourceRoot":""}