JSFiddle - React, Tailwind, and code Playground
by morphcast
JavaScript
async function buildVariableName({
version,
contextType = null,
contextID = null,
aggregateFreq,
timeStr,
segment, // optional object
segmentHash,
segmentStr,
subContextType = null,
subContextID = null
}) {
if (segment) {
segmentStr = segmentToStr(segment);
segmentHash = await hash(segmentStr);
}
if (!version || !aggregateFreq || !timeStr || (!segmentHash || !segmentStr)) {
throw new Error('Missing required parameters');
}
if (contextType === null && contextID !== null) {
throw new Error('Invalid parameters: contextType cannot be null if contextID is not null');
}
if (subContextType === null && subContextID !== null) {
throw new Error('Invalid parameters: subContextType cannot be null if subContextID is not null');
}
let variableName = `DataStatistics!${version}!`;
variableName += (contextType === null) ? 'none' : contextType;
variableName += '!';
variableName += (contextID === null) ? 'none' : contextID;
variableName += '!';
variableName += `${aggregateFreq}!${timeStr}!${segmentHash}!${segmentStr}!`;
variableName += (subContextType === null) ? 'none' : subContextType;
variableName += '!';
variableName += (subContextID === null) ? 'none' : subContextID;
return variableName;
}
async function hash(input) {
const msgUint8 = new TextEncoder().encode(input);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
return hashHex.substring(0, 7);
}
function segmentToStr(segment) {
const keys = Object.keys(segment).sort();
return keys.map(key => `${key}:${segment[key]}`).join('&');
}
function loadScript(url) {
return new Promise((resolve) => {
const script = document.createElement("script");
script.type =...