/** * Internal dependencies */ import { domReady } from '../dom-ready'; import type { ExperimentSummary } from '../../../types'; export function parseJavaScript< T extends ExperimentSummary >( experiments: ReadonlyArray< T > | undefined ): ReadonlyArray< T > { experiments = experiments ?? []; return experiments.map( ( e ) => { const goals = e.goals.map( ( g ) => ( { ...g, conversionActions: g.conversionActions.map( ( ca ) => { if ( ! ca.active ) { return ca; } if ( 'nab/custom-event' !== ca.type ) { return ca; } const snippet = ca.attributes.snippet; if ( 'string' !== typeof snippet ) { return ca; } // eslint-disable-next-line no-eval domReady( () => eval( snippet ) ); return ca; } ), } ) ); if ( ! e.active ) { return { ...e, goals }; } return { ...e, alternatives: e.type === 'nab/css' || e.type === 'nab/javascript' ? e.alternatives.map( ( a ) => ( { ...a, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, no-eval run: eval( `(()=>${ a.run as string })()` ), } ) ) : e.alternatives, goals, }; } ); }