{"version":3,"sources":["jsdelivr-header.js","/npm/com-fs@0.1.7/com-fs.js"],"names":[],"mappings":"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","file":"/npm/com-fs@0.1.7/com-fs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/com-fs@0.1.7/com-fs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","//     com-fs basic io components for using with processor.js\r\n//     (c) 2013 vadim b. https://github.com/node-components/com-fs\r\n//     license: MIT\r\n\r\n(function(){\r\n\r\n    var processor = require('processor'),\r\n        NodePrototype = processor.node_prototype,\r\n        fs = require('fs');\r\n\r\n    function extend(object) {\r\n        for(var i = 1, c = arguments.length; i < c; i++) {\r\n            var src = arguments[i];\r\n            if (typeof src === 'object')\r\n                for(var prop in src)\r\n                    if (src.hasOwnProperty(prop))\r\n                        object[prop] = src[prop];\r\n        }\r\n        return object;\r\n    }\r\n\r\n    function FSPath(parameters, args) {\r\n        this.initialize('fs.path', parameters, args);\r\n\r\n        // prime or params[0] is path\r\n        var def_params = this.splitParams();\r\n        args.path = this.removePrime(args) || (def_params && def_params[0]);\r\n\r\n        Object.defineProperty(this, 'isAbsolute', {\r\n            get: function() {\r\n                return this.arguments.isAbsolute;\r\n            },\r\n            set: function(value) {\r\n                if (!this.arguments.path)\r\n                    throw new TypeError('Ivalid file system path!');\r\n                this.arguments.isAbsolute = value;\r\n            }\r\n        });\r\n\r\n        Object.defineProperty(this, 'path', {\r\n            get: function() {\r\n                var path = this.arguments.path;\r\n                return (path === undefined) ? '' : path;\r\n            },\r\n            set: function(value) {\r\n                var path = this.arguments.path;\r\n                if (typeof value !== 'string') {\r\n                    if ('path' in value)\r\n                        value = value.path;\r\n                    if (typeof value !== 'string')\r\n                        throw new TypeError('Ivalid file system path!');\r\n                }\r\n                this.arguments.path = value;\r\n                if (value !== path)\r\n                    this.raise('path', value, path);\r\n            }\r\n        });\r\n\r\n        Object.defineProperty(this, 'fileName', {\r\n            get: function() {\r\n                var path = this.arguments.path;\r\n                path = (path === undefined) ? '' : path;\r\n                var full_name = path.split('/').slice(-1)[0];\r\n                return ((full_name.indexOf('.') < 0) ? full_name : full_name.split('.').slice(0,1));\r\n            }\r\n        });\r\n\r\n        Object.defineProperty(this, 'fileExtension', {\r\n            get: function() {\r\n                var path = this.arguments.path;\r\n                path = (path === undefined) ? '' : path;\r\n                var full_name = path.split('/').slice(-1)[0],\r\n                    dotpos = full_name.indexOf('.');\r\n                if (!full_name || dotpos < 0)\r\n                    return '';\r\n                return full_name.slice(dotpos);\r\n            },\r\n            set: function(value) {\r\n                var path = this.arguments.path;\r\n                path = (path === undefined) ? '' : path;\r\n                // TODO\r\n            }\r\n        });\r\n\r\n        Object.defineProperty(this, 'fullName', {\r\n            get: function() {\r\n                var args = this.arguments;\r\n                return args.path && args.path.split('/').slice(-1);\r\n            }\r\n        });\r\n\r\n        this.toString = function() {\r\n            return this.path;\r\n        };\r\n\r\n        /**\r\n         * @returns Returns the absolute path which can be a combination of several stacked objects fs.path representing path segments.\r\n         */\r\n        this.getFullPath = function() {\r\n            var parent = this.parent;\r\n            // skipt non path objects in hierarchy\r\n            while(parent && parent._type !== 'fs.path' && !(parent instanceof FSObject))\r\n                parent = parent.parent;\r\n            return (parent) ? (parent.getFullPath() + '/' + this.path) : this.path;\r\n        };\r\n\r\n        this.getRealPath = function() {\r\n            var full_path = this.getFullPath();\r\n            return fs.realpathSync(full_path);\r\n        };\r\n\r\n        /**\r\n         * @returns Returns the parent path.\r\n         */\r\n        this.getParentPath = function(variant) {\r\n            // variant\r\n            // 0 - parent from local path\r\n            // 1 - parent from full path\r\n            var path = (variant) ? this.getFullPath() : this.path;\r\n            if (path) {\r\n                if (path.slice(-2) === '//')\r\n                    throw new TypeError('fs.path.getParentPath() invalid parent path');\r\n\r\n                var last_slash = (path.slice(-1) === '/');\r\n                if (last_slash)\r\n                    path = path.slice(0, -1);\r\n                path = path.split('/');\r\n                var last_segment = path.slice(-1)[0],\r\n                    parent_path = path.slice(0, -1).join('/');\r\n                if (last_segment && last_segment.indexOf(':') >= 0)\r\n                    throw new TypeError('fs.path.getParentPath() invalid parent path');\r\n                if (last_slash)\r\n                    parent_path += '/';\r\n            } else {\r\n                parent_path = '../';\r\n            }\r\n            return (this.parameters.raw) ? parent_path : processor.create('fs.path', parent_path);\r\n        };\r\n\r\n        /**\r\n         * @returns Returns node.js <a href=\"http://nodejs.org/api/fs.html#fs_class_fs_stats\">fs.Stats object</a> for the full path.\r\n         */\r\n        this.getStatSync = function() {\r\n            return fs.statSync(this.getFullPath());\r\n        };\r\n\r\n        /**\r\n         * The callback gets two arguments (err, stats) where stats is a <a href=\"http://nodejs.org/api/fs.html#fs_class_fs_stats\">fs.Stats object</a> for the full path.\r\n         * @returns Returns this.\r\n         */\r\n        this.getStat = function(callback) {\r\n            fs.stat(this.getFullPath(), callback);\r\n            return this;\r\n        };\r\n\r\n        this.ifExists = function(path, callback) {\r\n            if (typeof path === 'function') {\r\n                callback = path;\r\n                path = this.getFullPath();\r\n            }\r\n            if (callback) {\r\n                fs.exists(path, function(exists) {\r\n                    if (exists)\r\n                        callback.call(this);\r\n                });\r\n            }\r\n            return this;\r\n        };\r\n\r\n        this.ifExistsSync = function(path, callback) {\r\n            if (typeof path === 'function') {\r\n                callback = path;\r\n                path = this.getFullPath();\r\n            }\r\n            if (callback && fs.existsSync(path))\r\n                callback.call(this);\r\n            return this;\r\n        };\r\n\r\n        this.exists = function(path, callback) {\r\n            if (typeof path === 'function') {\r\n                fs.exists(this.getFullPath(), path);\r\n            } else if (arguments.length)\r\n                fs.exists.apply(fs, arguments);\r\n            else\r\n                fs.exists(this.getFullPath());\r\n            return this;\r\n        };\r\n\r\n        this.existsSync = function(path, err_callback) {\r\n            if (typeof path === 'function') {\r\n                try {\r\n                    fs.existsSync(this.getFullPath());\r\n                } catch (e) {\r\n                    path(e);\r\n                }\r\n            } else if (arguments.length)\r\n                if (err_callback) {\r\n                    try {\r\n                        return fs.existsSync(path);\r\n                    } catch (e) {\r\n                        err_callback.call(this, e);\r\n                    }\r\n                } else\r\n                    return fs.existsSync(path);\r\n            else\r\n                return fs.existsSync(this.getFullPath());\r\n        };\r\n\r\n        this.unlink = function(path, callback) {\r\n            if (typeof path === 'function') {\r\n                fs.unlink(this.getFullPath(), path);\r\n            } else if (arguments.length)\r\n                fs.unlink.apply(fs, arguments);\r\n            else\r\n                fs.unlink(this.getFullPath());\r\n            return this;\r\n        };\r\n\r\n        this.unlinkSync = function(path, err_callback) {\r\n            if (typeof path === 'function') {\r\n                try {\r\n                    fs.unlinkSync(this.getFullPath());\r\n                } catch (e) {\r\n                    path(e);\r\n                }\r\n            } else if (arguments.length)\r\n                if (err_callback) {\r\n                    try {\r\n                        fs.unlinkSync(path);\r\n                    } catch (e) {\r\n                        err_callback(e);\r\n                    }\r\n                } else\r\n                    fs.unlinkSync(path);\r\n            else\r\n                fs.unlinkSync(this.getFullPath());\r\n            return this;\r\n        };\r\n\r\n        this.combine = function(sub_path) {\r\n            var path = this.path || '';\r\n            if (path)\r\n                path += '/';\r\n            path += sub_path;\r\n            return processor.create('fs.path', path);\r\n        };\r\n    }\r\n    FSPath.prototype = new NodePrototype();\r\n    processor.typeRegister('fs.path', FSPath);\r\n\r\n\r\n    // Common functions\r\n\r\n    function normalizePathList(argument) {\r\n\r\n        // to get the argument value call if it is a getter function\r\n        if (typeof argument === 'function')\r\n            argument = argument();\r\n\r\n        // cast to array\r\n        if (!Array.isArray(argument))\r\n            argument = [argument];\r\n\r\n        for(var i = 0, c = argument.length; i < c; i++) {\r\n\r\n            var item = argument[i];\r\n\r\n            // to get the path value call if item is a getter function\r\n            if (typeof item === 'function')\r\n                item = item();\r\n\r\n            // cast to fs.path\r\n            if (typeof item !== 'object' || (item.__type !== 'fs.path' && !(item instanceof FSPath)))\r\n                item = argument[i] = processor.create('fs.path', item);\r\n        }\r\n\r\n        return argument;\r\n    }\r\n\r\n    function iterateArgumentPairs(args, callback) {\r\n\r\n        // cast src and dst to array of fs.path objects\r\n        var src = normalizePathList(args.src),\r\n            dst = normalizePathList(args.dst);\r\n\r\n        // case: incorrect destination list length\r\n        if (dst.length !== 1 && dst.length !== src.length)\r\n            throw new SyntaxError('Invalid destination argument');\r\n\r\n        for(var i = 0, c = src.length; i < c; i++) {\r\n            var src_item = src[i],\r\n                dst_item = (dst.length === 1) ? dst[0] : dst[i];\r\n            var src_stat = src_item.getStatSync();\r\n            if (src_stat.isDirectory())\r\n                throw new SyntaxError('Directory is invalid source');\r\n            var src_path = src_item.getFullPath();\r\n            var dst_stat = dst_item.getStatSync(),\r\n                dst_path = (dst_stat.isDirectory()) ? dst_item.combine(src_item.fullName).getFullPath() : dst_item.getFullPath();\r\n            callback(src_path, dst_path);\r\n        }\r\n    };\r\n\r\n    function FSObject() {\r\n\r\n        this.getRealPath = function() {\r\n            var full_path = this.getFullPath();\r\n            return fs.realpathSync(full_path);\r\n        };\r\n\r\n        // set file system watcher with fs.watch()\r\n        this.setWatcher = function(persistent) {\r\n            var full_path = this.getFullPath();\r\n\r\n            if (!fs.existsSync(full_path))\r\n                throw new TypeError('Invalid file system path!');\r\n\r\n            if (!arguments.length)\r\n                persistent = this.parameter('persistent-watcher');\r\n\r\n            // set watcher\r\n            return this.__watcher || (this.__watcher = fs.watch(full_path, {persistent: persistent}, function() {\r\n                var args = Array.prototype.slice.call(arguments);\r\n                args.unshift('watcher');\r\n                this.raise.apply(this, args);\r\n            }.bind(this)));\r\n        };\r\n\r\n        this.removeWatcher = function() {\r\n            var watcher = this.__watcher;\r\n            if (watcher) {\r\n                watcher.close();\r\n                delete this.__watcher;\r\n            }\r\n        };\r\n\r\n        /*\r\n         * Set file system watcher with fs.watchFile()\r\n         *\r\n         * @param {boolean} persistent indicates whether the process should continue to run as long as files are being watched\r\n         * @param {number} interval indicates how often the target should be polled, in milliseconds\r\n         */\r\n        this.setFileWatcher = function(persistent, /* polled,ms */ interval) {\r\n            var full_path = this.getFullPath();\r\n\r\n            // remove previous watcher\r\n            var watcher = this.__file_watcher;\r\n            if (watcher && this.__file_watcher_file !== full_path) {\r\n                fs.unwatchFile(this.__file_watcher_file);\r\n                this.__file_watcher_file = undefined;\r\n                this.__file_watcher = undefined;\r\n                watcher = undefined;\r\n            }\r\n            // set watcher\r\n            if (!watcher) {\r\n                this.__file_watcher_file = full_path;\r\n                this.__file_watcher = fs.watchFile(full_path, { persistent: persistent, interval: interval || 1007 }, function() {\r\n                    var args = Array.prototype.slice.call(arguments);\r\n                    args.unshift('fileWatcher');\r\n                    this.raise.apply(this, args);\r\n                }.bind(this));\r\n            }\r\n        };\r\n\r\n        this.removeFileWatcher = function() {\r\n            var watcher = this.__file_watcher;\r\n            if (watcher) {\r\n                fs.unwatchFile(this.__file_watcher_file);\r\n                this.__file_watcher_file = undefined;\r\n                this.__file_watcher = undefined;\r\n            }\r\n        };\r\n    }\r\n    FSObject.prototype = new FSPath({},{});\r\n\r\n    function FSDirectory(parameters, args) {\r\n\r\n        // prime is path\r\n        if ('' in args)\r\n            args.path = this.removePrime(args);\r\n\r\n        this.initialize('fs.directory', parameters, args);\r\n\r\n        this.unsafeRemoveSync = function(_path) {\r\n\r\n            var path = (arguments.length) ? _path : this.getFullPath();\r\n\r\n            if (!path)\r\n                throw new TypeError('Invalid directory path!');\r\n\r\n            while (path.slice(-1) === '/')\r\n                path = path.slice(0, -1);\r\n\r\n            var dirs = [path],\r\n                rmdirs = [];\r\n\r\n            while(path = dirs.pop()) {\r\n                rmdirs.push(path);\r\n                fs.readdirSync(path).forEach(function(name) {\r\n                    var subpath = path + '/' + name;\r\n                    if (fs.statSync(subpath).isDirectory())\r\n                        dirs.push(subpath)\r\n                    else\r\n                        // delete file\r\n                        fs.unlinkSync(subpath);\r\n                });\r\n            }\r\n            while(path = rmdirs.pop())\r\n                // delete directory\r\n                fs.rmdirSync(path);\r\n        };\r\n    }\r\n    FSDirectory.prototype = new FSObject();\r\n    processor.typeRegister('fs.directory', FSDirectory);\r\n    processor.typeRegister('fs.dir', FSDirectory);\r\n\r\n    function File(parameters, args) {\r\n\r\n        // prime is path\r\n        args.path = this.removePrime(args);\r\n\r\n        this.initialize('fs.file', parameters, args)\r\n            .on('tick', function() {\r\n                var path = args.path;\r\n                if (path) {\r\n                }\r\n            });\r\n\r\n        /**\r\n         * Merge options from arguments, parameters, fixed parameters and default options object. Options object used as an argument to call fs* methods.\r\n         *\r\n         * @param {object} [options] Default options hash object.\r\n         * @param {boolean} write_mode Merge \"mode\" option for write operations.\r\n         * @returns {object} Returns options hash object.\r\n         */\r\n        this.getOptions = function(options, write_mode) {\r\n            if (!options) {\r\n                var options = extend({}, options),\r\n                    args = this.arguments,\r\n                    parameters = this.parameters,\r\n                    fixed_params = parameters['{params}'];\r\n\r\n                if ('encoding' in args)             options.encoding = args.encoding;\r\n                else if ('encoding' in parameters)  options.encoding = parameters.encoding;\r\n                else if (fixed_params)              options.encoding = fixed_params[0];\r\n\r\n                if ('flag' in args)                 options.flag = args.flag;\r\n                else if ('flag' in parameters)      options.flag = parameters.flag;\r\n                else if (fixed_params)              options.flag = fixed_params[(fixed_params.length > 2) ? 2 : 1];\r\n\r\n                if (write_mode) {\r\n                    if ('mode' in args)                 options.mode = parseInt(args.mode);\r\n                    else if ('mode' in parameters)      options.mode = parseInt(parameters.mode);\r\n                    else if (fixed_params && fixed_params.length > 2)   options.mode = parseInt(fixed_params[1]);\r\n                }\r\n            }\r\n            return options;\r\n        };\r\n    }\r\n    File.prototype = new FSObject();\r\n    processor.typeRegister('fs.file', File);\r\n\r\n\r\n    function FileReader(parameters, args) {\r\n\r\n        // prime is path\r\n        if ('' in args) args.path = this.removePrime(args);\r\n\r\n        this.initialize('fs.filereader', parameters, args);\r\n\r\n        /**\r\n         * Asynchronously reads the entire contents of the file.\r\n         *\r\n         * @param {object} [options] Options http://nodejs.org/api/fs.html\r\n         * @param callback The callback is passed two arguments (err, data), where data is the contents of the file.\r\n         * @returns {object} Returns this.\r\n         */\r\n        this.read = function(options, callback) {\r\n            var fullpath = this.getFullPath();\r\n            this.readFrom(fullpath, options, callback);\r\n            return this;\r\n        };\r\n\r\n        /**\r\n         * Asynchronously reads the entire contents of specified file.\r\n         *\r\n         * @param {string|fs.path} file_path File path.\r\n         * @param {object} [options] Options http://nodejs.org/api/fs.html\r\n         * @param callback The callback is passed two arguments (err, data), where data is the contents of the file.\r\n         * @returns {object} Returns this.\r\n         */\r\n        this.readFrom = function(file_path, options, callback) {\r\n\r\n            var fullpath = (typeof file_path === 'object') ? file_path.getFullPath() : file_path;\r\n\r\n            if (typeof options === 'function')\r\n                fs.readFile(fullpath, this.getOptions(), options);\r\n            else\r\n                fs.readFile(fullpath, options || this.getOptions(), callback);\r\n\r\n            return this;\r\n        };\r\n\r\n        /**\r\n         * Synchronously reads the entire contents of the file.\r\n         *\r\n         * @param {object} [options] Options http://nodejs.org/api/fs.html\r\n         * @param {function} [callback] The callback is passed the contents of the file.\r\n         * @returns {object} Returns this if specified callback and content of the file otherwise.\r\n         */\r\n        this.readSync = function(options, callback) {\r\n            var fullpath = this.getFullPath();\r\n            return this.readFromSync(fullpath, options, callback);\r\n        };\r\n\r\n        /**\r\n         * Synchronously reads the entire contents of specified file.\r\n         *\r\n         * @param {string|fs.path} file_path File path.\r\n         * @param {object} [options] Options http://nodejs.org/api/fs.html\r\n         * @param {function} [callback] The callback is passed the contents of the file.\r\n         * @returns {object} Returns this if specified callback and content of the file otherwise.\r\n         */\r\n        this.readFromSync = function(file_path, options, callback) {\r\n\r\n            var fullpath = (typeof file_path === 'object') ? file_path.getFullPath() : file_path;\r\n\r\n            if (typeof options === 'function') {\r\n                var data = fs.readFileSync(fullpath, this.getOptions());\r\n                options(data, this);\r\n                return this;\r\n            } else if (typeof callback === 'function') {\r\n                var data = fs.readFileSync(fullpath, options || this.getOptions());\r\n                options(data, this);\r\n                return this;\r\n            } else {\r\n                return fs.readFileSync(fullpath, options || this.getOptions());\r\n            }\r\n        };\r\n\r\n        this.readBufferSync = function(file_path) {\r\n            this.buffer = this.readSync.apply(this, arguments);\r\n            return this;\r\n        };\r\n    }\r\n    FileReader.prototype = new File({},{});\r\n    processor.typeRegister('fs.filereader', FileReader);\r\n\r\n    function FileWriter(parameters, args) {\r\n\r\n        // prime is path\r\n        args.path = this.removePrime(args);\r\n        this.initialize('fs.filewriter', parameters, args);\r\n\r\n        this.write = function(data, options, callback) {\r\n            if (typeof options === 'function') {\r\n                callback = options;\r\n                options = undefined;\r\n            }\r\n            var fullpath = this.getFullPath(),\r\n                options = this.getOptions(options, true),\r\n                write_data = (typeof data === 'function') ? data() : data;\r\n\r\n            fs.writeFile(fullpath, write_data, options, callback);\r\n            return this;\r\n        };\r\n\r\n        this.writeSync = function(data, options) {\r\n            var fullpath = this.getFullPath(),\r\n                options = this.getOptions(options, true),\r\n                write_data = (typeof data === 'function') ? data() : data;\r\n\r\n            fs.writeFileSync(fullpath, write_data, options);\r\n            return this;\r\n        };\r\n\r\n        this.writeTo = function(file_path, data, options, callback) {\r\n            if (typeof options === 'function') {\r\n                callback = options;\r\n                options = undefined;\r\n            }\r\n            var fullpath = arguments.length ? file_path : this.getFullPath(),\r\n                options = this.getOptions(options, true),\r\n                write_data = (typeof data === 'function') ? data() : data;\r\n\r\n            fs.writeFile(fullpath, data, options, callback);\r\n            return this;\r\n        };\r\n\r\n        this.writeToSync = function(file_path, data, options) {\r\n            var fullpath = arguments.length ? file_path : this.getFullPath(),\r\n                options = this.getOptions(options, true),\r\n                write_data = (typeof data === 'function') ? data() : data;\r\n\r\n            fs.writeFileSync(fullpath, data, options);\r\n            return this;\r\n        };\r\n\r\n        this.writeBuffer = function(options, callback) {\r\n            if (typeof options === 'function') {\r\n                callback = options;\r\n                options = undefined;\r\n            }\r\n            return this.write(this.buffer, options, callback);\r\n        };\r\n\r\n        this.writeBufferSync = function(options, callback) {\r\n            if (typeof options === 'function') {\r\n                callback = options;\r\n                options = undefined;\r\n            }\r\n            return this.writeSync(this.buffer, options);\r\n        };\r\n\r\n        this.writeBufferTo = function(file_path, options, callback) {\r\n            if (typeof options === 'function') {\r\n                callback = options;\r\n                options = undefined;\r\n            }\r\n            return this.writeTo(this.buffer, options, callback);\r\n        };\r\n    }\r\n    FileWriter.prototype = new File({},{});\r\n    processor.typeRegister('fs.filewriter', FileWriter);\r\n\r\n    function FSConcat(parameters, args) {\r\n        this.initialize('fs.concat', parameters, args);\r\n    }\r\n    FSConcat.prototype = new NodePrototype();\r\n    processor.typeRegister('fs.concat', FSConcat);\r\n\r\n    function FSFileConcat(parameters, args) {\r\n\r\n        var prime = this.removePrime(args);\r\n        if (Array.isArray(prime)) {\r\n            // prime is array of arguments\r\n            if (prime.length && !args.src)      args.src  = prime[0];\r\n            if (prime.length > 1 && !args.path) args.path = prime[1];\r\n        } else if (prime) {\r\n            // prime is hash\r\n            if ('src'  in prime && !('src' in args))  args.src  = prime.src;\r\n            if ('dst'  in prime && !('path' in args)) args.path = prime.dst;\r\n            if ('path' in prime && !('path' in args)) args.path = prime.path;\r\n        }\r\n\r\n        // fixed parameter is a path of target file\r\n        var fixed_params = parameters['{params}'];\r\n        if (fixed_params && fixed_params.length)\r\n            if (!('path' in args)) args.path  = fixed_params[0];\r\n\r\n        this.initialize('fs.fileconcat', parameters, args);\r\n\r\n        this.startSync = function(err_callback) {\r\n            try {\r\n                var src = normalizePathList(args.src),\r\n                    dst = args.path;\r\n\r\n                if (Array.isArray(dst))\r\n                    dst = dst[0];\r\n\r\n                // to get the path value call if item is a getter function\r\n                if (typeof dst === 'function')\r\n                    dst = dst();\r\n\r\n                // cast to fs.path\r\n                if (typeof dst !== 'object' || (dst.__type !== 'fs.path' && !(dst instanceof FSPath)))\r\n                    dst = processor.create('fs.path', dst);\r\n\r\n                if (!dst.path)\r\n                    throw new TypeError('Empty destination file path!');\r\n\r\n                // prototype implementation\r\n                for(var i = 0, c = src.length; i < c; i++) {\r\n\r\n                    var src_item = src[i];\r\n\r\n                    if (!src_item.path)\r\n                        throw new TypeError('Empty source file path!');\r\n\r\n                    data = fs.readFileSync(src_item.path, {});\r\n                    if (i === 0)\r\n                        fs.writeFileSync(dst.path, data);\r\n                    else\r\n                        fs.appendFileSync(dst.path, data);\r\n                }\r\n\r\n            } catch (e) {\r\n                if (err_callback)\r\n                    err_callback(e);\r\n                else\r\n                    throw e;\r\n            }\r\n        };\r\n    }\r\n    FSFileConcat.prototype = new FSPath({},{});\r\n    processor.typeRegister('fs.fileconcat', FSFileConcat);\r\n\r\n    function FSCopy(parameters, args) {\r\n\r\n        var prime = this.removePrime(args);\r\n        if (Array.isArray(prime)) {\r\n            // prime is array of arguments\r\n            if (prime.length && !args.src)      args.src = prime[0];\r\n            if (prime.length > 1 && !args.dst)  args.dst = prime[1];\r\n        } else if (prime) {\r\n            // prime is hash\r\n            if ('src' in prime && !args.src) args.src = prime.src;\r\n            if ('dst' in prime && !args.dst) args.dst = prime.dst;\r\n        }\r\n\r\n        var fixed_params = parameters['{params}'];\r\n        if (fixed_params && fixed_params.length) {\r\n            if (!('src' in args)) args.src = fixed_params[0];\r\n            if (fixed_params.length > 1 && !('dst' in args)) args.dst = fixed_params[1];\r\n        }\r\n\r\n        this.initialize('fs.copy', parameters, args);\r\n\r\n        this.updateSync = function(err_callback) {\r\n            try {\r\n                iterateArgumentPairs(this.arguments, function(src_path, dst_path) {\r\n                    var err_fired = false;\r\n                    var read_stream = fs.createReadStream(src_path);\r\n                    read_stream.on(\"error\", function(err) {\r\n                        if (!err_fired) {\r\n                            err_fired = true;\r\n                            err_callback(err);\r\n                        }\r\n                    });\r\n                    var write_stream = fs.createWriteStream(dst_path);\r\n                    write_stream.on(\"error\", function(err) {\r\n                        if (!err_fired) {\r\n                            err_fired = true;\r\n                            err_callback(err);\r\n                        }\r\n                    });\r\n                    read_stream.pipe(write_stream);\r\n                });\r\n            } catch (e) {\r\n                if (err_callback)\r\n                    err_callback(e);\r\n                else\r\n                    throw e;\r\n            }\r\n        };\r\n    }\r\n    FSCopy.prototype = new NodePrototype();\r\n    processor.typeRegister('fs.copy', FSCopy);\r\n\r\n    function FSList(parameters, args) {\r\n        var def_params = this.splitParams(),\r\n            prime = this.removePrime(args);\r\n        // prime[0] or params[0] is filter\r\n        args.filter = (prime && prime[0]) || (def_params && def_params[0]);\r\n        // prime[1] or params[1] is path\r\n        args.path = (prime && prime[1]) || (def_params && def_params[1]);\r\n        if (typeof args.filter === 'string') {\r\n            var filter = args.filter;\r\n            if (filter[0] === '/') {\r\n                var match = /\\/(.*)\\/([gimy]*)]/.exec(filter);\r\n                if (match)\r\n                    args.filter = new RegExp(match[0], match[1]);\r\n            } else\r\n                args.filter = new RegExp(args.filter, 'i'); // default case-insensitive\r\n        }\r\n\r\n        this.initialize('fs.list', parameters, args);\r\n        this.readSync = function() {\r\n            var list = fs.readdirSync(this.getFullPath()),\r\n                filter = args.filter,\r\n                result = [];\r\n            if (!filter)\r\n                result = list;\r\n            else {\r\n                for(var i = 0, c = list.length; i < c; i++) {\r\n                    var item = list[i];\r\n                    if (filter.test(item))\r\n                        result.push(item);\r\n                }\r\n            }\r\n\r\n            // if not raw parameter cast items to fs.path\r\n            if (!this.parameters.raw)\r\n            for(var i = 0, c = result.length; i < c; i++)\r\n                result[i] = process.create('fs.path', result[i]);\r\n\r\n            return result;\r\n        };\r\n    }\r\n    FSList.prototype = new FSPath({},{});\r\n    processor.typeRegister('fs.list', FSList);\r\n\r\n    function FSWalker(parameters, args) {\r\n\r\n        var def_params = this.splitParams(),\r\n            prime = this.removePrime(args);\r\n        if (!Array.isArray(prime))\r\n            prime = [undefined, prime];\r\n        // prime[0] or params[0] is match expression\r\n        args.filter = !('filter' in args) && (prime && prime[0]) || (def_params && def_params[0]);\r\n        // prime[1] or params[1] is start path\r\n        args.path   = !('path' in args)   && (prime && prime[1]) || (def_params && def_params[1]);\r\n        // prime[2] or params[2] is flags\r\n        args.flags  = !('flags' in args)  && (prime && prime[2]) || (def_params && def_params[2]);\r\n\r\n        if (typeof args.filter === 'string') {\r\n            var filter = args.filter;\r\n            if (filter[0] === '/') {\r\n                var match = /\\/(.*)\\/([gimy]*)]/.exec(filter);\r\n                if (match)\r\n                    args.filter = new RegExp(match[0], match[1]);\r\n            } else\r\n                args.filter = new RegExp(args.filter, 'i'); // default case-insensitive\r\n        }\r\n\r\n        this.initialize('fs.walker', parameters, args);\r\n\r\n        Object.defineProperties(this, {\r\n            'filter': {\r\n                get: function() { return this.arguments.filter; },\r\n                set: function(value) { this.arguments.filter = value; }\r\n            },\r\n            'flags': {\r\n                get: function() { return this.arguments.flags; },\r\n                set: function(value) { this.arguments.flags = value; }\r\n            }\r\n        });\r\n\r\n        this.listSync = function(callback) {\r\n            // get flags\r\n            var flags, params = this.parameters, args = this.arguments;\r\n            if ('flags' in args)        flags = args.flags;\r\n            else if ('flags' in params) flags = params.flags;\r\n            else {\r\n                for(var prop in params)\r\n                if (params.hasOwnProperty(prop))\r\n                if (prop[0] === '[' && prop.slice(-1) === ']') {\r\n                    flags = prop.slice(1, -1);\r\n                    break;\r\n                }\r\n            }\r\n            flags = flags || 'f';\r\n            var d_flag = (flags.indexOf('d') >= 0),\r\n                f_flag = (flags.indexOf('f') >= 0),\r\n                raw = params.raw,\r\n                path,\r\n                stack = [this.getFullPath()],\r\n                filter = args.filter,\r\n                result = [];\r\n\r\n            while(path = stack.pop()) {\r\n\r\n                var stat = fs.statSync(path);\r\n                if (stat.isDirectory()) {\r\n                    var list = fs.readdirSync(path);\r\n                    list.reverse();\r\n                    if (path)\r\n                        for(var  i = 0, c = list.length; i < c; i++)\r\n                            list[i] = path + '/' + list[i];\r\n                    stack.push.apply(stack, list);\r\n                    if (d_flag)\r\n                        addResultItem(path);\r\n                } else if (f_flag && (!filter || filter.test(path))) {\r\n                    addResultItem(path);\r\n                }\r\n            }\r\n\r\n            function addResultItem(item) {\r\n                if (!raw)\r\n                    item = processor.create('fs.path', item);\r\n                if (!callback || callback(item))\r\n                    result.push(item)\r\n            }\r\n\r\n            return result;\r\n        };\r\n    }\r\n    FSWalker.prototype = new FSPath({},{});\r\n    processor.typeRegister('fs.walker', FSWalker);\r\n\r\n})();"]}