"use strict"; require("typings-global"); var plugins = require("./smartfile.plugins"); var SmartfileInterpreter = require("./smartfile.interpreter"); /*=============================================================== ============================ FS ACTIONS ========================= ===============================================================*/ /** * copies a file from A to B on the local disk */ exports.copy = function (fromArg, toArg) { var done = plugins.q.defer(); plugins.fs.copy(fromArg, toArg, {}, function () { done.resolve(); }); return done.promise; }; /** * copies a file SYNCHRONOUSLY from A to B on the local disk */ exports.copySync = function (fromArg, toArg) { plugins.fs.copySync(fromArg, toArg); return true; }; /** * removes a file or folder from local disk */ exports.remove = function (pathArg) { var done = plugins.q.defer(); plugins.fs.remove(pathArg, function () { done.resolve(); }); return done.promise; }; /** * removes a file SYNCHRONOUSLY from local disk */ exports.removeSync = function (pathArg) { plugins.fs.removeSync(pathArg); return true; }; /*=============================================================== ============================ Write/Read ========================= ===============================================================*/ exports.toFS = function (options, cb) { if (cb === void 0) { cb = undefined; } }; /** * * @param filePathArg * @returns {*} */ exports.toGulpStreamSync = function (filePathArg) { var stream = plugins.gulp.src(filePathArg); return stream; }; exports.toGulpDestSync = function (folderPathArg) { return plugins.gulp.dest(folderPathArg); }; /** * * @param filePathArg * @param fileTypeArg * @returns {any} */ exports.toObjectSync = function (filePathArg, fileTypeArg) { var fileString = plugins.fs.readFileSync(filePathArg, 'utf8'); var fileType; fileTypeArg ? fileType = fileTypeArg : fileType = SmartfileInterpreter.filetype(filePathArg); return SmartfileInterpreter.objectFile(fileString, fileType); }; /** * reads a file content to a String * @param filePath * @returns {string|Buffer|any} */ exports.toStringSync = function (filePath) { var fileString; fileString = plugins.fs.readFileSync(filePath, "utf8"); return fileString; }; /** * * @param filePathArg * @param options * @returns {number} */ exports.toVinylSync = function (filePathArg, options) { if (options === void 0) { options = {}; } return plugins.vinylFile.readSync(filePathArg, options); }; /** * lets you reload files hot. * @param path * @returns {any} */ exports.requireReload = function (path) { return plugins.requireReload(path); }; /** * lists Folders in a directory on local disk */ exports.listFolders = function (pathArg) { var done = plugins.q.defer(); var folderArray = plugins.fs.readdirSync(pathArg).filter(function (file) { return plugins.fs.statSync(plugins.path.join(pathArg, file)).isDirectory(); }); done.resolve(folderArray); return done.promise; }; /** * lists Folders SYNCHRONOUSLY in a directory on local disk */ exports.listFoldersSync = function (pathArg) { return plugins.fs.readdirSync(pathArg).filter(function (file) { return plugins.fs.statSync(plugins.path.join(pathArg, file)).isDirectory(); }); }; /** * * @param filePath * @returns {boolean} */ exports.fileExistsSync = function (filePath) { var fileExistsBool = false; try { plugins.fs.readFileSync(filePath); fileExistsBool = true; } catch (err) { fileExistsBool = false; } return fileExistsBool; }; /** * * @param filePath * @returns {any} */ exports.fileExists = function (filePath) { var done = plugins.q.defer(); plugins.fs.access(filePath, plugins.fs.R_OK, function (err) { err ? done.reject() : done.resolve(); }); return done.promise; }; exports.isDirectory = function (pathArg) { return plugins.fs.statSync(pathArg).isDirectory(); }; exports.isFile = function (pathArg) { return plugins.fs.statSync(pathArg).isFile(); }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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ZSI6InNtYXJ0ZmlsZS5mcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XG5cbmltcG9ydCBwbHVnaW5zID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLnBsdWdpbnNcIik7XG5pbXBvcnQgU21hcnRmaWxlSW50ZXJwcmV0ZXIgPSByZXF1aXJlKFwiLi9zbWFydGZpbGUuaW50ZXJwcmV0ZXJcIik7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG49PT09PT09PT09PT09PT09PT09PT09PT09PT09IEZTIEFDVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuLyoqXG4gKiBjb3BpZXMgYSBmaWxlIGZyb20gQSB0byBCIG9uIHRoZSBsb2NhbCBkaXNrXG4gKi9cbmV4cG9ydCBsZXQgY29weSA9IGZ1bmN0aW9uKGZyb21Bcmc6c3RyaW5nLCB0b0FyZzpzdHJpbmcpe1xuICAgIHZhciBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgcGx1Z2lucy5mcy5jb3B5KGZyb21BcmcsdG9Bcmcse30sZnVuY3Rpb24oKXtcbiAgICAgICAgZG9uZS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbn07XG5cbi8qKlxuICogY29waWVzIGEgZmlsZSBTWU5DSFJPTk9VU0xZIGZyb20gQSB0byBCIG9uIHRoZSBsb2NhbCBkaXNrXG4gKi9cbmV4cG9ydCBsZXQgY29weVN5bmMgPSBmdW5jdGlvbihmcm9tQXJnOnN0cmluZyx0b0FyZzpzdHJpbmcpOmJvb2xlYW57XG4gICAgcGx1Z2lucy5mcy5jb3B5U3luYyhmcm9tQXJnLHRvQXJnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4gXG4gLyoqXG4gICogcmVtb3ZlcyBhIGZpbGUgb3IgZm9sZGVyIGZyb20gbG9jYWwgZGlza1xuICAqL1xuZXhwb3J0IGxldCByZW1vdmUgPSBmdW5jdGlvbihwYXRoQXJnOnN0cmluZyl7XG4gICAgdmFyIGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICBwbHVnaW5zLmZzLnJlbW92ZShwYXRoQXJnLGZ1bmN0aW9uKCl7XG4gICAgICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBkb25lLnByb21pc2U7XG59O1xuXG4vKipcbiAqIHJlbW92ZXMgYSBmaWxlIFNZTkNIUk9OT1VTTFkgZnJvbSBsb2NhbCBkaXNrXG4gKi9cbmV4cG9ydCBsZXQgcmVtb3ZlU3luYyA9IGZ1bmN0aW9uKHBhdGhBcmc6c3RyaW5nKTpib29sZWFue1xuICAgIHBsdWdpbnMuZnMucmVtb3ZlU3luYyhwYXRoQXJnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT0gV3JpdGUvUmVhZCA9PT09PT09PT09PT09PT09PT09PT09PT09XG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbmV4cG9ydCBsZXQgdG9GUyA9IGZ1bmN0aW9uKG9wdGlvbnM6e2Zyb206c3RyaW5nLHRvUGF0aDpzdHJpbmd9LCBjYj11bmRlZmluZWQpe1xuICAgIFxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoQXJnXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGxldCB0b0d1bHBTdHJlYW1TeW5jID0gZnVuY3Rpb24oZmlsZVBhdGhBcmc6c3RyaW5nKXtcbiAgICBsZXQgc3RyZWFtID0gcGx1Z2lucy5ndWxwLnNyYyhmaWxlUGF0aEFyZyk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbn07XG5cbmV4cG9ydCBsZXQgdG9HdWxwRGVzdFN5bmMgPSBmdW5jdGlvbihmb2xkZXJQYXRoQXJnOnN0cmluZyl7XG4gICAgcmV0dXJuIHBsdWdpbnMuZ3VscC5kZXN0KGZvbGRlclBhdGhBcmcpO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoQXJnXG4gKiBAcGFyYW0gZmlsZVR5cGVBcmdcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmV4cG9ydCBsZXQgdG9PYmplY3RTeW5jID0gZnVuY3Rpb24oZmlsZVBhdGhBcmcsZmlsZVR5cGVBcmc/KSB7XG4gICAgbGV0IGZpbGVTdHJpbmcgPSBwbHVnaW5zLmZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aEFyZywgJ3V0ZjgnKTtcbiAgICBsZXQgZmlsZVR5cGU7XG4gICAgZmlsZVR5cGVBcmcgPyBmaWxlVHlwZSA9IGZpbGVUeXBlQXJnIDogZmlsZVR5cGUgPSBTbWFydGZpbGVJbnRlcnByZXRlci5maWxldHlwZShmaWxlUGF0aEFyZyk7XG4gICAgcmV0dXJuIFNtYXJ0ZmlsZUludGVycHJldGVyLm9iamVjdEZpbGUoZmlsZVN0cmluZyxmaWxlVHlwZSk7XG59O1xuXG4vKipcbiAqIHJlYWRzIGEgZmlsZSBjb250ZW50IHRvIGEgU3RyaW5nXG4gKiBAcGFyYW0gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd8QnVmZmVyfGFueX1cbiAqL1xuZXhwb3J0IGxldCB0b1N0cmluZ1N5bmMgPSBmdW5jdGlvbihmaWxlUGF0aCkge1xuICAgIGxldCBmaWxlU3RyaW5nO1xuICAgIGZpbGVTdHJpbmcgPSBwbHVnaW5zLmZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICAgIHJldHVybiBmaWxlU3RyaW5nO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoQXJnXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGxldCB0b1ZpbnlsU3luYyA9IGZ1bmN0aW9uKGZpbGVQYXRoQXJnLG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBwbHVnaW5zLnZpbnlsRmlsZS5yZWFkU3luYyhmaWxlUGF0aEFyZyxvcHRpb25zKTtcbn07XG5cbi8qKlxuICogbGV0cyB5b3UgcmVsb2FkIGZpbGVzIGhvdC5cbiAqIEBwYXJhbSBwYXRoXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5leHBvcnQgbGV0IHJlcXVpcmVSZWxvYWQgPSBmdW5jdGlvbihwYXRoOnN0cmluZyl7XG4gICAgcmV0dXJuIHBsdWdpbnMucmVxdWlyZVJlbG9hZChwYXRoKTtcbn07XG5cbi8qKlxuICogbGlzdHMgRm9sZGVycyBpbiBhIGRpcmVjdG9yeSBvbiBsb2NhbCBkaXNrXG4gKi9cbmV4cG9ydCBsZXQgbGlzdEZvbGRlcnMgPSBmdW5jdGlvbihwYXRoQXJnOnN0cmluZyl7XG4gICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICBsZXQgZm9sZGVyQXJyYXkgPSBwbHVnaW5zLmZzLnJlYWRkaXJTeW5jKHBhdGhBcmcpLmZpbHRlcihmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgIHJldHVybiBwbHVnaW5zLmZzLnN0YXRTeW5jKHBsdWdpbnMucGF0aC5qb2luKHBhdGhBcmcsIGZpbGUpKS5pc0RpcmVjdG9yeSgpO1xuICAgIH0pO1xuICAgIGRvbmUucmVzb2x2ZShmb2xkZXJBcnJheSk7XG4gICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbn07XG5cbi8qKlxuICogbGlzdHMgRm9sZGVycyBTWU5DSFJPTk9VU0xZIGluIGEgZGlyZWN0b3J5IG9uIGxvY2FsIGRpc2tcbiAqL1xuZXhwb3J0IGxldCBsaXN0Rm9sZGVyc1N5bmMgPSBmdW5jdGlvbihwYXRoQXJnKXtcbiAgICByZXR1cm4gcGx1Z2lucy5mcy5yZWFkZGlyU3luYyhwYXRoQXJnKS5maWx0ZXIoZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2lucy5mcy5zdGF0U3luYyhwbHVnaW5zLnBhdGguam9pbihwYXRoQXJnLCBmaWxlKSkuaXNEaXJlY3RvcnkoKTtcbiAgICB9KTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBsZXQgZmlsZUV4aXN0c1N5bmMgPSBmdW5jdGlvbihmaWxlUGF0aCk6Ym9vbGVhbiB7XG4gICAgbGV0IGZpbGVFeGlzdHNCb29sOmJvb2xlYW4gPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBwbHVnaW5zLmZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCk7XG4gICAgICAgIGZpbGVFeGlzdHNCb29sID0gdHJ1ZVxuICAgIH1cbiAgICBjYXRjaChlcnIpe1xuICAgICAgICBmaWxlRXhpc3RzQm9vbCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZUV4aXN0c0Jvb2w7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmV4cG9ydCBsZXQgZmlsZUV4aXN0cyA9IGZ1bmN0aW9uKGZpbGVQYXRoKXtcbiAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgIHBsdWdpbnMuZnMuYWNjZXNzKGZpbGVQYXRoLCBwbHVnaW5zLmZzLlJfT0ssIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZXJyID8gZG9uZS5yZWplY3QoKSA6IGRvbmUucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBkb25lLnByb21pc2U7XG59O1xuXG5leHBvcnQgbGV0IGlzRGlyZWN0b3J5ID0gZnVuY3Rpb24ocGF0aEFyZyk6Ym9vbGVhbntcbiAgICByZXR1cm4gcGx1Z2lucy5mcy5zdGF0U3luYyhwYXRoQXJnKS5pc0RpcmVjdG9yeSgpO1xufTtcblxuZXhwb3J0IGxldCBpc0ZpbGUgPSBmdW5jdGlvbihwYXRoQXJnKTpib29sZWFue1xuICAgIHJldHVybiBwbHVnaW5zLmZzLnN0YXRTeW5jKHBhdGhBcmcpLmlzRmlsZSgpO1xufTsiXX0=