Warp/node_modules/search-insights/lib/_processQueue.ts

43 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-01-05 12:14:38 +00:00
/**
* 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";
import type AlgoliaAnalytics from "./insights";
export function processQueue(this: AlgoliaAnalytics, globalObject: any): void {
// 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 as any, ...(functionArguments as any));
});
/* eslint-disable no-warning-comments */
// 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.
/* eslint-enable */
// @ts-expect-error (otherwise typescript won't let you change the signature)
queue.push = (args: IArguments): number => {
const [functionName, ...functionArguments] = [].slice.call(args);
_aa(functionName as any, ...(functionArguments as any));
};
}
}