/// import { Writable } from 'stream'; import { ILibraryStorage, IContentStorage, ContentId, IUser } from './types'; /** * Offers functionality to create .h5p files from content that is stored in the system. */ export default class PackageExporter { private libraryStorage; private contentStorage; /** * @param libraryStorage * @param contentStorage (optional) Only needed if you want to use the PackageExporter to copy content from a package (e.g. Upload option in the editor) */ constructor(libraryStorage: ILibraryStorage, contentStorage: IContentStorage, { exportMaxContentPathLength }: { exportMaxContentPathLength: number; }); private maxContentPathLength; /** * Creates a .h5p-package for the specified content file and pipes it to the stream. * Throws H5pErrors if something goes wrong. The contents of the stream should be disregarded then. * @param contentId The contentId for which the package should be created. * @param outputStream The stream that the package is written to (e.g. the response stream fo Express) */ createPackage(contentId: ContentId, outputStream: Writable, user: IUser): Promise; /** * Adds the files inside the content directory to the zip file. Does not include content.json! * @param contentId the contentId of the content * @param user the user who wants to export * @param outputZipFile the file to write to * @param pathSubstitutions list of unix (!) paths to files whose paths were * changed in the parameters; this means the paths in the zip file must * be changed accordingly */ private addContentFiles; /** * Adds the library files to the zip file that are required for the content to be playable. */ private addLibraryFiles; /** * Checks if a piece of content exists and if the user has download permissions for it. * Throws an exception with the respective error message if this is not the case. */ private checkAccess; /** * Creates a readable stream for the content.json file */ private createContentFileStream; /** * Gets the metadata for the piece of content (h5p.json) and also creates a file stream for it. */ private getMetadata; /** * Scans the parameters of the piece of content and looks for paths that are * longed than the specified max length. If this happens the filenames are * shortened in the parameters and the substitution is returned in the * substitution list * @param parameters the parameters to scan; IMPORTANT: The parameters are * mutated by this method!!! * @param metadata the metadata of the piece of content * @param maxFilenameLength the maximum acceptable filename length * @returns an object whose keys are old paths and values the new paths to * be used instead; IMPORTANT: All paths are unix paths using slashes as * directory separators! */ private shortenFilenames; }