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 =...