import { ResponseKind } from "../response/common"; type QuestionSubmissionBase = { uuid: string; display_index: string; kind: ResponseKind; marked_for_regrade?: boolean; regrade_request?: string; } & (Transparent extends true ? { question_id: string; skin_id: string; } : {}) & (Responses extends true ? { response: string; } : {}); export type OpaqueQuestionManifest = QuestionSubmissionBase; export type TransparentQuestionManifest = QuestionSubmissionBase; export type QuestionManifest = OpaqueQuestionManifest | TransparentQuestionManifest; export type TransparentQuestionSubmission = QuestionSubmissionBase; export type OpaqueQuestionSubmission = QuestionSubmissionBase; export type QuestionSubmission = TransparentQuestionSubmission | OpaqueQuestionSubmission; export declare function questionSubmissionHasResponse(q: QuestionSubmissionBase | QuestionSubmissionBase): q is QuestionSubmissionBase; type SectionSubmissionBase = { uuid: string; display_index: string; questions: QuestionSubmissionBase[]; } & (Transparent extends true ? { section_id: string; skin_id: string; } : {}); export type OpaqueSectionManifest = SectionSubmissionBase; export type TransparentSectionManifest = SectionSubmissionBase; export type SectionManifest = OpaqueSectionManifest | TransparentSectionManifest; export type TransparentSectionSubmission = SectionSubmissionBase; export type OpaqueSectionSubmission = SectionSubmissionBase; export type SectionSubmission = TransparentSectionSubmission | OpaqueSectionSubmission; type ExamSubmissionBase = { exam_id: string; uuid: string; student: { uniqname: string; name: string; }; time_started?: number; timestamp: number; saverId: number; sections: SectionSubmissionBase[]; } & (Trusted extends true ? { trusted: true; } : {}) & (Transparent extends true ? { transparent: true; } : {}); export type OpaqueExamManifest = ExamSubmissionBase; export type TransparentExamManifest = ExamSubmissionBase; export type ExamManifest = OpaqueExamManifest | TransparentExamManifest; export type OpaqueExamSubmission = ExamSubmissionBase; export type TransparentExamSubmission = ExamSubmissionBase; export type ExamSubmission = OpaqueExamSubmission | TransparentExamSubmission; export type TrustedExamSubmission = ExamSubmissionBase; /** * Fills in the (presumed blank) question responses in the provided manifest * with the student submitted answers for the questions with corresponding IDs. * This should always be used with manifests loaded from the saved manifest files * created on exam generation, since otherwise students could just e.g. change * the question IDs, point values, etc. in their submitted answers file. * This changes the provided manifest object and returns it (casted to a `TrustedExamSubmission`) */ export declare function fillManifest(manifest: TransparentExamManifest, submitted: ExamSubmission): TrustedExamSubmission; export declare function makeOpaque(manifest: TransparentExamManifest): OpaqueExamManifest; export declare function isExamManifest(content: ExamSubmissionBase): content is ExamManifest; export declare function isTransparentExamManifest(manifest: ExamManifest): manifest is TransparentExamManifest; export declare function parseExamManifest(str: string): ExamManifest; export declare function createManifestFilenameBase(uniqname: string, exam_uuid: string): string; export declare function parseExamSubmission(str: string): ExamSubmission; export declare function stringifyExamSubmission(content: ExamSubmissionBase): string; export declare function isBlankSubmission(submission: ExamSubmission): boolean; export declare function hasResponses(exam_content: ExamSubmissionBase): exam_content is ExamSubmissionBase; export declare function areExamSubmissionsEquivalent(sub1: ExamSubmission, sub2: ExamSubmission): boolean; export {};