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.
		
		
		
		
		
			
		
			
				
					190 lines
				
				4.4 KiB
			
		
		
			
		
	
	
					190 lines
				
				4.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fs = require('fs'); // useful stuff
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var inherits = function inherits(cls, superCtor, statics, prototype) {
							 | 
						||
| 
								 | 
							
								  // eslint-disable-next-line no-underscore-dangle
							 | 
						||
| 
								 | 
							
								  cls.super_ = superCtor;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (!prototype) {
							 | 
						||
| 
								 | 
							
								    prototype = statics;
							 | 
						||
| 
								 | 
							
								    statics = null;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (statics) {
							 | 
						||
| 
								 | 
							
								    Object.keys(statics).forEach(function (i) {
							 | 
						||
| 
								 | 
							
								      Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var properties = {
							 | 
						||
| 
								 | 
							
								    constructor: {
							 | 
						||
| 
								 | 
							
								      value: cls,
							 | 
						||
| 
								 | 
							
								      enumerable: false,
							 | 
						||
| 
								 | 
							
								      writable: false,
							 | 
						||
| 
								 | 
							
								      configurable: true
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (prototype) {
							 | 
						||
| 
								 | 
							
								    Object.keys(prototype).forEach(function (i) {
							 | 
						||
| 
								 | 
							
								      properties[i] = Object.getOwnPropertyDescriptor(prototype, i);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  cls.prototype = Object.create(superCtor.prototype, properties);
							 | 
						||
| 
								 | 
							
								}; // eslint-disable-next-line no-control-regex
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var xmlDecodeRegex = /[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/;
							 | 
						||
| 
								 | 
							
								var utils = {
							 | 
						||
| 
								 | 
							
								  nop: function nop() {},
							 | 
						||
| 
								 | 
							
								  promiseImmediate: function promiseImmediate(value) {
							 | 
						||
| 
								 | 
							
								    return new Promise(function (resolve) {
							 | 
						||
| 
								 | 
							
								      if (global.setImmediate) {
							 | 
						||
| 
								 | 
							
								        setImmediate(function () {
							 | 
						||
| 
								 | 
							
								          resolve(value);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        // poorman's setImmediate - must wait at least 1ms
							 | 
						||
| 
								 | 
							
								        setTimeout(function () {
							 | 
						||
| 
								 | 
							
								          resolve(value);
							 | 
						||
| 
								 | 
							
								        }, 1);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  inherits: inherits,
							 | 
						||
| 
								 | 
							
								  dateToExcel: function dateToExcel(d, date1904) {
							 | 
						||
| 
								 | 
							
								    return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0);
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  excelToDate: function excelToDate(v, date1904) {
							 | 
						||
| 
								 | 
							
								    var millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);
							 | 
						||
| 
								 | 
							
								    return new Date(millisecondSinceEpoch);
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  parsePath: function parsePath(filepath) {
							 | 
						||
| 
								 | 
							
								    var last = filepath.lastIndexOf('/');
							 | 
						||
| 
								 | 
							
								    return {
							 | 
						||
| 
								 | 
							
								      path: filepath.substring(0, last),
							 | 
						||
| 
								 | 
							
								      name: filepath.substring(last + 1)
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  getRelsPath: function getRelsPath(filepath) {
							 | 
						||
| 
								 | 
							
								    var path = utils.parsePath(filepath);
							 | 
						||
| 
								 | 
							
								    return "".concat(path.path, "/_rels/").concat(path.name, ".rels");
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  xmlEncode: function xmlEncode(text) {
							 | 
						||
| 
								 | 
							
								    var regexResult = xmlDecodeRegex.exec(text);
							 | 
						||
| 
								 | 
							
								    if (!regexResult) return text;
							 | 
						||
| 
								 | 
							
								    var result = '';
							 | 
						||
| 
								 | 
							
								    var escape = '';
							 | 
						||
| 
								 | 
							
								    var lastIndex = 0;
							 | 
						||
| 
								 | 
							
								    var i = regexResult.index;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (; i < text.length; i++) {
							 | 
						||
| 
								 | 
							
								      var charCode = text.charCodeAt(i);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      switch (charCode) {
							 | 
						||
| 
								 | 
							
								        case 34:
							 | 
						||
| 
								 | 
							
								          // "
							 | 
						||
| 
								 | 
							
								          escape = '"';
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case 38:
							 | 
						||
| 
								 | 
							
								          // &
							 | 
						||
| 
								 | 
							
								          escape = '&';
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case 39:
							 | 
						||
| 
								 | 
							
								          // '
							 | 
						||
| 
								 | 
							
								          escape = ''';
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case 60:
							 | 
						||
| 
								 | 
							
								          // <
							 | 
						||
| 
								 | 
							
								          escape = '<';
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case 62:
							 | 
						||
| 
								 | 
							
								          // >
							 | 
						||
| 
								 | 
							
								          escape = '>';
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case 127:
							 | 
						||
| 
								 | 
							
								          escape = '';
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        default:
							 | 
						||
| 
								 | 
							
								          {
							 | 
						||
| 
								 | 
							
								            if (charCode <= 31 && (charCode <= 8 || charCode >= 11 && charCode !== 13)) {
							 | 
						||
| 
								 | 
							
								              escape = '';
							 | 
						||
| 
								 | 
							
								              break;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            continue;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (lastIndex !== i) result += text.substring(lastIndex, i);
							 | 
						||
| 
								 | 
							
								      lastIndex = i + 1;
							 | 
						||
| 
								 | 
							
								      if (escape) result += escape;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (lastIndex !== i) return result + text.substring(lastIndex, i);
							 | 
						||
| 
								 | 
							
								    return result;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  xmlDecode: function xmlDecode(text) {
							 | 
						||
| 
								 | 
							
								    return text.replace(/&([a-z]*);/g, function (c) {
							 | 
						||
| 
								 | 
							
								      switch (c) {
							 | 
						||
| 
								 | 
							
								        case '<':
							 | 
						||
| 
								 | 
							
								          return '<';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case '>':
							 | 
						||
| 
								 | 
							
								          return '>';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case '&':
							 | 
						||
| 
								 | 
							
								          return '&';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case ''':
							 | 
						||
| 
								 | 
							
								          return '\'';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        case '"':
							 | 
						||
| 
								 | 
							
								          return '"';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        default:
							 | 
						||
| 
								 | 
							
								          return c;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  validInt: function validInt(value) {
							 | 
						||
| 
								 | 
							
								    var i = parseInt(value, 10);
							 | 
						||
| 
								 | 
							
								    return !Number.isNaN(i) ? i : 0;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  isDateFmt: function isDateFmt(fmt) {
							 | 
						||
| 
								 | 
							
								    if (!fmt) {
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								    } // must remove all chars inside quotes and []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    fmt = fmt.replace(/\[[^\]]*]/g, '');
							 | 
						||
| 
								 | 
							
								    fmt = fmt.replace(/"[^"]*"/g, ''); // then check for date formatting chars
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var result = fmt.match(/[ymdhMsb]+/) !== null;
							 | 
						||
| 
								 | 
							
								    return result;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  fs: {
							 | 
						||
| 
								 | 
							
								    exists: function exists(path) {
							 | 
						||
| 
								 | 
							
								      return new Promise(function (resolve) {
							 | 
						||
| 
								 | 
							
								        fs.access(path, fs.constants.F_OK, function (err) {
							 | 
						||
| 
								 | 
							
								          resolve(!err);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  toIsoDateString: function toIsoDateString(dt) {
							 | 
						||
| 
								 | 
							
								    return dt.toIsoString().subsstr(0, 10);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								module.exports = utils;
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=utils.js.map
							 |