You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					97 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					97 lines
				
				2.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = formatDuration;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _index = _interopRequireDefault(require("../locale/en-US/index.js"));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var defaultFormat = ['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds'];
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @name formatDuration
							 | 
						||
| 
								 | 
							
								 * @category Common Helpers
							 | 
						||
| 
								 | 
							
								 * @summary Formats a duration in human-readable format
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @description
							 | 
						||
| 
								 | 
							
								 * Return human-readable duration string i.e. "9 months 2 days"
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param {Duration} duration - the duration to format
							 | 
						||
| 
								 | 
							
								 * @param {Object} [options] - an object with options.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 * @param {string[]} [options.format=['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']] - the array of units to format
							 | 
						||
| 
								 | 
							
								 * @param {boolean} [options.zero=false] - should be zeros be included in the output?
							 | 
						||
| 
								 | 
							
								 * @param {string} [options.delimiter=' '] - delimiter string
							 | 
						||
| 
								 | 
							
								 * @returns {string} the formatted date string
							 | 
						||
| 
								 | 
							
								 * @throws {TypeError} 1 argument required
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @example
							 | 
						||
| 
								 | 
							
								 * // Format full duration
							 | 
						||
| 
								 | 
							
								 * formatDuration({
							 | 
						||
| 
								 | 
							
								 *   years: 2,
							 | 
						||
| 
								 | 
							
								 *   months: 9,
							 | 
						||
| 
								 | 
							
								 *   weeks: 1,
							 | 
						||
| 
								 | 
							
								 *   days: 7,
							 | 
						||
| 
								 | 
							
								 *   hours: 5,
							 | 
						||
| 
								 | 
							
								 *   minutes: 9,
							 | 
						||
| 
								 | 
							
								 *   seconds: 30
							 | 
						||
| 
								 | 
							
								 * })
							 | 
						||
| 
								 | 
							
								 * //=> '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @example
							 | 
						||
| 
								 | 
							
								 * // Format partial duration
							 | 
						||
| 
								 | 
							
								 * formatDuration({ months: 9, days: 2 })
							 | 
						||
| 
								 | 
							
								 * //=> '9 months 2 days'
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @example
							 | 
						||
| 
								 | 
							
								 * // Customize the format
							 | 
						||
| 
								 | 
							
								 * formatDuration(
							 | 
						||
| 
								 | 
							
								 *   {
							 | 
						||
| 
								 | 
							
								 *     years: 2,
							 | 
						||
| 
								 | 
							
								 *     months: 9,
							 | 
						||
| 
								 | 
							
								 *     weeks: 1,
							 | 
						||
| 
								 | 
							
								 *     days: 7,
							 | 
						||
| 
								 | 
							
								 *     hours: 5,
							 | 
						||
| 
								 | 
							
								 *     minutes: 9,
							 | 
						||
| 
								 | 
							
								 *     seconds: 30
							 | 
						||
| 
								 | 
							
								 *   },
							 | 
						||
| 
								 | 
							
								 *   { format: ['months', 'weeks'] }
							 | 
						||
| 
								 | 
							
								 * ) === '9 months 1 week'
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @example
							 | 
						||
| 
								 | 
							
								 * // Customize the zeros presence
							 | 
						||
| 
								 | 
							
								 * formatDuration({ years: 0, months: 9 })
							 | 
						||
| 
								 | 
							
								 * //=> '9 months'
							 | 
						||
| 
								 | 
							
								 * formatDuration({ years: 0, months: 9 }, null, { zero: true })
							 | 
						||
| 
								 | 
							
								 * //=> '0 years 9 months'
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @example
							 | 
						||
| 
								 | 
							
								 * // Customize the delimiter
							 | 
						||
| 
								 | 
							
								 * formatDuration({ years: 2, months: 9, weeks: 3 }, { delimiter: ', ' })
							 | 
						||
| 
								 | 
							
								 * //=> '2 years, 9 months, 3 weeks'
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function formatDuration(duration) {
							 | 
						||
| 
								 | 
							
								  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (arguments.length < 1) {
							 | 
						||
| 
								 | 
							
								    throw new TypeError("1 argument required, but only ".concat(arguments.length, " present"));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var format = options.format || defaultFormat;
							 | 
						||
| 
								 | 
							
								  var locale = options.locale || _index.default;
							 | 
						||
| 
								 | 
							
								  var zero = options.zero || false;
							 | 
						||
| 
								 | 
							
								  var delimiter = options.delimiter || ' ';
							 | 
						||
| 
								 | 
							
								  var result = format.reduce(function (acc, unit) {
							 | 
						||
| 
								 | 
							
								    var token = "x".concat(unit.replace(/(^.)/, function (m) {
							 | 
						||
| 
								 | 
							
								      return m.toUpperCase();
							 | 
						||
| 
								 | 
							
								    }));
							 | 
						||
| 
								 | 
							
								    var addChunk = typeof duration[unit] === 'number' && (zero || duration[unit]);
							 | 
						||
| 
								 | 
							
								    return addChunk ? acc.concat(locale.formatDistance(token, duration[unit])) : acc;
							 | 
						||
| 
								 | 
							
								  }, []).join(delimiter);
							 | 
						||
| 
								 | 
							
								  return result;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = exports.default;
							 |