@envive-ai/react-hooks 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +2 -0
- package/README.md +2 -0
- package/dist/GridInsertionService-CEYo9pGj.js +22 -0
- package/dist/GridInsertionService-CS_bnPh0.cjs +28 -0
- package/dist/bandolier-Ble8jEa8.js +1221 -0
- package/dist/bandolier-Bm2xAt_j.cjs +1221 -0
- package/dist/carpe-Da7b-LCW.cjs +599 -0
- package/dist/carpe-W13mhRRP.js +597 -0
- package/dist/cdnService-CZ-aXcY6.cjs +23 -0
- package/dist/cdnService-zQfKk3Eb.js +18 -0
- package/dist/chatElementDisplayLocation-CX8fuNao.d.cts +239 -0
- package/dist/chatElementDisplayLocation-CwptS9tx.d.ts +239 -0
- package/dist/chunk-CUT6urMc.cjs +30 -0
- package/dist/contexts/index.cjs +13 -0
- package/dist/contexts/index.d.cts +65 -0
- package/dist/contexts/index.d.ts +66 -0
- package/dist/contexts/index.js +7 -0
- package/dist/contexts-BRjfVq_k.js +5064 -0
- package/dist/contexts-BYArqZtK.cjs +5164 -0
- package/dist/coterie-3y0D9ko4.cjs +229 -0
- package/dist/coterie-DOWcJAYv.js +229 -0
- package/dist/custservice-types-CFIFwZ-r.js +10 -0
- package/dist/custservice-types-CkfxZiHY.cjs +16 -0
- package/dist/default-C2fEZKXk.js +175 -0
- package/dist/default-CBUq6Q6G.cjs +4 -0
- package/dist/default-CGIFZK6m.js +4 -0
- package/dist/default-D_KPZdPJ.cjs +198 -0
- package/dist/divIds-Bss-btao.js +49 -0
- package/dist/divIds-DnZNd7rA.cjs +223 -0
- package/dist/dreamlandBaby-DCIsuU9R.cjs +338 -0
- package/dist/dreamlandBaby-DvSaZGrz.js +338 -0
- package/dist/entrypoints-D_JUvkgy.cjs +18 -0
- package/dist/entrypoints-YLQsbBRD.js +6 -0
- package/dist/enviveConfigContext-CUGLpPGU.js +34 -0
- package/dist/enviveConfigContext-Dfr2VH6u.cjs +48 -0
- package/dist/fiveCbd-B1SESMCO.js +605 -0
- package/dist/fiveCbd-CkOlVby_.cjs +605 -0
- package/dist/forLoveAndLemons-CfYPMnKS.cjs +660 -0
- package/dist/forLoveAndLemons-DmwYZIk0.js +658 -0
- package/dist/greenpan-Bsl3ir59.cjs +389 -0
- package/dist/greenpan-BtOi45lf.js +389 -0
- package/dist/grooveLife-6_dtYsRk.js +334 -0
- package/dist/grooveLife-Cmm1PSCL.cjs +334 -0
- package/dist/homegrownCannabis-C-kw-74X.js +400 -0
- package/dist/homegrownCannabis-CO0uY_mp.cjs +400 -0
- package/dist/hooks/index.cjs +16 -0
- package/dist/hooks/index.d.cts +357 -0
- package/dist/hooks/index.d.ts +357 -0
- package/dist/hooks/index.js +7 -0
- package/dist/jackArcher-CLVmwwpI.js +719 -0
- package/dist/jackArcher-DdYTIzAV.cjs +719 -0
- package/dist/jordanCraig-Am-Oor-O.js +1778 -0
- package/dist/jordanCraig-_u3-w4Hp.cjs +1778 -0
- package/dist/kindredBravely-CWovIDSc.cjs +482 -0
- package/dist/kindredBravely-eWp-ud_E.js +482 -0
- package/dist/kutFromTheKloth-BMV4BuGQ.js +361 -0
- package/dist/kutFromTheKloth-Q589bAOC.cjs +361 -0
- package/dist/larryAndSerges-BMUlTgI-.js +252 -0
- package/dist/larryAndSerges-CEau764j.cjs +252 -0
- package/dist/leapsAndRebounds-DGMzPO7T.js +352 -0
- package/dist/leapsAndRebounds-DHAtRTJD.cjs +352 -0
- package/dist/logger-Dln20ans.cjs +25 -0
- package/dist/logger-pdEEY8T2.js +19 -0
- package/dist/longevityrx-CZW8Hxzi.cjs +312 -0
- package/dist/longevityrx-jH2JLhNH.js +312 -0
- package/dist/lookOptic-BGXP5P_V.js +274 -0
- package/dist/lookOptic-CA6RwLbG.cjs +274 -0
- package/dist/mantraBrand-Cm9_PBCT.js +742 -0
- package/dist/mantraBrand-DByNqpnL.cjs +742 -0
- package/dist/medterra-B0wxj_PV.js +575 -0
- package/dist/medterra-DnPN2ksU.cjs +575 -0
- package/dist/modells-Bmz8Ag5M.js +476 -0
- package/dist/modells-CoYgkLSp.cjs +476 -0
- package/dist/models-DHdb7QWn.js +51 -0
- package/dist/models-ixxUsGL_.cjs +69 -0
- package/dist/pressedFloral-DSKs_oVG.js +653 -0
- package/dist/pressedFloral-DjBiSoUl.cjs +653 -0
- package/dist/skinPerfection-B_3xzVNS.cjs +326 -0
- package/dist/skinPerfection-IDrBuAPt.js +326 -0
- package/dist/snapSupplements-BJk5T5ba.js +277 -0
- package/dist/snapSupplements-BStTsdOZ.cjs +277 -0
- package/dist/socialProofClasses-Bhv2Vulz.js +9 -0
- package/dist/socialProofClasses-CrQBWdSA.cjs +39 -0
- package/dist/spanx-BYg0LE7R.js +653 -0
- package/dist/spanx-LwU1zSzq.cjs +655 -0
- package/dist/spanxStaging-CfSmuKYB.js +837 -0
- package/dist/spanxStaging-OZLV9qix.cjs +840 -0
- package/dist/suggestionBarV2-types-BllzwsBD.js +34 -0
- package/dist/suggestionBarV2-types-CaovchMP.cjs +46 -0
- package/dist/supergoop-BqPXDnKk.cjs +327 -0
- package/dist/supergoop-CIlrHND_.js +325 -0
- package/dist/types-C4T5UOIW.cjs +230 -0
- package/dist/types-CYNvLeSA.js +176 -0
- package/dist/uniqueVintage-B30mOqbH.cjs +1205 -0
- package/dist/uniqueVintage-CFueJOhO.js +1203 -0
- package/dist/venaCbd-DHGZy49P.cjs +357 -0
- package/dist/venaCbd-T0CqVD4k.js +357 -0
- package/dist/westonJonBoucher-BdMzs_Yg.cjs +414 -0
- package/dist/westonJonBoucher-b4TCQ4ev.js +414 -0
- package/dist/wineEnthusiast-BLGlOjgr.cjs +932 -0
- package/dist/wineEnthusiast-BqR0i_54.js +932 -0
- package/dist/wolfMattress-CyyO-LoC.js +362 -0
- package/dist/wolfMattress-DNGZOivg.cjs +362 -0
- package/dist/wolfTactical-3Mm2fvVF.js +341 -0
- package/dist/wolfTactical-BmXYlFjr.cjs +341 -0
- package/package.json +66 -0
- package/src/adapters/amplitude/amplitudeAdapter.ts +454 -0
- package/src/adapters/amplitude/index.ts +2 -0
- package/src/adapters/amplitude/stubAmplitudeAdapter.ts +34 -0
- package/src/adapters/spiffy/commerce/api.ts +596 -0
- package/src/adapters/spiffy/commerce/exceptions/sessionExceptions.ts +6 -0
- package/src/adapters/spiffy/commerce/exceptions/unsupportedProductExceptions.ts +6 -0
- package/src/adapters/spiffy/commerce/graphql.ts +184 -0
- package/src/application/config/generalStaticConfig.ts +37 -0
- package/src/application/logging/logger.ts +29 -0
- package/src/application/models/api/context.ts +4 -0
- package/src/application/models/api/generationParams.ts +4 -0
- package/src/application/models/api/nextMessageRequest.ts +11 -0
- package/src/application/models/api/orgAnalyticsConfig.ts +19 -0
- package/src/application/models/api/orgConfigResults.ts +40 -0
- package/src/application/models/api/organizationConfig.ts +12 -0
- package/src/application/models/api/response.ts +132 -0
- package/src/application/models/api/responseGenerics.ts +67 -0
- package/src/application/models/api/search.ts +26 -0
- package/src/application/models/api/suggestion.ts +4 -0
- package/src/application/models/api/supportedEventRequest.ts +8 -0
- package/src/application/models/api/userEvent.ts +101 -0
- package/src/application/models/cachedValue.ts +8 -0
- package/src/application/models/chatElementDisplayLocation.ts +22 -0
- package/src/application/models/clientDetails.ts +18 -0
- package/src/application/models/colorsConfig.ts +28 -0
- package/src/application/models/conversationalSearchIds.ts +5 -0
- package/src/application/models/dataLayer.ts +45 -0
- package/src/application/models/domMutationContinuation.ts +7 -0
- package/src/application/models/domObservationStrategy.ts +9 -0
- package/src/application/models/events.ts +5 -0
- package/src/application/models/featureGates.ts +23 -0
- package/src/application/models/frontendConfig.ts +14 -0
- package/src/application/models/googleAnalyticsEvents.ts +8 -0
- package/src/application/models/graphql/index.ts +2 -0
- package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +37 -0
- package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +103 -0
- package/src/application/models/graphql/queries/getMerchantOrgIdQuery.ts +11 -0
- package/src/application/models/guards/api/index.ts +12 -0
- package/src/application/models/guards/api/isApiFormResponse.ts +90 -0
- package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +37 -0
- package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +155 -0
- package/src/application/models/guards/api/isApiOrgConfigResults.ts +277 -0
- package/src/application/models/guards/api/isApiOrganizationConfig.ts +207 -0
- package/src/application/models/guards/api/isApiPDPEventAttributes.ts +21 -0
- package/src/application/models/guards/api/isApiPLPEventAttributes.ts +41 -0
- package/src/application/models/guards/api/isApiPageResponseAttributes.ts +21 -0
- package/src/application/models/guards/api/isApiProductResponseAttributes.ts +85 -0
- package/src/application/models/guards/api/isApiProductSearchAttributes.ts +23 -0
- package/src/application/models/guards/api/isApiProductSearchFilterAttributes.ts +15 -0
- package/src/application/models/guards/api/isApiQueryTypedEventAttributes.ts +4 -0
- package/src/application/models/guards/api/isApiResponse.ts +39 -0
- package/src/application/models/guards/api/isApiReviewResponseAttributes.ts +30 -0
- package/src/application/models/guards/api/isApiReviewRichInformation.ts +37 -0
- package/src/application/models/guards/api/isApiSearchEventAttributes.ts +28 -0
- package/src/application/models/guards/api/isApiSuggestion.ts +36 -0
- package/src/application/models/guards/api/isApiSuggestionClickedEventAttributes.ts +9 -0
- package/src/application/models/guards/api/isApiTextResponseAttributes.ts +9 -0
- package/src/application/models/guards/api/isApiUserEvent.ts +25 -0
- package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +50 -0
- package/src/application/models/guards/isBaseEcommerceEvent.ts +17 -0
- package/src/application/models/guards/isGA4EcommerceEvent.ts +17 -0
- package/src/application/models/guards/isLegacyUAEcommerceEvent.ts +17 -0
- package/src/application/models/guards/isMobilePLPChatPlacementParameter.ts +11 -0
- package/src/application/models/guards/isSpanxTakeAQuizCtaParameter.ts +4 -0
- package/src/application/models/guards/isVariantInfo.ts +37 -0
- package/src/application/models/guards/utils.ts +43 -0
- package/src/application/models/index.ts +20 -0
- package/src/application/models/localStorageEventListener.ts +4 -0
- package/src/application/models/message.ts +146 -0
- package/src/application/models/mobilePLPChatPlacementParameter.ts +3 -0
- package/src/application/models/orgsEnum.ts +36 -0
- package/src/application/models/productExperiment.ts +5 -0
- package/src/application/models/spanxTakeAQuizCtaParameter.ts +4 -0
- package/src/application/models/spiffyWidgets.ts +16 -0
- package/src/application/models/supportedOrgs.ts +137 -0
- package/src/application/models/utilityTypes/camelCase.ts +87 -0
- package/src/application/models/utilityTypes/camelCasedPropertiesDeep.ts +80 -0
- package/src/application/models/utilityTypes/delimiterCase.ts +121 -0
- package/src/application/models/utilityTypes/delimiterCasedPropertiesDeep.ts +98 -0
- package/src/application/models/utilityTypes/index.ts +1 -0
- package/src/application/models/utilityTypes/internal.ts +93 -0
- package/src/application/models/utilityTypes/primitive.ts +8 -0
- package/src/application/models/utilityTypes/snakeCasedPropertiesDeep.ts +49 -0
- package/src/application/models/utilityTypes/splitWords.ts +76 -0
- package/src/application/models/utilityTypes/trim.ts +28 -0
- package/src/application/models/utilityTypes/unknownArray.ts +25 -0
- package/src/application/models/utils/snakeToCamelTransformer.ts +90 -0
- package/src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.ts +68 -0
- package/src/application/models/validators/validateGraphQLColorsConfig.ts +29 -0
- package/src/application/models/validators/validateGraphQLFrontendConfig.ts +594 -0
- package/src/application/models/validators/validateGraphQLOrgId.ts +7 -0
- package/src/application/models/validators/validateMobilePLPChatPlacementParameter.ts +14 -0
- package/src/application/models/validators/validateOrgConfigResults.ts +47 -0
- package/src/application/models/validators/validateOrganizationConfig.ts +37 -0
- package/src/application/models/validators/validateResponse.ts +187 -0
- package/src/application/models/validators/validateSuggestion.ts +16 -0
- package/src/application/models/validators/validateUserEvent.ts +110 -0
- package/src/application/models/variantInfo/index.ts +1 -0
- package/src/application/models/variantInfo/pageVisitInfo.ts +6 -0
- package/src/application/models/variantInfo/plpInfo.ts +3 -0
- package/src/application/models/variantInfo/productInfo.ts +5 -0
- package/src/application/models/variantInfo/variantInfo.ts +23 -0
- package/src/application/service/cachingService.ts +84 -0
- package/src/application/service/cdnService.ts +18 -0
- package/src/application/service/customerService/index.ts +8 -0
- package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +15 -0
- package/src/application/service/customerService/types.ts +31 -0
- package/src/application/service/domMutationObserver.ts +320 -0
- package/src/application/service/domMutations/GridInsertionService.ts +123 -0
- package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +99 -0
- package/src/application/service/domMutations/domInsertionService.ts +90 -0
- package/src/application/service/domMutations/domMutationListener.ts +15 -0
- package/src/application/service/domMutations/domMutationListenerState.ts +52 -0
- package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +41 -0
- package/src/application/service/domMutations/gladly/gladlyListener.ts +61 -0
- package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +41 -0
- package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +119 -0
- package/src/application/service/environmentService.ts +51 -0
- package/src/application/service/featureFlagService.ts +130 -0
- package/src/application/service/kustomerIntegrationService.ts +111 -0
- package/src/application/service/localStorageService.ts +77 -0
- package/src/application/service/pageVariantService.ts +779 -0
- package/src/application/service/searchService.ts +140 -0
- package/src/application/service/sessionStorageService.ts +27 -0
- package/src/application/service/shopifyUrlService.ts +63 -0
- package/src/application/service/userIdentityService.ts +114 -0
- package/src/application/service/windowChatToggleService.ts +71 -0
- package/src/application/service/windowDataLayerService.ts +181 -0
- package/src/application/service/windowFrontendConfigService.ts +104 -0
- package/src/application/utils/__tests__/divideArrays.test.ts +14 -0
- package/src/application/utils/analyticsUtils.ts +110 -0
- package/src/application/utils/coreContextToApiContext.ts +11 -0
- package/src/application/utils/coreUserEventToApiUserEvent.ts +106 -0
- package/src/application/utils/divideArray.ts +7 -0
- package/src/application/utils/domObserver.ts +96 -0
- package/src/application/utils/elementObserver.ts +246 -0
- package/src/application/utils/imageFilter.ts +12 -0
- package/src/application/utils/index.ts +3 -0
- package/src/application/utils/merchantUtils.ts +16 -0
- package/src/application/utils/messageFromFormSubmittedEvent.ts +31 -0
- package/src/application/utils/messageFromQueryEvent.ts +38 -0
- package/src/application/utils/messageFromResponse.ts +133 -0
- package/src/application/utils/messageFromSuggestionEvent.ts +32 -0
- package/src/application/utils/mouseEventTypes.ts +1 -0
- package/src/application/utils/mutationHelper.ts +51 -0
- package/src/application/utils/nextMessageRequestToApiRequest.ts +31 -0
- package/src/application/utils/nodeSelector.ts +133 -0
- package/src/application/utils/overrides.ts +196 -0
- package/src/application/utils/stringUtils.ts +55 -0
- package/src/application/utils/supportedEventRequestToApiRequest.ts +12 -0
- package/src/application/utils/urlsParser.ts +53 -0
- package/src/application/utils/validation.ts +5 -0
- package/src/atoms/app/index.ts +57 -0
- package/src/atoms/app/variant.ts +261 -0
- package/src/atoms/atomStore.ts +34 -0
- package/src/atoms/chat/chatState.ts +44 -0
- package/src/atoms/chat/form.ts +19 -0
- package/src/atoms/chat/index.ts +38 -0
- package/src/atoms/chat/lastMessage.ts +11 -0
- package/src/atoms/chat/messageQueue.ts +65 -0
- package/src/atoms/chat/performanceMetrics.ts +84 -0
- package/src/atoms/chat/renderedWidgetRefs.ts +28 -0
- package/src/atoms/chat/replies.ts +51 -0
- package/src/atoms/chat/suggestions.ts +36 -0
- package/src/atoms/globalSearch.ts +12 -0
- package/src/atoms/index.ts +5 -0
- package/src/atoms/org/customerService.ts +13 -0
- package/src/atoms/org/graphqlConfig.ts +27 -0
- package/src/atoms/org/index.ts +7 -0
- package/src/atoms/org/merchantCss.ts +44 -0
- package/src/atoms/org/org.ts +256 -0
- package/src/atoms/org/orgAnalyticsConfig.ts +28 -0
- package/src/atoms/org/orgPageConfig.ts +38 -0
- package/src/atoms/org/orgUIConfig.ts +122 -0
- package/src/atoms/search/chatSearch.ts +293 -0
- package/src/atoms/search/index.ts +2 -0
- package/src/atoms/search/productFilters.ts +207 -0
- package/src/atoms/search/productSorter.ts +23 -0
- package/src/atoms/search/searchAPI.ts +194 -0
- package/src/atoms/search/types.ts +55 -0
- package/src/atoms/search/utils.ts +18 -0
- package/src/config/divIds.ts +27 -0
- package/src/config/locators/components/chat/entrypoints.ts +13 -0
- package/src/config/locators/components/chat/index.ts +23 -0
- package/src/config/locators/components/chat/preview.ts +13 -0
- package/src/config/locators/components/chat/variants/index.ts +16 -0
- package/src/config/locators/components/common/buttons.ts +6 -0
- package/src/config/locators/components/common/cards.ts +18 -0
- package/src/config/locators/components/common/links.ts +1 -0
- package/src/config/locators/components/common/tables.ts +2 -0
- package/src/config/locators/components/floating-button.ts +2 -0
- package/src/config/locators/components/index.ts +3 -0
- package/src/config/locators/components/report-issue.ts +21 -0
- package/src/config/locators/components/search/index.ts +5 -0
- package/src/config/locators/components/shadow-dom.ts +1 -0
- package/src/config/locators/embedded.ts +21 -0
- package/src/config/locators/index.ts +3 -0
- package/src/config/socialProofClasses.ts +17 -0
- package/src/contexts/chatContext.tsx +451 -0
- package/src/contexts/enviveConfigContext.tsx +70 -0
- package/src/contexts/index.ts +4 -0
- package/src/contexts/systemSettingsContext.tsx +61 -0
- package/src/contexts/types.ts +1059 -0
- package/src/enabled-features.ts +83 -0
- package/src/events/event-types.ts +11 -0
- package/src/events/index.ts +52 -0
- package/src/events/registerAnalyticsListeners.ts +49 -0
- package/src/extension.ts +63 -0
- package/src/hooks/index.ts +22 -0
- package/src/hooks/useBlockBackButton.ts +29 -0
- package/src/hooks/useChatToggle.ts +66 -0
- package/src/hooks/useCustomerSupportHandoff.ts +39 -0
- package/src/hooks/useDebounce.ts +17 -0
- package/src/hooks/useDynamicVariants.ts +210 -0
- package/src/hooks/useElementObserver.ts +245 -0
- package/src/hooks/useFileUpload.ts +61 -0
- package/src/hooks/useGrabAndScroll.ts +133 -0
- package/src/hooks/useHideElements.ts +82 -0
- package/src/hooks/useHorizontalScrollAnimation.ts +115 -0
- package/src/hooks/useImageResolver.ts +51 -0
- package/src/hooks/useIntersection.ts +28 -0
- package/src/hooks/useIsSmallScreen.ts +23 -0
- package/src/hooks/useMessageFilter.ts +49 -0
- package/src/hooks/useMessageScrollObserver.ts +47 -0
- package/src/hooks/useReducedMotionWithOverride.ts +15 -0
- package/src/hooks/useSearch.tsx +433 -0
- package/src/hooks/useSnapCalculator.ts +38 -0
- package/src/hooks/useSnapControl.ts +155 -0
- package/src/hooks/useSystemSettingsContext.ts +12 -0
- package/src/hooks/useTrackComponentVisibleEvent.ts +52 -0
- package/src/hooks/useUpdateAnalyticsProps.ts +56 -0
- package/src/hooks/utils.ts +153 -0
- package/src/index.ts +31 -0
- package/src/initialize.ts +163 -0
- package/src/interceptors/types.ts +6 -0
- package/src/interceptors/useFormEscalation.ts +40 -0
- package/src/interceptors/useMessageInterceptor.ts +32 -0
- package/src/main.ts +85 -0
- package/src/main.tsx +123 -0
- package/src/merchants/bandolier/bandolier.ts +1389 -0
- package/src/merchants/carpe/carpe.ts +656 -0
- package/src/merchants/coterie/coterie.ts +280 -0
- package/src/merchants/default.ts +193 -0
- package/src/merchants/dreamlandBaby/dreamlandBaby.ts +375 -0
- package/src/merchants/fiveCbd/fiveCbd.ts +697 -0
- package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +721 -0
- package/src/merchants/greenpan/greenpan.ts +440 -0
- package/src/merchants/grooveLife/grooveLife.ts +386 -0
- package/src/merchants/homegrownCannabis/homegrownCannabis.ts +468 -0
- package/src/merchants/init-merchant.sh +53 -0
- package/src/merchants/jackArcher/jackArcher.ts +974 -0
- package/src/merchants/jordanCraig/jordanCraig.ts +1927 -0
- package/src/merchants/kindredBravely/kindredBravely.ts +529 -0
- package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +418 -0
- package/src/merchants/larryAndSerges/larryAndSerges.ts +314 -0
- package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +424 -0
- package/src/merchants/longevityrx/longevityrx.ts +368 -0
- package/src/merchants/lookOptic/lookOptic.ts +323 -0
- package/src/merchants/mantraBrand/mantraBrand.ts +838 -0
- package/src/merchants/medterra/medterra.ts +670 -0
- package/src/merchants/modells/modells.ts +546 -0
- package/src/merchants/pressedFloral/pressedFloral.ts +734 -0
- package/src/merchants/skinPerfection/skinPerfection.ts +379 -0
- package/src/merchants/snapSupplements/snapSupplements.ts +325 -0
- package/src/merchants/spanx/spanx.ts +810 -0
- package/src/merchants/spanx/spanxStaging.ts +942 -0
- package/src/merchants/supergoop/supergoop.ts +376 -0
- package/src/merchants/uniqueVintage/uniqueVintage.ts +1314 -0
- package/src/merchants/uniqueVintage/views/useUniqueVintageChatSearch.ts +147 -0
- package/src/merchants/venaCbd/venaCbd.ts +410 -0
- package/src/merchants/westonJonBoucher/westonJonBoucher.ts +473 -0
- package/src/merchants/wineEnthusiast/wineEnthusiast.ts +990 -0
- package/src/merchants/wolfMattress/wolfMattress.ts +411 -0
- package/src/merchants/wolfTactical/wolfTactical.ts +389 -0
- package/src/types/custservice-types.ts +28 -0
- package/src/types/search-filter-types.ts +111 -0
- package/src/types/suggestionBarV2-types.ts +4 -0
- package/src/types/test-types.ts +3 -0
- package/src/types.ts +66 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { OrgShortName } from 'src/application/models/orgsEnum';
|
|
2
|
+
import { ColorMapping, OrgPageConfig, OrgUIConfig } from 'src/contexts/types';
|
|
3
|
+
|
|
4
|
+
export { OrgShortName } from './orgsEnum';
|
|
5
|
+
|
|
6
|
+
export type BasicOrgInfoType = {
|
|
7
|
+
shortName: string;
|
|
8
|
+
name: string;
|
|
9
|
+
domain: string;
|
|
10
|
+
defaultProductId: string;
|
|
11
|
+
alwaysEnabledMerchants: boolean;
|
|
12
|
+
orgUIConfig: () => OrgUIConfig | undefined;
|
|
13
|
+
orgPageConfig: () => OrgPageConfig;
|
|
14
|
+
orgColors: () => ColorMapping | {};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const getOrgInfo = async (orgShortName: string): Promise<BasicOrgInfoType> => {
|
|
18
|
+
switch (orgShortName) {
|
|
19
|
+
case OrgShortName.Bandolier:
|
|
20
|
+
return import('src/merchants/bandolier/bandolier').then((module) => module.bandolierOrgInfo);
|
|
21
|
+
case OrgShortName.Carpe:
|
|
22
|
+
return import('src/merchants/carpe/carpe').then((module) => module.carpeOrgInfo);
|
|
23
|
+
case OrgShortName.Coterie:
|
|
24
|
+
return import('src/merchants/coterie/coterie').then((module) => module.coterieOrgInfo);
|
|
25
|
+
case OrgShortName.DreamlandBaby:
|
|
26
|
+
return import('src/merchants/dreamlandBaby/dreamlandBaby').then(
|
|
27
|
+
(module) => module.dreamlandBabyOrgInfo,
|
|
28
|
+
);
|
|
29
|
+
case OrgShortName.ForLoveAndLemons:
|
|
30
|
+
return import('src/merchants/forLoveAndLemons/forLoveAndLemons').then(
|
|
31
|
+
(module) => module.forLoveAndLemonsOrgInfo,
|
|
32
|
+
);
|
|
33
|
+
case OrgShortName.Greenpan:
|
|
34
|
+
return import('src/merchants/greenpan/greenpan').then((module) => module.greenpanOrgInfo);
|
|
35
|
+
case OrgShortName.GrooveLife:
|
|
36
|
+
return import('src/merchants/grooveLife/grooveLife').then(
|
|
37
|
+
(module) => module.grooveLifeOrgInfo,
|
|
38
|
+
);
|
|
39
|
+
case OrgShortName.JackArcher:
|
|
40
|
+
return import('src/merchants/jackArcher/jackArcher').then(
|
|
41
|
+
(module) => module.jackArcherOrgInfo,
|
|
42
|
+
);
|
|
43
|
+
case OrgShortName.JordanCraig:
|
|
44
|
+
return import('src/merchants/jordanCraig/jordanCraig').then(
|
|
45
|
+
(module) => module.jordanCraigOrgInfo,
|
|
46
|
+
);
|
|
47
|
+
case OrgShortName.KutFromTheKloth:
|
|
48
|
+
return import('src/merchants/kutFromTheKloth/kutFromTheKloth').then(
|
|
49
|
+
(module) => module.kutFromTheKlothOrgInfo,
|
|
50
|
+
);
|
|
51
|
+
case OrgShortName.LarryAndSerges:
|
|
52
|
+
return import('src/merchants/larryAndSerges/larryAndSerges').then(
|
|
53
|
+
(module) => module.larryAndSergesOrgInfo,
|
|
54
|
+
);
|
|
55
|
+
case OrgShortName.LeapsAndRebounds:
|
|
56
|
+
return import('src/merchants/leapsAndRebounds/leapsAndRebounds').then(
|
|
57
|
+
(module) => module.leapsAndReboundsOrgInfo,
|
|
58
|
+
);
|
|
59
|
+
case OrgShortName.MantraBrand:
|
|
60
|
+
return import('src/merchants/mantraBrand/mantraBrand').then(
|
|
61
|
+
(module) => module.mantraBrandOrgInfo,
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// ---- SPANX ----
|
|
65
|
+
case OrgShortName.Spanx:
|
|
66
|
+
return import('src/merchants/spanx/spanx').then((module) => module.spanxOrgInfo);
|
|
67
|
+
// Spanx staging (headless shopify)
|
|
68
|
+
case OrgShortName.SpanxStaging:
|
|
69
|
+
return import('src/merchants/spanx/spanxStaging').then((module) => module.spanxOrgInfo);
|
|
70
|
+
// ---------------
|
|
71
|
+
|
|
72
|
+
case OrgShortName.Supergoop:
|
|
73
|
+
return import('src/merchants/supergoop/supergoop').then((module) => module.supergoopOrgInfo);
|
|
74
|
+
case OrgShortName.UniqueVintage:
|
|
75
|
+
return import('src/merchants/uniqueVintage/uniqueVintage').then(
|
|
76
|
+
(module) => module.uniqueVintageOrgInfo,
|
|
77
|
+
);
|
|
78
|
+
case OrgShortName.WestonJonBoucher:
|
|
79
|
+
return import('src/merchants/westonJonBoucher/westonJonBoucher').then(
|
|
80
|
+
(module) => module.westonJonBoucherOrgInfo,
|
|
81
|
+
);
|
|
82
|
+
case OrgShortName.WolfMattress:
|
|
83
|
+
return import('src/merchants/wolfMattress/wolfMattress').then(
|
|
84
|
+
(module) => module.wolfMattressOrgInfo,
|
|
85
|
+
);
|
|
86
|
+
case OrgShortName.WolfTactical:
|
|
87
|
+
return import('src/merchants/wolfTactical/wolfTactical').then(
|
|
88
|
+
(module) => module.wolfTacticalOrgInfo,
|
|
89
|
+
);
|
|
90
|
+
/* -- Below items are generated by plop -- */
|
|
91
|
+
case OrgShortName.SkinPerfection:
|
|
92
|
+
return import('src/merchants/skinPerfection/skinPerfection').then(
|
|
93
|
+
(module) => module.skinPerfectionOrgInfo,
|
|
94
|
+
);
|
|
95
|
+
case OrgShortName.LookOptic:
|
|
96
|
+
return import('src/merchants/lookOptic/lookOptic').then(
|
|
97
|
+
(module) => module.lookOpticOrgInfo,
|
|
98
|
+
);
|
|
99
|
+
case OrgShortName.FiveCbd:
|
|
100
|
+
return import('src/merchants/fiveCbd/fiveCbd').then(
|
|
101
|
+
(module) => module.fiveCbdOrgInfo,
|
|
102
|
+
);
|
|
103
|
+
case OrgShortName.SnapSupplements:
|
|
104
|
+
return import('src/merchants/snapSupplements/snapSupplements').then(
|
|
105
|
+
(module) => module.snapSupplementsOrgInfo,
|
|
106
|
+
);
|
|
107
|
+
case OrgShortName.Longevityrx:
|
|
108
|
+
return import('src/merchants/longevityrx/longevityrx').then(
|
|
109
|
+
(module) => module.longevityrxOrgInfo,
|
|
110
|
+
);
|
|
111
|
+
case OrgShortName.VenaCbd:
|
|
112
|
+
return import('src/merchants/venaCbd/venaCbd').then((module) => module.venaCbdOrgInfo);
|
|
113
|
+
case OrgShortName.Medterra:
|
|
114
|
+
return import('src/merchants/medterra/medterra').then((module) => module.medterraOrgInfo);
|
|
115
|
+
|
|
116
|
+
case OrgShortName.Modells:
|
|
117
|
+
return import('src/merchants/modells/modells').then((module) => module.modellsOrgInfo);
|
|
118
|
+
case OrgShortName.PressedFloral:
|
|
119
|
+
return import('src/merchants/pressedFloral/pressedFloral').then(
|
|
120
|
+
(module) => module.pressedFloralOrgInfo,
|
|
121
|
+
);
|
|
122
|
+
case OrgShortName.KindredBravely:
|
|
123
|
+
return import('src/merchants/kindredBravely/kindredBravely').then(
|
|
124
|
+
(module) => module.kindredBravelyOrgInfo,
|
|
125
|
+
);
|
|
126
|
+
case OrgShortName.WineEnthusiast:
|
|
127
|
+
return import('src/merchants/wineEnthusiast/wineEnthusiast').then(
|
|
128
|
+
(module) => module.wineEnthusiastOrgInfo,
|
|
129
|
+
);
|
|
130
|
+
case OrgShortName.HomegrownCannabis:
|
|
131
|
+
return import('src/merchants/homegrownCannabis/homegrownCannabis').then(
|
|
132
|
+
(module) => module.homegrownCannabisOrgInfo,
|
|
133
|
+
);
|
|
134
|
+
default:
|
|
135
|
+
return import('src/merchants/default').then((module) => module.defaultOrgInfo);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// these types come from https://github.com/sindresorhus/type-fest/blob/main/source/camel-case.d.ts
|
|
2
|
+
|
|
3
|
+
import { SplitWords } from './splitWords';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* CamelCase options.
|
|
7
|
+
*
|
|
8
|
+
* @see {@link CamelCase}
|
|
9
|
+
*/
|
|
10
|
+
export type CamelCaseOptions = {
|
|
11
|
+
/**
|
|
12
|
+
* Whether to preserved consecutive uppercase letter.
|
|
13
|
+
*
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
16
|
+
preserveConsecutiveUppercase?: boolean;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Convert an array of words to camel-case.
|
|
21
|
+
*/
|
|
22
|
+
type CamelCaseFromArray<
|
|
23
|
+
Words extends string[],
|
|
24
|
+
Options extends CamelCaseOptions,
|
|
25
|
+
OutputString extends string = '',
|
|
26
|
+
> = Words extends [infer FirstWord extends string, ...infer RemainingWords extends string[]]
|
|
27
|
+
? Options['preserveConsecutiveUppercase'] extends true
|
|
28
|
+
? `${Capitalize<FirstWord>}${CamelCaseFromArray<RemainingWords, Options>}`
|
|
29
|
+
: `${Capitalize<Lowercase<FirstWord>>}${CamelCaseFromArray<RemainingWords, Options>}`
|
|
30
|
+
: OutputString;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Convert a string literal to camel-case.
|
|
34
|
+
*
|
|
35
|
+
* This can be useful when, for example, converting some kebab-cased command-line flags or a snake-cased database result.
|
|
36
|
+
*
|
|
37
|
+
* By default, consecutive uppercase letter are preserved. See {@link CamelCaseOptions.preserveConsecutiveUppercase preserveConsecutiveUppercase} option to change this behaviour.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```
|
|
41
|
+
* import type {CamelCase} from 'type-fest';
|
|
42
|
+
*
|
|
43
|
+
* // Simple
|
|
44
|
+
*
|
|
45
|
+
* const someVariable: CamelCase<'foo-bar'> = 'fooBar';
|
|
46
|
+
*
|
|
47
|
+
* // Advanced
|
|
48
|
+
*
|
|
49
|
+
* type CamelCasedProperties<T> = {
|
|
50
|
+
* [K in keyof T as CamelCase<K>]: T[K]
|
|
51
|
+
* };
|
|
52
|
+
*
|
|
53
|
+
* interface RawOptions {
|
|
54
|
+
* 'dry-run': boolean;
|
|
55
|
+
* 'full_family_name': string;
|
|
56
|
+
* foo: number;
|
|
57
|
+
* BAR: string;
|
|
58
|
+
* QUZ_QUX: number;
|
|
59
|
+
* 'OTHER-FIELD': boolean;
|
|
60
|
+
* }
|
|
61
|
+
*
|
|
62
|
+
* const dbResult: CamelCasedProperties<RawOptions> = {
|
|
63
|
+
* dryRun: true,
|
|
64
|
+
* fullFamilyName: 'bar.js',
|
|
65
|
+
* foo: 123,
|
|
66
|
+
* bar: 'foo',
|
|
67
|
+
* quzQux: 6,
|
|
68
|
+
* otherField: false
|
|
69
|
+
* };
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* @category Change case
|
|
73
|
+
* @category Template literal
|
|
74
|
+
*/
|
|
75
|
+
export type CamelCase<
|
|
76
|
+
Type,
|
|
77
|
+
Options extends CamelCaseOptions = { preserveConsecutiveUppercase: true },
|
|
78
|
+
> = Type extends string
|
|
79
|
+
? string extends Type
|
|
80
|
+
? Type
|
|
81
|
+
: Uncapitalize<
|
|
82
|
+
CamelCaseFromArray<
|
|
83
|
+
SplitWords<Type extends Uppercase<Type> ? Lowercase<Type> : Type>,
|
|
84
|
+
Options
|
|
85
|
+
>
|
|
86
|
+
>
|
|
87
|
+
: Type;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { CamelCase, CamelCaseOptions } from './camelCase';
|
|
2
|
+
import { UnknownArray } from './unknownArray';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Convert object properties to camel case recursively.
|
|
6
|
+
*
|
|
7
|
+
* This can be useful when, for example, converting some API types from a different style.
|
|
8
|
+
*
|
|
9
|
+
* @see CamelCasedProperties
|
|
10
|
+
* @see CamelCase
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```
|
|
14
|
+
* import type {CamelCasedPropertiesDeep} from 'type-fest';
|
|
15
|
+
*
|
|
16
|
+
* interface User {
|
|
17
|
+
* UserId: number;
|
|
18
|
+
* UserName: string;
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* interface UserWithFriends {
|
|
22
|
+
* UserInfo: User;
|
|
23
|
+
* UserFriends: User[];
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* const result: CamelCasedPropertiesDeep<UserWithFriends> = {
|
|
27
|
+
* userInfo: {
|
|
28
|
+
* userId: 1,
|
|
29
|
+
* userName: 'Tom',
|
|
30
|
+
* },
|
|
31
|
+
* userFriends: [
|
|
32
|
+
* {
|
|
33
|
+
* userId: 2,
|
|
34
|
+
* userName: 'Jerry',
|
|
35
|
+
* },
|
|
36
|
+
* {
|
|
37
|
+
* userId: 3,
|
|
38
|
+
* userName: 'Spike',
|
|
39
|
+
* },
|
|
40
|
+
* ],
|
|
41
|
+
* };
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @category Change case
|
|
45
|
+
* @category Template literal
|
|
46
|
+
* @category Object
|
|
47
|
+
*/
|
|
48
|
+
export type CamelCasedPropertiesDeep<
|
|
49
|
+
Value,
|
|
50
|
+
Options extends CamelCaseOptions = { preserveConsecutiveUppercase: true },
|
|
51
|
+
> = Value extends Function
|
|
52
|
+
? Value
|
|
53
|
+
: Value extends UnknownArray
|
|
54
|
+
? CamelCasedPropertiesArrayDeep<Value>
|
|
55
|
+
: Value extends Set<infer U>
|
|
56
|
+
? Set<CamelCasedPropertiesDeep<U, Options>>
|
|
57
|
+
: {
|
|
58
|
+
[K in keyof Value as CamelCase<K, Options>]: CamelCasedPropertiesDeep<Value[K], Options>;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// This is a copy of DelimiterCasedPropertiesArrayDeep (see: delimiter-cased-properties-deep.d.ts).
|
|
62
|
+
// These types should be kept in sync.
|
|
63
|
+
type CamelCasedPropertiesArrayDeep<Value extends UnknownArray> = Value extends []
|
|
64
|
+
? []
|
|
65
|
+
: // Tailing spread array
|
|
66
|
+
Value extends [infer U, ...infer V]
|
|
67
|
+
? [CamelCasedPropertiesDeep<U>, ...CamelCasedPropertiesDeep<V>]
|
|
68
|
+
: Value extends readonly [infer U, ...infer V]
|
|
69
|
+
? readonly [CamelCasedPropertiesDeep<U>, ...CamelCasedPropertiesDeep<V>]
|
|
70
|
+
: // Leading spread array
|
|
71
|
+
Value extends readonly [...infer U, infer V]
|
|
72
|
+
? [...CamelCasedPropertiesDeep<U>, CamelCasedPropertiesDeep<V>]
|
|
73
|
+
: Value extends readonly [...infer U, infer V]
|
|
74
|
+
? readonly [...CamelCasedPropertiesDeep<U>, CamelCasedPropertiesDeep<V>]
|
|
75
|
+
: // Array
|
|
76
|
+
Value extends Array<infer U>
|
|
77
|
+
? Array<CamelCasedPropertiesDeep<U>>
|
|
78
|
+
: Value extends ReadonlyArray<infer U>
|
|
79
|
+
? ReadonlyArray<CamelCasedPropertiesDeep<U>>
|
|
80
|
+
: never;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// these types come from https://github.com/sindresorhus/type-fest/blob/main/source/delimiter-case.d.ts
|
|
2
|
+
|
|
3
|
+
import type { UpperCaseCharacters, WordSeparators } from './internal';
|
|
4
|
+
|
|
5
|
+
// Transforms a string that is fully uppercase into a fully lowercase version. Needed to add support for SCREAMING_SNAKE_CASE, see https://github.com/sindresorhus/type-fest/issues/385
|
|
6
|
+
type UpperCaseToLowerCase<T extends string> = T extends Uppercase<T> ? Lowercase<T> : T;
|
|
7
|
+
|
|
8
|
+
// This implementation does not support SCREAMING_SNAKE_CASE, it is used internally by `SplitIncludingDelimiters`.
|
|
9
|
+
type SplitIncludingDelimiters_<Source extends string, Delimiter extends string> = Source extends ''
|
|
10
|
+
? []
|
|
11
|
+
: Source extends `${infer FirstPart}${Delimiter}${infer SecondPart}`
|
|
12
|
+
? Source extends `${FirstPart}${infer UsedDelimiter}${SecondPart}`
|
|
13
|
+
? UsedDelimiter extends Delimiter
|
|
14
|
+
? Source extends `${infer FirstPart}${UsedDelimiter}${infer SecondPart}`
|
|
15
|
+
? [
|
|
16
|
+
...SplitIncludingDelimiters<FirstPart, Delimiter>,
|
|
17
|
+
UsedDelimiter,
|
|
18
|
+
...SplitIncludingDelimiters<SecondPart, Delimiter>,
|
|
19
|
+
]
|
|
20
|
+
: never
|
|
21
|
+
: never
|
|
22
|
+
: never
|
|
23
|
+
: [Source];
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Unlike a simpler split, this one includes the delimiter splitted on in the resulting array literal. This is to enable splitting on, for example, upper-case characters.
|
|
27
|
+
*
|
|
28
|
+
* @category Template literal
|
|
29
|
+
*/
|
|
30
|
+
export type SplitIncludingDelimiters<
|
|
31
|
+
Source extends string,
|
|
32
|
+
Delimiter extends string,
|
|
33
|
+
> = SplitIncludingDelimiters_<UpperCaseToLowerCase<Source>, Delimiter>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
*Format a specific part of the splitted string literal that `StringArrayToDelimiterCase<>` fuses together, ensuring desired casing.
|
|
37
|
+
*
|
|
38
|
+
*@see StringArrayToDelimiterCase
|
|
39
|
+
*/
|
|
40
|
+
type StringPartToDelimiterCase<
|
|
41
|
+
StringPart extends string,
|
|
42
|
+
Start extends boolean,
|
|
43
|
+
UsedWordSeparators extends string,
|
|
44
|
+
UsedUpperCaseCharacters extends string,
|
|
45
|
+
Delimiter extends string,
|
|
46
|
+
> = StringPart extends UsedWordSeparators
|
|
47
|
+
? Delimiter
|
|
48
|
+
: Start extends true
|
|
49
|
+
? Lowercase<StringPart>
|
|
50
|
+
: StringPart extends UsedUpperCaseCharacters
|
|
51
|
+
? `${Delimiter}${Lowercase<StringPart>}`
|
|
52
|
+
: StringPart;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Takes the result of a splitted string literal and recursively concatenates it together into the desired casing.
|
|
56
|
+
*
|
|
57
|
+
* It receives `UsedWordSeparators` and `UsedUpperCaseCharacters` as input to ensure it's fully encapsulated.
|
|
58
|
+
*
|
|
59
|
+
* @see SplitIncludingDelimiters
|
|
60
|
+
*/
|
|
61
|
+
type StringArrayToDelimiterCase<
|
|
62
|
+
Parts extends readonly any[],
|
|
63
|
+
Start extends boolean,
|
|
64
|
+
UsedWordSeparators extends string,
|
|
65
|
+
UsedUpperCaseCharacters extends string,
|
|
66
|
+
Delimiter extends string,
|
|
67
|
+
> = Parts extends [`${infer FirstPart}`, ...infer RemainingParts]
|
|
68
|
+
? `${StringPartToDelimiterCase<FirstPart, Start, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}${StringArrayToDelimiterCase<RemainingParts, false, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}`
|
|
69
|
+
: Parts extends [string]
|
|
70
|
+
? string
|
|
71
|
+
: '';
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Convert a string literal to a custom string delimiter casing.
|
|
75
|
+
*
|
|
76
|
+
* This can be useful when, for example, converting a camel-cased object property to an oddly cased one.
|
|
77
|
+
*
|
|
78
|
+
* @see KebabCase
|
|
79
|
+
* @see SnakeCase
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```
|
|
83
|
+
* import type {DelimiterCase} from 'type-fest';
|
|
84
|
+
*
|
|
85
|
+
* // Simple
|
|
86
|
+
*
|
|
87
|
+
* const someVariable: DelimiterCase<'fooBar', '#'> = 'foo#bar';
|
|
88
|
+
*
|
|
89
|
+
* // Advanced
|
|
90
|
+
*
|
|
91
|
+
* type OddlyCasedProperties<T> = {
|
|
92
|
+
* [K in keyof T as DelimiterCase<K, '#'>]: T[K]
|
|
93
|
+
* };
|
|
94
|
+
*
|
|
95
|
+
* interface SomeOptions {
|
|
96
|
+
* dryRun: boolean;
|
|
97
|
+
* includeFile: string;
|
|
98
|
+
* foo: number;
|
|
99
|
+
* }
|
|
100
|
+
*
|
|
101
|
+
* const rawCliOptions: OddlyCasedProperties<SomeOptions> = {
|
|
102
|
+
* 'dry#run': true,
|
|
103
|
+
* 'include#file': 'bar.js',
|
|
104
|
+
* foo: 123
|
|
105
|
+
* };
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* @category Change case
|
|
109
|
+
* @category Template literal
|
|
110
|
+
*/
|
|
111
|
+
export type DelimiterCase<Value, Delimiter extends string> = string extends Value
|
|
112
|
+
? Value
|
|
113
|
+
: Value extends string
|
|
114
|
+
? StringArrayToDelimiterCase<
|
|
115
|
+
SplitIncludingDelimiters<Value, WordSeparators | UpperCaseCharacters>,
|
|
116
|
+
true,
|
|
117
|
+
WordSeparators,
|
|
118
|
+
UpperCaseCharacters,
|
|
119
|
+
Delimiter
|
|
120
|
+
>
|
|
121
|
+
: Value;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// these types come from https://github.com/sindresorhus/type-fest/blob/main/source/delimiter-cased-properties-deep.d.ts
|
|
2
|
+
|
|
3
|
+
import type { DelimiterCase } from './delimiterCase';
|
|
4
|
+
import type { NonRecursiveType } from './internal';
|
|
5
|
+
import type { UnknownArray } from './unknownArray';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Convert object properties to delimiter case recursively.
|
|
9
|
+
*
|
|
10
|
+
* This can be useful when, for example, converting some API types from a different style.
|
|
11
|
+
*
|
|
12
|
+
* @see DelimiterCase
|
|
13
|
+
* @see DelimiterCasedProperties
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```
|
|
17
|
+
* import type {DelimiterCasedPropertiesDeep} from 'type-fest';
|
|
18
|
+
*
|
|
19
|
+
* interface User {
|
|
20
|
+
* userId: number;
|
|
21
|
+
* userName: string;
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* interface UserWithFriends {
|
|
25
|
+
* userInfo: User;
|
|
26
|
+
* userFriends: User[];
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* const result: DelimiterCasedPropertiesDeep<UserWithFriends, '-'> = {
|
|
30
|
+
* 'user-info': {
|
|
31
|
+
* 'user-id': 1,
|
|
32
|
+
* 'user-name': 'Tom',
|
|
33
|
+
* },
|
|
34
|
+
* 'user-friends': [
|
|
35
|
+
* {
|
|
36
|
+
* 'user-id': 2,
|
|
37
|
+
* 'user-name': 'Jerry',
|
|
38
|
+
* },
|
|
39
|
+
* {
|
|
40
|
+
* 'user-id': 3,
|
|
41
|
+
* 'user-name': 'Spike',
|
|
42
|
+
* },
|
|
43
|
+
* ],
|
|
44
|
+
* };
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @category Change case
|
|
48
|
+
* @category Template literal
|
|
49
|
+
* @category Object
|
|
50
|
+
*/
|
|
51
|
+
export type DelimiterCasedPropertiesDeep<
|
|
52
|
+
Value,
|
|
53
|
+
Delimiter extends string,
|
|
54
|
+
> = Value extends NonRecursiveType
|
|
55
|
+
? Value
|
|
56
|
+
: Value extends UnknownArray
|
|
57
|
+
? DelimiterCasedPropertiesArrayDeep<Value, Delimiter>
|
|
58
|
+
: Value extends Set<infer U>
|
|
59
|
+
? Set<DelimiterCasedPropertiesDeep<U, Delimiter>>
|
|
60
|
+
: {
|
|
61
|
+
[K in keyof Value as DelimiterCase<K, Delimiter>]: DelimiterCasedPropertiesDeep<
|
|
62
|
+
Value[K],
|
|
63
|
+
Delimiter
|
|
64
|
+
>;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// This is a copy of CamelCasedPropertiesArrayDeep (see: camel-cased-properties-deep.d.ts).
|
|
68
|
+
// These types should be kept in sync.
|
|
69
|
+
type DelimiterCasedPropertiesArrayDeep<
|
|
70
|
+
Value extends UnknownArray,
|
|
71
|
+
Delimiter extends string,
|
|
72
|
+
> = Value extends []
|
|
73
|
+
? []
|
|
74
|
+
: // Tailing spread array
|
|
75
|
+
Value extends [infer U, ...infer V]
|
|
76
|
+
? [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>]
|
|
77
|
+
: Value extends readonly [infer U, ...infer V]
|
|
78
|
+
? readonly [
|
|
79
|
+
DelimiterCasedPropertiesDeep<U, Delimiter>,
|
|
80
|
+
...DelimiterCasedPropertiesDeep<V, Delimiter>,
|
|
81
|
+
]
|
|
82
|
+
: // Leading spread array
|
|
83
|
+
Value extends readonly [...infer U, infer V]
|
|
84
|
+
? [
|
|
85
|
+
...DelimiterCasedPropertiesDeep<U, Delimiter>,
|
|
86
|
+
DelimiterCasedPropertiesDeep<V, Delimiter>,
|
|
87
|
+
]
|
|
88
|
+
: Value extends readonly [...infer U, infer V]
|
|
89
|
+
? readonly [
|
|
90
|
+
...DelimiterCasedPropertiesDeep<U, Delimiter>,
|
|
91
|
+
DelimiterCasedPropertiesDeep<V, Delimiter>,
|
|
92
|
+
]
|
|
93
|
+
: // Array
|
|
94
|
+
Value extends Array<infer U>
|
|
95
|
+
? Array<DelimiterCasedPropertiesDeep<U, Delimiter>>
|
|
96
|
+
: Value extends ReadonlyArray<infer U>
|
|
97
|
+
? ReadonlyArray<DelimiterCasedPropertiesDeep<U, Delimiter>>
|
|
98
|
+
: never;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './camelCasedPropertiesDeep';
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// these types come from https://github.com/sindresorhus/type-fest/blob/main/source/internal.d.ts
|
|
2
|
+
|
|
3
|
+
import { Primitive } from './primitive';
|
|
4
|
+
import { Trim } from './trim';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
8
|
+
*/
|
|
9
|
+
export type BuiltIns = Primitive | void | Date | RegExp;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Matches non-recursive types.
|
|
13
|
+
*/
|
|
14
|
+
export type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Returns a boolean for whether the string is numeric.
|
|
18
|
+
*
|
|
19
|
+
* This type is a workaround for [Microsoft/TypeScript#46109](https://github.com/microsoft/TypeScript/issues/46109#issuecomment-930307987).
|
|
20
|
+
*/
|
|
21
|
+
export type IsNumeric<T extends string> = T extends `${number}`
|
|
22
|
+
? Trim<T> extends T
|
|
23
|
+
? true
|
|
24
|
+
: false
|
|
25
|
+
: false;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns a boolean for whether the string is lowercased.
|
|
29
|
+
*/
|
|
30
|
+
export type IsLowerCase<T extends string> = T extends Lowercase<T> ? true : false;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Returns a boolean for whether the string is upper-cased.
|
|
34
|
+
*/
|
|
35
|
+
export type IsUpperCase<T extends string> = T extends Uppercase<T> ? true : false;
|
|
36
|
+
|
|
37
|
+
export type WordSeparators = '-' | '_' | Whitespace;
|
|
38
|
+
|
|
39
|
+
export type Whitespace =
|
|
40
|
+
| '\u{9}' // '\t'
|
|
41
|
+
| '\u{A}' // '\n'
|
|
42
|
+
| '\u{B}' // '\v'
|
|
43
|
+
| '\u{C}' // '\f'
|
|
44
|
+
| '\u{D}' // '\r'
|
|
45
|
+
| '\u{20}' // ' '
|
|
46
|
+
| '\u{85}'
|
|
47
|
+
| '\u{A0}'
|
|
48
|
+
| '\u{1680}'
|
|
49
|
+
| '\u{2000}'
|
|
50
|
+
| '\u{2001}'
|
|
51
|
+
| '\u{2002}'
|
|
52
|
+
| '\u{2003}'
|
|
53
|
+
| '\u{2004}'
|
|
54
|
+
| '\u{2005}'
|
|
55
|
+
| '\u{2006}'
|
|
56
|
+
| '\u{2007}'
|
|
57
|
+
| '\u{2008}'
|
|
58
|
+
| '\u{2009}'
|
|
59
|
+
| '\u{200A}'
|
|
60
|
+
| '\u{2028}'
|
|
61
|
+
| '\u{2029}'
|
|
62
|
+
| '\u{202F}'
|
|
63
|
+
| '\u{205F}'
|
|
64
|
+
| '\u{3000}'
|
|
65
|
+
| '\u{FEFF}';
|
|
66
|
+
|
|
67
|
+
export type UpperCaseCharacters =
|
|
68
|
+
| 'A'
|
|
69
|
+
| 'B'
|
|
70
|
+
| 'C'
|
|
71
|
+
| 'D'
|
|
72
|
+
| 'E'
|
|
73
|
+
| 'F'
|
|
74
|
+
| 'G'
|
|
75
|
+
| 'H'
|
|
76
|
+
| 'I'
|
|
77
|
+
| 'J'
|
|
78
|
+
| 'K'
|
|
79
|
+
| 'L'
|
|
80
|
+
| 'M'
|
|
81
|
+
| 'N'
|
|
82
|
+
| 'O'
|
|
83
|
+
| 'P'
|
|
84
|
+
| 'Q'
|
|
85
|
+
| 'R'
|
|
86
|
+
| 'S'
|
|
87
|
+
| 'T'
|
|
88
|
+
| 'U'
|
|
89
|
+
| 'V'
|
|
90
|
+
| 'W'
|
|
91
|
+
| 'X'
|
|
92
|
+
| 'Y'
|
|
93
|
+
| 'Z';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// this type comes from https://github.com/sindresorhus/type-fest/blob/main/source/primitive.d.ts
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
|
|
5
|
+
*
|
|
6
|
+
* @category Type
|
|
7
|
+
*/
|
|
8
|
+
export type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// these types come from https://github.com/sindresorhus/type-fest/blob/main/source/snake-cased-properties-deep.d.ts
|
|
2
|
+
|
|
3
|
+
import type { DelimiterCasedPropertiesDeep } from './delimiterCasedPropertiesDeep';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Convert object properties to snake case recursively.
|
|
7
|
+
*
|
|
8
|
+
* This can be useful when, for example, converting some API types from a different style.
|
|
9
|
+
*
|
|
10
|
+
* @see SnakeCase
|
|
11
|
+
* @see SnakeCasedProperties
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```
|
|
15
|
+
* import type {SnakeCasedPropertiesDeep} from 'type-fest';
|
|
16
|
+
*
|
|
17
|
+
* interface User {
|
|
18
|
+
* userId: number;
|
|
19
|
+
* userName: string;
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* interface UserWithFriends {
|
|
23
|
+
* userInfo: User;
|
|
24
|
+
* userFriends: User[];
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* const result: SnakeCasedPropertiesDeep<UserWithFriends> = {
|
|
28
|
+
* user_info: {
|
|
29
|
+
* user_id: 1,
|
|
30
|
+
* user_name: 'Tom',
|
|
31
|
+
* },
|
|
32
|
+
* user_friends: [
|
|
33
|
+
* {
|
|
34
|
+
* user_id: 2,
|
|
35
|
+
* user_name: 'Jerry',
|
|
36
|
+
* },
|
|
37
|
+
* {
|
|
38
|
+
* user_id: 3,
|
|
39
|
+
* user_name: 'Spike',
|
|
40
|
+
* },
|
|
41
|
+
* ],
|
|
42
|
+
* };
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @category Change case
|
|
46
|
+
* @category Template literal
|
|
47
|
+
* @category Object
|
|
48
|
+
*/
|
|
49
|
+
export type SnakeCasedPropertiesDeep<Value> = DelimiterCasedPropertiesDeep<Value, '_'>;
|