| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | 
							- 'use strict';
 
- const fs = require('fs');
 
- const CoaObject = require('./coaobject');
 
- /**
 
-  * COA Parameter
 
-  *
 
-  * Base class for options and arguments
 
-  *
 
-  * --------|-----|-----|-----
 
-  *         | Cmd | Opt | Arg
 
-  * --------|-----|-----|-----
 
-  *  arr    |     | ✓   | ✓
 
-  *  req    |     | ✓   | ✓
 
-  *  val    |     | ✓   | ✓
 
-  *  def    |     | ✓   | ✓
 
-  *  input  |     | ✓   | ✓
 
-  *  output |     | ✓   | ✓
 
-  *
 
-  * @class CoaParam
 
-  * @extends CoaObject
 
-  */
 
- module.exports = class CoaParam extends CoaObject {
 
-     constructor(cmd) {
 
-         super(cmd);
 
-         this._arr = false;
 
-         this._req = false;
 
-         this._val = undefined;
 
-         this._def = undefined;
 
-     }
 
-     /**
 
-      * Makes a param accepts multiple values.
 
-      * Otherwise, the value will be used by the latter passed.
 
-      *
 
-      * @returns {COA.CoaParam} - this instance (for chainability)
 
-      */
 
-     arr() {
 
-         this._arr = true;
 
-         return this;
 
-     }
 
-     /**
 
-      * Makes a param required.
 
-      *
 
-      * @returns {COA.CoaParam} - this instance (for chainability)
 
-      */
 
-     req() {
 
-         this._req = true;
 
-         return this;
 
-     }
 
-     /**
 
-      * Set a validation (or value) function for param.
 
-      * Value from command line passes through before becoming available from API.
 
-      * Using for validation and convertion simple types to any values.
 
-      *
 
-      * @param {Function} val - validating function,
 
-      *         invoked in the context of option instance
 
-      *         and has one parameter with value from command line.
 
-      * @returns {COA.CoaParam} - this instance (for chainability)
 
-      */
 
-     val(val) {
 
-         this._val = val;
 
-         return this;
 
-     }
 
-     /**
 
-      * Set a default value for param.
 
-      * Default value passed through validation function as ordinary value.
 
-      *
 
-      * @param {*} def - default value of function generator
 
-      * @returns {COA.CoaParam} - this instance (for chainability)
 
-      */
 
-     def(def) {
 
-         this._def = def;
 
-         return this;
 
-     }
 
-     /**
 
-      * Make option value inputting stream.
 
-      * It's add useful validation and shortcut for STDIN.
 
-      *
 
-      * @returns {COA.CoaParam} - this instance (for chainability)
 
-      */
 
-     input() {
 
-         process.stdin.pause();
 
-         return this
 
-             .def(process.stdin)
 
-             .val(function(v) {
 
-                 if(typeof v !== 'string')
 
-                     return v;
 
-                 if(v === '-')
 
-                     return process.stdin;
 
-                 const s = fs.createReadStream(v, { encoding : 'utf8' });
 
-                 s.pause();
 
-                 return s;
 
-             });
 
-     }
 
-     /**
 
-      * Make option value outputing stream.
 
-      * It's add useful validation and shortcut for STDOUT.
 
-      *
 
-      * @returns {COA.CoaParam} - this instance (for chainability)
 
-      */
 
-     output() {
 
-         return this
 
-             .def(process.stdout)
 
-             .val(function(v) {
 
-                 if(typeof v !== 'string')
 
-                     return v;
 
-                 if(v === '-')
 
-                     return process.stdout;
 
-                 return fs.createWriteStream(v, { encoding : 'utf8' });
 
-             });
 
-     }
 
- };
 
 
  |