UNPKG

jspsych-datamanager

Version:

A package to manage data for jsPsych experiments. Currently Firebase and Supabase are supported.

90 lines (87 loc) 3.02 kB
import { BaseManagerOptions, DataManager, ExperimentData, TrialData } from '@jspsych-datamanager/core'; /** * Configuration interface for Firebase initialization */ interface FirebaseConfig { /** Firebase API key */ apiKey: string; /** Firebase authentication domain */ authDomain: string; /** Firebase project ID */ projectId: string; /** Firebase storage bucket */ storageBucket: string; /** Firebase messaging sender ID */ messagingSenderId: string; /** Firebase app ID */ appId: string; } /** * Options specific to FirebaseManager initialization */ interface FirebaseManagerOptions extends BaseManagerOptions { /** Name of the Firestore collection to use (default: "experiments") */ collectionName?: string; /** Specific document ID to use (optional) */ documentId?: string; } /** * A class to manage Firebase operations for jsPsych experiments * * This class extends DataManager to provide Firebase-specific implementation * for storing and managing experiment data. * * @example * ```typescript * const firebaseManager = new FirebaseManager(firebaseConfig, { * collectionName: "my-experiments", * metadata: { version: "1.0.0" } * }); * ``` */ declare class FirebaseManager extends DataManager { private readonly app; private readonly db; private readonly docRef; private numberOfWrites; /** * Creates a new FirebaseManager instance * @param firebaseConfig Firebase configuration object * @param options Additional options for initialization */ constructor(firebaseConfig: FirebaseConfig, options?: FirebaseManagerOptions); /** * Initializes the experiment document in Firestore * @param additionalData Additional data to include in the experiment document * @throws {Error} If initialization fails */ initializeExperiment(additionalData?: Partial<ExperimentData>): Promise<void>; /** * Adds a new trial to the experiment document * @param trialData The trial data to add * @throws {Error} If storing the trial fails */ addTrialData(trialData: TrialData): Promise<void>; /** * Gets the total number of writes to Firestore * @returns The number of write operations performed */ getNumberOfOperations(): number; /** * Creates a callback function for jsPsych's on_data_update event * @returns A function that handles trial data updates */ createDataUpdateCallback(): (data: TrialData) => TrialData; /** * Creates a callback function for jsPsych's on_finish event * @returns A function that handles experiment completion */ createFinishCallback(): () => void; /** * Flattens nested arrays in an object to make it Firestore-compatible * @param obj The object to flatten * @returns A new object with flattened arrays */ private flattenNestedArrays; } export { type FirebaseConfig, FirebaseManager, type FirebaseManagerOptions };