jspsych-datamanager
Version:
A package to manage data for jsPsych experiments. Currently Firebase and Supabase are supported.
90 lines (87 loc) • 3.02 kB
text/typescript
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 };