@dropins/tools 1.3.0-alpha16 → 1.3.0-beta2

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.
Files changed (38) hide show
  1. package/chunks/deviceUtils.js +12 -1
  2. package/chunks/deviceUtils.js.map +1 -1
  3. package/chunks/initializer.js +1 -2
  4. package/components.js +1 -1
  5. package/components.js.map +1 -1
  6. package/initializer.js +1 -2
  7. package/lib.js +1 -1
  8. package/lib.js.map +1 -1
  9. package/package.json +1 -1
  10. package/recaptcha.js +2 -2
  11. package/recaptcha.js.map +1 -1
  12. package/chunks/Image.js +0 -4
  13. package/chunks/Image.js.map +0 -1
  14. package/chunks/vcomponent.js +0 -15
  15. package/chunks/vcomponent.js.map +0 -1
  16. package/lib/aem/assets.d.ts +0 -1
  17. package/lib/aem/assets.js +0 -4
  18. package/lib/aem/assets.js.map +0 -1
  19. package/lib/aem/assets.test.d.ts +0 -1
  20. package/lib/aem/assets.test.js +0 -4
  21. package/lib/aem/assets.test.js.map +0 -1
  22. package/lib/aem/configs.test.d.ts +0 -1
  23. package/lib/aem/configs.test.js +0 -4
  24. package/lib/aem/configs.test.js.map +0 -1
  25. package/types/elsie/src/lib/aem/assets.d.ts +0 -44
  26. package/types/fetch-graphql/src/index.d.ts +0 -166
  27. package/types/recaptcha/src/configs/index.d.ts +0 -12
  28. package/types/recaptcha/src/configs/message.config.d.ts +0 -16
  29. package/types/recaptcha/src/configs/recaptchaBadgeSelector.config.d.ts +0 -10
  30. package/types/recaptcha/src/configs/typeForms.config.d.ts +0 -10
  31. package/types/recaptcha/src/graphql/recaptchaConfig.graphql.d.ts +0 -10
  32. package/types/recaptcha/src/index.d.ts +0 -44
  33. package/types/recaptcha/src/lib/_checkRecaptchaBadge.d.ts +0 -10
  34. package/types/recaptcha/src/lib/_convertKeysToCamelCase.d.ts +0 -14
  35. package/types/recaptcha/src/lib/_extendConfig.d.ts +0 -4
  36. package/types/recaptcha/src/lib/_storageConfig.d.ts +0 -6
  37. package/types/recaptcha/src/lib/index.d.ts +0 -13
  38. package/types/recaptcha/src/services/recaptcha.service.d.ts +0 -6
package/recaptcha.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"recaptcha.js","sources":["@dropins/tools/src/recaptcha/configs/message.config.ts","@dropins/tools/src/recaptcha/configs/typeForms.config.ts","@dropins/tools/src/recaptcha/configs/recaptchaBadgeSelector.config.ts","@dropins/tools/src/recaptcha/lib/_extendConfig.ts","@dropins/tools/src/recaptcha/lib/_storageConfig.ts","@dropins/tools/src/recaptcha/lib/_checkRecaptchaBadge.ts","@dropins/tools/src/recaptcha/lib/_convertKeysToCamelCase.ts","@dropins/tools/src/recaptcha/services/recaptcha.service.ts","@dropins/tools/src/recaptcha/graphql/recaptchaConfig.graphql.ts","@dropins/tools/src/recaptcha/index.ts"],"sourcesContent":["/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const recaptchaMessage = {\n failedFetch: 'Failed to fetch config from backend with status:',\n failedSetStorageConfig: 'Failed to set storage config',\n failedGetStorageConfig: 'Configuration could not be loaded.',\n failedExecutionRecaptcha: 'Recaptcha execution failed',\n failedInitializing: 'An error occurred while initializing ReCaptcha:',\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const typeDefaultForm: Record<string, string> = {\n PLACE_ORDER: 'placeOrder',\n CONTACT: 'contactUs',\n CUSTOMER_LOGIN: 'generateCustomerToken',\n CUSTOMER_FORGOT_PASSWORD: 'requestPasswordResetEmail',\n CUSTOMER_CREATE: 'createCustomerV2',\n CUSTOMER_EDIT: 'updateCustomerV2',\n NEWSLETTER: 'subscribeEmailToNewsletter',\n PRODUCT_REVIEW: 'createProductReview',\n SENDFRIEND: 'SENDFRIEND',\n BRAINTREE: 'BRAINTREE',\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const recaptchaBadgeSelector = '.grecaptcha-badge iframe';","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { ReCaptchaV3Model } from '../types/recaptcha.types';\nimport { typeDefaultForm } from '../configs/typeForms.config';\n\nexport const extendConfig = (\n config: ReCaptchaV3Model,\n modifyParams: any[]\n): ReCaptchaV3Model | undefined => {\n if (config && config.forms) {\n const modifyForm = config.forms.concat(modifyParams).map((el) => {\n if (typeof el !== 'string') return { ...el, enabledBadgePlace: false };\n\n return {\n badgeId: typeDefaultForm[el],\n enabledBadgePlace: false,\n };\n });\n\n return { ...config, forms: [...new Set(modifyForm)] };\n }\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { recaptchaMessage } from '../configs';\nimport { ReCaptchaV3Model } from '../types/recaptcha.types';\n\nconst getConfigStorage = async (\n storageKey: string,\n retries = 1,\n delay = 1000\n): Promise<ReCaptchaV3Model | null> => {\n const storedConfig = sessionStorage.getItem(storageKey);\n\n if (storedConfig !== null) {\n return JSON.parse(storedConfig);\n } else if (retries > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n return getConfigStorage(storageKey, retries - 1, delay);\n }\n\n return null;\n};\n\nconst setConfigStorage = (\n storageKey: string,\n config: ReCaptchaV3Model,\n logger: boolean\n) => {\n if (!storageKey || !config.websiteKey) return null;\n\n try {\n sessionStorage.setItem(storageKey, JSON.stringify(config));\n } catch (error) {\n logger && console.error(recaptchaMessage.failedSetStorageConfig, error);\n return null;\n }\n};\n\nexport { getConfigStorage, setConfigStorage };\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { recaptchaBadgeSelector } from '../configs';\n\nconst waitForElement = (selector: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n // Check if the element is already in the DOM\n if (document.querySelector(selector)) {\n resolve();\n return;\n }\n\n // Create an observer to watch for changes\n const observer = new MutationObserver(() => {\n if (document.querySelector(selector)) {\n resolve();\n observer.disconnect();\n }\n });\n\n // Start observing the body for child changes only\n observer.observe(document.body, {\n childList: true,\n subtree: false,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n\nexport const checkRecaptchaBadge = async (): Promise<boolean> => {\n try {\n await waitForElement(recaptchaBadgeSelector);\n return true;\n } catch (error) {\n return false;\n }\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const convertKeysToCamelCase = (obj: {\n [key: string]: any;\n}): { [key: string]: string | number | boolean } => {\n const camelCaseKey = (key: string): string => {\n return key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n };\n\n return Object.keys(obj).reduce((result, key) => {\n const newKey = camelCaseKey(key);\n result[newKey] = obj[key];\n return result;\n }, {} as { [key: string]: any });\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { recaptchaMessage } from '../configs';\nimport {\n MutationObserverInit,\n ReCaptchaV3Model,\n} from '../types/recaptcha.types';\nconst { failedExecutionRecaptcha } = recaptchaMessage;\n\nexport const getRecaptchaToken = async (\n websiteKey: string\n): Promise<string> => {\n if (!(window as any).grecaptcha) {\n return Promise.reject(failedExecutionRecaptcha);\n }\n\n try {\n const token = await window.grecaptcha.execute(websiteKey, {\n action: 'click',\n });\n\n return token;\n } catch (error) {\n return Promise.reject(`${failedExecutionRecaptcha} : ${error}`);\n }\n};\n\nexport const waitForReCaptcha = () => {\n return new Promise((resolve) => {\n const observer = new MutationObserver((_, obs) => {\n if (window.grecaptcha) {\n obs.disconnect();\n resolve(true);\n }\n });\n\n const observerOptions: MutationObserverInit = {\n childList: true,\n subtree: true,\n attributes: true,\n };\n\n observer.observe(document.body, observerOptions);\n });\n};\n\nexport const verifyReCaptchaLoad = async (\n badgeId: string,\n config: ReCaptchaV3Model,\n logger: boolean\n): Promise<void> => {\n if (!window.grecaptcha) {\n await waitForReCaptcha();\n }\n\n return grecaptcha.ready(() => {\n const badgeContainers = document.querySelectorAll(`#${badgeId}`);\n\n if (!badgeContainers.length) return;\n\n // Handle the case when multiple instances of the drop-in container rendered on the same page\n\n badgeContainers.forEach(\n (element) => (element.id = `${element.id}_${Math.random().toString(36)}`) // NOSONAR\n );\n\n badgeContainers.forEach((element) => {\n if (element.innerHTML === '') {\n try {\n grecaptcha.render(element.id, {\n sitekey: config.websiteKey as string,\n badge: config.badgePosition,\n size: 'invisible',\n theme: config.theme ?? 'light',\n });\n } catch (error) {\n logger && console.error(error);\n }\n }\n });\n });\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const RECAPTCHA_CONFIGURATION_V3 = `query {\n recaptchaV3Config {\n is_enabled\n website_key\n minimum_score\n badge_position\n language_code\n failure_message\n forms\n theme\n } \n}`;\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport {\n ReCaptchaV3Response,\n PropsFormTypes,\n ReCaptchaV3Model,\n} from './types/recaptcha.types';\nimport { recaptchaMessage, recaptchaBadgeSelector } from './configs';\nimport {\n extendConfig,\n setConfigStorage,\n getConfigStorage,\n checkRecaptchaBadge,\n convertKeysToCamelCase,\n} from './lib';\nimport {\n getRecaptchaToken,\n verifyReCaptchaLoad,\n} from './services/recaptcha.service';\nimport { RECAPTCHA_CONFIGURATION_V3 } from './graphql/recaptchaConfig.graphql';\n\nimport { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const recaptchaFetchApi = new FetchGraphQL().getMethods();\n\nexport class RecaptchaModule {\n _enableReCAPTCHA: boolean = false;\n _recaptchaBackendEndpoint: string =\n recaptchaFetchApi.getConfig()?.endpoint || '';\n _recaptchaScriptUrl: string = 'https://www.google.com/recaptcha/api.js';\n _configStorageKey: string = 'recaptchaConfig';\n _logger: boolean = false;\n\n async _updateBadgePosition(\n badgeId: string,\n config: ReCaptchaV3Model\n ): Promise<void | null> {\n if (!config) return;\n\n if (config?.badgePosition === 'inline') {\n await verifyReCaptchaLoad(badgeId, config, this._logger);\n } else {\n const isBadgeLoaded = await checkRecaptchaBadge();\n\n if (!isBadgeLoaded) return;\n\n const recaptchaBadge = document.querySelector(\n recaptchaBadgeSelector\n ) as HTMLIFrameElement;\n\n const shouldUpdateSrc =\n config.theme &&\n recaptchaBadge &&\n !recaptchaBadge.src.includes('theme=dark') &&\n !recaptchaBadge.src.includes('theme=light');\n\n if (shouldUpdateSrc) {\n recaptchaBadge.setAttribute(\n 'src',\n `${recaptchaBadge.src}&theme=${config.theme}`\n );\n }\n }\n }\n\n async _addRecaptchaScript(): Promise<void> {\n const config = await this._loadConfig();\n\n if (!document.getElementById('recaptchaId') && config) {\n const webApiKey = config.websiteKey;\n const isBadgeGlobal = config.badgePosition === 'inline';\n const languageCode = config.languageCode;\n\n if (!webApiKey) return;\n\n const script = document.createElement('script');\n script.setAttribute('id', 'recaptchaId');\n script.defer = true;\n script.src = isBadgeGlobal\n ? `${this._recaptchaScriptUrl}?render=${webApiKey}&badge=none&hl=${languageCode}`\n : `${this._recaptchaScriptUrl}?render=${webApiKey}&badge=${config.badgePosition}&hl=${languageCode}`;\n\n document.head.appendChild(script);\n }\n }\n\n async _fetchStoreConfig(): Promise<ReCaptchaV3Response | undefined> {\n try {\n const response = await recaptchaFetchApi.fetchGraphQl(\n RECAPTCHA_CONFIGURATION_V3,\n {\n method: 'GET',\n cache: 'force-cache',\n }\n );\n\n if (response?.errors?.length) {\n this._logger && console.error(response.errors[0].message);\n\n return;\n }\n\n return response;\n } catch (error) {\n this._logger && console.error(`${recaptchaMessage.failedFetch}:`, error);\n }\n }\n\n async _loadConfig(): Promise<ReCaptchaV3Model | null> {\n const config = await getConfigStorage(this._configStorageKey);\n\n if (!config) {\n this._logger && console.error(recaptchaMessage.failedGetStorageConfig);\n\n return null;\n }\n\n this._enableReCAPTCHA = !!config.isEnabled;\n\n return config;\n }\n\n setEndpoint(url: string) {\n if (!url) return;\n\n this._recaptchaBackendEndpoint = url;\n recaptchaFetchApi.setEndpoint(url);\n }\n\n async setConfig(configList: PropsFormTypes[]) {\n try {\n const config = await this._fetchStoreConfig();\n\n if (!config?.data?.recaptchaV3Config) {\n sessionStorage.removeItem(this._configStorageKey);\n return;\n }\n\n const transformConfig: ReCaptchaV3Model = convertKeysToCamelCase(\n config?.data?.recaptchaV3Config\n );\n\n const extendedRecaptchaConfig = extendConfig(transformConfig, configList);\n\n if (extendedRecaptchaConfig) {\n setConfigStorage(\n this._configStorageKey,\n extendedRecaptchaConfig,\n this._logger\n );\n }\n } catch (error) {\n this._logger &&\n console.error(recaptchaMessage.failedSetStorageConfig, error);\n\n sessionStorage.removeItem(this._configStorageKey);\n }\n }\n\n async initReCaptcha(lazyLoadTimeout = 3000) {\n // IIFE added to fix SonarQube error \"Promise returned in function argument where a void return was expected\"\n setTimeout(() => {\n (async () => {\n try {\n const config = await this._loadConfig();\n\n if (!config?.forms || !config.isEnabled) {\n return;\n }\n\n await this._addRecaptchaScript();\n\n if (config.badgePosition === 'inline') {\n await Promise.all(\n (config.forms as PropsFormTypes[]).map((element) =>\n this._updateBadgePosition(element.badgeId, config)\n )\n );\n } else {\n await this._updateBadgePosition('', config);\n }\n } catch (error) {\n this._logger &&\n console.error(recaptchaMessage.failedInitializing, error);\n }\n })();\n }, lazyLoadTimeout);\n }\n\n async verifyReCaptcha(): Promise<string | undefined> {\n try {\n const config = await this._loadConfig();\n\n if (!config?.forms || !config.websiteKey || !config.isEnabled) {\n return undefined;\n }\n\n return await getRecaptchaToken(config.websiteKey);\n } catch (error) {\n this._logger && console.error(error);\n }\n }\n\n enableLogger(logger: boolean) {\n this._logger = logger;\n }\n\n getMethods() {\n return {\n enableLogger: this.enableLogger.bind(this),\n setEndpoint: this.setEndpoint.bind(this),\n setConfig: this.setConfig.bind(this),\n initReCaptcha: this.initReCaptcha.bind(this),\n verifyReCaptcha: this.verifyReCaptcha.bind(this),\n };\n }\n}\n\nconst recaptcha = new RecaptchaModule();\n\nconst { initReCaptcha, verifyReCaptcha, setEndpoint, setConfig, enableLogger } =\n recaptcha.getMethods();\n\nexport { setEndpoint, setConfig, initReCaptcha, verifyReCaptcha, enableLogger };\n"],"names":["recaptchaMessage","typeDefaultForm","recaptchaBadgeSelector","extendConfig","config","modifyParams","modifyForm","el","getConfigStorage","storageKey","retries","delay","storedConfig","resolve","setConfigStorage","logger","error","waitForElement","selector","reject","observer","checkRecaptchaBadge","convertKeysToCamelCase","obj","camelCaseKey","key","_","letter","result","newKey","failedExecutionRecaptcha","getRecaptchaToken","websiteKey","waitForReCaptcha","obs","observerOptions","verifyReCaptchaLoad","badgeId","badgeContainers","element","RECAPTCHA_CONFIGURATION_V3","recaptchaFetchApi","FetchGraphQL","RecaptchaModule","_a","recaptchaBadge","webApiKey","isBadgeGlobal","languageCode","script","response","url","configList","transformConfig","_b","extendedRecaptchaConfig","lazyLoadTimeout","recaptcha","initReCaptcha","verifyReCaptcha","setEndpoint","setConfig","enableLogger"],"mappings":"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"}
1
+ {"version":3,"file":"recaptcha.js","sources":["@dropins/tools/src/recaptcha/configs/message.config.ts","@dropins/tools/src/recaptcha/configs/typeForms.config.ts","@dropins/tools/src/recaptcha/configs/recaptchaBadgeSelector.config.ts","@dropins/tools/src/recaptcha/lib/_extendConfig.ts","@dropins/tools/src/recaptcha/lib/_storageConfig.ts","@dropins/tools/src/recaptcha/lib/_checkRecaptchaBadge.ts","@dropins/tools/src/recaptcha/lib/_convertKeysToCamelCase.ts","@dropins/tools/src/recaptcha/services/recaptcha.service.ts","@dropins/tools/src/recaptcha/graphql/recaptchaConfig.graphql.ts","@dropins/tools/src/fetch-graphql/index.ts","@dropins/tools/src/recaptcha/index.ts"],"sourcesContent":["/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const recaptchaMessage = {\n failedFetch: 'Failed to fetch config from backend with status:',\n failedSetStorageConfig: 'Failed to set storage config',\n failedGetStorageConfig: 'Configuration could not be loaded.',\n failedExecutionRecaptcha: 'Recaptcha execution failed',\n failedInitializing: 'An error occurred while initializing ReCaptcha:',\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const typeDefaultForm: Record<string, string> = {\n PLACE_ORDER: 'placeOrder',\n CONTACT: 'contactUs',\n CUSTOMER_LOGIN: 'generateCustomerToken',\n CUSTOMER_FORGOT_PASSWORD: 'requestPasswordResetEmail',\n CUSTOMER_CREATE: 'createCustomerV2',\n CUSTOMER_EDIT: 'updateCustomerV2',\n NEWSLETTER: 'subscribeEmailToNewsletter',\n PRODUCT_REVIEW: 'createProductReview',\n SENDFRIEND: 'SENDFRIEND',\n BRAINTREE: 'BRAINTREE',\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const recaptchaBadgeSelector = '.grecaptcha-badge iframe';","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { ReCaptchaV3Model } from '../types/recaptcha.types';\nimport { typeDefaultForm } from '../configs/typeForms.config';\n\nexport const extendConfig = (\n config: ReCaptchaV3Model,\n modifyParams: any[]\n): ReCaptchaV3Model | undefined => {\n if (config && config.forms) {\n const modifyForm = config.forms.concat(modifyParams).map((el) => {\n if (typeof el !== 'string') return { ...el, enabledBadgePlace: false };\n\n return {\n badgeId: typeDefaultForm[el],\n enabledBadgePlace: false,\n };\n });\n\n return { ...config, forms: [...new Set(modifyForm)] };\n }\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { recaptchaMessage } from '../configs';\nimport { ReCaptchaV3Model } from '../types/recaptcha.types';\n\nconst getConfigStorage = async (\n storageKey: string,\n retries = 1,\n delay = 1000\n): Promise<ReCaptchaV3Model | null> => {\n const storedConfig = sessionStorage.getItem(storageKey);\n\n if (storedConfig !== null) {\n return JSON.parse(storedConfig);\n } else if (retries > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n return getConfigStorage(storageKey, retries - 1, delay);\n }\n\n return null;\n};\n\nconst setConfigStorage = (\n storageKey: string,\n config: ReCaptchaV3Model,\n logger: boolean\n) => {\n if (!storageKey || !config.websiteKey) return null;\n\n try {\n sessionStorage.setItem(storageKey, JSON.stringify(config));\n } catch (error) {\n logger && console.error(recaptchaMessage.failedSetStorageConfig, error);\n return null;\n }\n};\n\nexport { getConfigStorage, setConfigStorage };\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { recaptchaBadgeSelector } from '../configs';\n\nconst waitForElement = (selector: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n // Check if the element is already in the DOM\n if (document.querySelector(selector)) {\n resolve();\n return;\n }\n\n // Create an observer to watch for changes\n const observer = new MutationObserver(() => {\n if (document.querySelector(selector)) {\n resolve();\n observer.disconnect();\n }\n });\n\n // Start observing the body for child changes only\n observer.observe(document.body, {\n childList: true,\n subtree: false,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n\nexport const checkRecaptchaBadge = async (): Promise<boolean> => {\n try {\n await waitForElement(recaptchaBadgeSelector);\n return true;\n } catch (error) {\n return false;\n }\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const convertKeysToCamelCase = (obj: {\n [key: string]: any;\n}): { [key: string]: string | number | boolean } => {\n const camelCaseKey = (key: string): string => {\n return key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n };\n\n return Object.keys(obj).reduce((result, key) => {\n const newKey = camelCaseKey(key);\n result[newKey] = obj[key];\n return result;\n }, {} as { [key: string]: any });\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { recaptchaMessage } from '../configs';\nimport {\n MutationObserverInit,\n ReCaptchaV3Model,\n} from '../types/recaptcha.types';\nconst { failedExecutionRecaptcha } = recaptchaMessage;\n\nexport const getRecaptchaToken = async (\n websiteKey: string\n): Promise<string> => {\n if (!(window as any).grecaptcha) {\n return Promise.reject(failedExecutionRecaptcha);\n }\n\n try {\n const token = await window.grecaptcha.execute(websiteKey, {\n action: 'click',\n });\n\n return token;\n } catch (error) {\n return Promise.reject(`${failedExecutionRecaptcha} : ${error}`);\n }\n};\n\nexport const waitForReCaptcha = () => {\n return new Promise((resolve) => {\n const observer = new MutationObserver((_, obs) => {\n if (window.grecaptcha) {\n obs.disconnect();\n resolve(true);\n }\n });\n\n const observerOptions: MutationObserverInit = {\n childList: true,\n subtree: true,\n attributes: true,\n };\n\n observer.observe(document.body, observerOptions);\n });\n};\n\nexport const verifyReCaptchaLoad = async (\n badgeId: string,\n config: ReCaptchaV3Model,\n logger: boolean\n): Promise<void> => {\n if (!window.grecaptcha) {\n await waitForReCaptcha();\n }\n\n return grecaptcha.ready(() => {\n const badgeContainers = document.querySelectorAll(`#${badgeId}`);\n\n if (!badgeContainers.length) return;\n\n // Handle the case when multiple instances of the drop-in container rendered on the same page\n\n badgeContainers.forEach(\n (element) => (element.id = `${element.id}_${Math.random().toString(36)}`) // NOSONAR\n );\n\n badgeContainers.forEach((element) => {\n if (element.innerHTML === '') {\n try {\n grecaptcha.render(element.id, {\n sitekey: config.websiteKey as string,\n badge: config.badgePosition,\n size: 'invisible',\n theme: config.theme ?? 'light',\n });\n } catch (error) {\n logger && console.error(error);\n }\n }\n });\n });\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const RECAPTCHA_CONFIGURATION_V3 = `query {\n recaptchaV3Config {\n is_enabled\n website_key\n minimum_score\n badge_position\n language_code\n failure_message\n forms\n theme\n } \n}`;\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport type Header = { [key: string]: string | null };\n\nexport type FetchOptions = {\n method?: 'GET' | 'POST';\n variables?: { [key: string]: any };\n signal?: AbortSignal;\n cache?:\n | 'default'\n | 'no-store'\n | 'reload'\n | 'no-cache'\n | 'force-cache'\n | 'only-if-cached';\n};\n\nexport type FetchQueryError = Array<{\n message: string;\n extensions: { category: string };\n}>;\n\nexport type BeforeHook = (requestInit: RequestInit) => RequestInit;\nexport type AfterHook<T = any> = (\n requestInit: RequestInit,\n response: { errors?: FetchQueryError; data: T }\n) => { errors?: FetchQueryError; data: T };\n\nconst defaultHeaders = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n};\n\nclass FetchGraphQLMesh {\n public _endpoint?: string;\n\n get endpoint() {\n return this._endpoint;\n }\n\n get fetchGraphQlHeaders() {\n return this._fetchGraphQlHeaders;\n }\n\n public _fetchGraphQlHeaders: Header = {};\n\n public _beforeHooks: BeforeHook[] = [];\n\n public _afterHooks: AfterHook[] = [];\n\n /**\n * Sets the GraphQL endpoint.\n * @param endpoint - The GraphQL endpoint.\n */\n public setEndpoint(endpoint: string) {\n this._endpoint = endpoint;\n }\n\n /**\n * Sets the GraphQL headers.\n * @param key - The key of the header.\n * @param value - The value of the header.\n */\n public setFetchGraphQlHeader(key: string, value: string | null) {\n this._fetchGraphQlHeaders = {\n ...this.fetchGraphQlHeaders,\n [key]: value,\n };\n }\n /**\n * Removes a specific GraphQL header.\n * @param key - The key of the header.\n */\n public removeFetchGraphQlHeader(key: string) {\n delete this._fetchGraphQlHeaders[key];\n }\n /**\n * Sets the GraphQL headers.\n * @param header - The header object or a function that returns a header object.\n * If a function is provided, it will be called with the previous headers.\n * The returned object will be merged with the previous headers.\n * @example\n * ```js\n * // set headers\n * setFetchGraphQlHeaders({ test: 'test' });\n * \n * // merge with previous headers\n * setFetchGraphQlHeaders((prev) => ({\n * ...prev,\n * test: 'test2',\n * }));\n * ```\n */\n public setFetchGraphQlHeaders(header: Header | ((prev: Header) => Header)) {\n if (typeof header === 'function') {\n this._fetchGraphQlHeaders = {\n ...this._fetchGraphQlHeaders,\n ...header(this._fetchGraphQlHeaders),\n };\n } else {\n this._fetchGraphQlHeaders = { ...header };\n }\n }\n /**\n * Adds a hook executed before the GraphQL call.\n * @param hook - The hook function.\n * @example\n * ```js\n * // add before hook\n * addBeforeHook((requestInit) => console.log('About to execute ' + requestInit.method + ' call.'));\n *\n * // modify the requestInit before executing the request\n * addBeforeHook((requestInit) => {method: requestInit.method, body: 'new body'});\n * ```\n */\n public addBeforeHook(hook: BeforeHook): void {\n this._beforeHooks.push(hook);\n }\n /**\n * Adds a hook executed before the GraphQL call.\n * @param hook - The hook function.\n * @example\n * ```js\n * // add before hook\n * addAfterHook((requestInit, response) => console.log(\n * 'The result of ' + requestInit.method + ' call is ' + response.json().body\n * ));\n *\n * // modify the response\n * addAfterHook((requestInit, response) => new Response(JSON.stringify({ ...response, modified: true }));\n * ```\n */\n public addAfterHook(hook: AfterHook): void {\n this._afterHooks.push(hook);\n }\n /**\n * Fetches GraphQL data.\n * @param query - The GraphQL query.\n * @param options - Optional configuration for the fetch request.\n * @returns\n */\n public async fetchGraphQl<T = any>(\n query: string,\n options?: FetchOptions\n ): Promise<{ errors?: FetchQueryError; data: T }> {\n const endpoint = this.endpoint;\n const fetchGraphQlHeaders = this.fetchGraphQlHeaders;\n\n if (!endpoint) throw Error('Missing \"url\"');\n\n const method = options?.method ?? 'POST';\n const cache = options?.cache;\n const signal = options?.signal;\n\n let body;\n const url = new URL(endpoint);\n const headers = {\n ...defaultHeaders,\n ...fetchGraphQlHeaders,\n };\n\n if (method === 'POST') {\n body = JSON.stringify({\n query,\n variables: options?.variables,\n });\n }\n\n if (method === 'GET') {\n url.searchParams.append('query', minimizeGraphQlQuery(query));\n\n if (options?.variables)\n url.searchParams.append('variables', JSON.stringify(options.variables));\n }\n\n let requestInit: RequestInit = {\n method,\n headers,\n body,\n cache,\n signal,\n };\n\n requestInit = await this._beforeHooks.reduce(\n async (prev, hook) => hook(await prev),\n Promise.resolve(requestInit)\n );\n\n return await fetch(url, requestInit).then((r) => r.json().then(\n (response) => this._afterHooks.reduce(\n async (result, hook) => hook(requestInit, await result),\n Promise.resolve(response)\n )\n ));\n }\n /**\n * Gets the configuration.\n */\n public getConfig() {\n return {\n endpoint: this.endpoint,\n fetchGraphQlHeaders: this.fetchGraphQlHeaders,\n };\n }\n\n public getMethods() {\n return {\n setEndpoint: this.setEndpoint.bind(this),\n setFetchGraphQlHeader: this.setFetchGraphQlHeader.bind(this),\n removeFetchGraphQlHeader: this.removeFetchGraphQlHeader.bind(this),\n setFetchGraphQlHeaders: this.setFetchGraphQlHeaders.bind(this),\n fetchGraphQl: this.fetchGraphQl.bind(this),\n getConfig: this.getConfig.bind(this),\n addBeforeHook: this.addBeforeHook.bind(this),\n addAfterHook: this.addAfterHook.bind(this),\n };\n }\n}\n\nconst mesh = new FetchGraphQLMesh();\n\n/**\n * `FetchGraphQL` is a class that extends `FetchGraphQLMesh`.\n * It provides methods to get the GraphQL endpoint and headers.\n *\n * @class\n *\n */\nexport class FetchGraphQL extends FetchGraphQLMesh {\n get endpoint() {\n return this._endpoint ?? mesh.endpoint;\n }\n\n get fetchGraphQlHeaders() {\n return (\n (this._endpoint\n ? this._fetchGraphQlHeaders\n : { ...this._fetchGraphQlHeaders, ...mesh.fetchGraphQlHeaders })\n );\n }\n}\n\nfunction minimizeGraphQlQuery(query: string) {\n // Remove comments\n query = query.replace(/#.*/g, '');\n\n // Remove extra spaces, tabs, and line breaks\n query = query.replace(/\\s+/g, ' ');\n\n return query.trim();\n}\n/**\n * Exports several methods from the `mesh` object.\n *\n * @property {Function} setEndpoint - Sets the GraphQL endpoint.\n * @property {Function} setFetchGraphQlHeaders - Sets the GraphQL headers.\n * @property {Function} setFetchGraphQlHeader - Sets a specific GraphQL header.\n * @property {Function} removeFetchGraphQlHeader - Removes a specific GraphQL header.\n * @property {Function} fetchGraphQl - Fetches GraphQL data.\n * @property {Function} getConfig - Gets the configuration.\n */\n\n// Global Mesh instance\nexport const {\n setEndpoint,\n setFetchGraphQlHeaders,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n fetchGraphQl,\n getConfig,\n addBeforeHook,\n addAfterHook,\n} = mesh.getMethods();\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport {\n ReCaptchaV3Response,\n PropsFormTypes,\n ReCaptchaV3Model,\n} from './types/recaptcha.types';\nimport { recaptchaMessage, recaptchaBadgeSelector } from './configs';\nimport {\n extendConfig,\n setConfigStorage,\n getConfigStorage,\n checkRecaptchaBadge,\n convertKeysToCamelCase,\n} from './lib';\nimport {\n getRecaptchaToken,\n verifyReCaptchaLoad,\n} from './services/recaptcha.service';\nimport { RECAPTCHA_CONFIGURATION_V3 } from './graphql/recaptchaConfig.graphql';\n\nimport { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const recaptchaFetchApi = new FetchGraphQL().getMethods();\n\nexport class RecaptchaModule {\n _enableReCAPTCHA: boolean = false;\n _recaptchaBackendEndpoint: string =\n recaptchaFetchApi.getConfig()?.endpoint || '';\n _recaptchaScriptUrl: string = 'https://www.google.com/recaptcha/api.js';\n _configStorageKey: string = 'recaptchaConfig';\n _logger: boolean = false;\n\n async _updateBadgePosition(\n badgeId: string,\n config: ReCaptchaV3Model\n ): Promise<void | null> {\n if (!config) return;\n\n if (config?.badgePosition === 'inline') {\n await verifyReCaptchaLoad(badgeId, config, this._logger);\n } else {\n const isBadgeLoaded = await checkRecaptchaBadge();\n\n if (!isBadgeLoaded) return;\n\n const recaptchaBadge = document.querySelector(\n recaptchaBadgeSelector\n ) as HTMLIFrameElement;\n\n const shouldUpdateSrc =\n config.theme &&\n recaptchaBadge &&\n !recaptchaBadge.src.includes('theme=dark') &&\n !recaptchaBadge.src.includes('theme=light');\n\n if (shouldUpdateSrc) {\n recaptchaBadge.setAttribute(\n 'src',\n `${recaptchaBadge.src}&theme=${config.theme}`\n );\n }\n }\n }\n\n async _addRecaptchaScript(): Promise<void> {\n const config = await this._loadConfig();\n\n if (!document.getElementById('recaptchaId') && config) {\n const webApiKey = config.websiteKey;\n const isBadgeGlobal = config.badgePosition === 'inline';\n const languageCode = config.languageCode;\n\n if (!webApiKey) return;\n\n const script = document.createElement('script');\n script.setAttribute('id', 'recaptchaId');\n script.defer = true;\n script.src = isBadgeGlobal\n ? `${this._recaptchaScriptUrl}?render=${webApiKey}&badge=none&hl=${languageCode}`\n : `${this._recaptchaScriptUrl}?render=${webApiKey}&badge=${config.badgePosition}&hl=${languageCode}`;\n\n document.head.appendChild(script);\n }\n }\n\n async _fetchStoreConfig(): Promise<ReCaptchaV3Response | undefined> {\n try {\n const response = await recaptchaFetchApi.fetchGraphQl(\n RECAPTCHA_CONFIGURATION_V3,\n {\n method: 'GET',\n cache: 'force-cache',\n }\n );\n\n if (response?.errors?.length) {\n this._logger && console.error(response.errors[0].message);\n\n return;\n }\n\n return response;\n } catch (error) {\n this._logger && console.error(`${recaptchaMessage.failedFetch}:`, error);\n }\n }\n\n async _loadConfig(): Promise<ReCaptchaV3Model | null> {\n const config = await getConfigStorage(this._configStorageKey);\n\n if (!config) {\n this._logger && console.error(recaptchaMessage.failedGetStorageConfig);\n\n return null;\n }\n\n this._enableReCAPTCHA = !!config.isEnabled;\n\n return config;\n }\n\n setEndpoint(url: string) {\n if (!url) return;\n\n this._recaptchaBackendEndpoint = url;\n recaptchaFetchApi.setEndpoint(url);\n }\n\n async setConfig(configList: PropsFormTypes[]) {\n try {\n const config = await this._fetchStoreConfig();\n\n if (!config?.data?.recaptchaV3Config) {\n sessionStorage.removeItem(this._configStorageKey);\n return;\n }\n\n const transformConfig: ReCaptchaV3Model = convertKeysToCamelCase(\n config?.data?.recaptchaV3Config\n );\n\n const extendedRecaptchaConfig = extendConfig(transformConfig, configList);\n\n if (extendedRecaptchaConfig) {\n setConfigStorage(\n this._configStorageKey,\n extendedRecaptchaConfig,\n this._logger\n );\n }\n } catch (error) {\n this._logger &&\n console.error(recaptchaMessage.failedSetStorageConfig, error);\n\n sessionStorage.removeItem(this._configStorageKey);\n }\n }\n\n async initReCaptcha(lazyLoadTimeout = 3000) {\n // IIFE added to fix SonarQube error \"Promise returned in function argument where a void return was expected\"\n setTimeout(() => {\n (async () => {\n try {\n const config = await this._loadConfig();\n\n if (!config?.forms || !config.isEnabled) {\n return;\n }\n\n await this._addRecaptchaScript();\n\n if (config.badgePosition === 'inline') {\n await Promise.all(\n (config.forms as PropsFormTypes[]).map((element) =>\n this._updateBadgePosition(element.badgeId, config)\n )\n );\n } else {\n await this._updateBadgePosition('', config);\n }\n } catch (error) {\n this._logger &&\n console.error(recaptchaMessage.failedInitializing, error);\n }\n })();\n }, lazyLoadTimeout);\n }\n\n async verifyReCaptcha(): Promise<string | undefined> {\n try {\n const config = await this._loadConfig();\n\n if (!config?.forms || !config.websiteKey || !config.isEnabled) {\n return undefined;\n }\n\n return await getRecaptchaToken(config.websiteKey);\n } catch (error) {\n this._logger && console.error(error);\n }\n }\n\n enableLogger(logger: boolean) {\n this._logger = logger;\n }\n\n getMethods() {\n return {\n enableLogger: this.enableLogger.bind(this),\n setEndpoint: this.setEndpoint.bind(this),\n setConfig: this.setConfig.bind(this),\n initReCaptcha: this.initReCaptcha.bind(this),\n verifyReCaptcha: this.verifyReCaptcha.bind(this),\n };\n }\n}\n\nconst recaptcha = new RecaptchaModule();\n\nconst { initReCaptcha, verifyReCaptcha, setEndpoint, setConfig, enableLogger } =\n recaptcha.getMethods();\n\nexport { setEndpoint, setConfig, initReCaptcha, verifyReCaptcha, enableLogger };\n"],"names":["recaptchaMessage","typeDefaultForm","recaptchaBadgeSelector","extendConfig","config","modifyParams","modifyForm","el","getConfigStorage","storageKey","retries","delay","storedConfig","resolve","setConfigStorage","logger","error","waitForElement","selector","reject","observer","checkRecaptchaBadge","convertKeysToCamelCase","obj","camelCaseKey","key","_","letter","result","newKey","failedExecutionRecaptcha","getRecaptchaToken","websiteKey","waitForReCaptcha","obs","observerOptions","verifyReCaptchaLoad","badgeId","badgeContainers","element","RECAPTCHA_CONFIGURATION_V3","defaultHeaders","FetchGraphQLMesh","endpoint","value","header","hook","query","options","fetchGraphQlHeaders","method","cache","signal","body","url","headers","minimizeGraphQlQuery","requestInit","prev","r","response","mesh","FetchGraphQL","setEndpoint","setFetchGraphQlHeaders","setFetchGraphQlHeader","removeFetchGraphQlHeader","fetchGraphQl","getConfig","addBeforeHook","addAfterHook","recaptchaFetchApi","RecaptchaModule","_a","recaptchaBadge","webApiKey","isBadgeGlobal","languageCode","script","configList","_b","transformConfig","extendedRecaptchaConfig","lazyLoadTimeout","recaptcha","initReCaptcha","verifyReCaptcha","setConfig","enableLogger"],"mappings":"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","x_google_ignoreList":[9]}
package/chunks/Image.js DELETED
@@ -1,4 +0,0 @@
1
- /*! Copyright 2025 Adobe
2
- All Rights Reserved. */
3
- import{jsx as o}from"../preact-jsx-runtime.js";import{G as w,T as c,k as x,h as y}from"./icons/Add.js";import{IntlProvider as f}from"../i18n.js";import{d as n}from"./cjs.js";import{R as T,c as S,g as I}from"./vcomponent.js";const P={ExampleComponentName:{item:{label:"string"}},Pagination:{backwardButton:{ariaLabel:"Go to previous page"},forwardButton:{ariaLabel:"Go to next page"}},Incrementer:{decreaseLabel:"Decrease Quantity",increaseLabel:"Increase Quantity",label:"Quantity",errorMessage:"Enter a valid quantity",minQuantityMessage:"Enter at least {{minQuantity}}",maxQuantityMessage:"Maximum quantity is {{maxQuantity}}"},Modal:{Close:{label:"Close"}},InputPassword:{placeholder:"Password",floatingLabel:"Password",buttonShowTitle:"Click to show password",buttonHideTitle:"Click to hide password"},PasswordStatusIndicator:{chartTwoSymbols:"Use characters and numbers or symbols",chartThreeSymbols:"Use characters, numbers and symbols",chartFourSymbols:"Use uppercase characters, lowercase characters, numbers and symbols",messageLengthPassword:"At least {minLength} characters long"},InlineAlert:{dismissLabel:"Dismiss Alert"},PriceSummary:{subTotal:{label:"Subtotal",withTaxes:"Including taxes",withoutTaxes:"excluding taxes"},shipping:{label:"Shipping",editZipAction:"Apply",estimated:"Estimated Shipping",estimatedDestination:"Estimated Shipping to ",destinationLinkAriaLabel:"Change destination",zipPlaceholder:"Zip Code",withTaxes:"Including taxes",withoutTaxes:"excluding taxes",alternateField:{zip:"Estimate using country/zip",state:"Estimate using country/state"}},taxes:{total:"Tax Total",totalOnly:"Tax",breakdown:"Taxes",showBreakdown:"Show Tax Breakdown",hideBreakdown:"Hide Tax Breakdown",estimated:"Estimated Tax"},total:{estimated:"Estimated Total",label:"Total",withoutTax:"Total excluding taxes"}},ProgressSpinner:{updating:{label:"Item is updating"},updatingChildren:{label:"Items are updating"}},PriceRange:{from:{label:"From"},to:{label:"to"},asLowAs:{label:"As low as"}},Swatches:{outOfStock:{label:"out of stock swatch"},selected:{label:"swatch selected"},swatch:{label:"swatch"}},Accordion:{open:{label:"Open"},close:{label:"Close"}},CartItem:{each:{label:"each"},pricePerItem:{label:"price per item"},quantity:{label:"Quantity"},remove:{label:"Remove {product} from the cart"},removeDefault:{label:"Remove item from the cart"},taxIncluded:{label:"incl. VAT"},taxExcluded:{label:"excl. tax"},updating:{label:"{product} is updating"}},InputDate:{picker:"Select a date"}},r={Dropin:P},d={default:r,en_US:r},k=e=>n(d.default,d[e]||{}),v=w({locale:"en-US"}),C=({lang:e="en_US",langDefinitions:t={},children:a})=>{const l=c(()=>{const i=n(t.default,t[e]??{});return n(k(e),i)},[e,t]),s=e.replace("_","-");return o(v.Provider,{value:{locale:s},children:o(f,{definition:l,children:o(x,{children:a})})})},B=new T(o(C,{})),D=({className:e,src:t,params:a,loading:l="lazy",srcSet:s,onLoad:i,...u})=>{const[m,p]=y(!1),b=c(()=>{if(s)return s;if(!(!t||!a))return I(t,{...a})},[a,t,s]),h=g=>{p(!0),i==null||i(g)};return o("img",{...u,className:S(["dropin-image",["dropin-image--loaded",m],e]),loading:l,onLoad:h,src:t,srcSet:b})};export{D as I,v as U,C as a,B as p};
4
- //# sourceMappingURL=Image.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Image.js","sources":["/@dropins/tools/src/i18n/index.ts","/@dropins/tools/src/components/UIProvider/UIProvider.tsx","/@dropins/tools/src/components/Image/Image.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { deepmerge } from '@adobe-commerce/elsie/lib';\nimport en_US from '@adobe-commerce/elsie/i18n/en_US.json';\n\nexport type Lang = 'en_US';\n\nexport const definition = {\n default: en_US,\n en_US,\n};\n\n// https://github.com/synacor/preact-i18n\n// eslint-disable-next-line no-restricted-imports\nexport * from 'preact-i18n';\n\nexport const getDefinitionByLanguage = (lang: Lang) => {\n return deepmerge(definition.default, definition[lang] || {});\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes, createContext, useMemo } from 'preact/compat';\nimport { deepmerge, Render } from '@adobe-commerce/elsie/lib';\nimport { IntlProvider, getDefinitionByLanguage, Lang } from '@adobe-commerce/elsie/i18n';\n\nimport '@adobe-commerce/elsie/components/UIProvider/UIProvider.css';\nimport '@adobe-commerce/elsie/components/UIProvider/normalize.css';\n\nexport const UIContext = createContext<{\n locale: string;\n}>({\n locale: 'en-US',\n});\n\ntype LangDefinitions = { [key: string]: any };\n\nexport interface UIProviderProps extends HTMLAttributes<HTMLDivElement> {\n lang?: Lang; // ... list of other supported languages\n langDefinitions?: LangDefinitions;\n}\n\nexport const UIProvider: FunctionComponent<UIProviderProps> = ({\n lang = 'en_US',\n langDefinitions = {},\n children,\n}) => {\n const definitions = useMemo(() => {\n // Merge default definition with selected definition\n const selectedDefinitions: LangDefinitions = deepmerge(\n langDefinitions.default,\n langDefinitions[lang] ?? {}\n );\n\n // Merge SDK default definitions with custom definitions\n return deepmerge(\n getDefinitionByLanguage(lang), // SDK default definitions\n selectedDefinitions // Custom definitions\n );\n }, [lang, langDefinitions]);\n\n const locale = lang.replace('_', '-');\n\n return (\n <UIContext.Provider value={{ locale }}>\n <IntlProvider definition={definitions}>\n <>{children}</>\n </IntlProvider>\n </UIContext.Provider>\n );\n};\n\nexport const provider = new Render(<UIProvider />);","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes, useMemo, useState } from 'preact/compat';\nimport {\n classes,\n generateSrcset,\n ResolveImageUrlOptions,\n} from '@adobe-commerce/elsie/lib';\nimport '@adobe-commerce/elsie/components/Image/Image.css';\n\nexport interface ImageProps extends HTMLAttributes<HTMLDivElement> {\n params?: ResolveImageUrlOptions;\n src: string;\n onLoad?: (e: any) => void;\n}\nexport const Image: FunctionComponent<ImageProps> = ({\n className,\n src,\n params,\n loading = 'lazy',\n srcSet,\n onLoad,\n ...props\n}) => {\n const [loaded, setLoaded] = useState(false);\n\n const _srcSet = useMemo(() => {\n // If srcSet is provided, use it\n if (srcSet) return srcSet;\n\n // If src is not provided, return \"undefined\"\n if (!src || !params) return;\n\n // Otherwise, generate srcSet based on params\n return generateSrcset(src, { ...params });\n }, [params, src, srcSet]);\n\n // Add class at image onLoad\n const onLoadHandler = (e: any) => {\n setLoaded(true); \n onLoad?.(e);\n };\n\n return (\n <img\n {...props}\n className={classes([\n 'dropin-image',\n ['dropin-image--loaded', loaded],\n className,\n ])}\n loading={loading}\n onLoad={onLoadHandler}\n src={src}\n srcSet={_srcSet}\n />\n );\n};\n"],"names":["definition","en_US","getDefinitionByLanguage","lang","deepmerge","UIContext","createContext","UIProvider","langDefinitions","children","definitions","useMemo","selectedDefinitions","locale","jsx","IntlProvider","Fragment","provider","Render","Image","className","src","params","loading","srcSet","onLoad","props","loaded","setLoaded","useState","_srcSet","generateSrcset","onLoadHandler","e","classes"],"mappings":"k9EAcaA,EAAa,CACxB,QAASC,EACT,MAAAA,CACF,EAMaC,EAA2BC,GAC/BC,EAAUJ,EAAW,QAASA,EAAWG,CAAI,GAAK,EAAE,ECPhDE,EAAYC,EAEtB,CACD,OAAQ,OACV,CAAC,EASYC,EAAiD,CAAC,CAC7D,KAAAJ,EAAO,QACP,gBAAAK,EAAkB,CAAC,EACnB,SAAAC,CACF,IAAM,CACE,MAAAC,EAAcC,EAAQ,IAAM,CAEhC,MAAMC,EAAuCR,EAC3CI,EAAgB,QAChBA,EAAgBL,CAAI,GAAK,CAAA,CAC3B,EAGO,OAAAC,EACLF,EAAwBC,CAAI,EAC5BS,CACF,CAAA,EACC,CAACT,EAAMK,CAAe,CAAC,EAEpBK,EAASV,EAAK,QAAQ,IAAK,GAAG,EAEpC,OACGW,EAAAT,EAAU,SAAV,CAAmB,MAAO,CAAE,OAAAQ,CAAA,EAC3B,SAAAC,EAACC,GAAa,WAAYL,EACxB,SAAGI,EAAAE,EAAA,CAAA,SAAAP,CAAA,CAAS,CACd,CAAA,EACF,CAEJ,EAEaQ,EAAW,IAAIC,EAAOJ,EAACP,IAAW,CAAE,ECrCpCY,EAAuC,CAAC,CACnD,UAAAC,EACA,IAAAC,EACA,OAAAC,EACA,QAAAC,EAAU,OACV,OAAAC,EACA,OAAAC,EACA,GAAGC,CACL,IAAM,CACJ,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAS,EAAK,EAEpCC,EAAUnB,EAAQ,IAAM,CAE5B,GAAIa,EAAe,OAAAA,EAGf,GAAA,GAACH,GAAO,CAACC,GAGb,OAAOS,EAAeV,EAAK,CAAE,GAAGC,EAAQ,CACvC,EAAA,CAACA,EAAQD,EAAKG,CAAM,CAAC,EAGlBQ,EAAiBC,GAAW,CAChCL,EAAU,EAAI,EACdH,GAAA,MAAAA,EAASQ,EACX,EAGE,OAAAnB,EAAC,MAAA,CACE,GAAGY,EACJ,UAAWQ,EAAQ,CACjB,eACA,CAAC,uBAAwBP,CAAM,EAC/BP,CAAA,CACD,EACD,QAAAG,EACA,OAAQS,EACR,IAAAX,EACA,OAAQS,CAAA,CACV,CAEJ"}
@@ -1,15 +0,0 @@
1
- /*! Copyright 2025 Adobe
2
- All Rights Reserved. */
3
- var me=Object.defineProperty;var be=(e,t,r)=>t in e?me(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var re=(e,t,r)=>be(e,typeof t!="symbol"?t+"":t,r);import{g as xe}from"./image-params-keymap.js";import{jsx as $}from"../preact-jsx-runtime.js";import{l as g,_ as pe,k as T,G as we,B as ne}from"./icons/Add.js";import{signal as ie}from"../signals.js";const Oe=e=>e.reduce((r,i)=>{if(!i)return r;if(typeof i=="string"&&(r+=` ${i}`),Array.isArray(i)){const[u,_]=i;u&&_&&(r+=` ${u}`)}return r},"").trim(),se={medium:768,large:1024,xlarge:1366,xxlarge:1920},je=(e,t)=>{const[r,i]=e.split("?"),u=new URLSearchParams(i),_=xe(),v=_&&Object.keys(_)||[];let c={},m={..._};return(v==null?void 0:v.length)>0&&t?c=Object.entries(t).reduce((p,[y,o])=>{const a=_[y];if(typeof a=="string")p[a]=o;else if(typeof a=="function"){const[w,x]=a(o);p[w]=x}return delete m[y],p},{}):c={auto:"webp",quality:80,crop:!1,fit:"cover",...t},Object.entries(m).forEach(([,p])=>{if(typeof p=="function"){const[y,o]=p(void 0);c[y]=o}}),Object.entries(c).forEach(([p,y])=>{y!=null&&u.set(p,String(y))}),`${r}?${u.toString()}`},Te=(e,t)=>{if(!e||!(t!=null&&t.width))return;const r=i=>je(e,{...i});return Object.entries(se).map(([,i])=>{const u=t.width*i/se.xxlarge;return`${r({...t,width:u})} ${i}w`}).join(`,
4
- `)};var Ae=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i,_e=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/,W=/[\s\n\\/='"\0<>]/,ve=/^xlink:?./,Se=/["&<]/;function E(e){if(Se.test(e+="")===!1)return e;for(var t=0,r=0,i="",u="";r<e.length;r++){switch(e.charCodeAt(r)){case 34:u="&quot;";break;case 38:u="&amp;";break;case 60:u="&lt;";break;default:continue}r!==t&&(i+=e.slice(t,r)),i+=u,t=r+1}return r!==t&&(i+=e.slice(t,r)),i}var ae=function(e,t){return String(e).replace(/(\n+)/g,"$1"+(t||" "))},oe=function(e,t,r){return String(e).length>40||String(e).indexOf(`
5
- `)!==-1||String(e).indexOf("<")!==-1},le={},$e=/([A-Z])/g;function ge(e){var t="";for(var r in e){var i=e[r];i!=null&&i!==""&&(t&&(t+=" "),t+=r[0]=="-"?r:le[r]||(le[r]=r.replace($e,"-$1").toLowerCase()),t=typeof i=="number"&&Ae.test(r)===!1?t+": "+i+"px;":t+": "+i+";")}return t||void 0}function I(e,t){return Array.isArray(t)?t.reduce(I,e):t!=null&&t!==!1&&e.push(t),e}function fe(){this.__d=!0}function he(e,t){return{__v:e,context:t,props:e.props,setState:fe,forceUpdate:fe,__d:!0,__h:[]}}function K(e,t){var r=e.contextType,i=r&&t[r.__c];return r!=null?i?i.props.value:r.__:t}var Q=[];function F(e,t,r,i,u,_){if(e==null||typeof e=="boolean")return"";if(typeof e!="object")return typeof e=="function"?"":E(e);var v=r.pretty,c=v&&typeof v=="string"?v:" ";if(Array.isArray(e)){for(var m="",p=0;p<e.length;p++)v&&p>0&&(m+=`
6
- `),m+=F(e[p],t,r,i,u,_);return m}if(e.constructor!==void 0)return"";var y,o=e.type,a=e.props,w=!1;if(typeof o=="function"){if(w=!0,!r.shallow||!i&&r.renderRootComponent!==!1){if(o===T){var x=[];return I(x,e.props.children),F(x,t,r,r.shallowHighOrder!==!1,u,_)}var h,n=e.__c=he(e,t);g.__b&&g.__b(e);var M=g.__r;if(o.prototype&&typeof o.prototype.render=="function"){var k=K(o,t);(n=e.__c=new o(a,k)).__v=e,n._dirty=n.__d=!0,n.props=a,n.state==null&&(n.state={}),n._nextState==null&&n.__s==null&&(n._nextState=n.__s=n.state),n.context=k,o.getDerivedStateFromProps?n.state=Object.assign({},n.state,o.getDerivedStateFromProps(n.props,n.state)):n.componentWillMount&&(n.componentWillMount(),n.state=n._nextState!==n.state?n._nextState:n.__s!==n.state?n.__s:n.state),M&&M(e),h=n.render(n.props,n.state,n.context)}else for(var N=K(o,t),P=0;n.__d&&P++<25;)n.__d=!1,M&&M(e),h=o.call(e.__c,a,N);return n.getChildContext&&(t=Object.assign({},t,n.getChildContext())),g.diffed&&g.diffed(e),F(h,t,r,r.shallowHighOrder!==!1,u,_)}o=(y=o).displayName||y!==Function&&y.name||function(X){var J=(Function.prototype.toString.call(X).match(/^\s*function\s+([^( ]+)/)||"")[1];if(!J){for(var z=-1,Y=Q.length;Y--;)if(Q[Y]===X){z=Y;break}z<0&&(z=Q.push(X)-1),J="UnnamedComponent"+z}return J}(y)}var j,O,d="<"+o;if(a){var b=Object.keys(a);r&&r.sortAttributes===!0&&b.sort();for(var C=0;C<b.length;C++){var s=b[C],f=a[s];if(s!=="children"){if(!W.test(s)&&(r&&r.allAttributes||s!=="key"&&s!=="ref"&&s!=="__self"&&s!=="__source")){if(s==="defaultValue")s="value";else if(s==="defaultChecked")s="checked";else if(s==="defaultSelected")s="selected";else if(s==="className"){if(a.class!==void 0)continue;s="class"}else u&&ve.test(s)&&(s=s.toLowerCase().replace(/^xlink:?/,"xlink:"));if(s==="htmlFor"){if(a.for)continue;s="for"}s==="style"&&f&&typeof f=="object"&&(f=ge(f)),s[0]==="a"&&s[1]==="r"&&typeof f=="boolean"&&(f=String(f));var l=r.attributeHook&&r.attributeHook(s,f,t,r,w);if(l||l==="")d+=l;else if(s==="dangerouslySetInnerHTML")O=f&&f.__html;else if(o==="textarea"&&s==="value")j=f;else if((f||f===0||f==="")&&typeof f!="function"){if(!(f!==!0&&f!==""||(f=s,r&&r.xml))){d=d+" "+s;continue}if(s==="value"){if(o==="select"){_=f;continue}o==="option"&&_==f&&a.selected===void 0&&(d+=" selected")}d=d+" "+s+'="'+E(f)+'"'}}}else j=f}}if(v){var A=d.replace(/\n\s*/," ");A===d||~A.indexOf(`
7
- `)?v&&~d.indexOf(`
8
- `)&&(d+=`
9
- `):d=A}if(d+=">",W.test(o))throw new Error(o+" is not a valid HTML tag name in "+d);var D,ye=_e.test(o)||r.voidElements&&r.voidElements.test(o),S=[];if(O)v&&oe(O)&&(O=`
10
- `+c+ae(O,c)),d+=O;else if(j!=null&&I(D=[],j).length){for(var U=v&&~d.indexOf(`
11
- `),ee=!1,Z=0;Z<D.length;Z++){var B=D[Z];if(B!=null&&B!==!1){var L=F(B,t,r,!0,o==="svg"||o!=="foreignObject"&&u,_);if(v&&!U&&oe(L)&&(U=!0),L)if(v){var te=L.length>0&&L[0]!="<";ee&&te?S[S.length-1]+=L:S.push(L),ee=te}else S.push(L)}}if(v&&U)for(var G=S.length;G--;)S[G]=`
12
- `+c+ae(S[G],c)}if(S.length||O)d+=S.join("");else if(r&&r.xml)return d.substring(0,d.length-1)+" />";return!ye||D||O?(v&&~d.indexOf(`
13
- `)&&(d+=`
14
- `),d=d+"</"+o+">"):d=d.replace(/>$/," />"),d}var ke={shallow:!0};V.render=V;var Ce=function(e,t){return V(e,t,ke)},ue=[];function V(e,t,r){t=t||{};var i=g.__s;g.__s=!0;var u,_=pe(T,null);return _.__k=[e],u=r&&(r.pretty||r.voidElements||r.sortAttributes||r.shallow||r.allAttributes||r.xml||r.attributeHook)?F(e,t,r):q(e,t,!1,void 0,_),g.__c&&g.__c(e,ue),g.__s=i,ue.length=0,u}function R(e){return e==null||typeof e=="boolean"?null:typeof e=="string"||typeof e=="number"||typeof e=="bigint"?pe(null,null,e):e}function Ne(e,t){return e==="className"?"class":e==="htmlFor"?"for":e==="defaultValue"?"value":e==="defaultChecked"?"checked":e==="defaultSelected"?"selected":t&&ve.test(e)?e.toLowerCase().replace(/^xlink:?/,"xlink:"):e}function Le(e,t){return e==="style"&&t!=null&&typeof t=="object"?ge(t):e[0]==="a"&&e[1]==="r"&&typeof t=="boolean"?String(t):t}var ce=Array.isArray,de=Object.assign;function q(e,t,r,i,u){if(e==null||e===!0||e===!1||e==="")return"";if(typeof e!="object")return typeof e=="function"?"":E(e);if(ce(e)){var _="";u.__k=e;for(var v=0;v<e.length;v++)_+=q(e[v],t,r,i,u),e[v]=R(e[v]);return _}if(e.constructor!==void 0)return"";e.__=u,g.__b&&g.__b(e);var c=e.type,m=e.props;if(typeof c=="function"){var p;if(c===T)p=m.children;else{p=c.prototype&&typeof c.prototype.render=="function"?function(b,C){var s=b.type,f=K(s,C),l=new s(b.props,f);b.__c=l,l.__v=b,l.__d=!0,l.props=b.props,l.state==null&&(l.state={}),l.__s==null&&(l.__s=l.state),l.context=f,s.getDerivedStateFromProps?l.state=de({},l.state,s.getDerivedStateFromProps(l.props,l.state)):l.componentWillMount&&(l.componentWillMount(),l.state=l.__s!==l.state?l.__s:l.state);var A=g.__r;return A&&A(b),l.render(l.props,l.state,l.context)}(e,t):function(b,C){var s,f=he(b,C),l=K(b.type,C);b.__c=f;for(var A=g.__r,D=0;f.__d&&D++<25;)f.__d=!1,A&&A(b),s=b.type.call(f,b.props,l);return s}(e,t);var y=e.__c;y.getChildContext&&(t=de({},t,y.getChildContext()))}var o=q(p=p!=null&&p.type===T&&p.key==null?p.props.children:p,t,r,i,e);return g.diffed&&g.diffed(e),e.__=void 0,g.unmount&&g.unmount(e),o}var a,w,x="<";if(x+=c,m)for(var h in a=m.children,m){var n=m[h];if(!(h==="key"||h==="ref"||h==="__self"||h==="__source"||h==="children"||h==="className"&&"class"in m||h==="htmlFor"&&"for"in m||W.test(h))){if(n=Le(h=Ne(h,r),n),h==="dangerouslySetInnerHTML")w=n&&n.__html;else if(c==="textarea"&&h==="value")a=n;else if((n||n===0||n==="")&&typeof n!="function"){if(n===!0||n===""){n=h,x=x+" "+h;continue}if(h==="value"){if(c==="select"){i=n;continue}c!=="option"||i!=n||"selected"in m||(x+=" selected")}x=x+" "+h+'="'+E(n)+'"'}}}var M=x;if(x+=">",W.test(c))throw new Error(c+" is not a valid HTML tag name in "+x);var k="",N=!1;if(w)k+=w,N=!0;else if(typeof a=="string")k+=E(a),N=!0;else if(ce(a)){e.__k=a;for(var P=0;P<a.length;P++){var j=a[P];if(a[P]=R(j),j!=null&&j!==!1){var O=q(j,t,c==="svg"||c!=="foreignObject"&&r,i,e);O&&(k+=O,N=!0)}}}else if(a!=null&&a!==!1&&a!==!0){e.__k=[R(a)];var d=q(a,t,c==="svg"||c!=="foreignObject"&&r,i,e);d&&(k+=d,N=!0)}if(g.diffed&&g.diffed(e),e.__=void 0,g.unmount&&g.unmount(e),N)x+=k;else if(_e.test(c))return M+" />";return x+"</"+c+">"}V.shallowRender=Ce;const Me=we(null);class Ve{constructor(t){re(this,"_provider");this._provider=t}render(t,r){return async i=>{var o;if(!t)throw new Error("Component is not defined");if(!i)throw new Error("Root element is not defined");const u=await((o=t.getInitialData)==null?void 0:o.call(t,r))??{},_=ie({...r}),v=ie(new Set),c=this._provider,m=({next:a})=>$(Me.Provider,{value:v,children:$(H,{node:c,...c.props,children:$(t,{...a.value,initialData:u})})});i.innerHTML="";const p=document.createElement("div");i.classList.add("dropin-design"),ne($(m,{next:_}),p);const y={remove:()=>{ne(null,p)},setProps:a=>{const w=a(_.peek());_.value=w}};return new Promise(a=>{v.subscribe(w=>{if(w.size===0)return i.classList.add("dropin-design"),i.appendChild(p.firstChild??p),a(y)})})}}unmount(t){var r;if(!t)throw new Error("Root element is not defined");(r=t.firstChild)==null||r.remove()}async toString(t,r,i){var _;if(!t)throw new Error("Component is not defined");const u=await((_=t.getInitialData)==null?void 0:_.call(t,r))??{};return V($(H,{node:this._provider,...this._provider.props,children:$(t,{...r,initialData:u})}),{},{...i})}}function H({node:e,...t}){return e?Array.isArray(e)?$(T,{children:e.map((r,i)=>$(H,{node:r,className:t.className,...t},i))}):(t.className=Oe([e.props.className,t.className]),$(e.type,{ref:e.ref,...e.props,...t},e.key)):null}export{Ve as R,Me as S,H as V,Oe as c,Te as g};
15
- //# sourceMappingURL=vcomponent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vcomponent.js","sources":["/@dropins/tools/src/lib/classes.ts","/@dropins/tools/src/lib/resolve-image.ts","../../../../node_modules/preact-render-to-string/dist/index.mjs","/@dropins/tools/src/lib/render.tsx","/@dropins/tools/src/lib/vcomponent.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\n// @ts-ignore\nimport { JSXInternal } from 'preact/src/jsx';\n\ntype ClassName = string | JSXInternal.SignalLike<string | undefined>;\n\nexport const classes = (\n classes: Array<ClassName | [ClassName, boolean] | undefined>\n) => {\n const result = classes.reduce((result, item) => {\n if (!item) return result;\n\n if (typeof item === 'string') result += ` ${item}`;\n\n if (Array.isArray(item)) {\n const [className, isActive] = item;\n if (className && isActive) {\n result += ` ${className}`;\n }\n }\n\n return result;\n }, '') as string;\n\n return result.trim();\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { getImageParamsKeyMap } from '@adobe-commerce/elsie/lib/';\n\nconst BREAKPOINTS = {\n medium: 768,\n large: 1024,\n xlarge: 1366,\n xxlarge: 1920,\n};\n\nexport interface ResolveImageUrlOptions {\n width: number;\n height?: number;\n auto?: string;\n quality?: number;\n crop?: boolean;\n fit?: string;\n}\n\nconst resolveImageUrl = (url: string, _opts?: ResolveImageUrlOptions) => {\n const [base, query] = url.split('?');\n const params = new URLSearchParams(query);\n\n const keyMapping = getImageParamsKeyMap();\n const keyMappingKeys = (keyMapping && Object.keys(keyMapping)) || [];\n\n let opts: any = {};\n let unusedMapping = { ...keyMapping };\n\n if (keyMappingKeys?.length > 0 && _opts) {\n opts = Object.entries(_opts).reduce((acc, [key, value]) => {\n const newKey = keyMapping![key];\n if (typeof newKey === 'string') {\n acc[newKey] = value;\n } else if (typeof newKey === 'function') {\n const [newKeyString, newValue] = newKey(value);\n acc[newKeyString] = newValue;\n }\n delete unusedMapping![key];\n return acc;\n }, {} as { [key: string]: any });\n } else {\n opts = {\n auto: 'webp',\n quality: 80,\n crop: false,\n fit: 'cover',\n ..._opts,\n };\n }\n\n // Set unused mapping as default params\n Object.entries(unusedMapping).forEach(([, value]) => {\n if (typeof value === 'function') {\n const [newKeyString, newValue] = value(undefined);\n opts[newKeyString] = newValue;\n }\n });\n\n // Append image optimization parameters\n Object.entries(opts).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n params.set(key, String(value));\n }\n });\n\n return `${base}?${params.toString()}`;\n};\n\nexport const generateSrcset = (\n imageURL: string,\n options: ResolveImageUrlOptions\n) => {\n if (!imageURL || !options?.width) return;\n\n const generateSrcsetUrl = (options: ResolveImageUrlOptions) => {\n return resolveImageUrl(imageURL, {\n ...options,\n });\n };\n\n return Object.entries(BREAKPOINTS)\n .map(([, value]) => {\n // calculate breakpoints width\n const relativeWidth = (options.width * value) / BREAKPOINTS.xxlarge;\n\n return `${generateSrcsetUrl({\n ...options,\n width: relativeWidth,\n })} ${value}w`;\n })\n .join(',\\n');\n};\n","import{Fragment as e,options as t,h as r}from\"preact\";var n=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i,o=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/,i=/[\\s\\n\\\\/='\"\\0<>]/,l=/^xlink:?./,a=/[\"&<]/;function s(e){if(!1===a.test(e+=\"\"))return e;for(var t=0,r=0,n=\"\",o=\"\";r<e.length;r++){switch(e.charCodeAt(r)){case 34:o=\"&quot;\";break;case 38:o=\"&amp;\";break;case 60:o=\"&lt;\";break;default:continue}r!==t&&(n+=e.slice(t,r)),n+=o,t=r+1}return r!==t&&(n+=e.slice(t,r)),n}var f=function(e,t){return String(e).replace(/(\\n+)/g,\"$1\"+(t||\"\\t\"))},u=function(e,t,r){return String(e).length>(t||40)||!r&&-1!==String(e).indexOf(\"\\n\")||-1!==String(e).indexOf(\"<\")},c={},_=/([A-Z])/g;function p(e){var t=\"\";for(var r in e){var o=e[r];null!=o&&\"\"!==o&&(t&&(t+=\" \"),t+=\"-\"==r[0]?r:c[r]||(c[r]=r.replace(_,\"-$1\").toLowerCase()),t=\"number\"==typeof o&&!1===n.test(r)?t+\": \"+o+\"px;\":t+\": \"+o+\";\")}return t||void 0}function d(e,t){return Array.isArray(t)?t.reduce(d,e):null!=t&&!1!==t&&e.push(t),e}function v(){this.__d=!0}function h(e,t){return{__v:e,context:t,props:e.props,setState:v,forceUpdate:v,__d:!0,__h:[]}}function g(e,t){var r=e.contextType,n=r&&t[r.__c];return null!=r?n?n.props.value:r.__:t}var y=[];function m(r,n,a,c,_,v){if(null==r||\"boolean\"==typeof r)return\"\";if(\"object\"!=typeof r)return\"function\"==typeof r?\"\":s(r);var b=a.pretty,x=b&&\"string\"==typeof b?b:\"\\t\";if(Array.isArray(r)){for(var k=\"\",S=0;S<r.length;S++)b&&S>0&&(k+=\"\\n\"),k+=m(r[S],n,a,c,_,v);return k}if(void 0!==r.constructor)return\"\";var w,C=r.type,O=r.props,j=!1;if(\"function\"==typeof C){if(j=!0,!a.shallow||!c&&!1!==a.renderRootComponent){if(C===e){var A=[];return d(A,r.props.children),m(A,n,a,!1!==a.shallowHighOrder,_,v)}var F,H=r.__c=h(r,n);t.__b&&t.__b(r);var M=t.__r;if(C.prototype&&\"function\"==typeof C.prototype.render){var L=g(C,n);(H=r.__c=new C(O,L)).__v=r,H._dirty=H.__d=!0,H.props=O,null==H.state&&(H.state={}),null==H._nextState&&null==H.__s&&(H._nextState=H.__s=H.state),H.context=L,C.getDerivedStateFromProps?H.state=Object.assign({},H.state,C.getDerivedStateFromProps(H.props,H.state)):H.componentWillMount&&(H.componentWillMount(),H.state=H._nextState!==H.state?H._nextState:H.__s!==H.state?H.__s:H.state),M&&M(r),F=H.render(H.props,H.state,H.context)}else for(var T=g(C,n),E=0;H.__d&&E++<25;)H.__d=!1,M&&M(r),F=C.call(r.__c,O,T);return H.getChildContext&&(n=Object.assign({},n,H.getChildContext())),t.diffed&&t.diffed(r),m(F,n,a,!1!==a.shallowHighOrder,_,v)}C=(w=C).displayName||w!==Function&&w.name||function(e){var t=(Function.prototype.toString.call(e).match(/^\\s*function\\s+([^( ]+)/)||\"\")[1];if(!t){for(var r=-1,n=y.length;n--;)if(y[n]===e){r=n;break}r<0&&(r=y.push(e)-1),t=\"UnnamedComponent\"+r}return t}(w)}var $,D,N=\"<\"+C;if(O){var P=Object.keys(O);a&&!0===a.sortAttributes&&P.sort();for(var W=0;W<P.length;W++){var I=P[W],R=O[I];if(\"children\"!==I){if(!i.test(I)&&(a&&a.allAttributes||\"key\"!==I&&\"ref\"!==I&&\"__self\"!==I&&\"__source\"!==I)){if(\"defaultValue\"===I)I=\"value\";else if(\"defaultChecked\"===I)I=\"checked\";else if(\"defaultSelected\"===I)I=\"selected\";else if(\"className\"===I){if(void 0!==O.class)continue;I=\"class\"}else _&&l.test(I)&&(I=I.toLowerCase().replace(/^xlink:?/,\"xlink:\"));if(\"htmlFor\"===I){if(O.for)continue;I=\"for\"}\"style\"===I&&R&&\"object\"==typeof R&&(R=p(R)),\"a\"===I[0]&&\"r\"===I[1]&&\"boolean\"==typeof R&&(R=String(R));var U=a.attributeHook&&a.attributeHook(I,R,n,a,j);if(U||\"\"===U)N+=U;else if(\"dangerouslySetInnerHTML\"===I)D=R&&R.__html;else if(\"textarea\"===C&&\"value\"===I)$=R;else if((R||0===R||\"\"===R)&&\"function\"!=typeof R){if(!(!0!==R&&\"\"!==R||(R=I,a&&a.xml))){N=N+\" \"+I;continue}if(\"value\"===I){if(\"select\"===C){v=R;continue}\"option\"===C&&v==R&&void 0===O.selected&&(N+=\" selected\")}N=N+\" \"+I+'=\"'+s(R)+'\"'}}}else $=R}}if(b){var V=N.replace(/\\n\\s*/,\" \");V===N||~V.indexOf(\"\\n\")?b&&~N.indexOf(\"\\n\")&&(N+=\"\\n\"):N=V}if(N+=\">\",i.test(C))throw new Error(C+\" is not a valid HTML tag name in \"+N);var q,z=o.test(C)||a.voidElements&&a.voidElements.test(C),Z=[];if(D)b&&u(D)&&(D=\"\\n\"+x+f(D,x)),N+=D;else if(null!=$&&d(q=[],$).length){for(var B=b&&~N.indexOf(\"\\n\"),G=!1,J=0;J<q.length;J++){var K=q[J];if(null!=K&&!1!==K){var Q=m(K,n,a,!0,\"svg\"===C||\"foreignObject\"!==C&&_,v);if(b&&!B&&u(Q)&&(B=!0),Q)if(b){var X=Q.length>0&&\"<\"!=Q[0];G&&X?Z[Z.length-1]+=Q:Z.push(Q),G=X}else Z.push(Q)}}if(b&&B)for(var Y=Z.length;Y--;)Z[Y]=\"\\n\"+x+f(Z[Y],x)}if(Z.length||D)N+=Z.join(\"\");else if(a&&a.xml)return N.substring(0,N.length-1)+\" />\";return!z||q||D?(b&&~N.indexOf(\"\\n\")&&(N+=\"\\n\"),N=N+\"</\"+C+\">\"):N=N.replace(/>$/,\" />\"),N}var b={shallow:!0};S.render=S;var x=function(e,t){return S(e,t,b)},k=[];function S(n,o,i){o=o||{};var l=t.__s;t.__s=!0;var a,s=r(e,null);return s.__k=[n],a=i&&(i.pretty||i.voidElements||i.sortAttributes||i.shallow||i.allAttributes||i.xml||i.attributeHook)?m(n,o,i):F(n,o,!1,void 0,s),t.__c&&t.__c(n,k),t.__s=l,k.length=0,a}function w(e){return null==e||\"boolean\"==typeof e?null:\"string\"==typeof e||\"number\"==typeof e||\"bigint\"==typeof e?r(null,null,e):e}function C(e,t){return\"className\"===e?\"class\":\"htmlFor\"===e?\"for\":\"defaultValue\"===e?\"value\":\"defaultChecked\"===e?\"checked\":\"defaultSelected\"===e?\"selected\":t&&l.test(e)?e.toLowerCase().replace(/^xlink:?/,\"xlink:\"):e}function O(e,t){return\"style\"===e&&null!=t&&\"object\"==typeof t?p(t):\"a\"===e[0]&&\"r\"===e[1]&&\"boolean\"==typeof t?String(t):t}var j=Array.isArray,A=Object.assign;function F(r,n,l,a,f){if(null==r||!0===r||!1===r||\"\"===r)return\"\";if(\"object\"!=typeof r)return\"function\"==typeof r?\"\":s(r);if(j(r)){var u=\"\";f.__k=r;for(var c=0;c<r.length;c++)u+=F(r[c],n,l,a,f),r[c]=w(r[c]);return u}if(void 0!==r.constructor)return\"\";r.__=f,t.__b&&t.__b(r);var _=r.type,p=r.props;if(\"function\"==typeof _){var d;if(_===e)d=p.children;else{d=_.prototype&&\"function\"==typeof _.prototype.render?function(e,r){var n=e.type,o=g(n,r),i=new n(e.props,o);e.__c=i,i.__v=e,i.__d=!0,i.props=e.props,null==i.state&&(i.state={}),null==i.__s&&(i.__s=i.state),i.context=o,n.getDerivedStateFromProps?i.state=A({},i.state,n.getDerivedStateFromProps(i.props,i.state)):i.componentWillMount&&(i.componentWillMount(),i.state=i.__s!==i.state?i.__s:i.state);var l=t.__r;return l&&l(e),i.render(i.props,i.state,i.context)}(r,n):function(e,r){var n,o=h(e,r),i=g(e.type,r);e.__c=o;for(var l=t.__r,a=0;o.__d&&a++<25;)o.__d=!1,l&&l(e),n=e.type.call(o,e.props,i);return n}(r,n);var v=r.__c;v.getChildContext&&(n=A({},n,v.getChildContext()))}var y=F(d=null!=d&&d.type===e&&null==d.key?d.props.children:d,n,l,a,r);return t.diffed&&t.diffed(r),r.__=void 0,t.unmount&&t.unmount(r),y}var m,b,x=\"<\";if(x+=_,p)for(var k in m=p.children,p){var S=p[k];if(!(\"key\"===k||\"ref\"===k||\"__self\"===k||\"__source\"===k||\"children\"===k||\"className\"===k&&\"class\"in p||\"htmlFor\"===k&&\"for\"in p||i.test(k)))if(S=O(k=C(k,l),S),\"dangerouslySetInnerHTML\"===k)b=S&&S.__html;else if(\"textarea\"===_&&\"value\"===k)m=S;else if((S||0===S||\"\"===S)&&\"function\"!=typeof S){if(!0===S||\"\"===S){S=k,x=x+\" \"+k;continue}if(\"value\"===k){if(\"select\"===_){a=S;continue}\"option\"!==_||a!=S||\"selected\"in p||(x+=\" selected\")}x=x+\" \"+k+'=\"'+s(S)+'\"'}}var H=x;if(x+=\">\",i.test(_))throw new Error(_+\" is not a valid HTML tag name in \"+x);var M=\"\",L=!1;if(b)M+=b,L=!0;else if(\"string\"==typeof m)M+=s(m),L=!0;else if(j(m)){r.__k=m;for(var T=0;T<m.length;T++){var E=m[T];if(m[T]=w(E),null!=E&&!1!==E){var $=F(E,n,\"svg\"===_||\"foreignObject\"!==_&&l,a,r);$&&(M+=$,L=!0)}}}else if(null!=m&&!1!==m&&!0!==m){r.__k=[w(m)];var D=F(m,n,\"svg\"===_||\"foreignObject\"!==_&&l,a,r);D&&(M+=D,L=!0)}if(t.diffed&&t.diffed(r),r.__=void 0,t.unmount&&t.unmount(r),L)x+=M;else if(o.test(_))return H+\" />\";return x+\"</\"+_+\">\"}S.shallowRender=x;export default S;export{S as render,S as renderToStaticMarkup,S as renderToString,x as shallowRender};\n//# sourceMappingURL=index.module.js.map\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { render, VNode, createContext } from 'preact';\nimport renderToString from 'preact-render-to-string';\nimport { Container, VComponent } from '@adobe-commerce/elsie/lib';\nimport { Signal, signal } from '@adobe-commerce/elsie/lib/signals';\n\nexport const SlotQueueContext = createContext<Signal<Set<string>> | null>(null);\n\ntype RenderAPI = {\n remove: () => void;\n setProps: (cb: (prev: any) => any) => void;\n};\n\n/**\n * The `Render` class provides methods to render and unmount components, as well as to render components to a string.\n * @class\n *\n * @property {Function} render - Renders a component to a root element.\n * @property {Function} toString - Renders a component to a string.\n */\nexport class Render {\n private _provider: VNode<any>;\n\n constructor(provider: VNode<any>) {\n this._provider = provider;\n }\n\n /**\n * Renders a container to a root element.\n * @param Container - The container to render.\n * @param props - The container parameters.\n * @returns A function to render the component to a root element.\n */\n render<T>(Component: Container<T>, props: T) {\n /**\n * Renders a component to a root element.\n * @param rootElement - The root element to render the component to.\n * @returns A promise that resolves to an object with methods to control the rendered component.\n */\n return async (rootElement: HTMLElement): Promise<RenderAPI> => {\n if (!Component) throw new Error('Component is not defined');\n if (!rootElement) throw new Error('Root element is not defined');\n\n const initialData = (await Component.getInitialData?.(props)) ?? {};\n\n const state = signal<T>({ ...props });\n\n const queue = signal<Set<string>>(new Set());\n\n const provider = this._provider;\n\n const Root = ({ next }: { next: Signal<T> }) => {\n return (\n <SlotQueueContext.Provider value={queue}>\n <VComponent node={provider} {...provider.props}>\n <Component {...next.value} initialData={initialData} />\n </VComponent>\n </SlotQueueContext.Provider>\n );\n };\n\n // clear the root element\n rootElement.innerHTML = '';\n\n // clone the root element to initialize rendering on the background\n const tmp = document.createElement('div');\n\n // apply base design tokens and global styles to the root element\n rootElement.classList.add('dropin-design');\n\n render(<Root next={state} />, tmp);\n\n // API object to control the rendered component\n const API: RenderAPI = {\n remove: () => {\n render(null, tmp);\n },\n setProps: (cb: (prev: T) => T) => {\n const next = cb(state.peek());\n state.value = next;\n },\n };\n\n // wait for all slots to be resolved\n return new Promise((resolve) => {\n queue.subscribe((pending) => {\n if (pending.size === 0) {\n // apply base design tokens and global styles to the root element\n rootElement.classList.add('dropin-design');\n\n // append the rendered component to the DOM only when all slots are resolved\n rootElement.appendChild(tmp.firstChild ?? tmp);\n\n return resolve(API);\n }\n });\n });\n };\n }\n\n /**\n * UnRenders a component from a root element.\n * @param rootElement - The root element to unmount the component from.\n * @deprecated Use `remove` method from the returned object of the `mount` method instead.\n */\n unmount(rootElement: HTMLElement) {\n if (!rootElement) throw new Error('Root element is not defined');\n rootElement.firstChild?.remove();\n }\n\n /**\n * Renders a component to a string.\n * @param Component - The component to render.\n * @param props - The component props.\n * @param options - Optional rendering options.\n */\n async toString<T>(Component: Container<T>, props: T, options?: T) {\n if (!Component) throw new Error('Component is not defined');\n\n const initialData = (await Component.getInitialData?.(props)) ?? {};\n\n return renderToString(\n <VComponent node={this._provider} {...this._provider.props}>\n <Component {...props} initialData={initialData} />\n </VComponent>,\n {},\n { ...options }\n );\n }\n}\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { VNode, ComponentChildren } from 'preact';\nimport { classes } from '.';\n\nexport type VComponentProps = {\n node: VNode | VNode[];\n children?: ComponentChildren;\n [key: string]: any; // allow other unspecified props to be passed without any TS warning\n};\n\nexport function VComponent({ node, ...props }: VComponentProps) {\n if (!node) return null;\n\n if (Array.isArray(node)) {\n return (\n <>\n {node.map((n, key) => (\n <VComponent\n key={key}\n node={n}\n className={props.className}\n {...props}\n />\n ))}\n </>\n );\n }\n\n // @ts-ignore\n props.className = classes([node.props.className, props.className]);\n\n // @ts-ignore\n return <node.type ref={node.ref} key={node.key} {...node.props} {...props} />;\n}\n"],"names":["classes","result","item","className","isActive","BREAKPOINTS","resolveImageUrl","url","_opts","base","query","params","keyMapping","getImageParamsKeyMap","keyMappingKeys","opts","unusedMapping","acc","key","value","newKey","newKeyString","newValue","generateSrcset","imageURL","options","generateSrcsetUrl","relativeWidth","n","o","i","l","a","s","f","u","c","_","p","d","v","h","g","y","m","r","b","x","k","S","w","C","O","j","e","A","F","H","t","L","T","E","$","D","N","P","W","I","R","U","V","q","z","Z","B","G","J","K","Q","X","Y","M","SlotQueueContext","createContext","Render","provider","__publicField","Component","props","rootElement","initialData","_a","state","signal","queue","Root","next","jsx","VComponent","tmp","render","API","cb","resolve","pending","renderToString","node","Fragment"],"mappings":"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","x_google_ignoreList":[2]}
@@ -1 +0,0 @@
1
- export * from '../../types/elsie/src/lib/aem/assets'
package/lib/aem/assets.js DELETED
@@ -1,4 +0,0 @@
1
- /*! Copyright 2025 Adobe
2
- All Rights Reserved. */
3
- import{getConfigValue as b}from"./configs.js";import{p as l,I as u}from"../../chunks/Image.js";import"../../chunks/cjs.js";import"../../chunks/get-path-value.js";import"../../preact-jsx-runtime.js";import"../../chunks/icons/Add.js";import"../../i18n.js";import"../../chunks/vcomponent.js";import"../../chunks/image-params-keymap.js";import"../../signals.js";function d(){const t=b("commerce-assets-enabled");return t&&(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="boolean"&&t===!0)}function $(){return{quality:80,format:"webp"}}function p(t){let e=t;if(e.startsWith("//")){const{protocol:s}=window.location;console.log("protocol",s),e=s+e}return e}function f(t){return!!(typeof t=="string"?new URL(p(t)):t).pathname.startsWith("/adobe/assets/urn:aaid:aem")}function g(t,e,s={}){const r={...$(),...s},{format:i,crop:a,size:n,...o}=r,m=new URLSearchParams(o);if(a){const[h,w]=[a.xOrigin||0,a.yOrigin||0],[A,U]=[a.width||100,a.height||100],P=`${h}p,${w}p,${A}p,${U}p`;m.set("crop",P)}return n&&n.width&&n.height&&m.set("size",`${n.width},${n.height}`),`${t}/as/${e}.${i}?${m.toString()}`}function x(t,e,s={}){if(!d())return t;const r=new URL(p(t));if(!f(r))return t;const i=r.origin+r.pathname;return g(i,e,s)}function y(t){return e=>{const{wrapper:s,alias:c,params:r,imageProps:i,src:a}=t,n=s??document.createElement("div"),o=g(a||i.src,c,r);l.render(u,{...i,src:o,params:{width:r.width,crop:null,fit:null,auto:null}})(n),e.replaceWith(n)}}function D(t,e){function s(){const o=e.wrapper??document.createElement("div"),{imageProps:m}=e;l.render(u,m)(o),t.replaceWith(o)}if(!d()){s();return}const{imageProps:r,src:i,...a}=e,n=new URL(p(i??r.src));if(!f(n)){s();return}y({src:n.toString(),params:{width:r.width,height:r.height,...a.params},imageProps:r,alias:a.alias,wrapper:a.wrapper})(t)}export{g as generateAemAssetsOptimizedUrl,$ as getDefaultAemAssetsOptimizationParams,d as isAemAssetsEnabled,f as isAemAssetsUrl,y as makeAemAssetsImageSlot,x as tryGenerateAemAssetsOptimizedUrl,D as tryRenderAemAssetsImage};
4
- //# sourceMappingURL=assets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assets.js","sources":["/@dropins/tools/src/lib/aem/assets.ts"],"sourcesContent":["import { provider as UI, Image } from '@adobe-commerce/elsie/components';\nimport { getConfigValue } from '@adobe-commerce/elsie/lib/aem/configs';\n\ninterface AemAssetsParams {\n quality?: number;\n format?: string;\n crop?: {\n xOrigin?: number;\n yOrigin?: number;\n width?: number;\n height?: number;\n };\n size?: {\n width?: number;\n height?: number;\n };\n width?: number;\n height?: number;\n [key: string]: any;\n}\n\ninterface AemAssetsImageConfig {\n wrapper?: HTMLElement;\n alias: string;\n params: AemAssetsParams;\n imageProps: {\n src: string;\n width?: number;\n height?: number;\n [key: string]: any;\n };\n src?: string;\n}\n\ninterface RenderContext {\n replaceWith: (element: HTMLElement) => void;\n}\n\nexport function isAemAssetsEnabled(): boolean {\n const config = getConfigValue('commerce-assets-enabled');\n\n return config && (\n (typeof config === 'string' && config.toLowerCase() === 'true')\n || (typeof config === 'boolean' && config === true)\n );\n}\n\nexport function getDefaultAemAssetsOptimizationParams(): { quality: number; format: string } {\n // See: https://adobe-aem-assets-delivery-experimental.redoc.ly/\n return {\n quality: 80,\n format: 'webp',\n };\n}\n\n/**\n * Normalizes the given URL to ensure it is a valid URL.\n * @param {string} url - The URL to normalize.\n * @returns {string} The normalized URL.\n */\nfunction normalizeUrl(url: string): string {\n let imageUrl = url;\n\n if (imageUrl.startsWith('//')) {\n // Use current window's protocol.\n const { protocol } = window.location;\n console.log('protocol', protocol);\n imageUrl = protocol + imageUrl;\n }\n\n return imageUrl;\n}\n\nexport function isAemAssetsUrl(url: string | URL): boolean {\n const assetsUrl = typeof url === 'string' ? new URL(normalizeUrl(url)) : url;\n\n if (!assetsUrl.pathname.startsWith('/adobe/assets/urn:aaid:aem')) {\n return false;\n }\n\n return true;\n}\n\nexport function generateAemAssetsOptimizedUrl(url: string, alias: string, params: AemAssetsParams = {}): string {\n const defaultParams = getDefaultAemAssetsOptimizationParams();\n const mergedParams: AemAssetsParams = { ...defaultParams, ...params };\n\n // Destructure the ones that need special handling\n const {\n format,\n crop,\n size,\n ...optimizedParams\n } = mergedParams;\n\n const searchParams = new URLSearchParams(optimizedParams);\n\n if (crop) {\n const [xOrigin, yOrigin] = [crop.xOrigin || 0, crop.yOrigin || 0];\n const [width, height] = [crop.width || 100, crop.height || 100];\n\n const cropTransform = `${xOrigin}p,${yOrigin}p,${width}p,${height}p`;\n searchParams.set('crop', cropTransform);\n }\n\n // Both values must be present\n if (size && size.width && size.height) {\n searchParams.set('size', `${size.width},${size.height}`);\n }\n\n return `${url}/as/${alias}.${format}?${searchParams.toString()}`;\n}\n\nexport function tryGenerateAemAssetsOptimizedUrl(url: string, alias: string, params: AemAssetsParams = {}): string {\n const assetsEnabled = isAemAssetsEnabled();\n\n if (!(assetsEnabled)) {\n // No-op, doesn't do anything.\n return url;\n }\n\n const assetsUrl = new URL(normalizeUrl(url));\n\n if (!isAemAssetsUrl(assetsUrl)) {\n // Not an AEM Assets URL, so no-op.\n return url;\n }\n\n const base = assetsUrl.origin + assetsUrl.pathname;\n return generateAemAssetsOptimizedUrl(base, alias, params);\n}\n\nexport function makeAemAssetsImageSlot(\n config: AemAssetsImageConfig,\n) {\n return (ctx: RenderContext) => {\n const {\n wrapper,\n alias,\n params,\n imageProps,\n src,\n } = config;\n\n const container = wrapper ?? document.createElement('div');\n const imageSrc = generateAemAssetsOptimizedUrl(src || imageProps.src, alias, params);\n\n UI.render(Image as any, {\n ...imageProps,\n\n src: imageSrc,\n params: {\n width: params.width,\n\n // If not null, they will be applied by default.\n // And they are not compatible with the AEM Assets API.\n crop: null,\n fit: null,\n auto: null,\n },\n })(container);\n\n ctx.replaceWith(container);\n };\n}\n\nexport function tryRenderAemAssetsImage(ctx: RenderContext, config: AemAssetsImageConfig): void {\n // Renders an equivalent of the default image.\n function renderDefaultImage(): void {\n const container = config.wrapper ?? document.createElement('div');\n const { imageProps } = config;\n\n (UI.render as any)(Image, imageProps)(container);\n ctx.replaceWith(container);\n }\n\n const assetsEnabled = isAemAssetsEnabled();\n\n if (!(assetsEnabled)) {\n // No-op, render the default image.\n renderDefaultImage();\n return;\n }\n\n const { imageProps, src, ...slotConfig } = config;\n const assetsUrl = new URL(normalizeUrl(src ?? imageProps.src));\n\n if (!isAemAssetsUrl(assetsUrl)) {\n // Not an AEM Assets URL, so render the default image.\n renderDefaultImage();\n return;\n }\n\n makeAemAssetsImageSlot({\n // Use the default image props for params and src.\n // Unless overriden by the slot config.\n src: assetsUrl.toString(),\n params: {\n width: imageProps.width,\n height: imageProps.height,\n ...slotConfig.params,\n },\n imageProps,\n alias: slotConfig.alias,\n wrapper: slotConfig.wrapper,\n })(ctx);\n}\n"],"names":["isAemAssetsEnabled","config","getConfigValue","getDefaultAemAssetsOptimizationParams","normalizeUrl","url","imageUrl","protocol","isAemAssetsUrl","generateAemAssetsOptimizedUrl","alias","params","mergedParams","format","crop","size","optimizedParams","searchParams","xOrigin","yOrigin","width","height","cropTransform","tryGenerateAemAssetsOptimizedUrl","assetsUrl","base","makeAemAssetsImageSlot","ctx","wrapper","imageProps","src","container","imageSrc","UI","Image","tryRenderAemAssetsImage","renderDefaultImage","slotConfig"],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from '../../types/elsie/src/lib/aem/assets.test'
@@ -1,4 +0,0 @@
1
- /*! Copyright 2025 Adobe
2
- All Rights Reserved. */
3
- import{isAemAssetsEnabled as m,getDefaultAemAssetsOptimizationParams as n,isAemAssetsUrl as l,generateAemAssetsOptimizedUrl as o,tryGenerateAemAssetsOptimizedUrl as i,makeAemAssetsImageSlot as c,tryRenderAemAssetsImage as p}from"./assets.js";import{getConfigValue as r}from"./configs.js";import"../../chunks/Image.js";import"../../preact-jsx-runtime.js";import"../../chunks/icons/Add.js";import"../../i18n.js";import"../../chunks/cjs.js";import"../../chunks/vcomponent.js";import"../../chunks/image-params-keymap.js";import"../../signals.js";import"../../chunks/get-path-value.js";jest.mock("./configs",()=>({getConfigValue:jest.fn().mockImplementation(e=>{if(e==="commerce-assets-enabled")return!0})}));Object.defineProperty(window,"location",{value:{pathname:"/",origin:"https://example.com",protocol:"https:"}});describe("AEM Assets",()=>{beforeEach(()=>{jest.clearAllMocks()}),test("should be enabled",()=>{expect(m()).toBe(!0),r.mockReturnValueOnce("true"),expect(m()).toBe(!0)}),test("should be disabled",()=>{r.mockReturnValueOnce(!1),expect(m()).toBe(!1)}),test("should return default optimization params",()=>{const e=n();expect(e).toEqual({quality:80,format:"webp"})}),test("should return true if url is aem assets url",()=>{expect(l("https://example.com/adobe/assets/urn:aaid:aem:1234567890")).toBe(!0)}),test("should return false if url is not aem assets url",()=>{expect(l("https://example.com/image.jpg")).toBe(!1)}),test("should return true if url is aem assets url with protocol relative path",()=>{expect(l("//example.com/adobe/assets/urn:aaid:aem:1234567890")).toBe(!0)}),test("should generate aem assets optimized url",()=>{const t=o("https://example.com/adobe/assets/urn:aaid:aem:1234567890","test",{quality:80,format:"webp"});expect(t).toBe("https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80")}),test("should generate aem assets optimized url with default params",()=>{const a=o("https://example.com/adobe/assets/urn:aaid:aem:1234567890","test");expect(a).toBe("https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80")}),test("should generate aem assets optimized url with crop",()=>{const t=o("https://example.com/adobe/assets/urn:aaid:aem:1234567890","test",{quality:80,format:"webp",crop:{xOrigin:0,yOrigin:0}});expect(t).toBe("https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&crop=0p%2C0p%2C100p%2C100p")}),test("should generate aem assets optimized url with size",()=>{const t=o("https://example.com/adobe/assets/urn:aaid:aem:1234567890","test",{quality:80,format:"webp",size:{width:100,height:100}});expect(t).toBe("https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&size=100%2C100")}),test("should generate aem assets optimized url with width and height",()=>{const t=o("https://example.com/adobe/assets/urn:aaid:aem:1234567890","test",{quality:80,format:"webp",width:100,height:100});expect(t).toBe("https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&width=100&height=100")}),test("should try generate aem assets optimized url",()=>{const t=i("https://example.com/adobe/assets/urn:aaid:aem:1234567890","test",{quality:80,format:"webp",width:100,height:100});expect(t).toBe("https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&width=100&height=100")}),test("should try generate aem assets optimized url with default params",()=>{const a=i("https://example.com/adobe/assets/urn:aaid:aem:1234567890","test");expect(a).toBe("https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80")}),test("should try generate aem assets optimized url with crop",()=>{const t=i("https://example.com/adobe/assets/urn:aaid:aem:1234567890","test",{quality:80,format:"webp",crop:{xOrigin:0,yOrigin:0,width:100,height:100}});expect(t).toBe("https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&crop=0p%2C0p%2C100p%2C100p")}),test("should return original url if aem assets is disabled",()=>{r.mockReturnValueOnce(!1);const e="https://example.com/adobe/assets/urn:aaid:aem:1234567890",t=i(e,"test",{quality:80,format:"webp"});expect(t).toBe(e)}),test("should return original url if url is not aem assets url",()=>{const e="https://example.com/image.jpg",t=i(e,"test",{quality:80,format:"webp"});expect(t).toBe(e)}),test("should make aem assets image slot",()=>{const e=c({alias:"test",params:{},imageProps:{src:"https://example.com/adobe/assets/urn:aaid:aem:1234567890"}}),s=document.createElement("div");e({replaceWith:a=>{s.appendChild(a)}})}),test("should try render aem assets image",()=>{const e=document.createElement("div");p({replaceWith:t=>{e.appendChild(t)}},{alias:"test",params:{},imageProps:{src:"https://example.com/adobe/assets/urn:aaid:aem:1234567890"}})}),test("should render default image if aem assets is disabled",()=>{r.mockReturnValueOnce(!1);const e=document.createElement("div");p({replaceWith:t=>{e.appendChild(t)}},{alias:"test",params:{},imageProps:{src:"https://example.com/adobe/assets/urn:aaid:aem:1234567890"}})}),test("should render default image if url is not aem assets url",()=>{const e=document.createElement("div");p({replaceWith:t=>{e.appendChild(t)}},{alias:"test",params:{},imageProps:{src:"https://example.com/image.jpg"}})})});
4
- //# sourceMappingURL=assets.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assets.test.js","sources":["/@dropins/tools/src/lib/aem/assets.test.ts"],"sourcesContent":["import {\n isAemAssetsEnabled,\n getDefaultAemAssetsOptimizationParams,\n isAemAssetsUrl,\n generateAemAssetsOptimizedUrl,\n tryGenerateAemAssetsOptimizedUrl,\n makeAemAssetsImageSlot,\n tryRenderAemAssetsImage,\n} from './assets';\n\nimport { getConfigValue } from './configs';\n\n// Mock the config\njest.mock('./configs', () => ({\n getConfigValue: jest.fn().mockImplementation((key: string) => {\n if (key === 'commerce-assets-enabled') {\n return true;\n }\n return undefined;\n }),\n}));\n\n// Mock window.location\nObject.defineProperty(window, 'location', {\nvalue: {\n pathname: '/',\n origin: 'https://example.com',\n protocol: 'https:',\n},\n});\n\ndescribe('AEM Assets', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n test('should be enabled', () => {\n expect(isAemAssetsEnabled()).toBe(true);\n\n (getConfigValue as jest.Mock).mockReturnValueOnce('true');\n expect(isAemAssetsEnabled()).toBe(true);\n });\n\n test('should be disabled', () => {\n (getConfigValue as jest.Mock).mockReturnValueOnce(false);\n expect(isAemAssetsEnabled()).toBe(false);\n });\n\n test('should return default optimization params', () => {\n const params = getDefaultAemAssetsOptimizationParams();\n expect(params).toEqual({\n quality: 80,\n format: 'webp',\n });\n });\n\n test('should return true if url is aem assets url', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n expect(isAemAssetsUrl(url)).toBe(true);\n });\n\n test('should return false if url is not aem assets url', () => {\n const url = 'https://example.com/image.jpg';\n expect(isAemAssetsUrl(url)).toBe(false);\n });\n\n test('should return true if url is aem assets url with protocol relative path', () => {\n const url = '//example.com/adobe/assets/urn:aaid:aem:1234567890';\n expect(isAemAssetsUrl(url)).toBe(true);\n });\n\n test('should generate aem assets optimized url', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const params = {\n quality: 80,\n format: 'webp',\n };\n const optimizedUrl = generateAemAssetsOptimizedUrl(url, alias, params);\n expect(optimizedUrl).toBe('https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80');\n });\n\n test('should generate aem assets optimized url with default params', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const optimizedUrl = generateAemAssetsOptimizedUrl(url, alias);\n expect(optimizedUrl).toBe('https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80');\n });\n\n test('should generate aem assets optimized url with crop', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const params = {\n quality: 80,\n format: 'webp',\n crop: {\n xOrigin: 0,\n yOrigin: 0,\n },\n };\n const optimizedUrl = generateAemAssetsOptimizedUrl(url, alias, params);\n expect(optimizedUrl).toBe('https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&crop=0p%2C0p%2C100p%2C100p');\n });\n\n test('should generate aem assets optimized url with size', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const params = {\n quality: 80,\n format: 'webp',\n size: {\n width: 100,\n height: 100,\n },\n };\n const optimizedUrl = generateAemAssetsOptimizedUrl(url, alias, params);\n expect(optimizedUrl).toBe('https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&size=100%2C100');\n });\n\n test('should generate aem assets optimized url with width and height', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const params = {\n quality: 80,\n format: 'webp',\n width: 100,\n height: 100,\n };\n const optimizedUrl = generateAemAssetsOptimizedUrl(url, alias, params);\n expect(optimizedUrl).toBe('https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&width=100&height=100');\n });\n\n test('should try generate aem assets optimized url', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const params = {\n quality: 80,\n format: 'webp',\n width: 100,\n height: 100,\n };\n const optimizedUrl = tryGenerateAemAssetsOptimizedUrl(url, alias, params);\n expect(optimizedUrl).toBe('https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&width=100&height=100');\n });\n\n test('should try generate aem assets optimized url with default params', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const optimizedUrl = tryGenerateAemAssetsOptimizedUrl(url, alias);\n expect(optimizedUrl).toBe('https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80');\n });\n\n test('should try generate aem assets optimized url with crop', () => {\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const params = {\n quality: 80,\n format: 'webp',\n crop: {\n xOrigin: 0,\n yOrigin: 0,\n width: 100,\n height: 100,\n },\n };\n const optimizedUrl = tryGenerateAemAssetsOptimizedUrl(url, alias, params);\n expect(optimizedUrl).toBe('https://example.com/adobe/assets/urn:aaid:aem:1234567890/as/test.webp?quality=80&crop=0p%2C0p%2C100p%2C100p');\n }); \n\n test('should return original url if aem assets is disabled', () => {\n (getConfigValue as jest.Mock).mockReturnValueOnce(false);\n const url = 'https://example.com/adobe/assets/urn:aaid:aem:1234567890';\n const alias = 'test';\n const params = {\n quality: 80,\n format: 'webp',\n };\n const optimizedUrl = tryGenerateAemAssetsOptimizedUrl(url, alias, params); \n expect(optimizedUrl).toBe(url);\n });\n\n test('should return original url if url is not aem assets url', () => {\n const url = 'https://example.com/image.jpg';\n const alias = 'test';\n const params = {\n quality: 80,\n format: 'webp',\n };\n const optimizedUrl = tryGenerateAemAssetsOptimizedUrl(url, alias, params);\n expect(optimizedUrl).toBe(url);\n });\n\n test('should make aem assets image slot', () => {\n const slot = makeAemAssetsImageSlot({\n alias: 'test',\n params: {},\n imageProps: {\n src: 'https://example.com/adobe/assets/urn:aaid:aem:1234567890',\n },\n });\n const container = document.createElement('div');\n slot({ replaceWith: (element: HTMLElement) => {\n container.appendChild(element);\n } });\n });\n\n test('should try render aem assets image', () => {\n const container = document.createElement('div');\n const ctx = {\n replaceWith: (element: HTMLElement) => {\n container.appendChild(element);\n },\n };\n const config = {\n alias: 'test',\n params: {},\n imageProps: {\n src: 'https://example.com/adobe/assets/urn:aaid:aem:1234567890',\n },\n };\n tryRenderAemAssetsImage(ctx, config);\n });\n\n test('should render default image if aem assets is disabled', () => {\n (getConfigValue as jest.Mock).mockReturnValueOnce(false);\n const container = document.createElement('div');\n const ctx = {\n replaceWith: (element: HTMLElement) => {\n container.appendChild(element);\n },\n };\n const config = {\n alias: 'test',\n params: {},\n imageProps: {\n src: 'https://example.com/adobe/assets/urn:aaid:aem:1234567890',\n },\n };\n tryRenderAemAssetsImage(ctx, config);\n });\n\n test('should render default image if url is not aem assets url', () => {\n const container = document.createElement('div');\n const ctx = {\n replaceWith: (element: HTMLElement) => {\n container.appendChild(element);\n },\n };\n const config = {\n alias: 'test',\n params: {},\n imageProps: {\n src: 'https://example.com/image.jpg',\n },\n };\n tryRenderAemAssetsImage(ctx, config);\n });\n});"],"names":["key","isAemAssetsEnabled","getConfigValue","params","getDefaultAemAssetsOptimizationParams","isAemAssetsUrl","optimizedUrl","generateAemAssetsOptimizedUrl","tryGenerateAemAssetsOptimizedUrl","url","slot","makeAemAssetsImageSlot","container","element","tryRenderAemAssetsImage"],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from '../../types/elsie/src/lib/aem/configs.test'
@@ -1,4 +0,0 @@
1
- /*! Copyright 2025 Adobe
2
- All Rights Reserved. */
3
- import{initializeConfig as o,getConfigValue as s,getRootPath as n,getListOfRootPaths as c,isMultistore as u,getHeaders as a,resetConfig as f}from"./configs.js";import"../../chunks/cjs.js";import"../../chunks/get-path-value.js";describe("AEM Config",()=>{const t={public:{default:{headers:{all:{"x-test":"test"},commerce:{"x-commerce":"commerce"}}}}};beforeEach(()=>{i("/"),f()}),afterEach(()=>{jest.clearAllMocks(),jest.restoreAllMocks()}),test("should initialize config (default)",()=>{const e={public:{default:{foo:"bar"}}},l=o(e);expect(l).toEqual(e.public.default)}),test("should initialize config with default config if root path is not found",()=>{i("/not-found/");const e=o(t);expect(e).toEqual(t.public.default)}),test("should initialize config with default config if root path is empty",()=>{i("/sub-path/");const e=o({...t,public:{...t.public,"/sub-path/":{}}});expect(e).toEqual(t.public.default)}),test("should initialize config with overrides if root path is not empty",()=>{i("/sub-path/");const e=o({...t,public:{...t.public,"/sub-path/":{headers:{all:{"x-test":"test2"}}}}});expect(e).toEqual({headers:{all:{"x-test":"test2"},commerce:{"x-commerce":"commerce"}}})}),test("should throw error if no config is initialized",async()=>{expect(()=>s("foo")).toThrow("Configuration not initialized. Call initializeConfig() first.")}),test("should get config value",async()=>{o({public:{default:{foo:"bar"}}}),expect(s("foo")).toBe("bar")}),test("should get config value from root path",()=>{i("/sub-path/"),o({...t,public:{...t.public,"/sub-path/":{foo:"baz",nested:{foo:"nested"}}}}),expect(s("headers.all.x-test")).toBe("test"),expect(s("foo")).toBe("baz"),expect(s("nested.foo")).toBe("nested")}),test("should warn if value is not found",async()=>{const e=jest.spyOn(console,"warn").mockImplementation(()=>{});o(t),s("foo.bar"),expect(e).toHaveBeenCalledWith("Property foo.bar does not exist in the object")}),test("should warn if the root path has no config",async()=>{const e=jest.spyOn(console,"warn").mockImplementation(()=>{}),l=n(null);expect(l).toBe("/"),expect(e).toHaveBeenCalledWith("No config found. Please call initializeConfig() first.")}),test("should warn if the root path is not found",async()=>{i("/no-found/");const e=n({public:{default:{}}});expect(e).toBe("/")}),test("should get default root path",async()=>{i("/path/"),o(t),expect(n()).toBe("/")}),test("should get root path from public config",async()=>{i("/test/"),o({...t,public:{...t.public,"/test/":{}}}),expect(n()).toBe("/test/")}),test("should get list of root paths",async()=>{o({...t,public:{...t.public,"/test/":{},"/test2/":{}}}),expect(c()).toEqual(["/test/","/test2/"])}),test("should warn if list of root paths has no config",async()=>{const e=jest.spyOn(console,"warn").mockImplementation(()=>{}),l=c();expect(e).toHaveBeenCalledWith("No config found. Please call initializeConfig() first."),expect(l).toEqual([])}),test("should check if multistore",async()=>{o(t),expect(u()).toBe(!1),o({...t,public:{...t.public,"/test/":{}}}),expect(u()).toBe(!0)}),test("should throw error if headers are not initialized",async()=>{expect(()=>a("all")).toThrow("Configuration not initialized. Call initializeConfig() first.")}),test("should get headers",async()=>{o(t),expect(a("all")).toEqual(t.public.default.headers.all),expect(a("commerce")).toEqual({...t.public.default.headers.all,...t.public.default.headers.commerce})}),test('should get "all" headers if no config is found',async()=>{o(t),expect(a("not-found")).toEqual({...t.public.default.headers.all})}),test("should get empty headers if no config is found",async()=>{o({public:{default:{}}}),expect(a("not-found")).toEqual({})})});function i(t){Object.defineProperty(window,"location",{value:{pathname:t,origin:"http://localhost"}})}
4
- //# sourceMappingURL=configs.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configs.test.js","sources":["/@dropins/tools/src/lib/aem/configs.test.ts"],"sourcesContent":["import {\n resetConfig,\n getRootPath,\n getListOfRootPaths,\n isMultistore,\n getConfigValue,\n getHeaders,\n initializeConfig,\n} from './configs';\n\ndescribe('AEM Config', () => {\n const mockConfig = {\n public: {\n default: {\n headers: {\n all: {\n 'x-test': 'test',\n },\n commerce: {\n 'x-commerce': 'commerce',\n },\n },\n },\n },\n };\n\n beforeEach(() => {\n mockLocation('/');\n resetConfig();\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n jest.restoreAllMocks();\n });\n\n test('should initialize config (default)', () => {\n const mockConfig = {\n public: {\n default: {\n foo: 'bar',\n },\n },\n };\n\n const rootConfig = initializeConfig(mockConfig);\n\n // Test config value retrieval\n expect(rootConfig).toEqual(mockConfig.public.default);\n });\n\n test('should initialize config with default config if root path is not found', () => {\n mockLocation('/not-found/');\n\n const rootConfig = initializeConfig(mockConfig);\n\n // Test config value retrieval\n expect(rootConfig).toEqual(mockConfig.public.default);\n });\n\n test('should initialize config with default config if root path is empty', () => {\n mockLocation('/sub-path/');\n\n const rootConfig = initializeConfig({\n ...mockConfig,\n public: {\n ...mockConfig.public,\n '/sub-path/': {},\n },\n });\n\n // Test config value retrieval\n expect(rootConfig).toEqual(mockConfig.public.default);\n });\n\n test('should initialize config with overrides if root path is not empty', () => {\n mockLocation('/sub-path/');\n\n const rootConfig = initializeConfig({\n ...mockConfig,\n public: {\n ...mockConfig.public,\n '/sub-path/': {\n headers: {\n all: {\n 'x-test': 'test2',\n },\n },\n },\n },\n });\n\n // Test config value retrieval\n expect(rootConfig).toEqual({\n headers: {\n all: {\n 'x-test': 'test2',\n },\n commerce: {\n 'x-commerce': 'commerce',\n },\n },\n });\n });\n\n test('should throw error if no config is initialized', async () => {\n expect(() => getConfigValue('foo')).toThrow(\n 'Configuration not initialized. Call initializeConfig() first.'\n );\n });\n\n test('should get config value', async () => {\n initializeConfig({\n public: {\n default: {\n foo: 'bar',\n },\n },\n });\n\n expect(getConfigValue('foo')).toBe('bar');\n });\n\n test('should get config value from root path', () => {\n mockLocation('/sub-path/');\n\n initializeConfig({\n ...mockConfig,\n public: {\n ...mockConfig.public,\n '/sub-path/': {\n foo: 'baz',\n nested: {\n foo: 'nested',\n },\n },\n },\n });\n\n expect(getConfigValue('headers.all.x-test')).toBe('test');\n expect(getConfigValue('foo')).toBe('baz');\n expect(getConfigValue('nested.foo')).toBe('nested');\n });\n\n test('should warn if value is not found', async () => {\n const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});\n initializeConfig(mockConfig);\n\n getConfigValue('foo.bar');\n\n expect(consoleSpy).toHaveBeenCalledWith(\n 'Property foo.bar does not exist in the object'\n );\n });\n\n test('should warn if the root path has no config', async () => {\n const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});\n\n const rootPath = getRootPath(null);\n\n expect(rootPath).toBe('/');\n\n expect(consoleSpy).toHaveBeenCalledWith(\n 'No config found. Please call initializeConfig() first.'\n );\n });\n\n test('should warn if the root path is not found', async () => {\n mockLocation('/no-found/');\n\n const rootPath = getRootPath({\n public: {\n default: {},\n },\n });\n\n expect(rootPath).toBe('/');\n });\n\n test('should get default root path', async () => {\n mockLocation('/path/');\n\n initializeConfig(mockConfig);\n\n expect(getRootPath()).toBe('/');\n });\n\n test('should get root path from public config', async () => {\n mockLocation('/test/');\n\n initializeConfig({\n ...mockConfig,\n public: {\n ...mockConfig.public,\n '/test/': {},\n },\n });\n\n expect(getRootPath()).toBe('/test/');\n });\n\n test('should get list of root paths', async () => {\n initializeConfig({\n ...mockConfig,\n public: {\n ...mockConfig.public,\n '/test/': {},\n '/test2/': {},\n },\n });\n\n expect(getListOfRootPaths()).toEqual(['/test/', '/test2/']);\n });\n\n test('should warn if list of root paths has no config', async () => {\n const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});\n\n const rootPaths = getListOfRootPaths();\n\n expect(consoleSpy).toHaveBeenCalledWith(\n 'No config found. Please call initializeConfig() first.'\n );\n\n expect(rootPaths).toEqual([]);\n });\n\n test('should check if multistore', async () => {\n initializeConfig(mockConfig);\n\n expect(isMultistore()).toBe(false);\n\n initializeConfig({\n ...mockConfig,\n public: {\n ...mockConfig.public,\n '/test/': {},\n },\n });\n\n expect(isMultistore()).toBe(true);\n });\n\n test('should throw error if headers are not initialized', async () => {\n expect(() => getHeaders('all')).toThrow(\n 'Configuration not initialized. Call initializeConfig() first.'\n );\n });\n\n test('should get headers', async () => {\n initializeConfig(mockConfig);\n\n // All headers\n expect(getHeaders('all')).toEqual(mockConfig.public.default.headers.all);\n expect(getHeaders('commerce')).toEqual({\n ...mockConfig.public.default.headers.all,\n ...mockConfig.public.default.headers.commerce,\n });\n });\n\n test('should get \"all\" headers if no config is found', async () => {\n initializeConfig(mockConfig);\n\n expect(getHeaders('not-found')).toEqual({\n ...mockConfig.public.default.headers.all,\n });\n });\n\n test('should get empty headers if no config is found', async () => {\n initializeConfig({\n public: {\n default: {},\n },\n });\n\n expect(getHeaders('not-found')).toEqual({});\n });\n});\n\nfunction mockLocation(pathname: string) {\n Object.defineProperty(window, 'location', {\n value: {\n pathname,\n origin: 'http://localhost',\n },\n });\n}\n"],"names":["mockConfig","mockLocation","resetConfig","rootConfig","initializeConfig","getConfigValue","consoleSpy","rootPath","getRootPath","getListOfRootPaths","rootPaths","isMultistore","getHeaders","pathname"],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- interface AemAssetsParams {
2
- quality?: number;
3
- format?: string;
4
- crop?: {
5
- xOrigin?: number;
6
- yOrigin?: number;
7
- width?: number;
8
- height?: number;
9
- };
10
- size?: {
11
- width?: number;
12
- height?: number;
13
- };
14
- width?: number;
15
- height?: number;
16
- [key: string]: any;
17
- }
18
- interface AemAssetsImageConfig {
19
- wrapper?: HTMLElement;
20
- alias: string;
21
- params: AemAssetsParams;
22
- imageProps: {
23
- src: string;
24
- width?: number;
25
- height?: number;
26
- [key: string]: any;
27
- };
28
- src?: string;
29
- }
30
- interface RenderContext {
31
- replaceWith: (element: HTMLElement) => void;
32
- }
33
- export declare function isAemAssetsEnabled(): boolean;
34
- export declare function getDefaultAemAssetsOptimizationParams(): {
35
- quality: number;
36
- format: string;
37
- };
38
- export declare function isAemAssetsUrl(url: string | URL): boolean;
39
- export declare function generateAemAssetsOptimizedUrl(url: string, alias: string, params?: AemAssetsParams): string;
40
- export declare function tryGenerateAemAssetsOptimizedUrl(url: string, alias: string, params?: AemAssetsParams): string;
41
- export declare function makeAemAssetsImageSlot(config: AemAssetsImageConfig): (ctx: RenderContext) => void;
42
- export declare function tryRenderAemAssetsImage(ctx: RenderContext, config: AemAssetsImageConfig): void;
43
- export {};
44
- //# sourceMappingURL=assets.d.ts.map