Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 1x 1x 1x 1x | export const ICM_CONFIG_MATCH = `^/INTERSHOP/web/WFS/(?<channel>[\\w-]+)/(?<lang>[\\w-]+)/(?<application>[\\w-]+)/(?<currency>[\\w-]+)`;
const PWA_CONFIG_BUILD = ';channel=$<channel>;lang=$<lang>;application=$<application>';
interface HybridMappingEntry {
/** ID for grouping */
id: string;
/** regex for detecting ICM URL */
icm: string;
/** regex for building PWA URL */
pwaBuild: string;
/** regex for detecting PWA URL */
pwa: string;
/** regex for building ICM URL (w/o web url) */
icmBuild: string;
/** handler */
handledBy: 'icm' | 'pwa';
}
/**
* base for generating ICM URLs.
*
* usable variables:
* - channel
* - lang
* - application
* - currency
*/
export const ICM_WEB_URL = '/INTERSHOP/web/WFS/$<channel>/$<lang>/$<application>/$<currency>';
/**
* Mapping table for running PWA and ICM in parallel
*
* NOTE:
* THIS MAPPING TABLE IS JUST AN EXAMPLE IMPLEMENTATION.
* It does not define mappings for all routes that could be handled in the PWA or the ICM.
* It needs to be adapted according to the requirements of the particular project.
*/
export const HYBRID_MAPPING_TABLE: HybridMappingEntry[] = [
{
id: 'Home',
icm: `${ICM_CONFIG_MATCH}/(Default-Start|ViewHomepage-Start).*$`,
pwaBuild: `home${PWA_CONFIG_BUILD}`,
pwa: `^/home.*$`,
icmBuild: `ViewHomepage-Start`,
handledBy: 'pwa',
},
{
id: 'Product Detail Page',
icm: `${ICM_CONFIG_MATCH}/ViewProduct-Start.*(\\?|&)SKU=(?<sku>[\\w-]+).*$`,
pwaBuild: `product/$<sku>${PWA_CONFIG_BUILD}`,
pwa: `/(?!ctg)((?!.*-ctg.*-prd).*-)?prd(.*?)(-ctg(.*))?$`,
icmBuild: `ViewProduct-Start?SKU=$2`,
handledBy: 'pwa',
},
{
id: 'Category Page',
icm: `${ICM_CONFIG_MATCH}/ViewStandardCatalog-Browse.*(\\?|&)CatalogID=(?<catalog>[\\w-]+).*$`,
pwaBuild: `category/$<catalog>${PWA_CONFIG_BUILD}`,
pwa: `^/(?!category|categoryref/.*$)(.*-)?ctg([^?]*)`,
icmBuild: `ViewStandardCatalog-Browse?CatalogID=$2&CategoryName=$2`,
handledBy: 'pwa',
},
{
id: 'Shopping Basket',
icm: `${ICM_CONFIG_MATCH}/.*ViewCart-View$`,
pwaBuild: `basket${PWA_CONFIG_BUILD}`,
pwa: '^/basket.*$',
icmBuild: 'ViewCart-View',
handledBy: 'icm',
},
{
id: 'Login',
icm: `${ICM_CONFIG_MATCH}/ViewUserAccount-ShowLogin.*$`,
pwaBuild: `login${PWA_CONFIG_BUILD}`,
pwa: '^/login.*$',
icmBuild: 'ViewUserAccount-ShowLogin',
handledBy: 'pwa',
},
{
id: 'Password Reset',
icm: `${ICM_CONFIG_MATCH}/ViewForgotLoginData-NewPassword\\?uid=(?<uid>[^&]+)&Hash=(?<hash>[0-9a-f-]+).*$`,
pwaBuild: `forgotPassword/updatePassword${PWA_CONFIG_BUILD}?uid=$<uid>&Hash=$<hash>`,
pwa: `^/forgotPassword/updatePassword?uid=([^&]+)&Hash=([0-9a-f-]+).*$`,
icmBuild: 'ViewForgotLoginData-NewPassword\\?uid=$1&Hash=$2',
handledBy: 'pwa',
},
{
id: 'Content Pages',
icm: `${ICM_CONFIG_MATCH}/ViewContent-Start\\?PageletEntryPointID=($<id>.*?)(&.*|)$`,
pwaBuild: `page/$<id>${PWA_CONFIG_BUILD}`,
pwa: '^/page/(.*)$',
icmBuild: 'ViewContent-Start?PageletEntryPointID=$1',
handledBy: 'icm',
},
{
id: 'My Account',
icm: `${ICM_CONFIG_MATCH}/ViewUserAccount-Start.*$`,
pwaBuild: `account${PWA_CONFIG_BUILD}`,
pwa: '^/account.*$',
icmBuild: 'ViewUserAccount-Start',
handledBy: 'pwa',
},
{
id: 'Register',
icm: `${ICM_CONFIG_MATCH}/ViewUserAccount-ShowRegister.*$`,
pwaBuild: `register${PWA_CONFIG_BUILD}`,
pwa: '^/register.*$',
icmBuild: 'ViewUserAccount-ShowRegister',
handledBy: 'pwa',
},
{
id: 'Product Compare',
icm: `${ICM_CONFIG_MATCH}/ViewProductCompare-Show.*$`,
pwaBuild: `compare${PWA_CONFIG_BUILD}`,
pwa: '^/compare.*$',
icmBuild: 'ViewProductCompare-Show',
handledBy: 'pwa',
},
{
id: 'Quick Order',
icm: `${ICM_CONFIG_MATCH}/ViewQuickorder-Start.*$`,
pwaBuild: `quick-order${PWA_CONFIG_BUILD}`,
pwa: '^/quick-order.*$',
icmBuild: 'ViewQuickorder-Start',
handledBy: 'icm',
},
];
|