HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/pwa.sports-crowd.com/node_modules/@capacitor/filesystem/dist/plugin.js
var capacitorFilesystem = (function (exports, core) {
    'use strict';

    exports.Directory = void 0;
    (function (Directory) {
        /**
         * The Documents directory.
         * On iOS it's the app's documents directory.
         * Use this directory to store user-generated content.
         * On Android it's the Public Documents folder, so it's accessible from other apps.
         * It's not accesible on Android 10 unless the app enables legacy External Storage
         * by adding `android:requestLegacyExternalStorage="true"` in the `application` tag
         * in the `AndroidManifest.xml`.
         * On Android 11 or newer the app can only access the files/folders the app created.
         *
         * @since 1.0.0
         */
        Directory["Documents"] = "DOCUMENTS";
        /**
         * The Data directory.
         * On iOS it will use the Documents directory.
         * On Android it's the directory holding application files.
         * Files will be deleted when the application is uninstalled.
         *
         * @since 1.0.0
         */
        Directory["Data"] = "DATA";
        /**
         * The Library directory.
         * On iOS it will use the Library directory.
         * On Android it's the directory holding application files.
         * Files will be deleted when the application is uninstalled.
         *
         * @since 1.1.0
         */
        Directory["Library"] = "LIBRARY";
        /**
         * The Cache directory.
         * Can be deleted in cases of low memory, so use this directory to write app-specific files.
         * that your app can re-create easily.
         *
         * @since 1.0.0
         */
        Directory["Cache"] = "CACHE";
        /**
         * The external directory.
         * On iOS it will use the Documents directory.
         * On Android it's the directory on the primary shared/external
         * storage device where the application can place persistent files it owns.
         * These files are internal to the applications, and not typically visible
         * to the user as media.
         * Files will be deleted when the application is uninstalled.
         *
         * @since 1.0.0
         */
        Directory["External"] = "EXTERNAL";
        /**
         * The external storage directory.
         * On iOS it will use the Documents directory.
         * On Android it's the primary shared/external storage directory.
         * It's not accesible on Android 10 unless the app enables legacy External Storage
         * by adding `android:requestLegacyExternalStorage="true"` in the `application` tag
         * in the `AndroidManifest.xml`.
         * It's not accesible on Android 11 or newer.
         *
         * @since 1.0.0
         */
        Directory["ExternalStorage"] = "EXTERNAL_STORAGE";
    })(exports.Directory || (exports.Directory = {}));
    exports.Encoding = void 0;
    (function (Encoding) {
        /**
         * Eight-bit UCS Transformation Format
         *
         * @since 1.0.0
         */
        Encoding["UTF8"] = "utf8";
        /**
         * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the
         * Unicode character set
         * This encoding is only supported on Android.
         *
         * @since 1.0.0
         */
        Encoding["ASCII"] = "ascii";
        /**
         * Sixteen-bit UCS Transformation Format, byte order identified by an
         * optional byte-order mark
         * This encoding is only supported on Android.
         *
         * @since 1.0.0
         */
        Encoding["UTF16"] = "utf16";
    })(exports.Encoding || (exports.Encoding = {}));
    /**
     * @deprecated Use `Directory`.
     * @since 1.0.0
     */
    const FilesystemDirectory = exports.Directory;
    /**
     * @deprecated Use `Encoding`.
     * @since 1.0.0
     */
    const FilesystemEncoding = exports.Encoding;

    const Filesystem = core.registerPlugin('Filesystem', {
        web: () => Promise.resolve().then(function () { return web; }).then(m => new m.FilesystemWeb()),
    });

    function resolve(path) {
        const posix = path.split('/').filter(item => item !== '.');
        const newPosix = [];
        posix.forEach(item => {
            if (item === '..' &&
                newPosix.length > 0 &&
                newPosix[newPosix.length - 1] !== '..') {
                newPosix.pop();
            }
            else {
                newPosix.push(item);
            }
        });
        return newPosix.join('/');
    }
    function isPathParent(parent, children) {
        parent = resolve(parent);
        children = resolve(children);
        const pathsA = parent.split('/');
        const pathsB = children.split('/');
        return (parent !== children &&
            pathsA.every((value, index) => value === pathsB[index]));
    }
    class FilesystemWeb extends core.WebPlugin {
        constructor() {
            super(...arguments);
            this.DB_VERSION = 1;
            this.DB_NAME = 'Disc';
            this._writeCmds = ['add', 'put', 'delete'];
            /**
             * Function that performs a http request to a server and downloads the file to the specified destination
             *
             * @param options the options for the download operation
             * @returns a promise that resolves with the download file result
             */
            this.downloadFile = async (options) => {
                var _a, _b;
                const requestInit = core.buildRequestInit(options, options.webFetchExtra);
                const response = await fetch(options.url, requestInit);
                let blob;
                if (!options.progress)
                    blob = await response.blob();
                else if (!(response === null || response === void 0 ? void 0 : response.body))
                    blob = new Blob();
                else {
                    const reader = response.body.getReader();
                    let bytes = 0;
                    const chunks = [];
                    const contentType = response.headers.get('content-type');
                    const contentLength = parseInt(response.headers.get('content-length') || '0', 10);
                    while (true) {
                        const { done, value } = await reader.read();
                        if (done)
                            break;
                        chunks.push(value);
                        bytes += (value === null || value === void 0 ? void 0 : value.length) || 0;
                        const status = {
                            url: options.url,
                            bytes,
                            contentLength,
                        };
                        this.notifyListeners('progress', status);
                    }
                    const allChunks = new Uint8Array(bytes);
                    let position = 0;
                    for (const chunk of chunks) {
                        if (typeof chunk === 'undefined')
                            continue;
                        allChunks.set(chunk, position);
                        position += chunk.length;
                    }
                    blob = new Blob([allChunks.buffer], { type: contentType || undefined });
                }
                const result = await this.writeFile({
                    path: options.path,
                    directory: (_a = options.directory) !== null && _a !== void 0 ? _a : undefined,
                    recursive: (_b = options.recursive) !== null && _b !== void 0 ? _b : false,
                    data: blob,
                });
                return { path: result.uri, blob };
            };
        }
        async initDb() {
            if (this._db !== undefined) {
                return this._db;
            }
            if (!('indexedDB' in window)) {
                throw this.unavailable("This browser doesn't support IndexedDB");
            }
            return new Promise((resolve, reject) => {
                const request = indexedDB.open(this.DB_NAME, this.DB_VERSION);
                request.onupgradeneeded = FilesystemWeb.doUpgrade;
                request.onsuccess = () => {
                    this._db = request.result;
                    resolve(request.result);
                };
                request.onerror = () => reject(request.error);
                request.onblocked = () => {
                    console.warn('db blocked');
                };
            });
        }
        static doUpgrade(event) {
            const eventTarget = event.target;
            const db = eventTarget.result;
            switch (event.oldVersion) {
                case 0:
                case 1:
                default: {
                    if (db.objectStoreNames.contains('FileStorage')) {
                        db.deleteObjectStore('FileStorage');
                    }
                    const store = db.createObjectStore('FileStorage', { keyPath: 'path' });
                    store.createIndex('by_folder', 'folder');
                }
            }
        }
        async dbRequest(cmd, args) {
            const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';
            return this.initDb().then((conn) => {
                return new Promise((resolve, reject) => {
                    const tx = conn.transaction(['FileStorage'], readFlag);
                    const store = tx.objectStore('FileStorage');
                    const req = store[cmd](...args);
                    req.onsuccess = () => resolve(req.result);
                    req.onerror = () => reject(req.error);
                });
            });
        }
        async dbIndexRequest(indexName, cmd, args) {
            const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';
            return this.initDb().then((conn) => {
                return new Promise((resolve, reject) => {
                    const tx = conn.transaction(['FileStorage'], readFlag);
                    const store = tx.objectStore('FileStorage');
                    const index = store.index(indexName);
                    const req = index[cmd](...args);
                    req.onsuccess = () => resolve(req.result);
                    req.onerror = () => reject(req.error);
                });
            });
        }
        getPath(directory, uriPath) {
            const cleanedUriPath = uriPath !== undefined ? uriPath.replace(/^[/]+|[/]+$/g, '') : '';
            let fsPath = '';
            if (directory !== undefined)
                fsPath += '/' + directory;
            if (uriPath !== '')
                fsPath += '/' + cleanedUriPath;
            return fsPath;
        }
        async clear() {
            const conn = await this.initDb();
            const tx = conn.transaction(['FileStorage'], 'readwrite');
            const store = tx.objectStore('FileStorage');
            store.clear();
        }
        /**
         * Read a file from disk
         * @param options options for the file read
         * @return a promise that resolves with the read file data result
         */
        async readFile(options) {
            const path = this.getPath(options.directory, options.path);
            // const encoding = options.encoding;
            const entry = (await this.dbRequest('get', [path]));
            if (entry === undefined)
                throw Error('File does not exist.');
            return { data: entry.content ? entry.content : '' };
        }
        /**
         * Write a file to disk in the specified location on device
         * @param options options for the file write
         * @return a promise that resolves with the file write result
         */
        async writeFile(options) {
            const path = this.getPath(options.directory, options.path);
            let data = options.data;
            const encoding = options.encoding;
            const doRecursive = options.recursive;
            const occupiedEntry = (await this.dbRequest('get', [path]));
            if (occupiedEntry && occupiedEntry.type === 'directory')
                throw Error('The supplied path is a directory.');
            const parentPath = path.substr(0, path.lastIndexOf('/'));
            const parentEntry = (await this.dbRequest('get', [parentPath]));
            if (parentEntry === undefined) {
                const subDirIndex = parentPath.indexOf('/', 1);
                if (subDirIndex !== -1) {
                    const parentArgPath = parentPath.substr(subDirIndex);
                    await this.mkdir({
                        path: parentArgPath,
                        directory: options.directory,
                        recursive: doRecursive,
                    });
                }
            }
            if (!encoding && !(data instanceof Blob)) {
                data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;
                if (!this.isBase64String(data))
                    throw Error('The supplied data is not valid base64 content.');
            }
            const now = Date.now();
            const pathObj = {
                path: path,
                folder: parentPath,
                type: 'file',
                size: data instanceof Blob ? data.size : data.length,
                ctime: now,
                mtime: now,
                content: data,
            };
            await this.dbRequest('put', [pathObj]);
            return {
                uri: pathObj.path,
            };
        }
        /**
         * Append to a file on disk in the specified location on device
         * @param options options for the file append
         * @return a promise that resolves with the file write result
         */
        async appendFile(options) {
            const path = this.getPath(options.directory, options.path);
            let data = options.data;
            const encoding = options.encoding;
            const parentPath = path.substr(0, path.lastIndexOf('/'));
            const now = Date.now();
            let ctime = now;
            const occupiedEntry = (await this.dbRequest('get', [path]));
            if (occupiedEntry && occupiedEntry.type === 'directory')
                throw Error('The supplied path is a directory.');
            const parentEntry = (await this.dbRequest('get', [parentPath]));
            if (parentEntry === undefined) {
                const subDirIndex = parentPath.indexOf('/', 1);
                if (subDirIndex !== -1) {
                    const parentArgPath = parentPath.substr(subDirIndex);
                    await this.mkdir({
                        path: parentArgPath,
                        directory: options.directory,
                        recursive: true,
                    });
                }
            }
            if (!encoding && !this.isBase64String(data))
                throw Error('The supplied data is not valid base64 content.');
            if (occupiedEntry !== undefined) {
                if (occupiedEntry.content instanceof Blob) {
                    throw Error('The occupied entry contains a Blob object which cannot be appended to.');
                }
                if (occupiedEntry.content !== undefined && !encoding) {
                    data = btoa(atob(occupiedEntry.content) + atob(data));
                }
                else {
                    data = occupiedEntry.content + data;
                }
                ctime = occupiedEntry.ctime;
            }
            const pathObj = {
                path: path,
                folder: parentPath,
                type: 'file',
                size: data.length,
                ctime: ctime,
                mtime: now,
                content: data,
            };
            await this.dbRequest('put', [pathObj]);
        }
        /**
         * Delete a file from disk
         * @param options options for the file delete
         * @return a promise that resolves with the deleted file data result
         */
        async deleteFile(options) {
            const path = this.getPath(options.directory, options.path);
            const entry = (await this.dbRequest('get', [path]));
            if (entry === undefined)
                throw Error('File does not exist.');
            const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [
                IDBKeyRange.only(path),
            ]);
            if (entries.length !== 0)
                throw Error('Folder is not empty.');
            await this.dbRequest('delete', [path]);
        }
        /**
         * Create a directory.
         * @param options options for the mkdir
         * @return a promise that resolves with the mkdir result
         */
        async mkdir(options) {
            const path = this.getPath(options.directory, options.path);
            const doRecursive = options.recursive;
            const parentPath = path.substr(0, path.lastIndexOf('/'));
            const depth = (path.match(/\//g) || []).length;
            const parentEntry = (await this.dbRequest('get', [parentPath]));
            const occupiedEntry = (await this.dbRequest('get', [path]));
            if (depth === 1)
                throw Error('Cannot create Root directory');
            if (occupiedEntry !== undefined)
                throw Error('Current directory does already exist.');
            if (!doRecursive && depth !== 2 && parentEntry === undefined)
                throw Error('Parent directory must exist');
            if (doRecursive && depth !== 2 && parentEntry === undefined) {
                const parentArgPath = parentPath.substr(parentPath.indexOf('/', 1));
                await this.mkdir({
                    path: parentArgPath,
                    directory: options.directory,
                    recursive: doRecursive,
                });
            }
            const now = Date.now();
            const pathObj = {
                path: path,
                folder: parentPath,
                type: 'directory',
                size: 0,
                ctime: now,
                mtime: now,
            };
            await this.dbRequest('put', [pathObj]);
        }
        /**
         * Remove a directory
         * @param options the options for the directory remove
         */
        async rmdir(options) {
            const { path, directory, recursive } = options;
            const fullPath = this.getPath(directory, path);
            const entry = (await this.dbRequest('get', [fullPath]));
            if (entry === undefined)
                throw Error('Folder does not exist.');
            if (entry.type !== 'directory')
                throw Error('Requested path is not a directory');
            const readDirResult = await this.readdir({ path, directory });
            if (readDirResult.files.length !== 0 && !recursive)
                throw Error('Folder is not empty');
            for (const entry of readDirResult.files) {
                const entryPath = `${path}/${entry.name}`;
                const entryObj = await this.stat({ path: entryPath, directory });
                if (entryObj.type === 'file') {
                    await this.deleteFile({ path: entryPath, directory });
                }
                else {
                    await this.rmdir({ path: entryPath, directory, recursive });
                }
            }
            await this.dbRequest('delete', [fullPath]);
        }
        /**
         * Return a list of files from the directory (not recursive)
         * @param options the options for the readdir operation
         * @return a promise that resolves with the readdir directory listing result
         */
        async readdir(options) {
            const path = this.getPath(options.directory, options.path);
            const entry = (await this.dbRequest('get', [path]));
            if (options.path !== '' && entry === undefined)
                throw Error('Folder does not exist.');
            const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [IDBKeyRange.only(path)]);
            const files = await Promise.all(entries.map(async (e) => {
                let subEntry = (await this.dbRequest('get', [e]));
                if (subEntry === undefined) {
                    subEntry = (await this.dbRequest('get', [e + '/']));
                }
                return {
                    name: e.substring(path.length + 1),
                    type: subEntry.type,
                    size: subEntry.size,
                    ctime: subEntry.ctime,
                    mtime: subEntry.mtime,
                    uri: subEntry.path,
                };
            }));
            return { files: files };
        }
        /**
         * Return full File URI for a path and directory
         * @param options the options for the stat operation
         * @return a promise that resolves with the file stat result
         */
        async getUri(options) {
            const path = this.getPath(options.directory, options.path);
            let entry = (await this.dbRequest('get', [path]));
            if (entry === undefined) {
                entry = (await this.dbRequest('get', [path + '/']));
            }
            return {
                uri: (entry === null || entry === void 0 ? void 0 : entry.path) || path,
            };
        }
        /**
         * Return data about a file
         * @param options the options for the stat operation
         * @return a promise that resolves with the file stat result
         */
        async stat(options) {
            const path = this.getPath(options.directory, options.path);
            let entry = (await this.dbRequest('get', [path]));
            if (entry === undefined) {
                entry = (await this.dbRequest('get', [path + '/']));
            }
            if (entry === undefined)
                throw Error('Entry does not exist.');
            return {
                type: entry.type,
                size: entry.size,
                ctime: entry.ctime,
                mtime: entry.mtime,
                uri: entry.path,
            };
        }
        /**
         * Rename a file or directory
         * @param options the options for the rename operation
         * @return a promise that resolves with the rename result
         */
        async rename(options) {
            await this._copy(options, true);
            return;
        }
        /**
         * Copy a file or directory
         * @param options the options for the copy operation
         * @return a promise that resolves with the copy result
         */
        async copy(options) {
            return this._copy(options, false);
        }
        async requestPermissions() {
            return { publicStorage: 'granted' };
        }
        async checkPermissions() {
            return { publicStorage: 'granted' };
        }
        /**
         * Function that can perform a copy or a rename
         * @param options the options for the rename operation
         * @param doRename whether to perform a rename or copy operation
         * @return a promise that resolves with the result
         */
        async _copy(options, doRename = false) {
            let { toDirectory } = options;
            const { to, from, directory: fromDirectory } = options;
            if (!to || !from) {
                throw Error('Both to and from must be provided');
            }
            // If no "to" directory is provided, use the "from" directory
            if (!toDirectory) {
                toDirectory = fromDirectory;
            }
            const fromPath = this.getPath(fromDirectory, from);
            const toPath = this.getPath(toDirectory, to);
            // Test that the "to" and "from" locations are different
            if (fromPath === toPath) {
                return {
                    uri: toPath,
                };
            }
            if (isPathParent(fromPath, toPath)) {
                throw Error('To path cannot contain the from path');
            }
            // Check the state of the "to" location
            let toObj;
            try {
                toObj = await this.stat({
                    path: to,
                    directory: toDirectory,
                });
            }
            catch (e) {
                // To location does not exist, ensure the directory containing "to" location exists and is a directory
                const toPathComponents = to.split('/');
                toPathComponents.pop();
                const toPath = toPathComponents.join('/');
                // Check the containing directory of the "to" location exists
                if (toPathComponents.length > 0) {
                    const toParentDirectory = await this.stat({
                        path: toPath,
                        directory: toDirectory,
                    });
                    if (toParentDirectory.type !== 'directory') {
                        throw new Error('Parent directory of the to path is a file');
                    }
                }
            }
            // Cannot overwrite a directory
            if (toObj && toObj.type === 'directory') {
                throw new Error('Cannot overwrite a directory with a file');
            }
            // Ensure the "from" object exists
            const fromObj = await this.stat({
                path: from,
                directory: fromDirectory,
            });
            // Set the mtime/ctime of the supplied path
            const updateTime = async (path, ctime, mtime) => {
                const fullPath = this.getPath(toDirectory, path);
                const entry = (await this.dbRequest('get', [fullPath]));
                entry.ctime = ctime;
                entry.mtime = mtime;
                await this.dbRequest('put', [entry]);
            };
            const ctime = fromObj.ctime ? fromObj.ctime : Date.now();
            switch (fromObj.type) {
                // The "from" object is a file
                case 'file': {
                    // Read the file
                    const file = await this.readFile({
                        path: from,
                        directory: fromDirectory,
                    });
                    // Optionally remove the file
                    if (doRename) {
                        await this.deleteFile({
                            path: from,
                            directory: fromDirectory,
                        });
                    }
                    let encoding;
                    if (!(file.data instanceof Blob) && !this.isBase64String(file.data)) {
                        encoding = exports.Encoding.UTF8;
                    }
                    // Write the file to the new location
                    const writeResult = await this.writeFile({
                        path: to,
                        directory: toDirectory,
                        data: file.data,
                        encoding: encoding,
                    });
                    // Copy the mtime/ctime of a renamed file
                    if (doRename) {
                        await updateTime(to, ctime, fromObj.mtime);
                    }
                    // Resolve promise
                    return writeResult;
                }
                case 'directory': {
                    if (toObj) {
                        throw Error('Cannot move a directory over an existing object');
                    }
                    try {
                        // Create the to directory
                        await this.mkdir({
                            path: to,
                            directory: toDirectory,
                            recursive: false,
                        });
                        // Copy the mtime/ctime of a renamed directory
                        if (doRename) {
                            await updateTime(to, ctime, fromObj.mtime);
                        }
                    }
                    catch (e) {
                        // ignore
                    }
                    // Iterate over the contents of the from location
                    const contents = (await this.readdir({
                        path: from,
                        directory: fromDirectory,
                    })).files;
                    for (const filename of contents) {
                        // Move item from the from directory to the to directory
                        await this._copy({
                            from: `${from}/${filename.name}`,
                            to: `${to}/${filename.name}`,
                            directory: fromDirectory,
                            toDirectory,
                        }, doRename);
                    }
                    // Optionally remove the original from directory
                    if (doRename) {
                        await this.rmdir({
                            path: from,
                            directory: fromDirectory,
                        });
                    }
                }
            }
            return {
                uri: toPath,
            };
        }
        isBase64String(str) {
            try {
                return btoa(atob(str)) == str;
            }
            catch (err) {
                return false;
            }
        }
    }
    FilesystemWeb._debug = true;

    var web = /*#__PURE__*/Object.freeze({
        __proto__: null,
        FilesystemWeb: FilesystemWeb
    });

    exports.Filesystem = Filesystem;
    exports.FilesystemDirectory = FilesystemDirectory;
    exports.FilesystemEncoding = FilesystemEncoding;

    Object.defineProperty(exports, '__esModule', { value: true });

    return exports;

})({}, capacitorExports);
//# sourceMappingURL=plugin.js.map