"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = createNodeFS;
const path_1 = __importDefault(require("path"));
const immutable_1 = __importDefault(require("immutable"));
const fs_1 = __importDefault(require("../utils/fs"));
const fs_2 = __importDefault(require("../models/fs"));
function fsReadDir(folder) {
    return fs_1.default.readdir(folder).then((files) => {
        files = immutable_1.default.List(files);
        return files
            .map((file) => {
            if (file === "." || file === "..")
                return;
            const stat = fs_1.default.statSync(path_1.default.join(folder, file));
            if (stat.isSymbolicLink()) {
                return;
            }
            if (stat.isDirectory())
                file = file + path_1.default.sep;
            return file;
        })
            .filter((file) => {
            return Boolean(file);
        });
    });
}
function fsLoadObject(filename) {
    return require(filename);
}
function createNodeFS(root) {
    return fs_2.default.create({
        root: root,
        fsExists: fs_1.default.exists,
        fsReadFile: fs_1.default.readFile,
        fsStatFile: fs_1.default.stat,
        fsReadDir: fsReadDir,
        fsLoadObject: fsLoadObject,
        fsReadAsStream: fs_1.default.readStream
    });
}