/** * Processes queue that might have been set before * the script was actually loaded and reassigns * class over globalObject variable to execute commands * instead of putting them to the queue */ import { getFunctionalInterface } from "./_getFunctionalInterface"; export function processQueue(globalObject) { // Set pointer which allows renaming of the script const pointer = globalObject["AlgoliaAnalyticsObject"] as string; if (pointer) { const _aa = getFunctionalInterface(this); // `aa` is the user facing function, which is defined in the install snippet. // - before library is initialized `aa` fills a queue // - after library is initialized `aa` calls `_aa` const aa = globalObject[pointer]; aa.queue = aa.queue || []; const queue: IArguments[] = aa.queue; // Loop queue and execute functions in the queue queue.forEach((args: IArguments) => { const [functionName, ...functionArguments] = [].slice.call(args); _aa(functionName, ...functionArguments); }); // FIXME: Reassigning the pointer is a bad idea (cf: https://github.com/algolia/search-insights.js/issues/127) // to remove this without any breaking change, we redefine the Array.prototype.push method on the queue array. // for next major version, use a custom method instead of push. // @ts-ignore (otherwise typescript won't let you change the signature) queue.push = (args: IArguments) => { const [functionName, ...functionArguments] = [].slice.call(args); _aa(functionName, ...functionArguments); }; } }