@netvlies/utility-collection
Version:
Collection of frequently used utilities by Netvlies
95 lines (89 loc) • 3.4 kB
JavaScript
const BUNDLE_NAME = 'NVS Utility Collection';
// Globals
class Logger {
constructor(appName = BUNDLE_NAME) {
this.appName = appName;
this.formatMessage = (message, type) => {
return `[${this.appName} ${type}]: ${typeof message === 'object' ? JSON.stringify(message) : message}`;
};
this.error = (message) => {
console.error(this.formatMessage(message, 'error'));
};
this.info = (message) => {
console.info(this.formatMessage(message, 'info'));
};
this.warn = (message) => {
console.warn(this.formatMessage(message, 'warning'));
};
}
}
const useLogger = (appName) => new Logger(appName);
// Utils
class GTM {
constructor(baseEventData = {}, dataLayer = (window.dataLayer = window.dataLayer || []), logging = false) {
this.baseEventData = baseEventData;
this.dataLayer = dataLayer;
this.logging = logging;
this.logger = useLogger();
this.constructDataObject = (event, data) => {
return Object.assign(Object.assign(Object.assign({ event }, this.baseEventData), data), { timestamp: new Date().getTime() });
};
this.push = (event, data) => {
if (this.logging && data) {
this.logger.info(data);
}
this.dataLayer.push(this.constructDataObject(event, data || {}));
};
this.purchase = (data) => {
if (this.logging) {
this.logger.info(data);
}
this.dataLayer.push(this.constructDataObject('purchase', data || {}));
};
}
}
const useGTM = (baseEventData, dataLayer, logging = false) => new GTM(baseEventData, dataLayer, logging);
function stringify(obj, prefix = '', separator = '&') {
return Object.entries(obj).reduce((queryString, [key, value]) => {
const encodedKey = prefix
? encodeURIComponent(`${prefix}[${key}]`)
: encodeURIComponent(key);
if (typeof value === 'object' && value !== null) {
const nestedQuery = stringify(value, encodedKey);
return queryString ? `${queryString}${separator}${nestedQuery}` : nestedQuery;
}
else {
const encodedValue = encodeURIComponent(value);
const keyValueString = `${encodedKey}=${encodedValue}`;
return queryString ? `${queryString}${separator}${keyValueString}` : keyValueString;
}
}, '');
}
// Modules
class DynamicURL {
constructor(url) {
this.url = url;
this.logger = useLogger();
}
setQueryParams(query) {
this.url = `${this.url}?${stringify(query)}`;
return this;
}
setRouteParams(replaceValue) {
this.url =
typeof replaceValue !== 'object'
? this.url.replace(/ *\{[^)]*\} */g, replaceValue)
: Object.entries(replaceValue).reduce((acc, currentVal) => acc.replace(`{${currentVal[0]}}`, currentVal[1]), this.url);
return this;
}
setDynamicRoute(replaceValue) {
this.logger.warn('Method "setDynamicRoute" is deprecated, please use "setRouteParams" instead.');
this.setRouteParams(replaceValue);
return this;
}
resolve() {
return this.url;
}
}
export { DynamicURL, GTM, Logger, useGTM, useLogger };
//# sourceMappingURL=index.esm.js.map